mirror of
https://github.com/OneKeyHQ/bip39.git
synced 2026-04-05 18:43:47 +00:00
Merge branch 'master' into master
This commit is contained in:
@@ -1104,6 +1104,7 @@
|
|||||||
<script src="js/cosmos-util.js"></script>
|
<script src="js/cosmos-util.js"></script>
|
||||||
<script src="js/eos-util.js"></script>
|
<script src="js/eos-util.js"></script>
|
||||||
<script src="js/fio-util.js"></script>
|
<script src="js/fio-util.js"></script>
|
||||||
|
<script src="js/xwc-util.js"></script>
|
||||||
<script src="js/sjcl-bip39.js"></script>
|
<script src="js/sjcl-bip39.js"></script>
|
||||||
<script src="js/wordlist_english.js"></script>
|
<script src="js/wordlist_english.js"></script>
|
||||||
<script src="js/wordlist_japanese.js"></script>
|
<script src="js/wordlist_japanese.js"></script>
|
||||||
|
|||||||
@@ -1531,6 +1531,17 @@ libs.bitcoin.networks.bitcoinprivate = {
|
|||||||
wif: 0x80,
|
wif: 0x80,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
libs.bitcoin.networks.bitcoinprivatetestnet = {
|
||||||
|
messagePrefix: '\x18BitcoinPrivate Signed Message:\n',
|
||||||
|
bip32: {
|
||||||
|
public: 0x043587CF,
|
||||||
|
private: 0x04358394,
|
||||||
|
},
|
||||||
|
pubKeyHash: 0x1957,
|
||||||
|
scriptHash: 0x19E0,
|
||||||
|
wif: 0xEF,
|
||||||
|
};
|
||||||
|
|
||||||
libs.bitcoin.networks.bitcoinz = {
|
libs.bitcoin.networks.bitcoinz = {
|
||||||
messagePrefix: '\x18BitcoinZ Signed Message:\n',
|
messagePrefix: '\x18BitcoinZ Signed Message:\n',
|
||||||
bip32: {
|
bip32: {
|
||||||
|
|||||||
@@ -209,12 +209,7 @@
|
|||||||
var network = networks[networkIndex];
|
var network = networks[networkIndex];
|
||||||
network.onSelect();
|
network.onSelect();
|
||||||
adjustNetworkForSegwit();
|
adjustNetworkForSegwit();
|
||||||
if (seed != null) {
|
rootKeyChanged();
|
||||||
phraseChanged();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
rootKeyChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function bip32ClientChanged(e) {
|
function bip32ClientChanged(e) {
|
||||||
@@ -495,13 +490,16 @@
|
|||||||
|
|
||||||
var app = DOM.bip85application.val();
|
var app = DOM.bip85application.val();
|
||||||
|
|
||||||
var phrase = DOM.phrase.val();
|
var rootKeyBase58 = DOM.rootKey.val();
|
||||||
var passphrase = DOM.passphrase.val();
|
if (!rootKeyBase58) {
|
||||||
if (!phrase) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
var master = libs.bip85.BIP85.fromMnemonic(phrase, passphrase);
|
// try parsing using base network params
|
||||||
|
// The bip85 lib only understands xpubs, so compute it
|
||||||
|
var rootKey = libs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
|
||||||
|
rootKey.keyPair.network = libs.bitcoin.networks['bitcoin']
|
||||||
|
var master = libs.bip85.BIP85.fromBase58(rootKey.toBase58());
|
||||||
|
|
||||||
var result;
|
var result;
|
||||||
|
|
||||||
@@ -1350,21 +1348,21 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ZooBC address format may vary
|
// ZooBC address format may vary
|
||||||
if (networks[DOM.network.val()].name == "ZBC - ZooBlockchain") {
|
if (networks[DOM.network.val()].name == "ZBC - ZooBlockchain") {
|
||||||
|
|
||||||
var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
|
var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
|
||||||
var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
|
var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
|
||||||
var path = "m/";
|
var path = "m/";
|
||||||
path += purpose + "'/";
|
path += purpose + "'/";
|
||||||
path += coin + "'/" + index + "'";
|
path += coin + "'/" + index + "'";
|
||||||
var result = libs.zoobcUtil.getKeypair(path, seed);
|
var result = libs.zoobcUtil.getKeypair(path, seed);
|
||||||
|
|
||||||
let publicKey = result.pubKey.slice(1, 33);
|
let publicKey = result.pubKey.slice(1, 33);
|
||||||
let privateKey = result.key;
|
let privateKey = result.key;
|
||||||
|
|
||||||
privkey = privateKey.toString('hex');
|
privkey = privateKey.toString('hex');
|
||||||
pubkey = publicKey.toString('hex');
|
pubkey = publicKey.toString('hex');
|
||||||
|
|
||||||
indexText = path;
|
indexText = path;
|
||||||
address = libs.zoobcUtil.getZBCAddress(publicKey, 'ZBC');
|
address = libs.zoobcUtil.getZBCAddress(publicKey, 'ZBC');
|
||||||
}
|
}
|
||||||
@@ -1425,15 +1423,35 @@
|
|||||||
pubkey = CosmosBufferToPublic(keyPair.getPublicKeyBuffer(), hrp);
|
pubkey = CosmosBufferToPublic(keyPair.getPublicKeyBuffer(), hrp);
|
||||||
privkey = keyPair.d.toBuffer().toString("base64");
|
privkey = keyPair.d.toBuffer().toString("base64");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (networks[DOM.network.val()].name == "RUNE - THORChain") {
|
if (networks[DOM.network.val()].name == "RUNE - THORChain") {
|
||||||
const hrp = "thor";
|
const hrp = "thor";
|
||||||
address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer(), hrp);
|
address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer(), hrp);
|
||||||
pubkey = keyPair.getPublicKeyBuffer().toString("hex");
|
pubkey = keyPair.getPublicKeyBuffer().toString("hex");
|
||||||
privkey = keyPair.d.toBuffer().toString("hex");
|
privkey = keyPair.d.toBuffer().toString("hex");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (networks[DOM.network.val()].name == "XWC - Whitecoin"){
|
||||||
|
address = XWCbufferToAddress(keyPair.getPublicKeyBuffer());
|
||||||
|
pubkey = XWCbufferToPublic(keyPair.getPublicKeyBuffer());
|
||||||
|
privkey = XWCbufferToPrivate(keyPair.d.toBuffer(32));
|
||||||
|
}
|
||||||
|
|
||||||
//Groestlcoin Addresses are different
|
if (networks[DOM.network.val()].name == "LUNA - Terra") {
|
||||||
|
const hrp = "terra";
|
||||||
|
address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer(), hrp);
|
||||||
|
pubkey = keyPair.getPublicKeyBuffer().toString("hex");
|
||||||
|
privkey = keyPair.d.toBuffer().toString("hex");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (networks[DOM.network.val()].name == "IOV - Starname") {
|
||||||
|
const hrp = "star";
|
||||||
|
address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer(), hrp);
|
||||||
|
pubkey = CosmosBufferToPublic(keyPair.getPublicKeyBuffer(), hrp);
|
||||||
|
privkey = keyPair.d.toBuffer().toString("base64");
|
||||||
|
}
|
||||||
|
|
||||||
|
//Groestlcoin Addresses are different
|
||||||
if(isGRS()) {
|
if(isGRS()) {
|
||||||
|
|
||||||
if (isSegwit) {
|
if (isSegwit) {
|
||||||
@@ -2397,6 +2415,13 @@
|
|||||||
setHdCoin(183);
|
setHdCoin(183);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "BTCPt - Bitcoin Private Testnet",
|
||||||
|
onSelect: function() {
|
||||||
|
network = libs.bitcoin.networks.bitcoinprivatetestnet;
|
||||||
|
setHdCoin(1);
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "BSC - Binance Smart Chain",
|
name: "BSC - Binance Smart Chain",
|
||||||
onSelect: function() {
|
onSelect: function() {
|
||||||
@@ -2859,6 +2884,13 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
name: "IOV - Starname",
|
||||||
|
onSelect: function() {
|
||||||
|
network = libs.bitcoin.networks.bitcoin;
|
||||||
|
setHdCoin(234);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
name: "IXC - Ixcoin",
|
name: "IXC - Ixcoin",
|
||||||
onSelect: function() {
|
onSelect: function() {
|
||||||
network = libs.bitcoin.networks.ixcoin;
|
network = libs.bitcoin.networks.ixcoin;
|
||||||
@@ -2947,6 +2979,13 @@
|
|||||||
setHdCoin(221);
|
setHdCoin(221);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "LUNA - Terra",
|
||||||
|
onSelect: function() {
|
||||||
|
network = libs.bitcoin.networks.bitcoin;
|
||||||
|
setHdCoin(330);
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "LYNX - Lynx",
|
name: "LYNX - Lynx",
|
||||||
onSelect: function() {
|
onSelect: function() {
|
||||||
@@ -3583,7 +3622,7 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "XWC - Whitecoin",
|
name: "XWCC - Whitecoin Classic",
|
||||||
onSelect: function() {
|
onSelect: function() {
|
||||||
network = libs.bitcoin.networks.whitecoin;
|
network = libs.bitcoin.networks.whitecoin;
|
||||||
setHdCoin(155);
|
setHdCoin(155);
|
||||||
@@ -3624,6 +3663,13 @@
|
|||||||
setHdCoin(121);
|
setHdCoin(121);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "XWC - Whitecoin",
|
||||||
|
onSelect: function() {
|
||||||
|
network = libs.bitcoin.networks.bitcoin;
|
||||||
|
setHdCoin(559);
|
||||||
|
},
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
var clients = [
|
var clients = [
|
||||||
|
|||||||
28
src/js/xwc-util.js
Normal file
28
src/js/xwc-util.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
function XWCbufferToAddress(pubBuf){
|
||||||
|
const Buffer = libs.buffer.Buffer;
|
||||||
|
const XWC_ADDRESS_PREFIX = "XWC";
|
||||||
|
const XWC_NORMAL_ADDRESS_VERSION = "35"
|
||||||
|
let addrData = libs.createHash("rmd160").update( libs.createHash("sha512").update(pubBuf).digest()).digest();
|
||||||
|
let addrBuf = Buffer.concat([Buffer.from(XWC_NORMAL_ADDRESS_VERSION, "hex") ,addrData])
|
||||||
|
let checksum = libs.createHash("rmd160").update(addrBuf).digest("hex").slice(0, 8);
|
||||||
|
addrBuf = Buffer.concat([addrBuf, Buffer.from(checksum, "hex")]);
|
||||||
|
return XWC_ADDRESS_PREFIX.concat(libs.bs58.encode(addrBuf));
|
||||||
|
}
|
||||||
|
|
||||||
|
function XWCbufferToPublic(pubBuf) {
|
||||||
|
const Buffer = libs.buffer.Buffer;
|
||||||
|
const XWC_PUBLIC_PREFIX = "XWC";
|
||||||
|
let checksum = libs.createHash("rmd160").update(pubBuf).digest("hex").slice(0, 8);
|
||||||
|
pubBuf = Buffer.concat([pubBuf, Buffer.from(checksum, "hex")]);
|
||||||
|
return XWC_PUBLIC_PREFIX.concat(libs.bs58.encode(pubBuf));
|
||||||
|
}
|
||||||
|
|
||||||
|
function XWCbufferToPrivate(privBuf) {
|
||||||
|
const Buffer = libs.buffer.Buffer;
|
||||||
|
const XWC_PRIVATE_PREFIX = "80";
|
||||||
|
privBuf = Buffer.concat([Buffer.from(XWC_PRIVATE_PREFIX, "hex"), privBuf]);
|
||||||
|
let tmp = libs.createHash("sha256").update(privBuf).digest();
|
||||||
|
let checksum = libs.createHash("sha256").update(tmp).digest("hex").slice(0, 8);
|
||||||
|
privBuf = Buffer.concat([privBuf, Buffer.from(checksum, "hex")]);
|
||||||
|
return libs.bs58.encode(privBuf);
|
||||||
|
}
|
||||||
@@ -927,6 +927,16 @@ it('Allows selection of Cosmos Hub', function(done) {
|
|||||||
};
|
};
|
||||||
testNetwork(done, params);
|
testNetwork(done, params);
|
||||||
});
|
});
|
||||||
|
it('Allows selection of Terra', function(done) {
|
||||||
|
var params = {
|
||||||
|
selectText: "LUNA - Terra",
|
||||||
|
phrase: "abandon abandon ability",
|
||||||
|
firstAddress: "terra1txr4jwel3vjl64vrc08pljnjryqkhtffmyp265",
|
||||||
|
firstPubKey: "028e7658e3debb2d9d458919bfba0e85b0220e845f7552176f30a52acd0f809d71",
|
||||||
|
firstPrivKey: "d611b211e370aa1edd9743acd6ce537d16fade85d7ae7e88b32f3a0483f52535",
|
||||||
|
};
|
||||||
|
testNetwork(done, params);
|
||||||
|
});
|
||||||
it('Allows selection of Auroracoin', function(done) {
|
it('Allows selection of Auroracoin', function(done) {
|
||||||
var params = {
|
var params = {
|
||||||
selectText: "AUR - Auroracoin",
|
selectText: "AUR - Auroracoin",
|
||||||
@@ -987,6 +997,16 @@ it('Allows selection of Bitcoin Private', function(done) {
|
|||||||
};
|
};
|
||||||
testNetwork(done, params);
|
testNetwork(done, params);
|
||||||
});
|
});
|
||||||
|
it('Allows selection of Bitcoin Private testnet', function(done) {
|
||||||
|
var params = {
|
||||||
|
selectText: "BTCPt - Bitcoin Private Testnet",
|
||||||
|
phrase: "abandon abandon ability",
|
||||||
|
firstAddress: "n1UcUUSDfDppfzh7XLJNHmZkLdbTQg3VAZL",
|
||||||
|
firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
|
||||||
|
firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
|
||||||
|
};
|
||||||
|
testNetwork(done, params);
|
||||||
|
});
|
||||||
it('Allows selection of Bitcoin SV', function(done) {
|
it('Allows selection of Bitcoin SV', function(done) {
|
||||||
var params = {
|
var params = {
|
||||||
selectText: "BSV - BitcoinSV",
|
selectText: "BSV - BitcoinSV",
|
||||||
@@ -1355,6 +1375,16 @@ it('Allows selection of Iop', function(done) {
|
|||||||
};
|
};
|
||||||
testNetwork(done, params);
|
testNetwork(done, params);
|
||||||
});
|
});
|
||||||
|
it('Allows selection of Starname', function(done) {
|
||||||
|
var params = {
|
||||||
|
selectText: "IOV - Starname",
|
||||||
|
phrase: "abandon abandon ability",
|
||||||
|
firstAddress: "star1xgfvgq40r7ff8ylw9l95dw56xnr0pvtjnlp7h4",
|
||||||
|
firstPubKey: "starpub1addwnpepqg9x5cft48hcgx25vyzeyygntl7pt763datr6v50hrecafyane54xlqdxkd",
|
||||||
|
firstPrivKey: "bGI4BNRvMYT1lbCOoH000HvNFPkyXms9n3Xp1X/7E80=",
|
||||||
|
};
|
||||||
|
testNetwork(done, params);
|
||||||
|
});
|
||||||
it('Allows selection of Ixcoin', function(done) {
|
it('Allows selection of Ixcoin', function(done) {
|
||||||
var params = {
|
var params = {
|
||||||
selectText: "IXC - Ixcoin",
|
selectText: "IXC - Ixcoin",
|
||||||
@@ -1885,9 +1915,9 @@ it('Allows selection of VeChain', function(done) {
|
|||||||
};
|
};
|
||||||
testNetwork(done, params);
|
testNetwork(done, params);
|
||||||
});
|
});
|
||||||
it('Allows selection of Whitecoin', function(done) {
|
it('Allows selection of Whitecoin Classic', function(done) {
|
||||||
var params = {
|
var params = {
|
||||||
selectText: "XWC - Whitecoin",
|
selectText: "XWCC - Whitecoin Classic",
|
||||||
phrase: "abandon abandon ability",
|
phrase: "abandon abandon ability",
|
||||||
firstAddress: "WcSwCAUqrSgeSYbsaS3SSWWhsx8KRYTFDR",
|
firstAddress: "WcSwCAUqrSgeSYbsaS3SSWWhsx8KRYTFDR",
|
||||||
firstPubKey: "03d3f4fa758f6260bfb39664d248a32258b53a90a71224db056ee79abaa3e9f208",
|
firstPubKey: "03d3f4fa758f6260bfb39664d248a32258b53a90a71224db056ee79abaa3e9f208",
|
||||||
@@ -1895,6 +1925,16 @@ it('Allows selection of Whitecoin', function(done) {
|
|||||||
};
|
};
|
||||||
testNetwork(done, params);
|
testNetwork(done, params);
|
||||||
});
|
});
|
||||||
|
it('Allows selection of Whitecoin', function(done) {
|
||||||
|
var params = {
|
||||||
|
selectText: "XWC - Whitecoin",
|
||||||
|
phrase: "abandon abandon ability",
|
||||||
|
firstAddress: "XWCNY5EQsC55ifxRVEbP7H28yc3TMXC2pqsb5",
|
||||||
|
firstPubKey: "XWC68fEy4cCc8G1UWyeMPnQ5NjEhMUFSvu1oz4gLKxvj3dPvh7v18",
|
||||||
|
firstPrivKey: "5K8toD6TYy5DMHkxjpywXNLj4M6CjZAT5h12uhRuVuBBRtci8Zw",
|
||||||
|
};
|
||||||
|
testNetwork(done, params);
|
||||||
|
});
|
||||||
it('Allows selection of Wincoin', function(done) {
|
it('Allows selection of Wincoin', function(done) {
|
||||||
var params = {
|
var params = {
|
||||||
selectText: "WC - Wincoin",
|
selectText: "WC - Wincoin",
|
||||||
|
|||||||
Reference in New Issue
Block a user