diff --git a/libs/combined/index.js b/libs/combined/index.js
index d3bc7a5..b020f59 100644
--- a/libs/combined/index.js
+++ b/libs/combined/index.js
@@ -14,6 +14,10 @@ module.exports.bchaddr = require('bchaddrjs')
module.exports.bchaddrSlp = require('bchaddrjs-slp')
+/* bech32 */
+
+module.exports.bech32 = require('bech32')
+
/* biginteger */
module.exports.BigInteger = require('javascript-biginteger')
diff --git a/libs/combined/package.json b/libs/combined/package.json
index 5b47f74..ed60059 100644
--- a/libs/combined/package.json
+++ b/libs/combined/package.json
@@ -8,6 +8,7 @@
"base-x": "3.0.7",
"bchaddrjs": "0.4.4",
"bchaddrjs-slp": "git://github.com/simpleledger/bchaddrjs.git#af16e44a6bfbe4b3980a62dba50e2f68ed864c6b",
+ "bech32": "1.1.4",
"bip38": "2.0.2",
"bip38grs": "git://github.com/Groestlcoin/bip38grs.git#091975b01679b74dc0a4136bb743fe17791b0151",
"bip85": "0.0.3",
diff --git a/src/index.html b/src/index.html
index 4b61424..34b43ec 100644
--- a/src/index.html
+++ b/src/index.html
@@ -1101,6 +1101,7 @@
+
diff --git a/src/js/cosmos-util.js b/src/js/cosmos-util.js
new file mode 100644
index 0000000..a7f4605
--- /dev/null
+++ b/src/js/cosmos-util.js
@@ -0,0 +1,13 @@
+function CosmosBufferToPublic(pubBuf) {
+ const Buffer = libs.buffer.Buffer;
+ const AminoSecp256k1PubkeyPrefix = Buffer.from("EB5AE987", "hex");
+ const AminoSecp256k1PubkeyLength = Buffer.from("21", "hex");
+ pubBuf = Buffer.concat([AminoSecp256k1PubkeyPrefix, AminoSecp256k1PubkeyLength, pubBuf]);
+ return libs.bech32.encode("cosmospub", libs.bech32.toWords(pubBuf));
+}
+
+function CosmosBufferToAddress(pubBuf) {
+ const sha256_ed = libs.createHash("sha256").update(pubBuf).digest();
+ const ripemd160_ed = libs.createHash("rmd160").update(sha256_ed).digest();
+ return libs.bech32.encode("cosmos", libs.bech32.toWords(ripemd160_ed));
+}
diff --git a/src/js/index.js b/src/js/index.js
index 713b5e8..96fc451 100644
--- a/src/js/index.js
+++ b/src/js/index.js
@@ -1419,6 +1419,12 @@
privkey = FIObufferToPrivate(keyPair.d.toBuffer(32));
}
+ if (networks[DOM.network.val()].name == "ATOM - Cosmos Hub") {
+ address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer());
+ pubkey = CosmosBufferToPublic(keyPair.getPublicKeyBuffer());
+ privkey = keyPair.d.toBuffer().toString("base64");
+ }
+
//Groestlcoin Addresses are different
if(isGRS()) {
@@ -2234,6 +2240,13 @@
setHdCoin(357);
},
},
+ {
+ name: "ATOM - Cosmos Hub",
+ onSelect: function() {
+ network = libs.bitcoin.networks.bitcoin;
+ setHdCoin(118);
+ },
+ },
{
name: "AUR - Auroracoin",
onSelect: function() {
diff --git a/tests/spec/tests.js b/tests/spec/tests.js
index f350fa7..7e553af 100644
--- a/tests/spec/tests.js
+++ b/tests/spec/tests.js
@@ -917,6 +917,16 @@ it('Allows selection of Aryacoin', function(done) {
};
testNetwork(done, params);
});
+it('Allows selection of Cosmos Hub', function(done) {
+ var params = {
+ selectText: "ATOM - Cosmos Hub",
+ phrase: "abandon abandon ability",
+ firstAddress: "cosmos17mkch9syem8gtf6wh7p38thdgav6dwezpkylny",
+ firstPubKey: "cosmospub1addwnpepq0sgn66ty4suk5vx3hsmxxqd5z3amegqwlu59funrzyz5u8r9758qhl84ys",
+ firstPrivKey: "zUnETPxmE2vkHzLHTAlO9wg8PL/GEEBc1I4yVwvSV8M=",
+ };
+ testNetwork(done, params);
+});
it('Allows selection of Auroracoin', function(done) {
var params = {
selectText: "AUR - Auroracoin",