@bitgo/sdk-coin-stx 3.10.2 → 3.10.4

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 (38) hide show
  1. package/dist/test/fixtures.d.ts +119 -0
  2. package/dist/test/fixtures.d.ts.map +1 -0
  3. package/dist/test/fixtures.js +147 -0
  4. package/dist/test/unit/keyPair.d.ts +2 -0
  5. package/dist/test/unit/keyPair.d.ts.map +1 -0
  6. package/dist/test/unit/keyPair.js +144 -0
  7. package/dist/test/unit/resources.d.ts +97 -0
  8. package/dist/test/unit/resources.d.ts.map +1 -0
  9. package/dist/test/unit/resources.js +144 -0
  10. package/dist/test/unit/sip10Token.d.ts +2 -0
  11. package/dist/test/unit/sip10Token.d.ts.map +1 -0
  12. package/dist/test/unit/sip10Token.js +374 -0
  13. package/dist/test/unit/stx.d.ts +2 -0
  14. package/dist/test/unit/stx.d.ts.map +1 -0
  15. package/dist/test/unit/stx.js +470 -0
  16. package/dist/test/unit/transaction.d.ts +2 -0
  17. package/dist/test/unit/transaction.d.ts.map +1 -0
  18. package/dist/test/unit/transaction.js +83 -0
  19. package/dist/test/unit/transactionBuilder/contractBuilder.d.ts +2 -0
  20. package/dist/test/unit/transactionBuilder/contractBuilder.d.ts.map +1 -0
  21. package/dist/test/unit/transactionBuilder/contractBuilder.js +421 -0
  22. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts +2 -0
  23. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts.map +1 -0
  24. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +187 -0
  25. package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts +2 -0
  26. package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts.map +1 -0
  27. package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +140 -0
  28. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  29. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  30. package/dist/test/unit/transactionBuilder/transferBuilder.js +347 -0
  31. package/dist/test/unit/util.d.ts +2 -0
  32. package/dist/test/unit/util.d.ts.map +1 -0
  33. package/dist/test/unit/util.js +326 -0
  34. package/dist/tsconfig.tsbuildinfo +1 -0
  35. package/package.json +10 -7
  36. package/.eslintignore +0 -5
  37. package/.mocharc.yml +0 -8
  38. package/CHANGELOG.md +0 -839
