@bitgo-beta/sdk-coin-ton 1.0.1-beta.192 → 1.0.1-beta.1921
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 → cjs/src}/index.d.ts +1 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +2 -1
- package/dist/cjs/src/jettonToken.d.ts +19 -0
- package/dist/cjs/src/jettonToken.d.ts.map +1 -0
- package/dist/cjs/src/jettonToken.js +52 -0
- package/dist/cjs/src/lib/constants.d.ts +9 -0
- package/dist/cjs/src/lib/constants.d.ts.map +1 -0
- package/dist/cjs/src/lib/constants.js +12 -0
- package/dist/cjs/src/lib/explainTransactionWasm.d.ts +36 -0
- package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
- package/dist/cjs/src/lib/explainTransactionWasm.js +104 -0
- package/dist/cjs/src/lib/iface.d.ts +32 -0
- package/dist/cjs/src/lib/iface.d.ts.map +1 -0
- package/dist/cjs/src/lib/iface.js +3 -0
- package/dist/cjs/src/lib/index.d.ts +14 -0
- package/dist/cjs/src/lib/index.d.ts.map +1 -0
- package/dist/cjs/src/lib/index.js +61 -0
- package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
- package/dist/cjs/src/lib/keyPair.js +103 -0
- package/dist/cjs/src/lib/singleNominatorWithdrawBuilder.d.ts +17 -0
- package/dist/cjs/src/lib/singleNominatorWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/singleNominatorWithdrawBuilder.js +38 -0
- package/dist/cjs/src/lib/tokenTransaction.d.ts +16 -0
- package/dist/cjs/src/lib/tokenTransaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/tokenTransaction.js +97 -0
- package/dist/cjs/src/lib/tokenTransferBuilder.d.ts +20 -0
- package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tokenTransferBuilder.js +57 -0
- package/dist/cjs/src/lib/tonWhalesDepositBuilder.d.ts +12 -0
- package/dist/cjs/src/lib/tonWhalesDepositBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tonWhalesDepositBuilder.js +42 -0
- package/dist/cjs/src/lib/tonWhalesVestingDepositBuilder.d.ts +12 -0
- package/dist/cjs/src/lib/tonWhalesVestingDepositBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tonWhalesVestingDepositBuilder.js +37 -0
- package/dist/cjs/src/lib/tonWhalesVestingWithdrawBuilder.d.ts +12 -0
- package/dist/cjs/src/lib/tonWhalesVestingWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tonWhalesVestingWithdrawBuilder.js +37 -0
- package/dist/cjs/src/lib/tonWhalesWithdrawalBuilder.d.ts +30 -0
- package/dist/cjs/src/lib/tonWhalesWithdrawalBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tonWhalesWithdrawalBuilder.js +60 -0
- package/dist/cjs/src/lib/transaction.d.ts +42 -0
- package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/transaction.js +415 -0
- package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +27 -3
- package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilder.js +152 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.d.ts +32 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.js +100 -0
- package/dist/cjs/src/lib/transactionExplanation.d.ts +14 -0
- package/dist/cjs/src/lib/transactionExplanation.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionExplanation.js +3 -0
- package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +1 -1
- package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilder.js +21 -0
- package/dist/cjs/src/lib/utils.d.ts +41 -0
- package/dist/cjs/src/lib/utils.d.ts.map +1 -0
- package/dist/cjs/src/lib/utils.js +159 -0
- package/dist/cjs/src/register.d.ts.map +1 -0
- package/dist/cjs/src/register.js +15 -0
- package/dist/cjs/src/ton.d.ts +66 -0
- package/dist/cjs/src/ton.d.ts.map +1 -0
- package/dist/cjs/src/ton.js +542 -0
- package/dist/cjs/src/tton.d.ts.map +1 -0
- package/dist/cjs/src/tton.js +30 -0
- package/dist/cjs/test/resources/ton.d.ts +184 -0
- package/dist/cjs/test/resources/ton.d.ts.map +1 -0
- package/dist/cjs/test/resources/ton.js +208 -0
- package/dist/cjs/test/unit/explainTransactionWasm.d.ts +2 -0
- package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
- package/dist/cjs/test/unit/explainTransactionWasm.js +147 -0
- package/dist/cjs/test/unit/jettonToken.d.ts +2 -0
- package/dist/cjs/test/unit/jettonToken.d.ts.map +1 -0
- package/dist/cjs/test/unit/jettonToken.js +341 -0
- package/dist/cjs/test/unit/keyPair.d.ts +2 -0
- package/dist/cjs/test/unit/keyPair.d.ts.map +1 -0
- package/dist/cjs/test/unit/keyPair.js +55 -0
- package/dist/cjs/test/unit/singleNominatorWithdrawBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/singleNominatorWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/singleNominatorWithdrawBuilder.js +314 -0
- package/dist/cjs/test/unit/tokenTransferBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/tokenTransferBuilder.js +262 -0
- package/dist/cjs/test/unit/ton.d.ts +2 -0
- package/dist/cjs/test/unit/ton.d.ts.map +1 -0
- package/dist/cjs/test/unit/ton.js +949 -0
- package/dist/cjs/test/unit/tonWhalesDepositBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/tonWhalesDepositBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/tonWhalesDepositBuilder.js +114 -0
- package/dist/cjs/test/unit/tonWhalesVestingDepositBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/tonWhalesVestingDepositBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/tonWhalesVestingDepositBuilder.js +136 -0
- package/dist/cjs/test/unit/tonWhalesVestingWithdrawBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/tonWhalesVestingWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/tonWhalesVestingWithdrawBuilder.js +136 -0
- package/dist/cjs/test/unit/tonWhalesWithdrawalBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/tonWhalesWithdrawalBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/tonWhalesWithdrawalBuilder.js +130 -0
- package/dist/cjs/test/unit/transferBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transferBuilder.js +281 -0
- package/dist/cjs/test/unit/wasmCrossCompatibility.d.ts +2 -0
- package/dist/cjs/test/unit/wasmCrossCompatibility.d.ts.map +1 -0
- package/dist/cjs/test/unit/wasmCrossCompatibility.js +176 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/{src → esm}/index.d.ts.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/jettonToken.d.ts +19 -0
- package/dist/esm/jettonToken.d.ts.map +1 -0
- package/dist/esm/jettonToken.js +48 -0
- package/dist/esm/lib/constants.d.ts +9 -0
- package/dist/esm/lib/constants.d.ts.map +1 -0
- package/dist/esm/lib/constants.js +9 -0
- package/dist/esm/lib/explainTransactionWasm.d.ts +36 -0
- package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
- package/dist/esm/lib/explainTransactionWasm.js +99 -0
- package/dist/esm/lib/iface.d.ts +32 -0
- package/dist/esm/lib/iface.d.ts.map +1 -0
- package/dist/esm/lib/iface.js +2 -0
- package/dist/esm/lib/index.d.ts +14 -0
- package/dist/esm/lib/index.d.ts.map +1 -0
- package/dist/esm/lib/index.js +14 -0
- package/dist/esm/lib/keyPair.d.ts +25 -0
- package/dist/esm/lib/keyPair.js +63 -0
- package/dist/esm/lib/singleNominatorWithdrawBuilder.d.ts +17 -0
- package/dist/esm/lib/singleNominatorWithdrawBuilder.d.ts.map +1 -0
- package/dist/esm/lib/singleNominatorWithdrawBuilder.js +34 -0
- package/dist/esm/lib/tokenTransaction.d.ts +16 -0
- package/dist/esm/lib/tokenTransaction.d.ts.map +1 -0
- package/dist/esm/lib/tokenTransaction.js +90 -0
- package/dist/esm/lib/tokenTransferBuilder.d.ts +20 -0
- package/dist/esm/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/esm/lib/tokenTransferBuilder.js +53 -0
- package/dist/esm/lib/tonWhalesDepositBuilder.d.ts +12 -0
- package/dist/esm/lib/tonWhalesDepositBuilder.d.ts.map +1 -0
- package/dist/esm/lib/tonWhalesDepositBuilder.js +38 -0
- package/dist/esm/lib/tonWhalesVestingDepositBuilder.d.ts +12 -0
- package/dist/esm/lib/tonWhalesVestingDepositBuilder.d.ts.map +1 -0
- package/dist/esm/lib/tonWhalesVestingDepositBuilder.js +33 -0
- package/dist/esm/lib/tonWhalesVestingWithdrawBuilder.d.ts +12 -0
- package/dist/esm/lib/tonWhalesVestingWithdrawBuilder.d.ts.map +1 -0
- package/dist/esm/lib/tonWhalesVestingWithdrawBuilder.js +33 -0
- package/dist/esm/lib/tonWhalesWithdrawalBuilder.d.ts +30 -0
- package/dist/esm/lib/tonWhalesWithdrawalBuilder.d.ts.map +1 -0
- package/dist/esm/lib/tonWhalesWithdrawalBuilder.js +56 -0
- package/dist/esm/lib/transaction.d.ts +42 -0
- package/dist/esm/lib/transaction.d.ts.map +1 -0
- package/dist/esm/lib/transaction.js +408 -0
- package/dist/esm/lib/transactionBuilder.d.ts +74 -0
- package/dist/esm/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/esm/lib/transactionBuilder.js +145 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts +32 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/esm/lib/transactionBuilderFactory.js +96 -0
- package/dist/esm/lib/transactionExplanation.d.ts +14 -0
- package/dist/esm/lib/transactionExplanation.d.ts.map +1 -0
- package/dist/esm/lib/transactionExplanation.js +2 -0
- package/dist/esm/lib/transferBuilder.d.ts +9 -0
- package/dist/esm/lib/transferBuilder.d.ts.map +1 -0
- package/dist/esm/lib/transferBuilder.js +17 -0
- package/dist/esm/lib/utils.d.ts +41 -0
- package/dist/esm/lib/utils.d.ts.map +1 -0
- package/dist/esm/lib/utils.js +151 -0
- package/dist/esm/register.d.ts +3 -0
- package/dist/{src → esm}/register.d.ts.map +1 -1
- package/dist/esm/register.js +11 -0
- package/dist/esm/ton.d.ts +66 -0
- package/dist/esm/ton.d.ts.map +1 -0
- package/dist/esm/ton.js +502 -0
- package/dist/esm/tton.d.ts +22 -0
- package/dist/esm/tton.js +26 -0
- package/package.json +34 -13
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -431
- package/dist/src/lib/iface.d.ts +0 -15
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -3
- package/dist/src/lib/index.d.ts +0 -9
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -41
- package/dist/src/lib/keyPair.js +0 -93
- package/dist/src/lib/transaction.d.ts +0 -32
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -284
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -105
- package/dist/src/lib/transactionBuilderFactory.d.ts +0 -14
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilderFactory.js +0 -26
- package/dist/src/lib/transferBuilder.d.ts.map +0 -1
- package/dist/src/lib/transferBuilder.js +0 -19
- package/dist/src/lib/utils.d.ts +0 -20
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -74
- package/dist/src/register.js +0 -11
- package/dist/src/ton.d.ts +0 -34
- package/dist/src/ton.d.ts.map +0 -1
- package/dist/src/ton.js +0 -197
- package/dist/src/tton.js +0 -30
- /package/dist/{src → cjs/src}/lib/keyPair.d.ts +0 -0
- /package/dist/{src → cjs/src}/register.d.ts +0 -0
- /package/dist/{src → cjs/src}/tton.d.ts +0 -0
- /package/dist/{src → esm}/lib/keyPair.d.ts.map +0 -0
- /package/dist/{src → esm}/tton.d.ts.map +0 -0
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Transaction = void 0;
|
|
7
|
+
const tonweb_1 = __importDefault(require("tonweb"));
|
|
8
|
+
const bn_js_1 = require("bn.js");
|
|
9
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
class Transaction extends sdk_core_1.BaseTransaction {
|
|
12
|
+
constructor(coinConfig) {
|
|
13
|
+
super(coinConfig);
|
|
14
|
+
this.bounceable = false;
|
|
15
|
+
this.fromAddressBounceable = true;
|
|
16
|
+
this.toAddressBounceable = true;
|
|
17
|
+
this.isV3ContractMessage = false;
|
|
18
|
+
}
|
|
19
|
+
canSign(key) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
toBroadcastFormat() {
|
|
23
|
+
return this.finalMessage;
|
|
24
|
+
}
|
|
25
|
+
toJson() {
|
|
26
|
+
const otherFormat = new tonweb_1.default.Address(this.recipient.address).toString(true, true, !new tonweb_1.default.Address(this.recipient.address).isBounceable);
|
|
27
|
+
return {
|
|
28
|
+
id: this._id,
|
|
29
|
+
sender: this.sender,
|
|
30
|
+
destination: this.recipient.address,
|
|
31
|
+
destinationAlias: otherFormat,
|
|
32
|
+
amount: this.recipient.amount,
|
|
33
|
+
withdrawAmount: this.withdrawAmount,
|
|
34
|
+
seqno: this.seqno,
|
|
35
|
+
sub_wallet_id: this.sub_wallet_id,
|
|
36
|
+
expirationTime: this.expireTime,
|
|
37
|
+
publicKey: this.publicKey,
|
|
38
|
+
signature: this._signatures[0],
|
|
39
|
+
bounceable: this.bounceable,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
get signablePayload() {
|
|
43
|
+
return Buffer.from(this.unsignedMessage, 'hex');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Set the transaction type.
|
|
47
|
+
* @param {TransactionType} transactionType The transaction type to be set.
|
|
48
|
+
*/
|
|
49
|
+
set transactionType(transactionType) {
|
|
50
|
+
this._type = transactionType;
|
|
51
|
+
}
|
|
52
|
+
async build() {
|
|
53
|
+
if (!this.sub_wallet_id) {
|
|
54
|
+
if (this.isV3ContractMessage) {
|
|
55
|
+
this.sub_wallet_id = constants_1.VESTING_CONTRACT_WALLET_ID;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this.sub_wallet_id = constants_1.WALLET_ID;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const signingMessage = this.createSigningMessage(this.sub_wallet_id, this.seqno, this.expireTime);
|
|
62
|
+
const sendMode = 3; // default sendMode
|
|
63
|
+
signingMessage.bits.writeUint8(sendMode);
|
|
64
|
+
const outMsg = this.createOutMsg(this.recipient.address, this.recipient.amount, this.message);
|
|
65
|
+
signingMessage.refs.push(outMsg);
|
|
66
|
+
this.unsignedMessage = Buffer.from(await signingMessage.hash()).toString('hex');
|
|
67
|
+
const signature = this._signatures.length > 0 ? this._signatures[0] : Buffer.from(new Uint8Array(64)).toString('hex');
|
|
68
|
+
const finalMessage = await this.createExternalMessage(signingMessage, this.seqno, signature);
|
|
69
|
+
this.finalMessage = tonweb_1.default.utils.bytesToBase64(await finalMessage.toBoc(false));
|
|
70
|
+
const originalTxId = tonweb_1.default.utils.bytesToBase64(await finalMessage.hash());
|
|
71
|
+
this._id = originalTxId.replace(/\//g, '_').replace(/\+/g, '-');
|
|
72
|
+
}
|
|
73
|
+
createSigningMessage(walletId, seqno, expireAt) {
|
|
74
|
+
const message = new tonweb_1.default.boc.Cell();
|
|
75
|
+
message.bits.writeUint(walletId, 32);
|
|
76
|
+
// expireAt should be set as per the provided arg value, regardless of the seqno
|
|
77
|
+
message.bits.writeUint(expireAt, 32);
|
|
78
|
+
message.bits.writeUint(seqno, 32);
|
|
79
|
+
if (!this.isV3ContractMessage) {
|
|
80
|
+
message.bits.writeUint(0, 8); // op
|
|
81
|
+
}
|
|
82
|
+
return message;
|
|
83
|
+
}
|
|
84
|
+
createOutMsg(address, amount, payload) {
|
|
85
|
+
let payloadCell = new tonweb_1.default.boc.Cell();
|
|
86
|
+
if (payload) {
|
|
87
|
+
if (payload.refs) {
|
|
88
|
+
// is Cell
|
|
89
|
+
payloadCell = payload;
|
|
90
|
+
}
|
|
91
|
+
else if (typeof payload === 'string') {
|
|
92
|
+
if (payload.length > 0) {
|
|
93
|
+
if (payload.length > 24 && payload.substring(0, 8) === constants_1.WITHDRAW_OPCODE) {
|
|
94
|
+
// payload is a withdraw txn message
|
|
95
|
+
const queryId = payload.substring(8, 24);
|
|
96
|
+
const withdrawAmount = payload.substring(24);
|
|
97
|
+
/* eslint-disable-next-line no-console */
|
|
98
|
+
console.log(`payload: ${payload}, queryId: ${queryId}, withdrawAmount: ${withdrawAmount}`);
|
|
99
|
+
payloadCell.bits.writeUint(parseInt(constants_1.WITHDRAW_OPCODE, 16), 32);
|
|
100
|
+
payloadCell.bits.writeUint(parseInt(queryId, 16), 64);
|
|
101
|
+
payloadCell.bits.writeCoins(new bn_js_1.BN(withdrawAmount));
|
|
102
|
+
}
|
|
103
|
+
else if (payload.length >= 26 && payload.substring(0, 10) === constants_1.TON_WHALES_DEPOSIT_OPCODE) {
|
|
104
|
+
const queryId = payload.substring(10, 26);
|
|
105
|
+
payloadCell.bits.writeUint(parseInt(constants_1.TON_WHALES_DEPOSIT_OPCODE, 10), 32);
|
|
106
|
+
payloadCell.bits.writeUint(parseInt(queryId, 16), 64);
|
|
107
|
+
// The Ton Whales protocol requires a specific 'gas limit' field in the payload
|
|
108
|
+
// structure (OpCode -> QueryId -> GasLimit -> Amount).
|
|
109
|
+
payloadCell.bits.writeCoins(tonweb_1.default.utils.toNano('1'));
|
|
110
|
+
}
|
|
111
|
+
else if (payload.length >= 26 && payload.substring(0, 10) === constants_1.TON_WHALES_WITHDRAW_OPCODE) {
|
|
112
|
+
const queryId = payload.substring(10, 26);
|
|
113
|
+
const amountStr = payload.substring(26);
|
|
114
|
+
payloadCell.bits.writeUint(parseInt(constants_1.TON_WHALES_WITHDRAW_OPCODE, 10), 32);
|
|
115
|
+
payloadCell.bits.writeUint(new bn_js_1.BN(queryId, 16), 64);
|
|
116
|
+
// The Ton Whales protocol requires a specific 'gas limit' field in the payload
|
|
117
|
+
// structure (OpCode -> QueryId -> GasLimit -> Amount).
|
|
118
|
+
// We hardcode 1 TON here to match the Deposit implementation and ensure
|
|
119
|
+
// sufficient gas for the pool to process the request.
|
|
120
|
+
payloadCell.bits.writeCoins(tonweb_1.default.utils.toNano('1'));
|
|
121
|
+
payloadCell.bits.writeCoins(new bn_js_1.BN(amountStr));
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
payloadCell.bits.writeUint(0, 32);
|
|
125
|
+
payloadCell.bits.writeString(payload);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
payloadCell.bits.writeBytes(payload);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const orderHeader = tonweb_1.default.Contract.createInternalMessageHeader(new tonweb_1.default.Address(address), new bn_js_1.BN(amount), true, this.bounceable);
|
|
134
|
+
return tonweb_1.default.Contract.createCommonMsgInfo(orderHeader, undefined, payloadCell);
|
|
135
|
+
}
|
|
136
|
+
async createExternalMessage(signingMessage, seqno, signature) {
|
|
137
|
+
const body = new tonweb_1.default.boc.Cell();
|
|
138
|
+
body.bits.writeBytes(Buffer.from(signature, 'hex'));
|
|
139
|
+
body.writeCell(signingMessage);
|
|
140
|
+
let stateInit;
|
|
141
|
+
if (seqno === 0 && !this.isV3ContractMessage) {
|
|
142
|
+
const WalletClass = tonweb_1.default.Wallets.all['v4R2'];
|
|
143
|
+
const wallet = new WalletClass(new tonweb_1.default.HttpProvider(), {
|
|
144
|
+
publicKey: tonweb_1.default.utils.hexToBytes(this.publicKey),
|
|
145
|
+
wc: 0,
|
|
146
|
+
});
|
|
147
|
+
const deploy = await wallet.createStateInit();
|
|
148
|
+
stateInit = deploy.stateInit;
|
|
149
|
+
}
|
|
150
|
+
const header = tonweb_1.default.Contract.createExternalMessageHeader(this.sender);
|
|
151
|
+
return tonweb_1.default.Contract.createCommonMsgInfo(header, stateInit, body);
|
|
152
|
+
}
|
|
153
|
+
loadInputsAndOutputs() {
|
|
154
|
+
const outputs = [];
|
|
155
|
+
const inputs = [];
|
|
156
|
+
inputs.push({
|
|
157
|
+
address: this.sender,
|
|
158
|
+
value: this.recipient.amount,
|
|
159
|
+
coin: this._coinConfig.name,
|
|
160
|
+
});
|
|
161
|
+
outputs.push({
|
|
162
|
+
address: this.recipient.address,
|
|
163
|
+
value: this.recipient.amount,
|
|
164
|
+
coin: this._coinConfig.name,
|
|
165
|
+
});
|
|
166
|
+
this._outputs = outputs;
|
|
167
|
+
this._inputs = inputs;
|
|
168
|
+
}
|
|
169
|
+
fromRawTransaction(rawTransaction) {
|
|
170
|
+
try {
|
|
171
|
+
const cell = tonweb_1.default.boc.Cell.oneFromBoc(tonweb_1.default.utils.base64ToBytes(rawTransaction));
|
|
172
|
+
const parsed = this.parseTransaction(cell);
|
|
173
|
+
this.sender = parsed.fromAddress;
|
|
174
|
+
this.recipient = { address: parsed.toAddress, amount: parsed.value };
|
|
175
|
+
this.withdrawAmount = parsed.withdrawAmount;
|
|
176
|
+
this.seqno = parsed.seqno;
|
|
177
|
+
this.publicKey = parsed.publicKey;
|
|
178
|
+
this.expireTime = parsed.expireAt;
|
|
179
|
+
this.message = parsed.payload;
|
|
180
|
+
this._signatures.push(parsed.signature);
|
|
181
|
+
this.bounceable = parsed.bounce;
|
|
182
|
+
this.sub_wallet_id = parsed.walletId;
|
|
183
|
+
}
|
|
184
|
+
catch (e) {
|
|
185
|
+
throw new Error('invalid raw transaction');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/** @inheritDoc */
|
|
189
|
+
explainTransaction() {
|
|
190
|
+
const displayOrder = ['id', 'outputs', 'outputAmount', 'changeOutputs', 'changeAmount', 'fee', 'withdrawAmount'];
|
|
191
|
+
const outputs = [this.recipient];
|
|
192
|
+
const outputAmount = this.recipient.amount;
|
|
193
|
+
const withdrawAmount = this.withdrawAmount;
|
|
194
|
+
return {
|
|
195
|
+
displayOrder,
|
|
196
|
+
id: this.id,
|
|
197
|
+
outputs,
|
|
198
|
+
outputAmount,
|
|
199
|
+
changeOutputs: [],
|
|
200
|
+
changeAmount: '0',
|
|
201
|
+
fee: { fee: 'UNKNOWN' },
|
|
202
|
+
withdrawAmount,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
parseTransaction(cell) {
|
|
206
|
+
const slice = cell.beginParse();
|
|
207
|
+
// header
|
|
208
|
+
if (slice.loadUint(2).toNumber() !== 2)
|
|
209
|
+
throw Error('invalid header');
|
|
210
|
+
const externalSourceAddress = slice.loadAddress();
|
|
211
|
+
if (externalSourceAddress !== null)
|
|
212
|
+
throw Error('invalid externalSourceAddress');
|
|
213
|
+
const externalDestAddress = slice.loadAddress();
|
|
214
|
+
const externalImportFee = slice.loadCoins();
|
|
215
|
+
if (!externalImportFee.eq(new bn_js_1.BN(0)))
|
|
216
|
+
throw new Error('invalid externalImportFee');
|
|
217
|
+
// stateInit
|
|
218
|
+
let publicKey;
|
|
219
|
+
if (slice.loadBit()) {
|
|
220
|
+
if (slice.loadBit()) {
|
|
221
|
+
const stateInit = slice.loadRef();
|
|
222
|
+
stateInit.loadRef();
|
|
223
|
+
const data = stateInit.loadRef();
|
|
224
|
+
const seqno = data.loadUint(32).toNumber();
|
|
225
|
+
if (seqno !== 0)
|
|
226
|
+
throw new Error('invalid seqno');
|
|
227
|
+
const walletId = data.loadUint(32).toNumber();
|
|
228
|
+
if (walletId !== constants_1.WALLET_ID)
|
|
229
|
+
throw new Error('invalid wallet id');
|
|
230
|
+
const publicKeyBuf = new Uint8Array(32);
|
|
231
|
+
for (let i = 0; i < publicKeyBuf.length; i++) {
|
|
232
|
+
publicKeyBuf[i] = data.loadUint(8);
|
|
233
|
+
}
|
|
234
|
+
publicKey = Buffer.from(publicKeyBuf).toString('hex');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// body
|
|
238
|
+
const bodySlice = slice.loadBit() ? slice.loadRef() : slice;
|
|
239
|
+
return {
|
|
240
|
+
fromAddress: externalDestAddress.toString(true, true, this.fromAddressBounceable),
|
|
241
|
+
publicKey,
|
|
242
|
+
...this.parseTransactionBody(bodySlice),
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
parseTransactionBody(slice) {
|
|
246
|
+
const signature = Buffer.from(slice.loadBits(512)).toString('hex');
|
|
247
|
+
// signing message
|
|
248
|
+
const walletId = slice.loadUint(32).toNumber();
|
|
249
|
+
if (walletId !== constants_1.WALLET_ID && walletId !== constants_1.VESTING_CONTRACT_WALLET_ID)
|
|
250
|
+
throw new Error('invalid walletId');
|
|
251
|
+
const expireAt = slice.loadUint(32).toNumber();
|
|
252
|
+
const seqno = slice.loadUint(32).toNumber();
|
|
253
|
+
const op = slice.loadUint(8).toNumber();
|
|
254
|
+
if (op !== 3) {
|
|
255
|
+
if (op !== 0)
|
|
256
|
+
throw new Error('invalid op');
|
|
257
|
+
const sendMode = slice.loadUint(8).toNumber();
|
|
258
|
+
if (sendMode !== 3)
|
|
259
|
+
throw new Error('invalid sendMode');
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
this.isV3ContractMessage = true;
|
|
263
|
+
}
|
|
264
|
+
let order = slice.loadRef();
|
|
265
|
+
if (order.loadBit())
|
|
266
|
+
throw Error('invalid internal header');
|
|
267
|
+
if (!order.loadBit())
|
|
268
|
+
throw Error('invalid ihrDisabled');
|
|
269
|
+
const bounce = order.loadBit();
|
|
270
|
+
if (order.loadBit())
|
|
271
|
+
throw Error('invalid bounced');
|
|
272
|
+
const sourceAddress = order.loadAddress();
|
|
273
|
+
if (sourceAddress !== null)
|
|
274
|
+
throw Error('invalid externalSourceAddress');
|
|
275
|
+
const destAddress = order.loadAddress();
|
|
276
|
+
const value = order.loadCoins().toString();
|
|
277
|
+
if (order.loadBit())
|
|
278
|
+
throw Error('invalid currencyCollection');
|
|
279
|
+
const ihrFees = order.loadCoins();
|
|
280
|
+
if (!ihrFees.eq(new bn_js_1.BN(0)))
|
|
281
|
+
throw new Error('invalid ihrFees');
|
|
282
|
+
const fwdFees = order.loadCoins();
|
|
283
|
+
if (!fwdFees.eq(new bn_js_1.BN(0)))
|
|
284
|
+
throw new Error('invalid fwdFees');
|
|
285
|
+
const createdLt = order.loadUint(64);
|
|
286
|
+
if (!createdLt.eq(new bn_js_1.BN(0)))
|
|
287
|
+
throw new Error('invalid createdLt');
|
|
288
|
+
const createdAt = order.loadUint(32);
|
|
289
|
+
if (!createdAt.eq(new bn_js_1.BN(0)))
|
|
290
|
+
throw new Error('invalid createdAt');
|
|
291
|
+
// order stateInit
|
|
292
|
+
if (order.loadBit()) {
|
|
293
|
+
order.loadRef(); // don't parse stateInit
|
|
294
|
+
}
|
|
295
|
+
// order body
|
|
296
|
+
let payload;
|
|
297
|
+
let withdrawAmount;
|
|
298
|
+
this.transactionType = sdk_core_1.TransactionType.Send;
|
|
299
|
+
if (order.getFreeBits() > 0) {
|
|
300
|
+
if (order.loadBit()) {
|
|
301
|
+
order = order.loadRef();
|
|
302
|
+
}
|
|
303
|
+
if (order.getFreeBits() > 32) {
|
|
304
|
+
const opcode = order.loadUint(32).toNumber();
|
|
305
|
+
if (opcode === 0) {
|
|
306
|
+
const payloadBytes = order.loadBits(order.getFreeBits());
|
|
307
|
+
payload = new TextDecoder().decode(payloadBytes);
|
|
308
|
+
if (payload === 'Deposit') {
|
|
309
|
+
this.transactionType = sdk_core_1.TransactionType.TonWhalesVestingDeposit;
|
|
310
|
+
}
|
|
311
|
+
else if (payload === 'Withdraw') {
|
|
312
|
+
this.transactionType = sdk_core_1.TransactionType.TonWhalesVestingWithdrawal;
|
|
313
|
+
}
|
|
314
|
+
else if (payload === constants_1.SINGLE_NOMINATOR_WITHDRAW_ALL_COMMENT) {
|
|
315
|
+
this.transactionType = sdk_core_1.TransactionType.SingleNominatorWithdraw;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
else if (opcode === 4096) {
|
|
319
|
+
const queryId = order.loadUint(64).toNumber();
|
|
320
|
+
withdrawAmount = order.loadCoins().toNumber().toString();
|
|
321
|
+
payload = constants_1.WITHDRAW_OPCODE + queryId.toString(16).padStart(16, '0') + withdrawAmount;
|
|
322
|
+
this.transactionType = sdk_core_1.TransactionType.SingleNominatorWithdraw;
|
|
323
|
+
}
|
|
324
|
+
else if (opcode === constants_1.JETTON_TRANSFER_OPCODE) {
|
|
325
|
+
this.transactionType = sdk_core_1.TransactionType.SendToken;
|
|
326
|
+
const queryId = order.loadUint(64).toNumber();
|
|
327
|
+
if (queryId !== 0)
|
|
328
|
+
throw new Error('invalid queryId for jetton transfer');
|
|
329
|
+
const jettonAmount = order.loadCoins();
|
|
330
|
+
if (!jettonAmount.gt(new bn_js_1.BN(0)))
|
|
331
|
+
throw new Error('invalid jettonAmount');
|
|
332
|
+
const jettonRecipient = order.loadAddress();
|
|
333
|
+
if (!jettonRecipient)
|
|
334
|
+
throw new Error('invalid jettonRecipient');
|
|
335
|
+
const forwarderAddress = order.loadAddress();
|
|
336
|
+
if (!forwarderAddress)
|
|
337
|
+
throw new Error('invalid forwarderAddress');
|
|
338
|
+
order.loadBit(); // skip bit
|
|
339
|
+
const forwardTonAmount = order.loadCoins();
|
|
340
|
+
if (!forwardTonAmount.gt(new bn_js_1.BN(0)))
|
|
341
|
+
throw new Error('invalid forwardTonAmount');
|
|
342
|
+
let message = '';
|
|
343
|
+
if (order.loadBit()) {
|
|
344
|
+
order = order.loadRef();
|
|
345
|
+
const messageOpcode = order.loadUint(32).toNumber();
|
|
346
|
+
if (messageOpcode !== 0)
|
|
347
|
+
throw new Error('invalid message opcode');
|
|
348
|
+
const messageBytes = order.loadBits(order.getFreeBits());
|
|
349
|
+
message = new TextDecoder().decode(messageBytes);
|
|
350
|
+
}
|
|
351
|
+
payload = {
|
|
352
|
+
jettonAmount: jettonAmount.toString(),
|
|
353
|
+
jettonRecipient: jettonRecipient.toString(true, true, this.toAddressBounceable),
|
|
354
|
+
forwarderAddress: forwarderAddress.toString(true, true, this.fromAddressBounceable),
|
|
355
|
+
forwardTonAmount: forwardTonAmount.toString(),
|
|
356
|
+
message: message,
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
else if (opcode === parseInt(constants_1.TON_WHALES_DEPOSIT_OPCODE, 10)) {
|
|
360
|
+
this.transactionType = sdk_core_1.TransactionType.TonWhalesDeposit;
|
|
361
|
+
const queryId = order.loadUint(64).toNumber();
|
|
362
|
+
// This is the gas limit, which must be read to advance the cursor
|
|
363
|
+
// We do not need to store it
|
|
364
|
+
order.loadCoins();
|
|
365
|
+
payload = constants_1.TON_WHALES_DEPOSIT_OPCODE + queryId.toString(16).padStart(16, '0');
|
|
366
|
+
}
|
|
367
|
+
else if (opcode === parseInt(constants_1.TON_WHALES_WITHDRAW_OPCODE, 10)) {
|
|
368
|
+
this.transactionType = sdk_core_1.TransactionType.TonWhalesWithdrawal;
|
|
369
|
+
const queryId = order.loadUint(64).toNumber();
|
|
370
|
+
order.loadCoins(); // Skip Gas (Hardcoded in builder)
|
|
371
|
+
const amount = order.loadCoins();
|
|
372
|
+
withdrawAmount = amount.toString(); // Decimal String
|
|
373
|
+
// Reconstruct Payload: Decimal Op + Hex Query + Decimal Amount
|
|
374
|
+
const queryHex = new bn_js_1.BN(queryId).toString(16).padStart(16, '0');
|
|
375
|
+
payload = constants_1.TON_WHALES_WITHDRAW_OPCODE + queryHex + withdrawAmount;
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
payload = '';
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
return {
|
|
383
|
+
toAddress: destAddress.toString(true, true, this.fromAddressBounceable),
|
|
384
|
+
value,
|
|
385
|
+
bounce,
|
|
386
|
+
seqno,
|
|
387
|
+
withdrawAmount,
|
|
388
|
+
expireAt,
|
|
389
|
+
payload,
|
|
390
|
+
signature,
|
|
391
|
+
walletId,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
parseTransferStateInit(slice) {
|
|
395
|
+
if (slice === null)
|
|
396
|
+
return {};
|
|
397
|
+
slice.loadRef();
|
|
398
|
+
const data = slice.loadRef();
|
|
399
|
+
const seqno = data.loadUint(32).toNumber();
|
|
400
|
+
if (seqno !== 0)
|
|
401
|
+
throw new Error('invalid seqno');
|
|
402
|
+
const walletId = data.loadUint(32).toNumber();
|
|
403
|
+
if (walletId !== constants_1.WALLET_ID)
|
|
404
|
+
throw new Error('invalid wallet id');
|
|
405
|
+
const publicKey = new Uint8Array(32);
|
|
406
|
+
for (let i = 0; i < publicKey.length; i++) {
|
|
407
|
+
publicKey[i] = data.loadUint(8);
|
|
408
|
+
}
|
|
409
|
+
return {
|
|
410
|
+
publicKey: Buffer.from(publicKey).toString('hex'),
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
exports.Transaction = Transaction;
|
|
415
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixpQ0FBMkI7QUFHM0IsbURBQXlIO0FBR3pILDJDQVFxQjtBQUVyQixNQUFhLFdBQVksU0FBUSwwQkFBZTtJQWdCOUMsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFZO1FBQ2xCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sV0FBVyxHQUFHLElBQUksZ0JBQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQ3JFLElBQUksRUFDSixJQUFJLEVBQ0osQ0FBQyxJQUFJLGdCQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUN6RCxDQUFDO1FBQ0YsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBYTtZQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTztZQUNuQyxnQkFBZ0IsRUFBRSxXQUFXO1lBQzdCLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1B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RSxNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUNsRCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBemJELGtDQXliQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUb25XZWIgZnJvbSAndG9ud2ViJztcbmltcG9ydCB7IEJOIH0gZnJvbSAnYm4uanMnO1xuaW1wb3J0IHsgQ2VsbCB9IGZyb20gJ3RvbndlYi9kaXN0L3R5cGVzL2JvYy9jZWxsJztcblxuaW1wb3J0IHsgQmFzZUtleSwgQmFzZVRyYW5zYWN0aW9uLCBFbnRyeSwgUmVjaXBpZW50LCBUcmFuc2FjdGlvblJlY2lwaWVudCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgVHhEYXRhIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQge1xuICBXSVRIRFJBV19PUENPREUsXG4gIFdBTExFVF9JRCxcbiAgSkVUVE9OX1RSQU5TRkVSX09QQ09ERSxcbiAgVkVTVElOR19DT05UUkFDVF9XQUxMRVRfSUQsXG4gIFRPTl9XSEFMRVNfREVQT1NJVF9PUENPREUsXG4gIFRPTl9XSEFMRVNfV0lUSERSQVdfT1BDT0RFLFxuICBTSU5HTEVfTk9NSU5BVE9SX1dJVEhEUkFXX0FMTF9DT01NRU5ULFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHB1YmxpYyByZWNpcGllbnQ6IFJlY2lwaWVudDtcbiAgcHVibGljIGJvdW5jZWFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyBmcm9tQWRkcmVzc0JvdW5jZWFibGU6IGJvb2xlYW47XG4gIHB1YmxpYyB0b0FkZHJlc3NCb3VuY2VhYmxlOiBib29sZWFuO1xuICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nO1xuICBwdWJsaWMgd2l0aGRyYXdBbW91bnQ6IHN0cmluZztcbiAgc2Vxbm86IG51bWJlcjtcbiAgZXhwaXJlVGltZTogbnVtYmVyO1xuICBzZW5kZXI6IHN0cmluZztcbiAgcHVibGljS2V5OiBzdHJpbmc7XG4gIGlzVjNDb250cmFjdE1lc3NhZ2U6IGJvb2xlYW47XG4gIHN1Yl93YWxsZXRfaWQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIHVuc2lnbmVkTWVzc2FnZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZmluYWxNZXNzYWdlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLmJvdW5jZWFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmZyb21BZGRyZXNzQm91bmNlYWJsZSA9IHRydWU7XG4gICAgdGhpcy50b0FkZHJlc3NCb3VuY2VhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmlzVjNDb250cmFjdE1lc3NhZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIGNhblNpZ24oa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maW5hbE1lc3NhZ2U7XG4gIH1cblxuICB0b0pzb24oKTogVHhEYXRhIHtcbiAgICBjb25zdCBvdGhlckZvcm1hdCA9IG5ldyBUb25XZWIuQWRkcmVzcyh0aGlzLnJlY2lwaWVudC5hZGRyZXNzKS50b1N0cmluZyhcbiAgICAgIHRydWUsXG4gICAgICB0cnVlLFxuICAgICAgIW5ldyBUb25XZWIuQWRkcmVzcyh0aGlzLnJlY2lwaWVudC5hZGRyZXNzKS5pc0JvdW5jZWFibGVcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5faWQgYXMgc3RyaW5nLFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIGRlc3RpbmF0aW9uOiB0aGlzLnJlY2lwaWVudC5hZGRyZXNzLFxuICAgICAgZGVzdGluYXRpb25BbGlhczogb3RoZXJGb3JtYXQsXG4gICAgICBhbW91bnQ6IHRoaXMucmVjaXBpZW50LmFtb3VudCxcbiAgICAgIHdpdGhkcmF3QW1vdW50OiB0aGlzLndpdGhkcmF3QW1vdW50LFxuICAgICAgc2Vxbm86IHRoaXMuc2Vxbm8sXG4gICAgICBzdWJfd2FsbGV0X2lkOiB0aGlzLnN1Yl93YWxsZXRfaWQsXG4gICAgICBleHBpcmF0aW9uVGltZTogdGhpcy5leHBpcmVUaW1lLFxuICAgICAgcHVibGljS2V5OiB0aGlzLnB1YmxpY0tleSxcbiAgICAgIHNpZ25hdHVyZTogdGhpcy5fc2lnbmF0dXJlc1swXSxcbiAgICAgIGJvdW5jZWFibGU6IHRoaXMuYm91bmNlYWJsZSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IHNpZ25hYmxlUGF5bG9hZCgpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLnVuc2lnbmVkTWVzc2FnZSwgJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZS5cbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXQuXG4gICAqL1xuICBzZXQgdHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKSB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5zdWJfd2FsbGV0X2lkKSB7XG4gICAgICBpZiAodGhpcy5pc1YzQ29udHJhY3RNZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuc3ViX3dhbGxldF9pZCA9IFZFU1RJTkdfQ09OVFJBQ1RfV0FMTEVUX0lEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdWJfd2FsbGV0X2lkID0gV0FMTEVUX0lEO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBzaWduaW5nTWVzc2FnZSA9IHRoaXMuY3JlYXRlU2lnbmluZ01lc3NhZ2UodGhpcy5zdWJfd2FsbGV0X2lkLCB0aGlzLnNlcW5vLCB0aGlzLmV4cGlyZVRpbWUpO1xuICAgIGNvbnN0IHNlbmRNb2RlID0gMzsgLy8gZGVmYXVsdCBzZW5kTW9kZVxuICAgIHNpZ25pbmdNZXNzYWdlLmJpdHMud3JpdGVVaW50OChzZW5kTW9kZSk7XG4gICAgY29uc3Qgb3V0TXNnID0gdGhpcy5jcmVhdGVPdXRNc2codGhpcy5yZWNpcGllbnQuYWRkcmVzcywgdGhpcy5yZWNpcGllbnQuYW1vdW50LCB0aGlzLm1lc3NhZ2UpO1xuICAgIHNpZ25pbmdNZXNzYWdlLnJlZnMucHVzaChvdXRNc2cpO1xuICAgIHRoaXMudW5zaWduZWRNZXNzYWdlID0gQnVmZmVyLmZyb20oYXdhaXQgc2lnbmluZ01lc3NhZ2UuaGFzaCgpKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPVxuICAgICAgdGhpcy5fc2lnbmF0dXJlcy5sZW5ndGggPiAwID8gdGhpcy5fc2lnbmF0dXJlc1swXSA6IEJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KDY0KSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IGZpbmFsTWVzc2FnZSA9IGF3YWl0IHRoaXMuY3JlYXRlRXh0ZXJuYWxNZXNzYWdlKHNpZ25pbmdNZXNzYWdlLCB0aGlzLnNlcW5vLCBzaWduYXR1cmUpO1xuXG4gICAgdGhpcy5maW5hbE1lc3NhZ2UgPSBUb25XZWIudXRpbHMuYnl0ZXNUb0Jhc2U2NChhd2FpdCBmaW5hbE1lc3NhZ2UudG9Cb2MoZmFsc2UpKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsVHhJZCA9IFRvbldlYi51dGlscy5ieXRlc1RvQmFzZTY0KGF3YWl0IGZpbmFsTWVzc2FnZS5oYXNoKCkpO1xuICAgIHRoaXMuX2lkID0gb3JpZ2luYWxUeElkLnJlcGxhY2UoL1xcLy9nLCAnXycpLnJlcGxhY2UoL1xcKy9nLCAnLScpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVNpZ25pbmdNZXNzYWdlKHdhbGxldElkLCBzZXFubywgZXhwaXJlQXQpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbmV3IFRvbldlYi5ib2MuQ2VsbCgpO1xuICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQod2FsbGV0SWQsIDMyKTtcbiAgICAvLyBleHBpcmVBdCBzaG91bGQgYmUgc2V0IGFzIHBlciB0aGUgcHJvdmlkZWQgYXJnIHZhbHVlLCByZWdhcmRsZXNzIG9mIHRoZSBzZXFub1xuICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQoZXhwaXJlQXQsIDMyKTtcbiAgICBtZXNzYWdlLmJpdHMud3JpdGVVaW50KHNlcW5vLCAzMik7XG4gICAgaWYgKCF0aGlzLmlzVjNDb250cmFjdE1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2UuYml0cy53cml0ZVVpbnQoMCwgOCk7IC8vIG9wXG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZU91dE1zZyhhZGRyZXNzLCBhbW91bnQsIHBheWxvYWQpIHtcbiAgICBsZXQgcGF5bG9hZENlbGwgPSBuZXcgVG9uV2ViLmJvYy5DZWxsKCk7XG4gICAgaWYgKHBheWxvYWQpIHtcbiAgICAgIGlmIChwYXlsb2FkLnJlZnMpIHtcbiAgICAgICAgLy8gaXMgQ2VsbFxuICAgICAgICBwYXlsb2FkQ2VsbCA9IHBheWxvYWQ7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAocGF5bG9hZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHBheWxvYWQubGVuZ3RoID4gMjQgJiYgcGF5bG9hZC5zdWJzdHJpbmcoMCwgOCkgPT09IFdJVEhEUkFXX09QQ09ERSkge1xuICAgICAgICAgICAgLy8gcGF5bG9hZCBpcyBhIHdpdGhkcmF3IHR4biBtZXNzYWdlXG4gICAgICAgICAgICBjb25zdCBxdWVyeUlkID0gcGF5bG9hZC5zdWJzdHJpbmcoOCwgMjQpO1xuICAgICAgICAgICAgY29uc3Qgd2l0aGRyYXdBbW91bnQgPSBwYXlsb2FkLnN1YnN0cmluZygyNCk7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAqL1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHBheWxvYWQ6ICR7cGF5bG9hZH0sIHF1ZXJ5SWQ6ICR7cXVlcnlJZH0sIHdpdGhkcmF3QW1vdW50OiAke3dpdGhkcmF3QW1vdW50fWApO1xuICAgICAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZVVpbnQocGFyc2VJbnQoV0lUSERSQVdfT1BDT0RFLCAxNiksIDMyKTtcbiAgICAgICAgICAgIHBheWxvYWRDZWxsLmJpdHMud3JpdGVVaW50KHBhcnNlSW50KHF1ZXJ5SWQsIDE2KSwgNjQpO1xuICAgICAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZUNvaW5zKG5ldyBCTih3aXRoZHJhd0Ftb3VudCkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZC5sZW5ndGggPj0gMjYgJiYgcGF5bG9hZC5zdWJzdHJpbmcoMCwgMTApID09PSBUT05fV0hBTEVTX0RFUE9TSVRfT1BDT0RFKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUlkID0gcGF5bG9hZC5zdWJzdHJpbmcoMTAsIDI2KTtcbiAgICAgICAgICAgIHBheWxvYWRDZWxsLmJpdHMud3JpdGVVaW50KHBhcnNlSW50KFRPTl9XSEFMRVNfREVQT1NJVF9PUENPREUsIDEwKSwgMzIpO1xuICAgICAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZVVpbnQocGFyc2VJbnQocXVlcnlJZCwgMTYpLCA2NCk7XG4gICAgICAgICAgICAvLyBUaGUgVG9uIFdoYWxlcyBwcm90b2NvbCByZXF1aXJlcyBhIHNwZWNpZmljICdnYXMgbGltaXQnIGZpZWxkIGluIHRoZSBwYXlsb2FkXG4gICAgICAgICAgICAvLyBzdHJ1Y3R1cmUgKE9wQ29kZSAtPiBRdWVyeUlkIC0+IEdhc0xpbWl0IC0+IEFtb3VudCkuXG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlQ29pbnMoVG9uV2ViLnV0aWxzLnRvTmFubygnMScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWQubGVuZ3RoID49IDI2ICYmIHBheWxvYWQuc3Vic3RyaW5nKDAsIDEwKSA9PT0gVE9OX1dIQUxFU19XSVRIRFJBV19PUENPREUpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBwYXlsb2FkLnN1YnN0cmluZygxMCwgMjYpO1xuICAgICAgICAgICAgY29uc3QgYW1vdW50U3RyID0gcGF5bG9hZC5zdWJzdHJpbmcoMjYpO1xuXG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlVWludChwYXJzZUludChUT05fV0hBTEVTX1dJVEhEUkFXX09QQ09ERSwgMTApLCAzMik7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlVWludChuZXcgQk4ocXVlcnlJZCwgMTYpLCA2NCk7XG4gICAgICAgICAgICAvLyBUaGUgVG9uIFdoYWxlcyBwcm90b2NvbCByZXF1aXJlcyBhIHNwZWNpZmljICdnYXMgbGltaXQnIGZpZWxkIGluIHRoZSBwYXlsb2FkXG4gICAgICAgICAgICAvLyBzdHJ1Y3R1cmUgKE9wQ29kZSAtPiBRdWVyeUlkIC0+IEdhc0xpbWl0IC0+IEFtb3VudCkuXG4gICAgICAgICAgICAvLyBXZSBoYXJkY29kZSAxIFRPTiBoZXJlIHRvIG1hdGNoIHRoZSBEZXBvc2l0IGltcGxlbWVudGF0aW9uIGFuZCBlbnN1cmVcbiAgICAgICAgICAgIC8vIHN1ZmZpY2llbnQgZ2FzIGZvciB0aGUgcG9vbCB0byBwcm9jZXNzIHRoZSByZXF1ZXN0LlxuICAgICAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZUNvaW5zKFRvbldlYi51dGlscy50b05hbm8oJzEnKSk7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlQ29pbnMobmV3IEJOKGFtb3VudFN0cikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlVWludCgwLCAzMik7XG4gICAgICAgICAgICBwYXlsb2FkQ2VsbC5iaXRzLndyaXRlU3RyaW5nKHBheWxvYWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF5bG9hZENlbGwuYml0cy53cml0ZUJ5dGVzKHBheWxvYWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9yZGVySGVhZGVyID0gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUludGVybmFsTWVzc2FnZUhlYWRlcihcbiAgICAgIG5ldyBUb25XZWIuQWRkcmVzcyhhZGRyZXNzKSxcbiAgICAgIG5ldyBCTihhbW91bnQpLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRoaXMuYm91bmNlYWJsZVxuICAgICk7XG4gICAgcmV0dXJuIFRvbldlYi5Db250cmFjdC5jcmVhdGVDb21tb25Nc2dJbmZvKG9yZGVySGVhZGVyLCB1bmRlZmluZWQsIHBheWxvYWRDZWxsKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUV4dGVybmFsTWVzc2FnZShzaWduaW5nTWVzc2FnZTogQ2VsbCwgc2Vxbm86IG51bWJlciwgc2lnbmF0dXJlOiBzdHJpbmcpOiBQcm9taXNlPENlbGw+IHtcbiAgICBjb25zdCBib2R5ID0gbmV3IFRvbldlYi5ib2MuQ2VsbCgpO1xuXG4gICAgYm9keS5iaXRzLndyaXRlQnl0ZXMoQnVmZmVyLmZyb20oc2lnbmF0dXJlLCAnaGV4JykpO1xuICAgIGJvZHkud3JpdGVDZWxsKHNpZ25pbmdNZXNzYWdlKTtcblxuICAgIGxldCBzdGF0ZUluaXQ7XG4gICAgaWYgKHNlcW5vID09PSAwICYmICF0aGlzLmlzVjNDb250cmFjdE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IFdhbGxldENsYXNzID0gVG9uV2ViLldhbGxldHMuYWxsWyd2NFIyJ107XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0Q2xhc3MobmV3IFRvbldlYi5IdHRwUHJvdmlkZXIoKSwge1xuICAgICAgICBwdWJsaWNLZXk6IFRvbldlYi51dGlscy5oZXhUb0J5dGVzKHRoaXMucHVibGljS2V5KSxcbiAgICAgICAgd2M6IDAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcGxveSA9IGF3YWl0IHdhbGxldC5jcmVhdGVTdGF0ZUluaXQoKTtcbiAgICAgIHN0YXRlSW5pdCA9IGRlcGxveS5zdGF0ZUluaXQ7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyID0gVG9uV2ViLkNvbnRyYWN0LmNyZWF0ZUV4dGVybmFsTWVzc2FnZUhlYWRlcih0aGlzLnNlbmRlcik7XG4gICAgcmV0dXJuIFRvbldlYi5Db250cmFjdC5jcmVhdGVDb21tb25Nc2dJbmZvKGhlYWRlciwgc3RhdGVJbml0LCBib2R5KTtcbiAgfVxuXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBpbnB1dHM6IEVudHJ5W10gPSBbXTtcbiAgICBpbnB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiB0aGlzLnNlbmRlcixcbiAgICAgIHZhbHVlOiB0aGlzLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgfSk7XG4gICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IHRoaXMucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICB2YWx1ZTogdGhpcy5yZWNpcGllbnQuYW1vdW50LFxuICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMuX291dHB1dHMgPSBvdXRwdXRzO1xuICAgIHRoaXMuX2lucHV0cyA9IGlucHV0cztcbiAgfVxuXG4gIGZyb21SYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNlbGwgPSBUb25XZWIuYm9jLkNlbGwub25lRnJvbUJvYyhUb25XZWIudXRpbHMuYmFzZTY0VG9CeXRlcyhyYXdUcmFuc2FjdGlvbikpO1xuICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZVRyYW5zYWN0aW9uKGNlbGwpO1xuXG4gICAgICB0aGlzLnNlbmRlciA9IHBhcnNlZC5mcm9tQWRkcmVzcztcbiAgICAgIHRoaXMucmVjaXBpZW50ID0geyBhZGRyZXNzOiBwYXJzZWQudG9BZGRyZXNzLCBhbW91bnQ6IHBhcnNlZC52YWx1ZSB9O1xuICAgICAgdGhpcy53aXRoZHJhd0Ftb3VudCA9IHBhcnNlZC53aXRoZHJhd0Ftb3VudDtcbiAgICAgIHRoaXMuc2Vxbm8gPSBwYXJzZWQuc2Vxbm87XG4gICAgICB0aGlzLnB1YmxpY0tleSA9IHBhcnNlZC5wdWJsaWNLZXkgYXMgc3RyaW5nO1xuICAgICAgdGhpcy5leHBpcmVUaW1lID0gcGFyc2VkLmV4cGlyZUF0O1xuICAgICAgdGhpcy5tZXNzYWdlID0gcGFyc2VkLnBheWxvYWQ7XG4gICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2gocGFyc2VkLnNpZ25hdHVyZSk7XG4gICAgICB0aGlzLmJvdW5jZWFibGUgPSBwYXJzZWQuYm91bmNlO1xuICAgICAgdGhpcy5zdWJfd2FsbGV0X2lkID0gcGFyc2VkLndhbGxldElkO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFsnaWQnLCAnb3V0cHV0cycsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlT3V0cHV0cycsICdjaGFuZ2VBbW91bnQnLCAnZmVlJywgJ3dpdGhkcmF3QW1vdW50J107XG5cbiAgICBjb25zdCBvdXRwdXRzOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdID0gW3RoaXMucmVjaXBpZW50XTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSB0aGlzLnJlY2lwaWVudC5hbW91bnQ7XG4gICAgY29uc3Qgd2l0aGRyYXdBbW91bnQgPSB0aGlzLndpdGhkcmF3QW1vdW50O1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogJ1VOS05PV04nIH0sXG4gICAgICB3aXRoZHJhd0Ftb3VudCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlVHJhbnNhY3Rpb24oY2VsbDogQ2VsbCk6IGFueSB7XG4gICAgY29uc3Qgc2xpY2UgPSAoY2VsbCBhcyBhbnkpLmJlZ2luUGFyc2UoKTtcblxuICAgIC8vIGhlYWRlclxuXG4gICAgaWYgKHNsaWNlLmxvYWRVaW50KDIpLnRvTnVtYmVyKCkgIT09IDIpIHRocm93IEVycm9yKCdpbnZhbGlkIGhlYWRlcicpO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxTb3VyY2VBZGRyZXNzID0gc2xpY2UubG9hZEFkZHJlc3MoKTtcbiAgICBpZiAoZXh0ZXJuYWxTb3VyY2VBZGRyZXNzICE9PSBudWxsKSB0aHJvdyBFcnJvcignaW52YWxpZCBleHRlcm5hbFNvdXJjZUFkZHJlc3MnKTtcblxuICAgIGNvbnN0IGV4dGVybmFsRGVzdEFkZHJlc3MgPSBzbGljZS5sb2FkQWRkcmVzcygpO1xuXG4gICAgY29uc3QgZXh0ZXJuYWxJbXBvcnRGZWUgPSBzbGljZS5sb2FkQ29pbnMoKTtcbiAgICBpZiAoIWV4dGVybmFsSW1wb3J0RmVlLmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBleHRlcm5hbEltcG9ydEZlZScpO1xuXG4gICAgLy8gc3RhdGVJbml0XG5cbiAgICBsZXQgcHVibGljS2V5O1xuICAgIGlmIChzbGljZS5sb2FkQml0KCkpIHtcbiAgICAgIGlmIChzbGljZS5sb2FkQml0KCkpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVJbml0ID0gc2xpY2UubG9hZFJlZigpO1xuICAgICAgICBzdGF0ZUluaXQubG9hZFJlZigpO1xuICAgICAgICBjb25zdCBkYXRhID0gc3RhdGVJbml0LmxvYWRSZWYoKTtcbiAgICAgICAgY29uc3Qgc2Vxbm8gPSBkYXRhLmxvYWRVaW50KDMyKS50b051bWJlcigpO1xuICAgICAgICBpZiAoc2Vxbm8gIT09IDApIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZXFubycpO1xuICAgICAgICBjb25zdCB3YWxsZXRJZCA9IGRhdGEubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG4gICAgICAgIGlmICh3YWxsZXRJZCAhPT0gV0FMTEVUX0lEKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgd2FsbGV0IGlkJyk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleUJ1ZiA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwdWJsaWNLZXlCdWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBwdWJsaWNLZXlCdWZbaV0gPSBkYXRhLmxvYWRVaW50KDgpO1xuICAgICAgICB9XG4gICAgICAgIHB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKHB1YmxpY0tleUJ1ZikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGJvZHlcbiAgICBjb25zdCBib2R5U2xpY2UgPSBzbGljZS5sb2FkQml0KCkgPyBzbGljZS5sb2FkUmVmKCkgOiBzbGljZTtcblxuICAgIHJldHVybiB7XG4gICAgICBmcm9tQWRkcmVzczogZXh0ZXJuYWxEZXN0QWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLmZyb21BZGRyZXNzQm91bmNlYWJsZSksXG4gICAgICBwdWJsaWNLZXksXG4gICAgICAuLi50aGlzLnBhcnNlVHJhbnNhY3Rpb25Cb2R5KGJvZHlTbGljZSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUcmFuc2FjdGlvbkJvZHkoc2xpY2U6IGFueSk6IGFueSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20oc2xpY2UubG9hZEJpdHMoNTEyKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIC8vIHNpZ25pbmcgbWVzc2FnZVxuXG4gICAgY29uc3Qgd2FsbGV0SWQgPSBzbGljZS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICBpZiAod2FsbGV0SWQgIT09IFdBTExFVF9JRCAmJiB3YWxsZXRJZCAhPT0gVkVTVElOR19DT05UUkFDVF9XQUxMRVRfSUQpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB3YWxsZXRJZCcpO1xuXG4gICAgY29uc3QgZXhwaXJlQXQgPSBzbGljZS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcblxuICAgIGNvbnN0IHNlcW5vID0gc2xpY2UubG9hZFVpbnQoMzIpLnRvTnVtYmVyKCk7XG5cbiAgICBjb25zdCBvcCA9IHNsaWNlLmxvYWRVaW50KDgpLnRvTnVtYmVyKCk7XG4gICAgaWYgKG9wICE9PSAzKSB7XG4gICAgICBpZiAob3AgIT09IDApIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBvcCcpO1xuXG4gICAgICBjb25zdCBzZW5kTW9kZSA9IHNsaWNlLmxvYWRVaW50KDgpLnRvTnVtYmVyKCk7XG4gICAgICBpZiAoc2VuZE1vZGUgIT09IDMpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZW5kTW9kZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzVjNDb250cmFjdE1lc3NhZ2UgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBvcmRlciA9IHNsaWNlLmxvYWRSZWYoKTtcblxuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHRocm93IEVycm9yKCdpbnZhbGlkIGludGVybmFsIGhlYWRlcicpO1xuICAgIGlmICghb3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBpaHJEaXNhYmxlZCcpO1xuICAgIGNvbnN0IGJvdW5jZSA9IG9yZGVyLmxvYWRCaXQoKTtcbiAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBib3VuY2VkJyk7XG4gICAgY29uc3Qgc291cmNlQWRkcmVzcyA9IG9yZGVyLmxvYWRBZGRyZXNzKCk7XG4gICAgaWYgKHNvdXJjZUFkZHJlc3MgIT09IG51bGwpIHRocm93IEVycm9yKCdpbnZhbGlkIGV4dGVybmFsU291cmNlQWRkcmVzcycpO1xuICAgIGNvbnN0IGRlc3RBZGRyZXNzID0gb3JkZXIubG9hZEFkZHJlc3MoKTtcbiAgICBjb25zdCB2YWx1ZSA9IG9yZGVyLmxvYWRDb2lucygpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAob3JkZXIubG9hZEJpdCgpKSB0aHJvdyBFcnJvcignaW52YWxpZCBjdXJyZW5jeUNvbGxlY3Rpb24nKTtcbiAgICBjb25zdCBpaHJGZWVzID0gb3JkZXIubG9hZENvaW5zKCk7XG4gICAgaWYgKCFpaHJGZWVzLmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBpaHJGZWVzJyk7XG4gICAgY29uc3QgZndkRmVlcyA9IG9yZGVyLmxvYWRDb2lucygpO1xuICAgIGlmICghZndkRmVlcy5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZndkRmVlcycpO1xuICAgIGNvbnN0IGNyZWF0ZWRMdCA9IG9yZGVyLmxvYWRVaW50KDY0KTtcbiAgICBpZiAoIWNyZWF0ZWRMdC5lcShuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY3JlYXRlZEx0Jyk7XG4gICAgY29uc3QgY3JlYXRlZEF0ID0gb3JkZXIubG9hZFVpbnQoMzIpO1xuICAgIGlmICghY3JlYXRlZEF0LmVxKG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjcmVhdGVkQXQnKTtcblxuICAgIC8vIG9yZGVyIHN0YXRlSW5pdFxuICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHtcbiAgICAgIG9yZGVyLmxvYWRSZWYoKTsgLy8gZG9uJ3QgcGFyc2Ugc3RhdGVJbml0XG4gICAgfVxuXG4gICAgLy8gb3JkZXIgYm9keVxuICAgIGxldCBwYXlsb2FkO1xuICAgIGxldCB3aXRoZHJhd0Ftb3VudDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICAgIGlmIChvcmRlci5nZXRGcmVlQml0cygpID4gMCkge1xuICAgICAgaWYgKG9yZGVyLmxvYWRCaXQoKSkge1xuICAgICAgICBvcmRlciA9IG9yZGVyLmxvYWRSZWYoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9yZGVyLmdldEZyZWVCaXRzKCkgPiAzMikge1xuICAgICAgICBjb25zdCBvcGNvZGUgPSBvcmRlci5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICAgICAgaWYgKG9wY29kZSA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWRCeXRlcyA9IG9yZGVyLmxvYWRCaXRzKG9yZGVyLmdldEZyZWVCaXRzKCkpO1xuICAgICAgICAgIHBheWxvYWQgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUocGF5bG9hZEJ5dGVzKTtcbiAgICAgICAgICBpZiAocGF5bG9hZCA9PT0gJ0RlcG9zaXQnKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5Ub25XaGFsZXNWZXN0aW5nRGVwb3NpdDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWQgPT09ICdXaXRoZHJhdycpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25UeXBlID0gVHJhbnNhY3Rpb25UeXBlLlRvbldoYWxlc1Zlc3RpbmdXaXRoZHJhd2FsO1xuICAgICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZCA9PT0gU0lOR0xFX05PTUlOQVRPUl9XSVRIRFJBV19BTExfQ09NTUVOVCkge1xuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvblR5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2luZ2xlTm9taW5hdG9yV2l0aGRyYXc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wY29kZSA9PT0gNDA5Nikge1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBvcmRlci5sb2FkVWludCg2NCkudG9OdW1iZXIoKTtcbiAgICAgICAgICB3aXRoZHJhd0Ftb3VudCA9IG9yZGVyLmxvYWRDb2lucygpLnRvTnVtYmVyKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICBwYXlsb2FkID0gV0lUSERSQVdfT1BDT0RFICsgcXVlcnlJZC50b1N0cmluZygxNikucGFkU3RhcnQoMTYsICcwJykgKyB3aXRoZHJhd0Ftb3VudDtcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TaW5nbGVOb21pbmF0b3JXaXRoZHJhdztcbiAgICAgICAgfSBlbHNlIGlmIChvcGNvZGUgPT09IEpFVFRPTl9UUkFOU0ZFUl9PUENPREUpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW47XG4gICAgICAgICAgY29uc3QgcXVlcnlJZCA9IG9yZGVyLmxvYWRVaW50KDY0KS50b051bWJlcigpO1xuICAgICAgICAgIGlmIChxdWVyeUlkICE9PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcXVlcnlJZCBmb3IgamV0dG9uIHRyYW5zZmVyJyk7XG5cbiAgICAgICAgICBjb25zdCBqZXR0b25BbW91bnQgPSBvcmRlci5sb2FkQ29pbnMoKTtcbiAgICAgICAgICBpZiAoIWpldHRvbkFtb3VudC5ndChuZXcgQk4oMCkpKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgamV0dG9uQW1vdW50Jyk7XG5cbiAgICAgICAgICBjb25zdCBqZXR0b25SZWNpcGllbnQgPSBvcmRlci5sb2FkQWRkcmVzcygpO1xuICAgICAgICAgIGlmICghamV0dG9uUmVjaXBpZW50KSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgamV0dG9uUmVjaXBpZW50Jyk7XG5cbiAgICAgICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gb3JkZXIubG9hZEFkZHJlc3MoKTtcbiAgICAgICAgICBpZiAoIWZvcndhcmRlckFkZHJlc3MpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmb3J3YXJkZXJBZGRyZXNzJyk7XG5cbiAgICAgICAgICBvcmRlci5sb2FkQml0KCk7IC8vIHNraXAgYml0XG5cbiAgICAgICAgICBjb25zdCBmb3J3YXJkVG9uQW1vdW50ID0gb3JkZXIubG9hZENvaW5zKCk7XG4gICAgICAgICAgaWYgKCFmb3J3YXJkVG9uQW1vdW50Lmd0KG5ldyBCTigwKSkpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmb3J3YXJkVG9uQW1vdW50Jyk7XG5cbiAgICAgICAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgICAgICAgIGlmIChvcmRlci5sb2FkQml0KCkpIHtcbiAgICAgICAgICAgIG9yZGVyID0gb3JkZXIubG9hZFJlZigpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZU9wY29kZSA9IG9yZGVyLmxvYWRVaW50KDMyKS50b051bWJlcigpO1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2VPcGNvZGUgIT09IDApIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBtZXNzYWdlIG9wY29kZScpO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZUJ5dGVzID0gb3JkZXIubG9hZEJpdHMob3JkZXIuZ2V0RnJlZUJpdHMoKSk7XG4gICAgICAgICAgICBtZXNzYWdlID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG1lc3NhZ2VCeXRlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgIGpldHRvbkFtb3VudDogamV0dG9uQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBqZXR0b25SZWNpcGllbnQ6IGpldHRvblJlY2lwaWVudC50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLnRvQWRkcmVzc0JvdW5jZWFibGUpLFxuICAgICAgICAgICAgZm9yd2FyZGVyQWRkcmVzczogZm9yd2FyZGVyQWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLmZyb21BZGRyZXNzQm91bmNlYWJsZSksXG4gICAgICAgICAgICBmb3J3YXJkVG9uQW1vdW50OiBmb3J3YXJkVG9uQW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAob3Bjb2RlID09PSBwYXJzZUludChUT05fV0hBTEVTX0RFUE9TSVRfT1BDT0RFLCAxMCkpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uVHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5Ub25XaGFsZXNEZXBvc2l0O1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBvcmRlci5sb2FkVWludCg2NCkudG9OdW1iZXIoKTtcbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBnYXMgbGltaXQsIHdoaWNoIG11c3QgYmUgcmVhZCB0byBhZHZhbmNlIHRoZSBjdXJzb3JcbiAgICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byBzdG9yZSBpdFxuICAgICAgICAgIG9yZGVyLmxvYWRDb2lucygpO1xuICAgICAgICAgIHBheWxvYWQgPSBUT05fV0hBTEVTX0RFUE9TSVRfT1BDT0RFICsgcXVlcnlJZC50b1N0cmluZygxNikucGFkU3RhcnQoMTYsICcwJyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3Bjb2RlID09PSBwYXJzZUludChUT05fV0hBTEVTX1dJVEhEUkFXX09QQ09ERSwgMTApKSB7XG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvblR5cGUgPSBUcmFuc2FjdGlvblR5cGUuVG9uV2hhbGVzV2l0aGRyYXdhbDtcblxuICAgICAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBvcmRlci5sb2FkVWludCg2NCkudG9OdW1iZXIoKTtcbiAgICAgICAgICBvcmRlci5sb2FkQ29pbnMoKTsgLy8gU2tpcCBHYXMgKEhhcmRjb2RlZCBpbiBidWlsZGVyKVxuICAgICAgICAgIGNvbnN0IGFtb3VudCA9IG9yZGVyLmxvYWRDb2lucygpO1xuXG4gICAgICAgICAgd2l0aGRyYXdBbW91bnQgPSBhbW91bnQudG9TdHJpbmcoKTsgLy8gRGVjaW1hbCBTdHJpbmdcblxuICAgICAgICAgIC8vIFJlY29uc3RydWN0IFBheWxvYWQ6IERlY2ltYWwgT3AgKyBIZXggUXVlcnkgKyBEZWNpbWFsIEFtb3VudFxuICAgICAgICAgIGNvbnN0IHF1ZXJ5SGV4ID0gbmV3IEJOKHF1ZXJ5SWQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgxNiwgJzAnKTtcbiAgICAgICAgICBwYXlsb2FkID0gVE9OX1dIQUxFU19XSVRIRFJBV19PUENPREUgKyBxdWVyeUhleCArIHdpdGhkcmF3QW1vdW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBheWxvYWQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdG9BZGRyZXNzOiBkZXN0QWRkcmVzcy50b1N0cmluZyh0cnVlLCB0cnVlLCB0aGlzLmZyb21BZGRyZXNzQm91bmNlYWJsZSksXG4gICAgICB2YWx1ZSxcbiAgICAgIGJvdW5jZSxcbiAgICAgIHNlcW5vLFxuICAgICAgd2l0aGRyYXdBbW91bnQsXG4gICAgICBleHBpcmVBdCxcbiAgICAgIHBheWxvYWQsXG4gICAgICBzaWduYXR1cmUsXG4gICAgICB3YWxsZXRJZCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVRyYW5zZmVyU3RhdGVJbml0KHNsaWNlOiBhbnkpOiBhbnkge1xuICAgIGlmIChzbGljZSA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgIHNsaWNlLmxvYWRSZWYoKTtcbiAgICBjb25zdCBkYXRhID0gc2xpY2UubG9hZFJlZigpO1xuICAgIGNvbnN0IHNlcW5vID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICBpZiAoc2Vxbm8gIT09IDApIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzZXFubycpO1xuICAgIGNvbnN0IHdhbGxldElkID0gZGF0YS5sb2FkVWludCgzMikudG9OdW1iZXIoKTtcbiAgICBpZiAod2FsbGV0SWQgIT09IFdBTExFVF9JRCkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHdhbGxldCBpZCcpO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB1YmxpY0tleS5sZW5ndGg7IGkrKykge1xuICAgICAgcHVibGljS2V5W2ldID0gZGF0YS5sb2FkVWludCg4KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YmxpY0tleTogQnVmZmVyLmZyb20ocHVibGljS2V5KS50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { BaseAddress, BaseKey, BaseTransactionBuilder, FeeOptions, PublicKey as BasePublicKey, TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
|
-
import { Transaction } from './transaction';
|
|
4
1
|
import BigNumber from 'bignumber.js';
|
|
5
2
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { BaseAddress, BaseKey, BaseTransactionBuilder, FeeOptions, PublicKey as BasePublicKey, TransactionType } from '@bitgo-beta/sdk-core';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
export declare const WITHDRAW_OPCODE = "00001000";
|
|
6
6
|
export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
|
|
7
7
|
protected _transaction: Transaction;
|
|
8
8
|
private _signatures;
|
|
@@ -27,6 +27,27 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
27
27
|
* @returns {TransactionBuilder} This transaction builder
|
|
28
28
|
*/
|
|
29
29
|
sender(senderAddress: string): this;
|
|
30
|
+
/**
|
|
31
|
+
* Sets the transaction to be bounceable or not.
|
|
32
|
+
*
|
|
33
|
+
* @param {string} bounceable whether the transaction can be bounced
|
|
34
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
35
|
+
*/
|
|
36
|
+
bounceable(bounceable: boolean): this;
|
|
37
|
+
/**
|
|
38
|
+
* Sets the fromAddress to be in bounceable format or not.
|
|
39
|
+
*
|
|
40
|
+
* @param {string} bounceable whether the address format is bounceable
|
|
41
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
42
|
+
*/
|
|
43
|
+
fromAddressBounceable(bounceable: boolean): this;
|
|
44
|
+
/**
|
|
45
|
+
* Sets the toAddress to be in bounceable format or not.
|
|
46
|
+
*
|
|
47
|
+
* @param {string} bounceable whether the address format is bounceable
|
|
48
|
+
* @returns {TransactionBuilder} This transaction builder
|
|
49
|
+
*/
|
|
50
|
+
toAddressBounceable(bounceable: boolean): this;
|
|
30
51
|
fee(feeOptions: FeeOptions): this;
|
|
31
52
|
/** @inheritdoc */
|
|
32
53
|
protected fromImplementation(rawTransaction: string): Transaction;
|
|
@@ -43,8 +64,11 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
|
|
|
43
64
|
/** @inheritdoc */
|
|
44
65
|
validateValue(value: BigNumber): void;
|
|
45
66
|
setMessage(msg: string): TransactionBuilder;
|
|
67
|
+
setWithdrawMessage(): TransactionBuilder;
|
|
46
68
|
sequenceNumber(number: number): TransactionBuilder;
|
|
47
69
|
expireTime(number: number): TransactionBuilder;
|
|
48
70
|
publicKey(key: string): TransactionBuilder;
|
|
71
|
+
isV3ContractMessage(bool: boolean): TransactionBuilder;
|
|
72
|
+
subWalletId(id: number): TransactionBuilder;
|
|
49
73
|
}
|
|
50
74
|
//# sourceMappingURL=transactionBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,OAAO,EACP,sBAAsB,EAEtB,UAAU,EACV,SAAS,IAAI,aAAa,EAE1B,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,eAAO,MAAM,eAAe,aAAa,CAAC;AAE1C,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,OAAO,CAAC,WAAW,CAAmB;gBAE1B,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK5C;;OAEG;IACH,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;IAIvD,kBAAkB;IAClB,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAKnC;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAKrC;;;;;OAKG;IACH,qBAAqB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAMhD;;;;;OAKG;IACH,mBAAmB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAU9C,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIjC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAMjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAQ3D,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAMnE,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAI/B,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAIpD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAQpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAK3C,kBAAkB,IAAI,kBAAkB;IAMxC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAKlD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB;IAK9C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAK1C,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB;IAItD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB;CAI5C"}
|