@coolwallet/zen
Version:
Coolwallet Horizen sdk
155 lines (144 loc) • 9.13 kB
text/typescript
import { CardType, Transport } from '@coolwallet/core';
import { createTransport } from '@coolwallet/transport-jre-http';
import { initialize } from '@coolwallet/testing-library';
import ZEN from '../src';
import { ScriptType, signTxType } from '../src/config/types';
type PromiseValue<T> = T extends Promise<infer V> ? V : never;
type Mandatory = PromiseValue<ReturnType<typeof initialize>>;
describe('Test ZEN SDK', () => {
let transport: Transport;
let props: Mandatory;
let cardType: CardType;
const zenSDK = new ZEN();
const mnemonic = 'zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo abstract';
beforeAll(async () => {
if (process.env.CARD === 'go') {
cardType = CardType.Go;
} else {
cardType = CardType.Pro;
}
if (cardType === CardType.Go) {
transport = (await createTransport('http://localhost:9527', CardType.Go))!;
} else {
transport = (await createTransport())!;
}
props = await initialize(transport, mnemonic);
});
describe('Test Get Address', () => {
it('index 0 address', async () => {
const address = await zenSDK.getAddress(transport, props.appPrivateKey, props.appId, ScriptType.P2PKH, 0);
expect(address).toEqual('znnDufpMPVxEPeLRRXutq6ZEBkgf7gQcD25');
});
});
describe('Sign Transfer Tx', () => {
it('P2PKH transfer with address 0', async () => {
const transaction: signTxType = {
transport,
appPrivateKey: props.appPrivateKey,
appId: props.appId,
scriptType: ScriptType.P2PKH,
inputs: [
{
preTxHash: '79c2eaf919aa1fe853d3f00cd742844b09fdf92bf510e1b6e9c5cfebbdeb4edd',
preIndex: 1,
scriptPubKey: `76a914b7847a272f6780b2429429345a018dbf3143a3d088ac20907db3cfe9ab4fea55f906018381b1f95a88edd98e6bfbdc200370000000000003bf3c1ab4`,
addressIndex: 0,
},
],
output: {
value: '25000000',
address: 'znorDePMyGJJwWygQdYuELDQjwA2xWNZCGF',
blockHash: '000000000210475f9bdb964d81d6276fbe98518a0002c212d8e437244bc01a21',
blockHeight: 1723474,
},
change: {
value: '24830000',
addressIndex: 0,
blockHash: '000000000210475f9bdb964d81d6276fbe98518a0002c212d8e437244bc01a21',
blockHeight: 1723474,
},
};
const tx = await zenSDK.signTransaction(transaction);
expect(tx).toMatchInlineSnapshot(
`"0100000001dd4eebbdebcfc5e9b6e110f52bf9fd094b8442d70cf0d353e81faa19f9eac279010000006a473044022046cec3d47ce990c8f55d4978e43e53b2c01f7a9726544d490df725de77996551022047b33be5b8a79f7c79359c3bc02e44f61a251704ef28783bc281246f3d39efb08121030ceff2eb84415264dede5edbcabbb6d133e91fc9ba00b6805f66093f65ea6a66ffffffff0240787d01000000003f76a914f9b3ce8a1327101a148eb577254dc647f214182488ac20211ac04b2437e4d812c202008a5198be6f27d6814d96db9b5f4710020000000003524c1ab430e07a01000000003f76a914e7ddb38ac76967361e52d3e1fffc371d97183d0988ac20211ac04b2437e4d812c202008a5198be6f27d6814d96db9b5f4710020000000003524c1ab400000000"`
);
});
it('zen tx', async () => {
const inputs = [
{
preTxHash: '253d66d2baef4fa79d7c33f096d1038f730b58e4cfeaa5e6bc485019b843f34c',
preIndex: 0,
scriptPubKey: `76a914be5cee44ab5402c6627bc049ea75c2f75935169988ac2025864e944de8a0d0330d5ce4047e6a8af68dc43ff9277e3b22b77a01000000000328cb19b4`,
addressIndex: 0,
},
{
preTxHash: '3a2648a285852f5b924f336cab35f8bb78db10858e451c7fdbbcaa73904569e9',
preIndex: 0,
scriptPubKey: `76a914be5cee44ab5402c6627bc049ea75c2f75935169988ac20115e3b4d7656e290933d647ea2a65b286010ffcb1b3333da0693fd00000000000396041ab4`,
addressIndex: 0,
},
{
preTxHash: '7aefbfb639bd28f481cc43d60f604884e1bbaca5aeeb29049909326e6cdc99dd',
preIndex: 0,
scriptPubKey: `76a914be5cee44ab5402c6627bc049ea75c2f75935169988ac20225dc432a0f95705722530b77583b5d78f6c94adcb1cc14c8dcb1103000000000395041ab4`,
addressIndex: 0,
},
{
preTxHash: '7d68d851fd9823080d4b1ce8405a54949565accf454c67f0086c046863977093',
preIndex: 0,
scriptPubKey: `76a914be5cee44ab5402c6627bc049ea75c2f75935169988ac2062b3025ccc2dd8d6edd2462f9391dad2f92f7c6d32c29c34d193bc03000000000397041ab4`,
addressIndex: 0,
},
{
preTxHash: 'e9fde327d061b322a232afbc6e0224a71000a02364eb8cc305ad0e186eda762d',
preIndex: 0,
scriptPubKey: `76a914be5cee44ab5402c6627bc049ea75c2f75935169988ac205c7dc98221b036d87c5e4fa1d846d6140e489e0da3b9fdf765386e02000000000394041ab4`,
addressIndex: 0,
},
{
preTxHash: '5ea617344f0575cbf0b9d20db658d51cfb129377e04b210da87d307b760476f3',
preIndex: 0,
scriptPubKey: `76a914be5cee44ab5402c6627bc049ea75c2f75935169988ac2000790cde77950501ffe10eb4caafd44a18ae89be6aa7a20187dae300000000000380041ab4`,
addressIndex: 0,
},
{
preTxHash: '60c4b1ef5371c0e5764018f12787bb6aa974c2bd4556d9d03395b58456a4ae8e',
preIndex: 143,
scriptPubKey: `76a914be5cee44ab5402c6627bc049ea75c2f75935169988ac209f36b4693e96bd5d79508a6cce57617e03c7d46e9a9db5c5b5e157030000000003eaa219b4`,
addressIndex: 0,
},
{
preTxHash: 'a2d16fe7982614bc814362528c1934410ce1338417783e98fa7a77e5c5b9f1e4',
preIndex: 297,
scriptPubKey: `76a914be5cee44ab5402c6627bc049ea75c2f75935169988ac209f36b4693e96bd5d79508a6cce57617e03c7d46e9a9db5c5b5e157030000000003eaa219b4`,
addressIndex: 0,
},
];
const output = {
value: '1000000000',
address: 'znaRmosZDTG8zYBsNcheCN4LsgpVjPYE8Ay',
blockHash: '00000000023c6af45cafdc6278a48ecde601a7077e62d08afa7109987d3297dd',
blockHeight: 1705874,
};
const change = {
value: '157112533',
addressIndex: 0,
blockHash: '00000000023c6af45cafdc6278a48ecde601a7077e62d08afa7109987d3297dd',
blockHeight: 1705874,
};
const signTxData = {
transport,
appPrivateKey: props.appPrivateKey,
appId: props.appId,
scriptType: ScriptType.P2PKH,
inputs,
output,
change,
};
const signedTx = await zenSDK.signTransaction(signTxData);
expect(signedTx).toMatchInlineSnapshot(
`"01000000084cf343b8195048bce6a5eacfe4580b738f03d196f0337c9da74fefbad2663d25000000006b483045022100a44bb8c170d82f3c9fba04d4ca8e4c64a223cadcf349ce48068cd7004236a209022050021fbfa68009e02b4a831c945d48299d91bf319dd5e748155254327b58e3268121030ceff2eb84415264dede5edbcabbb6d133e91fc9ba00b6805f66093f65ea6a66ffffffffe969459073aabcdb7f1c458e8510db78bbf835ab6c334f925b2f8585a248263a000000006b483045022100a2c0d5b0a0d75d48c1361e6acf918b8172eaa3de75851c307b59180209b254d50220108e6015790eacbcc93015eee52b7431025375c5cae983dfff122a5b7b5753268121030ceff2eb84415264dede5edbcabbb6d133e91fc9ba00b6805f66093f65ea6a66ffffffffdd99dc6c6e3209990429ebaea5acbbe18448600fd643cc81f428bd39b6bfef7a000000006b483045022100d00465fc7ec1f5d22850c105af56665ed15c86126acefe9b4a2be3bbf5dee09d02206be5718e8664842449d2fe50fa056f8e58583bd46278b9a33a1d1fd6f03f24858121030ceff2eb84415264dede5edbcabbb6d133e91fc9ba00b6805f66093f65ea6a66ffffffff9370976368046c08f0674c45cfac659594545a40e81c4b0d082398fd51d8687d000000006b4830450221008bdc06d809494c525cf806d8514465cd11b7d2fa84ee90815d8369ca595441a702200230bea5cbca782a9fff486dc6ef8a0827d914b4d7f3b91326a484e8f75c34fa8121030ceff2eb84415264dede5edbcabbb6d133e91fc9ba00b6805f66093f65ea6a66ffffffff2d76da6e180ead05c38ceb6423a00010a724026ebcaf32a222b361d027e3fde9000000006b4830450221009a209edeb97252ab81dff06d20762b329b9b3e4b72ef34cbe4541b2629ca3b4e022055e4f5114486851cbdc886c5c46cfc785b0e2dae17e05b2cd8e0f5ad6f90edb58121030ceff2eb84415264dede5edbcabbb6d133e91fc9ba00b6805f66093f65ea6a66fffffffff37604767b307da80d214be0779312fb1cd558b60dd2b9f0cb75054f3417a65e000000006b483045022100b3be4df8c12f1d5e6bc9f6b91c7e87ea3e96fbab9cae1f9711f2c6c6fc1681dd022064a04e18478d3fb63014283589defd7d309159c868c8c2fd441fe782f92367da8121030ceff2eb84415264dede5edbcabbb6d133e91fc9ba00b6805f66093f65ea6a66ffffffff8eaea45684b59533d0d95645bdc274a96abb8727f1184076e5c07153efb1c4608f0000006b483045022100f3cbfe55ce78651529926e30bbea00e5be64242e6d380c80d4770a2bba1e621f0220745d2b6d3ee19324ee977060fd8d46cb7bd23bf34668518612937e737a312ee28121030ceff2eb84415264dede5edbcabbb6d133e91fc9ba00b6805f66093f65ea6a66ffffffffe4f1b9c5e5777afa983e78178433e10c4134198c52624381bc142698e76fd1a2290100006b483045022100a45e691bfffbd94759bb38c470f50bc32c38ba015b290ff24d2f74ef9acad35d02200e465ffdbb63b213200bd0e92b0646baa5d5a486eed2ec5b5eae096976ab24dc8121030ceff2eb84415264dede5edbcabbb6d133e91fc9ba00b6805f66093f65ea6a66ffffffff0200ca9a3b000000003f76a914667a9f10534aed5946b5895ada9ae7b25808ca7188ac20dd97327d980971fa8ad0627e07a701e6cd8ea47862dcaf5cf46a3c02000000000392071ab4d5585d09000000003f76a914e7ddb38ac76967361e52d3e1fffc371d97183d0988ac20dd97327d980971fa8ad0627e07a701e6cd8ea47862dcaf5cf46a3c02000000000392071ab400000000"`
);
});
});
});