module.exports.basex = require('base-x')
+/* base32 */
+
+module.exports.base32 = require('base32.js')
+
/* bchaddrjs */
module.exports.bchaddr = require('bchaddrjs')
},
}
+/* 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');
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: {
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() {
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'))