@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.
- package/dist/src/algo.d.ts +117 -16
- package/dist/src/algo.d.ts.map +1 -1
- package/dist/src/algo.js +430 -46
- package/dist/src/algoToken.d.ts +1 -1
- package/dist/src/algoToken.d.ts.map +1 -1
- package/dist/src/algoToken.js +3 -3
- package/dist/src/index.js +23 -9
- package/dist/src/lib/assetTransferBuilder.d.ts +1 -1
- package/dist/src/lib/assetTransferBuilder.js +2 -2
- package/dist/src/lib/ifaces.d.ts +0 -1
- package/dist/src/lib/ifaces.d.ts.map +1 -1
- package/dist/src/lib/index.js +23 -9
- package/dist/src/lib/keyPair.js +24 -10
- package/dist/src/lib/keyRegistrationBuilder.js +1 -1
- package/dist/src/lib/seedEncoding.js +23 -9
- package/dist/src/lib/transaction.js +3 -4
- package/dist/src/lib/transactionBuilder.d.ts +6 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +45 -29
- package/dist/src/lib/transactionBuilderFactory.js +1 -1
- package/dist/src/lib/transferBuilder.js +1 -1
- package/dist/src/lib/txnSchema.js +1 -1
- package/dist/src/lib/utils.d.ts +6 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +35 -11
- package/dist/src/seedValidator.js +23 -9
- package/dist/test/fixtures/algo.d.ts +101 -0
- package/dist/test/fixtures/algo.d.ts.map +1 -0
- package/dist/test/fixtures/algo.js +239 -0
- package/dist/test/fixtures/resources.d.ts +121 -0
- package/dist/test/fixtures/resources.d.ts.map +1 -0
- package/dist/test/fixtures/resources.js +131 -0
- package/dist/test/integration/algo.integration.d.ts +2 -0
- package/dist/test/integration/algo.integration.d.ts.map +1 -0
- package/dist/test/integration/algo.integration.js +71 -0
- package/dist/test/unit/algo.d.ts +2 -0
- package/dist/test/unit/algo.d.ts.map +1 -0
- package/dist/test/unit/algo.js +1223 -0
- package/dist/test/unit/algoIsWalletAddress.d.ts +2 -0
- package/dist/test/unit/algoIsWalletAddress.d.ts.map +1 -0
- package/dist/test/unit/algoIsWalletAddress.js +118 -0
- package/dist/test/unit/algoToken.d.ts +2 -0
- package/dist/test/unit/algoToken.d.ts.map +1 -0
- package/dist/test/unit/algoToken.js +79 -0
- package/dist/test/unit/fixtures/algoBackupKey.d.ts +4 -0
- package/dist/test/unit/fixtures/algoBackupKey.d.ts.map +1 -0
- package/dist/test/unit/fixtures/algoBackupKey.js +10 -0
- package/dist/test/unit/lib/keyPair.d.ts +2 -0
- package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
- package/dist/test/unit/lib/keyPair.js +110 -0
- package/dist/test/unit/lib/seedEncoding.d.ts +2 -0
- package/dist/test/unit/lib/seedEncoding.d.ts.map +1 -0
- package/dist/test/unit/lib/seedEncoding.js +59 -0
- package/dist/test/unit/lib/transaction.d.ts +2 -0
- package/dist/test/unit/lib/transaction.d.ts.map +1 -0
- package/dist/test/unit/lib/transaction.js +157 -0
- package/dist/test/unit/lib/transactionBuilder/assetTransferBuilder.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilder/assetTransferBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilder/assetTransferBuilder.js +300 -0
- package/dist/test/unit/lib/transactionBuilder/base.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilder/base.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilder/base.js +310 -0
- package/dist/test/unit/lib/transactionBuilder/keyRegistrationBuilder.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilder/keyRegistrationBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilder/keyRegistrationBuilder.js +473 -0
- package/dist/test/unit/lib/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilder/transactionBuilderFactory.js +138 -0
- package/dist/test/unit/lib/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilder/transferBuilder.js +290 -0
- package/dist/test/unit/lib/utils.d.ts +2 -0
- package/dist/test/unit/lib/utils.d.ts.map +1 -0
- package/dist/test/unit/lib/utils.js +307 -0
- package/dist/test/unit/verifyTransaction.d.ts +2 -0
- package/dist/test/unit/verifyTransaction.d.ts.map +1 -0
- package/dist/test/unit/verifyTransaction.js +703 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +12 -10
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -160
- 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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../test/unit/lib/transactionBuilder/base.ts"],"names":[],"mappings":""}
|