@bitgo-beta/sdk-coin-polyx 1.0.0-alpha.21 → 1.0.0-alpha.211
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/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/baseBuilder.d.ts +24 -0
- package/dist/src/lib/baseBuilder.d.ts.map +1 -0
- package/dist/src/lib/baseBuilder.js +31 -0
- package/dist/src/lib/batchStakingBuilder.d.ts +79 -0
- package/dist/src/lib/batchStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/batchStakingBuilder.js +302 -0
- package/dist/src/lib/batchUnstakingBuilder.d.ts +39 -0
- package/dist/src/lib/batchUnstakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/batchUnstakingBuilder.js +129 -0
- package/dist/src/lib/bondExtraBuilder.d.ts +37 -0
- package/dist/src/lib/bondExtraBuilder.d.ts.map +1 -0
- package/dist/src/lib/bondExtraBuilder.js +103 -0
- package/dist/src/lib/constants.d.ts +21 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +24 -0
- package/dist/src/lib/hexTokenTransferBuilder.d.ts +24 -0
- package/dist/src/lib/hexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/hexTokenTransferBuilder.js +46 -0
- package/dist/src/lib/hexTransferBuilder.d.ts +28 -0
- package/dist/src/lib/hexTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/hexTransferBuilder.js +51 -0
- package/dist/src/lib/iface.d.ts +249 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +48 -1
- package/dist/src/lib/index.d.ts +36 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +82 -5
- package/dist/src/lib/nominateBuilder.d.ts +18 -0
- package/dist/src/lib/nominateBuilder.d.ts.map +1 -0
- package/dist/src/lib/nominateBuilder.js +101 -0
- package/dist/src/lib/preApproveAssetBuilder.d.ts +33 -0
- package/dist/src/lib/preApproveAssetBuilder.d.ts.map +1 -0
- package/dist/src/lib/preApproveAssetBuilder.js +77 -0
- package/dist/src/lib/registerDidWithCDDBuilder.d.ts +7 -2
- package/dist/src/lib/registerDidWithCDDBuilder.d.ts.map +1 -1
- package/dist/src/lib/registerDidWithCDDBuilder.js +22 -3
- package/dist/src/lib/rejectInstructionBuilder.d.ts +29 -0
- package/dist/src/lib/rejectInstructionBuilder.d.ts.map +1 -0
- package/dist/src/lib/rejectInstructionBuilder.js +89 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts +64 -0
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/tokenTransferBuilder.js +167 -0
- package/dist/src/lib/transaction.d.ts +30 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +211 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +59 -1
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +288 -8
- package/dist/src/lib/transferBuilder.d.ts +4 -2
- package/dist/src/lib/transferBuilder.d.ts.map +1 -1
- package/dist/src/lib/transferBuilder.js +12 -5
- package/dist/src/lib/txnSchema.d.ts +67 -0
- package/dist/src/lib/txnSchema.d.ts.map +1 -1
- package/dist/src/lib/txnSchema.js +231 -2
- package/dist/src/lib/unbondBuilder.d.ts +37 -0
- package/dist/src/lib/unbondBuilder.d.ts.map +1 -0
- package/dist/src/lib/unbondBuilder.js +100 -0
- package/dist/src/lib/utils.d.ts +40 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +94 -1
- package/dist/src/lib/v8BatchStakingBuilder.d.ts +85 -0
- package/dist/src/lib/v8BatchStakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BatchStakingBuilder.js +266 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.d.ts +11 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BatchUnstakingBuilder.js +21 -0
- package/dist/src/lib/v8BondExtraBuilder.d.ts +11 -0
- package/dist/src/lib/v8BondExtraBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8BondExtraBuilder.js +21 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.d.ts +20 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8HexTokenTransferBuilder.js +42 -0
- package/dist/src/lib/v8HexTransferBuilder.d.ts +11 -0
- package/dist/src/lib/v8HexTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8HexTransferBuilder.js +21 -0
- package/dist/src/lib/v8NominateBuilder.d.ts +11 -0
- package/dist/src/lib/v8NominateBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8NominateBuilder.js +21 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.d.ts +11 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8PreApproveAssetBuilder.js +21 -0
- package/dist/src/lib/v8RegisterDidBuilder.d.ts +47 -0
- package/dist/src/lib/v8RegisterDidBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8RegisterDidBuilder.js +96 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts +11 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8RegisterDidWithCDDBuilder.js +21 -0
- package/dist/src/lib/v8TokenTransferBuilder.d.ts +24 -0
- package/dist/src/lib/v8TokenTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8TokenTransferBuilder.js +101 -0
- package/dist/src/lib/v8TransferBuilder.d.ts +11 -0
- package/dist/src/lib/v8TransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8TransferBuilder.js +21 -0
- package/dist/src/lib/v8UnbondBuilder.d.ts +11 -0
- package/dist/src/lib/v8UnbondBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8UnbondBuilder.js +21 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts +11 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/src/lib/v8WithdrawUnbondedBuilder.js +21 -0
- package/dist/src/lib/withdrawUnbondedBuilder.d.ts +35 -0
- package/dist/src/lib/withdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/src/lib/withdrawUnbondedBuilder.js +91 -0
- package/dist/src/polyx.d.ts +51 -9
- package/dist/src/polyx.d.ts.map +1 -1
- package/dist/src/polyx.js +272 -15
- package/dist/src/polyxToken.d.ts +20 -0
- package/dist/src/polyxToken.d.ts.map +1 -0
- package/dist/src/polyxToken.js +55 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +5 -1
- 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 +3 -1
- package/dist/src/resources/mainnetV8.d.ts +13 -0
- package/dist/src/resources/mainnetV8.d.ts.map +1 -0
- package/dist/src/resources/mainnetV8.js +24 -0
- package/dist/src/resources/testnetV8.d.ts +13 -0
- package/dist/src/resources/testnetV8.d.ts.map +1 -0
- package/dist/src/resources/testnetV8.js +16 -0
- package/dist/src/tpolyx.d.ts +7 -0
- package/dist/src/tpolyx.d.ts.map +1 -1
- package/dist/src/tpolyx.js +11 -1
- package/dist/test/integration/index.d.ts +1 -0
- package/dist/test/integration/index.d.ts.map +1 -0
- package/dist/test/integration/index.js +1 -0
- package/dist/test/resources/index.d.ts +139 -0
- package/dist/test/resources/index.d.ts.map +1 -0
- package/dist/test/resources/index.js +150 -0
- package/dist/test/resources/mainnet.d.ts +2 -0
- package/dist/test/resources/mainnet.d.ts.map +1 -0
- package/dist/test/resources/mainnet.js +5 -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/resources/wrwUsers.d.ts +19 -0
- package/dist/test/resources/wrwUsers.d.ts.map +1 -0
- package/dist/test/resources/wrwUsers.js +60 -0
- package/dist/test/unit/polyx.d.ts +2 -0
- package/dist/test/unit/polyx.d.ts.map +1 -0
- package/dist/test/unit/polyx.js +356 -0
- package/dist/test/unit/transactionBuilder/base.d.ts +4 -0
- package/dist/test/unit/transactionBuilder/base.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/base.js +245 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/batchStakingBuilder.js +309 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/batchUnstakingBuilder.js +159 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/bondExtraBuilder.js +158 -0
- package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/hexTokenTransferBuilder.js +261 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/hexTransferBuilder.js +389 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/nominateBuilder.js +226 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/preApproveAssetBuilder.js +115 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/registerDidWithCDDBuilder.js +302 -0
- package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/rejectInstructionBuilder.js +128 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/singletonRegistry.js +59 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +140 -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 +240 -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 +326 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unbondBuilder.js +144 -0
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8BatchStakingBuilder.js +252 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8HexTokenTransferBuilder.js +90 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8HexTransferBuilder.js +62 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8PreApproveAssetBuilder.js +45 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidBuilder.js +87 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8RegisterDidWithCDDBuilder.js +45 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8TokenTransferBuilder.js +114 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/v8TransferBuilder.js +107 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/withdrawUnbondedBuilder.js +138 -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 +143 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +15 -9
- package/.eslintignore +0 -4
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -22
|
@@ -0,0 +1,252 @@
|
|
|
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 txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
7
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
8
|
+
const should_1 = __importDefault(require("should"));
|
|
9
|
+
const lib_1 = require("../../../src/lib");
|
|
10
|
+
const utils_1 = __importDefault(require("../../../src/lib/utils"));
|
|
11
|
+
const resources_1 = require("../../../src/resources");
|
|
12
|
+
const resources_2 = require("../../resources");
|
|
13
|
+
const base_1 = require("./base");
|
|
14
|
+
describe('V8BatchStakingBuilder', function () {
|
|
15
|
+
const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx'));
|
|
16
|
+
const { stash, validator, bondAmount, referenceBlock, nonce, firstValid } = resources_2.stakingTxV8.sandbox;
|
|
17
|
+
const buildSandboxBatch = () => new lib_1.V8BatchStakingBuilder((0, base_1.buildTestConfig)())
|
|
18
|
+
.amount(bondAmount)
|
|
19
|
+
.payee('Staked')
|
|
20
|
+
.validators([validator])
|
|
21
|
+
.sender({ address: stash })
|
|
22
|
+
.validity({ firstValid, maxDuration: 64 })
|
|
23
|
+
.referenceBlock(referenceBlock)
|
|
24
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: nonce });
|
|
25
|
+
describe('v8 material', () => {
|
|
26
|
+
it('testnet builder uses v8 specVersion and txVersion', () => {
|
|
27
|
+
const builder = new lib_1.V8BatchStakingBuilder((0, base_1.buildTestConfig)());
|
|
28
|
+
const material = builder._material;
|
|
29
|
+
should_1.default.equal(material.specVersion, resources_1.testnetV8Material.specVersion);
|
|
30
|
+
should_1.default.equal(material.txVersion, resources_1.testnetV8Material.txVersion);
|
|
31
|
+
should_1.default.equal(material.specVersion, 8000000);
|
|
32
|
+
});
|
|
33
|
+
it('mainnet builder uses v8 specVersion and txVersion', () => {
|
|
34
|
+
const builder = new lib_1.V8BatchStakingBuilder((0, base_1.buildMainnetConfig)());
|
|
35
|
+
const material = builder._material;
|
|
36
|
+
should_1.default.equal(material.specVersion, resources_1.mainnetV8Material.specVersion);
|
|
37
|
+
should_1.default.equal(material.txVersion, resources_1.mainnetV8Material.txVersion);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('factory method', () => {
|
|
41
|
+
it('getV8BatchStakingBuilder returns a V8BatchStakingBuilder carrying v8 material', () => {
|
|
42
|
+
const builder = factory.getV8BatchStakingBuilder();
|
|
43
|
+
should_1.default.ok(builder instanceof lib_1.V8BatchStakingBuilder);
|
|
44
|
+
should_1.default.equal(builder._material.specVersion, resources_1.testnetV8Material.specVersion);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe('setter validation', () => {
|
|
48
|
+
it('should not expose a controller setter', () => {
|
|
49
|
+
const builder = factory.getV8BatchStakingBuilder();
|
|
50
|
+
should_1.default.equal(typeof builder.controller, 'undefined');
|
|
51
|
+
should_1.default.equal(typeof builder.getController, 'undefined');
|
|
52
|
+
});
|
|
53
|
+
it('should require both bond and nominate operations', () => {
|
|
54
|
+
let builder = factory.getV8BatchStakingBuilder();
|
|
55
|
+
builder.amount(bondAmount).payee('Staked');
|
|
56
|
+
should_1.default.throws(() => builder.testValidateFields(), /must include both bond and nominate operations/);
|
|
57
|
+
builder = factory.getV8BatchStakingBuilder();
|
|
58
|
+
builder.validators([validator]);
|
|
59
|
+
should_1.default.throws(() => builder.testValidateFields(), /must include both bond and nominate operations/);
|
|
60
|
+
builder = factory.getV8BatchStakingBuilder();
|
|
61
|
+
builder.amount(bondAmount).payee('Staked').validators([validator]);
|
|
62
|
+
should_1.default.doesNotThrow(() => builder.testValidateFields());
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('build transaction', () => {
|
|
66
|
+
it('builds batchAll([bond, nominate]) with v8 specVersion and no controller', async () => {
|
|
67
|
+
const tx = await buildSandboxBatch().build();
|
|
68
|
+
const txJson = tx.toJson();
|
|
69
|
+
should_1.default.equal(txJson.specVersion, 8000000);
|
|
70
|
+
should_1.default.equal(txJson.specVersion, resources_1.testnetV8Material.specVersion);
|
|
71
|
+
should_1.default.equal(txJson.transactionVersion, resources_1.testnetV8Material.txVersion);
|
|
72
|
+
});
|
|
73
|
+
it('inner bond leg + full batch method hex matches the testnet sandbox', async () => {
|
|
74
|
+
const tx = await buildSandboxBatch().build();
|
|
75
|
+
const methodHex = tx._substrateTransaction.method;
|
|
76
|
+
// Full utility.batchAll method hex is byte-for-byte identical to the on-chain sandbox tx.
|
|
77
|
+
should_1.default.equal(methodHex, resources_2.stakingTxV8.batch.bondAndNominate.callHex);
|
|
78
|
+
});
|
|
79
|
+
it('decodes with v8 material to bond({ value, payee }) — no controller — and nominate', async () => {
|
|
80
|
+
const tx = await buildSandboxBatch().build();
|
|
81
|
+
const material = utils_1.default.getV8Material(statics_1.coins.get('tpolyx').network.type);
|
|
82
|
+
const registry = lib_1.SingletonRegistry.getInstance(material);
|
|
83
|
+
const decodedTx = (0, txwrapper_polkadot_1.decode)(tx.toBroadcastFormat(), {
|
|
84
|
+
metadataRpc: material.metadata,
|
|
85
|
+
registry,
|
|
86
|
+
});
|
|
87
|
+
should_1.default.equal(decodedTx.method.name, 'batchAll');
|
|
88
|
+
should_1.default.equal(decodedTx.method.pallet, 'utility');
|
|
89
|
+
const batchArgs = decodedTx.method.args;
|
|
90
|
+
should_1.default.equal(batchArgs.calls.length, 2);
|
|
91
|
+
const firstCall = batchArgs.calls[0];
|
|
92
|
+
should_1.default.equal(utils_1.default.decodeMethodName(firstCall, registry), 'bond');
|
|
93
|
+
const bondArgs = firstCall.args;
|
|
94
|
+
const bondValue = typeof bondArgs.value === 'string' ? bondArgs.value : bondArgs.value.toString();
|
|
95
|
+
should_1.default.equal(bondValue, bondAmount);
|
|
96
|
+
should_1.default.equal(bondArgs.controller, undefined);
|
|
97
|
+
const secondCall = batchArgs.calls[1];
|
|
98
|
+
should_1.default.equal(utils_1.default.decodeMethodName(secondCall, registry), 'nominate');
|
|
99
|
+
const nominateArgs = secondCall.args;
|
|
100
|
+
const targets = nominateArgs.targets.map((t) => (typeof t === 'string' ? t : t.id));
|
|
101
|
+
should_1.default.deepEqual(targets, [validator]);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe('validateDecodedTransaction', () => {
|
|
105
|
+
it('accepts a decoded v8 batch bond+nominate transaction', async () => {
|
|
106
|
+
const builder = buildSandboxBatch();
|
|
107
|
+
const tx = await builder.build();
|
|
108
|
+
const material = utils_1.default.getV8Material(statics_1.coins.get('tpolyx').network.type);
|
|
109
|
+
const registry = lib_1.SingletonRegistry.getInstance(material);
|
|
110
|
+
const decodedTx = (0, txwrapper_polkadot_1.decode)(tx.toBroadcastFormat(), { metadataRpc: material.metadata, registry });
|
|
111
|
+
should_1.default.doesNotThrow(() => builder.validateDecodedTransaction(decodedTx));
|
|
112
|
+
});
|
|
113
|
+
it('validates v8 bond args without a controller field', () => {
|
|
114
|
+
const builder = factory.getV8BatchStakingBuilder();
|
|
115
|
+
should_1.default.doesNotThrow(() => builder.testValidateBondArgs({ value: bondAmount, payee: 'Staked' }));
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('from raw transaction', () => {
|
|
119
|
+
it('round-trips a v8 batch transaction through the builder', async () => {
|
|
120
|
+
const rawTxHex = (await buildSandboxBatch().build()).toBroadcastFormat();
|
|
121
|
+
const newBuilder = factory.getV8BatchStakingBuilder();
|
|
122
|
+
newBuilder.from(rawTxHex);
|
|
123
|
+
should_1.default.equal(newBuilder.getAmount(), bondAmount);
|
|
124
|
+
should_1.default.equal(newBuilder.getPayee(), 'Staked');
|
|
125
|
+
should_1.default.deepEqual(newBuilder.getValidators(), [validator]);
|
|
126
|
+
});
|
|
127
|
+
it('factory.from routes a v8 batch bond+nominate transaction to V8BatchStakingBuilder', async () => {
|
|
128
|
+
const rawTxHex = (await buildSandboxBatch().build()).toBroadcastFormat();
|
|
129
|
+
const builder = factory.from(rawTxHex);
|
|
130
|
+
should_1.default.ok(builder instanceof lib_1.V8BatchStakingBuilder);
|
|
131
|
+
});
|
|
132
|
+
it('factory.from routes to V8BatchStakingBuilder on the v8 decode-success path (SI-981)', async () => {
|
|
133
|
+
// Reproduces the staging incident: when the factory carries v8 material, `decode()` succeeds
|
|
134
|
+
// and yields a bond call with no `controller`. Routing must detect the missing controller and
|
|
135
|
+
// return the v8 builder rather than the v7 BatchStakingBuilder, which crashes reading
|
|
136
|
+
// `args.controller.id`.
|
|
137
|
+
const rawTxHex = (await buildSandboxBatch().build()).toBroadcastFormat();
|
|
138
|
+
const v8Material = utils_1.default.getV8Material(statics_1.coins.get('tpolyx').network.type);
|
|
139
|
+
const v8Factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx')).material(v8Material);
|
|
140
|
+
const builder = v8Factory.from(rawTxHex);
|
|
141
|
+
should_1.default.ok(builder instanceof lib_1.V8BatchStakingBuilder);
|
|
142
|
+
});
|
|
143
|
+
it('factory.material(liveMaterial).from(...) forwards the live material into the rebuilt v8 batch staking builder (SI-1034)', async () => {
|
|
144
|
+
// Reproduces the custodial staking incident: the HSM signs against LIVE chain material
|
|
145
|
+
// (e.g. a specVersion bump after a runtime upgrade), but wallet-platform's getSignedTx
|
|
146
|
+
// re-verifies by calling `factory.material(liveMaterial).from(serializedTxHex)`. On the
|
|
147
|
+
// decode-success path, `getBuilder()` used to return `getV8BatchStakingBuilder()` without
|
|
148
|
+
// forwarding `this._material`, so the rebuild silently fell back to the builder's static
|
|
149
|
+
// `getV8Material()` (stale specVersion) instead of the caller's live material. Because
|
|
150
|
+
// specVersion is embedded in the raw ExtrinsicPayload bytes that are actually signed, the
|
|
151
|
+
// rebuilt signable payload would then diverge from the one the HSM signed, producing
|
|
152
|
+
// `InvalidSignature: invalid key signature` at Trust approval.
|
|
153
|
+
//
|
|
154
|
+
// Simulate a "live" chain that has moved past the pinned static testnet v8 material by
|
|
155
|
+
// bumping specVersion on a copy of it.
|
|
156
|
+
const liveMaterial = {
|
|
157
|
+
...resources_1.testnetV8Material,
|
|
158
|
+
specVersion: resources_1.testnetV8Material.specVersion + 10,
|
|
159
|
+
};
|
|
160
|
+
const originalTx = await new lib_1.V8BatchStakingBuilder((0, base_1.buildTestConfig)())
|
|
161
|
+
.material(liveMaterial)
|
|
162
|
+
.amount(bondAmount)
|
|
163
|
+
.payee('Staked')
|
|
164
|
+
.validators([validator])
|
|
165
|
+
.sender({ address: stash })
|
|
166
|
+
.validity({ firstValid, maxDuration: 64 })
|
|
167
|
+
.referenceBlock(referenceBlock)
|
|
168
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: nonce })
|
|
169
|
+
.build();
|
|
170
|
+
const rawTxHex = originalTx.toBroadcastFormat();
|
|
171
|
+
const originalSignablePayload = originalTx.signablePayload.toString('hex');
|
|
172
|
+
const rebuiltBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx')).material(liveMaterial).from(rawTxHex);
|
|
173
|
+
// The raw signing payload does not carry the sender address or the raw `firstValid` block
|
|
174
|
+
// number (only the encoded era), so — like any real caller re-verifying a decoded
|
|
175
|
+
// transaction — they must be supplied again before build() can run.
|
|
176
|
+
rebuiltBuilder.sender({ address: stash }).validity({ firstValid, maxDuration: 64 });
|
|
177
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
178
|
+
const rebuiltSignablePayload = rebuiltTx.signablePayload.toString('hex');
|
|
179
|
+
// Without the SI-1034 fix, this fails: the rebuild uses the static material (specVersion
|
|
180
|
+
// 8000000) instead of liveMaterial (specVersion 8000010), so the payloads differ.
|
|
181
|
+
should_1.default.equal(rebuiltSignablePayload, originalSignablePayload);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe('V8 staking wrappers (smoke build)', function () {
|
|
186
|
+
const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tpolyx'));
|
|
187
|
+
const validator = resources_2.stakingTxV8.sandbox.validator;
|
|
188
|
+
const sender = resources_2.stakingTxV8.sandbox.stash;
|
|
189
|
+
const referenceBlock = resources_2.stakingTxV8.sandbox.referenceBlock;
|
|
190
|
+
const replay = { firstValid: 24829132, maxDuration: 64 };
|
|
191
|
+
it('V8BondExtraBuilder builds with v8 material', async () => {
|
|
192
|
+
const builder = factory.getV8BondExtraBuilder();
|
|
193
|
+
should_1.default.ok(builder instanceof lib_1.V8BondExtraBuilder);
|
|
194
|
+
const tx = await builder
|
|
195
|
+
.amount('10000000')
|
|
196
|
+
.sender({ address: sender })
|
|
197
|
+
.validity(replay)
|
|
198
|
+
.referenceBlock(referenceBlock)
|
|
199
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 189 })
|
|
200
|
+
.build();
|
|
201
|
+
should_1.default.equal(tx.toJson().specVersion, resources_1.testnetV8Material.specVersion);
|
|
202
|
+
});
|
|
203
|
+
it('V8UnbondBuilder builds with v8 material', async () => {
|
|
204
|
+
const builder = factory.getV8UnbondBuilder();
|
|
205
|
+
should_1.default.ok(builder instanceof lib_1.V8UnbondBuilder);
|
|
206
|
+
const tx = await builder
|
|
207
|
+
.amount('10000000')
|
|
208
|
+
.sender({ address: sender })
|
|
209
|
+
.validity(replay)
|
|
210
|
+
.referenceBlock(referenceBlock)
|
|
211
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 189 })
|
|
212
|
+
.build();
|
|
213
|
+
should_1.default.equal(tx.toJson().specVersion, resources_1.testnetV8Material.specVersion);
|
|
214
|
+
});
|
|
215
|
+
it('V8BatchUnstakingBuilder builds with v8 material', async () => {
|
|
216
|
+
const builder = factory.getV8BatchUnstakingBuilder();
|
|
217
|
+
should_1.default.ok(builder instanceof lib_1.V8BatchUnstakingBuilder);
|
|
218
|
+
const tx = await builder
|
|
219
|
+
.amount('10000000')
|
|
220
|
+
.sender({ address: sender })
|
|
221
|
+
.validity(replay)
|
|
222
|
+
.referenceBlock(referenceBlock)
|
|
223
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 189 })
|
|
224
|
+
.build();
|
|
225
|
+
should_1.default.equal(tx.toJson().specVersion, resources_1.testnetV8Material.specVersion);
|
|
226
|
+
});
|
|
227
|
+
it('V8WithdrawUnbondedBuilder builds with v8 material', async () => {
|
|
228
|
+
const builder = factory.getV8WithdrawUnbondedBuilder();
|
|
229
|
+
should_1.default.ok(builder instanceof lib_1.V8WithdrawUnbondedBuilder);
|
|
230
|
+
const tx = await builder
|
|
231
|
+
.slashingSpans(0)
|
|
232
|
+
.sender({ address: sender })
|
|
233
|
+
.validity(replay)
|
|
234
|
+
.referenceBlock(referenceBlock)
|
|
235
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 189 })
|
|
236
|
+
.build();
|
|
237
|
+
should_1.default.equal(tx.toJson().specVersion, resources_1.testnetV8Material.specVersion);
|
|
238
|
+
});
|
|
239
|
+
it('V8NominateBuilder builds with v8 material', async () => {
|
|
240
|
+
const builder = factory.getV8NominateBuilder();
|
|
241
|
+
should_1.default.ok(builder instanceof lib_1.V8NominateBuilder);
|
|
242
|
+
const tx = await builder
|
|
243
|
+
.validators([validator])
|
|
244
|
+
.sender({ address: sender })
|
|
245
|
+
.validity(replay)
|
|
246
|
+
.referenceBlock(referenceBlock)
|
|
247
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 189 })
|
|
248
|
+
.build();
|
|
249
|
+
should_1.default.equal(tx.toJson().specVersion, resources_1.testnetV8Material.specVersion);
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhCYXRjaFN0YWtpbmdCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci92OEJhdGNoU3Rha2luZ0J1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzRUFBdUQ7QUFDdkQsaURBQTRDO0FBQzVDLG9EQUE0QjtBQUM1QiwwQ0FVMEI7QUFFMUIsbUVBQTJDO0FBQzNDLHNEQUE4RTtBQUM5RSwrQ0FBOEM7QUFDOUMsaUNBQTZEO0FBRTdELFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtJQUNoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVuRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyx1QkFBVyxDQUFDLE9BQU8sQ0FBQztJQUVoRyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUM3QixJQUFJLDJCQUFxQixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDO1NBQ3pDLE1BQU0sQ0FBQyxVQUFVLENBQUM7U0FDbEIsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUNmLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUMxQixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3pDLGNBQWMsQ0FBQyxjQUFjLENBQUM7U0FDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRW5FLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFF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Q0FBQztRQUNYLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDL0MsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLHVCQUFpQixDQUFDLENBQUM7UUFDaEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPO2FBQ3JCLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3ZCLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUMzQixRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ2hCLGNBQWMsQ0FBQyxjQUFjLENBQUM7YUFDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQzthQUMzRCxLQUFLLEVBQUUsQ0FBQztRQUNYLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlY29kZSB9IGZyb20gJ0BzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90JztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LFxuICBWOEJhdGNoU3Rha2luZ0J1aWxkZXIsXG4gIFY4Qm9uZEV4dHJhQnVpbGRlcixcbiAgVjhVbmJvbmRCdWlsZGVyLFxuICBWOEJhdGNoVW5zdGFraW5nQnVpbGRlcixcbiAgVjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcixcbiAgVjhOb21pbmF0ZUJ1aWxkZXIsXG4gIFNpbmdsZXRvblJlZ2lzdHJ5LFxuICBJbnRlcmZhY2UsXG59IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgQmF0Y2hBcmdzLCBOb21pbmF0ZUFyZ3MsIFY4Qm9uZEFyZ3MgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IHRlc3RuZXRWOE1hdGVyaWFsLCBtYWlubmV0VjhNYXRlcmlhbCB9IGZyb20gJy4uLy4uLy4uL3NyYy9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgc3Rha2luZ1R4VjggfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgYnVpbGRUZXN0Q29uZmlnLCBidWlsZE1haW5uZXRDb25maWcgfSBmcm9tICcuL2Jhc2UnO1xuXG5kZXNjcmliZSgnVjhCYXRjaFN0YWtpbmdCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSk7XG5cbiAgY29uc3QgeyBzdGFzaCwgdmFsaWRhdG9yLCBib25kQW1vdW50LCByZWZlcmVuY2VCbG9jaywgbm9uY2UsIGZpcnN0VmFsaWQgfSA9IHN0YWtpbmdUeFY4LnNhbmRib3g7XG5cbiAgY29uc3QgYnVpbGRTYW5kYm94QmF0Y2ggPSAoKSA9PlxuICAgIG5ldyBWOEJhdGNoU3Rha2luZ0J1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpXG4gICAgICAuYW1vdW50KGJvbmRBbW91bnQpXG4gICAgICAucGF5ZWUoJ1N0YWtlZCcpXG4gICAgICAudmFsaWRhdG9ycyhbdmFsaWRhdG9yXSlcbiAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzdGFzaCB9KVxuICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZCwgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAucmVmZXJlbmNlQmxvY2socmVmZXJlbmNlQmxvY2spXG4gICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiBub25jZSB9KTtcblxuICBkZXNjcmliZSgndjggbWF0ZXJpYWwnLCAoKSA9PiB7XG4gICAgaXQoJ3Rlc3RuZXQgYnVpbGRlciB1c2VzIHY4IHNwZWNWZXJzaW9uIGFuZCB0eFZlcnNpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4QmF0Y2hTdGFraW5nQnVpbGRlcihidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IChidWlsZGVyIGFzIGFueSkuX21hdGVyaWFsO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwudHhWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC50eFZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnNwZWNWZXJzaW9uLCA4MDAwMDAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYWlubmV0IGJ1aWxkZXIgdXNlcyB2OCBzcGVjVmVyc2lvbiBhbmQgdHhWZXJzaW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOEJhdGNoU3Rha2luZ0J1aWxkZXIoYnVpbGRNYWlubmV0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgbWF0ZXJpYWwgPSAoYnVpbGRlciBhcyBhbnkpLl9tYXRlcmlhbDtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC5zcGVjVmVyc2lvbiwgbWFpbm5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnR4VmVyc2lvbiwgbWFpbm5ldFY4TWF0ZXJpYWwudHhWZXJzaW9uKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZhY3RvcnkgbWV0aG9kJywgKCkgPT4ge1xuICAgIGl0KCdnZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIgcmV0dXJucyBhIFY4QmF0Y2hTdGFraW5nQnVpbGRlciBjYXJyeWluZyB2OCBtYXRlcmlhbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEJhdGNoU3Rha2luZ0J1aWxkZXIpO1xuICAgICAgc2hvdWxkLmVxdWFsKChidWlsZGVyIGFzIGFueSkuX21hdGVyaWFsLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXR0ZXIgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIG5vdCBleHBvc2UgYSBjb250cm9sbGVyIHNldHRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgc2hvdWxkLmVxdWFsKHR5cGVvZiAoYnVpbGRlciBhcyBhbnkpLmNvbnRyb2xsZXIsICd1bmRlZmluZWQnKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eXBlb2YgKGJ1aWxkZXIgYXMgYW55KS5nZXRDb250cm9sbGVyLCAndW5kZWZpbmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlcXVpcmUgYm90aCBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zJywgKCkgPT4ge1xuICAgICAgbGV0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5hbW91bnQoYm9uZEFtb3VudCkucGF5ZWUoJ1N0YWtlZCcpO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBidWlsZGVyLnRlc3RWYWxpZGF0ZUZpZWxkcygpLCAvbXVzdCBpbmNsdWRlIGJvdGggYm9uZCBhbmQgbm9taW5hdGUgb3BlcmF0aW9ucy8pO1xuXG4gICAgICBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIudmFsaWRhdG9ycyhbdmFsaWRhdG9yXSk7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IGJ1aWxkZXIudGVzdFZhbGlkYXRlRmllbGRzKCksIC9tdXN0IGluY2x1ZGUgYm90aCBib25kIGFuZCBub21pbmF0ZSBvcGVyYXRpb25zLyk7XG5cbiAgICAgIGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hTdGFraW5nQnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5hbW91bnQoYm9uZEFtb3VudCkucGF5ZWUoJ1N0YWtlZCcpLnZhbGlkYXRvcnMoW3ZhbGlkYXRvcl0pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnRlc3RWYWxpZGF0ZUZpZWxkcygpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1aWxkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdidWlsZHMgYmF0Y2hBbGwoW2JvbmQsIG5vbWluYXRlXSkgd2l0aCB2OCBzcGVjVmVyc2lvbiBhbmQgbm8gY29udHJvbGxlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCA4MDAwMDAwKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC50eFZlcnNpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lubmVyIGJvbmQgbGVnICsgZnVsbCBiYXRjaCBtZXRob2QgaGV4IG1hdGNoZXMgdGhlIHRlc3RuZXQgc2FuZGJveCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpO1xuICAgICAgY29uc3QgbWV0aG9kSGV4ID0gKHR4IGFzIGFueSkuX3N1YnN0cmF0ZVRyYW5zYWN0aW9uLm1ldGhvZCBhcyBzdHJpbmc7XG4gICAgICAvLyBGdWxsIHV0aWxpdHkuYmF0Y2hBbGwgbWV0aG9kIGhleCBpcyBieXRlLWZvci1ieXRlIGlkZW50aWNhbCB0byB0aGUgb24tY2hhaW4gc2FuZGJveCB0eC5cbiAgICAgIHNob3VsZC5lcXVhbChtZXRob2RIZXgsIHN0YWtpbmdUeFY4LmJhdGNoLmJvbmRBbmROb21pbmF0ZS5jYWxsSGV4KTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWNvZGVzIHdpdGggdjggbWF0ZXJpYWwgdG8gYm9uZCh7IHZhbHVlLCBwYXllZSB9KSDigJQgbm8gY29udHJvbGxlciDigJQgYW5kIG5vbWluYXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZFNhbmRib3hCYXRjaCgpLmJ1aWxkKCk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldFY4TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBTaW5nbGV0b25SZWdpc3RyeS5nZXRJbnN0YW5jZShtYXRlcmlhbCk7XG4gICAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwge1xuICAgICAgICBtZXRhZGF0YVJwYzogbWF0ZXJpYWwubWV0YWRhdGEsXG4gICAgICAgIHJlZ2lzdHJ5LFxuICAgICAgfSk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChkZWNvZGVkVHgubWV0aG9kLm5hbWUsICdiYXRjaEFsbCcpO1xuICAgICAgc2hvdWxkLmVxdWFsKGRlY29kZWRUeC5tZXRob2QucGFsbGV0LCAndXRpbGl0eScpO1xuXG4gICAgICBjb25zdCBiYXRjaEFyZ3MgPSBkZWNvZGVkVHgubWV0aG9kLmFyZ3MgYXMgdW5rbm93biBhcyBCYXRjaEFyZ3M7XG4gICAgICBzaG91bGQuZXF1YWwoYmF0Y2hBcmdzLmNhbGxzLmxlbmd0aCwgMik7XG5cbiAgICAgIGNvbnN0IGZpcnN0Q2FsbCA9IGJhdGNoQXJncy5jYWxsc1swXTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5kZWNvZGVNZXRob2ROYW1lKGZpcnN0Q2FsbCwgcmVnaXN0cnkpLCAnYm9uZCcpO1xuICAgICAgY29uc3QgYm9uZEFyZ3MgPSBmaXJzdENhbGwuYXJncyBhcyB1bmtub3duIGFzIFY4Qm9uZEFyZ3MgJiB7IGNvbnRyb2xsZXI/OiB1bmtub3duIH07XG4gICAgICBjb25zdCBib25kVmFsdWUgPSB0eXBlb2YgYm9uZEFyZ3MudmFsdWUgPT09ICdzdHJpbmcnID8gYm9uZEFyZ3MudmFsdWUgOiAoYm9uZEFyZ3MudmFsdWUgYXMgbnVtYmVyKS50b1N0cmluZygpO1xuICAgICAgc2hvdWxkLmVxdWFsKGJvbmRWYWx1ZSwgYm9uZEFtb3VudCk7XG4gICAgICBzaG91bGQuZXF1YWwoYm9uZEFyZ3MuY29udHJvbGxlciwgdW5kZWZpbmVkKTtcblxuICAgICAgY29uc3Qgc2Vjb25kQ2FsbCA9IGJhdGNoQXJncy5jYWxsc1sxXTtcbiAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5kZWNvZGVNZXRob2ROYW1lKHNlY29uZENhbGwsIHJlZ2lzdHJ5KSwgJ25vbWluYXRlJyk7XG4gICAgICBjb25zdCBub21pbmF0ZUFyZ3MgPSBzZWNvbmRDYWxsLmFyZ3MgYXMgdW5rbm93biBhcyBOb21pbmF0ZUFyZ3M7XG4gICAgICBjb25zdCB0YXJnZXRzID0gbm9taW5hdGVBcmdzLnRhcmdldHMubWFwKCh0KSA9PiAodHlwZW9mIHQgPT09ICdzdHJpbmcnID8gdCA6ICh0IGFzIHsgaWQ6IHN0cmluZyB9KS5pZCkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0YXJnZXRzLCBbdmFsaWRhdG9yXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2YWxpZGF0ZURlY29kZWRUcmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnYWNjZXB0cyBhIGRlY29kZWQgdjggYmF0Y2ggYm9uZCtub21pbmF0ZSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBidWlsZFNhbmRib3hCYXRjaCgpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldFY4TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBTaW5nbGV0b25SZWdpc3RyeS5nZXRJbnN0YW5jZShtYXRlcmlhbCk7XG4gICAgICBjb25zdCBkZWNvZGVkVHggPSBkZWNvZGUodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgeyBtZXRhZGF0YVJwYzogbWF0ZXJpYWwubWV0YWRhdGEsIHJlZ2lzdHJ5IH0pO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnZhbGlkYXRlRGVjb2RlZFRyYW5zYWN0aW9uKGRlY29kZWRUeCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ZhbGlkYXRlcyB2OCBib25kIGFyZ3Mgd2l0aG91dCBhIGNvbnRyb2xsZXIgZmllbGQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci50ZXN0VmFsaWRhdGVCb25kQXJncyh7IHZhbHVlOiBib25kQW1vdW50LCBwYXllZTogJ1N0YWtlZCcgfSBhcyBWOEJvbmRBcmdzKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmcm9tIHJhdyB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgncm91bmQtdHJpcHMgYSB2OCBiYXRjaCB0cmFuc2FjdGlvbiB0aHJvdWdoIHRoZSBidWlsZGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmF3VHhIZXggPSAoYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCBuZXdCdWlsZGVyID0gZmFjdG9yeS5nZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKTtcbiAgICAgIG5ld0J1aWxkZXIuZnJvbShyYXdUeEhleCk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChuZXdCdWlsZGVyLmdldEFtb3VudCgpLCBib25kQW1vdW50KTtcbiAgICAgIHNob3VsZC5lcXVhbChuZXdCdWlsZGVyLmdldFBheWVlKCksICdTdGFrZWQnKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwobmV3QnVpbGRlci5nZXRWYWxpZGF0b3JzKCksIFt2YWxpZGF0b3JdKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWN0b3J5LmZyb20gcm91dGVzIGEgdjggYmF0Y2ggYm9uZCtub21pbmF0ZSB0cmFuc2FjdGlvbiB0byBWOEJhdGNoU3Rha2luZ0J1aWxkZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByYXdUeEhleCA9IChhd2FpdCBidWlsZFNhbmRib3hCYXRjaCgpLmJ1aWxkKCkpLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4SGV4KTtcbiAgICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWN0b3J5LmZyb20gcm91dGVzIHRvIFY4QmF0Y2hTdGFraW5nQnVpbGRlciBvbiB0aGUgdjggZGVjb2RlLXN1Y2Nlc3MgcGF0aCAoU0ktOTgxKScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFJlcHJvZHVjZXMgdGhlIHN0YWdpbmcgaW5jaWRlbnQ6IHdoZW4gdGhlIGZhY3RvcnkgY2FycmllcyB2OCBtYXRlcmlhbCwgYGRlY29kZSgpYCBzdWNjZWVkc1xuICAgICAgLy8gYW5kIHlpZWxkcyBhIGJvbmQgY2FsbCB3aXRoIG5vIGBjb250cm9sbGVyYC4gUm91dGluZyBtdXN0IGRldGVjdCB0aGUgbWlzc2luZyBjb250cm9sbGVyIGFuZFxuICAgICAgLy8gcmV0dXJuIHRoZSB2OCBidWlsZGVyIHJhdGhlciB0aGFuIHRoZSB2NyBCYXRjaFN0YWtpbmdCdWlsZGVyLCB3aGljaCBjcmFzaGVzIHJlYWRpbmdcbiAgICAgIC8vIGBhcmdzLmNvbnRyb2xsZXIuaWRgLlxuICAgICAgY29uc3QgcmF3VHhIZXggPSAoYXdhaXQgYnVpbGRTYW5kYm94QmF0Y2goKS5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgdjhNYXRlcmlhbCA9IHV0aWxzLmdldFY4TWF0ZXJpYWwoY29pbnMuZ2V0KCd0cG9seXgnKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgY29uc3QgdjhGYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSkubWF0ZXJpYWwodjhNYXRlcmlhbCk7XG4gICAgICBjb25zdCBidWlsZGVyID0gdjhGYWN0b3J5LmZyb20ocmF3VHhIZXgpO1xuICAgICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEJhdGNoU3Rha2luZ0J1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhY3RvcnkubWF0ZXJpYWwobGl2ZU1hdGVyaWFsKS5mcm9tKC4uLikgZm9yd2FyZHMgdGhlIGxpdmUgbWF0ZXJpYWwgaW50byB0aGUgcmVidWlsdCB2OCBiYXRjaCBzdGFraW5nIGJ1aWxkZXIgKFNJLTEwMzQpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gUmVwcm9kdWNlcyB0aGUgY3VzdG9kaWFsIHN0YWtpbmcgaW5jaWRlbnQ6IHRoZSBIU00gc2lnbnMgYWdhaW5zdCBMSVZFIGNoYWluIG1hdGVyaWFsXG4gICAgICAvLyAoZS5nLiBhIHNwZWNWZXJzaW9uIGJ1bXAgYWZ0ZXIgYSBydW50aW1lIHVwZ3JhZGUpLCBidXQgd2FsbGV0LXBsYXRmb3JtJ3MgZ2V0U2lnbmVkVHhcbiAgICAgIC8vIHJlLXZlcmlmaWVzIGJ5IGNhbGxpbmcgYGZhY3RvcnkubWF0ZXJpYWwobGl2ZU1hdGVyaWFsKS5mcm9tKHNlcmlhbGl6ZWRUeEhleClgLiBPbiB0aGVcbiAgICAgIC8vIGRlY29kZS1zdWNjZXNzIHBhdGgsIGBnZXRCdWlsZGVyKClgIHVzZWQgdG8gcmV0dXJuIGBnZXRWOEJhdGNoU3Rha2luZ0J1aWxkZXIoKWAgd2l0aG91dFxuICAgICAgLy8gZm9yd2FyZGluZyBgdGhpcy5fbWF0ZXJpYWxgLCBzbyB0aGUgcmVidWlsZCBzaWxlbnRseSBmZWxsIGJhY2sgdG8gdGhlIGJ1aWxkZXIncyBzdGF0aWNcbiAgICAgIC8vIGBnZXRWOE1hdGVyaWFsKClgIChzdGFsZSBzcGVjVmVyc2lvbikgaW5zdGVhZCBvZiB0aGUgY2FsbGVyJ3MgbGl2ZSBtYXRlcmlhbC4gQmVjYXVzZVxuICAgICAgLy8gc3BlY1ZlcnNpb24gaXMgZW1iZWRkZWQgaW4gdGhlIHJhdyBFeHRyaW5zaWNQYXlsb2FkIGJ5dGVzIHRoYXQgYXJlIGFjdHVhbGx5IHNpZ25lZCwgdGhlXG4gICAgICAvLyByZWJ1aWx0IHNpZ25hYmxlIHBheWxvYWQgd291bGQgdGhlbiBkaXZlcmdlIGZyb20gdGhlIG9uZSB0aGUgSFNNIHNpZ25lZCwgcHJvZHVjaW5nXG4gICAgICAvLyBgSW52YWxpZFNpZ25hdHVyZTogaW52YWxpZCBrZXkgc2lnbmF0dXJlYCBhdCBUcnVzdCBhcHByb3ZhbC5cbiAgICAgIC8vXG4gICAgICAvLyBTaW11bGF0ZSBhIFwibGl2ZVwiIGNoYWluIHRoYXQgaGFzIG1vdmVkIHBhc3QgdGhlIHBpbm5lZCBzdGF0aWMgdGVzdG5ldCB2OCBtYXRlcmlhbCBieVxuICAgICAgLy8gYnVtcGluZyBzcGVjVmVyc2lvbiBvbiBhIGNvcHkgb2YgaXQuXG4gICAgICBjb25zdCBsaXZlTWF0ZXJpYWwgPSB7XG4gICAgICAgIC4uLnRlc3RuZXRWOE1hdGVyaWFsLFxuICAgICAgICBzcGVjVmVyc2lvbjogdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24gKyAxMCxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBJbnRlcmZhY2UuTWF0ZXJpYWw7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVHggPSBhd2FpdCBuZXcgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKVxuICAgICAgICAubWF0ZXJpYWwobGl2ZU1hdGVyaWFsKVxuICAgICAgICAuYW1vdW50KGJvbmRBbW91bnQpXG4gICAgICAgIC5wYXllZSgnU3Rha2VkJylcbiAgICAgICAgLnZhbGlkYXRvcnMoW3ZhbGlkYXRvcl0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzdGFzaCB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiBub25jZSB9KVxuICAgICAgICAuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4SGV4ID0gb3JpZ2luYWxUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3Qgb3JpZ2luYWxTaWduYWJsZVBheWxvYWQgPSBvcmlnaW5hbFR4LnNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSkubWF0ZXJpYWwobGl2ZU1hdGVyaWFsKS5mcm9tKHJhd1R4SGV4KTtcbiAgICAgIC8vIFRoZSByYXcgc2lnbmluZyBwYXlsb2FkIGRvZXMgbm90IGNhcnJ5IHRoZSBzZW5kZXIgYWRkcmVzcyBvciB0aGUgcmF3IGBmaXJzdFZhbGlkYCBibG9ja1xuICAgICAgLy8gbnVtYmVyIChvbmx5IHRoZSBlbmNvZGVkIGVyYSksIHNvIOKAlCBsaWtlIGFueSByZWFsIGNhbGxlciByZS12ZXJpZnlpbmcgYSBkZWNvZGVkXG4gICAgICAvLyB0cmFuc2FjdGlvbiDigJQgdGhleSBtdXN0IGJlIHN1cHBsaWVkIGFnYWluIGJlZm9yZSBidWlsZCgpIGNhbiBydW4uXG4gICAgICAocmVidWlsdEJ1aWxkZXIgYXMgVjhCYXRjaFN0YWtpbmdCdWlsZGVyKS5zZW5kZXIoeyBhZGRyZXNzOiBzdGFzaCB9KS52YWxpZGl0eSh7IGZpcnN0VmFsaWQsIG1heER1cmF0aW9uOiA2NCB9KTtcbiAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IGF3YWl0IHJlYnVpbHRCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByZWJ1aWx0U2lnbmFibGVQYXlsb2FkID0gcmVidWlsdFR4LnNpZ25hYmxlUGF5bG9hZC50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAgIC8vIFdpdGhvdXQgdGhlIFNJLTEwMzQgZml4LCB0aGlzIGZhaWxzOiB0aGUgcmVidWlsZCB1c2VzIHRoZSBzdGF0aWMgbWF0ZXJpYWwgKHNwZWNWZXJzaW9uXG4gICAgICAvLyA4MDAwMDAwKSBpbnN0ZWFkIG9mIGxpdmVNYXRlcmlhbCAoc3BlY1ZlcnNpb24gODAwMDAxMCksIHNvIHRoZSBwYXlsb2FkcyBkaWZmZXIuXG4gICAgICBzaG91bGQuZXF1YWwocmVidWlsdFNpZ25hYmxlUGF5bG9hZCwgb3JpZ2luYWxTaWduYWJsZVBheWxvYWQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnVjggc3Rha2luZyB3cmFwcGVycyAoc21va2UgYnVpbGQpJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0cG9seXgnKSk7XG4gIGNvbnN0IHZhbGlkYXRvciA9IHN0YWtpbmdUeFY4LnNhbmRib3gudmFsaWRhdG9yO1xuICBjb25zdCBzZW5kZXIgPSBzdGFraW5nVHhWOC5zYW5kYm94LnN0YXNoO1xuICBjb25zdCByZWZlcmVuY2VCbG9jayA9IHN0YWtpbmdUeFY4LnNhbmRib3gucmVmZXJlbmNlQmxvY2s7XG5cbiAgY29uc3QgcmVwbGF5ID0geyBmaXJzdFZhbGlkOiAyNDgyOTEzMiwgbWF4RHVyYXRpb246IDY0IH07XG5cbiAgaXQoJ1Y4Qm9uZEV4dHJhQnVpbGRlciBidWlsZHMgd2l0aCB2OCBtYXRlcmlhbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOEJvbmRFeHRyYUJ1aWxkZXIoKTtcbiAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4Qm9uZEV4dHJhQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuYW1vdW50KCcxMDAwMDAwMCcpXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG5cbiAgaXQoJ1Y4VW5ib25kQnVpbGRlciBidWlsZHMgd2l0aCB2OCBtYXRlcmlhbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOFVuYm9uZEJ1aWxkZXIoKTtcbiAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4VW5ib25kQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuYW1vdW50KCcxMDAwMDAwMCcpXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG5cbiAgaXQoJ1Y4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyIGJ1aWxkcyB3aXRoIHY4IG1hdGVyaWFsJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFY4QmF0Y2hVbnN0YWtpbmdCdWlsZGVyKCk7XG4gICAgc2hvdWxkLm9rKGJ1aWxkZXIgaW5zdGFuY2VvZiBWOEJhdGNoVW5zdGFraW5nQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuYW1vdW50KCcxMDAwMDAwMCcpXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG5cbiAgaXQoJ1Y4V2l0aGRyYXdVbmJvbmRlZEJ1aWxkZXIgYnVpbGRzIHdpdGggdjggbWF0ZXJpYWwnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcigpO1xuICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhXaXRoZHJhd1VuYm9uZGVkQnVpbGRlcik7XG4gICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyXG4gICAgICAuc2xhc2hpbmdTcGFucygwKVxuICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlciB9KVxuICAgICAgLnZhbGlkaXR5KHJlcGxheSlcbiAgICAgIC5yZWZlcmVuY2VCbG9jayhyZWZlcmVuY2VCbG9jaylcbiAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDE4OSB9KVxuICAgICAgLmJ1aWxkKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnRvSnNvbigpLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gIH0pO1xuXG4gIGl0KCdWOE5vbWluYXRlQnVpbGRlciBidWlsZHMgd2l0aCB2OCBtYXRlcmlhbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRWOE5vbWluYXRlQnVpbGRlcigpO1xuICAgIHNob3VsZC5vayhidWlsZGVyIGluc3RhbmNlb2YgVjhOb21pbmF0ZUJ1aWxkZXIpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlclxuICAgICAgLnZhbGlkYXRvcnMoW3ZhbGlkYXRvcl0pXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyIH0pXG4gICAgICAudmFsaWRpdHkocmVwbGF5KVxuICAgICAgLnJlZmVyZW5jZUJsb2NrKHJlZmVyZW5jZUJsb2NrKVxuICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMTg5IH0pXG4gICAgICAuYnVpbGQoKTtcbiAgICBzaG91bGQuZXF1YWwodHgudG9Kc29uKCkuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v8HexTokenTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/v8HexTokenTransferBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,90 @@
|
|
|
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 should_1 = __importDefault(require("should"));
|
|
7
|
+
const txwrapper_polkadot_1 = require("@substrate/txwrapper-polkadot");
|
|
8
|
+
const lib_1 = require("../../../src/lib");
|
|
9
|
+
const resources_1 = require("../../resources");
|
|
10
|
+
const resources_2 = require("../../../src/resources");
|
|
11
|
+
const base_1 = require("./base");
|
|
12
|
+
const FROM_DID = '0x1208d7851e6698249aea40742701ee1ef6cdcced260a7c49c1cca1a9db836342';
|
|
13
|
+
const TO_DID = '0xbc6f7ec808f361c1353ab9dc88c3cc54b98d9eb60fed9c063e67a40925b8ef61';
|
|
14
|
+
const ASSET_ID = '0x780602887b358cf48989d0d9aa6c8d28';
|
|
15
|
+
describe('V8HexTokenTransferBuilder', () => {
|
|
16
|
+
describe('v8 material', () => {
|
|
17
|
+
it('carries v8 specVersion and txVersion', () => {
|
|
18
|
+
const builder = new lib_1.V8HexTokenTransferBuilder((0, base_1.buildTestConfig)());
|
|
19
|
+
const material = builder._material;
|
|
20
|
+
should_1.default.equal(material.specVersion, resources_2.testnetV8Material.specVersion);
|
|
21
|
+
should_1.default.equal(material.txVersion, resources_2.testnetV8Material.txVersion);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
describe('factory method', () => {
|
|
25
|
+
it('getV8HexTokenTransferBuilder returns a V8HexTokenTransferBuilder', () => {
|
|
26
|
+
const factory = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
27
|
+
should_1.default.ok(factory.getV8HexTokenTransferBuilder() instanceof lib_1.V8HexTokenTransferBuilder);
|
|
28
|
+
});
|
|
29
|
+
it('extends V8TokenTransferBuilder — shares the AssetHolder-wrapped legs/holderSet logic', () => {
|
|
30
|
+
const builder = new lib_1.V8HexTokenTransferBuilder((0, base_1.buildTestConfig)());
|
|
31
|
+
should_1.default.ok(builder instanceof lib_1.V8TokenTransferBuilder);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('memo encoding', () => {
|
|
35
|
+
it('encodes memo in NEW (hex) format', () => {
|
|
36
|
+
const builder = new lib_1.V8HexTokenTransferBuilder((0, base_1.buildTestConfig)());
|
|
37
|
+
builder.memo('56594');
|
|
38
|
+
const memo = builder._memo;
|
|
39
|
+
should_1.default.ok(memo.startsWith('0x'), `expected 0x-prefixed hex memo, got: ${memo}`);
|
|
40
|
+
should_1.default.equal(memo.length, 66);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('build transaction', () => {
|
|
44
|
+
const sender = resources_1.accounts.account1;
|
|
45
|
+
it('should build a v8 hex token transfer transaction with v8 specVersion in output', async () => {
|
|
46
|
+
const builder = new lib_1.V8HexTokenTransferBuilder((0, base_1.buildTestConfig)())
|
|
47
|
+
.assetId(ASSET_ID)
|
|
48
|
+
.amount('1000000')
|
|
49
|
+
.fromDID(FROM_DID)
|
|
50
|
+
.toDID(TO_DID)
|
|
51
|
+
.memo('56594')
|
|
52
|
+
.sender({ address: sender.address })
|
|
53
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
54
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
55
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
56
|
+
.fee({ amount: 0, type: 'tip' });
|
|
57
|
+
builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
58
|
+
const tx = await builder.build();
|
|
59
|
+
const txJson = tx.toJson();
|
|
60
|
+
should_1.default.deepEqual(txJson.specVersion, resources_2.testnetV8Material.specVersion);
|
|
61
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_2.testnetV8Material.txVersion);
|
|
62
|
+
});
|
|
63
|
+
it('encodes legs/holderSet using the v8 AssetHolder wrapper', async () => {
|
|
64
|
+
const builder = new lib_1.V8HexTokenTransferBuilder((0, base_1.buildTestConfig)())
|
|
65
|
+
.assetId(ASSET_ID)
|
|
66
|
+
.amount('1000000')
|
|
67
|
+
.fromDID(FROM_DID)
|
|
68
|
+
.toDID(TO_DID)
|
|
69
|
+
.memo('56594')
|
|
70
|
+
.sender({ address: sender.address })
|
|
71
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
72
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
73
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
74
|
+
.fee({ amount: 0, type: 'tip' });
|
|
75
|
+
builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
76
|
+
const tx = await builder.build();
|
|
77
|
+
const v8Material = lib_1.utils.getV8Material((0, base_1.buildTestConfig)().network.type);
|
|
78
|
+
const registry = lib_1.SingletonRegistry.getInstance(v8Material);
|
|
79
|
+
const decoded = (0, txwrapper_polkadot_1.decode)(tx.toBroadcastFormat(), {
|
|
80
|
+
metadataRpc: v8Material.metadata,
|
|
81
|
+
registry,
|
|
82
|
+
});
|
|
83
|
+
const args = decoded.method.args;
|
|
84
|
+
should_1.default.not.exist(args.portfolios);
|
|
85
|
+
should_1.default.exist(args.holderSet);
|
|
86
|
+
should_1.default.equal(args.holderSet[0].portfolio.did, FROM_DID);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvdjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixzRUFBdUQ7QUFDdkQsMENBTTBCO0FBQzFCLCtDQUE2RDtBQUM3RCxzREFBMkQ7QUFDM0QsaUNBQXlDO0FBRXpDLE1BQU0sUUFBUSxHQUFHLG9FQUFvRSxDQUFDO0FBQ3RGLE1BQU0sTUFBTSxHQUFHLG9FQUFvRSxDQUFDO0FBQ3BGLE1BQU0sUUFBUSxHQUFHLG9DQUFvQyxDQUFDO0FBRXRELFFBQVEsQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7SUFDekMsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDM0IsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLENBQUM7WUFDakUsTUFBTSxRQUFRLEdBQUksT0FBZSxDQUFDLFNBQVMsQ0FBQztZQUM1QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsNkJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtZQUMxRSxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLENBQUM7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QUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQVcsQ0FBQztZQUN4QyxnQkFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSAnQHN1YnN0cmF0ZS90eHdyYXBwZXItcG9sa2Fkb3QnO1xuaW1wb3J0IHtcbiAgVjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlcixcbiAgVjhUb2tlblRyYW5zZmVyQnVpbGRlcixcbiAgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSxcbiAgU2luZ2xldG9uUmVnaXN0cnksXG4gIHV0aWxzLFxufSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IGFjY291bnRzLCBtb2NrVHNzU2lnbmF0dXJlIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IHRlc3RuZXRWOE1hdGVyaWFsIH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBidWlsZFRlc3RDb25maWcgfSBmcm9tICcuL2Jhc2UnO1xuXG5jb25zdCBGUk9NX0RJRCA9ICcweDEyMDhkNzg1MWU2Njk4MjQ5YWVhNDA3NDI3MDFlZTFlZjZjZGNjZWQyNjBhN2M0OWMxY2NhMWE5ZGI4MzYzNDInO1xuY29uc3QgVE9fRElEID0gJzB4YmM2ZjdlYzgwOGYzNjFjMTM1M2FiOWRjODhjM2NjNTRiOThkOWViNjBmZWQ5YzA2M2U2N2E0MDkyNWI4ZWY2MSc7XG5jb25zdCBBU1NFVF9JRCA9ICcweDc4MDYwMjg4N2IzNThjZjQ4OTg5ZDBkOWFhNmM4ZDI4JztcblxuZGVzY3JpYmUoJ1Y4SGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXInLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCd2OCBtYXRlcmlhbCcsICgpID0+IHtcbiAgICBpdCgnY2FycmllcyB2OCBzcGVjVmVyc2lvbiBhbmQgdHhWZXJzaW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gKGJ1aWxkZXIgYXMgYW55KS5fbWF0ZXJpYWw7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC50eFZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnR4VmVyc2lvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmYWN0b3J5IG1ldGhvZCcsICgpID0+IHtcbiAgICBpdCgnZ2V0VjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlciByZXR1cm5zIGEgVjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBzaG91bGQub2soZmFjdG9yeS5nZXRWOEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKCkgaW5zdGFuY2VvZiBWOEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdleHRlbmRzIFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIg4oCUIHNoYXJlcyB0aGUgQXNzZXRIb2xkZXItd3JhcHBlZCBsZWdzL2hvbGRlclNldCBsb2dpYycsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVjhIZXhUb2tlblRyYW5zZmVyQnVpbGRlcihidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBzaG91bGQub2soYnVpbGRlciBpbnN0YW5jZW9mIFY4VG9rZW5UcmFuc2ZlckJ1aWxkZXIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWVtbyBlbmNvZGluZycsICgpID0+IHtcbiAgICBpdCgnZW5jb2RlcyBtZW1vIGluIE5FVyAoaGV4KSBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4SGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgYnVpbGRlci5tZW1vKCc1NjU5NCcpO1xuICAgICAgY29uc3QgbWVtbyA9IChidWlsZGVyIGFzIGFueSkuX21lbW8gYXMgc3RyaW5nO1xuICAgICAgc2hvdWxkLm9rKG1lbW8uc3RhcnRzV2l0aCgnMHgnKSwgYGV4cGVjdGVkIDB4LXByZWZpeGVkIGhleCBtZW1vLCBnb3Q6ICR7bWVtb31gKTtcbiAgICAgIHNob3VsZC5lcXVhbChtZW1vLmxlbmd0aCwgNjYpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGQgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VuZGVyID0gYWNjb3VudHMuYWNjb3VudDE7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdjggaGV4IHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggdjggc3BlY1ZlcnNpb24gaW4gb3V0cHV0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOEhleFRva2VuVHJhbnNmZXJCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKVxuICAgICAgICAuYXNzZXRJZChBU1NFVF9JRClcbiAgICAgICAgLmFtb3VudCgnMTAwMDAwMCcpXG4gICAgICAgIC5mcm9tRElEKEZST01fRElEKVxuICAgICAgICAudG9ESUQoVE9fRElEKVxuICAgICAgICAubWVtbygnNTY1OTQnKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC50eFZlcnNpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2VuY29kZXMgbGVncy9ob2xkZXJTZXQgdXNpbmcgdGhlIHY4IEFzc2V0SG9sZGVyIHdyYXBwZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4SGV4VG9rZW5UcmFuc2ZlckJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpXG4gICAgICAgIC5hc3NldElkKEFTU0VUX0lEKVxuICAgICAgICAuYW1vdW50KCcxMDAwMDAwJylcbiAgICAgICAgLmZyb21ESUQoRlJPTV9ESUQpXG4gICAgICAgIC50b0RJRChUT19ESUQpXG4gICAgICAgIC5tZW1vKCc1NjU5NCcpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCB2OE1hdGVyaWFsID0gdXRpbHMuZ2V0VjhNYXRlcmlhbChidWlsZFRlc3RDb25maWcoKS5uZXR3b3JrLnR5cGUpO1xuICAgICAgY29uc3QgcmVnaXN0cnkgPSBTaW5nbGV0b25SZWdpc3RyeS5nZXRJbnN0YW5jZSh2OE1hdGVyaWFsKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGUodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwge1xuICAgICAgICBtZXRhZGF0YVJwYzogdjhNYXRlcmlhbC5tZXRhZGF0YSxcbiAgICAgICAgcmVnaXN0cnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGFyZ3MgPSBkZWNvZGVkLm1ldGhvZC5hcmdzIGFzIGFueTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3QoYXJncy5wb3J0Zm9saW9zKTtcbiAgICAgIHNob3VsZC5leGlzdChhcmdzLmhvbGRlclNldCk7XG4gICAgICBzaG91bGQuZXF1YWwoYXJncy5ob2xkZXJTZXRbMF0ucG9ydGZvbGlvLmRpZCwgRlJPTV9ESUQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v8HexTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/v8HexTransferBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,62 @@
|
|
|
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 should_1 = __importDefault(require("should"));
|
|
7
|
+
const lib_1 = require("../../../src/lib");
|
|
8
|
+
const resources_1 = require("../../resources");
|
|
9
|
+
const resources_2 = require("../../../src/resources");
|
|
10
|
+
const base_1 = require("./base");
|
|
11
|
+
describe('V8HexTransferBuilder', () => {
|
|
12
|
+
describe('v8 material', () => {
|
|
13
|
+
it('carries v8 specVersion and txVersion', () => {
|
|
14
|
+
const builder = new lib_1.V8HexTransferBuilder((0, base_1.buildTestConfig)());
|
|
15
|
+
const material = builder._material;
|
|
16
|
+
should_1.default.equal(material.specVersion, resources_2.testnetV8Material.specVersion);
|
|
17
|
+
should_1.default.equal(material.txVersion, resources_2.testnetV8Material.txVersion);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
describe('factory method', () => {
|
|
21
|
+
it('getV8HexTransferBuilder returns a V8HexTransferBuilder', () => {
|
|
22
|
+
const factory = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
23
|
+
should_1.default.ok(factory.getV8HexTransferBuilder() instanceof lib_1.V8HexTransferBuilder);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe('memo encoding', () => {
|
|
27
|
+
it('encodes memo in NEW (hex) format', () => {
|
|
28
|
+
const builder = new lib_1.V8HexTransferBuilder((0, base_1.buildTestConfig)());
|
|
29
|
+
builder.memo('56594');
|
|
30
|
+
const memo = builder._memo;
|
|
31
|
+
should_1.default.ok(memo.startsWith('0x'), `expected 0x-prefixed hex memo, got: ${memo}`);
|
|
32
|
+
should_1.default.equal(memo.length, 66);
|
|
33
|
+
});
|
|
34
|
+
it('stores an already-encoded hex memo as-is', () => {
|
|
35
|
+
const builder = new lib_1.V8HexTransferBuilder((0, base_1.buildTestConfig)());
|
|
36
|
+
const encoded = '0x3536353934000000000000000000000000000000000000000000000000000000';
|
|
37
|
+
builder.memo(encoded);
|
|
38
|
+
should_1.default.equal(builder._memo, encoded);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe('build transaction', () => {
|
|
42
|
+
const sender = resources_1.accounts.account1;
|
|
43
|
+
const receiver = resources_1.accounts.account2;
|
|
44
|
+
it('should build a v8 hex transfer transaction', async () => {
|
|
45
|
+
const builder = new lib_1.V8HexTransferBuilder((0, base_1.buildTestConfig)())
|
|
46
|
+
.amount('1000000')
|
|
47
|
+
.to({ address: receiver.address })
|
|
48
|
+
.sender({ address: sender.address })
|
|
49
|
+
.memo('56594')
|
|
50
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
51
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
52
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
53
|
+
.fee({ amount: 0, type: 'tip' });
|
|
54
|
+
builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
55
|
+
const tx = await builder.build();
|
|
56
|
+
const txJson = tx.toJson();
|
|
57
|
+
should_1.default.deepEqual(txJson.specVersion, resources_2.testnetV8Material.specVersion);
|
|
58
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_2.testnetV8Material.txVersion);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhIZXhUcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3Y4SGV4VHJhbnNmZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDBDQUFtRjtBQUNuRiwrQ0FBNkQ7QUFDN0Qsc0RBQTJEO0FBQzNELGlDQUF5QztBQUV6QyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO0lBQ3BDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQzNCLEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7WUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSwwQkFBb0IsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxDQUFDO1lBQzVELE1BQU0sUUFBUSxHQUFJLE9BQWUsQ0FBQyxTQUFTLENBQUM7WUFDNUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSw2QkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1FBQzlCLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7WUFDaEUsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxDQUFDO1lBQ2pFLGdCQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxZQUFZLDBCQUFvQixDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1FBQzdCLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSwwQkFBb0IsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQyxDQUFDO1lBQzVELE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsTUFBTSxJQUFJLEdBQUksT0FBZSxDQUFDLEtBQWUsQ0FBQztZQUM5QyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLHVDQUF1QyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2hGLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMENBQTBDLEVBQUUsR0FBRyxFQUFFO1lBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksMEJBQW9CLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUMsQ0FBQztZQUM1RCxNQUFNLE9BQU8sR0FBRyxvRUFBb0UsQ0FBQztZQUNyRixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLGdCQUFNLENBQUMsS0FBSyxDQUFFLE9BQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsTUFBTSxNQUFNLEdBQUcsb0JBQVEsQ0FBQyxRQUFRLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsb0JBQVEsQ0FBQyxRQUFRLENBQUM7UUFFbkMsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFELE1BQU0sT0FBTyxHQUFHLElBQUksMEJBQW9CLENBQUMsSUFBQSxzQkFBZSxHQUFFLENBQUM7aUJBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQUM7aUJBQ2pCLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ2pDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ25DLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQ2IsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQy9DLGNBQWMsQ0FBQyxvRUFBb0UsQ0FBQztpQkFDcEYsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDekQsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNuQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdEYsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFY4SGV4VHJhbnNmZXJCdWlsZGVyLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBhY2NvdW50cywgbW9ja1Rzc1NpZ25hdHVyZSB9IGZyb20gJy4uLy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgeyB0ZXN0bmV0VjhNYXRlcmlhbCB9IGZyb20gJy4uLy4uLy4uL3NyYy9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgYnVpbGRUZXN0Q29uZmlnIH0gZnJvbSAnLi9iYXNlJztcblxuZGVzY3JpYmUoJ1Y4SGV4VHJhbnNmZXJCdWlsZGVyJywgKCkgPT4ge1xuICBkZXNjcmliZSgndjggbWF0ZXJpYWwnLCAoKSA9PiB7XG4gICAgaXQoJ2NhcnJpZXMgdjggc3BlY1ZlcnNpb24gYW5kIHR4VmVyc2lvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVjhIZXhUcmFuc2ZlckJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgbWF0ZXJpYWwgPSAoYnVpbGRlciBhcyBhbnkpLl9tYXRlcmlhbDtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKG1hdGVyaWFsLnR4VmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwudHhWZXJzaW9uKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZhY3RvcnkgbWV0aG9kJywgKCkgPT4ge1xuICAgIGl0KCdnZXRWOEhleFRyYW5zZmVyQnVpbGRlciByZXR1cm5zIGEgVjhIZXhUcmFuc2ZlckJ1aWxkZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgc2hvdWxkLm9rKGZhY3RvcnkuZ2V0VjhIZXhUcmFuc2ZlckJ1aWxkZXIoKSBpbnN0YW5jZW9mIFY4SGV4VHJhbnNmZXJCdWlsZGVyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ21lbW8gZW5jb2RpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ2VuY29kZXMgbWVtbyBpbiBORVcgKGhleCkgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBWOEhleFRyYW5zZmVyQnVpbGRlcihidWlsZFRlc3RDb25maWcoKSk7XG4gICAgICBidWlsZGVyLm1lbW8oJzU2NTk0Jyk7XG4gICAgICBjb25zdCBtZW1vID0gKGJ1aWxkZXIgYXMgYW55KS5fbWVtbyBhcyBzdHJpbmc7XG4gICAgICBzaG91bGQub2sobWVtby5zdGFydHNXaXRoKCcweCcpLCBgZXhwZWN0ZWQgMHgtcHJlZml4ZWQgaGV4IG1lbW8sIGdvdDogJHttZW1vfWApO1xuICAgICAgc2hvdWxkLmVxdWFsKG1lbW8ubGVuZ3RoLCA2Nik7XG4gICAgfSk7XG5cbiAgICBpdCgnc3RvcmVzIGFuIGFscmVhZHktZW5jb2RlZCBoZXggbWVtbyBhcy1pcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVjhIZXhUcmFuc2ZlckJ1aWxkZXIoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgY29uc3QgZW5jb2RlZCA9ICcweDM1MzYzNTM5MzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnO1xuICAgICAgYnVpbGRlci5tZW1vKGVuY29kZWQpO1xuICAgICAgc2hvdWxkLmVxdWFsKChidWlsZGVyIGFzIGFueSkuX21lbW8sIGVuY29kZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGQgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VuZGVyID0gYWNjb3VudHMuYWNjb3VudDE7XG4gICAgY29uc3QgcmVjZWl2ZXIgPSBhY2NvdW50cy5hY2NvdW50MjtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB2OCBoZXggdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4SGV4VHJhbnNmZXJCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKVxuICAgICAgICAuYW1vdW50KCcxMDAwMDAwJylcbiAgICAgICAgLnRvKHsgYWRkcmVzczogcmVjZWl2ZXIuYWRkcmVzcyB9KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLm1lbW8oJzU2NTk0JylcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogMzkzMywgbWF4RHVyYXRpb246IDY0IH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jaygnMHgxNDk3OTliYzk2MDJjYjVjZjIwMWYzNDI1ZmI4ZDI1M2IyZDRlNjFmYzExOWRjYWIzMjQ5ZjMwN2Y1OTQ3NTRkJylcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogMSB9KVxuICAgICAgICAuZmVlKHsgYW1vdW50OiAwLCB0eXBlOiAndGlwJyB9KTtcbiAgICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiBzZW5kZXIucHVibGljS2V5IH0sIEJ1ZmZlci5mcm9tKG1vY2tUc3NTaWduYXR1cmUsICdoZXgnKSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zcGVjVmVyc2lvbiwgdGVzdG5ldFY4TWF0ZXJpYWwuc3BlY1ZlcnNpb24pO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udHJhbnNhY3Rpb25WZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC50eFZlcnNpb24pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v8PreApproveAssetBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/v8PreApproveAssetBuilder.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,45 @@
|
|
|
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 should_1 = __importDefault(require("should"));
|
|
7
|
+
const lib_1 = require("../../../src/lib");
|
|
8
|
+
const resources_1 = require("../../resources");
|
|
9
|
+
const resources_2 = require("../../../src/resources");
|
|
10
|
+
const base_1 = require("./base");
|
|
11
|
+
const ASSET_ID = '0x780602887b358cf48989d0d9aa6c8d28';
|
|
12
|
+
describe('V8PreApproveAssetBuilder', () => {
|
|
13
|
+
describe('v8 material', () => {
|
|
14
|
+
it('carries v8 specVersion and txVersion', () => {
|
|
15
|
+
const builder = new lib_1.V8PreApproveAssetBuilder((0, base_1.buildTestConfig)());
|
|
16
|
+
const material = builder._material;
|
|
17
|
+
should_1.default.equal(material.specVersion, resources_2.testnetV8Material.specVersion);
|
|
18
|
+
should_1.default.equal(material.txVersion, resources_2.testnetV8Material.txVersion);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
describe('factory method', () => {
|
|
22
|
+
it('getV8PreApproveAssetBuilder returns a V8PreApproveAssetBuilder', () => {
|
|
23
|
+
const factory = new lib_1.TransactionBuilderFactory((0, base_1.buildTestConfig)());
|
|
24
|
+
should_1.default.ok(factory.getV8PreApproveAssetBuilder() instanceof lib_1.V8PreApproveAssetBuilder);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('build transaction', () => {
|
|
28
|
+
const sender = resources_1.accounts.account1;
|
|
29
|
+
it('should build a v8 pre-approve asset transaction with v8 specVersion in output', async () => {
|
|
30
|
+
const builder = new lib_1.V8PreApproveAssetBuilder((0, base_1.buildTestConfig)())
|
|
31
|
+
.assetId(ASSET_ID)
|
|
32
|
+
.sender({ address: sender.address })
|
|
33
|
+
.validity({ firstValid: 3933, maxDuration: 64 })
|
|
34
|
+
.referenceBlock('0x149799bc9602cb5cf201f3425fb8d253b2d4e61fc119dcab3249f307f594754d')
|
|
35
|
+
.sequenceId({ name: 'Nonce', keyword: 'nonce', value: 1 })
|
|
36
|
+
.fee({ amount: 0, type: 'tip' });
|
|
37
|
+
builder.addSignature({ pub: sender.publicKey }, Buffer.from(resources_1.mockTssSignature, 'hex'));
|
|
38
|
+
const tx = await builder.build();
|
|
39
|
+
const txJson = tx.toJson();
|
|
40
|
+
should_1.default.deepEqual(txJson.specVersion, resources_2.testnetV8Material.specVersion);
|
|
41
|
+
should_1.default.deepEqual(txJson.transactionVersion, resources_2.testnetV8Material.txVersion);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjhQcmVBcHByb3ZlQXNzZXRCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci92OFByZUFwcHJvdmVBc3NldEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsMENBQXVGO0FBQ3ZGLCtDQUE2RDtBQUM3RCxzREFBMkQ7QUFDM0QsaUNBQXlDO0FBRXpDLE1BQU0sUUFBUSxHQUFHLG9DQUFvQyxDQUFDO0FBRXRELFFBQVEsQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7SUFDeEMsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDM0IsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLDhCQUF3QixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLENBQUM7WUFDaEUsTUFBTSxRQUFRLEdBQUksT0FBZSxDQUFDLFNBQVMsQ0FBQztZQUM1QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLDZCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsNkJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEdBQUcsRUFBRTtZQUN4RSxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLElBQUEsc0JBQWUsR0FBRSxDQUFDLENBQUM7WUFDakUsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFLFlBQVksOEJBQXdCLENBQUMsQ0FBQztRQUN2RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtRQUNqQyxNQUFNLE1BQU0sR0FBRyxvQkFBUSxDQUFDLFFBQVEsQ0FBQztRQUVqQyxFQUFFLENBQUMsK0VBQStFLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDN0YsTUFBTSxPQUFPLEdBQUcsSUFBSSw4QkFBd0IsQ0FBQyxJQUFBLHNCQUFlLEdBQUUsQ0FBQztpQkFDNUQsT0FBTyxDQUFDLFFBQVEsQ0FBQztpQkFDakIsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDbkMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQy9DLGNBQWMsQ0FBQyxvRUFBb0UsQ0FBQztpQkFDcEYsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztpQkFDekQsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNuQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdEYsTUFBTSxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsNkJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLDZCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFY4UHJlQXBwcm92ZUFzc2V0QnVpbGRlciwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWInO1xuaW1wb3J0IHsgYWNjb3VudHMsIG1vY2tUc3NTaWduYXR1cmUgfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgdGVzdG5ldFY4TWF0ZXJpYWwgfSBmcm9tICcuLi8uLi8uLi9zcmMvcmVzb3VyY2VzJztcbmltcG9ydCB7IGJ1aWxkVGVzdENvbmZpZyB9IGZyb20gJy4vYmFzZSc7XG5cbmNvbnN0IEFTU0VUX0lEID0gJzB4NzgwNjAyODg3YjM1OGNmNDg5ODlkMGQ5YWE2YzhkMjgnO1xuXG5kZXNjcmliZSgnVjhQcmVBcHByb3ZlQXNzZXRCdWlsZGVyJywgKCkgPT4ge1xuICBkZXNjcmliZSgndjggbWF0ZXJpYWwnLCAoKSA9PiB7XG4gICAgaXQoJ2NhcnJpZXMgdjggc3BlY1ZlcnNpb24gYW5kIHR4VmVyc2lvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVjhQcmVBcHByb3ZlQXNzZXRCdWlsZGVyKGJ1aWxkVGVzdENvbmZpZygpKTtcbiAgICAgIGNvbnN0IG1hdGVyaWFsID0gKGJ1aWxkZXIgYXMgYW55KS5fbWF0ZXJpYWw7XG4gICAgICBzaG91bGQuZXF1YWwobWF0ZXJpYWwuc3BlY1ZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnNwZWNWZXJzaW9uKTtcbiAgICAgIHNob3VsZC5lcXVhbChtYXRlcmlhbC50eFZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnR4VmVyc2lvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmYWN0b3J5IG1ldGhvZCcsICgpID0+IHtcbiAgICBpdCgnZ2V0VjhQcmVBcHByb3ZlQXNzZXRCdWlsZGVyIHJldHVybnMgYSBWOFByZUFwcHJvdmVBc3NldEJ1aWxkZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoYnVpbGRUZXN0Q29uZmlnKCkpO1xuICAgICAgc2hvdWxkLm9rKGZhY3RvcnkuZ2V0VjhQcmVBcHByb3ZlQXNzZXRCdWlsZGVyKCkgaW5zdGFuY2VvZiBWOFByZUFwcHJvdmVBc3NldEJ1aWxkZXIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGQgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgY29uc3Qgc2VuZGVyID0gYWNjb3VudHMuYWNjb3VudDE7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdjggcHJlLWFwcHJvdmUgYXNzZXQgdHJhbnNhY3Rpb24gd2l0aCB2OCBzcGVjVmVyc2lvbiBpbiBvdXRwdXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFY4UHJlQXBwcm92ZUFzc2V0QnVpbGRlcihidWlsZFRlc3RDb25maWcoKSlcbiAgICAgICAgLmFzc2V0SWQoQVNTRVRfSUQpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiAzOTMzLCBtYXhEdXJhdGlvbjogNjQgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKCcweDE0OTc5OWJjOTYwMmNiNWNmMjAxZjM0MjVmYjhkMjUzYjJkNGU2MWZjMTE5ZGNhYjMyNDlmMzA3ZjU5NDc1NGQnKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAxIH0pXG4gICAgICAgIC5mZWUoeyBhbW91bnQ6IDAsIHR5cGU6ICd0aXAnIH0pO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IHNlbmRlci5wdWJsaWNLZXkgfSwgQnVmZmVyLmZyb20obW9ja1Rzc1NpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNwZWNWZXJzaW9uLCB0ZXN0bmV0VjhNYXRlcmlhbC5zcGVjVmVyc2lvbik7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50cmFuc2FjdGlvblZlcnNpb24sIHRlc3RuZXRWOE1hdGVyaWFsLnR4VmVyc2lvbik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v8RegisterDidBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/v8RegisterDidBuilder.ts"],"names":[],"mappings":""}
|