@bitgo-beta/sdk-coin-vet 1.0.1-beta.48 → 1.0.1-beta.481
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/lib/constants.d.ts +25 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +27 -2
- package/dist/src/lib/iface.d.ts +26 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +19 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +40 -2
- package/dist/src/lib/transaction/addressInitializationTransaction.d.ts +31 -0
- package/dist/src/lib/transaction/addressInitializationTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/addressInitializationTransaction.js +170 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts +26 -0
- package/dist/src/lib/transaction/burnNftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/burnNftTransaction.js +131 -0
- package/dist/src/lib/transaction/claimRewards.d.ts +41 -0
- package/dist/src/lib/transaction/claimRewards.d.ts.map +1 -0
- package/dist/src/lib/transaction/claimRewards.js +210 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.d.ts +27 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/delegateClauseTransaction.js +156 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts +26 -0
- package/dist/src/lib/transaction/exitDelegation.d.ts.map +1 -0
- package/dist/src/lib/transaction/exitDelegation.js +136 -0
- package/dist/src/lib/transaction/flushTokenTransaction.d.ts +20 -0
- package/dist/src/lib/transaction/flushTokenTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/flushTokenTransaction.js +98 -0
- package/dist/src/lib/transaction/nftTransaction.d.ts +17 -0
- package/dist/src/lib/transaction/nftTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/nftTransaction.js +108 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.d.ts +27 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/stakeClauseTransaction.js +158 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts +31 -0
- package/dist/src/lib/transaction/stakingTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/stakingTransaction.js +169 -0
- package/dist/src/lib/transaction/tokenTransaction.d.ts +14 -0
- package/dist/src/lib/transaction/tokenTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/tokenTransaction.js +95 -0
- package/dist/src/lib/transaction/transaction.d.ts +18 -28
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +97 -57
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts +78 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/addressInitializationBuilder.js +158 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts +59 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/burnNftBuilder.js +118 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts +57 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/claimRewardsBuilder.js +142 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts +66 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/delegateTxnBuilder.js +120 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts +58 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/exitDelegationBuilder.js +115 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts +66 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/flushTokenTransactionBuilder.js +129 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts +23 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/nftTransactionBuilder.js +93 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts +73 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/stakeClauseTxnBuilder.js +146 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts +73 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/stakingBuilder.js +147 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts +21 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/tokenTransactionBuilder.js +70 -0
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts +10 -9
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder/transactionBuilder.js +25 -19
- package/dist/src/lib/transactionBuilderFactory.d.ts +52 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +115 -1
- package/dist/src/lib/types.d.ts +24 -0
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/lib/types.js +1 -1
- package/dist/src/lib/utils.d.ts +98 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +262 -8
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +9 -1
- package/dist/src/vet.d.ts +80 -2
- package/dist/src/vet.d.ts.map +1 -1
- package/dist/src/vet.js +478 -8
- package/dist/src/vetNFTCollection.d.ts +18 -0
- package/dist/src/vetNFTCollection.d.ts.map +1 -0
- package/dist/src/vetNFTCollection.js +52 -0
- package/dist/src/vetToken.d.ts +19 -0
- package/dist/src/vetToken.d.ts.map +1 -0
- package/dist/src/vetToken.js +52 -0
- package/dist/test/resources/vet.d.ts +70 -0
- package/dist/test/resources/vet.d.ts.map +1 -0
- package/dist/test/resources/vet.js +125 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/addressInitializationBuilder.js +141 -0
- package/dist/test/transactionBuilder/burnNftBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/burnNftBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/burnNftBuilder.js +154 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/claimRewardsBuilder.js +246 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/delegateClauseTxnBuilder.js +173 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/exitDelegationBuilder.js +154 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/flushTokenTransactionBuilder.js +132 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/nftTransactionBuilder.js +242 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/stakeClauseTransactionBuilder.js +248 -0
- package/dist/test/transactionBuilder/stakingTransaction.d.ts +2 -0
- package/dist/test/transactionBuilder/stakingTransaction.d.ts.map +1 -0
- package/dist/test/transactionBuilder/stakingTransaction.js +250 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/tokenTransactionBuilder.js +249 -0
- package/dist/test/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/transactionBuilder/transferBuilder.js +214 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +181 -0
- package/dist/test/unit/stakingFlowE2E.d.ts +2 -0
- package/dist/test/unit/stakingFlowE2E.d.ts.map +1 -0
- package/dist/test/unit/stakingFlowE2E.js +229 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +106 -0
- package/dist/test/unit/vet.d.ts +2 -0
- package/dist/test/unit/vet.d.ts.map +1 -0
- package/dist/test/unit/vet.js +251 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +16 -10
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -34
|
@@ -0,0 +1,229 @@
|
|
|
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 statics_1 = require("@bitgo-beta/statics");
|
|
41
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
42
|
+
const lib_1 = require("../../src/lib");
|
|
43
|
+
const testData = __importStar(require("../resources/vet"));
|
|
44
|
+
describe('VET Staking Flow - End-to-End Test', function () {
|
|
45
|
+
const coinConfig = statics_1.coins.get('tvet');
|
|
46
|
+
const factory = new lib_1.TransactionBuilderFactory(coinConfig);
|
|
47
|
+
// Test data
|
|
48
|
+
const stakingContractAddress = testData.STAKING_CONTRACT_ADDRESS;
|
|
49
|
+
const amountToStake = '1000000000000000000'; // 1 VET in wei
|
|
50
|
+
const amountToStakeHex = '0xde0b6b3a7640000'; // Same amount in hex
|
|
51
|
+
const levelId = testData.STAKING_LEVEL_ID;
|
|
52
|
+
const autorenew = testData.STAKING_AUTORENEW;
|
|
53
|
+
const senderAddress = '0x9378c12BD7502A11F770a5C1F223c959B2805dA9';
|
|
54
|
+
const feePayerAddress = '0xdc9fef0b84a0ccf3f1bd4b84e41743e3e051a083';
|
|
55
|
+
// Mock signatures for testing (these would come from actual signing in real scenario)
|
|
56
|
+
const mockSenderSignature = Buffer.from(testData.senderSig, 'hex');
|
|
57
|
+
const mockFeePayerSignature = Buffer.from(testData.feePayerSig, 'hex');
|
|
58
|
+
describe('Complete Staking Transaction Flow', function () {
|
|
59
|
+
it('should build, sign, and serialize a complete staking transaction with fee delegation', async function () {
|
|
60
|
+
// Step 1: Build the staking transaction
|
|
61
|
+
const stakingBuilder = factory.getStakingBuilder();
|
|
62
|
+
stakingBuilder
|
|
63
|
+
.stakingContractAddress(stakingContractAddress)
|
|
64
|
+
.amountToStake(amountToStake)
|
|
65
|
+
.levelId(levelId)
|
|
66
|
+
.sender(senderAddress)
|
|
67
|
+
.chainTag(0x27) // Testnet chain tag
|
|
68
|
+
.blockRef('0x014ead140e77bbc1')
|
|
69
|
+
.expiration(64)
|
|
70
|
+
.gas(100000)
|
|
71
|
+
.gasPriceCoef(128)
|
|
72
|
+
.nonce('12345');
|
|
73
|
+
stakingBuilder.addFeePayerAddress(feePayerAddress);
|
|
74
|
+
const unsignedTx = await stakingBuilder.build();
|
|
75
|
+
should_1.default.exist(unsignedTx);
|
|
76
|
+
unsignedTx.should.be.instanceof(lib_1.StakingTransaction);
|
|
77
|
+
const stakingTx = unsignedTx;
|
|
78
|
+
// Verify transaction structure
|
|
79
|
+
stakingTx.type.should.equal(sdk_core_1.TransactionType.ContractCall);
|
|
80
|
+
stakingTx.stakingContractAddress.should.equal(stakingContractAddress);
|
|
81
|
+
stakingTx.amountToStake.should.equal(amountToStake);
|
|
82
|
+
stakingTx.levelId.should.equal(levelId);
|
|
83
|
+
stakingTx.autorenew.should.equal(autorenew);
|
|
84
|
+
should_1.default.exist(stakingTx.rawTransaction);
|
|
85
|
+
should_1.default.exist(stakingTx.rawTransaction.body);
|
|
86
|
+
// This is the critical test - ensure reserved.features = 1 for ContractCall type
|
|
87
|
+
should_1.default.exist(stakingTx.rawTransaction.body.reserved);
|
|
88
|
+
stakingTx.rawTransaction.body.reserved.should.have.property('features', 1);
|
|
89
|
+
// Step 3: Add sender signature
|
|
90
|
+
stakingTx.addSenderSignature(mockSenderSignature);
|
|
91
|
+
should_1.default.exist(stakingTx.senderSignature);
|
|
92
|
+
Buffer.from(stakingTx.senderSignature).should.eql(mockSenderSignature);
|
|
93
|
+
// Step 4: Add fee payer signature
|
|
94
|
+
stakingTx.addFeePayerSignature(mockFeePayerSignature);
|
|
95
|
+
should_1.default.exist(stakingTx.feePayerSignature);
|
|
96
|
+
Buffer.from(stakingTx.feePayerSignature).should.eql(mockFeePayerSignature);
|
|
97
|
+
// Step 5: Generate transaction ID
|
|
98
|
+
// This should NOT throw "not signed transaction: id unavailable" error anymore
|
|
99
|
+
const transactionId = stakingTx.id;
|
|
100
|
+
should_1.default.exist(transactionId);
|
|
101
|
+
transactionId.should.not.equal('UNAVAILABLE');
|
|
102
|
+
// Step 6: Serialize the fully signed transaction
|
|
103
|
+
const serializedTx = stakingTx.toBroadcastFormat();
|
|
104
|
+
should_1.default.exist(serializedTx);
|
|
105
|
+
serializedTx.should.be.type('string');
|
|
106
|
+
serializedTx.should.startWith('0x');
|
|
107
|
+
// Step 7: Verify transaction can be deserialized
|
|
108
|
+
const deserializedBuilder = factory.from(serializedTx);
|
|
109
|
+
const deserializedTx = deserializedBuilder.transaction;
|
|
110
|
+
deserializedTx.should.be.instanceof(lib_1.StakingTransaction);
|
|
111
|
+
deserializedTx.stakingContractAddress.should.equal(stakingContractAddress);
|
|
112
|
+
// Amount is stored in hex format in deserialized transaction
|
|
113
|
+
deserializedTx.amountToStake.should.equal(amountToStakeHex);
|
|
114
|
+
deserializedTx.levelId.should.equal(levelId);
|
|
115
|
+
deserializedTx.autorenew.should.equal(autorenew);
|
|
116
|
+
// Step 8: Verify toJson output
|
|
117
|
+
const jsonOutput = stakingTx.toJson();
|
|
118
|
+
should_1.default.exist(jsonOutput);
|
|
119
|
+
jsonOutput.should.have.property('id', transactionId);
|
|
120
|
+
jsonOutput.should.have.property('stakingContractAddress', stakingContractAddress);
|
|
121
|
+
// JSON output keeps decimal format for amounts
|
|
122
|
+
jsonOutput.should.have.property('amountToStake', amountToStake);
|
|
123
|
+
jsonOutput.should.have.property('nftTokenId', levelId);
|
|
124
|
+
jsonOutput.should.have.property('autorenew', autorenew);
|
|
125
|
+
});
|
|
126
|
+
it('should handle signature combination in the correct order', async function () {
|
|
127
|
+
// This test specifically validates the signature combination flow that was failing
|
|
128
|
+
const stakingBuilder = factory.getStakingBuilder();
|
|
129
|
+
stakingBuilder
|
|
130
|
+
.stakingContractAddress(stakingContractAddress)
|
|
131
|
+
.amountToStake(amountToStake)
|
|
132
|
+
.levelId(levelId)
|
|
133
|
+
.sender(senderAddress)
|
|
134
|
+
.chainTag(0x27)
|
|
135
|
+
.blockRef('0x014ead140e77bbc1')
|
|
136
|
+
.expiration(64)
|
|
137
|
+
.gas(100000)
|
|
138
|
+
.gasPriceCoef(128)
|
|
139
|
+
.nonce('12345');
|
|
140
|
+
stakingBuilder.addFeePayerAddress(feePayerAddress);
|
|
141
|
+
const tx = (await stakingBuilder.build());
|
|
142
|
+
// Test 1: Only sender signature - should generate half-signed transaction
|
|
143
|
+
tx.addSenderSignature(mockSenderSignature);
|
|
144
|
+
// Test 2: Add fee payer signature - should generate fully signed transaction
|
|
145
|
+
tx.addFeePayerSignature(mockFeePayerSignature);
|
|
146
|
+
// Should be able to get transaction ID with both signatures
|
|
147
|
+
const fullSignedId = tx.id;
|
|
148
|
+
should_1.default.exist(fullSignedId);
|
|
149
|
+
fullSignedId.should.not.equal('UNAVAILABLE');
|
|
150
|
+
// The ID should be consistent
|
|
151
|
+
fullSignedId.should.be.type('string');
|
|
152
|
+
fullSignedId.length.should.be.greaterThan(10);
|
|
153
|
+
});
|
|
154
|
+
it('should properly set transaction type for fee delegation validation', async function () {
|
|
155
|
+
// This test ensures our fix for TransactionType.ContractCall is working
|
|
156
|
+
const stakingBuilder = factory.getStakingBuilder();
|
|
157
|
+
stakingBuilder
|
|
158
|
+
.stakingContractAddress(stakingContractAddress)
|
|
159
|
+
.amountToStake(amountToStake)
|
|
160
|
+
.levelId(levelId)
|
|
161
|
+
.sender(senderAddress)
|
|
162
|
+
.chainTag(0x27)
|
|
163
|
+
.blockRef('0x014ead140e77bbc1')
|
|
164
|
+
.expiration(64)
|
|
165
|
+
.gas(100000)
|
|
166
|
+
.gasPriceCoef(128)
|
|
167
|
+
.nonce('12345');
|
|
168
|
+
stakingBuilder.addFeePayerAddress(feePayerAddress);
|
|
169
|
+
const tx = (await stakingBuilder.build());
|
|
170
|
+
// Verify the transaction type is ContractCall
|
|
171
|
+
tx.type.should.equal(sdk_core_1.TransactionType.ContractCall);
|
|
172
|
+
// Verify fee delegation is enabled via reserved.features = 1
|
|
173
|
+
const rawTxBody = tx.rawTransaction.body;
|
|
174
|
+
should_1.default.exist(rawTxBody.reserved);
|
|
175
|
+
rawTxBody.reserved.should.have.property('features', 1);
|
|
176
|
+
// This proves that ContractCall transactions now get fee delegation support
|
|
177
|
+
});
|
|
178
|
+
it('should work with pre-built signed transaction from test data', async function () {
|
|
179
|
+
// Test using the actual signed transaction from our test data
|
|
180
|
+
const txBuilder = factory.from(testData.STAKING_TRANSACTION);
|
|
181
|
+
const tx = txBuilder.transaction;
|
|
182
|
+
// Should be able to get ID without throwing errors
|
|
183
|
+
const txId = tx.id;
|
|
184
|
+
should_1.default.exist(txId);
|
|
185
|
+
txId.should.not.equal('UNAVAILABLE');
|
|
186
|
+
// Verify all staking properties are preserved
|
|
187
|
+
// Note: The test data uses a different contract address in the transaction
|
|
188
|
+
// The actual contract address from the parsed transaction is 0x1856c533ac2d94340aaa8544d35a5c1d4a21dee7
|
|
189
|
+
tx.stakingContractAddress.should.equal('0x1856c533ac2d94340aaa8544d35a5c1d4a21dee7');
|
|
190
|
+
tx.levelId.should.equal(testData.STAKING_LEVEL_ID);
|
|
191
|
+
tx.autorenew.should.equal(testData.STAKING_AUTORENEW);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
describe('Fee Delegation Flag Tests', function () {
|
|
195
|
+
it('should set fee delegation for all staking-related transaction types', async function () {
|
|
196
|
+
const testTypes = [
|
|
197
|
+
{ type: sdk_core_1.TransactionType.ContractCall, name: 'Staking' },
|
|
198
|
+
{ type: sdk_core_1.TransactionType.StakingUnlock, name: 'Exit Delegation' },
|
|
199
|
+
{ type: sdk_core_1.TransactionType.StakingWithdraw, name: 'Burn NFT' },
|
|
200
|
+
{ type: sdk_core_1.TransactionType.StakingClaim, name: 'Claim Rewards' },
|
|
201
|
+
];
|
|
202
|
+
for (const testCase of testTypes) {
|
|
203
|
+
const stakingBuilder = factory.getStakingBuilder();
|
|
204
|
+
stakingBuilder
|
|
205
|
+
.stakingContractAddress(stakingContractAddress)
|
|
206
|
+
.amountToStake(amountToStake)
|
|
207
|
+
.levelId(levelId)
|
|
208
|
+
.sender(senderAddress)
|
|
209
|
+
.chainTag(0x27)
|
|
210
|
+
.blockRef('0x014ead140e77bbc1')
|
|
211
|
+
.expiration(64)
|
|
212
|
+
.gas(100000)
|
|
213
|
+
.gasPriceCoef(128)
|
|
214
|
+
.nonce('12345');
|
|
215
|
+
stakingBuilder.addFeePayerAddress(feePayerAddress);
|
|
216
|
+
// Manually set the transaction type to test different types
|
|
217
|
+
const tx = (await stakingBuilder.build());
|
|
218
|
+
tx._type = testCase.type;
|
|
219
|
+
// Rebuild the raw transaction to test fee delegation flag
|
|
220
|
+
await tx.buildRawTransaction();
|
|
221
|
+
// Verify fee delegation is set for all types
|
|
222
|
+
const rawTxBody = tx.rawTransaction.body;
|
|
223
|
+
should_1.default.exist(rawTxBody.reserved);
|
|
224
|
+
rawTxBody.reserved.should.have.property('features', 1);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ0Zsb3dFMkUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvc3Rha2luZ0Zsb3dFMkUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsaURBQTRDO0FBQzVDLG1EQUF1RDtBQUN2RCx1Q0FBOEU7QUFDOUUsMkRBQTZDO0FBRTdDLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtJQUM3QyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUQsWUFBWTtJQUNaLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLHdCQUF3QixDQUFDO0lBQ2pFLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLENBQUMsZUFBZTtJQUM1RCxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLENBQUMscUJBQXFCO0lBQ25FLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMxQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUM7SUFDN0MsTUFBTSxhQUFhLEdBQUcsNENBQTRDLENBQUM7SUFDbkUsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7SUFFckUsc0ZBQXNGO0lBQ3RGLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25FLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRXZFLFFBQVEsQ0FBQyxtQ0FBbUMsRUFBRTtRQUM1QyxFQUFFLENBQUMsc0ZBQXNGLEVBQUUsS0FBSztZQUM5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QyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqQyxTQUFTLENBQUMsUUFBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIFN0YWtpbmdUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWInO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5cbmRlc2NyaWJlKCdWRVQgU3Rha2luZyBGbG93IC0gRW5kLXRvLUVuZCBUZXN0JywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0dmV0Jyk7XG4gIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcblxuICAvLyBUZXN0IGRhdGFcbiAgY29uc3Qgc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyA9IHRlc3REYXRhLlNUQUtJTkdfQ09OVFJBQ1RfQUREUkVTUztcbiAgY29uc3QgYW1vdW50VG9TdGFrZSA9ICcxMDAwMDAwMDAwMDAwMDAwMDAwJzsgLy8gMSBWRVQgaW4gd2VpXG4gIGNvbnN0IGFtb3VudFRvU3Rha2VIZXggPSAnMHhkZTBiNmIzYTc2NDAwMDAnOyAvLyBTYW1lIGFtb3VudCBpbiBoZXhcbiAgY29uc3QgbGV2ZWxJZCA9IHRlc3REYXRhLlNUQUtJTkdfTEVWRUxfSUQ7XG4gIGNvbnN0IGF1dG9yZW5ldyA9IHRlc3REYXRhLlNUQUtJTkdfQVVUT1JFTkVXO1xuICBjb25zdCBzZW5kZXJBZGRyZXNzID0gJzB4OTM3OGMxMkJENzUwMkExMUY3NzBhNUMxRjIyM2M5NTlCMjgwNWRBOSc7XG4gIGNvbnN0IGZlZVBheWVyQWRkcmVzcyA9ICcweGRjOWZlZjBiODRhMGNjZjNmMWJkNGI4NGU0MTc0M2UzZTA1MWEwODMnO1xuXG4gIC8vIE1vY2sgc2lnbmF0dXJlcyBmb3IgdGVzdGluZyAodGhlc2Ugd291bGQgY29tZSBmcm9tIGFjdHVhbCBzaWduaW5nIGluIHJlYWwgc2NlbmFyaW8pXG4gIGNvbnN0IG1vY2tTZW5kZXJTaWduYXR1cmUgPSBCdWZmZXIuZnJvbSh0ZXN0RGF0YS5zZW5kZXJTaWcsICdoZXgnKTtcbiAgY29uc3QgbW9ja0ZlZVBheWVyU2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVzdERhdGEuZmVlUGF5ZXJTaWcsICdoZXgnKTtcblxuICBkZXNjcmliZSgnQ29tcGxldGUgU3Rha2luZyBUcmFuc2FjdGlvbiBGbG93JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYnVpbGQsIHNpZ24sIGFuZCBzZXJpYWxpemUgYSBjb21wbGV0ZSBzdGFraW5nIHRyYW5zYWN0aW9uIHdpdGggZmVlIGRlbGVnYXRpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTdGVwIDE6IEJ1aWxkIHRoZSBzdGFraW5nIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzdGFraW5nQnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0J1aWxkZXIoKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAuY2hhaW5UYWcoMHgyNykgLy8gVGVzdG5ldCBjaGFpbiB0YWdcbiAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZFR4ID0gYXdhaXQgc3Rha2luZ0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdCh1bnNpZ25lZFR4KTtcbiAgICAgIHVuc2lnbmVkVHguc2hvdWxkLmJlLmluc3RhbmNlb2YoU3Rha2luZ1RyYW5zYWN0aW9uKTtcblxuICAgICAgY29uc3Qgc3Rha2luZ1R4ID0gdW5zaWduZWRUeCBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmVcbiAgICAgIHN0YWtpbmdUeC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgIHN0YWtpbmdUeC5zdGFraW5nQ29udHJhY3RBZGRyZXNzLnNob3VsZC5lcXVhbChzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIHN0YWtpbmdUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlKTtcbiAgICAgIHN0YWtpbmdUeC5sZXZlbElkLnNob3VsZC5lcXVhbChsZXZlbElkKTtcbiAgICAgIHN0YWtpbmdUeC5hdXRvcmVuZXcuc2hvdWxkLmVxdWFsKGF1dG9yZW5ldyk7XG5cbiAgICAgIHNob3VsZC5leGlzdChzdGFraW5nVHgucmF3VHJhbnNhY3Rpb24pO1xuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5yYXdUcmFuc2FjdGlvbi5ib2R5KTtcblxuICAgICAgLy8gVGhpcyBpcyB0aGUgY3JpdGljYWwgdGVzdCAtIGVuc3VyZSByZXNlcnZlZC5mZWF0dXJlcyA9IDEgZm9yIENvbnRyYWN0Q2FsbCB0eXBlXG4gICAgICBzaG91bGQuZXhpc3Qoc3Rha2luZ1R4LnJhd1RyYW5zYWN0aW9uLmJvZHkucmVzZXJ2ZWQpO1xuICAgICAgc3Rha2luZ1R4LnJhd1RyYW5zYWN0aW9uLmJvZHkucmVzZXJ2ZWQhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWF0dXJlcycsIDEpO1xuXG4gICAgICAvLyBTdGVwIDM6IEFkZCBzZW5kZXIgc2lnbmF0dXJlXG4gICAgICBzdGFraW5nVHguYWRkU2VuZGVyU2lnbmF0dXJlKG1vY2tTZW5kZXJTaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5zZW5kZXJTaWduYXR1cmUpO1xuICAgICAgQnVmZmVyLmZyb20oc3Rha2luZ1R4LnNlbmRlclNpZ25hdHVyZSEpLnNob3VsZC5lcWwobW9ja1NlbmRlclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFN0ZXAgNDogQWRkIGZlZSBwYXllciBzaWduYXR1cmVcbiAgICAgIHN0YWtpbmdUeC5hZGRGZWVQYXllclNpZ25hdHVyZShtb2NrRmVlUGF5ZXJTaWduYXR1cmUpO1xuICAgICAgc2hvdWxkLmV4aXN0KHN0YWtpbmdUeC5mZWVQYXllclNpZ25hdHVyZSk7XG4gICAgICBCdWZmZXIuZnJvbShzdGFraW5nVHguZmVlUGF5ZXJTaWduYXR1cmUhKS5zaG91bGQuZXFsKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFN0ZXAgNTogR2VuZXJhdGUgdHJhbnNhY3Rpb24gSURcblxuICAgICAgLy8gVGhpcyBzaG91bGQgTk9UIHRocm93IFwibm90IHNpZ25lZCB0cmFuc2FjdGlvbjogaWQgdW5hdmFpbGFibGVcIiBlcnJvciBhbnltb3JlXG4gICAgICBjb25zdCB0cmFuc2FjdGlvbklkID0gc3Rha2luZ1R4LmlkO1xuICAgICAgc2hvdWxkLmV4aXN0KHRyYW5zYWN0aW9uSWQpO1xuICAgICAgdHJhbnNhY3Rpb25JZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBTdGVwIDY6IFNlcmlhbGl6ZSB0aGUgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBzZXJpYWxpemVkVHggPSBzdGFraW5nVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHNob3VsZC5leGlzdChzZXJpYWxpemVkVHgpO1xuICAgICAgc2VyaWFsaXplZFR4LnNob3VsZC5iZS50eXBlKCdzdHJpbmcnKTtcbiAgICAgIHNlcmlhbGl6ZWRUeC5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuXG4gICAgICAvLyBTdGVwIDc6IFZlcmlmeSB0cmFuc2FjdGlvbiBjYW4gYmUgZGVzZXJpYWxpemVkXG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHNlcmlhbGl6ZWRUeCk7XG4gICAgICBjb25zdCBkZXNlcmlhbGl6ZWRUeCA9IGRlc2VyaWFsaXplZEJ1aWxkZXIudHJhbnNhY3Rpb24gYXMgU3Rha2luZ1RyYW5zYWN0aW9uO1xuXG4gICAgICBkZXNlcmlhbGl6ZWRUeC5zaG91bGQuYmUuaW5zdGFuY2VvZihTdGFraW5nVHJhbnNhY3Rpb24pO1xuICAgICAgZGVzZXJpYWxpemVkVHguc3Rha2luZ0NvbnRyYWN0QWRkcmVzcy5zaG91bGQuZXF1YWwoc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyk7XG4gICAgICAvLyBBbW91bnQgaXMgc3RvcmVkIGluIGhleCBmb3JtYXQgaW4gZGVzZXJpYWxpemVkIHRyYW5zYWN0aW9uXG4gICAgICBkZXNlcmlhbGl6ZWRUeC5hbW91bnRUb1N0YWtlLnNob3VsZC5lcXVhbChhbW91bnRUb1N0YWtlSGV4KTtcbiAgICAgIGRlc2VyaWFsaXplZFR4LmxldmVsSWQuc2hvdWxkLmVxdWFsKGxldmVsSWQpO1xuICAgICAgZGVzZXJpYWxpemVkVHguYXV0b3JlbmV3LnNob3VsZC5lcXVhbChhdXRvcmVuZXcpO1xuXG4gICAgICAvLyBTdGVwIDg6IFZlcmlmeSB0b0pzb24gb3V0cHV0XG4gICAgICBjb25zdCBqc29uT3V0cHV0ID0gc3Rha2luZ1R4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGpzb25PdXRwdXQpO1xuICAgICAganNvbk91dHB1dC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnaWQnLCB0cmFuc2FjdGlvbklkKTtcbiAgICAgIGpzb25PdXRwdXQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3N0YWtpbmdDb250cmFjdEFkZHJlc3MnLCBzdGFraW5nQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIC8vIEpTT04gb3V0cHV0IGtlZXBzIGRlY2ltYWwgZm9ybWF0IGZvciBhbW91bnRzXG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdhbW91bnRUb1N0YWtlJywgYW1vdW50VG9TdGFrZSk7XG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCduZnRUb2tlbklkJywgbGV2ZWxJZCk7XG4gICAgICBqc29uT3V0cHV0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdhdXRvcmVuZXcnLCBhdXRvcmVuZXcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2lnbmF0dXJlIGNvbWJpbmF0aW9uIGluIHRoZSBjb3JyZWN0IG9yZGVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IHNwZWNpZmljYWxseSB2YWxpZGF0ZXMgdGhlIHNpZ25hdHVyZSBjb21iaW5hdGlvbiBmbG93IHRoYXQgd2FzIGZhaWxpbmdcbiAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQnVpbGRlcigpO1xuXG4gICAgICBzdGFraW5nQnVpbGRlclxuICAgICAgICAuc3Rha2luZ0NvbnRyYWN0QWRkcmVzcyhzdGFraW5nQ29udHJhY3RBZGRyZXNzKVxuICAgICAgICAuYW1vdW50VG9TdGFrZShhbW91bnRUb1N0YWtlKVxuICAgICAgICAubGV2ZWxJZChsZXZlbElkKVxuICAgICAgICAuc2VuZGVyKHNlbmRlckFkZHJlc3MpXG4gICAgICAgIC5jaGFpblRhZygweDI3KVxuICAgICAgICAuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpXG4gICAgICAgIC5leHBpcmF0aW9uKDY0KVxuICAgICAgICAuZ2FzKDEwMDAwMClcbiAgICAgICAgLmdhc1ByaWNlQ29lZigxMjgpXG4gICAgICAgIC5ub25jZSgnMTIzNDUnKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXIuYWRkRmVlUGF5ZXJBZGRyZXNzKGZlZVBheWVyQWRkcmVzcyk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHN0YWtpbmdCdWlsZGVyLmJ1aWxkKCkpIGFzIFN0YWtpbmdUcmFuc2FjdGlvbjtcblxuICAgICAgLy8gVGVzdCAxOiBPbmx5IHNlbmRlciBzaWduYXR1cmUgLSBzaG91bGQgZ2VuZXJhdGUgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZFNlbmRlclNpZ25hdHVyZShtb2NrU2VuZGVyU2lnbmF0dXJlKTtcblxuICAgICAgLy8gVGVzdCAyOiBBZGQgZmVlIHBheWVyIHNpZ25hdHVyZSAtIHNob3VsZCBnZW5lcmF0ZSBmdWxseSBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIHR4LmFkZEZlZVBheWVyU2lnbmF0dXJlKG1vY2tGZWVQYXllclNpZ25hdHVyZSk7XG5cbiAgICAgIC8vIFNob3VsZCBiZSBhYmxlIHRvIGdldCB0cmFuc2FjdGlvbiBJRCB3aXRoIGJvdGggc2lnbmF0dXJlc1xuICAgICAgY29uc3QgZnVsbFNpZ25lZElkID0gdHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QoZnVsbFNpZ25lZElkKTtcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQubm90LmVxdWFsKCdVTkFWQUlMQUJMRScpO1xuXG4gICAgICAvLyBUaGUgSUQgc2hvdWxkIGJlIGNvbnNpc3RlbnRcbiAgICAgIGZ1bGxTaWduZWRJZC5zaG91bGQuYmUudHlwZSgnc3RyaW5nJyk7XG4gICAgICBmdWxsU2lnbmVkSWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigxMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHNldCB0cmFuc2FjdGlvbiB0eXBlIGZvciBmZWUgZGVsZWdhdGlvbiB2YWxpZGF0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhpcyB0ZXN0IGVuc3VyZXMgb3VyIGZpeCBmb3IgVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCBpcyB3b3JraW5nXG4gICAgICBjb25zdCBzdGFraW5nQnVpbGRlciA9IGZhY3RvcnkuZ2V0U3Rha2luZ0J1aWxkZXIoKTtcblxuICAgICAgc3Rha2luZ0J1aWxkZXJcbiAgICAgICAgLnN0YWtpbmdDb250cmFjdEFkZHJlc3Moc3Rha2luZ0NvbnRyYWN0QWRkcmVzcylcbiAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgLmxldmVsSWQobGV2ZWxJZClcbiAgICAgICAgLnNlbmRlcihzZW5kZXJBZGRyZXNzKVxuICAgICAgICAuY2hhaW5UYWcoMHgyNylcbiAgICAgICAgLmJsb2NrUmVmKCcweDAxNGVhZDE0MGU3N2JiYzEnKVxuICAgICAgICAuZXhwaXJhdGlvbig2NClcbiAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgIC5nYXNQcmljZUNvZWYoMTI4KVxuICAgICAgICAubm9uY2UoJzEyMzQ1Jyk7XG5cbiAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBzdGFraW5nQnVpbGRlci5idWlsZCgpKSBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gdHlwZSBpcyBDb250cmFjdENhbGxcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuXG4gICAgICAvLyBWZXJpZnkgZmVlIGRlbGVnYXRpb24gaXMgZW5hYmxlZCB2aWEgcmVzZXJ2ZWQuZmVhdHVyZXMgPSAxXG4gICAgICBjb25zdCByYXdUeEJvZHkgPSB0eC5yYXdUcmFuc2FjdGlvbi5ib2R5O1xuICAgICAgc2hvdWxkLmV4aXN0KHJhd1R4Qm9keS5yZXNlcnZlZCk7XG4gICAgICByYXdUeEJvZHkucmVzZXJ2ZWQhLnNob3VsZC5oYXZlLnByb3BlcnR5KCdmZWF0dXJlcycsIDEpO1xuXG4gICAgICAvLyBUaGlzIHByb3ZlcyB0aGF0IENvbnRyYWN0Q2FsbCB0cmFuc2FjdGlvbnMgbm93IGdldCBmZWUgZGVsZWdhdGlvbiBzdXBwb3J0XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHdvcmsgd2l0aCBwcmUtYnVpbHQgc2lnbmVkIHRyYW5zYWN0aW9uIGZyb20gdGVzdCBkYXRhJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGVzdCB1c2luZyB0aGUgYWN0dWFsIHNpZ25lZCB0cmFuc2FjdGlvbiBmcm9tIG91ciB0ZXN0IGRhdGFcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0ZXN0RGF0YS5TVEFLSU5HX1RSQU5TQUNUSU9OKTtcbiAgICAgIGNvbnN0IHR4ID0gdHhCdWlsZGVyLnRyYW5zYWN0aW9uIGFzIFN0YWtpbmdUcmFuc2FjdGlvbjtcblxuICAgICAgLy8gU2hvdWxkIGJlIGFibGUgdG8gZ2V0IElEIHdpdGhvdXQgdGhyb3dpbmcgZXJyb3JzXG4gICAgICBjb25zdCB0eElkID0gdHguaWQ7XG4gICAgICBzaG91bGQuZXhpc3QodHhJZCk7XG4gICAgICB0eElkLnNob3VsZC5ub3QuZXF1YWwoJ1VOQVZBSUxBQkxFJyk7XG5cbiAgICAgIC8vIFZlcmlmeSBhbGwgc3Rha2luZyBwcm9wZXJ0aWVzIGFyZSBwcmVzZXJ2ZWRcbiAgICAgIC8vIE5vdGU6IFRoZSB0ZXN0IGRhdGEgdXNlcyBhIGRpZmZlcmVudCBjb250cmFjdCBhZGRyZXNzIGluIHRoZSB0cmFuc2FjdGlvblxuICAgICAgLy8gVGhlIGFjdHVhbCBjb250cmFjdCBhZGRyZXNzIGZyb20gdGhlIHBhcnNlZCB0cmFuc2FjdGlvbiBpcyAweDE4NTZjNTMzYWMyZDk0MzQwYWFhODU0NGQzNWE1YzFkNGEyMWRlZTdcbiAgICAgIHR4LnN0YWtpbmdDb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKCcweDE4NTZjNTMzYWMyZDk0MzQwYWFhODU0NGQzNWE1YzFkNGEyMWRlZTcnKTtcbiAgICAgIHR4LmxldmVsSWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLlNUQUtJTkdfTEVWRUxfSUQpO1xuICAgICAgdHguYXV0b3JlbmV3LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5TVEFLSU5HX0FVVE9SRU5FVyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGZWUgRGVsZWdhdGlvbiBGbGFnIFRlc3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc2V0IGZlZSBkZWxlZ2F0aW9uIGZvciBhbGwgc3Rha2luZy1yZWxhdGVkIHRyYW5zYWN0aW9uIHR5cGVzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdFR5cGVzID0gW1xuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwsIG5hbWU6ICdTdGFraW5nJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrLCBuYW1lOiAnRXhpdCBEZWxlZ2F0aW9uJyB9LFxuICAgICAgICB7IHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nV2l0aGRyYXcsIG5hbWU6ICdCdXJuIE5GVCcgfSxcbiAgICAgICAgeyB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU3Rha2luZ0NsYWltLCBuYW1lOiAnQ2xhaW0gUmV3YXJkcycgfSxcbiAgICAgIF07XG5cbiAgICAgIGZvciAoY29uc3QgdGVzdENhc2Ugb2YgdGVzdFR5cGVzKSB7XG4gICAgICAgIGNvbnN0IHN0YWtpbmdCdWlsZGVyID0gZmFjdG9yeS5nZXRTdGFraW5nQnVpbGRlcigpO1xuICAgICAgICBzdGFraW5nQnVpbGRlclxuICAgICAgICAgIC5zdGFraW5nQ29udHJhY3RBZGRyZXNzKHN0YWtpbmdDb250cmFjdEFkZHJlc3MpXG4gICAgICAgICAgLmFtb3VudFRvU3Rha2UoYW1vdW50VG9TdGFrZSlcbiAgICAgICAgICAubGV2ZWxJZChsZXZlbElkKVxuICAgICAgICAgIC5zZW5kZXIoc2VuZGVyQWRkcmVzcylcbiAgICAgICAgICAuY2hhaW5UYWcoMHgyNylcbiAgICAgICAgICAuYmxvY2tSZWYoJzB4MDE0ZWFkMTQwZTc3YmJjMScpXG4gICAgICAgICAgLmV4cGlyYXRpb24oNjQpXG4gICAgICAgICAgLmdhcygxMDAwMDApXG4gICAgICAgICAgLmdhc1ByaWNlQ29lZigxMjgpXG4gICAgICAgICAgLm5vbmNlKCcxMjM0NScpO1xuXG4gICAgICAgIHN0YWtpbmdCdWlsZGVyLmFkZEZlZVBheWVyQWRkcmVzcyhmZWVQYXllckFkZHJlc3MpO1xuXG4gICAgICAgIC8vIE1hbnVhbGx5IHNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZSB0byB0ZXN0IGRpZmZlcmVudCB0eXBlc1xuICAgICAgICBjb25zdCB0eCA9IChhd2FpdCBzdGFraW5nQnVpbGRlci5idWlsZCgpKSBhcyBTdGFraW5nVHJhbnNhY3Rpb247XG4gICAgICAgICh0eCBhcyBhbnkpLl90eXBlID0gdGVzdENhc2UudHlwZTtcblxuICAgICAgICAvLyBSZWJ1aWxkIHRoZSByYXcgdHJhbnNhY3Rpb24gdG8gdGVzdCBmZWUgZGVsZWdhdGlvbiBmbGFnXG4gICAgICAgIGF3YWl0ICh0eCBhcyBhbnkpLmJ1aWxkUmF3VHJhbnNhY3Rpb24oKTtcblxuICAgICAgICAvLyBWZXJpZnkgZmVlIGRlbGVnYXRpb24gaXMgc2V0IGZvciBhbGwgdHlwZXNcbiAgICAgICAgY29uc3QgcmF3VHhCb2R5ID0gdHgucmF3VHJhbnNhY3Rpb24uYm9keTtcbiAgICAgICAgc2hvdWxkLmV4aXN0KHJhd1R4Qm9keS5yZXNlcnZlZCk7XG4gICAgICAgIHJhd1R4Qm9keS5yZXNlcnZlZCEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2ZlYXR1cmVzJywgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,106 @@
|
|
|
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 testData = __importStar(require("../resources/vet"));
|
|
41
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
42
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
43
|
+
describe('Vechain util library', function () {
|
|
44
|
+
describe('isValidAddress', function () {
|
|
45
|
+
it('should succeed to validate raw transactoin', function () {
|
|
46
|
+
for (const address of testData.addresses.validAddresses) {
|
|
47
|
+
should_1.default.equal(utils_1.default.isValidAddress(address), true);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
it('should fail to validate invalid addresses', function () {
|
|
51
|
+
for (const address of testData.addresses.invalidAddresses) {
|
|
52
|
+
should_1.default.doesNotThrow(() => utils_1.default.isValidAddress(address));
|
|
53
|
+
should_1.default.equal(utils_1.default.isValidAddress(address), false);
|
|
54
|
+
}
|
|
55
|
+
// @ts-expect-error Testing for missing param, should not throw an error
|
|
56
|
+
should_1.default.doesNotThrow(() => utils_1.default.isValidAddress(undefined));
|
|
57
|
+
// @ts-expect-error Testing for missing param, should return false
|
|
58
|
+
should_1.default.equal(utils_1.default.isValidAddress(undefined), false);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe('isValidBlockId', function () {
|
|
62
|
+
it('should succeed to validate valid block IDs', function () {
|
|
63
|
+
for (const blockId of testData.blockIds.validBlockIds) {
|
|
64
|
+
should_1.default.equal(utils_1.default.isValidBlockId(blockId), true);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
it('should fail to validate invalid block IDs', function () {
|
|
68
|
+
for (const blockId of testData.blockIds.invalidBlockIds) {
|
|
69
|
+
should_1.default.doesNotThrow(() => utils_1.default.isValidBlockId(blockId));
|
|
70
|
+
should_1.default.equal(utils_1.default.isValidBlockId(blockId), false);
|
|
71
|
+
}
|
|
72
|
+
// @ts-expect-error Testing for missing param, should not throw an error
|
|
73
|
+
should_1.default.doesNotThrow(() => utils_1.default.isValidBlockId(undefined));
|
|
74
|
+
// @ts-expect-error Testing for missing param, should return false
|
|
75
|
+
should_1.default.equal(utils_1.default.isValidBlockId(undefined), false);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe('isValidDeserialize', function () {
|
|
79
|
+
it('should succeed to correctly deserialize sponsored signed serialized transaction', function () {
|
|
80
|
+
const signedTxn = utils_1.default.deserializeTransaction(testData.SPONSORED_TRANSACTION);
|
|
81
|
+
should_1.default.equal(signedTxn.origin.toString().toLowerCase(), '0x7ca00e3bc8a836026c2917c6c7c6d049e52099dd');
|
|
82
|
+
should_1.default.equal(signedTxn.gasPayer.toString().toLowerCase(), '0xdc9fef0b84a0ccf3f1bd4b84e41743e3e051a083');
|
|
83
|
+
});
|
|
84
|
+
it('should succeed to correctly deserialize unsigned serialized transaction', function () {
|
|
85
|
+
const signedTxn = utils_1.default.deserializeTransaction(testData.UNSIGNED_TRANSACTION);
|
|
86
|
+
should_1.default.equal(signedTxn.isSigned, false);
|
|
87
|
+
should_1.default.equal(signedTxn.body.gas, 21000);
|
|
88
|
+
should_1.default.equal(signedTxn.body.nonce, 400496);
|
|
89
|
+
should_1.default.equal(signedTxn.body.expiration, 64);
|
|
90
|
+
should_1.default.equal(signedTxn.body.blockRef, '0x01536ce9e9fb0638');
|
|
91
|
+
});
|
|
92
|
+
it('should fail to deserialize an invalid serialized transaction', function () {
|
|
93
|
+
should_1.default.throws(() => utils_1.default.deserializeTransaction(testData.INVALID_TRANSACTION));
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
it('should get correct transaction type from clause', function () {
|
|
97
|
+
should_1.default.equal(sdk_core_1.TransactionType.Send, utils_1.default.getTransactionTypeFromClause(testData.TRANSFER_CLAUSE));
|
|
98
|
+
});
|
|
99
|
+
it('is valid public key', function () {
|
|
100
|
+
// with 0x prefix
|
|
101
|
+
should_1.default.equal(false, utils_1.default.isValidPublicKey('0x9b4e96086d111500259f9b38680b0509a405c1904da18976455a20c691d3bb07'));
|
|
102
|
+
// without 0x prefix
|
|
103
|
+
should_1.default.equal(true, utils_1.default.isValidPublicKey('029831d82c36a58a69b31177b73d852e260a37769561450dab6ed234d5d965ef0b'));
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsMkRBQTZDO0FBQzdDLGdFQUF3QztBQUN4QyxtREFBdUQ7QUFFdkQsUUFBUSxDQUFDLHNCQUFzQixFQUFFO0lBQy9CLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixFQUFFLENBQUMsNENBQTRDLEVBQUU7WUFDL0MsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRTtZQUM5QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUQsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFDRCx3RUFBd0U7WUFDeEUsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzNELGtFQUFrRTtZQUNsRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFD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SyxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ25HLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFCQUFxQixFQUFFO1FBQ3hCLGlCQUFpQjtRQUNqQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsZUFBSyxDQUFDLGdCQUFnQixDQUFDLG9FQUFvRSxDQUFDLENBQUMsQ0FBQztRQUNsSCxvQkFBb0I7UUFDcEIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGVBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDLENBQUM7SUFDbkgsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIGFzIFZldFRyYW5zYWN0aW9uIH0gZnJvbSAnQHZlY2hhaW4vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3ZldCc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmRlc2NyaWJlKCdWZWNoYWluIHV0aWwgbGlicmFyeScsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2lzVmFsaWRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2YWxpZGF0ZSByYXcgdHJhbnNhY3RvaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdGVzdERhdGEuYWRkcmVzc2VzLnZhbGlkQWRkcmVzc2VzKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdGVzdERhdGEuYWRkcmVzc2VzLmludmFsaWRBZGRyZXNzZXMpIHtcbiAgICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSk7XG4gICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUZXN0aW5nIGZvciBtaXNzaW5nIHBhcmFtLCBzaG91bGQgbm90IHRocm93IGFuIGVycm9yXG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IHV0aWxzLmlzVmFsaWRBZGRyZXNzKHVuZGVmaW5lZCkpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUZXN0aW5nIGZvciBtaXNzaW5nIHBhcmFtLCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3ModW5kZWZpbmVkKSwgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZEJsb2NrSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZhbGlkYXRlIHZhbGlkIGJsb2NrIElEcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAoY29uc3QgYmxvY2tJZCBvZiB0ZXN0RGF0YS5ibG9ja0lkcy52YWxpZEJsb2NrSWRzKSB7XG4gICAgICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZChibG9ja0lkKSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgaW52YWxpZCBibG9jayBJRHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IGJsb2NrSWQgb2YgdGVzdERhdGEuYmxvY2tJZHMuaW52YWxpZEJsb2NrSWRzKSB7XG4gICAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tJZCkpO1xuICAgICAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tJZCksIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGVzdGluZyBmb3IgbWlzc2luZyBwYXJhbSwgc2hvdWxkIG5vdCB0aHJvdyBhbiBlcnJvclxuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiB1dGlscy5pc1ZhbGlkQmxvY2tJZCh1bmRlZmluZWQpKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVGVzdGluZyBmb3IgbWlzc2luZyBwYXJhbSwgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRCbG9ja0lkKHVuZGVmaW5lZCksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWREZXNlcmlhbGl6ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgdG8gY29ycmVjdGx5IGRlc2VyaWFsaXplIHNwb25zb3JlZCBzaWduZWQgc2VyaWFsaXplZCB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25lZFR4bjogVmV0VHJhbnNhY3Rpb24gPSB1dGlscy5kZXNlcmlhbGl6ZVRyYW5zYWN0aW9uKHRlc3REYXRhLlNQT05TT1JFRF9UUkFOU0FDVElPTik7XG4gICAgICBzaG91bGQuZXF1YWwoc2lnbmVkVHhuLm9yaWdpbi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksICcweDdjYTAwZTNiYzhhODM2MDI2YzI5MTdjNmM3YzZkMDQ5ZTUyMDk5ZGQnKTtcbiAgICAgIHNob3VsZC5lcXVhbChzaWduZWRUeG4uZ2FzUGF5ZXIudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLCAnMHhkYzlmZWYwYjg0YTBjY2YzZjFiZDRiODRlNDE3NDNlM2UwNTFhMDgzJyk7XG4gICAgfSk7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIGNvcnJlY3RseSBkZXNlcmlhbGl6ZSB1bnNpZ25lZCBzZXJpYWxpemVkIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmVkVHhuOiBWZXRUcmFuc2FjdGlvbiA9IHV0aWxzLmRlc2VyaWFsaXplVHJhbnNhY3Rpb24odGVzdERhdGEuVU5TSUdORURfVFJBTlNBQ1RJT04pO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5pc1NpZ25lZCwgZmFsc2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5ib2R5LmdhcywgMjEwMDApO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5ib2R5Lm5vbmNlLCA0MDA0OTYpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNpZ25lZFR4bi5ib2R5LmV4cGlyYXRpb24sIDY0KTtcbiAgICAgIHNob3VsZC5lcXVhbChzaWduZWRUeG4uYm9keS5ibG9ja1JlZiwgJzB4MDE1MzZjZTllOWZiMDYzOCcpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCB0byBkZXNlcmlhbGl6ZSBhbiBpbnZhbGlkIHNlcmlhbGl6ZWQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IHV0aWxzLmRlc2VyaWFsaXplVHJhbnNhY3Rpb24odGVzdERhdGEuSU5WQUxJRF9UUkFOU0FDVElPTikpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdldCBjb3JyZWN0IHRyYW5zYWN0aW9uIHR5cGUgZnJvbSBjbGF1c2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kLCB1dGlscy5nZXRUcmFuc2FjdGlvblR5cGVGcm9tQ2xhdXNlKHRlc3REYXRhLlRSQU5TRkVSX0NMQVVTRSkpO1xuICB9KTtcblxuICBpdCgnaXMgdmFsaWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyB3aXRoIDB4IHByZWZpeFxuICAgIHNob3VsZC5lcXVhbChmYWxzZSwgdXRpbHMuaXNWYWxpZFB1YmxpY0tleSgnMHg5YjRlOTYwODZkMTExNTAwMjU5ZjliMzg2ODBiMDUwOWE0MDVjMTkwNGRhMTg5NzY0NTVhMjBjNjkxZDNiYjA3JykpO1xuICAgIC8vIHdpdGhvdXQgMHggcHJlZml4XG4gICAgc2hvdWxkLmVxdWFsKHRydWUsIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoJzAyOTgzMWQ4MmMzNmE1OGE2OWIzMTE3N2I3M2Q4NTJlMjYwYTM3NzY5NTYxNDUwZGFiNmVkMjM0ZDVkOTY1ZWYwYicpKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vet.d.ts","sourceRoot":"","sources":["../../../test/unit/vet.ts"],"names":[],"mappings":""}
|