@bitgo/sdk-coin-avaxp 2.1.0 → 2.2.0-hotfix.0
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/CHANGELOG.md +78 -132
- package/dist/src/avaxp.d.ts +6 -5
- package/dist/src/avaxp.d.ts.map +1 -1
- package/dist/src/avaxp.js +53 -29
- package/dist/src/constants.d.ts +10 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +12 -0
- package/dist/src/delegatorTxBuilder.d.ts +100 -0
- package/dist/src/delegatorTxBuilder.d.ts.map +1 -0
- package/dist/src/delegatorTxBuilder.js +217 -0
- package/dist/src/errors.d.ts +8 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +19 -0
- package/dist/src/iface.d.ts +19 -1
- package/dist/src/iface.d.ts.map +1 -1
- package/dist/src/iface.js +1 -1
- package/dist/src/keyPair.d.ts +39 -0
- package/dist/src/keyPair.d.ts.map +1 -0
- package/dist/src/keyPair.js +127 -0
- package/dist/src/lib/delegatorTxBuilder.d.ts +1 -9
- package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/delegatorTxBuilder.js +11 -18
- package/dist/src/lib/iface.d.ts +6 -1
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/transaction.d.ts +5 -2
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +57 -19
- package/dist/src/lib/transactionBuilder.d.ts +1 -5
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +10 -7
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +3 -6
- package/dist/src/transaction.d.ts +66 -0
- package/dist/src/transaction.d.ts.map +1 -0
- package/dist/src/transaction.js +160 -0
- package/dist/src/transactionBuilder.d.ts +83 -0
- package/dist/src/transactionBuilder.d.ts.map +1 -0
- package/dist/src/transactionBuilder.js +192 -0
- package/dist/src/transactionBuilderFactory.d.ts +22 -0
- package/dist/src/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/transactionBuilderFactory.js +49 -0
- package/dist/src/transferBuilder.d.ts +18 -0
- package/dist/src/transferBuilder.d.ts.map +1 -0
- package/dist/src/transferBuilder.js +31 -0
- package/dist/src/utils.d.ts +56 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +118 -0
- package/dist/src/validatorTxBuilder.d.ts +38 -0
- package/dist/src/validatorTxBuilder.d.ts.map +1 -0
- package/dist/src/validatorTxBuilder.js +64 -0
- package/dist/src/walletInitializationBuilder.d.ts +17 -0
- package/dist/src/walletInitializationBuilder.d.ts.map +1 -0
- package/dist/src/walletInitializationBuilder.js +31 -0
- package/dist/tsconfig.tsbuildinfo +2108 -808
- package/package.json +8 -9
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.Transaction = void 0;
|
|
26
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
27
|
+
const keyPair_1 = require("./keyPair");
|
|
28
|
+
const platformvm_1 = require("avalanche/dist/apis/platformvm");
|
|
29
|
+
const avalanche_1 = require("avalanche");
|
|
30
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
31
|
+
const createHash = __importStar(require("create-hash"));
|
|
32
|
+
const common_1 = require("avalanche/dist/common");
|
|
33
|
+
class Transaction extends sdk_core_1.BaseTransaction {
|
|
34
|
+
constructor(coinConfig) {
|
|
35
|
+
super(coinConfig);
|
|
36
|
+
this._credentials = [];
|
|
37
|
+
this._threshold = 2;
|
|
38
|
+
this._locktime = new avalanche_1.BN(0);
|
|
39
|
+
this._fromPubKeys = [];
|
|
40
|
+
this._utxos = [];
|
|
41
|
+
this._network = coinConfig.network;
|
|
42
|
+
this._assetId = utils_1.default.cb58Decode(this._network.avaxAssetID);
|
|
43
|
+
this._blockchainID = utils_1.default.cb58Decode(this._network.blockchainID);
|
|
44
|
+
this._networkID = this._network.networkID;
|
|
45
|
+
this._txFee = new avalanche_1.BN(this._network.txFee.toString());
|
|
46
|
+
}
|
|
47
|
+
get avaxPTransaction() {
|
|
48
|
+
return this._avaxpTransaction.getTransaction();
|
|
49
|
+
}
|
|
50
|
+
set avaxPTransaction(tx) {
|
|
51
|
+
this._avaxpTransaction = new platformvm_1.UnsignedTx(tx);
|
|
52
|
+
}
|
|
53
|
+
set credentials(credentials) {
|
|
54
|
+
this._credentials = credentials;
|
|
55
|
+
}
|
|
56
|
+
get credentials() {
|
|
57
|
+
return this._credentials;
|
|
58
|
+
}
|
|
59
|
+
get hasCredentials() {
|
|
60
|
+
return this._credentials !== undefined && this._credentials.length > 0;
|
|
61
|
+
}
|
|
62
|
+
/** @inheritdoc */
|
|
63
|
+
canSign({ key }) {
|
|
64
|
+
try {
|
|
65
|
+
const kp = new keyPair_1.KeyPair({ prv: key });
|
|
66
|
+
const privateKey = kp.getPrivateKey();
|
|
67
|
+
if (!privateKey)
|
|
68
|
+
return false;
|
|
69
|
+
const address = utils_1.default.parseAddress(kp.getAddress(this._network.hrp));
|
|
70
|
+
return this._fromPubKeys.find((a) => address.equals(a)) !== undefined;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Sign a avaxp transaction and update the transaction hex
|
|
78
|
+
* validator, delegator, import, exports extend baseTx
|
|
79
|
+
* unsignedTx: UnsignedTx = new UnsignedTx(baseTx) (baseTx = addValidatorTx)
|
|
80
|
+
* const tx: Tx = unsignedTx.sign(keychain) (tx is type standard signed tx)
|
|
81
|
+
* get baseTx then create new unsignedTx then sign
|
|
82
|
+
*
|
|
83
|
+
* @param {KeyPair} keyPair
|
|
84
|
+
*/
|
|
85
|
+
sign(keyPair) {
|
|
86
|
+
const prv = keyPair.getPrivateKey();
|
|
87
|
+
if (!prv) {
|
|
88
|
+
throw new sdk_core_1.SigningError('Missing private key');
|
|
89
|
+
}
|
|
90
|
+
if (!this.avaxPTransaction) {
|
|
91
|
+
throw new sdk_core_1.InvalidTransactionError('empty transaction to sign');
|
|
92
|
+
}
|
|
93
|
+
if (!this.hasCredentials) {
|
|
94
|
+
throw new sdk_core_1.InvalidTransactionError('empty credentials to sign');
|
|
95
|
+
}
|
|
96
|
+
const signature = this.createSignature(prv);
|
|
97
|
+
this._credentials.forEach((credential) => credential.addSignature(signature));
|
|
98
|
+
}
|
|
99
|
+
/** @inheritdoc */
|
|
100
|
+
/**
|
|
101
|
+
* should be of signedTx doing this with baseTx
|
|
102
|
+
*/
|
|
103
|
+
toBroadcastFormat() {
|
|
104
|
+
if (!this.avaxPTransaction) {
|
|
105
|
+
throw new sdk_core_1.InvalidTransactionError('Empty transaction data');
|
|
106
|
+
}
|
|
107
|
+
const buffer = this.hasCredentials
|
|
108
|
+
? new platformvm_1.Tx(this._avaxpTransaction, this._credentials).toBuffer()
|
|
109
|
+
: this._avaxpTransaction.toBuffer();
|
|
110
|
+
const txSerialized = utils_1.default.cb58Encode(buffer).toString();
|
|
111
|
+
return txSerialized;
|
|
112
|
+
}
|
|
113
|
+
// types - stakingTransaction, import, export
|
|
114
|
+
toJson() {
|
|
115
|
+
if (!this.avaxPTransaction) {
|
|
116
|
+
throw new sdk_core_1.InvalidTransactionError('Empty transaction data');
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
blockchain_id: utils_1.default.cb58Encode(this.avaxPTransaction.getBlockchainID()),
|
|
120
|
+
network_id: this.avaxPTransaction.getNetworkID(),
|
|
121
|
+
inputs: this.avaxPTransaction.getIns(),
|
|
122
|
+
outputs: this.avaxPTransaction.getOuts(),
|
|
123
|
+
memo: utils_1.default.bufferToString(this.avaxPTransaction.getMemo()),
|
|
124
|
+
typeID: this.avaxPTransaction.getTxType(),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
setTransaction(tx) {
|
|
128
|
+
this._avaxpTransaction = tx;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Set the transaction type
|
|
132
|
+
*
|
|
133
|
+
* @param {TransactionType} transactionType The transaction type to be set
|
|
134
|
+
*/
|
|
135
|
+
setTransactionType(transactionType) {
|
|
136
|
+
this._type = transactionType;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Returns the portion of the transaction that needs to be signed in Buffer format.
|
|
140
|
+
* Only needed for coins that support adding signatures directly (e.g. TSS).
|
|
141
|
+
*/
|
|
142
|
+
get signablePayload() {
|
|
143
|
+
const txbuff = this._avaxpTransaction.toBuffer();
|
|
144
|
+
return createHash.default('sha256').update(txbuff).digest();
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Avax wrapper to create signature and return it for credentials
|
|
148
|
+
* @param prv
|
|
149
|
+
*/
|
|
150
|
+
createSignature(prv) {
|
|
151
|
+
const ky = new platformvm_1.KeyPair(this._network.hrp, this._network.networkID.toString());
|
|
152
|
+
ky.importKey(avalanche_1.Buffer.from(prv));
|
|
153
|
+
const signval = ky.sign(avalanche_1.Buffer.from(this.signablePayload));
|
|
154
|
+
const sig = new common_1.Signature();
|
|
155
|
+
sig.fromBuffer(signval);
|
|
156
|
+
return sig;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.Transaction = Transaction;
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDhDQUFtSDtBQUNuSCx1Q0FBb0M7QUFFcEMsK0RBQWdHO0FBQ2hHLHlDQUFxRDtBQUNyRCxvREFBNEI7QUFDNUIsd0RBQTBDO0FBQzFDLGtEQUE4RDtBQUU5RCxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQWU5QyxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQWRaLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQU9qQyxlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsY0FBUyxHQUFPLElBQUksY0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLGlCQUFZLEdBQWlCLEVBQUUsQ0FBQztRQUNoQyxXQUFNLEdBQXFCLEVBQUUsQ0FBQztRQUtuQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUEyQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxhQUFhLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGNBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNqRCxDQUFD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LENBQUMsa0JBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sR0FBRyxHQUFHLElBQUksa0JBQVMsRUFBRSxDQUFDO1FBQzVCLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUFqSkQsa0NBaUpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgQXZhbGFuY2hlTmV0d29yayB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEJhc2VLZXksIFNpZ25pbmdFcnJvciwgQmFzZVRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblR5cGUsIEludmFsaWRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIFR4RGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgVW5zaWduZWRUeCwgQmFzZVR4LCBLZXlQYWlyIGFzIEtleVBhaXJBdmF4LCBUeCB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2FwaXMvcGxhdGZvcm12bSc7XG5pbXBvcnQgeyBCTiwgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICogYXMgY3JlYXRlSGFzaCBmcm9tICdjcmVhdGUtaGFzaCc7XG5pbXBvcnQgeyBDcmVkZW50aWFsLCBTaWduYXR1cmUgfSBmcm9tICdhdmFsYW5jaGUvZGlzdC9jb21tb24nO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX2F2YXhwVHJhbnNhY3Rpb246IFVuc2lnbmVkVHg7XG4gIHByaXZhdGUgX2NyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10gPSBbXTtcbiAgcHVibGljIF90eXBlOiBUcmFuc2FjdGlvblR5cGU7XG4gIHB1YmxpYyBfbmV0d29yazogQXZhbGFuY2hlTmV0d29yaztcbiAgcHVibGljIF9uZXR3b3JrSUQ6IG51bWJlcjtcbiAgcHVibGljIF9hc3NldElkOiBCdWZmZXJBdmF4O1xuICBwdWJsaWMgX2Jsb2NrY2hhaW5JRDogQnVmZmVyQXZheDtcbiAgcHVibGljIF9tZW1vPzogQnVmZmVyQXZheDtcbiAgcHVibGljIF90aHJlc2hvbGQgPSAyO1xuICBwdWJsaWMgX2xvY2t0aW1lOiBCTiA9IG5ldyBCTigwKTtcbiAgcHVibGljIF9mcm9tUHViS2V5czogQnVmZmVyQXZheFtdID0gW107XG4gIHB1YmxpYyBfdXR4b3M6IERlY29kZWRVdHhvT2JqW10gPSBbXTtcbiAgcHVibGljIF90eEZlZTogQk47XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLl9uZXR3b3JrID0gY29pbkNvbmZpZy5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcms7XG4gICAgdGhpcy5fYXNzZXRJZCA9IHV0aWxzLmNiNThEZWNvZGUodGhpcy5fbmV0d29yay5hdmF4QXNzZXRJRCk7XG4gICAgdGhpcy5fYmxvY2tjaGFpbklEID0gdXRpbHMuY2I1OERlY29kZSh0aGlzLl9uZXR3b3JrLmJsb2NrY2hhaW5JRCk7XG4gICAgdGhpcy5fbmV0d29ya0lEID0gdGhpcy5fbmV0d29yay5uZXR3b3JrSUQ7XG4gICAgdGhpcy5fdHhGZWUgPSBuZXcgQk4odGhpcy5fbmV0d29yay50eEZlZS50b1N0cmluZygpKTtcbiAgfVxuXG4gIGdldCBhdmF4UFRyYW5zYWN0aW9uKCk6IEJhc2VUeCB7XG4gICAgcmV0dXJuIHRoaXMuX2F2YXhwVHJhbnNhY3Rpb24uZ2V0VHJhbnNhY3Rpb24oKTtcbiAgfVxuXG4gIHNldCBhdmF4UFRyYW5zYWN0aW9uKHR4OiBCYXNlVHgpIHtcbiAgICB0aGlzLl9hdmF4cFRyYW5zYWN0aW9uID0gbmV3IFVuc2lnbmVkVHgodHgpO1xuICB9XG5cbiAgc2V0IGNyZWRlbnRpYWxzKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10pIHtcbiAgICB0aGlzLl9jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzO1xuICB9XG5cbiAgZ2V0IGNyZWRlbnRpYWxzKCk6IENyZWRlbnRpYWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWRlbnRpYWxzO1xuICB9XG5cbiAgZ2V0IGhhc0NyZWRlbnRpYWxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2NyZWRlbnRpYWxzLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbih7IGtleSB9OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBrcC5nZXRQcml2YXRlS2V5KCk7XG4gICAgICBpZiAoIXByaXZhdGVLZXkpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB1dGlscy5wYXJzZUFkZHJlc3Moa3AuZ2V0QWRkcmVzcyh0aGlzLl9uZXR3b3JrLmhycCkpO1xuICAgICAgcmV0dXJuIHRoaXMuX2Zyb21QdWJLZXlzLmZpbmQoKGEpID0+IGFkZHJlc3MuZXF1YWxzKGEpKSAhPT0gdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgYXZheHAgdHJhbnNhY3Rpb24gYW5kIHVwZGF0ZSB0aGUgdHJhbnNhY3Rpb24gaGV4XG4gICAqIHZhbGlkYXRvciwgZGVsZWdhdG9yLCBpbXBvcnQsIGV4cG9ydHMgZXh0ZW5kIGJhc2VUeFxuICAgKiB1bnNpZ25lZFR4OiBVbnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoYmFzZVR4KSAgKGJhc2VUeCA9IGFkZFZhbGlkYXRvclR4KVxuICAgKiBjb25zdCB0eDogVHggPSB1bnNpZ25lZFR4LnNpZ24oa2V5Y2hhaW4pICh0eCBpcyB0eXBlIHN0YW5kYXJkIHNpZ25lZCB0eClcbiAgICogZ2V0IGJhc2VUeCB0aGVuIGNyZWF0ZSBuZXcgdW5zaWduZWRUeCB0aGVuIHNpZ25cbiAgICpcbiAgICogQHBhcmFtIHtLZXlQYWlyfSBrZXlQYWlyXG4gICAqL1xuICBzaWduKGtleVBhaXI6IEtleVBhaXIpOiB2b2lkIHtcbiAgICBjb25zdCBwcnYgPSBrZXlQYWlyLmdldFByaXZhdGVLZXkoKTtcbiAgICBpZiAoIXBydikge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignTWlzc2luZyBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYXZheFBUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSB0cmFuc2FjdGlvbiB0byBzaWduJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5oYXNDcmVkZW50aWFscykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSBjcmVkZW50aWFscyB0byBzaWduJyk7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuY3JlYXRlU2lnbmF0dXJlKHBydik7XG4gICAgdGhpcy5fY3JlZGVudGlhbHMuZm9yRWFjaCgoY3JlZGVudGlhbCkgPT4gY3JlZGVudGlhbC5hZGRTaWduYXR1cmUoc2lnbmF0dXJlKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgLyoqXG4gICAqIHNob3VsZCBiZSBvZiBzaWduZWRUeCBkb2luZyB0aGlzIHdpdGggYmFzZVR4XG4gICAqL1xuICB0b0Jyb2FkY2FzdEZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5hdmF4UFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uIGRhdGEnKTtcbiAgICB9XG4gICAgY29uc3QgYnVmZmVyID0gdGhpcy5oYXNDcmVkZW50aWFsc1xuICAgICAgPyBuZXcgVHgodGhpcy5fYXZheHBUcmFuc2FjdGlvbiwgdGhpcy5fY3JlZGVudGlhbHMpLnRvQnVmZmVyKClcbiAgICAgIDogdGhpcy5fYXZheHBUcmFuc2FjdGlvbi50b0J1ZmZlcigpO1xuICAgIGNvbnN0IHR4U2VyaWFsaXplZCA9IHV0aWxzLmNiNThFbmNvZGUoYnVmZmVyKS50b1N0cmluZygpO1xuICAgIHJldHVybiB0eFNlcmlhbGl6ZWQ7XG4gIH1cblxuICAvLyB0eXBlcyAtIHN0YWtpbmdUcmFuc2FjdGlvbiwgaW1wb3J0LCBleHBvcnRcbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLmF2YXhQVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24gZGF0YScpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYmxvY2tjaGFpbl9pZDogdXRpbHMuY2I1OEVuY29kZSh0aGlzLmF2YXhQVHJhbnNhY3Rpb24uZ2V0QmxvY2tjaGFpbklEKCkpLFxuICAgICAgbmV0d29ya19pZDogdGhpcy5hdmF4UFRyYW5zYWN0aW9uLmdldE5ldHdvcmtJRCgpLFxuICAgICAgaW5wdXRzOiB0aGlzLmF2YXhQVHJhbnNhY3Rpb24uZ2V0SW5zKCksXG4gICAgICBvdXRwdXRzOiB0aGlzLmF2YXhQVHJhbnNhY3Rpb24uZ2V0T3V0cygpLFxuICAgICAgbWVtbzogdXRpbHMuYnVmZmVyVG9TdHJpbmcodGhpcy5hdmF4UFRyYW5zYWN0aW9uLmdldE1lbW8oKSksXG4gICAgICB0eXBlSUQ6IHRoaXMuYXZheFBUcmFuc2FjdGlvbi5nZXRUeFR5cGUoKSxcbiAgICB9O1xuICB9XG5cbiAgc2V0VHJhbnNhY3Rpb24odHg6IFVuc2lnbmVkVHgpOiB2b2lkIHtcbiAgICB0aGlzLl9hdmF4cFRyYW5zYWN0aW9uID0gdHg7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0XG4gICAqL1xuICBzZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBvcnRpb24gb2YgdGhlIHRyYW5zYWN0aW9uIHRoYXQgbmVlZHMgdG8gYmUgc2lnbmVkIGluIEJ1ZmZlciBmb3JtYXQuXG4gICAqIE9ubHkgbmVlZGVkIGZvciBjb2lucyB0aGF0IHN1cHBvcnQgYWRkaW5nIHNpZ25hdHVyZXMgZGlyZWN0bHkgKGUuZy4gVFNTKS5cbiAgICovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICBjb25zdCB0eGJ1ZmYgPSB0aGlzLl9hdmF4cFRyYW5zYWN0aW9uLnRvQnVmZmVyKCk7XG4gICAgcmV0dXJuIGNyZWF0ZUhhc2guZGVmYXVsdCgnc2hhMjU2JykudXBkYXRlKHR4YnVmZikuZGlnZXN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQXZheCB3cmFwcGVyIHRvIGNyZWF0ZSBzaWduYXR1cmUgYW5kIHJldHVybiBpdCBmb3IgY3JlZGVudGlhbHNcbiAgICogQHBhcmFtIHBydlxuICAgKi9cbiAgY3JlYXRlU2lnbmF0dXJlKHBydjogQnVmZmVyKTogU2lnbmF0dXJlIHtcbiAgICBjb25zdCBreSA9IG5ldyBLZXlQYWlyQXZheCh0aGlzLl9uZXR3b3JrLmhycCwgdGhpcy5fbmV0d29yay5uZXR3b3JrSUQudG9TdHJpbmcoKSk7XG4gICAga3kuaW1wb3J0S2V5KEJ1ZmZlckF2YXguZnJvbShwcnYpKTtcbiAgICBjb25zdCBzaWdudmFsID0ga3kuc2lnbihCdWZmZXJBdmF4LmZyb20odGhpcy5zaWduYWJsZVBheWxvYWQpKTtcbiAgICBjb25zdCBzaWcgPSBuZXcgU2lnbmF0dXJlKCk7XG4gICAgc2lnLmZyb21CdWZmZXIoc2lnbnZhbCk7XG4gICAgcmV0dXJuIHNpZztcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/// <reference types="bn.js" />
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
3
|
+
import BigNumber from 'bignumber.js';
|
|
4
|
+
import { BaseAddress, BaseKey, BaseTransactionBuilder, TransactionType, BaseTransaction } from '@bitgo/sdk-core';
|
|
5
|
+
import { Transaction } from './transaction';
|
|
6
|
+
import { KeyPair } from './keyPair';
|
|
7
|
+
import { BN } from 'avalanche';
|
|
8
|
+
import { BaseTx } from 'avalanche/dist/apis/platformvm/basetx';
|
|
9
|
+
import { Credential } from 'avalanche/dist/common';
|
|
10
|
+
import { DecodedUtxoObj } from './iface';
|
|
11
|
+
export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
|
|
12
|
+
private _transaction;
|
|
13
|
+
_signer: KeyPair[];
|
|
14
|
+
protected recoverSigner: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* When using recovery key must be set here
|
|
17
|
+
* TODO: STLX-17317 recovery key signing
|
|
18
|
+
* @param recoverSigner
|
|
19
|
+
*/
|
|
20
|
+
recoverMode(recoverSigner?: boolean): this;
|
|
21
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
22
|
+
/**
|
|
23
|
+
* commented out check until multisig signing is in effect
|
|
24
|
+
* TODO: STLX-17077
|
|
25
|
+
* @param value
|
|
26
|
+
*/
|
|
27
|
+
threshold(value: number): this;
|
|
28
|
+
locktime(value: string | number): this;
|
|
29
|
+
fromPubKey(senderPubKey: string | string[]): this;
|
|
30
|
+
utxos(value: DecodedUtxoObj[]): this;
|
|
31
|
+
/**
|
|
32
|
+
*
|
|
33
|
+
* @param value Optional Buffer for the memo
|
|
34
|
+
* @returns value Buffer for the memo
|
|
35
|
+
* set using Buffer.from("message")
|
|
36
|
+
*/
|
|
37
|
+
memo(value: string): this;
|
|
38
|
+
/**
|
|
39
|
+
* Initialize the transaction builder fields using the decoded transaction data
|
|
40
|
+
*
|
|
41
|
+
* @param {Transaction} tx the transaction data
|
|
42
|
+
*/
|
|
43
|
+
initBuilder(tx?: BaseTx): this;
|
|
44
|
+
credentials(credentials: Credential[]): this;
|
|
45
|
+
/** @inheritdoc */
|
|
46
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
47
|
+
get hasSigner(): boolean;
|
|
48
|
+
/** @inheritdoc */
|
|
49
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
50
|
+
/**
|
|
51
|
+
* Builds the avaxp transaction
|
|
52
|
+
* @return {Transaction} avaxp sdk transaction
|
|
53
|
+
*/
|
|
54
|
+
protected abstract buildAvaxpTransaction(): BaseTx;
|
|
55
|
+
/** @inheritdoc */
|
|
56
|
+
protected get transaction(): Transaction;
|
|
57
|
+
protected set transaction(transaction: Transaction);
|
|
58
|
+
protected signImplementation({ key }: BaseKey): BaseTransaction;
|
|
59
|
+
protected abstract get transactionType(): TransactionType;
|
|
60
|
+
/**
|
|
61
|
+
* Validates the threshold
|
|
62
|
+
* @param threshold
|
|
63
|
+
*/
|
|
64
|
+
validateThreshold(threshold: number): void;
|
|
65
|
+
/**
|
|
66
|
+
* Validates locktime
|
|
67
|
+
* @param locktime
|
|
68
|
+
*/
|
|
69
|
+
validateLocktime(locktime: BN): void;
|
|
70
|
+
/** @inheritdoc */
|
|
71
|
+
validateAddress(address: BaseAddress, addressFormat?: string): void;
|
|
72
|
+
/** @inheritdoc */
|
|
73
|
+
validateKey({ key }: BaseKey): void;
|
|
74
|
+
/** @inheritdoc */
|
|
75
|
+
validateRawTransaction(rawTransaction: string): void;
|
|
76
|
+
/** @inheritdoc */
|
|
77
|
+
validateTransaction(transaction?: Transaction): void;
|
|
78
|
+
/** @inheritdoc */
|
|
79
|
+
validateValue(value: BigNumber): void;
|
|
80
|
+
validateUtxos(values: DecodedUtxoObj[]): void;
|
|
81
|
+
validateUtxo(value: DecodedUtxoObj): void;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=transactionBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../src/transactionBuilder.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAEL,WAAW,EACX,OAAO,EACP,sBAAsB,EACtB,eAAe,EAKf,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,OAAO,CAAC,YAAY,CAAc;IAC3B,OAAO,EAAE,OAAO,EAAE,CAAM;IAC/B,SAAS,CAAC,aAAa,UAAS;IAEhC;;;;OAIG;IACI,WAAW,CAAC,aAAa,UAAO,GAAG,IAAI;gBAKlC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;;;OAIG;IAEH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMtC,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAMjD,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAKpC;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAqB9B,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI;IAK5C,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAIjE,IAAI,SAAS,IAAI,OAAO,CAEvB;IACD,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAgB3D;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,qBAAqB,IAAI,MAAM;IAGlD,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IACD,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED,SAAS,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,eAAe;IAK/D,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAM1D;;;OAGG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM1C;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,EAAE,GAAG,IAAI;IAMpC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAInE,kBAAkB;IAClB,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,IAAI;IAMnC,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAWpD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAIpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAO7C,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;CAO1C"}
|
|
@@ -0,0 +1,192 @@
|
|
|
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.TransactionBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
8
|
+
const transaction_1 = require("./transaction");
|
|
9
|
+
const keyPair_1 = require("./keyPair");
|
|
10
|
+
const avalanche_1 = require("avalanche");
|
|
11
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
12
|
+
class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
13
|
+
constructor(_coinConfig) {
|
|
14
|
+
super(_coinConfig);
|
|
15
|
+
this._signer = [];
|
|
16
|
+
this.recoverSigner = false;
|
|
17
|
+
this._transaction = new transaction_1.Transaction(_coinConfig);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* When using recovery key must be set here
|
|
21
|
+
* TODO: STLX-17317 recovery key signing
|
|
22
|
+
* @param recoverSigner
|
|
23
|
+
*/
|
|
24
|
+
recoverMode(recoverSigner = true) {
|
|
25
|
+
this.recoverSigner = recoverSigner;
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* commented out check until multisig signing is in effect
|
|
30
|
+
* TODO: STLX-17077
|
|
31
|
+
* @param value
|
|
32
|
+
*/
|
|
33
|
+
threshold(value) {
|
|
34
|
+
// this.validateThreshold(value);
|
|
35
|
+
this._transaction._threshold = value;
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
locktime(value) {
|
|
39
|
+
this.validateLocktime(new avalanche_1.BN(value));
|
|
40
|
+
this._transaction._locktime = new avalanche_1.BN(value);
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
fromPubKey(senderPubKey) {
|
|
44
|
+
const pubKeys = senderPubKey instanceof Array ? senderPubKey : [senderPubKey];
|
|
45
|
+
this._transaction._fromPubKeys = pubKeys.map(utils_1.default.parseAddress);
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
utxos(value) {
|
|
49
|
+
this.validateUtxos(value);
|
|
50
|
+
this._transaction._utxos = value;
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
*
|
|
55
|
+
* @param value Optional Buffer for the memo
|
|
56
|
+
* @returns value Buffer for the memo
|
|
57
|
+
* set using Buffer.from("message")
|
|
58
|
+
*/
|
|
59
|
+
memo(value) {
|
|
60
|
+
this._transaction._memo = utils_1.default.stringToBuffer(value);
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Initialize the transaction builder fields using the decoded transaction data
|
|
65
|
+
*
|
|
66
|
+
* @param {Transaction} tx the transaction data
|
|
67
|
+
*/
|
|
68
|
+
initBuilder(tx) {
|
|
69
|
+
if (!tx)
|
|
70
|
+
return this;
|
|
71
|
+
if (tx.getNetworkID() !== this._transaction._networkID ||
|
|
72
|
+
!tx.getBlockchainID().equals(this._transaction._blockchainID)) {
|
|
73
|
+
throw new Error('Network or blockchain is not equals');
|
|
74
|
+
}
|
|
75
|
+
this._transaction._memo = tx.getMemo();
|
|
76
|
+
const out = tx.getOuts()[0];
|
|
77
|
+
if (!out.getAssetID().equals(this._transaction._assetId)) {
|
|
78
|
+
throw new Error('AssetID are not equals');
|
|
79
|
+
}
|
|
80
|
+
const secpOut = out.getOutput();
|
|
81
|
+
this._transaction._locktime = secpOut.getLocktime();
|
|
82
|
+
this._transaction._threshold = secpOut.getThreshold();
|
|
83
|
+
this._transaction._fromPubKeys = secpOut.getAddresses();
|
|
84
|
+
this._transaction.avaxPTransaction = tx;
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
credentials(credentials) {
|
|
88
|
+
this.transaction.credentials = credentials;
|
|
89
|
+
return this;
|
|
90
|
+
}
|
|
91
|
+
/** @inheritdoc */
|
|
92
|
+
fromImplementation(rawTransaction) {
|
|
93
|
+
throw new sdk_core_1.NotSupported('from raw transaction is not supported. See TransactionBuilderFactory.from method');
|
|
94
|
+
}
|
|
95
|
+
get hasSigner() {
|
|
96
|
+
return this._signer !== undefined && this._signer.length > 0;
|
|
97
|
+
}
|
|
98
|
+
/** @inheritdoc */
|
|
99
|
+
async buildImplementation() {
|
|
100
|
+
// TODO: STLX-17317: sign with recovery key
|
|
101
|
+
// if (this.hasSigner) {
|
|
102
|
+
// this.recoverSigner = this._fromPubKeys[1].equals(utils.parseAddress(this._signer[0].getAddress()));
|
|
103
|
+
// }
|
|
104
|
+
this.transaction.avaxPTransaction = this.buildAvaxpTransaction();
|
|
105
|
+
if (this.hasSigner) {
|
|
106
|
+
if (!this.transaction.hasCredentials) {
|
|
107
|
+
this.transaction.credentials = utils_1.default.getCredentials(this.transaction.avaxPTransaction);
|
|
108
|
+
}
|
|
109
|
+
this._signer.forEach((keyPair) => this.transaction.sign(keyPair));
|
|
110
|
+
}
|
|
111
|
+
this.transaction.setTransactionType(this.transactionType);
|
|
112
|
+
return this.transaction;
|
|
113
|
+
}
|
|
114
|
+
// region Getters and Setters
|
|
115
|
+
/** @inheritdoc */
|
|
116
|
+
get transaction() {
|
|
117
|
+
return this._transaction;
|
|
118
|
+
}
|
|
119
|
+
set transaction(transaction) {
|
|
120
|
+
this._transaction = transaction;
|
|
121
|
+
}
|
|
122
|
+
signImplementation({ key }) {
|
|
123
|
+
this._signer.push(new keyPair_1.KeyPair({ prv: key }));
|
|
124
|
+
return this.transaction;
|
|
125
|
+
}
|
|
126
|
+
// endregion
|
|
127
|
+
// region Validators
|
|
128
|
+
/**
|
|
129
|
+
* Validates the threshold
|
|
130
|
+
* @param threshold
|
|
131
|
+
*/
|
|
132
|
+
validateThreshold(threshold) {
|
|
133
|
+
if (!threshold || threshold !== 2) {
|
|
134
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: threshold must be set to 2');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Validates locktime
|
|
139
|
+
* @param locktime
|
|
140
|
+
*/
|
|
141
|
+
validateLocktime(locktime) {
|
|
142
|
+
if (!locktime || locktime.lt(new avalanche_1.BN(0))) {
|
|
143
|
+
throw new sdk_core_1.BuildTransactionError('Invalid transaction: locktime must be 0 or higher');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/** @inheritdoc */
|
|
147
|
+
validateAddress(address, addressFormat) {
|
|
148
|
+
throw new sdk_core_1.NotImplementedError('validateAddress not implemented');
|
|
149
|
+
}
|
|
150
|
+
/** @inheritdoc */
|
|
151
|
+
validateKey({ key }) {
|
|
152
|
+
if (!new keyPair_1.KeyPair({ prv: key })) {
|
|
153
|
+
throw new sdk_core_1.BuildTransactionError('Invalid key');
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** @inheritdoc */
|
|
157
|
+
validateRawTransaction(rawTransaction) {
|
|
158
|
+
if (!rawTransaction) {
|
|
159
|
+
throw new sdk_core_1.InvalidTransactionError('Raw transaction is empty');
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
utils_1.default.cb58Decode(rawTransaction);
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
throw new sdk_core_1.ParseTransactionError('Raw transaction is not hex string');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/** @inheritdoc */
|
|
169
|
+
validateTransaction(transaction) {
|
|
170
|
+
// throw new NotImplementedError('validateTransaction not implemented');
|
|
171
|
+
}
|
|
172
|
+
/** @inheritdoc */
|
|
173
|
+
validateValue(value) {
|
|
174
|
+
if (value.isLessThan(0)) {
|
|
175
|
+
throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
validateUtxos(values) {
|
|
179
|
+
if (values.length === 0) {
|
|
180
|
+
throw new sdk_core_1.BuildTransactionError("Utxos can't be empty array");
|
|
181
|
+
}
|
|
182
|
+
values.forEach(this.validateUtxo);
|
|
183
|
+
}
|
|
184
|
+
validateUtxo(value) {
|
|
185
|
+
['outputID', 'amount', 'txid', 'outputidx'].forEach((field) => {
|
|
186
|
+
if (!value.hasOwnProperty(field))
|
|
187
|
+
throw new sdk_core_1.BuildTransactionError(`Utxos required ${field}`);
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.TransactionBuilder = TransactionBuilder;
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zYWN0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSw4Q0FXeUI7QUFDekIsK0NBQTRDO0FBQzVDLHVDQUFvQztBQUNwQyx5Q0FBK0I7QUFHL0Isb0RBQTRCO0FBRzVCLE1BQXNCLGtCQUFtQixTQUFRLGlDQUFzQjtJQWVyRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQWRkLFlBQU8sR0FBYyxFQUFFLENBQUM7UUFDckIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFjOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHlCQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQWJEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsYUFBYSxHQUFHLElBQUk7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBT0Q7Ozs7T0FJRztJQUVILFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLGlDQUFpQztRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQXNCO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLGNBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksY0FBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFVBQVUsQ0FBQyxZQUErQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxZQUFZLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxD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QUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFxQjtRQUNoQyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzVELElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztnQkFBRSxNQUFNLElBQUksZ0NBQXFCLENBQUMsa0JBQWtCLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBR0Y7QUFwTkQsZ0RBb05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7XG4gIE5vdEltcGxlbWVudGVkRXJyb3IsXG4gIEJhc2VBZGRyZXNzLFxuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBUcmFuc2FjdGlvblR5cGUsXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIEJ1aWxkVHJhbnNhY3Rpb25FcnJvcixcbiAgTm90U3VwcG9ydGVkLFxuICBCYXNlVHJhbnNhY3Rpb24sXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBCTiB9IGZyb20gJ2F2YWxhbmNoZSc7XG5pbXBvcnQgeyBCYXNlVHggfSBmcm9tICdhdmFsYW5jaGUvZGlzdC9hcGlzL3BsYXRmb3Jtdm0vYmFzZXR4JztcbmltcG9ydCB7IENyZWRlbnRpYWwgfSBmcm9tICdhdmFsYW5jaGUvZGlzdC9jb21tb24nO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmogfSBmcm9tICcuL2lmYWNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcml2YXRlIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHB1YmxpYyBfc2lnbmVyOiBLZXlQYWlyW10gPSBbXTtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hlbiB1c2luZyByZWNvdmVyeSBrZXkgbXVzdCBiZSBzZXQgaGVyZVxuICAgKiBUT0RPOiBTVExYLTE3MzE3IHJlY292ZXJ5IGtleSBzaWduaW5nXG4gICAqIEBwYXJhbSByZWNvdmVyU2lnbmVyXG4gICAqL1xuICBwdWJsaWMgcmVjb3Zlck1vZGUocmVjb3ZlclNpZ25lciA9IHRydWUpOiB0aGlzIHtcbiAgICB0aGlzLnJlY292ZXJTaWduZXIgPSByZWNvdmVyU2lnbmVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb21tZW50ZWQgb3V0IGNoZWNrIHVudGlsIG11bHRpc2lnIHNpZ25pbmcgaXMgaW4gZWZmZWN0XG4gICAqIFRPRE86IFNUTFgtMTcwNzdcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuXG4gIHRocmVzaG9sZCh2YWx1ZTogbnVtYmVyKTogdGhpcyB7XG4gICAgLy8gdGhpcy52YWxpZGF0ZVRocmVzaG9sZCh2YWx1ZSk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX3RocmVzaG9sZCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbG9ja3RpbWUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMudmFsaWRhdGVMb2NrdGltZShuZXcgQk4odmFsdWUpKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fbG9ja3RpbWUgPSBuZXcgQk4odmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnJvbVB1YktleShzZW5kZXJQdWJLZXk6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgcHViS2V5cyA9IHNlbmRlclB1YktleSBpbnN0YW5jZW9mIEFycmF5ID8gc2VuZGVyUHViS2V5IDogW3NlbmRlclB1YktleV07XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX2Zyb21QdWJLZXlzID0gcHViS2V5cy5tYXAodXRpbHMucGFyc2VBZGRyZXNzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHV0eG9zKHZhbHVlOiBEZWNvZGVkVXR4b09ialtdKTogdGhpcyB7XG4gICAgdGhpcy52YWxpZGF0ZVV0eG9zKHZhbHVlKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fdXR4b3MgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIE9wdGlvbmFsIEJ1ZmZlciBmb3IgdGhlIG1lbW9cbiAgICogQHJldHVybnMgdmFsdWUgQnVmZmVyIGZvciB0aGUgbWVtb1xuICAgKiBzZXQgdXNpbmcgQnVmZmVyLmZyb20oXCJtZXNzYWdlXCIpXG4gICAqL1xuICBtZW1vKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fbWVtbyA9IHV0aWxzLnN0cmluZ1RvQnVmZmVyKHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb259IHR4IHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqL1xuICBpbml0QnVpbGRlcih0eD86IEJhc2VUeCk6IHRoaXMge1xuICAgIGlmICghdHgpIHJldHVybiB0aGlzO1xuICAgIGlmIChcbiAgICAgIHR4LmdldE5ldHdvcmtJRCgpICE9PSB0aGlzLl90cmFuc2FjdGlvbi5fbmV0d29ya0lEIHx8XG4gICAgICAhdHguZ2V0QmxvY2tjaGFpbklEKCkuZXF1YWxzKHRoaXMuX3RyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05ldHdvcmsgb3IgYmxvY2tjaGFpbiBpcyBub3QgZXF1YWxzJyk7XG4gICAgfVxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9tZW1vID0gdHguZ2V0TWVtbygpO1xuICAgIGNvbnN0IG91dCA9IHR4LmdldE91dHMoKVswXTtcbiAgICBpZiAoIW91dC5nZXRBc3NldElEKCkuZXF1YWxzKHRoaXMuX3RyYW5zYWN0aW9uLl9hc3NldElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3NldElEIGFyZSBub3QgZXF1YWxzJyk7XG4gICAgfVxuICAgIGNvbnN0IHNlY3BPdXQgPSBvdXQuZ2V0T3V0cHV0KCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gc2VjcE91dC5nZXRMb2NrdGltZSgpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl90aHJlc2hvbGQgPSBzZWNwT3V0LmdldFRocmVzaG9sZCgpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9mcm9tUHViS2V5cyA9IHNlY3BPdXQuZ2V0QWRkcmVzc2VzKCk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uYXZheFBUcmFuc2FjdGlvbiA9IHR4O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY3JlZGVudGlhbHMoY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXSk6IHRoaXMge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uY3JlZGVudGlhbHMgPSBjcmVkZW50aWFscztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnZnJvbSByYXcgdHJhbnNhY3Rpb24gaXMgbm90IHN1cHBvcnRlZC4gU2VlIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkuZnJvbSBtZXRob2QnKTtcbiAgfVxuXG4gIGdldCBoYXNTaWduZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3NpZ25lci5sZW5ndGggPiAwO1xuICB9XG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRJbXBsZW1lbnRhdGlvbigpOiBQcm9taXNlPFRyYW5zYWN0aW9uPiB7XG4gICAgLy8gVE9ETzogU1RMWC0xNzMxNzogc2lnbiB3aXRoIHJlY292ZXJ5IGtleVxuICAgIC8vIGlmICh0aGlzLmhhc1NpZ25lcikge1xuICAgIC8vICAgIHRoaXMucmVjb3ZlclNpZ25lciA9IHRoaXMuX2Zyb21QdWJLZXlzWzFdLmVxdWFscyh1dGlscy5wYXJzZUFkZHJlc3ModGhpcy5fc2lnbmVyWzBdLmdldEFkZHJlc3MoKSkpO1xuICAgIC8vIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLmF2YXhQVHJhbnNhY3Rpb24gPSB0aGlzLmJ1aWxkQXZheHBUcmFuc2FjdGlvbigpO1xuICAgIGlmICh0aGlzLmhhc1NpZ25lcikge1xuICAgICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLmhhc0NyZWRlbnRpYWxzKSB7XG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb24uY3JlZGVudGlhbHMgPSB1dGlscy5nZXRDcmVkZW50aWFscyh0aGlzLnRyYW5zYWN0aW9uLmF2YXhQVHJhbnNhY3Rpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5fc2lnbmVyLmZvckVhY2goKGtleVBhaXIpID0+IHRoaXMudHJhbnNhY3Rpb24uc2lnbihrZXlQYWlyKSk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGF2YXhwIHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge1RyYW5zYWN0aW9ufSBhdmF4cCBzZGsgdHJhbnNhY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBidWlsZEF2YXhwVHJhbnNhY3Rpb24oKTogQmFzZVR4O1xuXG4gIC8vIHJlZ2lvbiBHZXR0ZXJzIGFuZCBTZXR0ZXJzXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cbiAgcHJvdGVjdGVkIHNldCB0cmFuc2FjdGlvbih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNpZ25JbXBsZW1lbnRhdGlvbih7IGtleSB9OiBCYXNlS2V5KTogQmFzZVRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLl9zaWduZXIucHVzaChuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZTtcblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gVmFsaWRhdG9yc1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHRocmVzaG9sZFxuICAgKiBAcGFyYW0gdGhyZXNob2xkXG4gICAqL1xuICB2YWxpZGF0ZVRocmVzaG9sZCh0aHJlc2hvbGQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhyZXNob2xkIHx8IHRocmVzaG9sZCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogdGhyZXNob2xkIG11c3QgYmUgc2V0IHRvIDInKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGxvY2t0aW1lXG4gICAqIEBwYXJhbSBsb2NrdGltZVxuICAgKi9cbiAgdmFsaWRhdGVMb2NrdGltZShsb2NrdGltZTogQk4pOiB2b2lkIHtcbiAgICBpZiAoIWxvY2t0aW1lIHx8IGxvY2t0aW1lLmx0KG5ldyBCTigwKSkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGxvY2t0aW1lIG11c3QgYmUgMCBvciBoaWdoZXInKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IEJhc2VBZGRyZXNzLCBhZGRyZXNzRm9ybWF0Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ3ZhbGlkYXRlQWRkcmVzcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZUtleSh7IGtleSB9OiBCYXNlS2V5KTogdm9pZCB7XG4gICAgaWYgKCFuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIGtleScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ1JhdyB0cmFuc2FjdGlvbiBpcyBlbXB0eScpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdXRpbHMuY2I1OERlY29kZShyYXdUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlVHJhbnNhY3Rpb25FcnJvcignUmF3IHRyYW5zYWN0aW9uIGlzIG5vdCBoZXggc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIC8vIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCd2YWxpZGF0ZVRyYW5zYWN0aW9uIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIHplcm8nKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZVV0eG9zKHZhbHVlczogRGVjb2RlZFV0eG9PYmpbXSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFwiVXR4b3MgY2FuJ3QgYmUgZW1wdHkgYXJyYXlcIik7XG4gICAgfVxuICAgIHZhbHVlcy5mb3JFYWNoKHRoaXMudmFsaWRhdGVVdHhvKTtcbiAgfVxuXG4gIHZhbGlkYXRlVXR4byh2YWx1ZTogRGVjb2RlZFV0eG9PYmopOiB2b2lkIHtcbiAgICBbJ291dHB1dElEJywgJ2Ftb3VudCcsICd0eGlkJywgJ291dHB1dGlkeCddLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkKSkgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgVXR4b3MgcmVxdWlyZWQgJHtmaWVsZH1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxufVxuIl19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
2
|
+
import { BaseTransactionBuilderFactory } from '@bitgo/sdk-core';
|
|
3
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
4
|
+
import { TransferBuilder } from './transferBuilder';
|
|
5
|
+
import { ValidatorTxBuilder } from './validatorTxBuilder';
|
|
6
|
+
export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
|
|
7
|
+
protected recoverSigner: boolean;
|
|
8
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
9
|
+
/** @inheritdoc */
|
|
10
|
+
from(raw: string): TransactionBuilder;
|
|
11
|
+
/** @inheritdoc */
|
|
12
|
+
getTransferBuilder(): TransferBuilder;
|
|
13
|
+
/**
|
|
14
|
+
* Initialize Validator builder
|
|
15
|
+
*
|
|
16
|
+
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
17
|
+
* @returns {StakingTxBuilder} the builder initialized
|
|
18
|
+
*/
|
|
19
|
+
getValidatorBuilder(): ValidatorTxBuilder;
|
|
20
|
+
getWalletInitializationBuilder(): TransactionBuilder;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=transactionBuilderFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../src/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAgB,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI1D,qBAAa,yBAA0B,SAAQ,6BAA6B;IAC1E,SAAS,CAAC,aAAa,UAAS;gBACpB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAcrC,kBAAkB;IAClB,kBAAkB,IAAI,eAAe;IAIrC;;;;;OAKG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC,8BAA8B,IAAI,kBAAkB;CAGrD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
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.TransactionBuilderFactory = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
8
|
+
const transferBuilder_1 = require("./transferBuilder");
|
|
9
|
+
const validatorTxBuilder_1 = require("./validatorTxBuilder");
|
|
10
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
11
|
+
const constants_1 = require("avalanche/dist/apis/platformvm/constants");
|
|
12
|
+
class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
|
|
13
|
+
constructor(_coinConfig) {
|
|
14
|
+
super(_coinConfig);
|
|
15
|
+
this.recoverSigner = false;
|
|
16
|
+
}
|
|
17
|
+
/** @inheritdoc */
|
|
18
|
+
from(raw) {
|
|
19
|
+
const tx = utils_1.default.from(raw);
|
|
20
|
+
const baseTx = tx.getUnsignedTx().getTransaction();
|
|
21
|
+
let transactionBuilder;
|
|
22
|
+
if (baseTx.getTypeID() === constants_1.PlatformVMConstants.ADDVALIDATORTX) {
|
|
23
|
+
transactionBuilder = this.getValidatorBuilder();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
|
|
27
|
+
}
|
|
28
|
+
transactionBuilder.initBuilder(baseTx).credentials(tx.getCredentials());
|
|
29
|
+
return transactionBuilder;
|
|
30
|
+
}
|
|
31
|
+
/** @inheritdoc */
|
|
32
|
+
getTransferBuilder() {
|
|
33
|
+
return new transferBuilder_1.TransferBuilder(this._coinConfig);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Initialize Validator builder
|
|
37
|
+
*
|
|
38
|
+
* @param {Transaction | undefined} tx - the transaction used to initialize the builder
|
|
39
|
+
* @returns {StakingTxBuilder} the builder initialized
|
|
40
|
+
*/
|
|
41
|
+
getValidatorBuilder() {
|
|
42
|
+
return new validatorTxBuilder_1.ValidatorTxBuilder(this._coinConfig);
|
|
43
|
+
}
|
|
44
|
+
getWalletInitializationBuilder() {
|
|
45
|
+
throw new sdk_core_1.NotSupported('Wallet initialization is not needed');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLDhDQUE4RTtBQUU5RSx1REFBb0Q7QUFDcEQsNkRBQTBEO0FBQzFELG9EQUE0QjtBQUM1Qix3RUFBK0U7QUFFL0UsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFFMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFGWCxrQkFBYSxHQUFHLEtBQUssQ0FBQztJQUdoQyxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQUksQ0FBQyxHQUFXO1FBQ2QsTUFBTSxFQUFFLEdBQUcsZUFBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkQsSUFBSSxrQkFBc0MsQ0FBQztRQUMzQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSywrQkFBbUIsQ0FBQyxjQUFjLEVBQUU7WUFDN0Qsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7U0FDakQ7YUFBTTtZQUNMLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7U0FDL0Y7UUFFRCxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sa0JBQWtCLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLGlDQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksdUNBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCw4QkFBOEI7UUFDNUIsTUFBTSxJQUFJLHVCQUFZLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0NBQ0Y7QUF2Q0QsOERBdUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBOb3RTdXBwb3J0ZWQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXInO1xuaW1wb3J0IHsgVmFsaWRhdG9yVHhCdWlsZGVyIH0gZnJvbSAnLi92YWxpZGF0b3JUeEJ1aWxkZXInO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgUGxhdGZvcm1WTUNvbnN0YW50cyB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2FwaXMvcGxhdGZvcm12bS9jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IHtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGZyb20ocmF3OiBzdHJpbmcpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIGNvbnN0IHR4ID0gdXRpbHMuZnJvbShyYXcpO1xuICAgIGNvbnN0IGJhc2VUeCA9IHR4LmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpO1xuICAgIGxldCB0cmFuc2FjdGlvbkJ1aWxkZXI6IFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgICBpZiAoYmFzZVR4LmdldFR5cGVJRCgpID09PSBQbGF0Zm9ybVZNQ29uc3RhbnRzLkFERFZBTElEQVRPUlRYKSB7XG4gICAgICB0cmFuc2FjdGlvbkJ1aWxkZXIgPSB0aGlzLmdldFZhbGlkYXRvckJ1aWxkZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNhY3Rpb24gY2Fubm90IGJlIHBhcnNlZCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgIH1cblxuICAgIHRyYW5zYWN0aW9uQnVpbGRlci5pbml0QnVpbGRlcihiYXNlVHgpLmNyZWRlbnRpYWxzKHR4LmdldENyZWRlbnRpYWxzKCkpO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbkJ1aWxkZXI7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0VHJhbnNmZXJCdWlsZGVyKCk6IFRyYW5zZmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2ZlckJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBWYWxpZGF0b3IgYnVpbGRlclxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uIHwgdW5kZWZpbmVkfSB0eCAtIHRoZSB0cmFuc2FjdGlvbiB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGJ1aWxkZXJcbiAgICogQHJldHVybnMge1N0YWtpbmdUeEJ1aWxkZXJ9IHRoZSBidWlsZGVyIGluaXRpYWxpemVkXG4gICAqL1xuICBnZXRWYWxpZGF0b3JCdWlsZGVyKCk6IFZhbGlkYXRvclR4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICBnZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdXYWxsZXQgaW5pdGlhbGl6YXRpb24gaXMgbm90IG5lZWRlZCcpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
2
|
+
import { BaseKey, TransactionType } from '@bitgo/sdk-core';
|
|
3
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
import { BaseTx } from 'avalanche/dist/apis/platformvm';
|
|
6
|
+
export declare class TransferBuilder extends TransactionBuilder {
|
|
7
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
8
|
+
protected get transactionType(): TransactionType;
|
|
9
|
+
/** @inheritdoc */
|
|
10
|
+
protected buildAvaxpTransaction(): BaseTx;
|
|
11
|
+
/** @inheritdoc */
|
|
12
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
13
|
+
/** @inheritdoc */
|
|
14
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
15
|
+
/** @inheritdoc */
|
|
16
|
+
protected signImplementation(key: BaseKey): Transaction;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=transferBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilder.d.ts","sourceRoot":"","sources":["../../src/transferBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAuB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,qBAAa,eAAgB,SAAQ,kBAAkB;gBACzC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,kBAAkB;IAClB,SAAS,CAAC,qBAAqB,IAAI,MAAM;IAIzC,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAI3D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAIjE,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW;CAGxD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransferBuilder = void 0;
|
|
4
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
5
|
+
const transactionBuilder_1 = require("./transactionBuilder");
|
|
6
|
+
class TransferBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
7
|
+
constructor(_coinConfig) {
|
|
8
|
+
super(_coinConfig);
|
|
9
|
+
}
|
|
10
|
+
get transactionType() {
|
|
11
|
+
return sdk_core_1.TransactionType.WalletInitialization;
|
|
12
|
+
}
|
|
13
|
+
/** @inheritdoc */
|
|
14
|
+
buildAvaxpTransaction() {
|
|
15
|
+
throw new sdk_core_1.NotImplementedError('buildImplementation not implemented');
|
|
16
|
+
}
|
|
17
|
+
/** @inheritdoc */
|
|
18
|
+
async buildImplementation() {
|
|
19
|
+
throw new sdk_core_1.NotImplementedError('buildImplementation not implemented');
|
|
20
|
+
}
|
|
21
|
+
/** @inheritdoc */
|
|
22
|
+
fromImplementation(rawTransaction) {
|
|
23
|
+
throw new sdk_core_1.NotImplementedError('fromImplementation not implemented');
|
|
24
|
+
}
|
|
25
|
+
/** @inheritdoc */
|
|
26
|
+
signImplementation(key) {
|
|
27
|
+
throw new sdk_core_1.NotImplementedError('signImplementation not implemented');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.TransferBuilder = TransferBuilder;
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zZmVyQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw4Q0FBZ0Y7QUFDaEYsNkRBQTBEO0FBSTFELE1BQWEsZUFBZ0IsU0FBUSx1Q0FBa0I7SUFDckQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsb0JBQW9CLENBQUM7SUFDOUMsQ0FBQztJQUVELGtCQUFrQjtJQUNSLHFCQUFxQjtRQUM3QixNQUFNLElBQUksOEJBQW1CLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxNQUFNLElBQUksOEJBQW1CLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsa0JBQWtCO0lBQ1Isa0JBQWtCLENBQUMsY0FBc0I7UUFDakQsTUFBTSxJQUFJLDhCQUFtQixDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELGtCQUFrQjtJQUNSLGtCQUFrQixDQUFDLEdBQVk7UUFDdkMsTUFBTSxJQUFJLDhCQUFtQixDQUFDLG9DQUFvQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztDQUNGO0FBNUJELDBDQTRCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCYXNlS2V5LCBOb3RJbXBsZW1lbnRlZEVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEJhc2VUeCB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2FwaXMvcGxhdGZvcm12bSc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2ZlckJ1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkQXZheHBUcmFuc2FjdGlvbigpOiBCYXNlVHgge1xuICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCdidWlsZEltcGxlbWVudGF0aW9uIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcignYnVpbGRJbXBsZW1lbnRhdGlvbiBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoJ2Zyb21JbXBsZW1lbnRhdGlvbiBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKGtleTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcignc2lnbkltcGxlbWVudGF0aW9uIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59XG4iXX0=
|