bitcoin-tx-lib
Version:
A Typescript library for building and signing Bitcoin transactions
96 lines (65 loc) • 3.67 kB
text/typescript
import { ECPairKey } from "./ecpairkey";
describe("ECPairKey", () => {
test("create keypair", () => {
const PairKey = new ECPairKey()
expect(PairKey.privateKey).toBeDefined()
})
test("get the public key", () => {
const pairKey = new ECPairKey({ privateKey: "0c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d" });
const publicKey = pairKey.getPublicKey()
expect(publicKey).toBe("04d0de0aaeaefad02b8bdc8a01a1b8b11c696bd3d66a2c5f10780d95b7df42645cd85228a6fb29940e858e7e55842ae2bd115d1ed7cc0e82d934e929c97648cb0a")
})
test("get compressed public key", () => {
let pairKey = ECPairKey.fromWif("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ")
const compressed = pairKey.getPublicKeyCompressed()
expect(compressed).toBe("qWxvCXDvALEvQJriaWj7Pucs8e8N4jzNez2mnrCotqKH")
})
test("get private key WIF", () => {
const pairKey = new ECPairKey({ privateKey: "0c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d" });
expect(pairKey.getWif()).toBe("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ");
})
test("get public key WIF", () => {
const pairKey = new ECPairKey({ privateKey: "0c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d" })
const publicWif = pairKey.getPublicWif()
expect(publicWif).toBe("KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617")
})
test("sign and verify signature", () => {
let pairKey = new ECPairKey({ privateKey: "16260783e40b16731673622ac8a5b045fc3ea4af70f727f3f9e92bdd3a1ddc42" });
let signature = pairKey.signDER("6244980fa0752e5b4643edb353fda5238a9a3d44491676788efdd25dd64855ba")
let isValid = pairKey.verifySignature("6244980fa0752e5b4643edb353fda5238a9a3d44491676788efdd25dd64855ba", signature)
expect(isValid).toBe(true)
})
test("import from wif", () => {
let pairKey = ECPairKey.fromWif("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ")
expect(pairKey.privateKey).toBe("0c28fca386c7a227600b2fe50b7cae11ec86d3bf1fbe471be89827e19d72aa1d")
let error = false
let wifVersionError = "25JBG1P53WpDHnB1NFd9cSCZ9QdKS3fv5hqDbMte2bChDkmVhXa"
try { pairKey = ECPairKey.fromWif(wifVersionError) }
catch { error = true }
finally {
// a validation error must occur, as the first byte, designated the version, is incorrect
expect(error).toBe(true)
}
error = false
let wifChecksumError = "5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvykx"
try { pairKey = ECPairKey.fromWif(wifChecksumError) } catch { error = true }
// a validation error should occur because the last 4 bytes assigned to the checksum are incorrect
expect(error).toBe(true)
})
test("import from hex", () => {
const pairKey = ECPairKey.fromHex({
privateKey: "9d01e9e28cba0217c5826838596733b2cf86a54fff3eabcabec90a2acdc101d8",
network: "testnet"
})
const address = pairKey.getAddress("p2wpkh")
expect(address).toBe("tb1q4ppec5re8vpnm7qsmcjhkvf3gj500mwfw0yxaj")
})
test("get bitcoin address", () => {
const pairKey = ECPairKey.fromWif("5KCyEgVQ93iZoJ81tYrknfpry9LopRhJgBTdMFsapamox69wdar")
let address = pairKey.getAddress("p2pkh")
expect(address).toBeDefined()
expect(address).toBe("1Kj9UWTgPmzWrmHnFUx1hGzKi3A4R5e1NA")
address = pairKey.getAddress("p2wpkh") // bech32
expect(address).toBe("bc1qe44vaalmg0yxd56wav8xhtqp5xe30fe7mxws4z")
})
})