X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fjs%2Findex.js;h=252eec1ced72cca6fb04ba09a80898b9713f021c;hb=5c6e875f2dc7dbeb9237e8dc2e4e250fa45ed2fd;hp=e8072e4df2780d3b7b5911ab2b73ae274d45206f;hpb=d1d8699fc4f1599de39e643acc1d8be52114dd58;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/src/js/index.js b/src/js/index.js index e8072e4..252eec1 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1140,11 +1140,40 @@ } } + // RSK values are different + if (networkIsRsk()) { + var pubkeyBuffer = keyPair.getPublicKeyBuffer(); + var ethPubkey = libs.ethUtil.importPublic(pubkeyBuffer); + var addressBuffer = libs.ethUtil.publicToAddress(ethPubkey); + var hexAddress = addressBuffer.toString('hex'); + // Use chainId based on selected network + // Ref: https://developers.rsk.co/rsk/architecture/account-based/#chainid + var chainId; + var rskNetworkName = networks[DOM.network.val()].name; + switch (rskNetworkName) { + case "R-BTC - RSK": + chainId = 30; + break; + case "tR-BTC - RSK Testnet": + chainId = 31; + break; + default: + chainId = null; + } + var checksumAddress = toChecksumAddressForRsk(hexAddress, chainId); + address = libs.ethUtil.addHexPrefix(checksumAddress); + pubkey = libs.ethUtil.addHexPrefix(pubkey); + if (hasPrivkey) { + privkey = libs.ethUtil.bufferToHex(keyPair.d.toBuffer()); + } + } + // Handshake values are different if (networks[DOM.network.val()].name == "HNS - Handshake") { var ring = libs.handshake.KeyRing.fromPublic(keyPair.getPublicKeyBuffer()) address = ring.getAddress().toString(); } + // Stellar is different if (networks[DOM.network.val()].name == "XLM - Stellar") { var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44); @@ -1237,8 +1266,8 @@ if (networks[DOM.network.val()].name == "EOS - EOSIO") { address = "" - pubkey = eosUtil.bufferToPublic(keyPair.getPublicKeyBuffer()); - privkey = eosUtil.bufferToPrivate(keyPair.d.toBuffer(32)); + pubkey = EOSbufferToPublic(keyPair.getPublicKeyBuffer()); + privkey = EOSbufferToPrivate(keyPair.d.toBuffer(32)); } if (networks[DOM.network.val()].name == "FIO - Foundation for Interwallet Operability") { @@ -1860,6 +1889,12 @@ || (name == "ERE - EtherCore") } + function networkIsRsk() { + var name = networks[DOM.network.val()].name; + return (name == "R-BTC - RSK") + || (name == "tR-BTC - RSK Testnet"); + } + function networkHasSegwit() { var n = network; if ("baseNetwork" in network) { @@ -2296,6 +2331,14 @@ setHdCoin(186); }, }, + { + name: "CRP - CranePay", + onSelect: function() { + network = libs.bitcoin.networks.cranepay; + setHdCoin(2304); + }, + }, + { name: "CRW - Crown (Legacy)", onSelect: function() { @@ -3004,16 +3047,16 @@ }, }, { - name: "RBTC - RSK", + name: "R-BTC - RSK", onSelect: function() { - network = libs.bitcoin.networks.rubycoin; + network = libs.bitcoin.networks.rsk; setHdCoin(137); }, }, { - name: "tRBTC - RSK Testnet", + name: "tR-BTC - RSK Testnet", onSelect: function() { - network = libs.bitcoin.networks.rubycoin; + network = libs.bitcoin.networks.rsktestnet; setHdCoin(37310); }, }, @@ -3045,6 +3088,13 @@ setHdCoin(19165); }, }, + { + name: "SCRIBE - Scribe", + onSelect: function() { + network = libs.bitcoin.networks.scribe; + setHdCoin(545); + }, + }, { name: "SLS - Salus", onSelect: function() { @@ -3394,6 +3444,46 @@ } ] + // RSK - RSK functions - begin + function stripHexPrefix(address) { + if (typeof address !== "string") { + throw new Error("address parameter should be a string."); + } + + var hasPrefix = (address.substring(0, 2) === "0x" || + address.substring(0, 2) === "0X"); + + return hasPrefix ? address.slice(2) : address; + }; + + function toChecksumAddressForRsk(address, chainId = null) { + if (typeof address !== "string") { + throw new Error("address parameter should be a string."); + } + + if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) { + throw new Error("Given address is not a valid RSK address: " + address); + } + + var stripAddress = stripHexPrefix(address).toLowerCase(); + var prefix = chainId != null ? chainId.toString() + "0x" : ""; + var keccakHash = libs.ethUtil.keccak256(prefix + stripAddress) + .toString("hex") + .replace(/^0x/i, ""); + var checksumAddress = "0x"; + + for (var i = 0; i < stripAddress.length; i++) { + checksumAddress += + parseInt(keccakHash[i], 16) >= 8 ? + stripAddress[i].toUpperCase() : + stripAddress[i]; + } + + return checksumAddress; + } + + // RSK - RSK functions - end + // ELA - Elastos functions - begin function displayBip44InfoForELA() { if (!isELA()) {