@bitgo-beta/sdk-coin-algo 1.3.3-alpha.43 → 1.3.3-alpha.430

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 (83) hide show
  1. package/dist/src/algo.d.ts +117 -16
  2. package/dist/src/algo.d.ts.map +1 -1
  3. package/dist/src/algo.js +430 -46
  4. package/dist/src/algoToken.d.ts +1 -1
  5. package/dist/src/algoToken.d.ts.map +1 -1
  6. package/dist/src/algoToken.js +3 -3
  7. package/dist/src/index.js +23 -9
  8. package/dist/src/lib/assetTransferBuilder.d.ts +1 -1
  9. package/dist/src/lib/assetTransferBuilder.js +2 -2
  10. package/dist/src/lib/ifaces.d.ts +0 -1
  11. package/dist/src/lib/ifaces.d.ts.map +1 -1
  12. package/dist/src/lib/index.js +23 -9
  13. package/dist/src/lib/keyPair.js +24 -10
  14. package/dist/src/lib/keyRegistrationBuilder.js +1 -1
  15. package/dist/src/lib/seedEncoding.js +23 -9
  16. package/dist/src/lib/transaction.js +3 -4
  17. package/dist/src/lib/transactionBuilder.d.ts +6 -0
  18. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  19. package/dist/src/lib/transactionBuilder.js +45 -29
  20. package/dist/src/lib/transactionBuilderFactory.js +1 -1
  21. package/dist/src/lib/transferBuilder.js +1 -1
  22. package/dist/src/lib/txnSchema.js +1 -1
  23. package/dist/src/lib/utils.d.ts +6 -1
  24. package/dist/src/lib/utils.d.ts.map +1 -1
  25. package/dist/src/lib/utils.js +35 -11
  26. package/dist/src/seedValidator.js +23 -9
  27. package/dist/test/fixtures/algo.d.ts +101 -0
  28. package/dist/test/fixtures/algo.d.ts.map +1 -0
  29. package/dist/test/fixtures/algo.js +239 -0
  30. package/dist/test/fixtures/resources.d.ts +121 -0
  31. package/dist/test/fixtures/resources.d.ts.map +1 -0
  32. package/dist/test/fixtures/resources.js +131 -0
  33. package/dist/test/integration/algo.integration.d.ts +2 -0
  34. package/dist/test/integration/algo.integration.d.ts.map +1 -0
  35. package/dist/test/integration/algo.integration.js +71 -0
  36. package/dist/test/unit/algo.d.ts +2 -0
  37. package/dist/test/unit/algo.d.ts.map +1 -0
  38. package/dist/test/unit/algo.js +1223 -0
  39. package/dist/test/unit/algoIsWalletAddress.d.ts +2 -0
  40. package/dist/test/unit/algoIsWalletAddress.d.ts.map +1 -0
  41. package/dist/test/unit/algoIsWalletAddress.js +118 -0
  42. package/dist/test/unit/algoToken.d.ts +2 -0
  43. package/dist/test/unit/algoToken.d.ts.map +1 -0
  44. package/dist/test/unit/algoToken.js +79 -0
  45. package/dist/test/unit/fixtures/algoBackupKey.d.ts +4 -0
  46. package/dist/test/unit/fixtures/algoBackupKey.d.ts.map +1 -0
  47. package/dist/test/unit/fixtures/algoBackupKey.js +10 -0
  48. package/dist/test/unit/lib/keyPair.d.ts +2 -0
  49. package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
  50. package/dist/test/unit/lib/keyPair.js +110 -0
  51. package/dist/test/unit/lib/seedEncoding.d.ts +2 -0
  52. package/dist/test/unit/lib/seedEncoding.d.ts.map +1 -0
  53. package/dist/test/unit/lib/seedEncoding.js +59 -0
  54. package/dist/test/unit/lib/transaction.d.ts +2 -0
  55. package/dist/test/unit/lib/transaction.d.ts.map +1 -0
  56. package/dist/test/unit/lib/transaction.js +157 -0
  57. package/dist/test/unit/lib/transactionBuilder/assetTransferBuilder.d.ts +2 -0
  58. package/dist/test/unit/lib/transactionBuilder/assetTransferBuilder.d.ts.map +1 -0
  59. package/dist/test/unit/lib/transactionBuilder/assetTransferBuilder.js +300 -0
  60. package/dist/test/unit/lib/transactionBuilder/base.d.ts +2 -0
  61. package/dist/test/unit/lib/transactionBuilder/base.d.ts.map +1 -0
  62. package/dist/test/unit/lib/transactionBuilder/base.js +310 -0
  63. package/dist/test/unit/lib/transactionBuilder/keyRegistrationBuilder.d.ts +2 -0
  64. package/dist/test/unit/lib/transactionBuilder/keyRegistrationBuilder.d.ts.map +1 -0
  65. package/dist/test/unit/lib/transactionBuilder/keyRegistrationBuilder.js +473 -0
  66. package/dist/test/unit/lib/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  67. package/dist/test/unit/lib/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  68. package/dist/test/unit/lib/transactionBuilder/transactionBuilderFactory.js +138 -0
  69. package/dist/test/unit/lib/transactionBuilder/transferBuilder.d.ts +2 -0
  70. package/dist/test/unit/lib/transactionBuilder/transferBuilder.d.ts.map +1 -0
  71. package/dist/test/unit/lib/transactionBuilder/transferBuilder.js +290 -0
  72. package/dist/test/unit/lib/utils.d.ts +2 -0
  73. package/dist/test/unit/lib/utils.d.ts.map +1 -0
  74. package/dist/test/unit/lib/utils.js +307 -0
  75. package/dist/test/unit/verifyTransaction.d.ts +2 -0
  76. package/dist/test/unit/verifyTransaction.d.ts.map +1 -0
  77. package/dist/test/unit/verifyTransaction.js +703 -0
  78. package/dist/tsconfig.tsbuildinfo +1 -0
  79. package/package.json +12 -10
  80. package/.eslintignore +0 -5
  81. package/.mocharc.yml +0 -8
  82. package/CHANGELOG.md +0 -160
  83. package/types/index.d.ts +0 -60
