resolved code to used in prod or dev

This commit is contained in:
Abhishek Sinha 2020-03-20 21:20:47 +05:30
parent d6de1052d3
commit a9346d79c6
14 changed files with 227 additions and 205035 deletions

22
.gitignore vendored
View File

@ -1,22 +1,2 @@
json-rpc/ supernode/
supernode/playground/
playground
supernode/test/in
supernode/test/in/index1.html
supernode/test/in/index2.html
supernode/test/in/index3.html
supernode/test/in/index4.html
supernode/flosend.html
supernode/index1 (copy).html
supernode/websocket_chat
supernode/cash_payments_handler2.html
.vscode/
supernode/test/
supernode/server/web/supernode2.html
supernode/server/web/supernode3.html
supernode/server/web/supernode4.html
supernode/server/web/supernode5.html
supernode/server/web/supernode6.html
supernode/server/web/playground

View File

@ -8965,8 +8965,7 @@
bitjs.priv = 0xef; bitjs.priv = 0xef;
bitjs.pub = 0x73; bitjs.pub = 0x73;
} else { } else {
bitjs.priv = 0xef; throw new Error("Unknown Asset");
bitjs.pub = 0x6f;
} }
/* public vars */ /* public vars */
@ -11378,21 +11377,68 @@
}; };
Object.defineProperty(localbitcoinplusplus, "server", { Object.defineProperty(localbitcoinplusplus, "server", {
value: {
//btc_mainnet: "https://blockexplorer.com",
btc_mainnet: "https://insight.bitpay.com",
//btc_testnet: "https://testnet.blockexplorer.com",
btc_testnet: "https://test-insight.bitpay.com",
flo_mainnet: "https://flosight.duckdns.org",
flo_testnet: "https://testnet-flosight.duckdns.org",
//flo_testnet: "https://testnet.flocha.in",
flo_api_mainnet: "https://ranchimallflo.duckdns.org",
flo_api_testnet: "https://ranchimallflo-testnet.duckdns.org",
//flo_api_testnet: "ranchimall1.duckdns.org:5109"
},
writable: false,
configurable: false,
enumerable: false
});
const ENVR = 'TEST'; // LIVE, TEST
const WS = 'ws';
if(ENVR === 'LIVE') {
Object.defineProperty(localbitcoinplusplus, "RM_FLO_SENDING_ADDR", {
value: "FGcDVp9f3eqDcXXqXwxhpEoCReihzGFQCo",
writable: false,
configurable: false,
enumerable: true
});
Object.defineProperty(localbitcoinplusplus, "BASE_BLOCKCHAIN", {
value: "FLO",
writable: false,
configurable: false,
enumerable: true
});
Object.defineProperty(localbitcoinplusplus, "assets", {
value: { value: {
//btc_mainnet: "https://blockexplorer.com", BTC: "BTC",
btc_mainnet: "https://insight.bitpay.com", FLO: "FLO"
//btc_testnet: "https://testnet.blockexplorer.com",
btc_testnet: "https://test-insight.bitpay.com",
flo_mainnet: "http://flosight.duckdns.org",
//flo_testnet: "http://testnet-flosight.duckdns.org"
flo_testnet: "https://testnet.flocha.in",
flo_api_testnet: "https://ranchimallflo-testnet.duckdns.org",
}, },
writable: false, writable: false,
configurable: false, configurable: false,
enumerable: false enumerable: false
}); });
} else {
Object.defineProperty(localbitcoinplusplus, "RM_FLO_SENDING_ADDR", {
value: "ocKKEivXC3TA8yf3ZEyh2kRMDgSh99y1a7",
writable: false,
configurable: false,
enumerable: true
});
Object.defineProperty(localbitcoinplusplus, "BASE_BLOCKCHAIN", {
value: "FLO_TEST",
writable: false,
configurable: false,
enumerable: true
});
Object.defineProperty(localbitcoinplusplus, "assets", { Object.defineProperty(localbitcoinplusplus, "assets", {
value: { value: {
BTC: "BTC_TEST", BTC: "BTC_TEST",
@ -11403,12 +11449,7 @@
enumerable: false enumerable: false
}); });
Object.defineProperty(localbitcoinplusplus, "RM_FLO_SENDING_ADDR", { }
value: "ocKKEivXC3TA8yf3ZEyh2kRMDgSh99y1a7",
writable: false,
configurable: false,
enumerable: true
});
localbitcoinplusplus.privateKey = { localbitcoinplusplus.privateKey = {
isPrivateKey: function(key) { isPrivateKey: function(key) {
@ -11963,44 +12004,50 @@
}; };
localbitcoinplusplus.actions = { localbitcoinplusplus.actions = {
parse_flo_comments: async function(callback) { parse_flo_comments: async function(callback) {
text = `masterFLOPubKey=03EA5E2CAB18DA585400D6EC569438D415FAF200528E05D0E2B9BEAA2B5C3DCA90 text = `masterFLOPubKey=03EA5E2CAB18DA585400D6EC569438D415FAF200528E05D0E2B9BEAA2B5C3DCA90
#!#tradableAsset1=BTC,FLO,BTC_TEST,FLO_TEST#!#tradableAsset2=INR,USD, #!#tradableAsset1=BTC,FLO,BTC_TEST,FLO_TEST#!#tradableAsset2=INR,USD,
#!#validTradingAmount=10,50,100,#!#btcTradeMargin=5000 #!#validTradingAmount=10,50,100,#!#btcTradeMargin=5000
#!#MaxBackups=1 #!#MaxBackups=1
#!#miners_fee={"btc":0.0003, "flo":0.0003} #!#miners_fee={"btc":0.0003, "flo":0.0003}
#!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53, #!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53,
03F7493F11B8E44B9798CD434D20FBE7FA34B9779D144984889D11A17C56A18742,039B4AA00DBFC0A6631DE6DA83526611A0E6B857D3579DF840BBDEAE8B6898E3B6, 03F7493F11B8E44B9798CD434D20FBE7FA34B9779D144984889D11A17C56A18742,039B4AA00DBFC0A6631DE6DA83526611A0E6B857D3579DF840BBDEAE8B6898E3B6,
03C8E3836C9A77E2AF03D4265D034BA85732738919708EAF6A16382195AE796EDF,0349B08AA1ABDCFFB6D78CD7C949665AD2FF065EA02B3C6C47A5E9592C9A1C6BCB, 03C8E3836C9A77E2AF03D4265D034BA85732738919708EAF6A16382195AE796EDF,0349B08AA1ABDCFFB6D78CD7C949665AD2FF065EA02B3C6C47A5E9592C9A1C6BCB,
026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F, 026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F,
#!#assets={"BTC":"BTC_TEST","FLO":"FLO_TEST"} #!#externalFiles={"d3js":"58f54395efa8346e8e94d12609770f66b916897e7f4e05f6c98780cffa5c70a3"}
#!#externalFiles={"d3js":"58f54395efa8346e8e94d12609770f66b916897e7f4e05f6c98780cffa5c70a3"} #!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":"johnDoe@upi",
#!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":"johnDoe@upi", "03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":"janeDoe@upi"}
"03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":"janeDoe@upi"} #!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1:9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"},
#!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1","port":"9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"}, "ranchimall2":{"ip":"127.0.0.1:9112","kbucketId":"oTWjPupy3Z7uMdPcu5uXd521HBkcsLuSuM"},
"ranchimall2":{"ip":"127.0.0.1","port":"9112","kbucketId":"oTWjPupy3Z7uMdPcu5uXd521HBkcsLuSuM"}, "ranchimall3":{"ip":"127.0.0.1:9113","kbucketId":"odYA6KagmbokSh9GY7yAfeTUZRtZLwecY1"},
"ranchimall3":{"ip":"127.0.0.1","port":"9113","kbucketId":"odYA6KagmbokSh9GY7yAfeTUZRtZLwecY1"}, "ranchimall4":{"ip":"127.0.0.1:9114","kbucketId":"oJosrve9dBv2Hj2bfncxv2oEpTysg3Wejv"},
"ranchimall4":{"ip":"127.0.0.1","port":"9114","kbucketId":"oJosrve9dBv2Hj2bfncxv2oEpTysg3Wejv"}, "ranchimall5":{"ip":"127.0.0.1:9115","kbucketId":"oMhv5sAzqg77sYHxmUGZWKRrVo4P4JQduS"},
"ranchimall5":{"ip":"127.0.0.1","port":"9115","kbucketId":"oMhv5sAzqg77sYHxmUGZWKRrVo4P4JQduS"}, "ranchimall6":{"ip":"127.0.0.1:9116","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"}}`;
"ranchimall6":{"ip":"127.0.0.1","port":"9116","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"}}`; return callback(text);
return callback(text);
const master_data = await helper_functions
.ajaxGet(`${localbitcoinplusplus.server.flo_testnet}/api/txs/?address=${localbitcoinplusplus.RM_FLO_SENDING_ADDR}`);
if(typeof master_data==="object" && typeof master_data.txs==="object") {
let text = '';
let tx_cmnt_arr = [];
for(txt of master_data.txs) { if(ENVR==='LIVE') {
if(txt.vin[0].addr === localbitcoinplusplus.RM_FLO_SENDING_ADDR) { master_data = await helper_functions
if(txt.floData.length===0) break; .ajaxGet(`${localbitcoinplusplus.server.flo_mainnet}/api/txs/?address=${localbitcoinplusplus.RM_FLO_SENDING_ADDR}`);
tx_cmnt_arr.push(txt.floData); } else {
} master_data = await helper_functions
} .ajaxGet(`${localbitcoinplusplus.server.flo_testnet}/api/txs/?address=${localbitcoinplusplus.RM_FLO_SENDING_ADDR}`);
tx_cmnt_arr.reverse().map(m=>text += m.replace('text:', ''));
callback(text);
} }
},
if(typeof master_data==="object" && typeof master_data.txs==="object") {
let text = '';
let tx_cmnt_arr = [];
for(txt of master_data.txs) {
if(txt.vin[0].addr === localbitcoinplusplus.RM_FLO_SENDING_ADDR) {
if(txt.floData.length===0) break;
tx_cmnt_arr.push(txt.floData);
}
}
tx_cmnt_arr.reverse().map(m=>text += m.replace('text:', ''));
callback(text);
}
},
fetch_configs: function(callback) { fetch_configs: function(callback) {
this.parse_flo_comments(function(floData) { this.parse_flo_comments(function(floData) {
@ -12062,7 +12109,7 @@
wallets.prototype = { wallets.prototype = {
ecparams: EllipticCurve.getSECCurveByName("secp256k1"), ecparams: EllipticCurve.getSECCurveByName("secp256k1"),
generateFloKeys: function(pk, crypto = "FLO_TEST") { generateFloKeys: function(pk, crypto = localbitcoinplusplus.BASE_BLOCKCHAIN) {
if (crypto == "BTC") { if (crypto == "BTC") {
privKeyPrefix = 0x80; //mainnet 0x80, testnet: 0xEF privKeyPrefix = 0x80; //mainnet 0x80, testnet: 0xEF
networkVersion = 0x00; //mainnet 0x23, testnet: 0x6F networkVersion = 0x00; //mainnet 0x23, testnet: 0x6F
@ -12110,7 +12157,7 @@
address address
}; };
}, },
sign: function(msg, privateKeyHex, crypto = "FLO_TEST") { sign: function(msg, privateKeyHex, crypto = localbitcoinplusplus.BASE_BLOCKCHAIN) {
if (crypto == "BTC") { if (crypto == "BTC") {
privKeyPrefix = 0x80; //mainnet 0x80, testnet: 0xEF privKeyPrefix = 0x80; //mainnet 0x80, testnet: 0xEF
networkVersion = 0x00; //mainnet 0x23, testnet: 0x6F networkVersion = 0x00; //mainnet 0x23, testnet: 0x6F
@ -12124,8 +12171,7 @@
privKeyPrefix = 0xef; privKeyPrefix = 0xef;
networkVersion = 0x73; networkVersion = 0x73;
} else { } else {
privKeyPrefix = 0xef; throw new Error('Unknown Crypto asset');
networkVersion = 0x73;
} }
Bitcoin.ECKey.privateKeyPrefix = privKeyPrefix; Bitcoin.ECKey.privateKeyPrefix = privKeyPrefix;
@ -12565,13 +12611,13 @@
try { try {
const master_flo_pubKey = const master_flo_pubKey =
localbitcoinplusplus.master_configurations.masterFLOPubKey; localbitcoinplusplus.master_configurations.masterFLOPubKey;
const master_flo_addr = bitjs.FLO_TEST.pubkey2address( const master_flo_addr = bitjs[localbitcoinplusplus.BASE_BLOCKCHAIN].pubkey2address(
master_flo_pubKey master_flo_pubKey
); );
if (typeof master_flo_addr !== "string") return reject(false); if (typeof master_flo_addr !== "string") return reject(false);
const SuKBucketId = localbitcoinplusplus.kademlia.floIdToKbucketId( const SuKBucketId = localbitcoinplusplus.kademlia.floIdToKbucketId(
"FLO_TEST", localbitcoinplusplus.BASE_BLOCKCHAIN,
master_flo_addr master_flo_addr
); );
const SukbOptions = { localNodeId: SuKBucketId }; const SukbOptions = { localNodeId: SuKBucketId };
window.supernodeKBucket = new BuildKBucket(SukbOptions); window.supernodeKBucket = new BuildKBucket(SukbOptions);
@ -12638,7 +12684,7 @@
Object.entries(supernodeSeedsObj).map(seedObj => { Object.entries(supernodeSeedsObj).map(seedObj => {
let kbuck = this.addNewUserNodeInKbucket( let kbuck = this.addNewUserNodeInKbucket(
"FLO_TEST", localbitcoinplusplus.BASE_BLOCKCHAIN,
seedObj[1].kbucketId, seedObj[1].kbucketId,
{ id: seedObj[1].kbucketId }, { id: seedObj[1].kbucketId },
supernodeKBucket supernodeKBucket
@ -12714,7 +12760,7 @@
let isFloIdUint8 = flo_addr instanceof Uint8Array; let isFloIdUint8 = flo_addr instanceof Uint8Array;
if (!isFloIdUint8) { if (!isFloIdUint8) {
flo_addr = localbitcoinplusplus.kademlia.floIdToKbucketId( flo_addr = localbitcoinplusplus.kademlia.floIdToKbucketId(
"FLO_TEST", localbitcoinplusplus.BASE_BLOCKCHAIN,
flo_addr flo_addr
); );
} }
@ -12930,7 +12976,7 @@
} }
let db; let db;
const DBName = "paymentsHandlerDB"; const DBName = "paymentsHandlerDBRemote";
const request = window.indexedDB.open(DBName, 1); const request = window.indexedDB.open(DBName, 1);
request.onerror = function(event) { request.onerror = function(event) {
@ -13540,8 +13586,7 @@
//if (request_array.includes(msgObj.method)) return resolve(true); //if (request_array.includes(msgObj.method)) return resolve(true);
if (onMessageAcceptTest("beforePrivateKeyEntry", {"methodList":request_array,"method":msgObj.method})) return resolve(true); if (onMessageAcceptTest("beforePrivateKeyEntry", {"methodList":request_array,"method":msgObj.method})) return resolve(true);
//const getFloId = bitjs.FLO_TEST.pubkey2address(msgObj.nodePubKey); const getFloId = bitjs[localbitcoinplusplus.BASE_BLOCKCHAIN].pubkey2address(msgObj.nodePubKey);
const getFloId = bitjs[localbitcoinplusplus.assets.FLO].pubkey2address(msgObj.nodePubKey);
if (!onMessageAcceptTest("senderAddressMatchesSignerAddress", {"senderFloId":msgObj.globalParams.senderFloId,"calculatedFloId":getFloId})) { if (!onMessageAcceptTest("senderAddressMatchesSignerAddress", {"senderFloId":msgObj.globalParams.senderFloId,"calculatedFloId":getFloId})) {
showMessage( showMessage(
@ -13679,7 +13724,7 @@
localbitcoinplusplus.master_configurations.supernodeSeeds; localbitcoinplusplus.master_configurations.supernodeSeeds;
let supernodeSeedsArray = Object.values(supernodeSeedsObj); let supernodeSeedsArray = Object.values(supernodeSeedsObj);
supernodeSeedsArray.map(async wsUri => { supernodeSeedsArray.map(async wsUri => {
localbitcoinplusplus.supernode_conns[wsUri.kbucketId] = await initializeWebSocket (`ws://${wsUri.ip}:${wsUri.port}`); localbitcoinplusplus.supernode_conns[wsUri.kbucketId] = await initializeWebSocket (`${WS}://${wsUri.ip}`);
startWebSocket(localbitcoinplusplus.supernode_conns[wsUri.kbucketId]); startWebSocket(localbitcoinplusplus.supernode_conns[wsUri.kbucketId]);
}); });
} }
@ -13760,7 +13805,7 @@
const RM_WALLET = new localbitcoinplusplus.wallets; const RM_WALLET = new localbitcoinplusplus.wallets;
Array.from(recv_deposit_btn).forEach(function(element) { Array.from(recv_deposit_btn).forEach(function(element) {
element.addEventListener("click", async function(evt) { element.addEventListener("click", async function(evt) {
//evt.preventDefault(); evt.preventDefault();
const deposit_id = this.value; const deposit_id = this.value;
const req_info = document.getElementById(`depositSpan${deposit_id}`); const req_info = document.getElementById(`depositSpan${deposit_id}`);
const req_info_arr = req_info.value.split("_"); const req_info_arr = req_info.value.split("_");
@ -13810,12 +13855,21 @@
parent_supernode: websocket_name, parent_supernode: websocket_name,
} }
const txidUrlDeposit = `${localbitcoinplusplus.server let txidUrlDeposit = '';
if(ENVR==="LIVE") {
txidUrlDeposit = `${localbitcoinplusplus.server
.flo_api_mainnet}/api/v1.0/getTransactionDetails/${flo_txid}`;
} else {
txidUrlDeposit = `${localbitcoinplusplus.server
.flo_api_testnet}/api/v1.0/getTransactionDetails/${flo_txid}`; .flo_api_testnet}/api/v1.0/getTransactionDetails/${flo_txid}`;
}
let n=1; let n=1;
(async function validateTxidInBlockchain() { (async function validateTxidInBlockchain() {
// Validate Flo txid // Validate Flo txid
await delay(120000); await delay(60000);
const validate_flo_txid = await helper_functions.ajaxGet(txidUrlDeposit); const validate_flo_txid = await helper_functions.ajaxGet(txidUrlDeposit);
console.log(validate_flo_txid); console.log(validate_flo_txid);
if(typeof validate_flo_txid == "object" if(typeof validate_flo_txid == "object"
@ -13885,7 +13939,12 @@
const token_name_radio = document.querySelector('input[name="transfer_token_name"]:checked').value; const token_name_radio = document.querySelector('input[name="transfer_token_name"]:checked').value;
const flo_comment = `transfer ${token_amount} ${token_name_radio}# to ${token_receiver}`; const flo_comment = `transfer ${token_amount} ${token_name_radio}# to ${token_receiver}`;
const token_balance_url = `${localbitcoinplusplus.server.flo_api_testnet}/api/v1.0/getFloAddressBalance?token=${token_name_radio}&floAddress=${token_sender}`; let token_balance_url = '';
if(ENVR==='LIVE') {
token_balance_url = `${localbitcoinplusplus.server.flo_api_mainnet}/api/v1.0/getFloAddressBalance?token=${token_name_radio}&floAddress=${token_sender}`;
} else {
token_balance_url = `${localbitcoinplusplus.server.flo_api_testnet}/api/v1.0/getFloAddressBalance?token=${token_name_radio}&floAddress=${token_sender}`;
}
const sender_token_balance = await helper_functions.ajaxGet(token_balance_url); const sender_token_balance = await helper_functions.ajaxGet(token_balance_url);
let err_msg = ''; let err_msg = '';

View File

@ -551,7 +551,7 @@
</pre> </pre>
</div> </div>
<div class="w3-button w3-teal w3-xlarge" onclick="displayMessages()"> <div class="w3-button w3-teal w3-xlarge" onclick="displayMessages()">
0
</div> </div>
</div> </div>
@ -11518,6 +11518,7 @@
-----------------------------------------------------------------------------------> ----------------------------------------------------------------------------------->
<script type="text/javascript"> <script type="text/javascript">
var localbitcoinplusplus = { var localbitcoinplusplus = {
wallets: {}, wallets: {},
trade: {}, trade: {},
@ -11527,34 +11528,58 @@
Object.defineProperty(localbitcoinplusplus, "server", { Object.defineProperty(localbitcoinplusplus, "server", {
value: { value: {
//btc_mainnet: "https://blockexplorer.com", //btc_mainnet: "https://blockexplorer.com",
btc_mainnet: "https://insight.bitpay.com", btc_mainnet: "https://insight.bitpay.com",
//btc_testnet: "https://testnet.blockexplorer.com", //btc_testnet: "https://testnet.blockexplorer.com",
btc_testnet: "https://test-insight.bitpay.com", btc_testnet: "https://test-insight.bitpay.com",
flo_mainnet: "http://flosight.duckdns.org", flo_mainnet: "https://flosight.duckdns.org",
//flo_testnet: "http://testnet-flosight.duckdns.org" flo_testnet: "https://testnet-flosight.duckdns.org",
flo_testnet: "https://testnet.flocha.in", //flo_testnet: "https://testnet.flocha.in",
flo_api_testnet: "https://ranchimallflo-testnet.duckdns.org", flo_api_mainnet: "https://ranchimallflo.duckdns.org",
//flo_api_testnet: "ranchimall1.duckdns.org:5109" flo_api_testnet: "https://ranchimallflo-testnet.duckdns.org",
//flo_api_testnet: "ranchimall1.duckdns.org:5109"
}, },
writable: false, writable: false,
configurable: false, configurable: false,
enumerable: false enumerable: false
}); });
Object.defineProperty(localbitcoinplusplus, "RM_FLO_SENDING_ADDR", { const ENVR = 'TEST'; // LIVE, TEST
value: "ocKKEivXC3TA8yf3ZEyh2kRMDgSh99y1a7", const WS = 'ws';
writable: false,
configurable: false,
enumerable: true
});
Object.defineProperty(localbitcoinplusplus, "BASE_BLOCKCHAIN", { if(ENVR === 'LIVE') {
value: "FLO",
writable: false, Object.defineProperty(localbitcoinplusplus, "RM_FLO_SENDING_ADDR", {
configurable: false, value: "FGcDVp9f3eqDcXXqXwxhpEoCReihzGFQCo",
enumerable: true writable: false,
}); configurable: false,
enumerable: true
});
Object.defineProperty(localbitcoinplusplus, "BASE_BLOCKCHAIN", {
value: "FLO",
writable: false,
configurable: false,
enumerable: true
});
} else {
Object.defineProperty(localbitcoinplusplus, "RM_FLO_SENDING_ADDR", {
value: "ocKKEivXC3TA8yf3ZEyh2kRMDgSh99y1a7",
writable: false,
configurable: false,
enumerable: true
});
Object.defineProperty(localbitcoinplusplus, "BASE_BLOCKCHAIN", {
value: "FLO_TEST",
writable: false,
configurable: false,
enumerable: true
});
}
localbitcoinplusplus.privateKey = { localbitcoinplusplus.privateKey = {
isPrivateKey: function(key) { isPrivateKey: function(key) {
@ -12106,15 +12131,24 @@
#!#externalFiles={"d3js":"58f54395efa8346e8e94d12609770f66b916897e7f4e05f6c98780cffa5c70a3"} #!#externalFiles={"d3js":"58f54395efa8346e8e94d12609770f66b916897e7f4e05f6c98780cffa5c70a3"}
#!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":"johnDoe@upi", #!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":"johnDoe@upi",
"03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":"janeDoe@upi"} "03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":"janeDoe@upi"}
#!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1","port":"9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"}, #!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1:9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"},
"ranchimall2":{"ip":"127.0.0.1","port":"9112","kbucketId":"oTWjPupy3Z7uMdPcu5uXd521HBkcsLuSuM"}, "ranchimall2":{"ip":"127.0.0.1:9112","kbucketId":"oTWjPupy3Z7uMdPcu5uXd521HBkcsLuSuM"},
"ranchimall3":{"ip":"127.0.0.1","port":"9113","kbucketId":"odYA6KagmbokSh9GY7yAfeTUZRtZLwecY1"}, "ranchimall3":{"ip":"127.0.0.1:9113","kbucketId":"odYA6KagmbokSh9GY7yAfeTUZRtZLwecY1"},
"ranchimall4":{"ip":"127.0.0.1","port":"9114","kbucketId":"oJosrve9dBv2Hj2bfncxv2oEpTysg3Wejv"}, "ranchimall4":{"ip":"127.0.0.1:9114","kbucketId":"oJosrve9dBv2Hj2bfncxv2oEpTysg3Wejv"},
"ranchimall5":{"ip":"127.0.0.1","port":"9115","kbucketId":"oMhv5sAzqg77sYHxmUGZWKRrVo4P4JQduS"}, "ranchimall5":{"ip":"127.0.0.1:9115","kbucketId":"oMhv5sAzqg77sYHxmUGZWKRrVo4P4JQduS"},
"ranchimall6":{"ip":"127.0.0.1","port":"9116","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"}}`; "ranchimall6":{"ip":"127.0.0.1:9116","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"}}`;
return callback(text); return callback(text);
const master_data = await helper_functions
.ajaxGet(`${localbitcoinplusplus.server.flo_testnet}/api/txs/?address=${localbitcoinplusplus.RM_FLO_SENDING_ADDR}`); let master_data = '';
if(ENVR==='LIVE') {
master_data = await helper_functions
.ajaxGet(`${localbitcoinplusplus.server.flo_mainnet}/api/txs/?address=${localbitcoinplusplus.RM_FLO_SENDING_ADDR}`);
} else {
master_data = await helper_functions
.ajaxGet(`${localbitcoinplusplus.server.flo_testnet}/api/txs/?address=${localbitcoinplusplus.RM_FLO_SENDING_ADDR}`);
}
if(typeof master_data==="object" && typeof master_data.txs==="object") { if(typeof master_data==="object" && typeof master_data.txs==="object") {
let text = ''; let text = '';
let tx_cmnt_arr = []; let tx_cmnt_arr = [];
@ -12881,7 +12915,7 @@
updateinDB("myClosestSupernodes", { updateinDB("myClosestSupernodes", {
id: index + 1, id: index + 1,
ip: nearestSupernodeAddress.ip, ip: nearestSupernodeAddress.ip,
port: nearestSupernodeAddress.port, //port: nearestSupernodeAddress.port,
trader_flo_address: nearestSupernodeAddress.kbucketId, trader_flo_address: nearestSupernodeAddress.kbucketId,
is_live: null is_live: null
}).then(updatedClosestSupernodes => { }).then(updatedClosestSupernodes => {
@ -13028,7 +13062,9 @@
}; };
</script> </script>
<!-- Encryption --> <!-- E
const WS = 'wss';ncryption -->
<script> <script>
localbitcoinplusplus.encrypt = { localbitcoinplusplus.encrypt = {
p: BigInteger( p: BigInteger(
@ -13778,7 +13814,8 @@
const getFLOId = wsSupsObj.trader_flo_address; const getFLOId = wsSupsObj.trader_flo_address;
if (getFLOId === localbitcoinplusplus.wallets.my_local_flo_address if (getFLOId === localbitcoinplusplus.wallets.my_local_flo_address
|| typeof getFLOId !== "string") return; || typeof getFLOId !== "string") return;
const back_ws_url = `ws://${wsSupsObj.ip}:${wsSupsObj.port}`; //const back_ws_url = `ws://${wsSupsObj.ip}:${wsSupsObj.port}`;
const back_ws_url = `${WS}://${wsSupsObj.ip}`;
let currenctBackupWsList = Object.keys( let currenctBackupWsList = Object.keys(
localbitcoinplusplus.backupWS localbitcoinplusplus.backupWS
@ -13803,8 +13840,6 @@
if(reqFloIdIndex>=highestIndexOfConnectedSupernode) return; if(reqFloIdIndex>=highestIndexOfConnectedSupernode) return;
} }
if ( if (
typeof localbitcoinplusplus.backupWS[getFLOId] === "object" && typeof localbitcoinplusplus.backupWS[getFLOId] === "object" &&
localbitcoinplusplus.backupWS[getFLOId].ws_connection.readyState == 1 localbitcoinplusplus.backupWS[getFLOId].ws_connection.readyState == 1
@ -14201,7 +14236,8 @@
|| sn!==msg_obj.subject_flo_id) || sn!==msg_obj.subject_flo_id)
&& websocket.readyState===1) { && websocket.readyState===1) {
const url = `ws://${localbitcoinplusplus.myClosestSupernodes[sn].ip}:${localbitcoinplusplus.myClosestSupernodes[sn].port}`; //const url = `ws://${localbitcoinplusplus.myClosestSupernodes[sn].ip}:${localbitcoinplusplus.myClosestSupernodes[sn].port}`;
const url = `${WS}://${localbitcoinplusplus.myClosestSupernodes[sn].ip}`;
tempWS[sn] = new WebSocket(url); tempWS[sn] = new WebSocket(url);
tempWS[sn].onopen = async function(evt) { tempWS[sn].onopen = async function(evt) {
@ -14301,7 +14337,8 @@
} }
// If a ws conn does not exist with sn, start a temporary conn // If a ws conn does not exist with sn, start a temporary conn
const url = `ws://${localbitcoinplusplus.myClosestSupernodes[sn].ip}:${localbitcoinplusplus.myClosestSupernodes[sn].port}`; //const url = `ws://${localbitcoinplusplus.myClosestSupernodes[sn].ip}:${localbitcoinplusplus.myClosestSupernodes[sn].port}`;
const url = `${WS}://${localbitcoinplusplus.myClosestSupernodes[sn].ip}`;
tempWS[sn] = new WebSocket(url); tempWS[sn] = new WebSocket(url);
tempWS[sn].onopen = async function(evt) { tempWS[sn].onopen = async function(evt) {
@ -14364,7 +14401,8 @@
&& sn!==msg_obj.data.subject_flo_id && sn!==msg_obj.data.subject_flo_id
&& websocket.readyState===1) { && websocket.readyState===1) {
const switchMyWS = new backupSupernodesWebSocketObject(); const switchMyWS = new backupSupernodesWebSocketObject();
const url = `ws://${localbitcoinplusplus.myClosestSupernodes[sn].ip}:${localbitcoinplusplus.myClosestSupernodes[sn].port}`; //const url = `ws://${localbitcoinplusplus.myClosestSupernodes[sn].ip}:${localbitcoinplusplus.myClosestSupernodes[sn].port}`;
const url = `${WS}://${localbitcoinplusplus.myClosestSupernodes[sn].ip}`;
tempWSL[sn] = new WebSocket(url); tempWSL[sn] = new WebSocket(url);
tempWSL[sn].onopen = async function(evt) { tempWSL[sn].onopen = async function(evt) {
@ -18482,8 +18520,14 @@
if (typeof user_deposit_req!=="object" if (typeof user_deposit_req!=="object"
|| user_deposit_req===null) return; || user_deposit_req===null) return;
const txidUrlDeposit = `${localbitcoinplusplus.server let txidUrlDeposit = '';
if(ENVR==="LIVE") {
txidUrlDeposit = `${localbitcoinplusplus.server
.flo_api_mainnet}/api/v1.0/getTransactionDetails/${params.flo_txid}`;
} else {
txidUrlDeposit = `${localbitcoinplusplus.server
.flo_api_testnet}/api/v1.0/getTransactionDetails/${params.flo_txid}`; .flo_api_testnet}/api/v1.0/getTransactionDetails/${params.flo_txid}`;
}
// Validate Flo txid // Validate Flo txid
const validate_flo_txid = await helper_functions.ajaxGet(txidUrlDeposit); const validate_flo_txid = await helper_functions.ajaxGet(txidUrlDeposit);
@ -20578,7 +20622,8 @@
); );
}); });
await startWebSocket(`ws://${wsUri[0].ip}:${wsUri[0].port}`); //await startWebSocket(`ws://${wsUri[0].ip}:${wsUri[0].port}`);
await startWebSocket(`${WS}://${wsUri[0].ip}`);
RM_WALLET.distributeShamirsSecretShares(newKeys.privateKeyWIF) RM_WALLET.distributeShamirsSecretShares(newKeys.privateKeyWIF)
.then(() => privateKeyBuilder()) .then(() => privateKeyBuilder())
@ -20700,7 +20745,8 @@
}); });
// Connect with primary supernodes // Connect with primary supernodes
await startWebSocket(`ws://${wsUri[0].ip}:${wsUri[0].port}`); //await startWebSocket(`ws://${wsUri[0].ip}:${wsUri[0].port}`);
await startWebSocket(`${WS}://${wsUri[0].ip}`);
// rebuild private key // rebuild private key
await privateKeyBuilder(); await privateKeyBuilder();
@ -20869,7 +20915,8 @@
const my_closest_su_list = await readAllDB("myClosestSupernodes"); const my_closest_su_list = await readAllDB("myClosestSupernodes");
const disconnected_su = my_closest_su_list.filter( const disconnected_su = my_closest_su_list.filter(
(my_closest_su_url_list, index) => { (my_closest_su_url_list, index) => {
let my_closest_su_url = `ws://${my_closest_su_url_list.ip}:${my_closest_su_url_list.port}`; //let my_closest_su_url = `ws://${my_closest_su_url_list.ip}:${my_closest_su_url_list.port}`;
let my_closest_su_url = `${WS}://${my_closest_su_url_list.ip}`;
return my_closest_su_url == ws_url; return my_closest_su_url == ws_url;
} }
); );
@ -20939,7 +20986,8 @@
let nextClosestSupernodeElem = myClosestSupernodesArray.filter( let nextClosestSupernodeElem = myClosestSupernodesArray.filter(
(wew, index) => { (wew, index) => {
let ww = `ws://${wew.ip}:${wew.port}`; // let ww = `ws://${wew.ip}:${wew.port}`;
let ww = `${WS}://${wew.ip}`;
if (typeof z == "boolean" && z) { if (typeof z == "boolean" && z) {
z = false; z = false;
if ( if (
@ -20962,7 +21010,8 @@
return Promise.reject(ms); return Promise.reject(ms);
} }
ideal_supernode = `ws://${nextClosestSupernodeElem[0].ip}:${nextClosestSupernodeElem[0].port}`; //ideal_supernode = `ws://${nextClosestSupernodeElem[0].ip}:${nextClosestSupernodeElem[0].port}`;
ideal_supernode = `${WS}://${nextClosestSupernodeElem[0].ip}`;
await startWebSocket(ideal_supernode); await startWebSocket(ideal_supernode);
@ -22953,9 +23002,8 @@
typeof newSu == "object" && typeof newSu == "object" &&
typeof newSu[0].trader_flo_address == "string" typeof newSu[0].trader_flo_address == "string"
) { ) {
await startWebSocket( //await startWebSocket(`ws://${newSu[0].ip}:${newSu[0].port}`);
`ws://${newSu[0].ip}:${newSu[0].port}` await startWebSocket(`${WS}://${newSu[0].ip}`);
);
showMssage(`INFO: ${su_db_data.server_msg}`); showMssage(`INFO: ${su_db_data.server_msg}`);
} else { } else {
alert(`INFO: Please reload the page.`); alert(`INFO: Please reload the page.`);
@ -25006,9 +25054,8 @@
typeof newSu == "object" && typeof newSu == "object" &&
typeof newSu[0].trader_flo_address == "string" typeof newSu[0].trader_flo_address == "string"
) { ) {
await startWebSocket( //await startWebSocket(`ws://${newSu[0].ip}:${newSu[0].port}`);
`ws://${newSu[0].ip}:${newSu[0].port}` await startWebSocket(`${WS}://${newSu[0].ip}`);
);
showMessage(`INFO: ${su_db_data.server_msg}`); showMessage(`INFO: ${su_db_data.server_msg}`);
} else { } else {
alert(`INFO: Please reload the page.`); alert(`INFO: Please reload the page.`);

Binary file not shown.

View File

@ -1,96 +0,0 @@
/*
* Copyright (c) 2014 Cesanta Software Limited
* All rights reserved
*/
#include "mongoose.h"
static sig_atomic_t s_signal_received = 0;
static const char *s_http_port = "9116";
static struct mg_serve_http_opts s_http_server_opts;
static void signal_handler(int sig_num) {
signal(sig_num, signal_handler); // Reinstantiate signal handler
s_signal_received = sig_num;
}
static int is_websocket(const struct mg_connection *nc) {
return nc->flags & MG_F_IS_WEBSOCKET;
}
static void broadcast(struct mg_connection *nc, const struct mg_str msg) {
struct mg_connection *c;
printf("(Broadcast) \t[%d]\n", (int)msg.len);
for (c = mg_next(nc->mgr, NULL); c != NULL; c = mg_next(nc->mgr, c)) {
if (c == nc) continue; /* Don't send to the sender. */
mg_send_websocket_frame(c, WEBSOCKET_OP_TEXT, msg.p, (int)msg.len);
}
}
void unicast(struct mg_connection *nc, const struct mg_str msg) {
struct mg_connection *c;
char recipient_floID[35];
snprintf(recipient_floID, sizeof(recipient_floID), "%.*s", 34, &msg.p[1]);
printf("%s \t[%d]\n",recipient_floID, (int)msg.len - 36); /* Local echo. */
for (c = mg_next(nc->mgr, NULL); c != NULL; c = mg_next(nc->mgr, c)) {
if (!strcmp(c->floID,recipient_floID)) /* Send to receiver */
mg_send_websocket_frame(c, WEBSOCKET_OP_TEXT, &msg.p[36], (int)msg.len - 36);
}
}
static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
switch (ev) {
case MG_EV_WEBSOCKET_HANDSHAKE_DONE: {
/* New websocket connection. Tell everybody. */
break;
}
case MG_EV_WEBSOCKET_FRAME: {
struct websocket_message *wm = (struct websocket_message *) ev_data;
/* New websocket message. Tell everybody. */
struct mg_str d = {(char *) wm->data, wm->size};
if (d.p[0] == '$')
snprintf(nc->floID, sizeof(nc->floID), "%.*s", 34, &d.p[1]);
else if ((d.p[0] == '>'))
unicast(nc, d);
else
broadcast(nc, d);
break;
}
case MG_EV_HTTP_REQUEST: {
mg_serve_http(nc, (struct http_message *) ev_data, s_http_server_opts);
break;
}
case MG_EV_CLOSE: {
/* Disconnect. Tell everybody. */
if (is_websocket(nc)) {
//broadcast(nc, mg_mk_str("-- left"));
}
break;
}
}
}
int main(void) {
struct mg_mgr mgr;
struct mg_connection *nc;
signal(SIGTERM, signal_handler);
signal(SIGINT, signal_handler);
setvbuf(stdout, NULL, _IOLBF, 0);
setvbuf(stderr, NULL, _IOLBF, 0);
mg_mgr_init(&mgr, NULL);
nc = mg_bind(&mgr, s_http_port, ev_handler);
mg_set_protocol_http_websocket(nc);
s_http_server_opts.document_root = "web"; // Serve current directory
s_http_server_opts.enable_directory_listing = "no";
printf("Started on port %s\n", s_http_port);
while (s_signal_received == 0) {
mg_mgr_poll(&mgr, 200);
}
mg_mgr_free(&mgr);
return 0;
}

View File

@ -1,36 +0,0 @@
SOURCES = $(PROG).c ../mongoose.c
CFLAGS = -g -W -Wall -Werror -I../ -Wno-unused-function $(CFLAGS_EXTRA) $(MODULE_CFLAGS)
all: $(PROG)
ifeq ($(OS), Windows_NT)
# TODO(alashkin): enable SSL in Windows
CFLAGS += -lws2_32
CC = gcc
else
CFLAGS += -pthread
endif
ifeq ($(SSL_LIB),openssl)
CFLAGS += -DMG_ENABLE_SSL -lssl -lcrypto
endif
ifeq ($(SSL_LIB), krypton)
CFLAGS += -DMG_ENABLE_SSL ../../../krypton/krypton.c -I../../../krypton
endif
ifeq ($(SSL_LIB),mbedtls)
CFLAGS += -DMG_ENABLE_SSL -DMG_SSL_IF=MG_SSL_IF_MBEDTLS -DMG_SSL_MBED_DUMMY_RANDOM -lmbedcrypto -lmbedtls -lmbedx509
endif
ifdef ASAN
CC = clang
CFLAGS += -fsanitize=address
endif
$(PROG): $(SOURCES)
$(CC) $(SOURCES) -o $@ $(CFLAGS)
$(PROG).exe: $(SOURCES)
cl $(SOURCES) /I../.. /MD /Fe$@
clean:
rm -rf *.gc* *.dSYM *.exe *.obj *.o a.out $(PROG)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff