X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2Fjs%2Findex.js;h=fa9836a8d1031c03f45897f4e653cc02ab438f2d;hb=a823e5266c95f54dbf7b672f3d0ba2bac779f85e;hp=92772f6840013a41e1f08ef6ae34b6c5de4163c8;hpb=4dfc681f71bc6d1181d24a3bd0d462bbd6b60beb;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FBIP39.git diff --git a/src/js/index.js b/src/js/index.js index 92772f6..fa9836a 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1134,8 +1134,38 @@ var hexAddress = addressBuffer.toString('hex'); var checksumAddress = libs.ethUtil.toChecksumAddress(hexAddress); address = libs.ethUtil.addHexPrefix(checksumAddress); - privkey = libs.ethUtil.addHexPrefix(privkey); pubkey = libs.ethUtil.addHexPrefix(pubkey); + if (hasPrivkey) { + privkey = libs.ethUtil.bufferToHex(keyPair.d.toBuffer()); + } + } + + // 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()); + } } // Stellar is different @@ -1163,6 +1193,11 @@ privkey = convertRipplePriv(privkey); address = convertRippleAdrr(address); } + // Jingtum values are different + if (networks[DOM.network.val()].name == "SWTC - Jingtum") { + privkey = convertJingtumPriv(privkey); + address = convertJingtumAdrr(address); + } // CasinoCoin values are different if (networks[DOM.network.val()].name == "CSC - CasinoCoin") { privkey = convertCasinoCoinPriv(privkey); @@ -1830,6 +1865,7 @@ || (name == "EWT - EnergyWeb") || (name == "PIRL - Pirl") || (name == "MIX - MIX") + || (name == "MOAC - MOAC") || (name == "MUSIC - Musicoin") || (name == "POA - Poa") || (name == "EXP - Expanse") @@ -1838,6 +1874,13 @@ || (name == "ELLA - Ellaism") || (name == "ESN - Ethersocial Network") || (name == "VET - VeChain") + || (name == "ERE - EtherCore") + } + + function networkIsRsk() { + var name = networks[DOM.network.val()].name; + return (name == "R-BTC - RSK") + || (name == "tR-BTC - RSK Testnet"); } function networkHasSegwit() { @@ -2417,6 +2460,14 @@ setHdCoin(194); }, }, + { + name: "ERE - EtherCore", + segwitAvailable: false, + onSelect: function() { + network = libs.bitcoin.networks.bitcoin; + setHdCoin(466); + }, + }, { name: "ESN - Ethersocial Network", segwitAvailable: false, @@ -2727,6 +2778,14 @@ setHdCoin(214); }, }, + { + name: "MOAC - MOAC", + segwitAvailable: false, + onSelect: function() { + network = libs.bitcoin.networks.bitcoin; + setHdCoin(314); + }, + }, { name: "MUSIC - Musicoin", segwitAvailable: false, @@ -2947,6 +3006,20 @@ setHdCoin(175); }, }, + { + name: "R-BTC - RSK", + onSelect: function() { + network = libs.bitcoin.networks.rsk; + setHdCoin(137); + }, + }, + { + name: "tR-BTC - RSK Testnet", + onSelect: function() { + network = libs.bitcoin.networks.rsktestnet; + setHdCoin(37310); + }, + }, { name: "RBY - Rubycoin", onSelect: function() { @@ -3052,6 +3125,13 @@ setHdCoin(105); }, }, + { + name: "SWTC - Jingtum", + onSelect: function() { + network = libs.bitcoin.networks.bitcoin; + setHdCoin(315); + }, + }, { name: "TSTRAT - Stratis Testnet", onSelect: function() { @@ -3303,6 +3383,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()) {