@@ -0,0 +1,157 @@
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 assert_1 = __importDefault(require("assert"));
40
+ const should_1 = __importDefault(require("should"));
41
+ const statics_1 = require("@bitgo-beta/statics");
42
+ const AlgoResources = __importStar(require("../../fixtures/resources"));
43
+ const transaction_1 = require("../../../src/lib/transaction");
44
+ const lib_1 = require("../../../src/lib");
45
+ describe('Algo Transaction', () => {
46
+ let tx;
47
+ let txnBuilder;
48
+ const address = 'RIJVLDYWASZZNGOSQNOK7HN6JNFLMMZ3FFBBFG2NNROM5CE744DAJSPZJ4';
49
+ beforeEach(() => {
50
+ const config = statics_1.coins.get('algo');
51
+ const tokenConfig = statics_1.coins.get('talgo:USON-16026728');
52
+ const firstRound = 167;
53
+ const lastRound = 1167;
54
+ const fee = 1000;
55
+ const tokenId = 1;
56
+ const amount = '0';
57
+ tx = new transaction_1.Transaction(config);
58
+ txnBuilder = new lib_1.TransactionBuilderFactory(tokenConfig).getAssetTransferBuilder();
59
+ txnBuilder
60
+ .fee({ fee: fee.toString() })
61
+ .isFlatFee(true)
62
+ .firstRound(firstRound)
63
+ .lastRound(lastRound)
64
+ .testnet()
65
+ .sender({ address: address })
66
+ .tokenId(tokenId)
67
+ .amount(BigInt(amount))
68
+ .to({ address: address });
69
+ });
70
+ describe('empty transaction', () => {
71
+ it('should throw empty transaction', () => {
72
+ assert_1.default.throws(() => tx.toJson(), /Empty transaction/);
73
+ assert_1.default.throws(() => tx.toBroadcastFormat(), /Empty transaction/);
74
+ });
75
+ it('should not sign', () => {
76
+ assert_1.default.throws(() => tx.sign([new lib_1.KeyPair({ prv: AlgoResources.accounts.default.secretKey.toString('hex') })]), /Empty transaction/);
77
+ tx.setNumberOfRequiredSigners(2);
78
+ assert_1.default.throws(() => tx.sign([new lib_1.KeyPair({ prv: AlgoResources.accounts.default.secretKey.toString('hex') })]), /Empty transaction/);
79
+ });
80
+ });
81
+ describe('sign transaction', () => {
82
+ it('cannot sign - no signer required', () => {
83
+ should_1.default.deepEqual(tx.canSign({ key: 'some' }), false);
84
+ });
85
+ it('cannot sign - wrong account secret', () => {
86
+ tx.setNumberOfRequiredSigners(1);
87
+ tx.sender(AlgoResources.accounts.account1.address);
88
+ should_1.default.deepEqual(tx.canSign({ key: AlgoResources.accounts.account2.secretKey.toString('hex') }), false);
89
+ });
90
+ it('can sign', () => {
91
+ tx.setNumberOfRequiredSigners(1);
92
+ tx.sender(AlgoResources.accounts.account2.address);
93
+ should_1.default.deepEqual(tx.canSign({ key: AlgoResources.accounts.account2.secretKey.toString('hex') }), true);
94
+ });
95
+ });
96
+ describe('Transaction type', () => {
97
+ it('field txType and tokenName are added on enableToken transaction', async () => {
98
+ const tx = await txnBuilder.build();
99
+ const txHex = tx.toBroadcastFormat();
100
+ const txInfo = tx.toJson();
101
+ should_1.default.exists(txHex);
102
+ txInfo.to.should.equal(address);
103
+ txInfo.from.should.equal(address);
104
+ txInfo.amount.should.equal('0');
105
+ txInfo.firstRound.should.equal(167);
106
+ txInfo.tokenId.should.equal(1);
107
+ txInfo.fee.should.equal(1000);
108
+ txInfo.lastRound.should.equal(1167);
109
+ txInfo.genesisID.should.equal('testnet-v1.0');
110
+ txInfo.genesisHash.should.equal('SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=');
111
+ txInfo.should.have.property('txType');
112
+ txInfo.txType.should.equal('enableToken');
113
+ txInfo.should.have.property('tokenName');
114
+ txInfo.tokenName.should.equal('USON');
115
+ });
116
+ it('field txType and tokenName are added on disableToken transaction', async () => {
117
+ const closeRemainderTo = 'SP745JJR4KPRQEXJZHVIEN736LYTL2T2DFMG3OIIFJBV66K73PHNMDCZVM';
118
+ const tx = await txnBuilder.closeRemainderTo({ address: closeRemainderTo }).build();
119
+ const txHex = tx.toBroadcastFormat();
120
+ const txInfo = tx.toJson();
121
+ should_1.default.exists(txHex);
122
+ txInfo.to.should.equal(address);
123
+ txInfo.from.should.equal(address);
124
+ txInfo.amount.should.equal('0');
125
+ txInfo.firstRound.should.equal(167);
126
+ txInfo.tokenId.should.equal(1);
127
+ txInfo.fee.should.equal(1000);
128
+ txInfo.closeRemainderTo.should.equal(closeRemainderTo);
129
+ txInfo.lastRound.should.equal(1167);
130
+ txInfo.genesisID.should.equal('testnet-v1.0');
131
+ txInfo.genesisHash.should.equal('SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=');
132
+ txInfo.should.have.property('txType');
133
+ txInfo.txType.should.equal('disableToken');
134
+ txInfo.should.have.property('txType');
135
+ txInfo.tokenName.should.equal('USON');
136
+ });
137
+ it('field txType and tokenName are added on transferToken transaction', async () => {
138
+ const tx = await txnBuilder.amount(BigInt('1000')).build();
139
+ const txHex = tx.toBroadcastFormat();
140
+ const txInfo = tx.toJson();
141
+ should_1.default.exists(txHex);
142
+ txInfo.to.should.equal(address);
143
+ txInfo.from.should.equal(address);
144
+ txInfo.amount.should.equal('1000');
145
+ txInfo.firstRound.should.equal(167);
146
+ txInfo.tokenId.should.equal(1);
147
+ txInfo.fee.should.equal(1000);
148
+ txInfo.lastRound.should.equal(1167);
149
+ txInfo.genesisID.should.equal('testnet-v1.0');
150
+ txInfo.genesisHash.should.equal('SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=');
151
+ txInfo.txType.should.equal('transferToken');
152
+ txInfo.should.have.property('txType');
153
+ txInfo.tokenName.should.equal('USON');
154
+ });
155
+ });
156
+ });
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUM1QixpREFBNEM7QUFDNUMsd0VBQTBEO0FBQzFELDhEQUEyRDtBQUMzRCwwQ0FBNEY7QUFFNUYsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxJQUFJLEVBQWUsQ0FBQztJQUNwQixJQUFJLFVBQWdDLENBQUM7SUFDckMsTUFBTSxPQUFPLEdBQUcsNERBQTRELENBQUM7SUFFN0UsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE1BQU0sTUFBTSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNsQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFFbkIsRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixVQUFVLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2xGLFVBQVU7YUFDUCxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7YUFDNUIsU0FBUyxDQUFDLElBQUksQ0FBQzthQUNmLFVBQVUsQ0FBQyxVQUFVLENBQUM7YUFDdEIsU0FBUyxD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QUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgKiBhcyBBbGdvUmVzb3VyY2VzIGZyb20gJy4uLy4uL2ZpeHR1cmVzL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2V5UGFpciwgQXNzZXRUcmFuc2ZlckJ1aWxkZXIsIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcblxuZGVzY3JpYmUoJ0FsZ28gVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gIGxldCB0eDogVHJhbnNhY3Rpb247XG4gIGxldCB0eG5CdWlsZGVyOiBBc3NldFRyYW5zZmVyQnVpbGRlcjtcbiAgY29uc3QgYWRkcmVzcyA9ICdSSUpWTERZV0FTWlpOR09TUU5PSzdITjZKTkZMTU1aM0ZGQkJGRzJOTlJPTTVDRTc0NERBSlNQWko0JztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBjb2lucy5nZXQoJ2FsZ28nKTtcbiAgICBjb25zdCB0b2tlbkNvbmZpZyA9IGNvaW5zLmdldCgndGFsZ286VVNPTi0xNjAyNjcyOCcpO1xuICAgIGNvbnN0IGZpcnN0Um91bmQgPSAxNjc7XG4gICAgY29uc3QgbGFzdFJvdW5kID0gMTE2NztcbiAgICBjb25zdCBmZWUgPSAxMDAwO1xuICAgIGNvbnN0IHRva2VuSWQgPSAxO1xuICAgIGNvbnN0IGFtb3VudCA9ICcwJztcblxuICAgIHR4ID0gbmV3IFRyYW5zYWN0aW9uKGNvbmZpZyk7XG4gICAgdHhuQnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KHRva2VuQ29uZmlnKS5nZXRBc3NldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4bkJ1aWxkZXJcbiAgICAgIC5mZWUoeyBmZWU6IGZlZS50b1N0cmluZygpIH0pXG4gICAgICAuaXNGbGF0RmVlKHRydWUpXG4gICAgICAuZmlyc3RSb3VuZChmaXJzdFJvdW5kKVxuICAgICAgLmxhc3RSb3VuZChsYXN0Um91bmQpXG4gICAgICAudGVzdG5ldCgpXG4gICAgICAuc2VuZGVyKHsgYWRkcmVzczogYWRkcmVzcyB9KVxuICAgICAgLnRva2VuSWQodG9rZW5JZClcbiAgICAgIC5hbW91bnQoQmlnSW50KGFtb3VudCkpXG4gICAgICAudG8oeyBhZGRyZXNzOiBhZGRyZXNzIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZW1wdHkgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlbXB0eSB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHgudG9Kc29uKCksIC9FbXB0eSB0cmFuc2FjdGlvbi8pO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLCAvRW1wdHkgdHJhbnNhY3Rpb24vKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHNpZ24nLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB0eC5zaWduKFtuZXcgS2V5UGFpcih7IHBydjogQWxnb1Jlc291cmNlcy5hY2NvdW50cy5kZWZhdWx0LnNlY3JldEtleS50b1N0cmluZygnaGV4JykgfSldKSxcbiAgICAgICAgL0VtcHR5IHRyYW5zYWN0aW9uL1xuICAgICAgKTtcbiAgICAgIHR4LnNldE51bWJlck9mUmVxdWlyZWRTaWduZXJzKDIpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gdHguc2lnbihbbmV3IEtleVBhaXIoeyBwcnY6IEFsZ29SZXNvdXJjZXMuYWNjb3VudHMuZGVmYXVsdC5zZWNyZXRLZXkudG9TdHJpbmcoJ2hleCcpIH0pXSksXG4gICAgICAgIC9FbXB0eSB0cmFuc2FjdGlvbi9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdjYW5ub3Qgc2lnbiAtIG5vIHNpZ25lciByZXF1aXJlZCcsICgpID0+IHtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHguY2FuU2lnbih7IGtleTogJ3NvbWUnIH0pLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2Fubm90IHNpZ24gLSB3cm9uZyBhY2NvdW50IHNlY3JldCcsICgpID0+IHtcbiAgICAgIHR4LnNldE51bWJlck9mUmVxdWlyZWRTaWduZXJzKDEpO1xuICAgICAgdHguc2VuZGVyKEFsZ29SZXNvdXJjZXMuYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LmNhblNpZ24oeyBrZXk6IEFsZ29SZXNvdXJjZXMuYWNjb3VudHMuYWNjb3VudDIuc2VjcmV0S2V5LnRvU3RyaW5nKCdoZXgnKSB9KSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NhbiBzaWduJywgKCkgPT4ge1xuICAgICAgdHguc2V0TnVtYmVyT2ZSZXF1aXJlZFNpZ25lcnMoMSk7XG4gICAgICB0eC5zZW5kZXIoQWxnb1Jlc291cmNlcy5hY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHguY2FuU2lnbih7IGtleTogQWxnb1Jlc291cmNlcy5hY2NvdW50cy5hY2NvdW50Mi5zZWNyZXRLZXkudG9TdHJpbmcoJ2hleCcpIH0pLCB0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIHR5cGUnLCAoKSA9PiB7XG4gICAgaXQoJ2ZpZWxkIHR4VHlwZSBhbmQgdG9rZW5OYW1lIGFyZSBhZGRlZCBvbiBlbmFibGVUb2tlbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhuQnVpbGRlci5idWlsZCgpO1xuXG4gICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCB0eEluZm8gPSB0eC50b0pzb24oKTtcblxuICAgICAgc2hvdWxkLmV4aXN0cyh0eEhleCk7XG5cbiAgICAgIHR4SW5mby50by5zaG91bGQuZXF1YWwoYWRkcmVzcyk7XG4gICAgICB0eEluZm8uZnJvbS5zaG91bGQuZXF1YWwoYWRkcmVzcyk7XG4gICAgICB0eEluZm8uYW1vdW50LnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgdHhJbmZvLmZpcnN0Um91bmQuc2hvdWxkLmVxdWFsKDE2Nyk7XG4gICAgICB0eEluZm8udG9rZW5JZC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eEluZm8uZmVlLnNob3VsZC5lcXVhbCgxMDAwKTtcbiAgICAgIHR4SW5mby5sYXN0Um91bmQuc2hvdWxkLmVxdWFsKDExNjcpO1xuICAgICAgdHhJbmZvLmdlbmVzaXNJRC5zaG91bGQuZXF1YWwoJ3Rlc3RuZXQtdjEuMCcpO1xuICAgICAgdHhJbmZvLmdlbmVzaXNIYXNoLnNob3VsZC5lcXVhbCgnU0dPMUdLU3p5RTdJRVBJdFR4Q0J5dzl4OEZtbnJDRGV4aTkvY09VSk9pST0nKTtcbiAgICAgIHR4SW5mby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndHhUeXBlJyk7XG4gICAgICB0eEluZm8udHhUeXBlLnNob3VsZC5lcXVhbCgnZW5hYmxlVG9rZW4nKTtcbiAgICAgIHR4SW5mby5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndG9rZW5OYW1lJyk7XG4gICAgICB0eEluZm8udG9rZW5OYW1lLnNob3VsZC5lcXVhbCgnVVNPTicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZpZWxkIHR4VHlwZSBhbmQgdG9rZW5OYW1lIGFyZSBhZGRlZCBvbiBkaXNhYmxlVG9rZW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjbG9zZVJlbWFpbmRlclRvID0gJ1NQNzQ1SkpSNEtQUlFFWEpaSFZJRU43MzZMWVRMMlQyREZNRzNPSUlGSkJWNjZLNzNQSE5NRENaVk0nO1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4bkJ1aWxkZXIuY2xvc2VSZW1haW5kZXJUbyh7IGFkZHJlc3M6IGNsb3NlUmVtYWluZGVyVG8gfSkuYnVpbGQoKTtcblxuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgdHhJbmZvID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHNob3VsZC5leGlzdHModHhIZXgpO1xuXG4gICAgICB0eEluZm8udG8uc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgICAgdHhJbmZvLmZyb20uc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgICAgdHhJbmZvLmFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIHR4SW5mby5maXJzdFJvdW5kLnNob3VsZC5lcXVhbCgxNjcpO1xuICAgICAgdHhJbmZvLnRva2VuSWQuc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHhJbmZvLmZlZS5zaG91bGQuZXF1YWwoMTAwMCk7XG4gICAgICB0eEluZm8uY2xvc2VSZW1haW5kZXJUby5zaG91bGQuZXF1YWwoY2xvc2VSZW1haW5kZXJUbyk7XG4gICAgICB0eEluZm8ubGFzdFJvdW5kLnNob3VsZC5lcXVhbCgxMTY3KTtcbiAgICAgIHR4SW5mby5nZW5lc2lzSUQuc2hvdWxkLmVxdWFsKCd0ZXN0bmV0LXYxLjAnKTtcbiAgICAgIHR4SW5mby5nZW5lc2lzSGFzaC5zaG91bGQuZXF1YWwoJ1NHTzFHS1N6eUU3SUVQSXRUeENCeXc5eDhGbW5yQ0RleGk5L2NPVUpPaUk9Jyk7XG4gICAgICB0eEluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4VHlwZScpO1xuICAgICAgdHhJbmZvLnR4VHlwZS5zaG91bGQuZXF1YWwoJ2Rpc2FibGVUb2tlbicpO1xuICAgICAgdHhJbmZvLnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eFR5cGUnKTtcbiAgICAgIHR4SW5mby50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKCdVU09OJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmllbGQgdHhUeXBlIGFuZCB0b2tlbk5hbWUgYXJlIGFkZGVkIG9uIHRyYW5zZmVyVG9rZW4gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4bkJ1aWxkZXIuYW1vdW50KEJpZ0ludCgnMTAwMCcpKS5idWlsZCgpO1xuXG4gICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCB0eEluZm8gPSB0eC50b0pzb24oKTtcblxuICAgICAgc2hvdWxkLmV4aXN0cyh0eEhleCk7XG5cbiAgICAgIHR4SW5mby50by5zaG91bGQuZXF1YWwoYWRkcmVzcyk7XG4gICAgICB0eEluZm8uZnJvbS5zaG91bGQuZXF1YWwoYWRkcmVzcyk7XG4gICAgICB0eEluZm8uYW1vdW50LnNob3VsZC5lcXVhbCgnMTAwMCcpO1xuICAgICAgdHhJbmZvLmZpcnN0Um91bmQuc2hvdWxkLmVxdWFsKDE2Nyk7XG4gICAgICB0eEluZm8udG9rZW5JZC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eEluZm8uZmVlLnNob3VsZC5lcXVhbCgxMDAwKTtcbiAgICAgIHR4SW5mby5sYXN0Um91bmQuc2hvdWxkLmVxdWFsKDExNjcpO1xuICAgICAgdHhJbmZvLmdlbmVzaXNJRC5zaG91bGQuZXF1YWwoJ3Rlc3RuZXQtdjEuMCcpO1xuICAgICAgdHhJbmZvLmdlbmVzaXNIYXNoLnNob3VsZC5lcXVhbCgnU0dPMUdLU3p5RTdJRVBJdFR4Q0J5dzl4OEZtbnJDRGV4aTkvY09VSk9pST0nKTtcbiAgICAgIHR4SW5mby50eFR5cGUuc2hvdWxkLmVxdWFsKCd0cmFuc2ZlclRva2VuJyk7XG4gICAgICB0eEluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4VHlwZScpO1xuICAgICAgdHhJbmZvLnRva2VuTmFtZS5zaG91bGQuZXF1YWwoJ1VTT04nKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=assetTransferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetTransferBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/lib/transactionBuilder/assetTransferBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,300 @@
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 statics_1 = require("@bitgo-beta/statics");
40
+ const assert_1 = __importDefault(require("assert"));
41
+ const should_1 = __importDefault(require("should"));
42
+ const mocha_1 = require("mocha");
43
+ const lib_1 = require("../../../../src/lib");
44
+ const AlgoResources = __importStar(require("../../../fixtures/resources"));
45
+ describe('Algo Asset Transfer Transaction Builder', () => {
46
+ let txnBuilder;
47
+ const { accounts: { account1 }, rawTx, } = AlgoResources;
48
+ beforeEach(() => {
49
+ const config = statics_1.coins.get('algo');
50
+ txnBuilder = new lib_1.TransactionBuilderFactory(config).getAssetTransferBuilder();
51
+ });
52
+ describe('setter validation', () => {
53
+ it('should validate asset id is not lte 0', () => {
54
+ assert_1.default.throws(() => txnBuilder.tokenId(-1));
55
+ assert_1.default.throws(() => txnBuilder.tokenId(0));
56
+ should_1.default.doesNotThrow(() => txnBuilder.tokenId(1));
57
+ });
58
+ });
59
+ describe('build asset transfer transaction', () => {
60
+ it('should build a normal asset transfer transaction', async () => {
61
+ const sender = AlgoResources.accounts.account1;
62
+ const receiver = AlgoResources.accounts.account2;
63
+ const amount = 1234;
64
+ const firstRound = 1;
65
+ const lastRound = 10;
66
+ const fee = 1000;
67
+ const tokenId = 1;
68
+ const { networks: { testnet }, } = AlgoResources;
69
+ const { genesisHash, genesisID } = testnet;
70
+ const tx = await txnBuilder
71
+ .fee({ fee: fee.toString() })
72
+ .isFlatFee(true)
73
+ .firstRound(firstRound)
74
+ .lastRound(lastRound)
75
+ .testnet()
76
+ .sender({ address: sender.address })
77
+ .tokenId(tokenId)
78
+ .amount(amount)
79
+ .to({ address: receiver.address })
80
+ .build();
81
+ const txJson = tx.toJson();
82
+ should_1.default.deepEqual(txJson.from, sender.address);
83
+ should_1.default.deepEqual(txJson.to, receiver.address);
84
+ should_1.default.deepEqual(txJson.fee, fee);
85
+ should_1.default.deepEqual(txJson.firstRound, firstRound);
86
+ should_1.default.deepEqual(txJson.lastRound, lastRound);
87
+ should_1.default.deepEqual(txJson.tokenId, tokenId);
88
+ should_1.default.deepEqual(txJson.amount, amount.toString());
89
+ should_1.default.deepEqual(txJson.genesisID, genesisID.toString());
90
+ should_1.default.deepEqual(txJson.genesisHash.toString('base64'), genesisHash);
91
+ });
92
+ it('should build a valid disable token transaction', async function () {
93
+ const firstRound = 167;
94
+ const lastRound = 1167;
95
+ const fee = 1000;
96
+ const tokenId = 1;
97
+ const amount = '0';
98
+ const note = new Uint8Array(Buffer.from('note', 'utf-8'));
99
+ const address = 'RIJVLDYWASZZNGOSQNOK7HN6JNFLMMZ3FFBBFG2NNROM5CE744DAJSPZJ4';
100
+ const closeRemainderTo = 'SP745JJR4KPRQEXJZHVIEN736LYTL2T2DFMG3OIIFJBV66K73PHNMDCZVM';
101
+ const tx = await txnBuilder
102
+ .fee({ fee: fee.toString() })
103
+ .isFlatFee(true)
104
+ .firstRound(firstRound)
105
+ .lastRound(lastRound)
106
+ .testnet()
107
+ .closeRemainderTo({ address: closeRemainderTo })
108
+ .sender({ address: address })
109
+ .tokenId(tokenId)
110
+ .amount(BigInt(amount))
111
+ .to({ address: address })
112
+ .note(note)
113
+ .build();
114
+ const txHex = tx.toBroadcastFormat();
115
+ const txInfo = tx.toJson();
116
+ should_1.default.exists(txHex);
117
+ txInfo.to.should.equal(address);
118
+ txInfo.from.should.equal(address);
119
+ txInfo.closeRemainderTo.should.equal(closeRemainderTo);
120
+ txInfo.amount.should.equal('0');
121
+ txInfo.firstRound.should.equal(167);
122
+ txInfo.tokenId.should.equal(1);
123
+ txInfo.fee.should.equal(1000);
124
+ txInfo.note.should.equal(note);
125
+ txInfo.lastRound.should.equal(1167);
126
+ txInfo.genesisID.should.equal('testnet-v1.0');
127
+ txInfo.genesisHash.should.equal('SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=');
128
+ });
129
+ it('should not build a token transaction with an invalid sender address', async function () {
130
+ const wrongAddress = 'RIJVLDYWASZZNGOSQNOK7HN6JNFLMMZ3FFBBFG2NNROM5CE744DAJSPZJ';
131
+ const tx = await txnBuilder.testnet();
132
+ assert_1.default.throws(() => tx.sender({ address: wrongAddress }), new RegExp("The address '" + wrongAddress + "' is not a well-formed algorand address"));
133
+ });
134
+ it('should not build a token transaction with an invalid closeRemainderTo address', async function () {
135
+ const wrongAddress = 'RIJVLDYWASZZNGOSQNOK7HN6JNFLMMZ3FFBBFG2NNROM5CE744DAJSPZJ';
136
+ const tx = await txnBuilder.testnet();
137
+ assert_1.default.throws(() => tx.closeRemainderTo({ address: wrongAddress }), new RegExp("The address '" + wrongAddress + "' is not a well-formed algorand address"));
138
+ });
139
+ it('should not build a token transaction with an invalid to address', async function () {
140
+ const wrongAddress = 'RIJVLDYWASZZNGOSQNOK7HN6JNFLMMZ3FFBBFG2NNROM5CE744DAJSPZJ';
141
+ const tx = await txnBuilder.testnet();
142
+ assert_1.default.throws(() => tx.to({ address: wrongAddress }), new RegExp("The address '" + wrongAddress + "' is not a well-formed algorand address"));
143
+ });
144
+ it('should build a valid enable token transaction', async function () {
145
+ const firstRound = 167;
146
+ const lastRound = 1167;
147
+ const fee = 1000;
148
+ const tokenId = 1;
149
+ const amount = '0';
150
+ const address = 'RIJVLDYWASZZNGOSQNOK7HN6JNFLMMZ3FFBBFG2NNROM5CE744DAJSPZJ4';
151
+ const tx = await txnBuilder
152
+ .fee({ fee: fee.toString() })
153
+ .isFlatFee(true)
154
+ .firstRound(firstRound)
155
+ .lastRound(lastRound)
156
+ .testnet()
157
+ .sender({ address: address })
158
+ .tokenId(tokenId)
159
+ .amount(BigInt(amount))
160
+ .to({ address: address })
161
+ .build();
162
+ const txHex = tx.toBroadcastFormat();
163
+ const txInfo = tx.toJson();
164
+ should_1.default.exists(txHex);
165
+ txInfo.to.should.equal(address);
166
+ txInfo.from.should.equal(address);
167
+ txInfo.amount.should.equal('0');
168
+ txInfo.firstRound.should.equal(167);
169
+ txInfo.tokenId.should.equal(1);
170
+ txInfo.fee.should.equal(1000);
171
+ txInfo.lastRound.should.equal(1167);
172
+ txInfo.genesisID.should.equal('testnet-v1.0');
173
+ txInfo.genesisHash.should.equal('SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=');
174
+ });
175
+ it('should build a valid enable token transaction and re-calcualte minimum fee', async function () {
176
+ const firstRound = 167;
177
+ const lastRound = 1167;
178
+ const fee = 1000;
179
+ const tokenId = 1;
180
+ const amount = '0';
181
+ const address = 'RIJVLDYWASZZNGOSQNOK7HN6JNFLMMZ3FFBBFG2NNROM5CE744DAJSPZJ4';
182
+ const tx = await txnBuilder
183
+ .fee({ fee: fee.toString() })
184
+ .isFlatFee(true)
185
+ .firstRound(firstRound)
186
+ .lastRound(lastRound)
187
+ .testnet()
188
+ .sender({ address: address })
189
+ .tokenId(tokenId)
190
+ .amount(BigInt(amount))
191
+ .to({ address: address })
192
+ .build();
193
+ const txHex = tx.toBroadcastFormat();
194
+ const txInfo = tx.toJson();
195
+ should_1.default.exists(txHex);
196
+ txInfo.to.should.equal(address);
197
+ txInfo.from.should.equal(address);
198
+ txInfo.amount.should.equal('0');
199
+ txInfo.firstRound.should.equal(167);
200
+ txInfo.tokenId.should.equal(1);
201
+ txInfo.fee.should.equal(1000);
202
+ txInfo.lastRound.should.equal(1167);
203
+ txInfo.genesisID.should.equal('testnet-v1.0');
204
+ txInfo.genesisHash.should.equal('SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=');
205
+ });
206
+ it('should build a valid disable token transaction and re-calcualte minimum fee', async function () {
207
+ const firstRound = 167;
208
+ const lastRound = 1167;
209
+ const fee = 1000;
210
+ const tokenId = 1;
211
+ const closeRemainderTo = 'SP745JJR4KPRQEXJZHVIEN736LYTL2T2DFMG3OIIFJBV66K73PHNMDCZVM';
212
+ const amount = '0';
213
+ const address = 'RIJVLDYWASZZNGOSQNOK7HN6JNFLMMZ3FFBBFG2NNROM5CE744DAJSPZJ4';
214
+ const tx = await txnBuilder
215
+ .fee({ fee: fee.toString() })
216
+ .isFlatFee(true)
217
+ .firstRound(firstRound)
218
+ .lastRound(lastRound)
219
+ .testnet()
220
+ .closeRemainderTo({ address: closeRemainderTo })
221
+ .sender({ address: address })
222
+ .tokenId(tokenId)
223
+ .amount(BigInt(amount))
224
+ .to({ address: address })
225
+ .build();
226
+ const txHex = tx.toBroadcastFormat();
227
+ const txInfo = tx.toJson();
228
+ should_1.default.exists(txHex);
229
+ txInfo.to.should.equal(address);
230
+ txInfo.from.should.equal(address);
231
+ txInfo.amount.should.equal('0');
232
+ txInfo.firstRound.should.equal(167);
233
+ txInfo.tokenId.should.equal(1);
234
+ txInfo.fee.should.equal(1000);
235
+ txInfo.closeRemainderTo.should.equal(closeRemainderTo);
236
+ txInfo.lastRound.should.equal(1167);
237
+ txInfo.genesisID.should.equal('testnet-v1.0');
238
+ txInfo.genesisHash.should.equal('SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=');
239
+ });
240
+ it('should decode an unsigned asset transfer transaction', async () => {
241
+ txnBuilder.from(rawTx.assetTransfer.unsigned);
242
+ const tx = await txnBuilder.build();
243
+ const txJson = tx.toJson();
244
+ const sender = AlgoResources.accounts.account1;
245
+ const receiver = AlgoResources.accounts.account2;
246
+ should_1.default.deepEqual(Buffer.from(tx.toBroadcastFormat()).toString('hex'), AlgoResources.rawTx.assetTransfer.unsigned);
247
+ should_1.default.deepEqual(txJson.from, sender.address);
248
+ should_1.default.deepEqual(txJson.to, receiver.address);
249
+ should_1.default.deepEqual(txJson.amount, '1000');
250
+ should_1.default.deepEqual(txJson.firstRound, 1);
251
+ should_1.default.deepEqual(txJson.lastRound, 10);
252
+ should_1.default.deepEqual(txJson.tokenId, 1);
253
+ });
254
+ it('should decode a signed asset transfer transaction', async () => {
255
+ txnBuilder.from(rawTx.assetTransfer.signed);
256
+ txnBuilder.numberOfSigners(1).sign({ key: account1.prvKey });
257
+ const tx = await txnBuilder.build();
258
+ const txJson = tx.toJson();
259
+ const sender = AlgoResources.accounts.account1;
260
+ const receiver = AlgoResources.accounts.account2;
261
+ should_1.default.deepEqual(Buffer.from(tx.toBroadcastFormat()).toString('hex'), AlgoResources.rawTx.assetTransfer.signed);
262
+ should_1.default.deepEqual(txJson.from, sender.address);
263
+ should_1.default.deepEqual(txJson.to, receiver.address);
264
+ should_1.default.deepEqual(txJson.amount, '10000000000000000000');
265
+ should_1.default.deepEqual(txJson.firstRound, 1);
266
+ should_1.default.deepEqual(txJson.lastRound, 10);
267
+ should_1.default.deepEqual(txJson.tokenId, 1);
268
+ });
269
+ it('should fail to decode other types of transactions', () => {
270
+ assert_1.default.throws(() => txnBuilder.from(rawTx.keyReg.unsigned), /Invalid Transaction Type: keyreg. Expected axfer/);
271
+ assert_1.default.throws(() => txnBuilder.from(rawTx.keyReg.signed), /Invalid Transaction Type: keyreg. Expected axfer/);
272
+ assert_1.default.throws(() => txnBuilder.from(rawTx.transfer.unsigned), /Invalid Transaction Type: pay. Expected axfer/);
273
+ assert_1.default.throws(() => txnBuilder.from(rawTx.transfer.signed), /Invalid Transaction Type: pay. Expected axfer/);
274
+ });
275
+ });
276
+ describe('allowlist asset txn', () => {
277
+ (0, mocha_1.test)('allowlist parameters are set correctly', async () => {
278
+ const tokenId = 123;
279
+ const sender = account1.address;
280
+ const { networks: { testnet }, } = AlgoResources;
281
+ const { genesisHash, genesisID } = testnet;
282
+ txnBuilder
283
+ .allowListAsset(tokenId, { address: sender })
284
+ .firstRound(1)
285
+ .lastRound(10)
286
+ .testnet()
287
+ .numberOfRequiredSigners(1);
288
+ txnBuilder.sign({ key: account1.prvKey });
289
+ const tx = await txnBuilder.build();
290
+ const txJson = tx.toJson();
291
+ should_1.default.equal(txJson.from, account1.address);
292
+ should_1.default.equal(txJson.to, account1.address);
293
+ should_1.default.equal(txJson.tokenId, tokenId);
294
+ should_1.default.equal(txJson.fee, 1000);
295
+ should_1.default.deepEqual(txJson.genesisID, genesisID.toString());
296
+ should_1.default.deepEqual(txJson.genesisHash.toString('base64'), genesisHash);
297
+ });
298
+ });
299
+ });
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRUcmFuc2ZlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3RyYW5zYWN0aW9uQnVpbGRlci9hc3NldFRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUE0QztBQUM1QyxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLGlDQUE2QjtBQUM3Qiw2Q0FBc0Y7QUFFdEYsMkVBQTZEO0FBRTdELFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7SUFDdkQsSUFBSSxVQUFnQyxDQUFDO0lBRXJDLE1BQU0sRUFDSixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFDdEIsS0FBSyxHQUNOLEdBQUcsYUFBYSxDQUFDO0lBRWxCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxNQUFNLE1BQU0sR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLFVBQVUsR0FBRyxJQUFJLCtCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFD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QUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7aUJBQzVDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQ2IsU0FBUyxDQUFDLEVBQUUsQ0FBQztpQkFDYixPQUFPLEVBQUU7aUJBQ1QsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFOUIsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUUxQyxNQUFNLEVBQUUsR0FBRyxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFM0IsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9CLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDekQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IHRlc3QgfSBmcm9tICdtb2NoYSc7XG5pbXBvcnQgeyBBc3NldFRyYW5zZmVyQnVpbGRlciwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9saWInO1xuXG5pbXBvcnQgKiBhcyBBbGdvUmVzb3VyY2VzIGZyb20gJy4uLy4uLy4uL2ZpeHR1cmVzL3Jlc291cmNlcyc7XG5cbmRlc2NyaWJlKCdBbGdvIEFzc2V0IFRyYW5zZmVyIFRyYW5zYWN0aW9uIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGxldCB0eG5CdWlsZGVyOiBBc3NldFRyYW5zZmVyQnVpbGRlcjtcblxuICBjb25zdCB7XG4gICAgYWNjb3VudHM6IHsgYWNjb3VudDEgfSxcbiAgICByYXdUeCxcbiAgfSA9IEFsZ29SZXNvdXJjZXM7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gY29pbnMuZ2V0KCdhbGdvJyk7XG4gICAgdHhuQnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvbmZpZykuZ2V0QXNzZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NldHRlciB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYXNzZXQgaWQgaXMgbm90IGx0ZSAwJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB0eG5CdWlsZGVyLnRva2VuSWQoLTEpKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhuQnVpbGRlci50b2tlbklkKDApKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdHhuQnVpbGRlci50b2tlbklkKDEpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1aWxkIGFzc2V0IHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBub3JtYWwgYXNzZXQgdHJhbnNmZXIgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZW5kZXIgPSBBbGdvUmVzb3VyY2VzLmFjY291bnRzLmFjY291bnQxO1xuICAgICAgY29uc3QgcmVjZWl2ZXIgPSBBbGdvUmVzb3VyY2VzLmFjY291bnRzLmFjY291bnQyO1xuICAgICAgY29uc3QgYW1vdW50ID0gMTIzNDtcbiAgICAgIGNvbnN0IGZpcnN0Um91bmQgPSAxO1xuICAgICAgY29uc3QgbGFzdFJvdW5kID0gMTA7XG4gICAgICBjb25zdCBmZWUgPSAxMDAwO1xuICAgICAgY29uc3QgdG9rZW5JZCA9IDE7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG5ldHdvcmtzOiB7IHRlc3RuZXQgfSxcbiAgICAgIH0gPSBBbGdvUmVzb3VyY2VzO1xuICAgICAgY29uc3QgeyBnZW5lc2lzSGFzaCwgZ2VuZXNpc0lEIH0gPSB0ZXN0bmV0O1xuXG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4bkJ1aWxkZXJcbiAgICAgICAgLmZlZSh7IGZlZTogZmVlLnRvU3RyaW5nKCkgfSlcbiAgICAgICAgLmlzRmxhdEZlZSh0cnVlKVxuICAgICAgICAuZmlyc3RSb3VuZChmaXJzdFJvdW5kKVxuICAgICAgICAubGFzdFJvdW5kKGxhc3RSb3VuZClcbiAgICAgICAgLnRlc3RuZXQoKVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLnRva2VuSWQodG9rZW5JZClcbiAgICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHJlY2VpdmVyLmFkZHJlc3MgfSlcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZnJvbSwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udG8sIHJlY2VpdmVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmVlLCBmZWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmlyc3RSb3VuZCwgZmlyc3RSb3VuZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5sYXN0Um91bmQsIGxhc3RSb3VuZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50b2tlbklkLCB0b2tlbklkKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFtb3VudCwgYW1vdW50LnRvU3RyaW5nKCkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0lELCBnZW5lc2lzSUQudG9TdHJpbmcoKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaC50b1N0cmluZygnYmFzZTY0JyksIGdlbmVzaXNIYXNoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSB2YWxpZCBkaXNhYmxlIHRva2VuIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZmlyc3RSb3VuZCA9IDE2NztcbiAgICAgIGNvbnN0IGxhc3RSb3VuZCA9IDExNjc7XG4gICAgICBjb25zdCBmZWUgPSAxMDAwO1xuICAgICAgY29uc3QgdG9rZW5JZCA9IDE7XG4gICAgICBjb25zdCBhbW91bnQgPSAnMCc7XG4gICAgICBjb25zdCBub3RlID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oJ25vdGUnLCAndXRmLTgnKSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0gJ1JJSlZMRFlXQVNaWk5HT1NRTk9LN0hONkpORkxNTVozRkZCQkZHMk5OUk9NNUNFNzQ0REFKU1BaSjQnO1xuICAgICAgY29uc3QgY2xvc2VSZW1haW5kZXJUbyA9ICdTUDc0NUpKUjRLUFJRRVhKWkhWSUVONzM2TFlUTDJUMkRGTUczT0lJRkpCVjY2SzczUEhOTURDWlZNJztcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eG5CdWlsZGVyXG4gICAgICAgIC5mZWUoeyBmZWU6IGZlZS50b1N0cmluZygpIH0pXG4gICAgICAgIC5pc0ZsYXRGZWUodHJ1ZSlcbiAgICAgICAgLmZpcnN0Um91bmQoZmlyc3RSb3VuZClcbiAgICAgICAgLmxhc3RSb3VuZChsYXN0Um91bmQpXG4gICAgICAgIC50ZXN0bmV0KClcbiAgICAgICAgLmNsb3NlUmVtYWluZGVyVG8oeyBhZGRyZXNzOiBjbG9zZVJlbWFpbmRlclRvIH0pXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBhZGRyZXNzIH0pXG4gICAgICAgIC50b2tlbklkKHRva2VuSWQpXG4gICAgICAgIC5hbW91bnQoQmlnSW50KGFtb3VudCkpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IGFkZHJlc3MgfSlcbiAgICAgICAgLm5vdGUobm90ZSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IHR4SW5mbyA9IHR4LnRvSnNvbigpO1xuXG4gICAgICBzaG91bGQuZXhpc3RzKHR4SGV4KTtcblxuICAgICAgdHhJbmZvLnRvLnNob3VsZC5lcXVhbChhZGRyZXNzKTtcbiAgICAgIHR4SW5mby5mcm9tLnNob3VsZC5lcXVhbChhZGRyZXNzKTtcbiAgICAgIHR4SW5mby5jbG9zZVJlbWFpbmRlclRvLnNob3VsZC5lcXVhbChjbG9zZVJlbWFpbmRlclRvKTtcbiAgICAgIHR4SW5mby5hbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICB0eEluZm8uZmlyc3RSb3VuZC5zaG91bGQuZXF1YWwoMTY3KTtcbiAgICAgIHR4SW5mby50b2tlbklkLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4SW5mby5mZWUuc2hvdWxkLmVxdWFsKDEwMDApO1xuICAgICAgdHhJbmZvLm5vdGUuc2hvdWxkLmVxdWFsKG5vdGUpO1xuICAgICAgdHhJbmZvLmxhc3RSb3VuZC5zaG91bGQuZXF1YWwoMTE2Nyk7XG4gICAgICB0eEluZm8uZ2VuZXNpc0lELnNob3VsZC5lcXVhbCgndGVzdG5ldC12MS4wJyk7XG4gICAgICB0eEluZm8uZ2VuZXNpc0hhc2guc2hvdWxkLmVxdWFsKCdTR08xR0tTenlFN0lFUEl0VHhDQnl3OXg4Rm1uckNEZXhpOS9jT1VKT2lJPScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgYnVpbGQgYSB0b2tlbiB0cmFuc2FjdGlvbiB3aXRoIGFuIGludmFsaWQgc2VuZGVyIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3cm9uZ0FkZHJlc3MgPSAnUklKVkxEWVdBU1paTkdPU1FOT0s3SE42Sk5GTE1NWjNGRkJCRkcyTk5ST001Q0U3NDREQUpTUFpKJztcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhuQnVpbGRlci50ZXN0bmV0KCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB0eC5zZW5kZXIoeyBhZGRyZXNzOiB3cm9uZ0FkZHJlc3MgfSksXG4gICAgICAgIG5ldyBSZWdFeHAoXCJUaGUgYWRkcmVzcyAnXCIgKyB3cm9uZ0FkZHJlc3MgKyBcIicgaXMgbm90IGEgd2VsbC1mb3JtZWQgYWxnb3JhbmQgYWRkcmVzc1wiKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGJ1aWxkIGEgdG9rZW4gdHJhbnNhY3Rpb24gd2l0aCBhbiBpbnZhbGlkIGNsb3NlUmVtYWluZGVyVG8gYWRkcmVzcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdyb25nQWRkcmVzcyA9ICdSSUpWTERZV0FTWlpOR09TUU5PSzdITjZKTkZMTU1aM0ZGQkJGRzJOTlJPTTVDRTc0NERBSlNQWkonO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eG5CdWlsZGVyLnRlc3RuZXQoKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHR4LmNsb3NlUmVtYWluZGVyVG8oeyBhZGRyZXNzOiB3cm9uZ0FkZHJlc3MgfSksXG4gICAgICAgIG5ldyBSZWdFeHAoXCJUaGUgYWRkcmVzcyAnXCIgKyB3cm9uZ0FkZHJlc3MgKyBcIicgaXMgbm90IGEgd2VsbC1mb3JtZWQgYWxnb3JhbmQgYWRkcmVzc1wiKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGJ1aWxkIGEgdG9rZW4gdHJhbnNhY3Rpb24gd2l0aCBhbiBpbnZhbGlkIHRvIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3cm9uZ0FkZHJlc3MgPSAnUklKVkxEWVdBU1paTkdPU1FOT0s3SE42Sk5GTE1NWjNGRkJCRkcyTk5ST001Q0U3NDREQUpTUFpKJztcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhuQnVpbGRlci50ZXN0bmV0KCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB0eC50byh7IGFkZHJlc3M6IHdyb25nQWRkcmVzcyB9KSxcbiAgICAgICAgbmV3IFJlZ0V4cChcIlRoZSBhZGRyZXNzICdcIiArIHdyb25nQWRkcmVzcyArIFwiJyBpcyBub3QgYSB3ZWxsLWZvcm1lZCBhbGdvcmFuZCBhZGRyZXNzXCIpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHZhbGlkIGVuYWJsZSB0b2tlbiB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZpcnN0Um91bmQgPSAxNjc7XG4gICAgICBjb25zdCBsYXN0Um91bmQgPSAxMTY3O1xuICAgICAgY29uc3QgZmVlID0gMTAwMDtcbiAgICAgIGNvbnN0IHRva2VuSWQgPSAxO1xuICAgICAgY29uc3QgYW1vdW50ID0gJzAnO1xuICAgICAgY29uc3QgYWRkcmVzcyA9ICdSSUpWTERZV0FTWlpOR09TUU5PSzdITjZKTkZMTU1aM0ZGQkJGRzJOTlJPTTVDRTc0NERBSlNQWko0JztcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eG5CdWlsZGVyXG4gICAgICAgIC5mZWUoeyBmZWU6IGZlZS50b1N0cmluZygpIH0pXG4gICAgICAgIC5pc0ZsYXRGZWUodHJ1ZSlcbiAgICAgICAgLmZpcnN0Um91bmQoZmlyc3RSb3VuZClcbiAgICAgICAgLmxhc3RSb3VuZChsYXN0Um91bmQpXG4gICAgICAgIC50ZXN0bmV0KClcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IGFkZHJlc3MgfSlcbiAgICAgICAgLnRva2VuSWQodG9rZW5JZClcbiAgICAgICAgLmFtb3VudChCaWdJbnQoYW1vdW50KSlcbiAgICAgICAgLnRvKHsgYWRkcmVzczogYWRkcmVzcyB9KVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgICAgY29uc3QgdHhIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgdHhJbmZvID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHNob3VsZC5leGlzdHModHhIZXgpO1xuXG4gICAgICB0eEluZm8udG8uc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgICAgdHhJbmZvLmZyb20uc2hvdWxkLmVxdWFsKGFkZHJlc3MpO1xuICAgICAgdHhJbmZvLmFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIHR4SW5mby5maXJzdFJvdW5kLnNob3VsZC5lcXVhbCgxNjcpO1xuICAgICAgdHhJbmZvLnRva2VuSWQuc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgdHhJbmZvLmZlZS5zaG91bGQuZXF1YWwoMTAwMCk7XG4gICAgICB0eEluZm8ubGFzdFJvdW5kLnNob3VsZC5lcXVhbCgxMTY3KTtcbiAgICAgIHR4SW5mby5nZW5lc2lzSUQuc2hvdWxkLmVxdWFsKCd0ZXN0bmV0LXYxLjAnKTtcbiAgICAgIHR4SW5mby5nZW5lc2lzSGFzaC5zaG91bGQuZXF1YWwoJ1NHTzFHS1N6eUU3SUVQSXRUeENCeXc5eDhGbW5yQ0RleGk5L2NPVUpPaUk9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgdmFsaWQgZW5hYmxlIHRva2VuIHRyYW5zYWN0aW9uIGFuZCByZS1jYWxjdWFsdGUgbWluaW11bSBmZWUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmaXJzdFJvdW5kID0gMTY3O1xuICAgICAgY29uc3QgbGFzdFJvdW5kID0gMTE2NztcbiAgICAgIGNvbnN0IGZlZSA9IDEwMDA7XG4gICAgICBjb25zdCB0b2tlbklkID0gMTtcbiAgICAgIGNvbnN0IGFtb3VudCA9ICcwJztcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnUklKVkxEWVdBU1paTkdPU1FOT0s3SE42Sk5GTE1NWjNGRkJCRkcyTk5ST001Q0U3NDREQUpTUFpKNCc7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhuQnVpbGRlclxuICAgICAgICAuZmVlKHsgZmVlOiBmZWUudG9TdHJpbmcoKSB9KVxuICAgICAgICAuaXNGbGF0RmVlKHRydWUpXG4gICAgICAgIC5maXJzdFJvdW5kKGZpcnN0Um91bmQpXG4gICAgICAgIC5sYXN0Um91bmQobGFzdFJvdW5kKVxuICAgICAgICAudGVzdG5ldCgpXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBhZGRyZXNzIH0pXG4gICAgICAgIC50b2tlbklkKHRva2VuSWQpXG4gICAgICAgIC5hbW91bnQoQmlnSW50KGFtb3VudCkpXG4gICAgICAgIC50byh7IGFkZHJlc3M6IGFkZHJlc3MgfSlcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IHR4SW5mbyA9IHR4LnRvSnNvbigpO1xuXG4gICAgICBzaG91bGQuZXhpc3RzKHR4SGV4KTtcblxuICAgICAgdHhJbmZvLnRvLnNob3VsZC5lcXVhbChhZGRyZXNzKTtcbiAgICAgIHR4SW5mby5mcm9tLnNob3VsZC5lcXVhbChhZGRyZXNzKTtcbiAgICAgIHR4SW5mby5hbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICB0eEluZm8uZmlyc3RSb3VuZC5zaG91bGQuZXF1YWwoMTY3KTtcbiAgICAgIHR4SW5mby50b2tlbklkLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIHR4SW5mby5mZWUuc2hvdWxkLmVxdWFsKDEwMDApO1xuICAgICAgdHhJbmZvLmxhc3RSb3VuZC5zaG91bGQuZXF1YWwoMTE2Nyk7XG4gICAgICB0eEluZm8uZ2VuZXNpc0lELnNob3VsZC5lcXVhbCgndGVzdG5ldC12MS4wJyk7XG4gICAgICB0eEluZm8uZ2VuZXNpc0hhc2guc2hvdWxkLmVxdWFsKCdTR08xR0tTenlFN0lFUEl0VHhDQnl3OXg4Rm1uckNEZXhpOS9jT1VKT2lJPScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHZhbGlkIGRpc2FibGUgdG9rZW4gdHJhbnNhY3Rpb24gYW5kIHJlLWNhbGN1YWx0ZSBtaW5pbXVtIGZlZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGZpcnN0Um91bmQgPSAxNjc7XG4gICAgICBjb25zdCBsYXN0Um91bmQgPSAxMTY3O1xuICAgICAgY29uc3QgZmVlID0gMTAwMDtcbiAgICAgIGNvbnN0IHRva2VuSWQgPSAxO1xuICAgICAgY29uc3QgY2xvc2VSZW1haW5kZXJUbyA9ICdTUDc0NUpKUjRLUFJRRVhKWkhWSUVONzM2TFlUTDJUMkRGTUczT0lJRkpCVjY2SzczUEhOTURDWlZNJztcbiAgICAgIGNvbnN0IGFtb3VudCA9ICcwJztcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSAnUklKVkxEWVdBU1paTkdPU1FOT0s3SE42Sk5GTE1NWjNGRkJCRkcyTk5ST001Q0U3NDREQUpTUFpKNCc7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhuQnVpbGRlclxuICAgICAgICAuZmVlKHsgZmVlOiBmZWUudG9TdHJpbmcoKSB9KVxuICAgICAgICAuaXNGbGF0RmVlKHRydWUpXG4gICAgICAgIC5maXJzdFJvdW5kKGZpcnN0Um91bmQpXG4gICAgICAgIC5sYXN0Um91bmQobGFzdFJvdW5kKVxuICAgICAgICAudGVzdG5ldCgpXG4gICAgICAgIC5jbG9zZVJlbWFpbmRlclRvKHsgYWRkcmVzczogY2xvc2VSZW1haW5kZXJUbyB9KVxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogYWRkcmVzcyB9KVxuICAgICAgICAudG9rZW5JZCh0b2tlbklkKVxuICAgICAgICAuYW1vdW50KEJpZ0ludChhbW91bnQpKVxuICAgICAgICAudG8oeyBhZGRyZXNzOiBhZGRyZXNzIH0pXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgICBjb25zdCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCB0eEluZm8gPSB0eC50b0pzb24oKTtcblxuICAgICAgc2hvdWxkLmV4aXN0cyh0eEhleCk7XG5cbiAgICAgIHR4SW5mby50by5zaG91bGQuZXF1YWwoYWRkcmVzcyk7XG4gICAgICB0eEluZm8uZnJvbS5zaG91bGQuZXF1YWwoYWRkcmVzcyk7XG4gICAgICB0eEluZm8uYW1vdW50LnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgdHhJbmZvLmZpcnN0Um91bmQuc2hvdWxkLmVxdWFsKDE2Nyk7XG4gICAgICB0eEluZm8udG9rZW5JZC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB0eEluZm8uZmVlLnNob3VsZC5lcXVhbCgxMDAwKTtcbiAgICAgIHR4SW5mby5jbG9zZVJlbWFpbmRlclRvLnNob3VsZC5lcXVhbChjbG9zZVJlbWFpbmRlclRvKTtcbiAgICAgIHR4SW5mby5sYXN0Um91bmQuc2hvdWxkLmVxdWFsKDExNjcpO1xuICAgICAgdHhJbmZvLmdlbmVzaXNJRC5zaG91bGQuZXF1YWwoJ3Rlc3RuZXQtdjEuMCcpO1xuICAgICAgdHhJbmZvLmdlbmVzaXNIYXNoLnNob3VsZC5lcXVhbCgnU0dPMUdLU3p5RTdJRVBJdFR4Q0J5dzl4OEZtbnJDRGV4aTkvY09VSk9pST0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVjb2RlIGFuIHVuc2lnbmVkIGFzc2V0IHRyYW5zZmVyIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgdHhuQnVpbGRlci5mcm9tKHJhd1R4LmFzc2V0VHJhbnNmZXIudW5zaWduZWQpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eG5CdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgICAgY29uc3Qgc2VuZGVyID0gQWxnb1Jlc291cmNlcy5hY2NvdW50cy5hY2NvdW50MTtcbiAgICAgIGNvbnN0IHJlY2VpdmVyID0gQWxnb1Jlc291cmNlcy5hY2NvdW50cy5hY2NvdW50MjtcblxuICAgICAgc2hvdWxkLmRlZXBFcXVhbChCdWZmZXIuZnJvbSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKS50b1N0cmluZygnaGV4JyksIEFsZ29SZXNvdXJjZXMucmF3VHguYXNzZXRUcmFuc2Zlci51bnNpZ25lZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mcm9tLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi50bywgcmVjZWl2ZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5hbW91bnQsICcxMDAwJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5maXJzdFJvdW5kLCAxKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmxhc3RSb3VuZCwgMTApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udG9rZW5JZCwgMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlY29kZSBhIHNpZ25lZCBhc3NldCB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIHR4bkJ1aWxkZXIuZnJvbShyYXdUeC5hc3NldFRyYW5zZmVyLnNpZ25lZCk7XG5cbiAgICAgIHR4bkJ1aWxkZXIubnVtYmVyT2ZTaWduZXJzKDEpLnNpZ24oeyBrZXk6IGFjY291bnQxLnBydktleSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhuQnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIGNvbnN0IHNlbmRlciA9IEFsZ29SZXNvdXJjZXMuYWNjb3VudHMuYWNjb3VudDE7XG4gICAgICBjb25zdCByZWNlaXZlciA9IEFsZ29SZXNvdXJjZXMuYWNjb3VudHMuYWNjb3VudDI7XG5cbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoQnVmZmVyLmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSkudG9TdHJpbmcoJ2hleCcpLCBBbGdvUmVzb3VyY2VzLnJhd1R4LmFzc2V0VHJhbnNmZXIuc2lnbmVkKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZyb20sIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnRvLCByZWNlaXZlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmFtb3VudCwgJzEwMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5maXJzdFJvdW5kLCAxKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmxhc3RSb3VuZCwgMTApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udG9rZW5JZCwgMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gZGVjb2RlIG90aGVyIHR5cGVzIG9mIHRyYW5zYWN0aW9ucycsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhuQnVpbGRlci5mcm9tKHJhd1R4LmtleVJlZy51bnNpZ25lZCksIC9JbnZhbGlkIFRyYW5zYWN0aW9uIFR5cGU6IGtleXJlZy4gRXhwZWN0ZWQgYXhmZXIvKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhuQnVpbGRlci5mcm9tKHJhd1R4LmtleVJlZy5zaWduZWQpLCAvSW52YWxpZCBUcmFuc2FjdGlvbiBUeXBlOiBrZXlyZWcuIEV4cGVjdGVkIGF4ZmVyLyk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHR4bkJ1aWxkZXIuZnJvbShyYXdUeC50cmFuc2Zlci51bnNpZ25lZCksIC9JbnZhbGlkIFRyYW5zYWN0aW9uIFR5cGU6IHBheS4gRXhwZWN0ZWQgYXhmZXIvKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHhuQnVpbGRlci5mcm9tKHJhd1R4LnRyYW5zZmVyLnNpZ25lZCksIC9JbnZhbGlkIFRyYW5zYWN0aW9uIFR5cGU6IHBheS4gRXhwZWN0ZWQgYXhmZXIvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2FsbG93bGlzdCBhc3NldCB0eG4nLCAoKSA9PiB7XG4gICAgdGVzdCgnYWxsb3dsaXN0IHBhcmFtZXRlcnMgYXJlIHNldCBjb3JyZWN0bHknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0b2tlbklkID0gMTIzO1xuICAgICAgY29uc3Qgc2VuZGVyID0gYWNjb3VudDEuYWRkcmVzcztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbmV0d29ya3M6IHsgdGVzdG5ldCB9LFxuICAgICAgfSA9IEFsZ29SZXNvdXJjZXM7XG4gICAgICBjb25zdCB7IGdlbmVzaXNIYXNoLCBnZW5lc2lzSUQgfSA9IHRlc3RuZXQ7XG4gICAgICB0eG5CdWlsZGVyXG4gICAgICAgIC5hbGxvd0xpc3RBc3NldCh0b2tlbklkLCB7IGFkZHJlc3M6IHNlbmRlciB9KVxuICAgICAgICAuZmlyc3RSb3VuZCgxKVxuICAgICAgICAubGFzdFJvdW5kKDEwKVxuICAgICAgICAudGVzdG5ldCgpXG4gICAgICAgIC5udW1iZXJPZlJlcXVpcmVkU2lnbmVycygxKTtcblxuICAgICAgdHhuQnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50MS5wcnZLZXkgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhuQnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24uZnJvbSwgYWNjb3VudDEuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLnRvLCBhY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5lcXVhbCh0eEpzb24udG9rZW5JZCwgdG9rZW5JZCk7XG4gICAgICBzaG91bGQuZXF1YWwodHhKc29uLmZlZSwgMTAwMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSUQsIGdlbmVzaXNJRC50b1N0cmluZygpKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLnRvU3RyaW5nKCdiYXNlNjQnKSwgZ2VuZXNpc0hhc2gpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../test/unit/lib/transactionBuilder/base.ts"],"names":[],"mappings":""}