@bitgo-beta/sdk-coin-ada 2.3.14-beta.202 → 2.3.14-beta.2021

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.
Files changed (116) hide show
  1. package/dist/src/ada.d.ts +22 -14
  2. package/dist/src/ada.d.ts.map +1 -1
  3. package/dist/src/ada.js +168 -76
  4. package/dist/src/adaToken.d.ts +16 -11
  5. package/dist/src/adaToken.d.ts.map +1 -1
  6. package/dist/src/adaToken.js +109 -3
  7. package/dist/src/index.js +6 -2
  8. package/dist/src/lib/index.d.ts +3 -1
  9. package/dist/src/lib/index.d.ts.map +1 -1
  10. package/dist/src/lib/index.js +29 -9
  11. package/dist/src/lib/keyPair.js +29 -16
  12. package/dist/src/lib/messages/cip8/cip8Message.d.ts +25 -0
  13. package/dist/src/lib/messages/cip8/cip8Message.d.ts.map +1 -0
  14. package/dist/src/lib/messages/cip8/cip8Message.js +140 -0
  15. package/dist/src/lib/messages/cip8/cip8MessageBuilder.d.ts +19 -0
  16. package/dist/src/lib/messages/cip8/cip8MessageBuilder.d.ts.map +1 -0
  17. package/dist/src/lib/messages/cip8/cip8MessageBuilder.js +27 -0
  18. package/dist/src/lib/messages/cip8/index.d.ts +4 -0
  19. package/dist/src/lib/messages/cip8/index.d.ts.map +1 -0
  20. package/dist/src/lib/messages/cip8/index.js +20 -0
  21. package/dist/src/lib/messages/cip8/utils.d.ts +24 -0
  22. package/dist/src/lib/messages/cip8/utils.d.ts.map +1 -0
  23. package/dist/src/lib/messages/cip8/utils.js +73 -0
  24. package/dist/src/lib/messages/index.d.ts +3 -0
  25. package/dist/src/lib/messages/index.d.ts.map +1 -0
  26. package/dist/src/lib/messages/index.js +19 -0
  27. package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
  28. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  29. package/dist/src/lib/messages/messageBuilderFactory.js +20 -0
  30. package/dist/src/lib/stakingActivateBuilder.d.ts +1 -1
  31. package/dist/src/lib/stakingActivateBuilder.d.ts.map +1 -1
  32. package/dist/src/lib/stakingActivateBuilder.js +30 -10
  33. package/dist/src/lib/stakingDeactivateBuilder.js +24 -10
  34. package/dist/src/lib/transaction.d.ts +31 -7
  35. package/dist/src/lib/transaction.d.ts.map +1 -1
  36. package/dist/src/lib/transaction.js +112 -17
  37. package/dist/src/lib/transactionBuilder.d.ts +122 -3
  38. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  39. package/dist/src/lib/transactionBuilder.js +517 -20
  40. package/dist/src/lib/transactionBuilderFactory.d.ts +2 -0
  41. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  42. package/dist/src/lib/transactionBuilderFactory.js +7 -1
  43. package/dist/src/lib/utils.d.ts +22 -0
  44. package/dist/src/lib/utils.d.ts.map +1 -1
  45. package/dist/src/lib/utils.js +152 -17
  46. package/dist/src/lib/voteDelegationBuilder.d.ts +24 -0
  47. package/dist/src/lib/voteDelegationBuilder.d.ts.map +1 -0
  48. package/dist/src/lib/voteDelegationBuilder.js +84 -0
  49. package/dist/test/resources/cip8Resources.d.ts +25 -0
  50. package/dist/test/resources/cip8Resources.d.ts.map +1 -0
  51. package/dist/test/resources/cip8Resources.js +76 -0
  52. package/dist/test/resources/index.d.ts +458 -0
  53. package/dist/test/resources/index.d.ts.map +1 -0
  54. package/dist/test/resources/index.js +659 -0
  55. package/dist/test/unit/StakingActivateBuilder.d.ts +2 -0
  56. package/dist/test/unit/StakingActivateBuilder.d.ts.map +1 -0
  57. package/dist/test/unit/StakingActivateBuilder.js +213 -0
  58. package/dist/test/unit/StakingDeactivateBuilder.d.ts +2 -0
  59. package/dist/test/unit/StakingDeactivateBuilder.d.ts.map +1 -0
  60. package/dist/test/unit/StakingDeactivateBuilder.js +158 -0
  61. package/dist/test/unit/ada.d.ts +5 -0
  62. package/dist/test/unit/ada.d.ts.map +1 -0
  63. package/dist/test/unit/ada.js +1704 -0
  64. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  65. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  66. package/dist/test/unit/getBuilderFactory.js +10 -0
  67. package/dist/test/unit/index.d.ts +2 -0
  68. package/dist/test/unit/index.d.ts.map +1 -0
  69. package/dist/test/unit/index.js +32 -0
  70. package/dist/test/unit/keyPair.d.ts +2 -0
  71. package/dist/test/unit/keyPair.d.ts.map +1 -0
  72. package/dist/test/unit/keyPair.js +88 -0
  73. package/dist/test/unit/messages/cip8/cip8Message.d.ts +2 -0
  74. package/dist/test/unit/messages/cip8/cip8Message.d.ts.map +1 -0
  75. package/dist/test/unit/messages/cip8/cip8Message.js +131 -0
  76. package/dist/test/unit/messages/cip8/cip8MessageBuilder.d.ts +2 -0
  77. package/dist/test/unit/messages/cip8/cip8MessageBuilder.d.ts.map +1 -0
  78. package/dist/test/unit/messages/cip8/cip8MessageBuilder.js +132 -0
  79. package/dist/test/unit/messages/cip8/utils.d.ts +2 -0
  80. package/dist/test/unit/messages/cip8/utils.d.ts.map +1 -0
  81. package/dist/test/unit/messages/cip8/utils.js +127 -0
  82. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  83. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  84. package/dist/test/unit/messages/messageBuilderFactory.js +35 -0
  85. package/dist/test/unit/plutusPledgeBuilder.d.ts +2 -0
  86. package/dist/test/unit/plutusPledgeBuilder.d.ts.map +1 -0
  87. package/dist/test/unit/plutusPledgeBuilder.js +162 -0
  88. package/dist/test/unit/stakingClaimRewardsBuilder.d.ts +2 -0
  89. package/dist/test/unit/stakingClaimRewardsBuilder.d.ts.map +1 -0
  90. package/dist/test/unit/stakingClaimRewardsBuilder.js +70 -0
  91. package/dist/test/unit/stakingPledgeBuilder.d.ts +2 -0
  92. package/dist/test/unit/stakingPledgeBuilder.d.ts.map +1 -0
  93. package/dist/test/unit/stakingPledgeBuilder.js +141 -0
  94. package/dist/test/unit/stakingWithdrawBuilder.d.ts +2 -0
  95. package/dist/test/unit/stakingWithdrawBuilder.d.ts.map +1 -0
  96. package/dist/test/unit/stakingWithdrawBuilder.js +167 -0
  97. package/dist/test/unit/tokenWithdrawal.d.ts +2 -0
  98. package/dist/test/unit/tokenWithdrawal.d.ts.map +1 -0
  99. package/dist/test/unit/tokenWithdrawal.js +959 -0
  100. package/dist/test/unit/transaction.d.ts +2 -0
  101. package/dist/test/unit/transaction.d.ts.map +1 -0
  102. package/dist/test/unit/transaction.js +100 -0
  103. package/dist/test/unit/transactionBuilder.d.ts +2 -0
  104. package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
  105. package/dist/test/unit/transactionBuilder.js +545 -0
  106. package/dist/test/unit/utils.d.ts +2 -0
  107. package/dist/test/unit/utils.d.ts.map +1 -0
  108. package/dist/test/unit/utils.js +138 -0
  109. package/dist/test/unit/voteDelegationBuilder.d.ts +2 -0
  110. package/dist/test/unit/voteDelegationBuilder.d.ts.map +1 -0
  111. package/dist/test/unit/voteDelegationBuilder.js +96 -0
  112. package/dist/tsconfig.tsbuildinfo +1 -0
  113. package/package.json +18 -13
  114. package/.eslintignore +0 -5
  115. package/.mocharc.yml +0 -8
  116. package/CHANGELOG.md +0 -510
