@bitgo-beta/sdk-coin-dot 2.2.8-beta.132 → 2.2.8-beta.1321
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/dot.d.ts +8 -12
- package/dist/src/dot.d.ts.map +1 -1
- package/dist/src/dot.js +55 -41
- package/dist/src/index.js +6 -2
- package/dist/src/lib/addressInitializationBuilder.js +8 -10
- package/dist/src/lib/batchTransactionBuilder.d.ts +1 -0
- package/dist/src/lib/batchTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/batchTransactionBuilder.js +21 -12
- package/dist/src/lib/claimBuilder.js +4 -6
- package/dist/src/lib/iface.d.ts +16 -13
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +5 -5
- package/dist/src/lib/iface_utils.js +8 -9
- package/dist/src/lib/index.js +23 -9
- package/dist/src/lib/keyPair.d.ts +7 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +51 -4
- package/dist/src/lib/nativeTransferBuilder.js +10 -12
- package/dist/src/lib/proxyBuilder.js +6 -8
- package/dist/src/lib/singletonRegistry.js +2 -2
- package/dist/src/lib/stakingBuilder.js +6 -8
- package/dist/src/lib/transaction.d.ts +0 -1
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +72 -52
- package/dist/src/lib/transactionBuilder.d.ts +0 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +30 -16
- package/dist/src/lib/transactionBuilderFactory.js +3 -4
- package/dist/src/lib/txnSchema.js +3 -3
- package/dist/src/lib/unnominateBuilder.js +4 -6
- package/dist/src/lib/unstakeBuilder.js +4 -6
- package/dist/src/lib/utils.d.ts +10 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +67 -34
- package/dist/src/lib/withdrawUnstakedBuilder.js +4 -6
- package/dist/src/resources/index.d.ts +2 -0
- package/dist/src/resources/index.d.ts.map +1 -1
- package/dist/src/resources/index.js +8 -2
- package/dist/src/resources/polkadotAssetHub.d.ts +2 -0
- package/dist/src/resources/polkadotAssetHub.d.ts.map +1 -0
- package/dist/src/resources/polkadotAssetHub.js +5 -0
- package/dist/src/resources/westendAssetHub.d.ts +2 -0
- package/dist/src/resources/westendAssetHub.d.ts.map +1 -0
- package/dist/src/resources/westendAssetHub.js +5 -0
- package/dist/src/tdot.js +1 -1
- package/dist/test/fixtures.d.ts +283 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +439 -0
- package/dist/test/resources/index.d.ts +141 -0
- package/dist/test/resources/index.d.ts.map +1 -0
- package/dist/test/resources/index.js +157 -0
- package/dist/test/resources/materialData.json +8 -0
- package/dist/test/resources/materialDataModified.json +8 -0
- package/dist/test/resources/testnet.d.ts +2 -0
- package/dist/test/resources/testnet.d.ts.map +1 -0
- package/dist/test/resources/testnet.js +5 -0
- package/dist/test/unit/address.d.ts +2 -0
- package/dist/test/unit/address.d.ts.map +1 -0
- package/dist/test/unit/address.js +45 -0
- package/dist/test/unit/dot.d.ts +2 -0
- package/dist/test/unit/dot.d.ts.map +1 -0
- package/dist/test/unit/dot.js +690 -0
- package/dist/test/unit/keypair.d.ts +2 -0
- package/dist/test/unit/keypair.d.ts.map +1 -0
- package/dist/test/unit/keypair.js +111 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +269 -0
- package/dist/test/unit/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/addressInitializationBuilder.js +265 -0
- package/dist/test/unit/transactionBuilder/base.d.ts +8 -0
- package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/base.js +233 -0
- package/dist/test/unit/transactionBuilder/batchTransactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/batchTransactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/batchTransactionBuilder.js +521 -0
- package/dist/test/unit/transactionBuilder/claimBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/claimBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/claimBuilder.js +129 -0
- package/dist/test/unit/transactionBuilder/proxyBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/proxyBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/proxyBuilder.js +88 -0
- package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/singeltonRegistry.js +59 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/stakingBuilder.js +235 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +107 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +437 -0
- package/dist/test/unit/transactionBuilder/unnominateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unnominateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unnominateBuilder.js +97 -0
- package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unstakeBuilder.js +116 -0
- package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.js +115 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +117 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +20 -16
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -400
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keypair.d.ts","sourceRoot":"","sources":["../../../test/unit/keypair.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
8
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
9
|
+
const should_1 = __importDefault(require("should"));
|
|
10
|
+
const src_1 = require("../../src");
|
|
11
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
12
|
+
const resources_1 = require("../resources");
|
|
13
|
+
describe('Dot KeyPair', () => {
|
|
14
|
+
const defaultSeed = { seed: Buffer.alloc(32) };
|
|
15
|
+
const { account1, account2, account3, default: defaultAccount, bs58Account } = resources_1.accounts;
|
|
16
|
+
describe('Keypair creation', () => {
|
|
17
|
+
it('initial state', () => {
|
|
18
|
+
const keyPair = new src_1.KeyPair();
|
|
19
|
+
should_1.default.exists(keyPair.getKeys().prv);
|
|
20
|
+
should_1.default.exists(keyPair.getKeys().pub);
|
|
21
|
+
should_1.default.equal(keyPair.getKeys().prv?.length, 64);
|
|
22
|
+
should_1.default.equal(keyPair.getKeys().pub.length, 64);
|
|
23
|
+
});
|
|
24
|
+
it('initialization from private key', () => {
|
|
25
|
+
let keyPair = new src_1.KeyPair({ prv: account1.secretKey });
|
|
26
|
+
should_1.default.equal(keyPair.getKeys().prv, account1.secretKey);
|
|
27
|
+
should_1.default.equal(keyPair.getKeys().pub, account1.publicKey);
|
|
28
|
+
keyPair = new src_1.KeyPair({ prv: account2.secretKey });
|
|
29
|
+
should_1.default.equal(keyPair.getKeys().prv, account2.secretKey);
|
|
30
|
+
should_1.default.equal(keyPair.getKeys().pub, account2.publicKey);
|
|
31
|
+
});
|
|
32
|
+
it('initialization from public key', () => {
|
|
33
|
+
const keyPair = new src_1.KeyPair({ pub: account3.publicKey });
|
|
34
|
+
should_1.default.equal(keyPair.getKeys().pub, account3.publicKey);
|
|
35
|
+
});
|
|
36
|
+
it('initialization from base58 public key', () => {
|
|
37
|
+
const decodedbs58Buffer = bs58_1.default.decode(bs58Account.publicKey);
|
|
38
|
+
const publicKeyHexString = decodedbs58Buffer.toString('hex');
|
|
39
|
+
const keyPair = new src_1.KeyPair({ pub: bs58Account.publicKey });
|
|
40
|
+
should_1.default.equal(keyPair.getKeys().pub, publicKeyHexString);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('KeyPair validation', () => {
|
|
44
|
+
it('should fail to create from an invalid seed', () => {
|
|
45
|
+
const seed = { seed: Buffer.alloc(8) }; // Seed should be 512 bits (64 bytes)
|
|
46
|
+
assert_1.default.throws(() => new src_1.KeyPair(seed), /bad seed size/);
|
|
47
|
+
});
|
|
48
|
+
it('should create from a valid seed', () => {
|
|
49
|
+
const seed = { seed: Buffer.alloc(32) }; // Seed should be 512 bits (64 bytes)
|
|
50
|
+
should_1.default.doesNotThrow(() => new src_1.KeyPair(seed));
|
|
51
|
+
});
|
|
52
|
+
it('should fail to create from an invalid public key', () => {
|
|
53
|
+
const source = {
|
|
54
|
+
pub: '01D63D',
|
|
55
|
+
};
|
|
56
|
+
assert_1.default.throws(() => new src_1.KeyPair(source), /Expected a valid key to convert/);
|
|
57
|
+
});
|
|
58
|
+
it('should fail to create from an invalid private key', () => {
|
|
59
|
+
const source = {
|
|
60
|
+
prv: '82A34',
|
|
61
|
+
};
|
|
62
|
+
assert_1.default.throws(() => new src_1.KeyPair(source), /Invalid base32 characters/);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('getAddress', () => {
|
|
66
|
+
it('should get an address', () => {
|
|
67
|
+
let keyPair = new src_1.KeyPair(defaultSeed);
|
|
68
|
+
let address = keyPair.getAddress(sdk_core_1.DotAddressFormat.substrate);
|
|
69
|
+
address.should.equal(defaultAccount.address);
|
|
70
|
+
keyPair = new src_1.KeyPair({ prv: account2.secretKey });
|
|
71
|
+
address = keyPair.getAddress(sdk_core_1.DotAddressFormat.substrate);
|
|
72
|
+
address.should.equal(account2.address);
|
|
73
|
+
});
|
|
74
|
+
it('should get an address with bs58 pub key', () => {
|
|
75
|
+
const keyPair = new src_1.KeyPair({ pub: bs58Account.publicKey });
|
|
76
|
+
const address = keyPair.getAddress(sdk_core_1.DotAddressFormat.substrate);
|
|
77
|
+
address.should.equal(bs58Account.address);
|
|
78
|
+
utils_1.default.isValidAddress(address).should.equal(true);
|
|
79
|
+
});
|
|
80
|
+
it('should get a polkadot network address', () => {
|
|
81
|
+
const keyPair = new src_1.KeyPair({ pub: bs58Account.publicKey });
|
|
82
|
+
const address = keyPair.getAddress(sdk_core_1.DotAddressFormat.polkadot);
|
|
83
|
+
address.should.equal(bs58Account.polkadotAddress);
|
|
84
|
+
utils_1.default.isValidAddress(address).should.equal(true);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('getSigningKeyPair', () => {
|
|
88
|
+
it('should create a signing keypair', () => {
|
|
89
|
+
const keyPair = new src_1.KeyPair({ prv: account1.secretKey });
|
|
90
|
+
const address = keyPair.getAddress(sdk_core_1.DotAddressFormat.substrate);
|
|
91
|
+
address.should.equal(account1.address);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('getKeys', () => {
|
|
95
|
+
it('should get private and public keys in the protocol default format', () => {
|
|
96
|
+
const keyPair = new src_1.KeyPair(defaultSeed);
|
|
97
|
+
const { prv, pub } = keyPair.getKeys();
|
|
98
|
+
pub.should.equal(defaultAccount.publicKey);
|
|
99
|
+
if (prv) {
|
|
100
|
+
prv.should.equal(defaultAccount.secretKey);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
it('should get private and public keys for a random seed', () => {
|
|
104
|
+
const keyPair = new src_1.KeyPair();
|
|
105
|
+
const { prv, pub } = keyPair.getKeys();
|
|
106
|
+
should_1.default.exist(prv);
|
|
107
|
+
should_1.default.exist(pub);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5cGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlwYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbURBQXdEO0FBQ3hELG9EQUE0QjtBQUM1QixnREFBd0I7QUFDeEIsb0RBQTRCO0FBQzVCLG1DQUFvQztBQUNwQyxnRUFBd0M7QUFDeEMsNENBQXdDO0FBRXhDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLE1BQU0sV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUUvQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsR0FBRyxvQkFBUSxDQUFDO0lBRXhGLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7UUFDaEMsRUFBRSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7WUFDdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLEVBQUUsQ0FBQztZQUM5QixnQkFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtZQUN6QyxJQUFJLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN2RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV4RCxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDbkQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxNQUFNLGlCQUFpQixHQUFXLGNBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTdELE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzVELGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1lBQ3BELE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHNDQUFzQztZQUM5RSxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLGFBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLEVBQUU7WUFDekMsTUFBTSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsc0NBQXNDO1lBQy9FLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFO1lBQzFELE1BQU0sTUFBTSxHQUFHO2dCQUNiLEdBQUcsRUFBRSxRQUFRO2FBQ2QsQ0FBQztZQUNGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1lBQzNELE1BQU0sTUFBTSxHQUFHO2dCQUNiLEdBQUcsRUFBRSxPQUFPO2FBQ2IsQ0FBQztZQUNGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLDJCQUEyQixDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO1FBQzFCLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7WUFDL0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQywyQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3RCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFN0MsT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLDJCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7WUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDNUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQywyQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUM1RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLDJCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNsRCxlQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtZQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN6RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLDJCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDdkIsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtZQUMzRSxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtZQUM5RCxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sRUFBRSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLGdCQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERvdEFkZHJlc3NGb3JtYXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgYWNjb3VudHMgfSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuXG5kZXNjcmliZSgnRG90IEtleVBhaXInLCAoKSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRTZWVkID0geyBzZWVkOiBCdWZmZXIuYWxsb2MoMzIpIH07XG5cbiAgY29uc3QgeyBhY2NvdW50MSwgYWNjb3VudDIsIGFjY291bnQzLCBkZWZhdWx0OiBkZWZhdWx0QWNjb3VudCwgYnM1OEFjY291bnQgfSA9IGFjY291bnRzO1xuXG4gIGRlc2NyaWJlKCdLZXlwYWlyIGNyZWF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdpbml0aWFsIHN0YXRlJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBzaG91bGQuZXhpc3RzKGtleVBhaXIuZ2V0S2V5cygpLnBydik7XG4gICAgICBzaG91bGQuZXhpc3RzKGtleVBhaXIuZ2V0S2V5cygpLnB1Yik7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpci5nZXRLZXlzKCkucHJ2Py5sZW5ndGgsIDY0KTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlQYWlyLmdldEtleXMoKS5wdWIubGVuZ3RoLCA2NCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaW5pdGlhbGl6YXRpb24gZnJvbSBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIGxldCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IGFjY291bnQxLnNlY3JldEtleSB9KTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlQYWlyLmdldEtleXMoKS5wcnYsIGFjY291bnQxLnNlY3JldEtleSk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpci5nZXRLZXlzKCkucHViLCBhY2NvdW50MS5wdWJsaWNLZXkpO1xuXG4gICAgICBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IGFjY291bnQyLnNlY3JldEtleSB9KTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlQYWlyLmdldEtleXMoKS5wcnYsIGFjY291bnQyLnNlY3JldEtleSk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpci5nZXRLZXlzKCkucHViLCBhY2NvdW50Mi5wdWJsaWNLZXkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2luaXRpYWxpemF0aW9uIGZyb20gcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHB1YjogYWNjb3VudDMucHVibGljS2V5IH0pO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXIuZ2V0S2V5cygpLnB1YiwgYWNjb3VudDMucHVibGljS2V5KTtcbiAgICB9KTtcblxuICAgIGl0KCdpbml0aWFsaXphdGlvbiBmcm9tIGJhc2U1OCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVjb2RlZGJzNThCdWZmZXI6IEJ1ZmZlciA9IGJzNTguZGVjb2RlKGJzNThBY2NvdW50LnB1YmxpY0tleSk7XG4gICAgICBjb25zdCBwdWJsaWNLZXlIZXhTdHJpbmcgPSBkZWNvZGVkYnM1OEJ1ZmZlci50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHB1YjogYnM1OEFjY291bnQucHVibGljS2V5IH0pO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXIuZ2V0S2V5cygpLnB1YiwgcHVibGljS2V5SGV4U3RyaW5nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tleVBhaXIgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gY3JlYXRlIGZyb20gYW4gaW52YWxpZCBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VlZCA9IHsgc2VlZDogQnVmZmVyLmFsbG9jKDgpIH07IC8vICBTZWVkIHNob3VsZCBiZSA1MTIgYml0cyAoNjQgYnl0ZXMpXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBLZXlQYWlyKHNlZWQpLCAvYmFkIHNlZWQgc2l6ZS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgZnJvbSBhIHZhbGlkIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVkID0geyBzZWVkOiBCdWZmZXIuYWxsb2MoMzIpIH07IC8vICBTZWVkIHNob3VsZCBiZSA1MTIgYml0cyAoNjQgYnl0ZXMpXG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IG5ldyBLZXlQYWlyKHNlZWQpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBjcmVhdGUgZnJvbSBhbiBpbnZhbGlkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSB7XG4gICAgICAgIHB1YjogJzAxRDYzRCcsXG4gICAgICB9O1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgS2V5UGFpcihzb3VyY2UpLCAvRXhwZWN0ZWQgYSB2YWxpZCBrZXkgdG8gY29udmVydC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGNyZWF0ZSBmcm9tIGFuIGludmFsaWQgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSB7XG4gICAgICAgIHBydjogJzgyQTM0JyxcbiAgICAgIH07XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBLZXlQYWlyKHNvdXJjZSksIC9JbnZhbGlkIGJhc2UzMiBjaGFyYWN0ZXJzLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRBZGRyZXNzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2V0IGFuIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBsZXQga2V5UGFpciA9IG5ldyBLZXlQYWlyKGRlZmF1bHRTZWVkKTtcbiAgICAgIGxldCBhZGRyZXNzID0ga2V5UGFpci5nZXRBZGRyZXNzKERvdEFkZHJlc3NGb3JtYXQuc3Vic3RyYXRlKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmVxdWFsKGRlZmF1bHRBY2NvdW50LmFkZHJlc3MpO1xuXG4gICAgICBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IGFjY291bnQyLnNlY3JldEtleSB9KTtcbiAgICAgIGFkZHJlc3MgPSBrZXlQYWlyLmdldEFkZHJlc3MoRG90QWRkcmVzc0Zvcm1hdC5zdWJzdHJhdGUpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuZXF1YWwoYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBhbiBhZGRyZXNzIHdpdGggYnM1OCBwdWIga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiBiczU4QWNjb3VudC5wdWJsaWNLZXkgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga2V5UGFpci5nZXRBZGRyZXNzKERvdEFkZHJlc3NGb3JtYXQuc3Vic3RyYXRlKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmVxdWFsKGJzNThBY2NvdW50LmFkZHJlc3MpO1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgYSBwb2xrYWRvdCBuZXR3b3JrIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IGJzNThBY2NvdW50LnB1YmxpY0tleSB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrZXlQYWlyLmdldEFkZHJlc3MoRG90QWRkcmVzc0Zvcm1hdC5wb2xrYWRvdCk7XG4gICAgICBhZGRyZXNzLnNob3VsZC5lcXVhbChiczU4QWNjb3VudC5wb2xrYWRvdEFkZHJlc3MpO1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2lnbmluZ0tleVBhaXInLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSBzaWduaW5nIGtleXBhaXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IGFjY291bnQxLnNlY3JldEtleSB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrZXlQYWlyLmdldEFkZHJlc3MoRG90QWRkcmVzc0Zvcm1hdC5zdWJzdHJhdGUpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuZXF1YWwoYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRLZXlzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2V0IHByaXZhdGUgYW5kIHB1YmxpYyBrZXlzIGluIHRoZSBwcm90b2NvbCBkZWZhdWx0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcihkZWZhdWx0U2VlZCk7XG4gICAgICBjb25zdCB7IHBydiwgcHViIH0gPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIHB1Yi5zaG91bGQuZXF1YWwoZGVmYXVsdEFjY291bnQucHVibGljS2V5KTtcbiAgICAgIGlmIChwcnYpIHtcbiAgICAgICAgcHJ2LnNob3VsZC5lcXVhbChkZWZhdWx0QWNjb3VudC5zZWNyZXRLZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZXQgcHJpdmF0ZSBhbmQgcHVibGljIGtleXMgZm9yIGEgcmFuZG9tIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIGNvbnN0IHsgcHJ2LCBwdWIgfSA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLmV4aXN0KHBydik7XG4gICAgICBzaG91bGQuZXhpc3QocHViKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../test/unit/transaction.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
8
|
+
const should_1 = __importDefault(require("should"));
|
|
9
|
+
const src_1 = require("../../src");
|
|
10
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
11
|
+
const resources_1 = require("../resources");
|
|
12
|
+
const base_1 = require("./transactionBuilder/base");
|
|
13
|
+
const transaction_1 = require("../../src/lib/transaction");
|
|
14
|
+
class StubTransaction extends src_1.Transaction {
|
|
15
|
+
setTxJson(json) {
|
|
16
|
+
this._txJson = json;
|
|
17
|
+
}
|
|
18
|
+
toJson() {
|
|
19
|
+
if (this._txJson) {
|
|
20
|
+
return this._txJson;
|
|
21
|
+
}
|
|
22
|
+
return super.toJson();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
describe('Dot Transaction', () => {
|
|
26
|
+
let tx;
|
|
27
|
+
const config = (0, base_1.buildTestConfig)();
|
|
28
|
+
const material = utils_1.default.getMaterial(config);
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
tx = new StubTransaction(config);
|
|
31
|
+
});
|
|
32
|
+
describe('empty transaction', () => {
|
|
33
|
+
it('should throw empty transaction', () => {
|
|
34
|
+
assert_1.default.throws(() => tx.toJson(), /Empty transaction/);
|
|
35
|
+
assert_1.default.throws(() => tx.toBroadcastFormat(), /Empty transaction/);
|
|
36
|
+
});
|
|
37
|
+
it('should not sign', async () => {
|
|
38
|
+
try {
|
|
39
|
+
tx.sign(new src_1.KeyPair({ prv: resources_1.accounts.account1.secretKey }));
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
should_1.default.equal(e.message, 'No transaction data to sign');
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe('sign transaction', () => {
|
|
47
|
+
it('cannot sign - wrong account secret', () => {
|
|
48
|
+
tx.sender(resources_1.accounts.account1.address);
|
|
49
|
+
should_1.default.deepEqual(tx.canSign({ key: resources_1.accounts.account2.secretKey }), false);
|
|
50
|
+
});
|
|
51
|
+
it('can sign', () => {
|
|
52
|
+
tx.sender(resources_1.accounts.account2.address);
|
|
53
|
+
should_1.default.deepEqual(tx.canSign({ key: resources_1.accounts.account2.secretKey }), true);
|
|
54
|
+
});
|
|
55
|
+
it('can generate valid txHash from signed transaction', () => {
|
|
56
|
+
const signedTx = resources_1.rawTx.transfer.westendSigned2;
|
|
57
|
+
const txHash = utils_1.default.getTxHash(signedTx);
|
|
58
|
+
const expectedHash = '0x252e9b53c1d068c275ef4c9b5afcffb2df42859203be1305d148c0c1441a5b20';
|
|
59
|
+
txHash.should.equal(expectedHash);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('should build from raw unsigned tx', async () => {
|
|
63
|
+
it('Transaction size validation', async () => {
|
|
64
|
+
const builder = new src_1.TransferBuilder(config).material(material);
|
|
65
|
+
builder.from(resources_1.rawTx.transfer.unsigned);
|
|
66
|
+
builder
|
|
67
|
+
.validity({ firstValid: 3933 })
|
|
68
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
69
|
+
.sender({ address: resources_1.accounts.account1.address });
|
|
70
|
+
const tx = (await builder.build());
|
|
71
|
+
should_1.default.deepEqual(tx.transactionSize(), resources_1.rawTx.transfer.unsigned.length / 2);
|
|
72
|
+
});
|
|
73
|
+
it('Should rebuild different hex if keepAlive is true or false for transferAll txs', async () => {
|
|
74
|
+
const keepAliveFalseBuilder = new src_1.TransferBuilder(config).material(material);
|
|
75
|
+
keepAliveFalseBuilder.from(resources_1.rawTx.transfer.unsigned);
|
|
76
|
+
keepAliveFalseBuilder
|
|
77
|
+
.validity({ firstValid: 3933 })
|
|
78
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
79
|
+
.sender({ address: resources_1.accounts.account1.address });
|
|
80
|
+
const keepAliveFalseTx = (await keepAliveFalseBuilder.build()).toJson();
|
|
81
|
+
const keepAliveTrueBuilder = new src_1.TransferBuilder(config).material(material);
|
|
82
|
+
keepAliveTrueBuilder.from(resources_1.rawTx.transferAll.signed);
|
|
83
|
+
keepAliveTrueBuilder
|
|
84
|
+
.validity({ firstValid: 3933 })
|
|
85
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
86
|
+
.sender({ address: resources_1.accounts.account1.address });
|
|
87
|
+
const keepAliveTrueTx = (await keepAliveTrueBuilder.build()).toJson();
|
|
88
|
+
should_1.default.notEqual(keepAliveFalseTx.id, keepAliveTrueTx.id);
|
|
89
|
+
should_1.default.notEqual(keepAliveFalseTx.keepAlive, keepAliveTrueTx.keepAlive);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe('Dot Explain Transaction', () => {
|
|
93
|
+
// let tx: StubTransaction;
|
|
94
|
+
const sender = resources_1.accounts.account1;
|
|
95
|
+
const receiver = resources_1.accounts.account3;
|
|
96
|
+
it('should explain a transfer transaction', async () => {
|
|
97
|
+
const json = JSON.parse(resources_1.jsonTransactions.transfer);
|
|
98
|
+
tx.setTxJson(json);
|
|
99
|
+
tx.transactionType(sdk_core_1.TransactionType.Send);
|
|
100
|
+
const explain = tx.explainTransaction();
|
|
101
|
+
explain.id.should.equal('0xecb860905342cf985b39276a07d6e6696746de4623c07df863f69cba153f939a');
|
|
102
|
+
explain.outputAmount.should.equal('1000000000000');
|
|
103
|
+
explain.outputs[0].amount.should.equal('1000000000000');
|
|
104
|
+
explain.outputs[0].address.should.equal(resources_1.accounts.account2.address);
|
|
105
|
+
explain.fee.fee.should.equal('0');
|
|
106
|
+
explain.changeAmount.should.equal('0');
|
|
107
|
+
explain.type.should.equal(sdk_core_1.TransactionType.Send);
|
|
108
|
+
});
|
|
109
|
+
it('should explain a proxy transfer transaction', async () => {
|
|
110
|
+
const json = JSON.parse(resources_1.jsonTransactions.proxyTransfer);
|
|
111
|
+
tx.setTxJson(json);
|
|
112
|
+
tx.transactionType(sdk_core_1.TransactionType.Send);
|
|
113
|
+
const explain = tx.explainTransaction();
|
|
114
|
+
explain.outputAmount.should.equal('90034235235322');
|
|
115
|
+
explain.outputs[0].amount.should.equal('90034235235322');
|
|
116
|
+
explain.outputs[0].address.should.equal(resources_1.accounts.account2.address);
|
|
117
|
+
explain.fee.fee.should.equal('0');
|
|
118
|
+
explain.changeAmount.should.equal('0');
|
|
119
|
+
explain.type.should.equal(sdk_core_1.TransactionType.Send);
|
|
120
|
+
explain.owner?.should.equal(sender.address);
|
|
121
|
+
explain.forceProxyType?.should.equal('Any');
|
|
122
|
+
});
|
|
123
|
+
it('should explain a address initialization transaction', async () => {
|
|
124
|
+
const json = JSON.parse(resources_1.jsonTransactions.walletInitialization);
|
|
125
|
+
tx.setTxJson(json);
|
|
126
|
+
tx.transactionType(sdk_core_1.TransactionType.AddressInitialization);
|
|
127
|
+
const explain = tx.explainTransaction();
|
|
128
|
+
explain.outputAmount.should.equal('0');
|
|
129
|
+
explain.fee.fee.should.equal('0');
|
|
130
|
+
explain.changeAmount.should.equal('0');
|
|
131
|
+
explain.type.should.equal(sdk_core_1.TransactionType.AddressInitialization);
|
|
132
|
+
explain.owner?.should.equal(receiver.address);
|
|
133
|
+
explain.proxyType?.should.equal('Any');
|
|
134
|
+
explain.delay?.should.equal('0');
|
|
135
|
+
});
|
|
136
|
+
it('should explain a staking transaction', async () => {
|
|
137
|
+
const json = JSON.parse(resources_1.jsonTransactions.staking);
|
|
138
|
+
tx.setTxJson(json);
|
|
139
|
+
tx.transactionType(sdk_core_1.TransactionType.StakingActivate);
|
|
140
|
+
const explain = tx.explainTransaction();
|
|
141
|
+
explain.outputAmount.should.equal('50000000000000');
|
|
142
|
+
explain.outputs[0].amount.should.equal('50000000000000');
|
|
143
|
+
explain.outputs[0].address.should.equal(resources_1.accounts.account2.address);
|
|
144
|
+
explain.fee.fee.should.equal('0');
|
|
145
|
+
explain.changeAmount.should.equal('0');
|
|
146
|
+
explain.type.should.equal(sdk_core_1.TransactionType.StakingActivate);
|
|
147
|
+
explain.payee?.should.equal('Staked');
|
|
148
|
+
});
|
|
149
|
+
it('should explain a staking transaction with receiver account', async () => {
|
|
150
|
+
const json = JSON.parse(resources_1.jsonTransactions.stakingPayee);
|
|
151
|
+
tx.setTxJson(json);
|
|
152
|
+
tx.transactionType(sdk_core_1.TransactionType.StakingActivate);
|
|
153
|
+
const explain = tx.explainTransaction();
|
|
154
|
+
explain.outputAmount.should.equal('50000000000000');
|
|
155
|
+
explain.outputs[0].amount.should.equal('50000000000000');
|
|
156
|
+
explain.outputs[0].address.should.equal(resources_1.accounts.account2.address);
|
|
157
|
+
explain.fee.fee.should.equal('0');
|
|
158
|
+
explain.changeAmount.should.equal('0');
|
|
159
|
+
explain.type.should.equal(sdk_core_1.TransactionType.StakingActivate);
|
|
160
|
+
explain.payee?.should.equal(resources_1.accounts.account2.address);
|
|
161
|
+
});
|
|
162
|
+
it('should explain a staking unlock transaction', async () => {
|
|
163
|
+
const json = JSON.parse(resources_1.jsonTransactions.unstaking);
|
|
164
|
+
tx.setTxJson(json);
|
|
165
|
+
tx.transactionType(sdk_core_1.TransactionType.StakingUnlock);
|
|
166
|
+
const explain = tx.explainTransaction();
|
|
167
|
+
explain.outputAmount.should.equal('50000000000000');
|
|
168
|
+
explain.outputs[0].amount.should.equal('50000000000000');
|
|
169
|
+
explain.outputs[0].address.should.equal(resources_1.accounts.account1.address);
|
|
170
|
+
explain.fee.fee.should.equal('0');
|
|
171
|
+
explain.changeAmount.should.equal('0');
|
|
172
|
+
explain.type.should.equal(sdk_core_1.TransactionType.StakingUnlock);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
describe('inputs and outputs', () => {
|
|
176
|
+
it('should generate inputs and output for a batch staking transaction', async () => {
|
|
177
|
+
const builder = new src_1.BatchTransactionBuilder(config).material(material);
|
|
178
|
+
builder.from(resources_1.rawTx.stake.batchAll.signed);
|
|
179
|
+
builder
|
|
180
|
+
.validity({ firstValid: 3933 })
|
|
181
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
182
|
+
const tx = await builder.build();
|
|
183
|
+
(0, should_1.default)(tx.inputs).not.be.null();
|
|
184
|
+
(0, should_1.default)(tx.inputs.length).eql(2);
|
|
185
|
+
// Staked amount
|
|
186
|
+
(0, should_1.default)(tx.inputs[0].address).eql(resources_1.accounts.account1.address);
|
|
187
|
+
(0, should_1.default)(tx.inputs[0].value).eql('500000000000');
|
|
188
|
+
(0, should_1.default)(tx.inputs[0].coin).eql('tdot');
|
|
189
|
+
// Add proxy storage fee
|
|
190
|
+
(0, should_1.default)(tx.inputs[1].address).eql(resources_1.accounts.account1.address);
|
|
191
|
+
(0, should_1.default)(tx.inputs[1].value).eql('10036500000');
|
|
192
|
+
(0, should_1.default)(tx.inputs[1].coin).eql('tdot');
|
|
193
|
+
(0, should_1.default)(tx.outputs).not.be.null();
|
|
194
|
+
(0, should_1.default)(tx.outputs.length).eql(2);
|
|
195
|
+
// Staked amount
|
|
196
|
+
(0, should_1.default)(tx.outputs[0].address).eql(transaction_1.STAKING_DESTINATION);
|
|
197
|
+
(0, should_1.default)(tx.outputs[0].value).eql('500000000000');
|
|
198
|
+
(0, should_1.default)(tx.outputs[0].coin).eql('tdot');
|
|
199
|
+
// Add proxy storage fee
|
|
200
|
+
(0, should_1.default)(tx.outputs[1].address).eql(resources_1.accounts.stakingProxy.address);
|
|
201
|
+
(0, should_1.default)(tx.outputs[1].value).eql('10036500000');
|
|
202
|
+
(0, should_1.default)(tx.outputs[1].coin).eql('tdot');
|
|
203
|
+
});
|
|
204
|
+
it('should generate inputs and output for a batch unstaking transaction', async () => {
|
|
205
|
+
const builder = new src_1.BatchTransactionBuilder(config).material(material);
|
|
206
|
+
builder.from(resources_1.rawTx.unstake.batchAll.signed);
|
|
207
|
+
builder
|
|
208
|
+
.validity({ firstValid: 3933 })
|
|
209
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
210
|
+
const tx = await builder.build();
|
|
211
|
+
(0, should_1.default)(tx.inputs).not.be.null();
|
|
212
|
+
(0, should_1.default)(tx.inputs.length).eql(1);
|
|
213
|
+
// Remove proxy storage fee refund
|
|
214
|
+
(0, should_1.default)(tx.inputs[0].address).eql(resources_1.accounts.stakingProxy.address);
|
|
215
|
+
(0, should_1.default)(tx.inputs[0].value).eql('10036500000');
|
|
216
|
+
(0, should_1.default)(tx.inputs[0].coin).eql('tdot');
|
|
217
|
+
(0, should_1.default)(tx.outputs).not.be.null();
|
|
218
|
+
(0, should_1.default)(tx.outputs.length).eql(1);
|
|
219
|
+
// Remove proxy storage fee refund
|
|
220
|
+
(0, should_1.default)(tx.outputs[0].address).eql(resources_1.accounts.account1.address);
|
|
221
|
+
(0, should_1.default)(tx.outputs[0].value).eql('10036500000');
|
|
222
|
+
(0, should_1.default)(tx.outputs[0].coin).eql('tdot');
|
|
223
|
+
});
|
|
224
|
+
it('should generate inputs and output for a stake more transaction', async () => {
|
|
225
|
+
const builder = new src_1.StakingBuilder(config).material(material);
|
|
226
|
+
builder.from(resources_1.rawTx.stakeMore.signed);
|
|
227
|
+
builder
|
|
228
|
+
.validity({ firstValid: 3933 })
|
|
229
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
230
|
+
const tx = await builder.build();
|
|
231
|
+
(0, should_1.default)(tx.inputs).not.be.null();
|
|
232
|
+
(0, should_1.default)(tx.inputs.length).eql(1);
|
|
233
|
+
// Amount to add to stake
|
|
234
|
+
(0, should_1.default)(tx.inputs[0].address).eql(resources_1.accounts.account1.address);
|
|
235
|
+
(0, should_1.default)(tx.inputs[0].value).eql('90034235235322');
|
|
236
|
+
(0, should_1.default)(tx.inputs[0].coin).eql('tdot');
|
|
237
|
+
(0, should_1.default)(tx.outputs).not.be.null();
|
|
238
|
+
(0, should_1.default)(tx.outputs.length).eql(1);
|
|
239
|
+
(0, should_1.default)(tx.outputs[0].address).eql(transaction_1.STAKING_DESTINATION);
|
|
240
|
+
(0, should_1.default)(tx.outputs[0].value).eql('90034235235322');
|
|
241
|
+
(0, should_1.default)(tx.outputs[0].coin).eql('tdot');
|
|
242
|
+
});
|
|
243
|
+
it('should generate inputs and output for an unstake transaction', async () => {
|
|
244
|
+
const builder = new src_1.UnstakeBuilder(config).material(material);
|
|
245
|
+
builder.from(resources_1.rawTx.unstake.signed);
|
|
246
|
+
builder
|
|
247
|
+
.validity({ firstValid: 3933 })
|
|
248
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
249
|
+
const tx = await builder.build();
|
|
250
|
+
(0, should_1.default)(tx.inputs).not.be.null();
|
|
251
|
+
(0, should_1.default)(tx.inputs.length).eql(0);
|
|
252
|
+
(0, should_1.default)(tx.outputs).not.be.null();
|
|
253
|
+
(0, should_1.default)(tx.outputs.length).eql(0);
|
|
254
|
+
});
|
|
255
|
+
it('should generate inputs and output for a withdraw staked transaction', async () => {
|
|
256
|
+
const builder = new src_1.WithdrawUnstakedBuilder(config).material(material);
|
|
257
|
+
builder.from(resources_1.rawTx.withdrawUnbonded.signed);
|
|
258
|
+
builder
|
|
259
|
+
.validity({ firstValid: 3933 })
|
|
260
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d');
|
|
261
|
+
const tx = await builder.build();
|
|
262
|
+
(0, should_1.default)(tx.inputs).not.be.null();
|
|
263
|
+
(0, should_1.default)(tx.inputs.length).eql(0);
|
|
264
|
+
(0, should_1.default)(tx.outputs).not.be.null();
|
|
265
|
+
(0, should_1.default)(tx.outputs.length).eql(0);
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtREFBdUQ7QUFDdkQsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixtQ0FTbUI7QUFDbkIsZ0VBQXdDO0FBQ3hDLDRDQUFpRTtBQUNqRSxvREFBNEQ7QUFDNUQsMkRBQWdFO0FBRWhFLE1BQU0sZUFBZ0IsU0FBUSxpQkFBVztJQUd2QyxTQUFTLENBQUMsSUFBc0I7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdEIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7SUFDL0IsSUFBSSxFQUFtQixDQUFDO0lBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsR0FBRSxDQUFDO0lBQ2pDLE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0MsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEVBQUUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtZQUN4QyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUN0RCxnQkFBTSxDQUFDLE1BQU0sQ0FB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RSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pDLElBQUEsZ0JBQU0sRUFBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQge1xuICBLZXlQYWlyLFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNmZXJCdWlsZGVyLFxuICBJbnRlcmZhY2UsXG4gIEJhdGNoVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBTdGFraW5nQnVpbGRlcixcbiAgVW5zdGFrZUJ1aWxkZXIsXG4gIFdpdGhkcmF3VW5zdGFrZWRCdWlsZGVyLFxufSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgcmF3VHgsIGFjY291bnRzLCBqc29uVHJhbnNhY3Rpb25zIH0gZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IGJ1aWxkVGVzdENvbmZpZyB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyL2Jhc2UnO1xuaW1wb3J0IHsgU1RBS0lOR19ERVNUSU5BVElPTiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuXG5jbGFzcyBTdHViVHJhbnNhY3Rpb24gZXh0ZW5kcyBUcmFuc2FjdGlvbiB7XG4gIHByaXZhdGUgX3R4SnNvbjogSW50ZXJmYWNlLlR4RGF0YTtcblxuICBzZXRUeEpzb24oanNvbjogSW50ZXJmYWNlLlR4RGF0YSkge1xuICAgIHRoaXMuX3R4SnNvbiA9IGpzb247XG4gIH1cblxuICB0b0pzb24oKTogSW50ZXJmYWNlLlR4RGF0YSB7XG4gICAgaWYgKHRoaXMuX3R4SnNvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX3R4SnNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnRvSnNvbigpO1xuICB9XG59XG5cbmRlc2NyaWJlKCdEb3QgVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gIGxldCB0eDogU3R1YlRyYW5zYWN0aW9uO1xuICBjb25zdCBjb25maWcgPSBidWlsZFRlc3RDb25maWcoKTtcbiAgY29uc3QgbWF0ZXJpYWwgPSB1dGlscy5nZXRNYXRlcmlhbChjb25maWcpO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHR4ID0gbmV3IFN0dWJUcmFuc2FjdGlvbihjb25maWcpO1xuICB9KTtcblxuICBkZXNjcmliZSgnZW1wdHkgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlbXB0eSB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHgudG9Kc29uKCksIC9FbXB0eSB0cmFuc2FjdGlvbi8pO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCAvRW1wdHkgdHJhbnNhY3Rpb24vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHNpZ24nLCBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0eC5zaWduKG5ldyBLZXlQYWlyKHsgcHJ2OiBhY2NvdW50cy5hY2NvdW50MS5zZWNyZXRLZXkgfSkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzaG91bGQuZXF1YWwoZS5tZXNzYWdlLCAnTm8gdHJhbnNhY3Rpb24gZGF0YSB0byBzaWduJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdjYW5ub3Qgc2lnbiAtIHdyb25nIGFjY291bnQgc2VjcmV0JywgKCkgPT4ge1xuICAgICAgdHguc2VuZGVyKGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5jYW5TaWduKHsga2V5OiBhY2NvdW50cy5hY2NvdW50Mi5zZWNyZXRLZXkgfSksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYW4gc2lnbicsICgpID0+IHtcbiAgICAgIHR4LnNlbmRlcihhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHguY2FuU2lnbih7IGtleTogYWNjb3VudHMuYWNjb3VudDIuc2VjcmV0S2V5IH0pLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYW4gZ2VuZXJhdGUgdmFsaWQgdHhIYXNoIGZyb20gc2lnbmVkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2lnbmVkVHggPSByYXdUeC50cmFuc2Zlci53ZXN0ZW5kU2lnbmVkMjtcbiAgICAgIGNvbnN0IHR4SGFzaCA9IHV0aWxzLmdldFR4SGFzaChzaWduZWRUeCk7XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2ggPSAnMHgyNTJlOWI1M2MxZDA2OGMyNzVlZjRjOWI1YWZjZmZiMmRmNDI4NTkyMDNiZTEzMDVkMTQ4YzBjMTQ0MWE1YjIwJztcblxuICAgICAgdHhIYXNoLnNob3VsZC5lcXVhbChleHBlY3RlZEhhc2gpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGJ1aWxkIGZyb20gcmF3IHVuc2lnbmVkIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgIGl0KCdUcmFuc2FjdGlvbiBzaXplIHZhbGlkYXRpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRyYW5zZmVyQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKG1hdGVyaWFsKTtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC50cmFuc2Zlci51bnNpZ25lZCk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyB9KTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRyYW5zYWN0aW9uU2l6ZSgpLCByYXdUeC50cmFuc2Zlci51bnNpZ25lZC5sZW5ndGggLyAyKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcmVidWlsZCBkaWZmZXJlbnQgaGV4IGlmIGtlZXBBbGl2ZSBpcyB0cnVlIG9yIGZhbHNlIGZvciB0cmFuc2ZlckFsbCB0eHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVGYWxzZUJ1aWxkZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKGNvbmZpZykubWF0ZXJpYWwobWF0ZXJpYWwpO1xuICAgICAga2VlcEFsaXZlRmFsc2VCdWlsZGVyLmZyb20ocmF3VHgudHJhbnNmZXIudW5zaWduZWQpO1xuICAgICAga2VlcEFsaXZlRmFsc2VCdWlsZGVyXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyB9KTtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZUZhbHNlVHggPSAoYXdhaXQga2VlcEFsaXZlRmFsc2VCdWlsZGVyLmJ1aWxkKCkpLnRvSnNvbigpO1xuXG4gICAgICBjb25zdCBrZWVwQWxpdmVUcnVlQnVpbGRlciA9IG5ldyBUcmFuc2ZlckJ1aWxkZXIoY29uZmlnKS5tYXRlcmlhbChtYXRlcmlhbCk7XG4gICAgICBrZWVwQWxpdmVUcnVlQnVpbGRlci5mcm9tKHJhd1R4LnRyYW5zZmVyQWxsLnNpZ25lZCk7XG4gICAgICBrZWVwQWxpdmVUcnVlQnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzIH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MgfSk7XG4gICAgICBjb25zdCBrZWVwQWxpdmVUcnVlVHggPSAoYXdhaXQga2VlcEFsaXZlVHJ1ZUJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG5cbiAgICAgIHNob3VsZC5ub3RFcXVhbChrZWVwQWxpdmVGYWxzZVR4LmlkLCBrZWVwQWxpdmVUcnVlVHguaWQpO1xuICAgICAgc2hvdWxkLm5vdEVxdWFsKGtlZXBBbGl2ZUZhbHNlVHgua2VlcEFsaXZlLCBrZWVwQWxpdmVUcnVlVHgua2VlcEFsaXZlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0RvdCBFeHBsYWluIFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIC8vIGxldCB0eDogU3R1YlRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IHNlbmRlciA9IGFjY291bnRzLmFjY291bnQxO1xuICAgIGNvbnN0IHJlY2VpdmVyID0gYWNjb3VudHMuYWNjb3VudDM7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKGpzb25UcmFuc2FjdGlvbnMudHJhbnNmZXIpIGFzIEludGVyZmFjZS5UeERhdGE7XG4gICAgICB0eC5zZXRUeEpzb24oanNvbik7XG4gICAgICB0eC50cmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgY29uc3QgZXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgZXhwbGFpbi5pZC5zaG91bGQuZXF1YWwoJzB4ZWNiODYwOTA1MzQyY2Y5ODViMzkyNzZhMDdkNmU2Njk2NzQ2ZGU0NjIzYzA3ZGY4NjNmNjljYmExNTNmOTM5YScpO1xuICAgICAgZXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKCcxMDAwMDAwMDAwMDAwJyk7XG4gICAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwMDAwMCcpO1xuICAgICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgICAgZXhwbGFpbi5mZWUuZmVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgZXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICBleHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBhIHByb3h5IHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoanNvblRyYW5zYWN0aW9ucy5wcm94eVRyYW5zZmVyKSBhcyBJbnRlcmZhY2UuVHhEYXRhO1xuICAgICAgdHguc2V0VHhKc29uKGpzb24pO1xuICAgICAgdHgudHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIGNvbnN0IGV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIGV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCgnOTAwMzQyMzUyMzUzMjInKTtcbiAgICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKCc5MDAzNDIzNTIzNTMyMicpO1xuICAgICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgICAgZXhwbGFpbi5mZWUuZmVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgZXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICBleHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIGV4cGxhaW4ub3duZXI/LnNob3VsZC5lcXVhbChzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBleHBsYWluLmZvcmNlUHJveHlUeXBlPy5zaG91bGQuZXF1YWwoJ0FueScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgYWRkcmVzcyBpbml0aWFsaXphdGlvbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKGpzb25UcmFuc2FjdGlvbnMud2FsbGV0SW5pdGlhbGl6YXRpb24pIGFzIEludGVyZmFjZS5UeERhdGE7XG4gICAgICB0eC5zZXRUeEpzb24oanNvbik7XG4gICAgICB0eC50cmFuc2FjdGlvblR5cGUoVHJhbnNhY3Rpb25UeXBlLkFkZHJlc3NJbml0aWFsaXphdGlvbik7XG4gICAgICBjb25zdCBleHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICBleHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIGV4cGxhaW4uZmVlLmZlZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIGV4cGxhaW4uY2hhbmdlQW1vdW50LnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgZXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uKTtcbiAgICAgIGV4cGxhaW4ub3duZXI/LnNob3VsZC5lcXVhbChyZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIGV4cGxhaW4ucHJveHlUeXBlPy5zaG91bGQuZXF1YWwoJ0FueScpO1xuICAgICAgZXhwbGFpbi5kZWxheT8uc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYSBzdGFraW5nIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoanNvblRyYW5zYWN0aW9ucy5zdGFraW5nKSBhcyBJbnRlcmZhY2UuVHhEYXRhO1xuICAgICAgdHguc2V0VHhKc29uKGpzb24pO1xuICAgICAgdHgudHJhbnNhY3Rpb25UeXBlKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuICAgICAgY29uc3QgZXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgZXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKCc1MDAwMDAwMDAwMDAwMCcpO1xuICAgICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoJzUwMDAwMDAwMDAwMDAwJyk7XG4gICAgICBleHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgICBleHBsYWluLmZlZS5mZWUuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICBleHBsYWluLmNoYW5nZUFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIGV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdBY3RpdmF0ZSk7XG4gICAgICBleHBsYWluLnBheWVlPy5zaG91bGQuZXF1YWwoJ1N0YWtlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc3Rha2luZyB0cmFuc2FjdGlvbiB3aXRoIHJlY2VpdmVyIGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShqc29uVHJhbnNhY3Rpb25zLnN0YWtpbmdQYXllZSkgYXMgSW50ZXJmYWNlLlR4RGF0YTtcbiAgICAgIHR4LnNldFR4SnNvbihqc29uKTtcbiAgICAgIHR4LnRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0FjdGl2YXRlKTtcbiAgICAgIGNvbnN0IGV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIGV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCgnNTAwMDAwMDAwMDAwMDAnKTtcbiAgICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKCc1MDAwMDAwMDAwMDAwMCcpO1xuICAgICAgZXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKGFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgICAgZXhwbGFpbi5mZWUuZmVlLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgZXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICBleHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nQWN0aXZhdGUpO1xuICAgICAgZXhwbGFpbi5wYXllZT8uc2hvdWxkLmVxdWFsKGFjY291bnRzLmFjY291bnQyLmFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgc3Rha2luZyB1bmxvY2sgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShqc29uVHJhbnNhY3Rpb25zLnVuc3Rha2luZykgYXMgSW50ZXJmYWNlLlR4RGF0YTtcbiAgICAgIHR4LnNldFR4SnNvbihqc29uKTtcbiAgICAgIHR4LnRyYW5zYWN0aW9uVHlwZShUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jayk7XG4gICAgICBjb25zdCBleHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICBleHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoJzUwMDAwMDAwMDAwMDAwJyk7XG4gICAgICBleHBsYWluLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnNTAwMDAwMDAwMDAwMDAnKTtcbiAgICAgIGV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbChhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIGV4cGxhaW4uZmVlLmZlZS5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIGV4cGxhaW4uY2hhbmdlQW1vdW50LnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgZXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1VubG9jayk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpbnB1dHMgYW5kIG91dHB1dHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBpbnB1dHMgYW5kIG91dHB1dCBmb3IgYSBiYXRjaCBzdGFraW5nIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCYXRjaFRyYW5zYWN0aW9uQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKG1hdGVyaWFsKTtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC5zdGFrZS5iYXRjaEFsbC5zaWduZWQpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzIH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBzaG91bGQodHguaW5wdXRzKS5ub3QuYmUubnVsbCgpO1xuICAgICAgc2hvdWxkKHR4LmlucHV0cy5sZW5ndGgpLmVxbCgyKTtcblxuICAgICAgLy8gU3Rha2VkIGFtb3VudFxuICAgICAgc2hvdWxkKHR4LmlucHV0c1swXS5hZGRyZXNzKS5lcWwoYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBzaG91bGQodHguaW5wdXRzWzBdLnZhbHVlKS5lcWwoJzUwMDAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkKHR4LmlucHV0c1swXS5jb2luKS5lcWwoJ3Rkb3QnKTtcblxuICAgICAgLy8gQWRkIHByb3h5IHN0b3JhZ2UgZmVlXG4gICAgICBzaG91bGQodHguaW5wdXRzWzFdLmFkZHJlc3MpLmVxbChhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIHNob3VsZCh0eC5pbnB1dHNbMV0udmFsdWUpLmVxbCgnMTAwMzY1MDAwMDAnKTtcbiAgICAgIHNob3VsZCh0eC5pbnB1dHNbMV0uY29pbikuZXFsKCd0ZG90Jyk7XG5cbiAgICAgIHNob3VsZCh0eC5vdXRwdXRzKS5ub3QuYmUubnVsbCgpO1xuICAgICAgc2hvdWxkKHR4Lm91dHB1dHMubGVuZ3RoKS5lcWwoMik7XG5cbiAgICAgIC8vIFN0YWtlZCBhbW91bnRcbiAgICAgIHNob3VsZCh0eC5vdXRwdXRzWzBdLmFkZHJlc3MpLmVxbChTVEFLSU5HX0RFU1RJTkFUSU9OKTtcbiAgICAgIHNob3VsZCh0eC5vdXRwdXRzWzBdLnZhbHVlKS5lcWwoJzUwMDAwMDAwMDAwMCcpO1xuICAgICAgc2hvdWxkKHR4Lm91dHB1dHNbMF0uY29pbikuZXFsKCd0ZG90Jyk7XG5cbiAgICAgIC8vIEFkZCBwcm94eSBzdG9yYWdlIGZlZVxuICAgICAgc2hvdWxkKHR4Lm91dHB1dHNbMV0uYWRkcmVzcykuZXFsKGFjY291bnRzLnN0YWtpbmdQcm94eS5hZGRyZXNzKTtcbiAgICAgIHNob3VsZCh0eC5vdXRwdXRzWzFdLnZhbHVlKS5lcWwoJzEwMDM2NTAwMDAwJyk7XG4gICAgICBzaG91bGQodHgub3V0cHV0c1sxXS5jb2luKS5lcWwoJ3Rkb3QnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgaW5wdXRzIGFuZCBvdXRwdXQgZm9yIGEgYmF0Y2ggdW5zdGFraW5nIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCYXRjaFRyYW5zYWN0aW9uQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKG1hdGVyaWFsKTtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC51bnN0YWtlLmJhdGNoQWxsLnNpZ25lZCk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIHNob3VsZCh0eC5pbnB1dHMpLm5vdC5iZS5udWxsKCk7XG4gICAgICBzaG91bGQodHguaW5wdXRzLmxlbmd0aCkuZXFsKDEpO1xuXG4gICAgICAvLyBSZW1vdmUgcHJveHkgc3RvcmFnZSBmZWUgcmVmdW5kXG4gICAgICBzaG91bGQodHguaW5wdXRzWzBdLmFkZHJlc3MpLmVxbChhY2NvdW50cy5zdGFraW5nUHJveHkuYWRkcmVzcyk7XG4gICAgICBzaG91bGQodHguaW5wdXRzWzBdLnZhbHVlKS5lcWwoJzEwMDM2NTAwMDAwJyk7XG4gICAgICBzaG91bGQodHguaW5wdXRzWzBdLmNvaW4pLmVxbCgndGRvdCcpO1xuXG4gICAgICBzaG91bGQodHgub3V0cHV0cykubm90LmJlLm51bGwoKTtcbiAgICAgIHNob3VsZCh0eC5vdXRwdXRzLmxlbmd0aCkuZXFsKDEpO1xuXG4gICAgICAvLyBSZW1vdmUgcHJveHkgc3RvcmFnZSBmZWUgcmVmdW5kXG4gICAgICBzaG91bGQodHgub3V0cHV0c1swXS5hZGRyZXNzKS5lcWwoYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBzaG91bGQodHgub3V0cHV0c1swXS52YWx1ZSkuZXFsKCcxMDAzNjUwMDAwMCcpO1xuICAgICAgc2hvdWxkKHR4Lm91dHB1dHNbMF0uY29pbikuZXFsKCd0ZG90Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGlucHV0cyBhbmQgb3V0cHV0IGZvciBhIHN0YWtlIG1vcmUgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFN0YWtpbmdCdWlsZGVyKGNvbmZpZykubWF0ZXJpYWwobWF0ZXJpYWwpO1xuICAgICAgYnVpbGRlci5mcm9tKHJhd1R4LnN0YWtlTW9yZS5zaWduZWQpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzIH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBzaG91bGQodHguaW5wdXRzKS5ub3QuYmUubnVsbCgpO1xuICAgICAgc2hvdWxkKHR4LmlucHV0cy5sZW5ndGgpLmVxbCgxKTtcblxuICAgICAgLy8gQW1vdW50IHRvIGFkZCB0byBzdGFrZVxuICAgICAgc2hvdWxkKHR4LmlucHV0c1swXS5hZGRyZXNzKS5lcWwoYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBzaG91bGQodHguaW5wdXRzWzBdLnZhbHVlKS5lcWwoJzkwMDM0MjM1MjM1MzIyJyk7XG4gICAgICBzaG91bGQodHguaW5wdXRzWzBdLmNvaW4pLmVxbCgndGRvdCcpO1xuXG4gICAgICBzaG91bGQodHgub3V0cHV0cykubm90LmJlLm51bGwoKTtcbiAgICAgIHNob3VsZCh0eC5vdXRwdXRzLmxlbmd0aCkuZXFsKDEpO1xuXG4gICAgICBzaG91bGQodHgub3V0cHV0c1swXS5hZGRyZXNzKS5lcWwoU1RBS0lOR19ERVNUSU5BVElPTik7XG4gICAgICBzaG91bGQodHgub3V0cHV0c1swXS52YWx1ZSkuZXFsKCc5MDAzNDIzNTIzNTMyMicpO1xuICAgICAgc2hvdWxkKHR4Lm91dHB1dHNbMF0uY29pbikuZXFsKCd0ZG90Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGlucHV0cyBhbmQgb3V0cHV0IGZvciBhbiB1bnN0YWtlIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBVbnN0YWtlQnVpbGRlcihjb25maWcpLm1hdGVyaWFsKG1hdGVyaWFsKTtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC51bnN0YWtlLnNpZ25lZCk7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IDM5MzMgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIHNob3VsZCh0eC5pbnB1dHMpLm5vdC5iZS5udWxsKCk7XG4gICAgICBzaG91bGQodHguaW5wdXRzLmxlbmd0aCkuZXFsKDApO1xuXG4gICAgICBzaG91bGQodHgub3V0cHV0cykubm90LmJlLm51bGwoKTtcbiAgICAgIHNob3VsZCh0eC5vdXRwdXRzLmxlbmd0aCkuZXFsKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBpbnB1dHMgYW5kIG91dHB1dCBmb3IgYSB3aXRoZHJhdyBzdGFrZWQgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFdpdGhkcmF3VW5zdGFrZWRCdWlsZGVyKGNvbmZpZykubWF0ZXJpYWwobWF0ZXJpYWwpO1xuICAgICAgYnVpbGRlci5mcm9tKHJhd1R4LndpdGhkcmF3VW5ib25kZWQuc2lnbmVkKTtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMyB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2soJzB4MTQ5Nzk5YmM5NjAyY2I1Y2YyMDFmMzQyNWZiOGQyNTNiMmQ0ZTYxZmMxMTlkY2FiMzI0OWYzMDdmNTk0NzU0ZCcpO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgc2hvdWxkKHR4LmlucHV0cykubm90LmJlLm51bGwoKTtcbiAgICAgIHNob3VsZCh0eC5pbnB1dHMubGVuZ3RoKS5lcWwoMCk7XG5cbiAgICAgIHNob3VsZCh0eC5vdXRwdXRzKS5ub3QuYmUubnVsbCgpO1xuICAgICAgc2hvdWxkKHR4Lm91dHB1dHMubGVuZ3RoKS5lcWwoMCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addressInitializationBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/addressInitializationBuilder.ts"],"names":[],"mappings":""}
|