UNPKG

@bandprotocol/bandchain.js

Version:

Library for interacting with BandChain in browser and Node.js environments

118 lines (101 loc) 4.25 kB
import { PrivateKey, PublicKey, Address } from '../src/wallet' const TEST_MNEMONIC = 'coach pond canoe lake solution empty vacuum term pave toe burst top violin purpose umbrella color disease thrive diamond found track need filter wait' const TEST_ACC_PUBKEY = 'bandpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6mw8s9v' const TEST_VAL_PUBKEY = 'bandvaloperpub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q69gsm29' const TEST_CONS_PUBKEY = 'bandvalconspub1addwnpepqdg7nrsmuztj2re07svgcz4vuzn3de56nykdwlualepkk05txs5q6r8ytws' const TEST_ACC_ADDRESS = 'band13eznuehmqzd3r84fkxu8wklxl22r2qfmtlth8c' const TEST_VAL_ADDRESS = 'bandvaloper13eznuehmqzd3r84fkxu8wklxl22r2qfm8f05zn' const TEST_CONS_ADDRESS = 'bandvalcons13eznuehmqzd3r84fkxu8wklxl22r2qfmn6ugwj' describe('Private Key', () => { it("fromMnemonic with m/44'/494'/0'/0/0", () => { const privkey = PrivateKey.fromMnemonic(TEST_MNEMONIC) expect(privkey.toHex()).toEqual( '2159f40dda9e4c9d8ed9d6f8c353e247a2658993a9d53a94ff17410cd0ea471d', ) }) it("fromMnemonic with m/44'/494'/0'/0/1", () => { const privkey = PrivateKey.fromMnemonic(TEST_MNEMONIC, "m/44'/494'/0'/0/1") expect(privkey.toHex()).toEqual( '987af53f91a09926274e5a2ef86223356112056f61b35a57df345d7b14176bb3', ) }) it("generate with m/44'/494'/0'/0/1", () => { const [mnemonic, privkey] = PrivateKey.generate("m/44'/494'/0'/0/5") expect( PrivateKey.fromMnemonic(mnemonic, "m/44'/494'/0'/0/5").toHex(), ).toEqual(privkey.toHex()) }) it('fromHex', () => { expect( PrivateKey.fromHex( '2159f40dda9e4c9d8ed9d6f8c353e247a2658993a9d53a94ff17410cd0ea471d', ).toHex(), ).toEqual( '2159f40dda9e4c9d8ed9d6f8c353e247a2658993a9d53a94ff17410cd0ea471d', ) }) it('to public key', () => { expect(PrivateKey.fromMnemonic(TEST_MNEMONIC).toPubkey().toHex()).toEqual( '0351e98e1be097250f2ff4188c0aace0a716e69a992cd77f9dfe436b3e8b34280d', ) }) it('sign by private key', () => { const privkey = PrivateKey.fromMnemonic(TEST_MNEMONIC) expect( privkey.sign(Buffer.from('test msg', 'utf-8')).toString('hex'), ).toEqual( '42a1e41012155ae2daa9b9a2e038f76463da4662564b4989f236ecb4d97f592c1190d92319363e2d1eb78fb98f0dac30c5e2a850f45bb4c44f1f6203ebe6efbe', ) }) }) describe('Public Key', () => { it('verify signature', () => { const privkey = PrivateKey.fromMnemonic(TEST_MNEMONIC) const pubkey = privkey.toPubkey() const msg = Buffer.from('test msg', 'utf-8') const signature = privkey.sign(msg) expect(pubkey.verify(msg, signature)).toBe(true) }) it('public key from bech32', () => { expect(PublicKey.fromAccBech32(TEST_ACC_PUBKEY).toHex()).toEqual( '0351e98e1be097250f2ff4188c0aace0a716e69a992cd77f9dfe436b3e8b34280d', ) expect(PublicKey.fromValBech32(TEST_VAL_PUBKEY).toHex()).toEqual( '0351e98e1be097250f2ff4188c0aace0a716e69a992cd77f9dfe436b3e8b34280d', ) expect(PublicKey.fromConsBech32(TEST_CONS_PUBKEY).toHex()).toEqual( '0351e98e1be097250f2ff4188c0aace0a716e69a992cd77f9dfe436b3e8b34280d', ) }) it('public key to bech32', () => { const privkey = PrivateKey.fromMnemonic(TEST_MNEMONIC) expect(privkey.toPubkey().toAccBech32()).toEqual(TEST_ACC_PUBKEY) expect(privkey.toPubkey().toValBech32()).toEqual(TEST_VAL_PUBKEY) expect(privkey.toPubkey().toConsBech32()).toEqual(TEST_CONS_PUBKEY) }) }) describe('Address', () => { it('Address from bech32', () => { expect(Address.fromAccBech32(TEST_ACC_ADDRESS).toHex()).toEqual( '8e453e66fb009b119ea9b1b8775be6fa9435013b', ) expect(Address.fromValBech32(TEST_VAL_ADDRESS).toHex()).toEqual( '8e453e66fb009b119ea9b1b8775be6fa9435013b', ) expect(Address.fromConsBech32(TEST_CONS_ADDRESS).toHex()).toEqual( '8e453e66fb009b119ea9b1b8775be6fa9435013b', ) }) it('Address to bech32', () => { const address = PrivateKey.fromMnemonic(TEST_MNEMONIC) .toPubkey() .toAddress() expect(address.toAccBech32()).toEqual(TEST_ACC_ADDRESS) expect(address.toValBech32()).toEqual(TEST_VAL_ADDRESS) expect(address.toConsBech32()).toEqual(TEST_CONS_ADDRESS) }) })