diff --git a/supernode/index.html b/supernode/index.html index 4abf163..183b165 100644 --- a/supernode/index.html +++ b/supernode/index.html @@ -10315,7 +10315,12 @@ readAllDB('kBucketStore') .then(dbObject => { if (typeof dbObject=="object") { - dbObject.map(dbObj=>{ + let su_flo_addr_array = localbitcoinplusplus.master_configurations.supernodesPubKeys + .map(pubk=>bitjs.FLO_TEST.pubkey2address(pubk)); + // Prevent supernode to re-added in kbucket + dbObject + .filter(f=>!su_flo_addr_array.includes(f.data.id)) + .map(dbObj=>{ this.addNewUserNodeInKbucket(blockchain, flo_addr, dbObj.data, KB); }); } else { @@ -11060,12 +11065,14 @@ return callback(true); } }); - } - return callback(false); + } else { + return callback(false); + } } } + } else { + return callback(false); } - return callback(false); }, async receive_rpc_response(request) { @@ -14723,13 +14730,25 @@ case "addNewKbucketNode": try { - const newKbucketObjectArr = res_obj.params[0]; - newKbucketObjectArr.newKbucketNode.map(newKbucketObject=>{ - newKbucketObject_id_array = Object.values(newKbucketObject.id); - newKbucketObject_idu8 = new Uint8Array(newKbucketObject_id_array); - localbitcoinplusplus.kademlia.addNewUserNodeInKbucketAndDB("FLO_TEST", - newKbucketObject_idu8, newKbucketObject.data); - }); + localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.globalParams.senderFloId) + .then(my_closest_su=>{ + if (localbitcoinplusplus.wallets.my_local_flo_address !== my_closest_su[0].data.id) return; + + const newKbucketObjectObj = res_obj.params[0]; + if (typeof newKbucketObjectObj.newKbucketNode == "object") { + newKbucketObject = newKbucketObjectObj.newKbucketNode; + + newKbucketObject_id_array = Object.values(newKbucketObject.id); + newKbucketObject_idu8 = new Uint8Array(newKbucketObject_id_array); + localbitcoinplusplus.kademlia.addNewUserNodeInKbucketAndDB("FLO_TEST", + newKbucketObject_idu8, newKbucketObject.data); + } else { + let mss = `WARNING: Failed to add ${res_obj.globalParams.senderFloId} to KBucket.`; + showMessage(mss) + console.warn(mss); + } + }); + } catch (error) { console.error(error); } @@ -15877,27 +15896,29 @@ const MY_LOCAL_FLO_PUBLIC_KEY = localbitcoinplusplus.wallets.my_local_flo_public_key = idbData.myLocalFLOPublicKey; - // add/update yourself in your kbucket - await localbitcoinplusplus.kademlia.addNewUserNodeInKbucketAndDB( - "FLO_TEST", MY_LOCAL_FLO_ADDRESS, - { id: MY_LOCAL_FLO_ADDRESS }); - // restore k-bucket - // const dbObj = await localbitcoinplusplus.kademlia.restoreKbucket(MY_LOCAL_FLO_ADDRESS, "FLO_TEST", KBucket); - // const dbObjSuKB = await localbitcoinplusplus.kademlia.restoreKbucket(MY_LOCAL_FLO_ADDRESS, "FLO_TEST", supernodeKBucket); - - // if (typeof dbObj=="object") { - // let addNewKNode = localbitcoinplusplus.rpc.prototype - // .send_rpc - // .call(this, "addNewKbucketNode", { - // newKbucketNode: dbObj - // }); - // console.log(addNewKNode); - - // doSend(addNewKNode); - // } else { - // console.warn(`Failed to restore kBucket.`); - // } + const dbObj = await localbitcoinplusplus.kademlia.restoreKbucket(MY_LOCAL_FLO_ADDRESS, "FLO_TEST", KBucket); + + // Send your id to Supernode kbucket + if (!localbitcoinplusplus.master_configurations.supernodesPubKeys + .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { + let kbuck = localbitcoinplusplus.kademlia.floIdToKbucketId("FLO_TEST", MY_LOCAL_FLO_ADDRESS); + readDB('kBucketStore', kbuck).then(userKBData=>{ + if(typeof userKBData == "undefined") { + msf = `WARNING: Failed to determine KBucket Id and hence failed to send Kbucket Id to Supernode.` + showMessage(msf) + throw new Error(msf) + }; + let addNewKNode = localbitcoinplusplus.rpc.prototype + .send_rpc + .call(this, "addNewKbucketNode", { + newKbucketNode: userKBData + }); + console.log(addNewKNode); + + doSend(addNewKNode); + }) + } readDB('userPublicData', MY_LOCAL_FLO_ADDRESS).then(function ( pubic_data_response) {