added function to deposit and withdraw assets
This commit is contained in:
parent
52375fc212
commit
6615e3067c
@ -45,6 +45,11 @@
|
|||||||
<div id="localbitcoinuserdiv"></div>
|
<div id="localbitcoinuserdiv"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h5>Asset Box</h5>
|
||||||
|
<div class="box">
|
||||||
|
<div id="asset_box"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<h5>Sync</h5>
|
<h5>Sync</h5>
|
||||||
<div class="box">
|
<div class="box">
|
||||||
<div id="syncNodes"></div>
|
<div id="syncNodes"></div>
|
||||||
@ -7885,6 +7890,7 @@
|
|||||||
this.valid_assets = ["BTC", "INR"];
|
this.valid_assets = ["BTC", "INR"];
|
||||||
this.currency = null;
|
this.currency = null;
|
||||||
this.valid_currencies = ["BTC", "INR"];
|
this.valid_currencies = ["BTC", "INR"];
|
||||||
|
this.valid_trading_amount = [10000, 50000, 100000];
|
||||||
this.buy_price = null;
|
this.buy_price = null;
|
||||||
this.buyer_public_key = null;
|
this.buyer_public_key = null;
|
||||||
this.buyer_key_signature = null;
|
this.buyer_key_signature = null;
|
||||||
@ -7894,6 +7900,8 @@
|
|||||||
this.super_nodes_array = null;
|
this.super_nodes_array = null;
|
||||||
this.buy_list = null;
|
this.buy_list = null;
|
||||||
this.sell_list = null;
|
this.sell_list = null;
|
||||||
|
this.user_flo_address = null;
|
||||||
|
this.receiving_address = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Trade.prototype = {
|
Trade.prototype = {
|
||||||
@ -7905,7 +7913,7 @@
|
|||||||
this.level = level;
|
this.level = level;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
validate_order(order_type, product, currency, buy_price, buyer_public_key, buyer_key_signature,
|
validate_order(order_type, user_flo_address, receiving_address, product, currency, buy_price, buyer_public_key, buyer_key_signature,
|
||||||
order_validator_public_key) {
|
order_validator_public_key) {
|
||||||
|
|
||||||
if (this.valid_order_type.indexOf(order_type) >= 0) {
|
if (this.valid_order_type.indexOf(order_type) >= 0) {
|
||||||
@ -7913,6 +7921,16 @@
|
|||||||
} else {
|
} else {
|
||||||
this.errors.push("Inavlid trade type value.");
|
this.errors.push("Inavlid trade type value.");
|
||||||
}
|
}
|
||||||
|
if (user_flo_address.trim()!=="") {
|
||||||
|
this.user_flo_address= user_flo_address;
|
||||||
|
} else {
|
||||||
|
this.errors.push("No receiving BTC or Bank address provided.");
|
||||||
|
}
|
||||||
|
if (receiving_address.trim()!=="") {
|
||||||
|
this.receiving_address= receiving_address;
|
||||||
|
} else {
|
||||||
|
this.errors.push("No receiving BTC or Bank address provided.");
|
||||||
|
}
|
||||||
if (this.valid_assets.indexOf(product) >= 0) {
|
if (this.valid_assets.indexOf(product) >= 0) {
|
||||||
this.product = product;
|
this.product = product;
|
||||||
} else {
|
} else {
|
||||||
@ -7949,9 +7967,9 @@
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
place_order(order_type, product, currency, buy_price, buyer_public_key, buyer_key_signature,
|
place_order(order_type, user_flo_address, receiving_address, product, currency, buy_price, buyer_public_key, buyer_key_signature,
|
||||||
order_validator_public_key) {
|
order_validator_public_key) {
|
||||||
var is_valid_order = this.validate_order(order_type, product, currency, buy_price, buyer_public_key,
|
var is_valid_order = this.validate_order(order_type, user_flo_address, receiving_address, product, currency, buy_price, buyer_public_key,
|
||||||
buyer_key_signature, order_validator_public_key);
|
buyer_key_signature, order_validator_public_key);
|
||||||
if (is_valid_order === true) {
|
if (is_valid_order === true) {
|
||||||
|
|
||||||
@ -7959,12 +7977,15 @@
|
|||||||
|
|
||||||
let placeNewOrder = localbitcoinplusplus.rpc.prototype.send_rpc.call(this, this.rpc_job, {
|
let placeNewOrder = localbitcoinplusplus.rpc.prototype.send_rpc.call(this, this.rpc_job, {
|
||||||
"order_type": this.order_type,
|
"order_type": this.order_type,
|
||||||
|
"user_flo_address": this.user_flo_address,
|
||||||
"product": this.product,
|
"product": this.product,
|
||||||
"currency": this.currency,
|
"currency": this.currency,
|
||||||
"buy_price": this.buy_price,
|
"buy_price": this.buy_price,
|
||||||
"buyer_public_key": this.buyer_public_key,
|
"buyer_public_key": this.buyer_public_key,
|
||||||
"buyer_key_signature": this.buyer_key_signature,
|
"buyer_key_signature": this.buyer_key_signature,
|
||||||
"order_validator_public_key": this.order_validator_public_key}
|
"order_validator_public_key": this.order_validator_public_key,
|
||||||
|
"receiving_address": this.receiving_address
|
||||||
|
}
|
||||||
);
|
);
|
||||||
return placeNewOrder;
|
return placeNewOrder;
|
||||||
} else if (typeof is_valid_order == "object") {
|
} else if (typeof is_valid_order == "object") {
|
||||||
@ -7985,22 +8006,78 @@
|
|||||||
if (buyOrdersList.length>0) {
|
if (buyOrdersList.length>0) {
|
||||||
let list10ksell = sellOrdersList.filter(function(sellOrder) {
|
let list10ksell = sellOrdersList.filter(function(sellOrder) {
|
||||||
return sellOrder.buy_price == 10000;
|
return sellOrder.buy_price == 10000;
|
||||||
|
}).sort(function(trustLevelA, trustLevelB) {
|
||||||
|
if (trustLevelA.rand_id > trustLevelB.rand_id) { return 1;
|
||||||
|
} else { return -1; }
|
||||||
});
|
});
|
||||||
let list50ksell = sellOrdersList.filter(function(sellOrder) {
|
let list50ksell = sellOrdersList.filter(function(sellOrder) {
|
||||||
return sellOrder.buy_price == 50000;
|
return sellOrder.buy_price == 50000;
|
||||||
|
}).sort(function(trustLevelA, trustLevelB) {
|
||||||
|
if (trustLevelA.rand_id > trustLevelB.rand_id) { return 1;
|
||||||
|
} else { return -1; }
|
||||||
});
|
});
|
||||||
let list100ksell = sellOrdersList.filter(function(sellOrder) {
|
let list100ksell = sellOrdersList.filter(function(sellOrder) {
|
||||||
return sellOrder.buy_price == 100000;
|
return sellOrder.buy_price == 100000;
|
||||||
|
}).sort(function(trustLevelA, trustLevelB) {
|
||||||
|
if (trustLevelA.rand_id > trustLevelB.rand_id) { return 1;
|
||||||
|
} else { return -1; }
|
||||||
});
|
});
|
||||||
let list10kbuy = buyOrdersList.filter(function(buyOrder) {
|
let list10kbuy = buyOrdersList.filter(function(buyOrder) {
|
||||||
return buyOrder.buy_price == 10000;
|
return buyOrder.buy_price == 10000;
|
||||||
|
}).sort(function(trustLevelA, trustLevelB) {
|
||||||
|
if (trustLevelA.rand_id > trustLevelB.rand_id) { return 1;
|
||||||
|
} else { return -1; }
|
||||||
});
|
});
|
||||||
let list50kbuy = buyOrdersList.filter(function(buyOrder) {
|
let list50kbuy = buyOrdersList.filter(function(buyOrder) {
|
||||||
return buyOrder.buy_price == 50000;
|
return buyOrder.buy_price == 50000;
|
||||||
|
}).sort(function(trustLevelA, trustLevelB) {
|
||||||
|
if (trustLevelA.rand_id > trustLevelB.rand_id) { return 1;
|
||||||
|
} else { return -1; }
|
||||||
});
|
});
|
||||||
let list100kbuy = buyOrdersList.filter(function(buyOrder) {
|
let list100kbuy = buyOrdersList.filter(function(buyOrder) {
|
||||||
return buyOrder.buy_price == 100000;
|
return buyOrder.buy_price == 100000;
|
||||||
});
|
}).sort(function(trustLevelA, trustLevelB) {
|
||||||
|
if (trustLevelA.rand_id > trustLevelB.rand_id) { return 1;
|
||||||
|
} else { return -1; }
|
||||||
|
});
|
||||||
|
|
||||||
|
let list10k = [list10kbuy, list10ksell];
|
||||||
|
let list50k = [list50kbuy, list50ksell];
|
||||||
|
let list100k = [list100kbuy, list100ksell];
|
||||||
|
|
||||||
|
let all_trade_list = [list10k, list50k, list100k];
|
||||||
|
|
||||||
|
all_trade_list.forEach(function(listXk) {
|
||||||
|
let iter = listXk[0].length < listXk[1].length ? listXk[0].length:listXk[1].length;
|
||||||
|
console.log(iter);
|
||||||
|
|
||||||
|
for (let index = 0; index < iter; index++) {
|
||||||
|
let buy_element = listXk[0][index];
|
||||||
|
let sell_element = listXk[1][index];
|
||||||
|
|
||||||
|
let buyers_job = `${buy_element.user_flo_address} to pay ${buy_element.currency} ${buy_element.buy_price} to bank address "${sell_element.receiving_address}"`;
|
||||||
|
let sellers_job = `${sell_element.user_flo_address} to pay X Bitcoins to address ${buy_element.receiving_address}`;
|
||||||
|
|
||||||
|
doSend(buyers_job);
|
||||||
|
doSend(sellers_job);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// for list10k
|
||||||
|
// let iter = list10k[0].length < list10k[1].length ? list10k[0].length:list10k[1].length;
|
||||||
|
// console.log(iter);
|
||||||
|
|
||||||
|
// for (let index = 0; index < iter; index++) {
|
||||||
|
// const buy_element = list10k[0][index];
|
||||||
|
// const sell_element = list10k[1][index];
|
||||||
|
|
||||||
|
// let buyers_job = `${buy_element.user_flo_address} to pay ${buy_element.currency} ${buy_element.buy_price} to bank address "${sell_element.receiving_address}"`;
|
||||||
|
// let sellers_job = `${sell_element.user_flo_address} to pay X Bitcoins to address ${buy_element.receiving_address}`;
|
||||||
|
|
||||||
|
// doSend(buyers_job);
|
||||||
|
// doSend(sellers_job);
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -8043,6 +8120,35 @@
|
|||||||
this.sell_list = params;
|
this.sell_list = params;
|
||||||
addDB("sellOrders", params);
|
addDB("sellOrders", params);
|
||||||
callback();
|
callback();
|
||||||
|
},
|
||||||
|
findTrader(traderAssetType, traderAssetAmount) {
|
||||||
|
if (this.valid_assets.includes(traderAssetType) && this.valid_trading_amount.includes(traderAssetAmount)) {
|
||||||
|
if(traderAssetType=="BTC") {
|
||||||
|
return "1TRADERBITCOINADDRESS";
|
||||||
|
} else if(traderAssetType=="INR") {
|
||||||
|
return "TRADERBANKACCOUNT";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
depositAsset(assetType, amount, userFLOaddress, callback) {
|
||||||
|
if(!this.valid_assets.includes(assetType)) {
|
||||||
|
throw new Error("Invalid asset error");
|
||||||
|
} else if(parseFloat(amount)<=0) {
|
||||||
|
throw new Error("Invalid amount error.");
|
||||||
|
} else if(userFLOaddress.length < 0) {
|
||||||
|
throw new Error("User address required.");
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(userFLOaddress);
|
||||||
|
|
||||||
|
// Determine the level of the user and check if he/she can trade for 'amount'
|
||||||
|
// in params above
|
||||||
|
|
||||||
|
// Find a person selling BTC in lieu of Cash or Find a person buying BTC in lieu of Cash
|
||||||
|
let counterTraderAsset = assetType=="BTC" ? "INR":"BTC";
|
||||||
|
let getCounterTraderAccountAddress = this.findTrader(counterTraderAsset, amount);
|
||||||
|
callback(getCounterTraderAccountAddress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@ -8288,7 +8394,7 @@
|
|||||||
break;
|
break;
|
||||||
case "trade_sell":
|
case "trade_sell":
|
||||||
var response_from_sever = orderRPC.receive_rpc_response(JSON.stringify(res_obj));
|
var response_from_sever = orderRPC.receive_rpc_response(JSON.stringify(res_obj));
|
||||||
doSend(response_from_sever); // send response to client
|
//doSend(response_from_sever); // send response to client
|
||||||
break;
|
break;
|
||||||
case "broadcastBlockDataToAll":
|
case "broadcastBlockDataToAll":
|
||||||
var response_from_sever = orderRPC.receive_rpc_response(JSON.stringify(res_obj));
|
var response_from_sever = orderRPC.receive_rpc_response(JSON.stringify(res_obj));
|
||||||
@ -8592,6 +8698,10 @@
|
|||||||
buyul.onclick = function(event) {
|
buyul.onclick = function(event) {
|
||||||
let target = getEventTarget(event);
|
let target = getEventTarget(event);
|
||||||
let intAmount = parseFloat(target.innerHTML.match(/\d+/)[0]); // Amount of INR/BTC/whatever in integer
|
let intAmount = parseFloat(target.innerHTML.match(/\d+/)[0]); // Amount of INR/BTC/whatever in integer
|
||||||
|
let buyer_btc_address = prompt("Please enter your Bitcoin address.");
|
||||||
|
if (typeof buyer_btc_address == null || buyer_btc_address.trim().length<1) {
|
||||||
|
throw new Error("Bitcoin address cannot be empty.");
|
||||||
|
}
|
||||||
let signing_object = {
|
let signing_object = {
|
||||||
flo_address: idbData.myLocalFLOAddress,
|
flo_address: idbData.myLocalFLOAddress,
|
||||||
order_type: "buy",
|
order_type: "buy",
|
||||||
@ -8601,7 +8711,11 @@
|
|||||||
};
|
};
|
||||||
// Get private key here
|
// Get private key here
|
||||||
//let trader_signature = RM_WALLET.sign(JSON.stringify(signing_object), privateKeyWIF);
|
//let trader_signature = RM_WALLET.sign(JSON.stringify(signing_object), privateKeyWIF);
|
||||||
let buytrade = RM_TRADE.place_order("buy", "BTC", "INR", intAmount, idbData.myLocalFLOPublicKey,
|
|
||||||
|
if (typeof idbData.myLocalFLOAddress == undefined || idbData.myLocalFLOAddress.trim()=="") {
|
||||||
|
throw new Error("You must have a BTC address to receive Bitcoin. No Bitcoin address found in database.");
|
||||||
|
}
|
||||||
|
let buytrade = RM_TRADE.place_order("buy", idbData.myLocalFLOAddress, buyer_btc_address, "BTC", "INR", intAmount, idbData.myLocalFLOPublicKey,
|
||||||
"trader_signature", "order_validator_public_key");
|
"trader_signature", "order_validator_public_key");
|
||||||
console.log(buytrade);
|
console.log(buytrade);
|
||||||
doSend(buytrade);
|
doSend(buytrade);
|
||||||
@ -8609,12 +8723,24 @@
|
|||||||
|
|
||||||
sellul.onclick = function(event) {
|
sellul.onclick = function(event) {
|
||||||
let target = getEventTarget(event);
|
let target = getEventTarget(event);
|
||||||
|
let seller_bank_details = prompt("Please provide your full bank details.");
|
||||||
|
|
||||||
|
if (typeof idbData.myLocalFLOAddress == undefined || idbData.myLocalFLOAddress.trim()=="") {
|
||||||
|
throw new Error("You must have a FLO address to trade. No such address found in database.");
|
||||||
|
}
|
||||||
|
if (typeof seller_bank_details == null || seller_bank_details.trim().length <1) {
|
||||||
|
throw new Error("Bank detail information cannot be empty.");
|
||||||
|
}
|
||||||
|
|
||||||
let intAmount = parseFloat(target.innerHTML.match(/\d+/)[0]); // Amount of INR/BTC/whatever in integer
|
let intAmount = parseFloat(target.innerHTML.match(/\d+/)[0]); // Amount of INR/BTC/whatever in integer
|
||||||
var buytrade = RM_TRADE.place_order("sell", "BTC", "INR", intAmount, idbData.myLocalFLOPublicKey,
|
let buytrade = RM_TRADE.place_order("sell", idbData.myLocalFLOAddress, seller_bank_details.trim(), "BTC", "INR", intAmount, idbData.myLocalFLOPublicKey,
|
||||||
"trader_signature", "order_validator_public_key");
|
"trader_signature", "order_validator_public_key");
|
||||||
doSend(buytrade);
|
doSend(buytrade);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deposit / Withdraw asset
|
||||||
|
deopositWithdrawAsset(idbData.myLocalFLOAddress);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -8707,6 +8833,71 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<!-- Deposit/Withdraw asset -->
|
||||||
|
<script>
|
||||||
|
const deopositWithdrawAsset = function(userFLOaddress) {
|
||||||
|
let asset_box = document.getElementById("asset_box");
|
||||||
|
|
||||||
|
// Create a select input for asset type
|
||||||
|
let assetTypeInput = document.createElement('select');
|
||||||
|
assetTypeInput.id = "select_assets_type";
|
||||||
|
asset_box.appendChild(assetTypeInput);
|
||||||
|
let assetTypeSelectArray = RM_TRADE.valid_assets;
|
||||||
|
assetTypeSelectArray.unshift("Select Asset Type");
|
||||||
|
for (var i = 0; i < assetTypeSelectArray.length; i++) {
|
||||||
|
var option = document.createElement("option");
|
||||||
|
option.value = assetTypeSelectArray[i];
|
||||||
|
option.text = assetTypeSelectArray[i];
|
||||||
|
assetTypeInput.appendChild(option);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a select input for trade amount
|
||||||
|
let tradeAmountSelect = document.createElement('select');
|
||||||
|
tradeAmountSelect.id = "trade_amount_select";
|
||||||
|
asset_box.appendChild(tradeAmountSelect);
|
||||||
|
let tradeAmountSelectArray = RM_TRADE.valid_trading_amount;
|
||||||
|
tradeAmountSelectArray.unshift("Select Asset Amount");
|
||||||
|
for (var i = 0; i < tradeAmountSelectArray.length; i++) {
|
||||||
|
var option = document.createElement("option");
|
||||||
|
option.value = tradeAmountSelectArray[i];
|
||||||
|
option.text = tradeAmountSelectArray[i];
|
||||||
|
tradeAmountSelect.appendChild(option);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a deposit and withdraw button
|
||||||
|
let depositAssetButton = document.createElement('button');
|
||||||
|
let depositAssetButtonText = document.createTextNode('Deposit');
|
||||||
|
depositAssetButton.appendChild(depositAssetButtonText);
|
||||||
|
let withdrawAssetButton = document.createElement('button');
|
||||||
|
let withdrawAssetButtonText = document.createTextNode('Deposit');
|
||||||
|
withdrawAssetButton.appendChild(withdrawAssetButtonText);
|
||||||
|
asset_box.appendChild(depositAssetButton);
|
||||||
|
asset_box.appendChild(withdrawAssetButton);
|
||||||
|
|
||||||
|
depositAssetButton.addEventListener('click', function() {
|
||||||
|
let asset_type = assetTypeInput.value;
|
||||||
|
let tradeAmount = parseFloat(tradeAmountSelect.value);
|
||||||
|
if(typeof userFLOaddress == undefined || userFLOaddress.trim().length<1) {
|
||||||
|
throw new Errror("Invalid or empty user FLO address.");
|
||||||
|
}
|
||||||
|
if (RM_TRADE.valid_trading_amount.includes(tradeAmount) && RM_TRADE.valid_assets.includes(asset_type)) {
|
||||||
|
RM_TRADE.depositAsset(asset_type, tradeAmount, userFLOaddress, function(res) {
|
||||||
|
console.log(res);
|
||||||
|
if (res.length>0) {
|
||||||
|
//let counterTraderAccountAddress = document.createTextNode(res);
|
||||||
|
let counterTraderAccountAddress = `
|
||||||
|
<p><strong>Please pay the amount to following address:</strong></p>
|
||||||
|
<p>${res}</p>
|
||||||
|
`;
|
||||||
|
asset_box.insertAdjacentHTML('beforeend', counterTraderAccountAddress);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
throw new Error("Error while depositing your address.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
Loading…
Reference in New Issue
Block a user