@@ -0,0 +1,141 @@
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 src_1 = require("../../src");
7
+ const statics_1 = require("@bitgo-beta/statics");
8
+ const resources_1 = require("../resources");
9
+ const should_1 = __importDefault(require("should"));
10
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
11
+ describe('ADA Staking Pledge Transaction Builder', async () => {
12
+ const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tada'));
13
+ it('should build a pledge transaction that registers a new staking pool', async () => {
14
+ const prebuiltTx = new src_1.Transaction(statics_1.coins.get('tada'));
15
+ prebuiltTx.fromRawTransaction(resources_1.rawTx.unsignedNewPledgeTx);
16
+ const txBuilder = factory.getStakingPledgeBuilder();
17
+ txBuilder.initBuilder(prebuiltTx);
18
+ const tx = (await txBuilder.build());
19
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.StakingPledge);
20
+ const txData = tx.toJson();
21
+ txData.inputs.length.should.equal(2);
22
+ txData.outputs.length.should.equal(1);
23
+ txData.certs.length.should.equal(2);
24
+ txData.certs[0].type.should.equal(3);
25
+ txData.certs[1].type.should.equal(1);
26
+ should_1.default.exist(txData.certs[1].poolKeyHash);
27
+ txData.certs[0].poolKeyHash.should.equal('10324dc34187735de46f6260d94620cdcc819f7ed1f93e3fc58d06a0');
28
+ txData.withdrawals.length.should.equal(0);
29
+ txData.witnesses.length.should.equal(0);
30
+ should_1.default.exist(txData.pledgeDetails);
31
+ should_1.default.not.exist(txData.pledgeDetails.stakeKeyRegistration);
32
+ should_1.default.exist(txData.pledgeDetails.stakeKeyDelegation);
33
+ should_1.default.exist(txData.pledgeDetails.stakePoolRegistration);
34
+ should_1.default.equal(txData.pledgeDetails.stakeKeyDelegation.poolKeyHash, txData.pledgeDetails.stakePoolRegistration.poolKeyHash);
35
+ txData.pledgeDetails.stakePoolRegistration.pledge.should.equal('100000000');
36
+ txData.pledgeDetails.stakePoolRegistration.cost.should.equal('500000000');
37
+ txData.pledgeDetails.stakePoolRegistration.marginNumerator.should.equal('3');
38
+ txData.pledgeDetails.stakePoolRegistration.marginDenominator.should.equal('20');
39
+ txData.pledgeDetails.stakePoolRegistration.rewardAccount.should.equal(txData.pledgeDetails.stakePoolRegistration.poolOwners[0]);
40
+ const fee = tx.getFee;
41
+ fee.should.equal('1000000');
42
+ tx.toBroadcastFormat().should.equal(resources_1.rawTx.unsignedNewPledgeTx);
43
+ should_1.default.equal(tx.id, resources_1.rawTx.unsignedNewPledgeTxHash);
44
+ const explainedTx = tx.explainTransaction();
45
+ should_1.default.equal(explainedTx.type, 'StakingPledge');
46
+ });
47
+ it('should build a pledge transaction that updates existing staking pool', async () => {
48
+ const prebuiltTx = new src_1.Transaction(statics_1.coins.get('tada'));
49
+ prebuiltTx.fromRawTransaction(resources_1.rawTx.unsignedUpdatePledgeTx);
50
+ const txBuilder = factory.getStakingPledgeBuilder();
51
+ txBuilder.initBuilder(prebuiltTx);
52
+ const tx = (await txBuilder.build());
53
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.StakingPledge);
54
+ const txData = tx.toJson();
55
+ txData.inputs.length.should.equal(2);
56
+ txData.outputs.length.should.equal(1);
57
+ txData.certs.length.should.equal(1);
58
+ txData.certs[0].type.should.equal(3);
59
+ should_1.default.exist(txData.certs[0].poolKeyHash);
60
+ txData.certs[0].poolKeyHash.should.equal('10324dc34187735de46f6260d94620cdcc819f7ed1f93e3fc58d06a0');
61
+ txData.withdrawals.length.should.equal(0);
62
+ txData.witnesses.length.should.equal(0);
63
+ should_1.default.exist(txData.pledgeDetails);
64
+ should_1.default.not.exist(txData.pledgeDetails.stakeKeyRegistration);
65
+ should_1.default.not.exist(txData.pledgeDetails.stakeKeyDelegation);
66
+ should_1.default.exist(txData.pledgeDetails.stakePoolRegistration);
67
+ txData.pledgeDetails.stakePoolRegistration.pledge.should.equal('100000000');
68
+ txData.pledgeDetails.stakePoolRegistration.cost.should.equal('500000000');
69
+ txData.pledgeDetails.stakePoolRegistration.marginNumerator.should.equal('3');
70
+ txData.pledgeDetails.stakePoolRegistration.marginDenominator.should.equal('20');
71
+ txData.pledgeDetails.stakePoolRegistration.rewardAccount.should.equal(txData.pledgeDetails.stakePoolRegistration.poolOwners[0]);
72
+ const fee = tx.getFee;
73
+ fee.should.equal('1000000');
74
+ tx.toBroadcastFormat().should.equal(resources_1.rawTx.unsignedUpdatePledgeTx);
75
+ should_1.default.equal(tx.id, resources_1.rawTx.unsignedUpdatePledgeTxHash);
76
+ const explainedTx = tx.explainTransaction();
77
+ should_1.default.equal(explainedTx.type, 'StakingPledge');
78
+ });
79
+ it('should add node key witness to unsigned pledge transaction', async () => {
80
+ const prebuiltTx = new src_1.Transaction(statics_1.coins.get('tada'));
81
+ prebuiltTx.fromRawTransaction(resources_1.rawTx.unsignedUpdatePledgeTx);
82
+ const txBuilder = factory.getStakingPledgeBuilder();
83
+ txBuilder.initBuilder(prebuiltTx);
84
+ txBuilder.addNodeKeyWitness(resources_1.rawTx.pledgeNodeKeyPubkey, resources_1.rawTx.pledgeNodeWitnessSignature);
85
+ const tx = (await txBuilder.build());
86
+ tx.signature.length.should.equal(1);
87
+ const txData = tx.toJson();
88
+ txData.witnesses.length.should.equal(1);
89
+ should_1.default.exist(txData.pledgeDetails);
90
+ should_1.default.not.exist(txData.pledgeDetails.stakeKeyRegistration);
91
+ should_1.default.not.exist(txData.pledgeDetails.stakeKeyDelegation);
92
+ should_1.default.exist(txData.pledgeDetails.stakePoolRegistration);
93
+ txData.pledgeDetails.stakePoolRegistration.pledge.should.equal('100000000');
94
+ txData.pledgeDetails.stakePoolRegistration.cost.should.equal('500000000');
95
+ txData.pledgeDetails.stakePoolRegistration.marginNumerator.should.equal('3');
96
+ txData.pledgeDetails.stakePoolRegistration.marginDenominator.should.equal('20');
97
+ txData.pledgeDetails.stakePoolRegistration.rewardAccount.should.equal(txData.pledgeDetails.stakePoolRegistration.poolOwners[0]);
98
+ const rebuiltTx = new src_1.Transaction(statics_1.coins.get('tada'));
99
+ rebuiltTx.fromRawTransaction(tx.toBroadcastFormat());
100
+ rebuiltTx.signature.length.should.equal(1);
101
+ rebuiltTx.toBroadcastFormat().should.equal(tx.toBroadcastFormat());
102
+ rebuiltTx.toBroadcastFormat().should.not.equal(resources_1.rawTx.unsignedUpdatePledgeTx);
103
+ });
104
+ it('should init from partially signed txn hex and preserve the signature', async () => {
105
+ const txnBuilderFactory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tada'));
106
+ const txnBuilder = txnBuilderFactory.from(resources_1.rawTx.partiallySignedPledgeTx);
107
+ let tx = (await txnBuilder.build());
108
+ tx.type.should.equal(sdk_core_1.TransactionType.StakingPledge);
109
+ tx.signature.length.should.equal(1);
110
+ let txData = tx.toJson();
111
+ txData.witnesses.length.should.equal(1);
112
+ txData.witnesses[0].publicKey.should.equal(resources_1.rawTx.pledgeNodeKeyPubkey);
113
+ txData.witnesses[0].signature.should.equal(resources_1.rawTx.pledgeNodeWitnessSignature);
114
+ txnBuilder.addSignature({ pub: resources_1.rawTx.pledgeWalletKeyPubkey }, Buffer.from(resources_1.rawTx.pledgeWalletWitnessSignature, 'hex'));
115
+ tx = (await txnBuilder.build());
116
+ tx.type.should.equal(sdk_core_1.TransactionType.StakingPledge);
117
+ txData = tx.toJson();
118
+ txData.witnesses.length.should.equal(2);
119
+ txData.witnesses[0].publicKey.should.equal(resources_1.rawTx.pledgeNodeKeyPubkey);
120
+ txData.witnesses[0].signature.should.equal(resources_1.rawTx.pledgeNodeWitnessSignature);
121
+ txData.witnesses[1].publicKey.should.equal(resources_1.rawTx.pledgeWalletKeyPubkey);
122
+ txData.witnesses[1].signature.should.equal(resources_1.rawTx.pledgeWalletWitnessSignature);
123
+ });
124
+ it('should init from partially signed txn object and preserve the signature', async () => {
125
+ const prebuiltTx = new src_1.Transaction(statics_1.coins.get('tada'));
126
+ prebuiltTx.fromRawTransaction(resources_1.rawTx.partiallySignedPledgeTx);
127
+ prebuiltTx.toBroadcastFormat().should.equal(resources_1.rawTx.partiallySignedPledgeTx);
128
+ prebuiltTx.signature.length.should.equal(1);
129
+ const txBuilder = factory.getStakingPledgeBuilder();
130
+ txBuilder.initBuilder(prebuiltTx);
131
+ const tx = (await txBuilder.build());
132
+ tx.type.should.equal(sdk_core_1.TransactionType.StakingPledge);
133
+ tx.toBroadcastFormat().should.equal(resources_1.rawTx.partiallySignedPledgeTx);
134
+ tx.signature.length.should.equal(1);
135
+ const txData = tx.toJson();
136
+ txData.witnesses.length.should.equal(1);
137
+ txData.witnesses[0].publicKey.should.equal(resources_1.rawTx.pledgeNodeKeyPubkey);
138
+ txData.witnesses[0].signature.should.equal(resources_1.rawTx.pledgeNodeWitnessSignature);
139
+ });
140
+ });
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1BsZWRnZUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvc3Rha2luZ1BsZWRnZUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBbUU7QUFDbkUsaURBQTRDO0FBQzVDLDRDQUFxQztBQUNyQyxvREFBNEI7QUFDNUIsbURBQXVEO0FBRXZELFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM1RCxNQUFNLE9BQU8sR0FBRyxJQUFJLCtCQUF5QixDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVqRSxFQUFFLENBQUMscUVBQXFFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbkYsTUFBTSxVQUFVLEdBQUcsSUFBSSxpQkFBVyxDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0RCxVQUFVLENBQUMsa0JBQWtCLENBQUMsaUJBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3BELFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBZ0IsQ0FBQztRQUNwRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUss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TUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyByYXdUeCB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmRlc2NyaWJlKCdBREEgU3Rha2luZyBQbGVkZ2UgVHJhbnNhY3Rpb24gQnVpbGRlcicsIGFzeW5jICgpID0+IHtcbiAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGFkYScpKTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgcGxlZGdlIHRyYW5zYWN0aW9uIHRoYXQgcmVnaXN0ZXJzIGEgbmV3IHN0YWtpbmcgcG9vbCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwcmVidWlsdFR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5zLmdldCgndGFkYScpKTtcbiAgICBwcmVidWlsdFR4LmZyb21SYXdUcmFuc2FjdGlvbihyYXdUeC51bnNpZ25lZE5ld1BsZWRnZVR4KTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdQbGVkZ2VCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmluaXRCdWlsZGVyKHByZWJ1aWx0VHgpO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdQbGVkZ2UpO1xuICAgIGNvbnN0IHR4RGF0YSA9IHR4LnRvSnNvbigpO1xuICAgIHR4RGF0YS5pbnB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcbiAgICB0eERhdGEub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHR4RGF0YS5jZXJ0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIHR4RGF0YS5jZXJ0c1swXS50eXBlLnNob3VsZC5lcXVhbCgzKTtcbiAgICB0eERhdGEuY2VydHNbMV0udHlwZS5zaG91bGQuZXF1YWwoMSk7XG4gICAgc2hvdWxkLmV4aXN0KHR4RGF0YS5jZXJ0c1sxXS5wb29sS2V5SGFzaCk7XG4gICAgdHhEYXRhLmNlcnRzWzBdLnBvb2xLZXlIYXNoIS5zaG91bGQuZXF1YWwoJzEwMzI0ZGMzNDE4NzczNWRlNDZmNjI2MGQ5NDYyMGNkY2M4MTlmN2VkMWY5M2UzZmM1OGQwNmEwJyk7XG4gICAgdHhEYXRhLndpdGhkcmF3YWxzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgdHhEYXRhLndpdG5lc3Nlcy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgIHNob3VsZC5leGlzdCh0eERhdGEucGxlZGdlRGV0YWlscyk7XG4gICAgc2hvdWxkLm5vdC5leGlzdCh0eERhdGEucGxlZGdlRGV0YWlscyEuc3Rha2VLZXlSZWdpc3RyYXRpb24pO1xuICAgIHNob3VsZC5leGlzdCh0eERhdGEucGxlZGdlRGV0YWlscyEuc3Rha2VLZXlEZWxlZ2F0aW9uKTtcbiAgICBzaG91bGQuZXhpc3QodHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlUG9vbFJlZ2lzdHJhdGlvbik7XG4gICAgc2hvdWxkLmVxdWFsKFxuICAgICAgdHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlS2V5RGVsZWdhdGlvbiEucG9vbEtleUhhc2gsXG4gICAgICB0eERhdGEucGxlZGdlRGV0YWlscyEuc3Rha2VQb29sUmVnaXN0cmF0aW9uIS5wb29sS2V5SGFzaFxuICAgICk7XG4gICAgdHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlUG9vbFJlZ2lzdHJhdGlvbiEucGxlZGdlLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwJyk7XG4gICAgdHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlUG9vbFJlZ2lzdHJhdGlvbiEuY29zdC5zaG91bGQuZXF1YWwoJzUwMDAwMDAwMCcpO1xuICAgIHR4RGF0YS5wbGVkZ2VEZXRhaWxzIS5zdGFrZVBvb2xSZWdpc3RyYXRpb24hLm1hcmdpbk51bWVyYXRvci5zaG91bGQuZXF1YWwoJzMnKTtcbiAgICB0eERhdGEucGxlZGdlRGV0YWlscyEuc3Rha2VQb29sUmVnaXN0cmF0aW9uIS5tYXJnaW5EZW5vbWluYXRvci5zaG91bGQuZXF1YWwoJzIwJyk7XG4gICAgdHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlUG9vbFJlZ2lzdHJhdGlvbiEucmV3YXJkQWNjb3VudC5zaG91bGQuZXF1YWwoXG4gICAgICB0eERhdGEucGxlZGdlRGV0YWlscyEuc3Rha2VQb29sUmVnaXN0cmF0aW9uIS5wb29sT3duZXJzWzBdXG4gICAgKTtcblxuICAgIGNvbnN0IGZlZSA9IHR4LmdldEZlZTtcbiAgICBmZWUuc2hvdWxkLmVxdWFsKCcxMDAwMDAwJyk7XG4gICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmF3VHgudW5zaWduZWROZXdQbGVkZ2VUeCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LmlkLCByYXdUeC51bnNpZ25lZE5ld1BsZWRnZVR4SGFzaCk7XG5cbiAgICBjb25zdCBleHBsYWluZWRUeCA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgIHNob3VsZC5lcXVhbChleHBsYWluZWRUeC50eXBlLCAnU3Rha2luZ1BsZWRnZScpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgcGxlZGdlIHRyYW5zYWN0aW9uIHRoYXQgdXBkYXRlcyBleGlzdGluZyBzdGFraW5nIHBvb2wnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcHJlYnVpbHRUeCA9IG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RhZGEnKSk7XG4gICAgcHJlYnVpbHRUeC5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHgudW5zaWduZWRVcGRhdGVQbGVkZ2VUeCk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nUGxlZGdlQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihwcmVidWlsdFR4KTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nUGxlZGdlKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0eERhdGEuaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG4gICAgdHhEYXRhLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB0eERhdGEuY2VydHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB0eERhdGEuY2VydHNbMF0udHlwZS5zaG91bGQuZXF1YWwoMyk7XG4gICAgc2hvdWxkLmV4aXN0KHR4RGF0YS5jZXJ0c1swXS5wb29sS2V5SGFzaCk7XG4gICAgdHhEYXRhLmNlcnRzWzBdLnBvb2xLZXlIYXNoIS5zaG91bGQuZXF1YWwoJzEwMzI0ZGMzNDE4NzczNWRlNDZmNjI2MGQ5NDYyMGNkY2M4MTlmN2VkMWY5M2UzZmM1OGQwNmEwJyk7XG4gICAgdHhEYXRhLndpdGhkcmF3YWxzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgdHhEYXRhLndpdG5lc3Nlcy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgIHNob3VsZC5leGlzdCh0eERhdGEucGxlZGdlRGV0YWlscyk7XG4gICAgc2hvdWxkLm5vdC5leGlzdCh0eERhdGEucGxlZGdlRGV0YWlscyEuc3Rha2VLZXlSZWdpc3RyYXRpb24pO1xuICAgIHNob3VsZC5ub3QuZXhpc3QodHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlS2V5RGVsZWdhdGlvbik7XG4gICAgc2hvdWxkLmV4aXN0KHR4RGF0YS5wbGVkZ2VEZXRhaWxzIS5zdGFrZVBvb2xSZWdpc3RyYXRpb24pO1xuICAgIHR4RGF0YS5wbGVkZ2VEZXRhaWxzIS5zdGFrZVBvb2xSZWdpc3RyYXRpb24hLnBsZWRnZS5zaG91bGQuZXF1YWwoJzEwMDAwMDAwMCcpO1xuICAgIHR4RGF0YS5wbGVkZ2VEZXRhaWxzIS5zdGFrZVBvb2xSZWdpc3RyYXRpb24hLmNvc3Quc2hvdWxkLmVxdWFsKCc1MDAwMDAwMDAnKTtcbiAgICB0eERhdGEucGxlZGdlRGV0YWlscyEuc3Rha2VQb29sUmVnaXN0cmF0aW9uIS5tYXJnaW5OdW1lcmF0b3Iuc2hvdWxkLmVxdWFsKCczJyk7XG4gICAgdHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlUG9vbFJlZ2lzdHJhdGlvbiEubWFyZ2luRGVub21pbmF0b3Iuc2hvdWxkLmVxdWFsKCcyMCcpO1xuICAgIHR4RGF0YS5wbGVkZ2VEZXRhaWxzIS5zdGFrZVBvb2xSZWdpc3RyYXRpb24hLnJld2FyZEFjY291bnQuc2hvdWxkLmVxdWFsKFxuICAgICAgdHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlUG9vbFJlZ2lzdHJhdGlvbiEucG9vbE93bmVyc1swXVxuICAgICk7XG5cbiAgICBjb25zdCBmZWUgPSB0eC5nZXRGZWU7XG4gICAgZmVlLnNob3VsZC5lcXVhbCgnMTAwMDAwMCcpO1xuICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHJhd1R4LnVuc2lnbmVkVXBkYXRlUGxlZGdlVHgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC5pZCwgcmF3VHgudW5zaWduZWRVcGRhdGVQbGVkZ2VUeEhhc2gpO1xuXG4gICAgY29uc3QgZXhwbGFpbmVkVHggPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICBzaG91bGQuZXF1YWwoZXhwbGFpbmVkVHgudHlwZSwgJ1N0YWtpbmdQbGVkZ2UnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBhZGQgbm9kZSBrZXkgd2l0bmVzcyB0byB1bnNpZ25lZCBwbGVkZ2UgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcHJlYnVpbHRUeCA9IG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RhZGEnKSk7XG4gICAgcHJlYnVpbHRUeC5mcm9tUmF3VHJhbnNhY3Rpb24ocmF3VHgudW5zaWduZWRVcGRhdGVQbGVkZ2VUeCk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nUGxlZGdlQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5pbml0QnVpbGRlcihwcmVidWlsdFR4KTtcbiAgICB0eEJ1aWxkZXIuYWRkTm9kZUtleVdpdG5lc3MocmF3VHgucGxlZGdlTm9kZUtleVB1YmtleSwgcmF3VHgucGxlZGdlTm9kZVdpdG5lc3NTaWduYXR1cmUpO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICB0eC5zaWduYXR1cmUubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBjb25zdCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0eERhdGEud2l0bmVzc2VzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgc2hvdWxkLmV4aXN0KHR4RGF0YS5wbGVkZ2VEZXRhaWxzKTtcbiAgICBzaG91bGQubm90LmV4aXN0KHR4RGF0YS5wbGVkZ2VEZXRhaWxzIS5zdGFrZUtleVJlZ2lzdHJhdGlvbik7XG4gICAgc2hvdWxkLm5vdC5leGlzdCh0eERhdGEucGxlZGdlRGV0YWlscyEuc3Rha2VLZXlEZWxlZ2F0aW9uKTtcbiAgICBzaG91bGQuZXhpc3QodHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlUG9vbFJlZ2lzdHJhdGlvbik7XG4gICAgdHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlUG9vbFJlZ2lzdHJhdGlvbiEucGxlZGdlLnNob3VsZC5lcXVhbCgnMTAwMDAwMDAwJyk7XG4gICAgdHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlUG9vbFJlZ2lzdHJhdGlvbiEuY29zdC5zaG91bGQuZXF1YWwoJzUwMDAwMDAwMCcpO1xuICAgIHR4RGF0YS5wbGVkZ2VEZXRhaWxzIS5zdGFrZVBvb2xSZWdpc3RyYXRpb24hLm1hcmdpbk51bWVyYXRvci5zaG91bGQuZXF1YWwoJzMnKTtcbiAgICB0eERhdGEucGxlZGdlRGV0YWlscyEuc3Rha2VQb29sUmVnaXN0cmF0aW9uIS5tYXJnaW5EZW5vbWluYXRvci5zaG91bGQuZXF1YWwoJzIwJyk7XG4gICAgdHhEYXRhLnBsZWRnZURldGFpbHMhLnN0YWtlUG9vbFJlZ2lzdHJhdGlvbiEucmV3YXJkQWNjb3VudC5zaG91bGQuZXF1YWwoXG4gICAgICB0eERhdGEucGxlZGdlRGV0YWlscyEuc3Rha2VQb29sUmVnaXN0cmF0aW9uIS5wb29sT3duZXJzWzBdXG4gICAgKTtcblxuICAgIGNvbnN0IHJlYnVpbHRUeCA9IG5ldyBUcmFuc2FjdGlvbihjb2lucy5nZXQoJ3RhZGEnKSk7XG4gICAgcmVidWlsdFR4LmZyb21SYXdUcmFuc2FjdGlvbih0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcbiAgICByZWJ1aWx0VHguc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgcmVidWlsdFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuICAgIHJlYnVpbHRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5ub3QuZXF1YWwocmF3VHgudW5zaWduZWRVcGRhdGVQbGVkZ2VUeCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW5pdCBmcm9tIHBhcnRpYWxseSBzaWduZWQgdHhuIGhleCBhbmQgcHJlc2VydmUgdGhlIHNpZ25hdHVyZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eG5CdWlsZGVyRmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGFkYScpKTtcbiAgICBjb25zdCB0eG5CdWlsZGVyID0gdHhuQnVpbGRlckZhY3RvcnkuZnJvbShyYXdUeC5wYXJ0aWFsbHlTaWduZWRQbGVkZ2VUeCk7XG4gICAgbGV0IHR4ID0gKGF3YWl0IHR4bkJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdQbGVkZ2UpO1xuICAgIHR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIGxldCB0eERhdGEgPSB0eC50b0pzb24oKTtcbiAgICB0eERhdGEud2l0bmVzc2VzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgdHhEYXRhLndpdG5lc3Nlc1swXS5wdWJsaWNLZXkuc2hvdWxkLmVxdWFsKHJhd1R4LnBsZWRnZU5vZGVLZXlQdWJrZXkpO1xuICAgIHR4RGF0YS53aXRuZXNzZXNbMF0uc2lnbmF0dXJlLnNob3VsZC5lcXVhbChyYXdUeC5wbGVkZ2VOb2RlV2l0bmVzc1NpZ25hdHVyZSk7XG5cbiAgICB0eG5CdWlsZGVyLmFkZFNpZ25hdHVyZShcbiAgICAgIHsgcHViOiByYXdUeC5wbGVkZ2VXYWxsZXRLZXlQdWJrZXkgfSxcbiAgICAgIEJ1ZmZlci5mcm9tKHJhd1R4LnBsZWRnZVdhbGxldFdpdG5lc3NTaWduYXR1cmUsICdoZXgnKVxuICAgICk7XG4gICAgdHggPSAoYXdhaXQgdHhuQnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1BsZWRnZSk7XG4gICAgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgdHhEYXRhLndpdG5lc3Nlcy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIHR4RGF0YS53aXRuZXNzZXNbMF0ucHVibGljS2V5LnNob3VsZC5lcXVhbChyYXdUeC5wbGVkZ2VOb2RlS2V5UHVia2V5KTtcbiAgICB0eERhdGEud2l0bmVzc2VzWzBdLnNpZ25hdHVyZS5zaG91bGQuZXF1YWwocmF3VHgucGxlZGdlTm9kZVdpdG5lc3NTaWduYXR1cmUpO1xuICAgIHR4RGF0YS53aXRuZXNzZXNbMV0ucHVibGljS2V5LnNob3VsZC5lcXVhbChyYXdUeC5wbGVkZ2VXYWxsZXRLZXlQdWJrZXkpO1xuICAgIHR4RGF0YS53aXRuZXNzZXNbMV0uc2lnbmF0dXJlLnNob3VsZC5lcXVhbChyYXdUeC5wbGVkZ2VXYWxsZXRXaXRuZXNzU2lnbmF0dXJlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBpbml0IGZyb20gcGFydGlhbGx5IHNpZ25lZCB0eG4gb2JqZWN0IGFuZCBwcmVzZXJ2ZSB0aGUgc2lnbmF0dXJlJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHByZWJ1aWx0VHggPSBuZXcgVHJhbnNhY3Rpb24oY29pbnMuZ2V0KCd0YWRhJykpO1xuICAgIHByZWJ1aWx0VHguZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1R4LnBhcnRpYWxseVNpZ25lZFBsZWRnZVR4KTtcbiAgICBwcmVidWlsdFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHJhd1R4LnBhcnRpYWxseVNpZ25lZFBsZWRnZVR4KTtcbiAgICBwcmVidWlsdFR4LnNpZ25hdHVyZS5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ1BsZWRnZUJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5pdEJ1aWxkZXIocHJlYnVpbHRUeCk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nUGxlZGdlKTtcbiAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5lcXVhbChyYXdUeC5wYXJ0aWFsbHlTaWduZWRQbGVkZ2VUeCk7XG4gICAgdHguc2lnbmF0dXJlLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgdHhEYXRhLndpdG5lc3Nlcy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHR4RGF0YS53aXRuZXNzZXNbMF0ucHVibGljS2V5LnNob3VsZC5lcXVhbChyYXdUeC5wbGVkZ2VOb2RlS2V5UHVia2V5KTtcbiAgICB0eERhdGEud2l0bmVzc2VzWzBdLnNpZ25hdHVyZS5zaG91bGQuZXF1YWwocmF3VHgucGxlZGdlTm9kZVdpdG5lc3NTaWduYXR1cmUpO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=stakingWithdrawBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakingWithdrawBuilder.d.ts","sourceRoot":"","sources":["../../../test/unit/stakingWithdrawBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const should_1 = __importDefault(require("should"));
40
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
41
+ const testData = __importStar(require("../resources"));
42
+ const src_1 = require("../../src");
43
+ const statics_1 = require("@bitgo-beta/statics");
44
+ describe('ADA Staking Withdraw Transaction Builder', async () => {
45
+ const factory = new src_1.TransactionBuilderFactory(statics_1.coins.get('tada'));
46
+ it('start and build an unsigned staking withdraw tx', async () => {
47
+ const keyPairStake = new src_1.KeyPair({ prv: testData.privateKeys.prvKey2 });
48
+ const txBuilder = factory.getStakingWithdrawBuilder();
49
+ txBuilder.input({
50
+ transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba21',
51
+ transaction_index: 1,
52
+ });
53
+ const totalInput = '4000000';
54
+ txBuilder.changeAddress('addr1q8rm9z7w4yx5gz652kn2q238efvms6t0qelur9nlglun8eu4tr5knj4fu4adelzqhxg8adu5xca4jra0gtllfrpcawyq9psz23', totalInput);
55
+ const reward = 1239239;
56
+ txBuilder.addWithdrawal(keyPairStake.getKeys().pub, reward.toString());
57
+ txBuilder.ttl(800000000);
58
+ const tx = (await txBuilder.build());
59
+ should_1.default.equal(tx.type, sdk_core_1.TransactionType.StakingWithdraw);
60
+ const txData = tx.toJson();
61
+ const fee = tx.getFee;
62
+ txData.certs.length.should.equal(0);
63
+ txData.withdrawals.length.should.equal(1);
64
+ txData.withdrawals[0].value.should.equal(reward.toString());
65
+ txData.outputs.length.should.equal(1);
66
+ txData.outputs[0].amount.should.equal((Number(totalInput) + reward - Number(fee)).toString());
67
+ fee.should.equal('167217');
68
+ tx.toBroadcastFormat().should.equal(testData.rawTx.unsignedStakingWithdrawTx);
69
+ should_1.default.equal(tx.id, testData.rawTx.unsignedStakingWithdrawTxHash);
70
+ });
71
+ it('build a staingDEactivate from rawTx', async () => {
72
+ const txBuilder = factory.from(testData.rawTx.unsignedStakingWithdrawTx);
73
+ const builtTx = (await txBuilder.build());
74
+ should_1.default.equal(builtTx.type, sdk_core_1.TransactionType.StakingWithdraw);
75
+ should_1.default.equal(builtTx.id, testData.rawTx.unsignedStakingWithdrawTxHash);
76
+ const txData = builtTx.toJson();
77
+ const fee = builtTx.getFee;
78
+ txData.certs.length.should.equal(0);
79
+ txData.outputs.length.should.equal(1);
80
+ const totalInput = '4000000';
81
+ const reward = 1239239;
82
+ txData.outputs[0].amount.should.equal((Number(totalInput) + reward - Number(fee)).toString());
83
+ fee.should.equal('167217');
84
+ txData.withdrawals.length.should.equal(1);
85
+ txData.withdrawals[0].value.should.equal(reward.toString());
86
+ });
87
+ // xit('should withdraw rewards from a stake address', async () => {
88
+ // const axiosConfig = {
89
+ // headers: {
90
+ // 'Content-Type': 'application/cbor',
91
+ // },
92
+ // timeout: 10000,
93
+ // };
94
+ // const keyPairPayment = new KeyPair({ prv: testData.stakingAccount.paymentKey });
95
+ // const keyPairStake = new KeyPair({ prv: testData.stakingAccount.stakeKey });
96
+ // const enterpriseAddress = keyPairPayment.getAddress(AddressFormat.testnet);
97
+ // const txBuilder = factory.getStakingWithdrawBuilder();
98
+ // const utxoData = await axios.get('https://testnet.koios.rest/api/v0/address_info?_address=' + enterpriseAddress);
99
+ // const senderBalance = utxoData.data[0].balance;
100
+ // const utxoSet = utxoData.data[0].utxo_set;
101
+ // for (const utxo of utxoSet) {
102
+ // txBuilder.input({ transaction_id: utxo.tx_hash, transaction_index: utxo.tx_index });
103
+ // }
104
+ // txBuilder.changeAddress(enterpriseAddress, senderBalance);
105
+ //
106
+ // const fullAddress = Utils.default.createBaseAddressWithStakeAndPaymentKey(
107
+ // keyPairStake,
108
+ // keyPairPayment,
109
+ // AddressFormat.testnet
110
+ // );
111
+ // const rewardAcctData = await axios.get('https://testnet.koios.rest/api/v0/account_info?_address=' + fullAddress);
112
+ // console.log(rewardAcctData);
113
+ // const stakeAddressBalance = rewardAcctData.data[0].rewards;
114
+ // console.log('Stake account balance: ' + stakeAddressBalance);
115
+ // txBuilder.addWithdrawal(keyPairStake.getKeys().pub, stakeAddressBalance);
116
+ //
117
+ // txBuilder.ttl(900000000);
118
+ // txBuilder.sign({ key: keyPairPayment.getKeys().prv });
119
+ // txBuilder.sign({ key: keyPairStake.getKeys().prv });
120
+ // const tx = await txBuilder.build();
121
+ // const serializedTx = tx.toBroadcastFormat();
122
+ // const bytes = Uint8Array.from(Buffer.from(serializedTx, 'hex'));
123
+ //
124
+ // try {
125
+ // const res = await axios.post('https://testnet.koios.rest/api/v0/submittx', bytes, axiosConfig);
126
+ // console.log(res.data);
127
+ // } catch (err) {
128
+ // console.log(err);
129
+ // }
130
+ // });
131
+ it('should submit a staking withdraw using signature interface', async () => {
132
+ const keyPairPayment = new src_1.KeyPair({ prv: testData.privateKeys.prvKey9 });
133
+ const keyPairStake = new src_1.KeyPair({ prv: testData.privateKeys.prvKey10 });
134
+ const senderAddress = src_1.Utils.default.createBaseAddressWithStakeAndPaymentKey(keyPairStake, keyPairPayment, sdk_core_1.AddressFormat.testnet);
135
+ const txBuilder = factory.getStakingWithdrawBuilder();
136
+ const senderBalance = '22122071';
137
+ const reward = '1232323';
138
+ txBuilder.changeAddress(senderAddress, senderBalance);
139
+ txBuilder.addWithdrawal(keyPairStake.getKeys().pub, reward);
140
+ txBuilder.input({
141
+ transaction_id: '0a4f80d83ba9ce1f83306a79252909241308d7eff317d04c9ea018966d687fe3',
142
+ transaction_index: 0,
143
+ });
144
+ txBuilder.ttl(900000000);
145
+ const unsignedTx = await txBuilder.build();
146
+ const signableHex = unsignedTx.signablePayload.toString('hex');
147
+ const serializedTx = unsignedTx.toBroadcastFormat();
148
+ txBuilder.sign({ key: keyPairPayment.getKeys().prv });
149
+ txBuilder.sign({ key: keyPairStake.getKeys().prv });
150
+ const signedTransaction = await txBuilder.build();
151
+ const serializedTransaction = signedTransaction.toBroadcastFormat();
152
+ const txBuilder2 = factory.from(serializedTx);
153
+ const tx = await txBuilder2.build();
154
+ tx.type.should.equal(sdk_core_1.TransactionType.StakingWithdraw);
155
+ const signableHex2 = tx.signablePayload.toString('hex');
156
+ signableHex.should.equal(signableHex2);
157
+ const signaturePayment = keyPairPayment.signMessage(signableHex2);
158
+ const signatureStake = keyPairStake.signMessage(signableHex2);
159
+ txBuilder2.addSignature({ pub: keyPairPayment.getKeys().pub }, Buffer.from(signaturePayment));
160
+ txBuilder2.addSignature({ pub: keyPairStake.getKeys().pub }, Buffer.from(signatureStake));
161
+ const signedTransaction2 = await txBuilder2.build();
162
+ signedTransaction.id.should.equal(tx.id);
163
+ const serializedTransaction2 = signedTransaction2.toBroadcastFormat();
164
+ serializedTransaction2.should.equal(serializedTransaction);
165
+ });
166
+ });
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1dpdGhkcmF3QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9zdGFraW5nV2l0aGRyYXdCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1EQUFzRTtBQUN0RSx1REFBeUM7QUFDekMsbUNBQXNFO0FBQ3RFLGlEQUE0QztBQUc1QyxRQUFRLENBQUMsMENBQTBDLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFakUsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQy9ELE1BQU0sWUFBWSxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUN0RCxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQ2QsY0FBYyxFQUFFLGtFQUFrRTtZQUNsRixpQkFBaUIsRUFBRSxDQUFDO1NBQ3JCLENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM3QixTQUFTLENBQUMsYUFBYSxDQUNyQix5R0FBeUcsRUFDekcsVUFBVSxDQUNYLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFDdkIsU0FBUyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBZ0IsQ0FBQztRQUNwRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDdEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFNUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzlFLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ25ELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQWdCLENBQUM7UUFDekQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSwwQkFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVELGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDOUYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUFDO0lBRUgsb0VBQW9FO0lBQ3BFLDBCQUEwQjtJQUMxQixpQkFBaUI7SUFDakIsNENBQTRDO0lBQzVDLFNBQVM7SUFDVCxzQkFBc0I7SUFDdEIsT0FBTztJQUNQLHFGQUFxRjtJQUNyRixpRkFBaUY7SUFDakYsZ0ZBQWdGO0lBQ2hGLDJEQUEyRDtJQUMzRCxzSEFBc0g7SUFDdEgsb0RBQW9EO0lBQ3BELCtDQUErQztJQUMvQyxrQ0FBa0M7SUFDbEMsMkZBQTJGO0lBQzNGLE1BQU07SUFDTiwrREFBK0Q7SUFDL0QsRUFBRTtJQUNGLCtFQUErRTtJQUMvRSxvQkFBb0I7SUFDcEIsc0JBQXNCO0lBQ3RCLDRCQUE0QjtJQUM1QixPQUFPO0lBQ1Asc0hBQXNIO0lBQ3RILGlDQUFpQztJQUNqQyxnRUFBZ0U7SUFDaEUsa0VBQWtFO0lBQ2xFLDhFQUE4RTtJQUM5RSxFQUFFO0lBQ0YsOEJBQThCO0lBQzlCLDJEQUEyRDtJQUMzRCx5REFBeUQ7SUFDekQsd0NBQXdDO0lBQ3hDLGlEQUFpRDtJQUNqRCxxRUFBcUU7SUFDckUsRUFBRTtJQUNGLFVBQVU7SUFDVixzR0FBc0c7SUFDdEcsNkJBQTZCO0lBQzdCLG9CQUFvQjtJQUNwQix3QkFBd0I7SUFDeEIsTUFBTTtJQUNOLE1BQU07SUFFTixFQUFFLENBQUMsNERBQTRELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDMUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sWUFBWSxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLGFBQWEsR0FBRyxXQUFLLENBQUMsT0FBTyxDQUFDLHVDQUF1QyxDQUN6RSxZQUFZLEVBQ1osY0FBYyxFQUNkLHdCQUFhLENBQUMsT0FBTyxDQUN0QixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDdEQsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUN6QixTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN0RCxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFNUQsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUNkLGNBQWMsRUFBRSxrRUFBa0U7WUFDbEYsaUJBQWlCLEVBQUUsQ0FBQztTQUNyQixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpCLE1BQU0sVUFBVSxHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9ELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3BELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEQsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNwRCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xELE1BQU0scUJBQXFCLEdBQUcsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUVwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLE1BQU0sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRSxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlELFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzlGLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUMxRixNQUFNLGtCQUFrQixHQUFHLE1BQU0sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BELGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QyxNQUFNLHNCQUFzQixHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEUsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBBZGRyZXNzRm9ybWF0LCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgS2V5UGFpciwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgVXRpbHMgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbic7XG5cbmRlc2NyaWJlKCdBREEgU3Rha2luZyBXaXRoZHJhdyBUcmFuc2FjdGlvbiBCdWlsZGVyJywgYXN5bmMgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YWRhJykpO1xuXG4gIGl0KCdzdGFydCBhbmQgYnVpbGQgYW4gdW5zaWduZWQgc3Rha2luZyB3aXRoZHJhdyB0eCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBrZXlQYWlyU3Rha2UgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEucHJpdmF0ZUtleXMucHJ2S2V5MiB9KTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFN0YWtpbmdXaXRoZHJhd0J1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuaW5wdXQoe1xuICAgICAgdHJhbnNhY3Rpb25faWQ6ICczNjc3ZTc1YzdiYTY5OWJmZGM2Y2Q1N2Q0MmYyNDZmODZmNjNhZWZkNzYwMjUwMDZhYzc4MzEzZmFkMmJiYTIxJyxcbiAgICAgIHRyYW5zYWN0aW9uX2luZGV4OiAxLFxuICAgIH0pO1xuICAgIGNvbnN0IHRvdGFsSW5wdXQgPSAnNDAwMDAwMCc7XG4gICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3MoXG4gICAgICAnYWRkcjFxOHJtOXo3dzR5eDVnejY1MmtuMnEyMzhlZnZtczZ0MHFlbHVyOW5sZ2x1bjhldTR0cjVrbmo0ZnU0YWRlbHpxaHhnOGFkdTV4Y2E0anJhMGd0bGxmcnBjYXd5cTlwc3oyMycsXG4gICAgICB0b3RhbElucHV0XG4gICAgKTtcbiAgICBjb25zdCByZXdhcmQgPSAxMjM5MjM5O1xuICAgIHR4QnVpbGRlci5hZGRXaXRoZHJhd2FsKGtleVBhaXJTdGFrZS5nZXRLZXlzKCkucHViLCByZXdhcmQudG9TdHJpbmcoKSk7XG4gICAgdHhCdWlsZGVyLnR0bCg4MDAwMDAwMDApO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdyk7XG4gICAgY29uc3QgdHhEYXRhID0gdHgudG9Kc29uKCk7XG4gICAgY29uc3QgZmVlID0gdHguZ2V0RmVlO1xuICAgIHR4RGF0YS5jZXJ0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgIHR4RGF0YS53aXRoZHJhd2Fscy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHR4RGF0YS53aXRoZHJhd2Fsc1swXS52YWx1ZS5zaG91bGQuZXF1YWwocmV3YXJkLnRvU3RyaW5nKCkpO1xuXG4gICAgdHhEYXRhLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICB0eERhdGEub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKChOdW1iZXIodG90YWxJbnB1dCkgKyByZXdhcmQgLSBOdW1iZXIoZmVlKSkudG9TdHJpbmcoKSk7XG4gICAgZmVlLnNob3VsZC5lcXVhbCgnMTY3MjE3Jyk7XG4gICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwodGVzdERhdGEucmF3VHgudW5zaWduZWRTdGFraW5nV2l0aGRyYXdUeCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LmlkLCB0ZXN0RGF0YS5yYXdUeC51bnNpZ25lZFN0YWtpbmdXaXRoZHJhd1R4SGFzaCk7XG4gIH0pO1xuXG4gIGl0KCdidWlsZCBhIHN0YWluZ0RFYWN0aXZhdGUgZnJvbSByYXdUeCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEucmF3VHgudW5zaWduZWRTdGFraW5nV2l0aGRyYXdUeCk7XG4gICAgY29uc3QgYnVpbHRUeCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdyk7XG4gICAgc2hvdWxkLmVxdWFsKGJ1aWx0VHguaWQsIHRlc3REYXRhLnJhd1R4LnVuc2lnbmVkU3Rha2luZ1dpdGhkcmF3VHhIYXNoKTtcbiAgICBjb25zdCB0eERhdGEgPSBidWlsdFR4LnRvSnNvbigpO1xuICAgIGNvbnN0IGZlZSA9IGJ1aWx0VHguZ2V0RmVlO1xuICAgIHR4RGF0YS5jZXJ0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuXG4gICAgdHhEYXRhLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBjb25zdCB0b3RhbElucHV0ID0gJzQwMDAwMDAnO1xuICAgIGNvbnN0IHJld2FyZCA9IDEyMzkyMzk7XG4gICAgdHhEYXRhLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgoTnVtYmVyKHRvdGFsSW5wdXQpICsgcmV3YXJkIC0gTnVtYmVyKGZlZSkpLnRvU3RyaW5nKCkpO1xuICAgIGZlZS5zaG91bGQuZXF1YWwoJzE2NzIxNycpO1xuICAgIHR4RGF0YS53aXRoZHJhd2Fscy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgIHR4RGF0YS53aXRoZHJhd2Fsc1swXS52YWx1ZS5zaG91bGQuZXF1YWwocmV3YXJkLnRvU3RyaW5nKCkpO1xuICB9KTtcblxuICAvLyB4aXQoJ3Nob3VsZCB3aXRoZHJhdyByZXdhcmRzIGZyb20gYSBzdGFrZSBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAvLyAgIGNvbnN0IGF4aW9zQ29uZmlnID0ge1xuICAvLyAgICAgaGVhZGVyczoge1xuICAvLyAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2Nib3InLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAvLyAgIH07XG4gIC8vICAgY29uc3Qga2V5UGFpclBheW1lbnQgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuc3Rha2luZ0FjY291bnQucGF5bWVudEtleSB9KTtcbiAgLy8gICBjb25zdCBrZXlQYWlyU3Rha2UgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuc3Rha2luZ0FjY291bnQuc3Rha2VLZXkgfSk7XG4gIC8vICAgY29uc3QgZW50ZXJwcmlzZUFkZHJlc3MgPSBrZXlQYWlyUGF5bWVudC5nZXRBZGRyZXNzKEFkZHJlc3NGb3JtYXQudGVzdG5ldCk7XG4gIC8vICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nV2l0aGRyYXdCdWlsZGVyKCk7XG4gIC8vICAgY29uc3QgdXR4b0RhdGEgPSBhd2FpdCBheGlvcy5nZXQoJ2h0dHBzOi8vdGVzdG5ldC5rb2lvcy5yZXN0L2FwaS92MC9hZGRyZXNzX2luZm8/X2FkZHJlc3M9JyArIGVudGVycHJpc2VBZGRyZXNzKTtcbiAgLy8gICBjb25zdCBzZW5kZXJCYWxhbmNlID0gdXR4b0RhdGEuZGF0YVswXS5iYWxhbmNlO1xuICAvLyAgIGNvbnN0IHV0eG9TZXQgPSB1dHhvRGF0YS5kYXRhWzBdLnV0eG9fc2V0O1xuICAvLyAgIGZvciAoY29uc3QgdXR4byBvZiB1dHhvU2V0KSB7XG4gIC8vICAgICB0eEJ1aWxkZXIuaW5wdXQoeyB0cmFuc2FjdGlvbl9pZDogdXR4by50eF9oYXNoLCB0cmFuc2FjdGlvbl9pbmRleDogdXR4by50eF9pbmRleCB9KTtcbiAgLy8gICB9XG4gIC8vICAgdHhCdWlsZGVyLmNoYW5nZUFkZHJlc3MoZW50ZXJwcmlzZUFkZHJlc3MsIHNlbmRlckJhbGFuY2UpO1xuICAvL1xuICAvLyAgIGNvbnN0IGZ1bGxBZGRyZXNzID0gVXRpbHMuZGVmYXVsdC5jcmVhdGVCYXNlQWRkcmVzc1dpdGhTdGFrZUFuZFBheW1lbnRLZXkoXG4gIC8vICAgICBrZXlQYWlyU3Rha2UsXG4gIC8vICAgICBrZXlQYWlyUGF5bWVudCxcbiAgLy8gICAgIEFkZHJlc3NGb3JtYXQudGVzdG5ldFxuICAvLyAgICk7XG4gIC8vICAgY29uc3QgcmV3YXJkQWNjdERhdGEgPSBhd2FpdCBheGlvcy5nZXQoJ2h0dHBzOi8vdGVzdG5ldC5rb2lvcy5yZXN0L2FwaS92MC9hY2NvdW50X2luZm8/X2FkZHJlc3M9JyArIGZ1bGxBZGRyZXNzKTtcbiAgLy8gICBjb25zb2xlLmxvZyhyZXdhcmRBY2N0RGF0YSk7XG4gIC8vICAgY29uc3Qgc3Rha2VBZGRyZXNzQmFsYW5jZSA9IHJld2FyZEFjY3REYXRhLmRhdGFbMF0ucmV3YXJkcztcbiAgLy8gICBjb25zb2xlLmxvZygnU3Rha2UgYWNjb3VudCBiYWxhbmNlOiAnICsgc3Rha2VBZGRyZXNzQmFsYW5jZSk7XG4gIC8vICAgdHhCdWlsZGVyLmFkZFdpdGhkcmF3YWwoa2V5UGFpclN0YWtlLmdldEtleXMoKS5wdWIsIHN0YWtlQWRkcmVzc0JhbGFuY2UpO1xuICAvL1xuICAvLyAgIHR4QnVpbGRlci50dGwoOTAwMDAwMDAwKTtcbiAgLy8gICB0eEJ1aWxkZXIuc2lnbih7IGtleToga2V5UGFpclBheW1lbnQuZ2V0S2V5cygpLnBydiB9KTtcbiAgLy8gICB0eEJ1aWxkZXIuc2lnbih7IGtleToga2V5UGFpclN0YWtlLmdldEtleXMoKS5wcnYgfSk7XG4gIC8vICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgLy8gICBjb25zdCBzZXJpYWxpemVkVHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAvLyAgIGNvbnN0IGJ5dGVzID0gVWludDhBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKHNlcmlhbGl6ZWRUeCwgJ2hleCcpKTtcbiAgLy9cbiAgLy8gICB0cnkge1xuICAvLyAgICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MucG9zdCgnaHR0cHM6Ly90ZXN0bmV0LmtvaW9zLnJlc3QvYXBpL3YwL3N1Ym1pdHR4JywgYnl0ZXMsIGF4aW9zQ29uZmlnKTtcbiAgLy8gICAgIGNvbnNvbGUubG9nKHJlcy5kYXRhKTtcbiAgLy8gICB9IGNhdGNoIChlcnIpIHtcbiAgLy8gICAgIGNvbnNvbGUubG9nKGVycik7XG4gIC8vICAgfVxuICAvLyB9KTtcblxuICBpdCgnc2hvdWxkIHN1Ym1pdCBhIHN0YWtpbmcgd2l0aGRyYXcgdXNpbmcgc2lnbmF0dXJlIGludGVyZmFjZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBrZXlQYWlyUGF5bWVudCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcml2YXRlS2V5cy5wcnZLZXk5IH0pO1xuICAgIGNvbnN0IGtleVBhaXJTdGFrZSA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcml2YXRlS2V5cy5wcnZLZXkxMCB9KTtcbiAgICBjb25zdCBzZW5kZXJBZGRyZXNzID0gVXRpbHMuZGVmYXVsdC5jcmVhdGVCYXNlQWRkcmVzc1dpdGhTdGFrZUFuZFBheW1lbnRLZXkoXG4gICAgICBrZXlQYWlyU3Rha2UsXG4gICAgICBrZXlQYWlyUGF5bWVudCxcbiAgICAgIEFkZHJlc3NGb3JtYXQudGVzdG5ldFxuICAgICk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nV2l0aGRyYXdCdWlsZGVyKCk7XG4gICAgY29uc3Qgc2VuZGVyQmFsYW5jZSA9ICcyMjEyMjA3MSc7XG4gICAgY29uc3QgcmV3YXJkID0gJzEyMzIzMjMnO1xuICAgIHR4QnVpbGRlci5jaGFuZ2VBZGRyZXNzKHNlbmRlckFkZHJlc3MsIHNlbmRlckJhbGFuY2UpO1xuICAgIHR4QnVpbGRlci5hZGRXaXRoZHJhd2FsKGtleVBhaXJTdGFrZS5nZXRLZXlzKCkucHViLCByZXdhcmQpO1xuXG4gICAgdHhCdWlsZGVyLmlucHV0KHtcbiAgICAgIHRyYW5zYWN0aW9uX2lkOiAnMGE0ZjgwZDgzYmE5Y2UxZjgzMzA2YTc5MjUyOTA5MjQxMzA4ZDdlZmYzMTdkMDRjOWVhMDE4OTY2ZDY4N2ZlMycsXG4gICAgICB0cmFuc2FjdGlvbl9pbmRleDogMCxcbiAgICB9KTtcblxuICAgIHR4QnVpbGRlci50dGwoOTAwMDAwMDAwKTtcblxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBzaWduYWJsZUhleCA9IHVuc2lnbmVkVHguc2lnbmFibGVQYXlsb2FkLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVHggPSB1bnNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGtleVBhaXJQYXltZW50LmdldEtleXMoKS5wcnYgfSk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGtleVBhaXJTdGFrZS5nZXRLZXlzKCkucHJ2IH0pO1xuICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFRyYW5zYWN0aW9uID0gc2lnbmVkVHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgIGNvbnN0IHR4QnVpbGRlcjIgPSBmYWN0b3J5LmZyb20oc2VyaWFsaXplZFR4KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcbiAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU3Rha2luZ1dpdGhkcmF3KTtcbiAgICBjb25zdCBzaWduYWJsZUhleDIgPSB0eC5zaWduYWJsZVBheWxvYWQudG9TdHJpbmcoJ2hleCcpO1xuICAgIHNpZ25hYmxlSGV4LnNob3VsZC5lcXVhbChzaWduYWJsZUhleDIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZVBheW1lbnQgPSBrZXlQYWlyUGF5bWVudC5zaWduTWVzc2FnZShzaWduYWJsZUhleDIpO1xuICAgIGNvbnN0IHNpZ25hdHVyZVN0YWtlID0ga2V5UGFpclN0YWtlLnNpZ25NZXNzYWdlKHNpZ25hYmxlSGV4Mik7XG4gICAgdHhCdWlsZGVyMi5hZGRTaWduYXR1cmUoeyBwdWI6IGtleVBhaXJQYXltZW50LmdldEtleXMoKS5wdWIgfSwgQnVmZmVyLmZyb20oc2lnbmF0dXJlUGF5bWVudCkpO1xuICAgIHR4QnVpbGRlcjIuYWRkU2lnbmF0dXJlKHsgcHViOiBrZXlQYWlyU3Rha2UuZ2V0S2V5cygpLnB1YiB9LCBCdWZmZXIuZnJvbShzaWduYXR1cmVTdGFrZSkpO1xuICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uMiA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcbiAgICBzaWduZWRUcmFuc2FjdGlvbi5pZC5zaG91bGQuZXF1YWwodHguaWQpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRUcmFuc2FjdGlvbjIgPSBzaWduZWRUcmFuc2FjdGlvbjIudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBzZXJpYWxpemVkVHJhbnNhY3Rpb24yLnNob3VsZC5lcXVhbChzZXJpYWxpemVkVHJhbnNhY3Rpb24pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tokenWithdrawal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenWithdrawal.d.ts","sourceRoot":"","sources":["../../../test/unit/tokenWithdrawal.ts"],"names":[],"mappings":""}