@@ -0,0 +1,187 @@
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 sdk_test_1 = require("@bitgo/sdk-test");
40
+ const sdk_api_1 = require("@bitgo/sdk-api");
41
+ const statics_1 = require("@bitgo/statics");
42
+ const transactions_1 = require("@stacks/transactions");
43
+ const should_1 = __importDefault(require("should"));
44
+ const network_1 = require("@stacks/network");
45
+ const sdk_core_1 = require("@bitgo/sdk-core");
46
+ const assert_1 = __importDefault(require("assert"));
47
+ const src_1 = require("../../../src");
48
+ const testData = __importStar(require("../resources"));
49
+ describe('Stacks: Fungible Token Transfer Builder', () => {
50
+ const coinName = 'stx:sbtc';
51
+ const coinNameTest = 'tstx:tsip6dp';
52
+ let bitgo;
53
+ before(function () {
54
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, {
55
+ env: 'mock',
56
+ });
57
+ bitgo.initializeTestVars();
58
+ bitgo.safeRegister('tstx:tsip6dp', src_1.Sip10Token.createInstance);
59
+ });
60
+ describe('Sip10 fungible token transfer builder', function () {
61
+ const factory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get(coinNameTest));
62
+ const factoryProd = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get(coinName));
63
+ const initTxBuilder = () => {
64
+ const txBuilder = factory.getFungibleTokenTransferBuilder();
65
+ txBuilder.fee({ fee: '180' });
66
+ txBuilder.nonce(0);
67
+ txBuilder.contractAddress(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_ADDRESS);
68
+ txBuilder.contractName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_NAME);
69
+ txBuilder.functionName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.FUNCTION_NAME);
70
+ txBuilder.tokenName(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.TOKEN_NAME);
71
+ return txBuilder;
72
+ };
73
+ describe('fungible token builder environment', function () {
74
+ it('should select the right network', function () {
75
+ should_1.default.equal(factory.getFungibleTokenTransferBuilder().coinName(), 'tstx:tsip6dp');
76
+ should_1.default.equal(factoryProd.getFungibleTokenTransferBuilder().coinName(), 'stx:sbtc');
77
+ // used type any to access protected properties
78
+ const txBuilder = factory.getFungibleTokenTransferBuilder();
79
+ const txBuilderProd = factoryProd.getFungibleTokenTransferBuilder();
80
+ txBuilder._network.should.deepEqual(new network_1.StacksTestnet());
81
+ txBuilderProd._network.should.deepEqual(new network_1.StacksMainnet());
82
+ });
83
+ });
84
+ describe('should build', function () {
85
+ it('an unsigned fungible token transfer transaction', async () => {
86
+ const builder = initTxBuilder();
87
+ builder.functionArgs([
88
+ (0, transactions_1.uintCV)('10000'),
89
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
90
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
91
+ (0, transactions_1.someCV)((0, transactions_1.bufferCVFromString)('1')),
92
+ ]);
93
+ builder.fromPubKey(testData.TX_SENDER.pub);
94
+ builder.numberSignatures(1);
95
+ const tx = await builder.build();
96
+ const stacksTxn = tx;
97
+ should_1.default.deepEqual(stacksTxn.stxTransaction.postConditions.values.length, 1);
98
+ const txJson = tx.toJson();
99
+ should_1.default.deepEqual(txJson.payload.contractAddress, testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_ADDRESS);
100
+ should_1.default.deepEqual(txJson.payload.contractName, 'tsip6dp-token');
101
+ should_1.default.deepEqual(txJson.payload.functionName, 'transfer');
102
+ should_1.default.deepEqual(txJson.nonce, 0);
103
+ should_1.default.deepEqual(txJson.fee.toString(), '180');
104
+ should_1.default.deepEqual(tx.toBroadcastFormat(), testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.UNSIGNED_SINGLE_SIG_TX);
105
+ tx.type.should.equal(sdk_core_1.TransactionType.Send);
106
+ tx.outputs.length.should.equal(1);
107
+ tx.outputs[0].address.should.equal(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS);
108
+ tx.outputs[0].value.should.equal('10000');
109
+ tx.inputs.length.should.equal(1);
110
+ tx.inputs[0].address.should.equal(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS);
111
+ tx.inputs[0].value.should.equal('10000');
112
+ });
113
+ it('an unsigned fungible token transfer transaction without memo', async () => {
114
+ const builder = initTxBuilder();
115
+ builder.functionArgs([
116
+ (0, transactions_1.uintCV)('10000'),
117
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
118
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
119
+ ]);
120
+ builder.fromPubKey(testData.TX_SENDER.pub);
121
+ builder.numberSignatures(1);
122
+ const tx = await builder.build();
123
+ const txJson = tx.toJson();
124
+ should_1.default.deepEqual(txJson.payload.contractAddress, testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.CONTRACT_ADDRESS);
125
+ should_1.default.deepEqual(txJson.payload.contractName, 'tsip6dp-token');
126
+ should_1.default.deepEqual(txJson.payload.functionName, 'transfer');
127
+ should_1.default.deepEqual(txJson.nonce, 0);
128
+ should_1.default.deepEqual(txJson.fee.toString(), '180');
129
+ should_1.default.deepEqual(tx.toBroadcastFormat(), testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.UNSIGNED_SINGLE_SIG_TX_WITHOUT_MEMO);
130
+ tx.type.should.equal(sdk_core_1.TransactionType.Send);
131
+ tx.outputs.length.should.equal(1);
132
+ tx.outputs[0].address.should.equal(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS);
133
+ tx.outputs[0].value.should.equal('10000');
134
+ tx.inputs.length.should.equal(1);
135
+ tx.inputs[0].address.should.equal(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS);
136
+ tx.inputs[0].value.should.equal('10000');
137
+ });
138
+ it('a multisig fungible token transfer transaction with memo', async () => {
139
+ const builder = initTxBuilder();
140
+ builder.functionArgs([
141
+ (0, transactions_1.uintCV)('10000'),
142
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
143
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
144
+ (0, transactions_1.someCV)((0, transactions_1.bufferCVFromString)('1')),
145
+ ]);
146
+ builder.sign({ key: testData.prv1 });
147
+ builder.sign({ key: testData.prv2 });
148
+ builder.fromPubKey([testData.pub1, testData.pub2, testData.pub3]);
149
+ builder.numberSignatures(2);
150
+ const tx = await builder.build();
151
+ JSON.stringify(tx.toJson());
152
+ should_1.default.deepEqual(tx.toBroadcastFormat(), testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SIGNED_MULTI_SIG_TX);
153
+ });
154
+ it('a multisig fungible token transfer transaction without memo', async () => {
155
+ const builder = initTxBuilder();
156
+ builder.functionArgs([
157
+ (0, transactions_1.uintCV)('10000'),
158
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SENDER_ADDRESS),
159
+ (0, transactions_1.standardPrincipalCV)(testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.RECEIVER_ADDRESS),
160
+ (0, transactions_1.noneCV)(),
161
+ ]);
162
+ builder.sign({ key: testData.prv1 });
163
+ builder.sign({ key: testData.prv2 });
164
+ builder.fromPubKey([testData.pub1, testData.pub2, testData.pub3]);
165
+ builder.numberSignatures(2);
166
+ const tx = await builder.build();
167
+ JSON.stringify(tx.toJson());
168
+ should_1.default.deepEqual(tx.toBroadcastFormat(), testData.FUNGIBLE_TOKEN_TRANSFER_CONSTANTS.SIGNED_MULTI_SIG_TX_WITHOUT_MEMO);
169
+ });
170
+ });
171
+ describe('should fail', () => {
172
+ it('a fungible token transfer builder with an invalid key', () => {
173
+ const builder = initTxBuilder();
174
+ assert_1.default.throws(() => builder.sign({ key: 'invalidKey' }), /Unsupported private key/);
175
+ });
176
+ it('a fungible token transfer builder with an invalid contract address', () => {
177
+ const builder = initTxBuilder();
178
+ assert_1.default.throws(() => builder.contractAddress('invalidContractAddress'), /Invalid address/);
179
+ });
180
+ it('a fungible token transfer builder with an invalid contract function name', () => {
181
+ const builder = initTxBuilder();
182
+ assert_1.default.throws(() => builder.functionName('test-function'), new RegExp('test-function is not supported contract function name'));
183
+ });
184
+ });
185
+ });
186
+ });
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbkJ1aWxkZXIvZnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUEwRDtBQUMxRCw0Q0FBMEM7QUFDMUMsNENBQXVDO0FBQ3ZDLHVEQUF1RztBQUN2RyxvREFBNEI7QUFDNUIsNkNBQStEO0FBQy9ELDhDQUFrRDtBQUNsRCxvREFBNEI7QUFFNUIsc0NBQWtEO0FBRWxELHVEQUF5QztBQUV6QyxRQUFRLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO0lBQ3ZELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM1QixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUM7SUFDcEMsSUFBSSxLQUFtQixDQUFDO0lBRXhCLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsZ0JBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRTtRQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDOUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFNLENBQUMseUJBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTlFLE1BQU0sYUFB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O2dCQUM1RSxNQUFNLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDaEMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDNUYsQ0FBQyxDQUFDLENBQUM7WUFDSCxFQUFFLENBQUMsMEVBQTBFLEVBQUUsR0FBRyxFQUFFO2dCQUNsRixNQUFNLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDaEMsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFDM0MsSUFBSSxNQUFNLENBQUMsdURBQXVELENBQUMsQ0FDcEUsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IGJ1ZmZlckNWRnJvbVN0cmluZywgbm9uZUNWLCBzb21lQ1YsIHN0YW5kYXJkUHJpbmNpcGFsQ1YsIHVpbnRDViB9IGZyb20gJ0BzdGFja3MvdHJhbnNhY3Rpb25zJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFN0YWNrc01haW5uZXQsIFN0YWNrc1Rlc3RuZXQgfSBmcm9tICdAc3RhY2tzL25ldHdvcmsnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgU2lwMTBUb2tlbiwgU3R4TGliIH0gZnJvbSAnLi4vLi4vLi4vc3JjJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuXG5kZXNjcmliZSgnU3RhY2tzOiBGdW5naWJsZSBUb2tlbiBUcmFuc2ZlciBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBjb2luTmFtZSA9ICdzdHg6c2J0Yyc7XG4gIGNvbnN0IGNvaW5OYW1lVGVzdCA9ICd0c3R4OnRzaXA2ZHAnO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7XG4gICAgICBlbnY6ICdtb2NrJyxcbiAgICB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RzdHg6dHNpcDZkcCcsIFNpcDEwVG9rZW4uY3JlYXRlSW5zdGFuY2UpO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2lwMTAgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgYnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFN0eExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldChjb2luTmFtZVRlc3QpKTtcbiAgICBjb25zdCBmYWN0b3J5UHJvZCA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoY29pbk5hbWUpKTtcblxuICAgIGNvbnN0IGluaXRUeEJ1aWxkZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEZ1bmdpYmxlVG9rZW5UcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6ICcxODAnIH0pO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKDApO1xuICAgICAgdHhCdWlsZGVyLmNvbnRyYWN0QWRkcmVzcyh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuQ09OVFJBQ1RfQUREUkVTUyk7XG4gICAgICB0eEJ1aWxkZXIuY29udHJhY3ROYW1lKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5DT05UUkFDVF9OQU1FKTtcbiAgICAgIHR4QnVpbGRlci5mdW5jdGlvbk5hbWUodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkZVTkNUSU9OX05BTUUpO1xuICAgICAgdHhCdWlsZGVyLnRva2VuTmFtZSh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuVE9LRU5fTkFNRSk7XG4gICAgICByZXR1cm4gdHhCdWlsZGVyO1xuICAgIH07XG5cbiAgICBkZXNjcmliZSgnZnVuZ2libGUgdG9rZW4gYnVpbGRlciBlbnZpcm9ubWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgc2VsZWN0IHRoZSByaWdodCBuZXR3b3JrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaG91bGQuZXF1YWwoZmFjdG9yeS5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCkuY29pbk5hbWUoKSwgJ3RzdHg6dHNpcDZkcCcpO1xuICAgICAgICBzaG91bGQuZXF1YWwoZmFjdG9yeVByb2QuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpLmNvaW5OYW1lKCksICdzdHg6c2J0YycpO1xuICAgICAgICAvLyB1c2VkIHR5cGUgYW55IHRvIGFjY2VzcyBwcm90ZWN0ZWQgcHJvcGVydGllc1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXI6IGFueSA9IGZhY3RvcnkuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXJQcm9kOiBhbnkgPSBmYWN0b3J5UHJvZC5nZXRGdW5naWJsZVRva2VuVHJhbnNmZXJCdWlsZGVyKCk7XG5cbiAgICAgICAgdHhCdWlsZGVyLl9uZXR3b3JrLnNob3VsZC5kZWVwRXF1YWwobmV3IFN0YWNrc1Rlc3RuZXQoKSk7XG4gICAgICAgIHR4QnVpbGRlclByb2QuX25ldHdvcmsuc2hvdWxkLmRlZXBFcXVhbChuZXcgU3RhY2tzTWFpbm5ldCgpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdhbiB1bnNpZ25lZCBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgICAgc29tZUNWKGJ1ZmZlckNWRnJvbVN0cmluZygnMScpKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgY29uc3Qgc3RhY2tzVHhuID0gdHggYXMgVHJhbnNhY3Rpb247XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwoc3RhY2tzVHhuLnN0eFRyYW5zYWN0aW9uLnBvc3RDb25kaXRpb25zLnZhbHVlcy5sZW5ndGgsIDEpO1xuXG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0QWRkcmVzcywgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLkNPTlRSQUNUX0FERFJFU1MpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5wYXlsb2FkLmNvbnRyYWN0TmFtZSwgJ3RzaXA2ZHAtdG9rZW4nKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsICd0cmFuc2ZlcicpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25jZSwgMCk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZlZS50b1N0cmluZygpLCAnMTgwJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlVOU0lHTkVEX1NJTkdMRV9TSUdfVFgpO1xuXG4gICAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgICAgdHgub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKTtcbiAgICAgICAgdHgub3V0cHV0c1swXS52YWx1ZS5zaG91bGQuZXF1YWwoJzEwMDAwJyk7XG4gICAgICAgIHR4LmlucHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgICB0eC5pbnB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMTAwMDAnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYW4gdW5zaWduZWQgZnVuZ2libGUgdG9rZW4gdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aG91dCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmZ1bmN0aW9uQXJncyhbXG4gICAgICAgICAgdWludENWKCcxMDAwMCcpLFxuICAgICAgICAgIHN0YW5kYXJkUHJpbmNpcGFsQ1YodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNFTkRFUl9BRERSRVNTKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5SRUNFSVZFUl9BRERSRVNTKSxcbiAgICAgICAgXSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleSh0ZXN0RGF0YS5UWF9TRU5ERVIucHViKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsIHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5DT05UUkFDVF9BRERSRVNTKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ucGF5bG9hZC5jb250cmFjdE5hbWUsICd0c2lwNmRwLXRva2VuJyk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnBheWxvYWQuZnVuY3Rpb25OYW1lLCAndHJhbnNmZXInKTtcbiAgICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubm9uY2UsIDApO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mZWUudG9TdHJpbmcoKSwgJzE4MCcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgICAgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlVOU0lHTkVEX1NJTkdMRV9TSUdfVFhfV0lUSE9VVF9NRU1PXG4gICAgICAgICk7XG5cbiAgICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4Lm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlJFQ0VJVkVSX0FERFJFU1MpO1xuICAgICAgICB0eC5vdXRwdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnMTAwMDAnKTtcbiAgICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuU0VOREVSX0FERFJFU1MpO1xuICAgICAgICB0eC5pbnB1dHNbMF0udmFsdWUuc2hvdWxkLmVxdWFsKCcxMDAwMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIG11bHRpc2lnIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGggbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgICAgc29tZUNWKGJ1ZmZlckNWRnJvbVN0cmluZygnMScpKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnYxIH0pO1xuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydjIgfSk7XG4gICAgICAgIGJ1aWxkZXIuZnJvbVB1YktleShbdGVzdERhdGEucHViMSwgdGVzdERhdGEucHViMiwgdGVzdERhdGEucHViM10pO1xuICAgICAgICBidWlsZGVyLm51bWJlclNpZ25hdHVyZXMoMik7XG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgICBKU09OLnN0cmluZ2lmeSh0eC50b0pzb24oKSk7XG4gICAgICAgIHNob3VsZC5kZWVwRXF1YWwodHgudG9Ccm9hZGNhc3RGb3JtYXQoKSwgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNJR05FRF9NVUxUSV9TSUdfVFgpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdhIG11bHRpc2lnIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIHdpdGhvdXQgbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5mdW5jdGlvbkFyZ3MoW1xuICAgICAgICAgIHVpbnRDVignMTAwMDAnKSxcbiAgICAgICAgICBzdGFuZGFyZFByaW5jaXBhbENWKHRlc3REYXRhLkZVTkdJQkxFX1RPS0VOX1RSQU5TRkVSX0NPTlNUQU5UUy5TRU5ERVJfQUREUkVTUyksXG4gICAgICAgICAgc3RhbmRhcmRQcmluY2lwYWxDVih0ZXN0RGF0YS5GVU5HSUJMRV9UT0tFTl9UUkFOU0ZFUl9DT05TVEFOVFMuUkVDRUlWRVJfQUREUkVTUyksXG4gICAgICAgICAgbm9uZUNWKCksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJ2MSB9KTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnYyIH0pO1xuICAgICAgICBidWlsZGVyLmZyb21QdWJLZXkoW3Rlc3REYXRhLnB1YjEsIHRlc3REYXRhLnB1YjIsIHRlc3REYXRhLnB1YjNdKTtcbiAgICAgICAgYnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDIpO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgICAgdGVzdERhdGEuRlVOR0lCTEVfVE9LRU5fVFJBTlNGRVJfQ09OU1RBTlRTLlNJR05FRF9NVUxUSV9TSUdfVFhfV0lUSE9VVF9NRU1PXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzaG91bGQgZmFpbCcsICgpID0+IHtcbiAgICAgIGl0KCdhIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXIgd2l0aCBhbiBpbnZhbGlkIGtleScsICgpID0+IHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGluaXRUeEJ1aWxkZXIoKTtcbiAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBidWlsZGVyLnNpZ24oeyBrZXk6ICdpbnZhbGlkS2V5JyB9KSwgL1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5Lyk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdhIGZ1bmdpYmxlIHRva2VuIHRyYW5zZmVyIGJ1aWxkZXIgd2l0aCBhbiBpbnZhbGlkIGNvbnRyYWN0IGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBpbml0VHhCdWlsZGVyKCk7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVpbGRlci5jb250cmFjdEFkZHJlc3MoJ2ludmFsaWRDb250cmFjdEFkZHJlc3MnKSwgL0ludmFsaWQgYWRkcmVzcy8pO1xuICAgICAgfSk7XG4gICAgICBpdCgnYSBmdW5naWJsZSB0b2tlbiB0cmFuc2ZlciBidWlsZGVyIHdpdGggYW4gaW52YWxpZCBjb250cmFjdCBmdW5jdGlvbiBuYW1lJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IGJ1aWxkZXIuZnVuY3Rpb25OYW1lKCd0ZXN0LWZ1bmN0aW9uJyksXG4gICAgICAgICAgbmV3IFJlZ0V4cCgndGVzdC1mdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGNvbnRyYWN0IGZ1bmN0aW9uIG5hbWUnKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sendmanyBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendmanyBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/sendmanyBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,140 @@
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 network_1 = require("@stacks/network");
41
+ const transactions_1 = require("@stacks/transactions");
42
+ const principalCV_1 = require("@stacks/transactions/dist/clarity/types/principalCV");
43
+ const sdk_test_1 = require("@bitgo/sdk-test");
44
+ const sdk_api_1 = require("@bitgo/sdk-api");
45
+ const statics_1 = require("@bitgo/statics");
46
+ const src_1 = require("../../../src");
47
+ const testData = __importStar(require("../resources"));
48
+ describe('Stacks: Send Many Builder', function () {
49
+ const coinName = 'stx';
50
+ const coinNameTest = 'tstx';
51
+ let bitgo;
52
+ before(function () {
53
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, {
54
+ env: 'mock',
55
+ });
56
+ bitgo.initializeTestVars();
57
+ bitgo.safeRegister('stx', src_1.Stx.createInstance);
58
+ bitgo.safeRegister('tstx', src_1.Tstx.createInstance);
59
+ });
60
+ describe('Stx Send Many Builder', () => {
61
+ const factory = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get(coinNameTest));
62
+ const factoryProd = new src_1.StxLib.TransactionBuilderFactory(statics_1.coins.get(coinName));
63
+ const initTxBuilder = () => {
64
+ const txBuilder = factory.getSendmanyBuilder();
65
+ txBuilder.fee({ fee: '532' });
66
+ txBuilder.nonce(45);
67
+ return txBuilder;
68
+ };
69
+ it('should select the right network', function () {
70
+ should_1.default.equal(factory.getSendmanyBuilder().coinName(), 'tstx');
71
+ should_1.default.equal(factoryProd.getSendmanyBuilder().coinName(), 'stx');
72
+ // used type any to access protected properties
73
+ const txBuilder = factory.getSendmanyBuilder();
74
+ const txBuilderProd = factoryProd.getSendmanyBuilder();
75
+ txBuilder._network.should.deepEqual(new network_1.StacksTestnet());
76
+ txBuilderProd._network.should.deepEqual(new network_1.StacksMainnet());
77
+ });
78
+ describe('should build ', function () {
79
+ it('a multisig send many transaction with memo', async () => {
80
+ const builder = initTxBuilder();
81
+ // corresponding public keys
82
+ const pubKeys = testData.prvKeysString.map(transactions_1.pubKeyfromPrivKey);
83
+ const pubKeyStrings = pubKeys.map(transactions_1.publicKeyToString);
84
+ builder.fromPubKey(pubKeyStrings);
85
+ for (const recipient of testData.sendManyRecipients) {
86
+ builder.send(recipient);
87
+ }
88
+ builder.sign({ key: testData.prvKeysString[0] });
89
+ builder.sign({ key: testData.prvKeysString[1] });
90
+ const tx = await builder.build();
91
+ const txJson = tx.toJson();
92
+ txJson.id.should.equal('01793eeb993d15791ea9af8910d867407803fe4c7d1db2dac592a2e8200de12a');
93
+ txJson.fee.should.equal('532');
94
+ txJson.from.should.equal('SN3KT9DVM9TCTAHV0S9VEAKTDG7JBC0K26ZMWEBNT');
95
+ txJson.nonce.should.equal(45);
96
+ const { contractName, contractAddress, functionName, functionArgs } = txJson.payload;
97
+ contractAddress.should.equal(testData.SEND_MANY_CONTRACT_ADDRESS_WITH_MEMO);
98
+ contractName.should.equal(testData.SEND_MANY_CONTRACT_NAME_WITH_MEMO);
99
+ functionName.should.equal(testData.SEND_MANY_CONTRACT_FUNCTION_NAME_WITH_MEMO);
100
+ functionArgs.length.should.equal(1);
101
+ functionArgs[0].should.have.property('list');
102
+ const { list } = functionArgs[0];
103
+ list.length.should.equal(testData.sendManyRecipients.length);
104
+ for (let i = 0; i < testData.sendManyRecipients.length; i++) {
105
+ list[i].data.should.have.properties(['to', 'ustx', 'memo']);
106
+ (0, principalCV_1.principalToString)(list[i].data.to).should.equal(testData.sendManyRecipients[i].address);
107
+ list[i].data.memo.buffer.toString('ascii').should.equal(testData.sendManyRecipients[i].memo);
108
+ list[i].data.ustx.value.should.equal(testData.sendManyRecipients[i].amount);
109
+ }
110
+ tx.outputs.length.should.equal(testData.sendManyRecipients.length);
111
+ for (let i = 0; i < testData.sendManyRecipients.length; i++) {
112
+ tx.outputs[i].address.should.equal(testData.sendManyRecipients[i].address);
113
+ tx.outputs[i].value.should.equal(testData.sendManyRecipients[i].amount);
114
+ }
115
+ tx.inputs.length.should.equal(1);
116
+ tx.inputs[0].address.should.equal('SN3KT9DVM9TCTAHV0S9VEAKTDG7JBC0K26ZMWEBNT');
117
+ tx.inputs[0].value.should.equal('6000000');
118
+ should_1.default.deepEqual(tx.toBroadcastFormat(), testData.SIGNED_SEND_MANY_WITH_MEMO);
119
+ });
120
+ it('a multisig send-many unsigned transfer transaction with memo from raw tx', async () => {
121
+ const builder = factory.from(testData.UNSIGNED_SEND_MANY_WITH_MEMO);
122
+ const tx = await builder.build();
123
+ tx.toBroadcastFormat().should.equal(testData.UNSIGNED_SEND_MANY_WITH_MEMO);
124
+ });
125
+ it('a unsigned send-many signed transfer transaction with memo from raw tx', async () => {
126
+ const builder = factory.from(testData.SIGNED_SEND_MANY_WITH_MEMO);
127
+ const tx = await builder.build();
128
+ tx.toBroadcastFormat().should.equal(testData.SIGNED_SEND_MANY_WITH_MEMO);
129
+ });
130
+ it('sign an unsigned tx from a raw tx', async () => {
131
+ const builder = factory.from(testData.UNSIGNED_SEND_MANY_WITH_MEMO);
132
+ builder.sign({ key: testData.prvKeysString[0] });
133
+ builder.sign({ key: testData.prvKeysString[1] });
134
+ const tx = await builder.build();
135
+ tx.toBroadcastFormat().should.equal(testData.SIGNED_SEND_MANY_WITH_MEMO);
136
+ });
137
+ });
138
+ });
139
+ });
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZG1hbnlCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9zZW5kbWFueUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsNkNBQStEO0FBQy9ELHVEQUE0RTtBQUM1RSxxRkFBd0Y7QUFFeEYsOENBQTBEO0FBQzFELDRDQUEwQztBQUMxQyw0Q0FBdUM7QUFFdkMsc0NBQWlEO0FBQ2pELHVEQUF5QztBQUV6QyxRQUFRLENBQUMsMkJBQTJCLEVBQUU7SUFDcEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztJQUM1QixJQUFJLEtBQW1CLENBQUM7SUFFeEIsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUU7WUFDbkMsR0FBRyxFQUFFLE1BQU07U0FDWixDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsVUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFlBQU0sQ0FBQyx5QkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDOUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFNLENBQUMseUJBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FB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Q0FBQztnQkFDakMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUMzRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFN0YWNrc1Rlc3RuZXQsIFN0YWNrc01haW5uZXQgfSBmcm9tICdAc3RhY2tzL25ldHdvcmsnO1xuaW1wb3J0IHsgcHViS2V5ZnJvbVByaXZLZXksIHB1YmxpY0tleVRvU3RyaW5nIH0gZnJvbSAnQHN0YWNrcy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgcHJpbmNpcGFsVG9TdHJpbmcgfSBmcm9tICdAc3RhY2tzL3RyYW5zYWN0aW9ucy9kaXN0L2NsYXJpdHkvdHlwZXMvcHJpbmNpcGFsQ1YnO1xuXG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuXG5pbXBvcnQgeyBTdHgsIFRzdHgsIFN0eExpYiB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuXG5kZXNjcmliZSgnU3RhY2tzOiBTZW5kIE1hbnkgQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbk5hbWUgPSAnc3R4JztcbiAgY29uc3QgY29pbk5hbWVUZXN0ID0gJ3RzdHgnO1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7XG4gICAgICBlbnY6ICdtb2NrJyxcbiAgICB9KTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3N0eCcsIFN0eC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0c3R4JywgVHN0eC5jcmVhdGVJbnN0YW5jZSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTdHggU2VuZCBNYW55IEJ1aWxkZXInLCAoKSA9PiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoY29pbk5hbWVUZXN0KSk7XG4gICAgY29uc3QgZmFjdG9yeVByb2QgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KGNvaW5OYW1lKSk7XG5cbiAgICBjb25zdCBpbml0VHhCdWlsZGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRTZW5kbWFueUJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6ICc1MzInIH0pO1xuICAgICAgdHhCdWlsZGVyLm5vbmNlKDQ1KTtcbiAgICAgIHJldHVybiB0eEJ1aWxkZXI7XG4gICAgfTtcblxuICAgIGl0KCdzaG91bGQgc2VsZWN0IHRoZSByaWdodCBuZXR3b3JrJywgZnVuY3Rpb24gKCkge1xuICAgICAgc2hvdWxkLmVxdWFsKGZhY3RvcnkuZ2V0U2VuZG1hbnlCdWlsZGVyKCkuY29pbk5hbWUoKSwgJ3RzdHgnKTtcbiAgICAgIHNob3VsZC5lcXVhbChmYWN0b3J5UHJvZC5nZXRTZW5kbWFueUJ1aWxkZXIoKS5jb2luTmFtZSgpLCAnc3R4Jyk7XG4gICAgICAvLyB1c2VkIHR5cGUgYW55IHRvIGFjY2VzcyBwcm90ZWN0ZWQgcHJvcGVydGllc1xuICAgICAgY29uc3QgdHhCdWlsZGVyOiBhbnkgPSBmYWN0b3J5LmdldFNlbmRtYW55QnVpbGRlcigpO1xuICAgICAgY29uc3QgdHhCdWlsZGVyUHJvZDogYW55ID0gZmFjdG9yeVByb2QuZ2V0U2VuZG1hbnlCdWlsZGVyKCk7XG5cbiAgICAgIHR4QnVpbGRlci5fbmV0d29yay5zaG91bGQuZGVlcEVxdWFsKG5ldyBTdGFja3NUZXN0bmV0KCkpO1xuICAgICAgdHhCdWlsZGVyUHJvZC5fbmV0d29yay5zaG91bGQuZGVlcEVxdWFsKG5ldyBTdGFja3NNYWlubmV0KCkpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3Nob3VsZCBidWlsZCAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnYSBtdWx0aXNpZyBzZW5kIG1hbnkgdHJhbnNhY3Rpb24gd2l0aCBtZW1vJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gaW5pdFR4QnVpbGRlcigpO1xuXG4gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgcHVibGljIGtleXNcbiAgICAgICAgY29uc3QgcHViS2V5cyA9IHRlc3REYXRhLnBydktleXNTdHJpbmcubWFwKHB1YktleWZyb21Qcml2S2V5KTtcbiAgICAgICAgY29uc3QgcHViS2V5U3RyaW5ncyA9IHB1YktleXMubWFwKHB1YmxpY0tleVRvU3RyaW5nKTtcbiAgICAgICAgYnVpbGRlci5mcm9tUHViS2V5KHB1YktleVN0cmluZ3MpO1xuICAgICAgICBmb3IgKGNvbnN0IHJlY2lwaWVudCBvZiB0ZXN0RGF0YS5zZW5kTWFueVJlY2lwaWVudHMpIHtcbiAgICAgICAgICBidWlsZGVyLnNlbmQocmVjaXBpZW50KTtcbiAgICAgICAgfVxuICAgICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnBydktleXNTdHJpbmdbMF0gfSk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJ2S2V5c1N0cmluZ1sxXSB9KTtcbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgICB0eEpzb24uaWQuc2hvdWxkLmVxdWFsKCcwMTc5M2VlYjk5M2QxNTc5MWVhOWFmODkxMGQ4Njc0MDc4MDNmZTRjN2QxZGIyZGFjNTkyYTJlODIwMGRlMTJhJyk7XG4gICAgICAgIHR4SnNvbi5mZWUuc2hvdWxkLmVxdWFsKCc1MzInKTtcbiAgICAgICAgdHhKc29uLmZyb20uc2hvdWxkLmVxdWFsKCdTTjNLVDlEVk05VENUQUhWMFM5VkVBS1RERzdKQkMwSzI2Wk1XRUJOVCcpO1xuICAgICAgICB0eEpzb24ubm9uY2Uuc2hvdWxkLmVxdWFsKDQ1KTtcbiAgICAgICAgY29uc3QgeyBjb250cmFjdE5hbWUsIGNvbnRyYWN0QWRkcmVzcywgZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkFyZ3MgfSA9IHR4SnNvbi5wYXlsb2FkO1xuICAgICAgICBjb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNFTkRfTUFOWV9DT05UUkFDVF9BRERSRVNTX1dJVEhfTUVNTyk7XG4gICAgICAgIGNvbnRyYWN0TmFtZS5zaG91bGQuZXF1YWwodGVzdERhdGEuU0VORF9NQU5ZX0NPTlRSQUNUX05BTUVfV0lUSF9NRU1PKTtcbiAgICAgICAgZnVuY3Rpb25OYW1lLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5TRU5EX01BTllfQ09OVFJBQ1RfRlVOQ1RJT05fTkFNRV9XSVRIX01FTU8pO1xuICAgICAgICBmdW5jdGlvbkFyZ3MubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgZnVuY3Rpb25BcmdzWzBdLnNob3VsZC5oYXZlLnByb3BlcnR5KCdsaXN0Jyk7XG4gICAgICAgIGNvbnN0IHsgbGlzdCB9ID0gZnVuY3Rpb25BcmdzWzBdO1xuICAgICAgICBsaXN0Lmxlbmd0aC5zaG91bGQuZXF1YWwodGVzdERhdGEuc2VuZE1hbnlSZWNpcGllbnRzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdERhdGEuc2VuZE1hbnlSZWNpcGllbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXS5kYXRhLnNob3VsZC5oYXZlLnByb3BlcnRpZXMoWyd0bycsICd1c3R4JywgJ21lbW8nXSk7XG4gICAgICAgICAgcHJpbmNpcGFsVG9TdHJpbmcobGlzdFtpXS5kYXRhLnRvKS5zaG91bGQuZXF1YWwodGVzdERhdGEuc2VuZE1hbnlSZWNpcGllbnRzW2ldLmFkZHJlc3MpO1xuICAgICAgICAgIGxpc3RbaV0uZGF0YS5tZW1vLmJ1ZmZlci50b1N0cmluZygnYXNjaWknKS5zaG91bGQuZXF1YWwodGVzdERhdGEuc2VuZE1hbnlSZWNpcGllbnRzW2ldLm1lbW8pO1xuICAgICAgICAgIGxpc3RbaV0uZGF0YS51c3R4LnZhbHVlLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5zZW5kTWFueVJlY2lwaWVudHNbaV0uYW1vdW50KTtcbiAgICAgICAgfVxuICAgICAgICB0eC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwodGVzdERhdGEuc2VuZE1hbnlSZWNpcGllbnRzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVzdERhdGEuc2VuZE1hbnlSZWNpcGllbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdHgub3V0cHV0c1tpXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5zZW5kTWFueVJlY2lwaWVudHNbaV0uYWRkcmVzcyk7XG4gICAgICAgICAgdHgub3V0cHV0c1tpXS52YWx1ZS5zaG91bGQuZXF1YWwodGVzdERhdGEuc2VuZE1hbnlSZWNpcGllbnRzW2ldLmFtb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgdHguaW5wdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIHR4LmlucHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnU04zS1Q5RFZNOVRDVEFIVjBTOVZFQUtUREc3SkJDMEsyNlpNV0VCTlQnKTtcbiAgICAgICAgdHguaW5wdXRzWzBdLnZhbHVlLnNob3VsZC5lcXVhbCgnNjAwMDAwMCcpO1xuICAgICAgICBzaG91bGQuZGVlcEVxdWFsKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksIHRlc3REYXRhLlNJR05FRF9TRU5EX01BTllfV0lUSF9NRU1PKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYSBtdWx0aXNpZyBzZW5kLW1hbnkgdW5zaWduZWQgdHJhbnNmZXIgdHJhbnNhY3Rpb24gd2l0aCBtZW1vIGZyb20gcmF3IHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tKHRlc3REYXRhLlVOU0lHTkVEX1NFTkRfTUFOWV9XSVRIX01FTU8pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwodGVzdERhdGEuVU5TSUdORURfU0VORF9NQU5ZX1dJVEhfTUVNTyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2EgdW5zaWduZWQgc2VuZC1tYW55IHNpZ25lZCB0cmFuc2ZlciB0cmFuc2FjdGlvbiB3aXRoIG1lbW8gZnJvbSByYXcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuU0lHTkVEX1NFTkRfTUFOWV9XSVRIX01FTU8pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwodGVzdERhdGEuU0lHTkVEX1NFTkRfTUFOWV9XSVRIX01FTU8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaWduIGFuIHVuc2lnbmVkIHR4IGZyb20gYSByYXcgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuVU5TSUdORURfU0VORF9NQU5ZX1dJVEhfTUVNTyk7XG4gICAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEucHJ2S2V5c1N0cmluZ1swXSB9KTtcbiAgICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5wcnZLZXlzU3RyaW5nWzFdIH0pO1xuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgdHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwodGVzdERhdGEuU0lHTkVEX1NFTkRfTUFOWV9XSVRIX01FTU8pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transferBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/transactionBuilder/transferBuilder.ts"],"names":[],"mappings":""}