]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/commitdiff
Merge pull request #466 from RitoProject/ritocoin
authoriancoleman <1281387+iancoleman@users.noreply.github.com>
Thu, 11 Feb 2021 01:58:49 +0000 (12:58 +1100)
committerGitHub <noreply@github.com>
Thu, 11 Feb 2021 01:58:49 +0000 (12:58 +1100)
Add Ritocoin (RITO)

libs/combined/index.js
src/js/bitcoinjs-extensions.js
src/js/index.js
tests/spec/tests.js

index 99af3ce134731f04452c39617089ecbd5a1ae5e5..d3bc7a59d034d3c68991aedc369d215569f06cab 100644 (file)
@@ -2,6 +2,10 @@
 
 module.exports.basex = require('base-x')
 
+/* base32 */
+
+module.exports.base32 = require('base32.js')
+
 /* bchaddrjs */
 
 module.exports.bchaddr = require('bchaddrjs')
@@ -84,6 +88,35 @@ module.exports.stellarUtil = {
     },
 }
 
+/* zoobc-util */
+
+let base32 = require('base32.js');
+let nbl = require('nebulas');
+module.exports.zoobcUtil = {
+    getKeypair: function (path, seed) {
+        const { key, chainCode}  = edHd.derivePath(path, seed);
+        const pubKey = edHd.getPublicKey(key);
+        return {key,chainCode, pubKey};
+    },
+    getZBCAddress(publicKey, prefix = "ZBC") {
+        const prefixDefault = ["ZBC", "ZNK", "ZBL", "ZTX"];
+        const valid = prefixDefault.indexOf(prefix) > -1;
+        if (valid) {
+          var bytes = new Uint8Array(35);
+          for (let i = 0; i < 32; i++) bytes[i] = publicKey[i];
+          for (let i = 0; i < 3; i++) bytes[i + 32] = prefix.charCodeAt(i);
+          const checksum = nbl.CryptoUtils.sha3(bytes);
+          for (let i = 0; i < 3; i++) bytes[i + 32] = Number(checksum[i]);
+          var segs = [prefix];
+          var b32 = base32.encode(bytes);
+          for (let i = 0; i < 7; i++) segs.push(b32.substr(i * 8, 8));
+          return segs.join("_");
+        } else {
+          throw new Error("The Prefix not available!");
+        }
+      }
+}
+
 /* nano-util */
 
 let NanoBase = require('nanocurrency-web');
index 84363f60968a059f30b506e867cb95e4ac390cbd..84de8da579680b83e0bd9ddf2e1a07edcb3f7322 100644 (file)
@@ -1564,6 +1564,18 @@ libs.bitcoin.networks.hush3 = {
   wif: 0xBC,
 };
 
+libs.bitcoin.networks.zoobc = {
+  messagePrefix: '\x18ZooBC Signed Message:\n',
+  bech32: 'bc',
+  bip32: {
+    public: 0x0488b21e,
+    private: 0x0488ade4,
+  },
+  pubKeyHash: 0x00,
+  scriptHash: 0x05,
+  wif: 0x80,
+};
+
 libs.bitcoin.networks.zclassic = {
   messagePrefix: '\x18Zcash Signed Message:\n',
   bip32: {
index f7835fa9f92e208ddccfb7e31d8deb077cd3dc25..713b5e847c1a5da4046d89fccd790ca03e58c425 100644 (file)
                          address = libs.bchaddrSlp.toSlpAddress(address);
                      }
                  }
+
+                // ZooBC address format may vary
+                if (networks[DOM.network.val()].name == "ZBC - ZooBlockchain") {  
+                    
+                    var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
+                    var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
+                    var path = "m/";
+                        path += purpose + "'/";
+                        path += coin + "'/" + index + "'";
+                    var result = libs.zoobcUtil.getKeypair(path, seed);
+    
+                    let publicKey = result.pubKey.slice(1, 33);
+                    let privateKey = result.key;
+    
+                    privkey = privateKey.toString('hex');
+                    pubkey = publicKey.toString('hex');
+    
+                    indexText = path;
+                    address = libs.zoobcUtil.getZBCAddress(publicKey, 'ZBC');
+                }
+
                 // Segwit addresses are different
                 if (isSegwit) {
                     if (!segwitAvailable) {
                 setHdCoin(136);
             },
         },
+        {
+            name: "ZBC - ZooBlockchain",
+            onSelect: function () {
+            network = libs.bitcoin.networks.zoobc;
+            setHdCoin(883);
+            },
+        },
         {
             name: "ZCL - Zclassic",
             onSelect: function() {
index 9c3eb6abe7bf136a9635d80cff226cef9595f82b..f350fa7a3d60db80a1d60138f54b97fa7db4f964 100644 (file)
@@ -2338,6 +2338,17 @@ it('Allows selection of TRX on Tron', function(done) {
     testNetwork(done, params);
 });
 
+it('Allows selection of ZooBlockchain', function(done) {
+    var params = {
+        selectText: "ZBC - ZooBlockchain",
+        phrase: "shy invest oxygen real lunar moral merge corn program air affair amazing dove imitate combine solve library fresh case alcohol pole question act thing",
+        firstAddress: "ZBC_MGEZVH3U_SXPCBHTU_KSWDPQ4X_K6MSI3VR_CQAYMTLC_RXUMM3DJ_LFABCAXA",
+        firstPubKey: "61899a9f7495de209e7454ac37c3975799246eb11401864d628de8c66c695940",
+        firstPrivKey: "adb11e79068fa7366ec4f5963ad57115d666b1ad2b369b92d962563adf7dd48b",
+    };
+    testNetwork(done, params);
+});
+
 // BIP39 seed is set from phrase
 it('Sets the bip39 seed from the prhase', function(done) {
     driver.findElement(By.css('.phrase'))