@bitgo-beta/sdk-coin-apt 0.0.0-semantic-release-managed
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/.eslintignore +4 -0
- package/.mocharc.yml +8 -0
- package/CHANGELOG.md +330 -0
- package/LICENSE +191 -0
- package/README.md +30 -0
- package/dist/src/apt.d.ts +44 -0
- package/dist/src/apt.d.ts.map +1 -0
- package/dist/src/apt.js +212 -0
- package/dist/src/aptNFTCollection.d.ts +18 -0
- package/dist/src/aptNFTCollection.d.ts.map +1 -0
- package/dist/src/aptNFTCollection.js +52 -0
- package/dist/src/aptToken.d.ts +19 -0
- package/dist/src/aptToken.d.ts.map +1 -0
- package/dist/src/aptToken.js +52 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +23 -0
- package/dist/src/lib/constants.d.ts +21 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +24 -0
- package/dist/src/lib/iface.d.ts +108 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +3 -0
- package/dist/src/lib/index.d.ts +16 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +65 -0
- package/dist/src/lib/keyPair.d.ts +18 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +44 -0
- package/dist/src/lib/transaction/customTransaction.d.ts +54 -0
- package/dist/src/lib/transaction/customTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/customTransaction.js +228 -0
- package/dist/src/lib/transaction/digitalAssetTransfer.d.ts +10 -0
- package/dist/src/lib/transaction/digitalAssetTransfer.d.ts.map +1 -0
- package/dist/src/lib/transaction/digitalAssetTransfer.js +45 -0
- package/dist/src/lib/transaction/fungibleAssetTransfer.d.ts +12 -0
- package/dist/src/lib/transaction/fungibleAssetTransfer.d.ts.map +1 -0
- package/dist/src/lib/transaction/fungibleAssetTransfer.js +73 -0
- package/dist/src/lib/transaction/transaction.d.ts +81 -0
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/transaction.js +332 -0
- package/dist/src/lib/transaction/transferTransaction.d.ts +12 -0
- package/dist/src/lib/transaction/transferTransaction.d.ts.map +1 -0
- package/dist/src/lib/transaction/transferTransaction.js +63 -0
- package/dist/src/lib/transactionBuilder/customTransactionBuilder.d.ts +64 -0
- package/dist/src/lib/transactionBuilder/customTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/customTransactionBuilder.js +127 -0
- package/dist/src/lib/transactionBuilder/digitalAssetTransferBuilder.d.ts +14 -0
- package/dist/src/lib/transactionBuilder/digitalAssetTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/digitalAssetTransferBuilder.js +55 -0
- package/dist/src/lib/transactionBuilder/fungibleAssetTransferBuilder.d.ts +15 -0
- package/dist/src/lib/transactionBuilder/fungibleAssetTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/fungibleAssetTransferBuilder.js +61 -0
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts +68 -0
- package/dist/src/lib/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/transactionBuilder.js +169 -0
- package/dist/src/lib/transactionBuilder/transferBuilder.d.ts +13 -0
- package/dist/src/lib/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder/transferBuilder.js +56 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +39 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +99 -0
- package/dist/src/lib/types.d.ts +9 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +3 -0
- package/dist/src/lib/utils/validation.d.ts +32 -0
- package/dist/src/lib/utils/validation.d.ts.map +1 -0
- package/dist/src/lib/utils/validation.js +99 -0
- package/dist/src/lib/utils.d.ts +42 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +150 -0
- package/dist/src/register.d.ts +3 -0
- package/dist/src/register.d.ts.map +1 -0
- package/dist/src/register.js +19 -0
- package/dist/src/tapt.d.ts +17 -0
- package/dist/src/tapt.d.ts.map +1 -0
- package/dist/src/tapt.js +30 -0
- package/package.json +55 -0
|
@@ -0,0 +1,73 @@
|
|
|
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.FungibleAssetTransfer = void 0;
|
|
7
|
+
const transaction_1 = require("./transaction");
|
|
8
|
+
const ts_sdk_1 = require("@aptos-labs/ts-sdk");
|
|
9
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const utils_1 = __importDefault(require("../utils"));
|
|
12
|
+
class FungibleAssetTransfer extends transaction_1.Transaction {
|
|
13
|
+
constructor(coinConfig) {
|
|
14
|
+
super(coinConfig);
|
|
15
|
+
this.faTransferAbi = {
|
|
16
|
+
typeParameters: [{ constraints: [] }],
|
|
17
|
+
parameters: [(0, ts_sdk_1.parseTypeTag)(constants_1.FUNBIGLE_ASSET_TYPE_TAG), new ts_sdk_1.TypeTagAddress(), new ts_sdk_1.TypeTagU64()],
|
|
18
|
+
};
|
|
19
|
+
this.batchFaTransferAbi = {
|
|
20
|
+
typeParameters: [],
|
|
21
|
+
parameters: [
|
|
22
|
+
(0, ts_sdk_1.parseTypeTag)(constants_1.BATCH_FUNGIBLE_ASSET_TYPE_TAG),
|
|
23
|
+
new ts_sdk_1.TypeTagVector(new ts_sdk_1.TypeTagAddress()),
|
|
24
|
+
new ts_sdk_1.TypeTagVector(new ts_sdk_1.TypeTagU64()),
|
|
25
|
+
],
|
|
26
|
+
};
|
|
27
|
+
this._type = sdk_core_1.TransactionType.SendToken;
|
|
28
|
+
}
|
|
29
|
+
parseTransactionPayload(payload) {
|
|
30
|
+
if (!this.isValidPayload(payload)) {
|
|
31
|
+
throw new sdk_core_1.InvalidTransactionError('Invalid transaction payload');
|
|
32
|
+
}
|
|
33
|
+
const entryFunction = payload.entryFunction;
|
|
34
|
+
this._assetId = entryFunction.args[0].toString();
|
|
35
|
+
const addressArg = entryFunction.args[1];
|
|
36
|
+
const amountArg = entryFunction.args[2];
|
|
37
|
+
this.recipients = utils_1.default.parseRecipients(addressArg, amountArg);
|
|
38
|
+
}
|
|
39
|
+
getTransactionPayloadData() {
|
|
40
|
+
const fungibleTokenAddress = this._assetId;
|
|
41
|
+
if (this.recipients.length > 1) {
|
|
42
|
+
return {
|
|
43
|
+
function: constants_1.FUNGIBLE_ASSET_BATCH_TRANSFER_FUNCTION,
|
|
44
|
+
typeArguments: [],
|
|
45
|
+
functionArguments: [
|
|
46
|
+
fungibleTokenAddress,
|
|
47
|
+
this.recipients.map((recipient) => ts_sdk_1.AccountAddress.fromString(recipient.address)),
|
|
48
|
+
this.recipients.map((recipient) => recipient.amount),
|
|
49
|
+
],
|
|
50
|
+
abi: this.batchFaTransferAbi,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
function: constants_1.FUNGIBLE_ASSET_TRANSFER_FUNCTION,
|
|
55
|
+
typeArguments: [constants_1.FUNGIBLE_ASSET_TYPE_ARGUMENT],
|
|
56
|
+
functionArguments: [
|
|
57
|
+
fungibleTokenAddress,
|
|
58
|
+
ts_sdk_1.AccountAddress.fromString(this.recipients[0].address),
|
|
59
|
+
this.recipients[0].amount,
|
|
60
|
+
],
|
|
61
|
+
abi: this.faTransferAbi,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
isValidPayload(payload) {
|
|
65
|
+
return (payload instanceof ts_sdk_1.TransactionPayloadEntryFunction &&
|
|
66
|
+
payload.entryFunction.args.length === 3 &&
|
|
67
|
+
(payload.entryFunction.type_args.length === 0 ||
|
|
68
|
+
(payload.entryFunction.type_args.length === 1 &&
|
|
69
|
+
constants_1.FUNGIBLE_ASSET_TYPE_ARGUMENT === payload.entryFunction.type_args[0].toString())));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.FungibleAssetTransfer = FungibleAssetTransfer;
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZ2libGVBc3NldFRyYW5zZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbi9mdW5naWJsZUFzc2V0VHJhbnNmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0NBQTRDO0FBQzVDLCtDQVU0QjtBQUM1QixtREFBZ0Y7QUFFaEYsNENBTXNCO0FBQ3RCLHFEQUE2QjtBQUU3QixNQUFhLHFCQUFzQixTQUFRLHlCQUFXO0lBQ3BELFlBQVksVUFBZ0M7UUFDMUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBbURaLGtCQUFhLEdBQXFCO1lBQ3hDLGNBQWMsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLFVBQVUsRUFBRSxDQUFDLElBQUEscUJBQVksRUFBQyxtQ0FBdUIsQ0FBQyxFQUFFLElBQUksdUJBQWMsRUFBRSxFQUFFLElBQUksbUJBQVUsRUFBRSxDQUFDO1NBQzVGLENBQUM7UUFFTSx1QkFBa0IsR0FBcUI7WUFDN0MsY0FBYyxFQUFFLEVBQUU7WUFDbEIsVUFBVSxFQUFFO2dCQUNWLElBQUEscUJBQVksRUFBQyx5Q0FBNkIsQ0FBQztnQkFDM0MsSUFBSSxzQkFBYSxDQUFDLElBQUksdUJBQWMsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLHNCQUFhLENBQUMsSUFBSSxtQkFBVSxFQUFFLENBQUM7YUFDcEM7U0FDRixDQUFDO1FBOURBLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQWUsQ0FBQyxTQUFTLENBQUM7SUFDekMsQ0FBQztJQUVTLHVCQUF1QixDQUFDLE9BQTJCO1FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLGtDQUF1QixDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFJLE9BQTJDLENBQUMsYUFBYSxDQUFDO1FBQ2pGLElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFLLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRVMseUJBQXlCO1FBQ2pDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUUzQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU87Z0JBQ0wsUUFBUSxFQUFFLGtEQUFzQztnQkFDaEQsYUFBYSxFQUFFLEVBQUU7Z0JBQ2pCLGlCQUFpQixFQUFFO29CQUNqQixvQkFBb0I7b0JBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyx1QkFBYyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ2hGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO2lCQUNyRDtnQkFDRCxHQUFHLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjthQUM3QixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU87WUFDTCxRQUFRLEVBQUUsNENBQWdDO1lBQzFDLGFBQWEsRUFBRSxDQUFDLHdDQUE0QixDQUFDO1lBQzdDLGlCQUFpQixFQUFFO2dCQUNqQixvQkFBb0I7Z0JBQ3BCLHVCQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07YUFDMUI7WUFDRCxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBMkI7UUFDaEQsT0FBTyxDQUNMLE9BQU8sWUFBWSx3Q0FBK0I7WUFDbEQsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDdkMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDM0MsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztvQkFDM0Msd0NBQTRCLEtBQUssT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUNyRixDQUFDO0lBQ0osQ0FBQztDQWNGO0FBbEVELHNEQWtFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQge1xuICBBY2NvdW50QWRkcmVzcyxcbiAgRW50cnlGdW5jdGlvbkFCSSxcbiAgSW5wdXRHZW5lcmF0ZVRyYW5zYWN0aW9uUGF5bG9hZERhdGEsXG4gIHBhcnNlVHlwZVRhZyxcbiAgVHJhbnNhY3Rpb25QYXlsb2FkLFxuICBUcmFuc2FjdGlvblBheWxvYWRFbnRyeUZ1bmN0aW9uLFxuICBUeXBlVGFnQWRkcmVzcyxcbiAgVHlwZVRhZ1U2NCxcbiAgVHlwZVRhZ1ZlY3Rvcixcbn0gZnJvbSAnQGFwdG9zLWxhYnMvdHMtc2RrJztcbmltcG9ydCB7IEludmFsaWRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBGVU5HSUJMRV9BU1NFVF9UWVBFX0FSR1VNRU5ULFxuICBGVU5HSUJMRV9BU1NFVF9UUkFOU0ZFUl9GVU5DVElPTixcbiAgRlVOR0lCTEVfQVNTRVRfQkFUQ0hfVFJBTlNGRVJfRlVOQ1RJT04sXG4gIEZVTkJJR0xFX0FTU0VUX1RZUEVfVEFHLFxuICBCQVRDSF9GVU5HSUJMRV9BU1NFVF9UWVBFX1RBRyxcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBGdW5naWJsZUFzc2V0VHJhbnNmZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5TZW5kVG9rZW47XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VUcmFuc2FjdGlvblBheWxvYWQocGF5bG9hZDogVHJhbnNhY3Rpb25QYXlsb2FkKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRQYXlsb2FkKHBheWxvYWQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb24gcGF5bG9hZCcpO1xuICAgIH1cbiAgICBjb25zdCBlbnRyeUZ1bmN0aW9uID0gKHBheWxvYWQgYXMgVHJhbnNhY3Rpb25QYXlsb2FkRW50cnlGdW5jdGlvbikuZW50cnlGdW5jdGlvbjtcbiAgICB0aGlzLl9hc3NldElkID0gZW50cnlGdW5jdGlvbi5hcmdzWzBdLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgYWRkcmVzc0FyZyA9IGVudHJ5RnVuY3Rpb24uYXJnc1sxXTtcbiAgICBjb25zdCBhbW91bnRBcmcgPSBlbnRyeUZ1bmN0aW9uLmFyZ3NbMl07XG4gICAgdGhpcy5yZWNpcGllbnRzID0gdXRpbHMucGFyc2VSZWNpcGllbnRzKGFkZHJlc3NBcmcsIGFtb3VudEFyZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VHJhbnNhY3Rpb25QYXlsb2FkRGF0YSgpOiBJbnB1dEdlbmVyYXRlVHJhbnNhY3Rpb25QYXlsb2FkRGF0YSB7XG4gICAgY29uc3QgZnVuZ2libGVUb2tlbkFkZHJlc3MgPSB0aGlzLl9hc3NldElkO1xuXG4gICAgaWYgKHRoaXMucmVjaXBpZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmdW5jdGlvbjogRlVOR0lCTEVfQVNTRVRfQkFUQ0hfVFJBTlNGRVJfRlVOQ1RJT04sXG4gICAgICAgIHR5cGVBcmd1bWVudHM6IFtdLFxuICAgICAgICBmdW5jdGlvbkFyZ3VtZW50czogW1xuICAgICAgICAgIGZ1bmdpYmxlVG9rZW5BZGRyZXNzLFxuICAgICAgICAgIHRoaXMucmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gQWNjb3VudEFkZHJlc3MuZnJvbVN0cmluZyhyZWNpcGllbnQuYWRkcmVzcykpLFxuICAgICAgICAgIHRoaXMucmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gcmVjaXBpZW50LmFtb3VudCksXG4gICAgICAgIF0sXG4gICAgICAgIGFiaTogdGhpcy5iYXRjaEZhVHJhbnNmZXJBYmksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnVuY3Rpb246IEZVTkdJQkxFX0FTU0VUX1RSQU5TRkVSX0ZVTkNUSU9OLFxuICAgICAgdHlwZUFyZ3VtZW50czogW0ZVTkdJQkxFX0FTU0VUX1RZUEVfQVJHVU1FTlRdLFxuICAgICAgZnVuY3Rpb25Bcmd1bWVudHM6IFtcbiAgICAgICAgZnVuZ2libGVUb2tlbkFkZHJlc3MsXG4gICAgICAgIEFjY291bnRBZGRyZXNzLmZyb21TdHJpbmcodGhpcy5yZWNpcGllbnRzWzBdLmFkZHJlc3MpLFxuICAgICAgICB0aGlzLnJlY2lwaWVudHNbMF0uYW1vdW50LFxuICAgICAgXSxcbiAgICAgIGFiaTogdGhpcy5mYVRyYW5zZmVyQWJpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRQYXlsb2FkKHBheWxvYWQ6IFRyYW5zYWN0aW9uUGF5bG9hZCkge1xuICAgIHJldHVybiAoXG4gICAgICBwYXlsb2FkIGluc3RhbmNlb2YgVHJhbnNhY3Rpb25QYXlsb2FkRW50cnlGdW5jdGlvbiAmJlxuICAgICAgcGF5bG9hZC5lbnRyeUZ1bmN0aW9uLmFyZ3MubGVuZ3RoID09PSAzICYmXG4gICAgICAocGF5bG9hZC5lbnRyeUZ1bmN0aW9uLnR5cGVfYXJncy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKHBheWxvYWQuZW50cnlGdW5jdGlvbi50eXBlX2FyZ3MubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgRlVOR0lCTEVfQVNTRVRfVFlQRV9BUkdVTUVOVCA9PT0gcGF5bG9hZC5lbnRyeUZ1bmN0aW9uLnR5cGVfYXJnc1swXS50b1N0cmluZygpKSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZmFUcmFuc2ZlckFiaTogRW50cnlGdW5jdGlvbkFCSSA9IHtcbiAgICB0eXBlUGFyYW1ldGVyczogW3sgY29uc3RyYWludHM6IFtdIH1dLFxuICAgIHBhcmFtZXRlcnM6IFtwYXJzZVR5cGVUYWcoRlVOQklHTEVfQVNTRVRfVFlQRV9UQUcpLCBuZXcgVHlwZVRhZ0FkZHJlc3MoKSwgbmV3IFR5cGVUYWdVNjQoKV0sXG4gIH07XG5cbiAgcHJpdmF0ZSBiYXRjaEZhVHJhbnNmZXJBYmk6IEVudHJ5RnVuY3Rpb25BQkkgPSB7XG4gICAgdHlwZVBhcmFtZXRlcnM6IFtdLFxuICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgIHBhcnNlVHlwZVRhZyhCQVRDSF9GVU5HSUJMRV9BU1NFVF9UWVBFX1RBRyksXG4gICAgICBuZXcgVHlwZVRhZ1ZlY3RvcihuZXcgVHlwZVRhZ0FkZHJlc3MoKSksXG4gICAgICBuZXcgVHlwZVRhZ1ZlY3RvcihuZXcgVHlwZVRhZ1U2NCgpKSxcbiAgICBdLFxuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { BaseKey, BaseTransaction, PublicKey, Signature, TransactionRecipient, TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { InputGenerateTransactionPayloadData, RawTransaction, SignedTransaction, TransactionPayload } from '@aptos-labs/ts-sdk';
|
|
4
|
+
import { AptTransactionExplanation, TxData } from '../iface';
|
|
5
|
+
export declare abstract class Transaction extends BaseTransaction {
|
|
6
|
+
protected _rawTransaction: RawTransaction;
|
|
7
|
+
protected _senderSignature: Signature;
|
|
8
|
+
protected _feePayerSignature: Signature;
|
|
9
|
+
protected _sender: string;
|
|
10
|
+
protected _recipients: TransactionRecipient[];
|
|
11
|
+
protected _sequenceNumber: number;
|
|
12
|
+
protected _maxGasAmount: number;
|
|
13
|
+
protected _gasUnitPrice: number;
|
|
14
|
+
protected _gasUsed: number;
|
|
15
|
+
protected _expirationTime: number;
|
|
16
|
+
protected _feePayerAddress: string;
|
|
17
|
+
protected _assetId: string;
|
|
18
|
+
protected _isSimulateTxn: boolean;
|
|
19
|
+
static EMPTY_PUBLIC_KEY: Buffer<ArrayBuffer>;
|
|
20
|
+
static EMPTY_SIGNATURE: Buffer<ArrayBuffer>;
|
|
21
|
+
constructor(coinConfig: Readonly<CoinConfig>);
|
|
22
|
+
/** @inheritDoc **/
|
|
23
|
+
get id(): string;
|
|
24
|
+
get sender(): string;
|
|
25
|
+
set sender(value: string);
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated - use `recipients()`.
|
|
28
|
+
*/
|
|
29
|
+
get recipient(): TransactionRecipient;
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated - use `recipients()`.
|
|
32
|
+
*/
|
|
33
|
+
set recipient(value: TransactionRecipient);
|
|
34
|
+
get recipients(): TransactionRecipient[];
|
|
35
|
+
set recipients(value: TransactionRecipient[]);
|
|
36
|
+
get sequenceNumber(): number;
|
|
37
|
+
set sequenceNumber(value: number);
|
|
38
|
+
get maxGasAmount(): number;
|
|
39
|
+
set maxGasAmount(value: number);
|
|
40
|
+
get gasUnitPrice(): number;
|
|
41
|
+
set gasUnitPrice(value: number);
|
|
42
|
+
get gasUsed(): number;
|
|
43
|
+
set gasUsed(value: number);
|
|
44
|
+
get expirationTime(): number;
|
|
45
|
+
set expirationTime(value: number);
|
|
46
|
+
get feePayerAddress(): string;
|
|
47
|
+
set transactionType(transactionType: TransactionType);
|
|
48
|
+
get assetId(): string;
|
|
49
|
+
set assetId(value: string);
|
|
50
|
+
get isSimulateTxn(): boolean;
|
|
51
|
+
set isSimulateTxn(value: boolean);
|
|
52
|
+
protected abstract getTransactionPayloadData(): InputGenerateTransactionPayloadData;
|
|
53
|
+
protected abstract parseTransactionPayload(payload: TransactionPayload): void;
|
|
54
|
+
fromDeserializedSignedTransaction(signedTxn: SignedTransaction): void;
|
|
55
|
+
canSign(_key: BaseKey): boolean;
|
|
56
|
+
toBroadcastFormat(): string;
|
|
57
|
+
serialize(): string;
|
|
58
|
+
addSenderSignature(publicKey: PublicKey, signature: Buffer): void;
|
|
59
|
+
getFeePayerPubKey(): string;
|
|
60
|
+
addFeePayerSignature(publicKey: PublicKey, signature: Buffer): void;
|
|
61
|
+
addFeePayerAddress(address: string): void;
|
|
62
|
+
build(): Promise<void>;
|
|
63
|
+
loadInputsAndOutputs(): void;
|
|
64
|
+
fromRawTransaction(rawTransaction: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* Deserializes a signed transaction hex string
|
|
67
|
+
* @param {string} signedRawTransaction
|
|
68
|
+
* @returns {SignedTransaction} the aptos signed transaction
|
|
69
|
+
*/
|
|
70
|
+
static deserializeSignedTransaction(signedRawTransaction: string): SignedTransaction;
|
|
71
|
+
toJson(): TxData;
|
|
72
|
+
getFee(): string;
|
|
73
|
+
get signablePayload(): Buffer;
|
|
74
|
+
/** @inheritDoc */
|
|
75
|
+
explainTransaction(): AptTransactionExplanation;
|
|
76
|
+
protected buildRawTransaction(): Promise<void>;
|
|
77
|
+
private getSignablePayloadWithFeePayer;
|
|
78
|
+
private getSignablePayloadWithoutFeePayer;
|
|
79
|
+
private generateTxnId;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,332 @@
|
|
|
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 sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
9
|
+
const ts_sdk_1 = require("@aptos-labs/ts-sdk");
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const utils_1 = __importDefault(require("../utils"));
|
|
12
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
13
|
+
const assert_1 = __importDefault(require("assert"));
|
|
14
|
+
class Transaction extends sdk_core_1.BaseTransaction {
|
|
15
|
+
constructor(coinConfig) {
|
|
16
|
+
super(coinConfig);
|
|
17
|
+
this._maxGasAmount = ts_sdk_1.DEFAULT_MAX_GAS_AMOUNT;
|
|
18
|
+
this._gasUnitPrice = constants_1.DEFAULT_GAS_UNIT_PRICE;
|
|
19
|
+
this._gasUsed = 0;
|
|
20
|
+
this._expirationTime = utils_1.default.getTxnExpirationTimestamp();
|
|
21
|
+
this._sequenceNumber = 0;
|
|
22
|
+
this._sender = ts_sdk_1.AccountAddress.ZERO.toString();
|
|
23
|
+
this._recipients = [];
|
|
24
|
+
this._assetId = ts_sdk_1.AccountAddress.ZERO.toString();
|
|
25
|
+
this._isSimulateTxn = false;
|
|
26
|
+
this._senderSignature = {
|
|
27
|
+
publicKey: {
|
|
28
|
+
pub: ts_sdk_1.Hex.fromHexInput(Transaction.EMPTY_PUBLIC_KEY).toString(),
|
|
29
|
+
},
|
|
30
|
+
signature: Transaction.EMPTY_SIGNATURE,
|
|
31
|
+
};
|
|
32
|
+
this._feePayerAddress = ts_sdk_1.AccountAddress.ZERO.toString();
|
|
33
|
+
this._feePayerSignature = {
|
|
34
|
+
publicKey: {
|
|
35
|
+
pub: ts_sdk_1.Hex.fromHexInput(Transaction.EMPTY_PUBLIC_KEY).toString(),
|
|
36
|
+
},
|
|
37
|
+
signature: Transaction.EMPTY_SIGNATURE,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** @inheritDoc **/
|
|
41
|
+
get id() {
|
|
42
|
+
this.generateTxnId();
|
|
43
|
+
return this._id ?? constants_1.UNAVAILABLE_TEXT;
|
|
44
|
+
}
|
|
45
|
+
get sender() {
|
|
46
|
+
return this._sender;
|
|
47
|
+
}
|
|
48
|
+
set sender(value) {
|
|
49
|
+
this._sender = value;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @deprecated - use `recipients()`.
|
|
53
|
+
*/
|
|
54
|
+
get recipient() {
|
|
55
|
+
(0, assert_1.default)(this._recipients.length > 0, 'No recipients available');
|
|
56
|
+
return this._recipients[0];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* @deprecated - use `recipients()`.
|
|
60
|
+
*/
|
|
61
|
+
set recipient(value) {
|
|
62
|
+
this.recipients = [value];
|
|
63
|
+
}
|
|
64
|
+
get recipients() {
|
|
65
|
+
return this._recipients;
|
|
66
|
+
}
|
|
67
|
+
set recipients(value) {
|
|
68
|
+
this._recipients = value;
|
|
69
|
+
}
|
|
70
|
+
get sequenceNumber() {
|
|
71
|
+
return this._sequenceNumber;
|
|
72
|
+
}
|
|
73
|
+
set sequenceNumber(value) {
|
|
74
|
+
this._sequenceNumber = value;
|
|
75
|
+
}
|
|
76
|
+
get maxGasAmount() {
|
|
77
|
+
return this._maxGasAmount;
|
|
78
|
+
}
|
|
79
|
+
set maxGasAmount(value) {
|
|
80
|
+
this._maxGasAmount = value;
|
|
81
|
+
}
|
|
82
|
+
get gasUnitPrice() {
|
|
83
|
+
return this._gasUnitPrice;
|
|
84
|
+
}
|
|
85
|
+
set gasUnitPrice(value) {
|
|
86
|
+
this._gasUnitPrice = value;
|
|
87
|
+
}
|
|
88
|
+
get gasUsed() {
|
|
89
|
+
return this._gasUsed;
|
|
90
|
+
}
|
|
91
|
+
set gasUsed(value) {
|
|
92
|
+
this._gasUsed = value;
|
|
93
|
+
}
|
|
94
|
+
get expirationTime() {
|
|
95
|
+
return this._expirationTime;
|
|
96
|
+
}
|
|
97
|
+
set expirationTime(value) {
|
|
98
|
+
this._expirationTime = value;
|
|
99
|
+
}
|
|
100
|
+
get feePayerAddress() {
|
|
101
|
+
return this._feePayerAddress;
|
|
102
|
+
}
|
|
103
|
+
set transactionType(transactionType) {
|
|
104
|
+
this._type = transactionType;
|
|
105
|
+
}
|
|
106
|
+
get assetId() {
|
|
107
|
+
return this._assetId;
|
|
108
|
+
}
|
|
109
|
+
set assetId(value) {
|
|
110
|
+
this._assetId = value;
|
|
111
|
+
}
|
|
112
|
+
get isSimulateTxn() {
|
|
113
|
+
return this._isSimulateTxn;
|
|
114
|
+
}
|
|
115
|
+
set isSimulateTxn(value) {
|
|
116
|
+
this._isSimulateTxn = value;
|
|
117
|
+
}
|
|
118
|
+
fromDeserializedSignedTransaction(signedTxn) {
|
|
119
|
+
try {
|
|
120
|
+
const rawTxn = signedTxn.raw_txn;
|
|
121
|
+
this.parseTransactionPayload(rawTxn.payload);
|
|
122
|
+
this._sender = rawTxn.sender.toString();
|
|
123
|
+
this._sequenceNumber = utils_1.default.castToNumber(rawTxn.sequence_number);
|
|
124
|
+
this._maxGasAmount = utils_1.default.castToNumber(rawTxn.max_gas_amount);
|
|
125
|
+
this._gasUnitPrice = utils_1.default.castToNumber(rawTxn.gas_unit_price);
|
|
126
|
+
this._expirationTime = utils_1.default.castToNumber(rawTxn.expiration_timestamp_secs);
|
|
127
|
+
this._rawTransaction = rawTxn;
|
|
128
|
+
this.loadInputsAndOutputs();
|
|
129
|
+
const authenticator = signedTxn.authenticator;
|
|
130
|
+
this._feePayerAddress = authenticator.fee_payer.address.toString();
|
|
131
|
+
const senderAuthenticator = authenticator.sender;
|
|
132
|
+
const senderSignature = Buffer.from(senderAuthenticator.signature.toUint8Array());
|
|
133
|
+
this.addSenderSignature({ pub: senderAuthenticator.public_key.toString() }, senderSignature);
|
|
134
|
+
const feePayerAuthenticator = authenticator.fee_payer.authenticator;
|
|
135
|
+
const feePayerSignature = Buffer.from(feePayerAuthenticator.signature.toUint8Array());
|
|
136
|
+
this.addFeePayerSignature({ pub: utils_1.default.stripHexPrefix(feePayerAuthenticator.public_key.toString()) }, feePayerSignature);
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
console.error('invalid signed transaction', e);
|
|
140
|
+
throw new Error('invalid signed transaction');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
canSign(_key) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
toBroadcastFormat() {
|
|
147
|
+
if (!this._rawTransaction) {
|
|
148
|
+
throw new sdk_core_1.InvalidTransactionError('Empty transaction');
|
|
149
|
+
}
|
|
150
|
+
return this.serialize();
|
|
151
|
+
}
|
|
152
|
+
serialize() {
|
|
153
|
+
let senderAuthenticator;
|
|
154
|
+
let feePayerAuthenticator;
|
|
155
|
+
if (this.isSimulateTxn) {
|
|
156
|
+
senderAuthenticator = new ts_sdk_1.AccountAuthenticatorNoAccountAuthenticator();
|
|
157
|
+
feePayerAuthenticator = new ts_sdk_1.AccountAuthenticatorNoAccountAuthenticator();
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const senderPublicKeyBuffer = utils_1.default.getBufferFromHexString(this._senderSignature.publicKey.pub);
|
|
161
|
+
const senderPublicKey = new ts_sdk_1.Ed25519PublicKey(senderPublicKeyBuffer);
|
|
162
|
+
const senderSignature = new ts_sdk_1.Ed25519Signature(this._senderSignature.signature);
|
|
163
|
+
senderAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(senderPublicKey, senderSignature);
|
|
164
|
+
const feePayerPublicKeyBuffer = utils_1.default.getBufferFromHexString(this._feePayerSignature.publicKey.pub);
|
|
165
|
+
const feePayerPublicKey = new ts_sdk_1.Ed25519PublicKey(feePayerPublicKeyBuffer);
|
|
166
|
+
const feePayerSignature = new ts_sdk_1.Ed25519Signature(this._feePayerSignature.signature);
|
|
167
|
+
feePayerAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(feePayerPublicKey, feePayerSignature);
|
|
168
|
+
}
|
|
169
|
+
const txnAuthenticator = new ts_sdk_1.TransactionAuthenticatorFeePayer(senderAuthenticator, [], [], {
|
|
170
|
+
address: ts_sdk_1.AccountAddress.fromString(this._feePayerAddress),
|
|
171
|
+
authenticator: feePayerAuthenticator,
|
|
172
|
+
});
|
|
173
|
+
const signedTxn = new ts_sdk_1.SignedTransaction(this._rawTransaction, txnAuthenticator);
|
|
174
|
+
return signedTxn.toString();
|
|
175
|
+
}
|
|
176
|
+
addSenderSignature(publicKey, signature) {
|
|
177
|
+
this._signatures = [signature.toString('hex')];
|
|
178
|
+
this._senderSignature = { publicKey, signature };
|
|
179
|
+
}
|
|
180
|
+
getFeePayerPubKey() {
|
|
181
|
+
return this._feePayerSignature.publicKey.pub;
|
|
182
|
+
}
|
|
183
|
+
addFeePayerSignature(publicKey, signature) {
|
|
184
|
+
this._feePayerSignature = { publicKey, signature };
|
|
185
|
+
}
|
|
186
|
+
addFeePayerAddress(address) {
|
|
187
|
+
this._feePayerAddress = address;
|
|
188
|
+
}
|
|
189
|
+
async build() {
|
|
190
|
+
await this.buildRawTransaction();
|
|
191
|
+
this.generateTxnId();
|
|
192
|
+
this.loadInputsAndOutputs();
|
|
193
|
+
}
|
|
194
|
+
loadInputsAndOutputs() {
|
|
195
|
+
const totalAmount = this._recipients.reduce((accumulator, current) => accumulator.plus(current.amount), new bignumber_js_1.default('0'));
|
|
196
|
+
this._inputs = [
|
|
197
|
+
{
|
|
198
|
+
address: this.sender,
|
|
199
|
+
value: totalAmount.toString(),
|
|
200
|
+
coin: this._coinConfig.name,
|
|
201
|
+
},
|
|
202
|
+
];
|
|
203
|
+
this._outputs = this._recipients.map((recipient) => {
|
|
204
|
+
return {
|
|
205
|
+
address: recipient.address,
|
|
206
|
+
value: recipient.amount,
|
|
207
|
+
coin: this._coinConfig.name,
|
|
208
|
+
};
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
fromRawTransaction(rawTransaction) {
|
|
212
|
+
let signedTxn;
|
|
213
|
+
try {
|
|
214
|
+
signedTxn = utils_1.default.deserializeSignedTransaction(rawTransaction);
|
|
215
|
+
}
|
|
216
|
+
catch (e) {
|
|
217
|
+
console.error('invalid raw transaction', e);
|
|
218
|
+
throw new Error('invalid raw transaction');
|
|
219
|
+
}
|
|
220
|
+
this.fromDeserializedSignedTransaction(signedTxn);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Deserializes a signed transaction hex string
|
|
224
|
+
* @param {string} signedRawTransaction
|
|
225
|
+
* @returns {SignedTransaction} the aptos signed transaction
|
|
226
|
+
*/
|
|
227
|
+
static deserializeSignedTransaction(signedRawTransaction) {
|
|
228
|
+
try {
|
|
229
|
+
return utils_1.default.deserializeSignedTransaction(signedRawTransaction);
|
|
230
|
+
}
|
|
231
|
+
catch (e) {
|
|
232
|
+
console.error('invalid raw transaction', e);
|
|
233
|
+
throw new Error('invalid raw transaction');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
toJson() {
|
|
237
|
+
return {
|
|
238
|
+
id: this.id,
|
|
239
|
+
sender: this.sender,
|
|
240
|
+
recipient: this.recipient,
|
|
241
|
+
recipients: this.recipients,
|
|
242
|
+
sequenceNumber: this.sequenceNumber,
|
|
243
|
+
maxGasAmount: this.maxGasAmount,
|
|
244
|
+
gasUnitPrice: this.gasUnitPrice,
|
|
245
|
+
gasUsed: this.gasUsed,
|
|
246
|
+
expirationTime: this.expirationTime,
|
|
247
|
+
feePayer: this.feePayerAddress,
|
|
248
|
+
assetId: this.assetId,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
getFee() {
|
|
252
|
+
return new bignumber_js_1.default(this.gasUsed).multipliedBy(this.gasUnitPrice).toString();
|
|
253
|
+
}
|
|
254
|
+
get signablePayload() {
|
|
255
|
+
return this.feePayerAddress ? this.getSignablePayloadWithFeePayer() : this.getSignablePayloadWithoutFeePayer();
|
|
256
|
+
}
|
|
257
|
+
/** @inheritDoc */
|
|
258
|
+
explainTransaction() {
|
|
259
|
+
const displayOrder = [
|
|
260
|
+
'id',
|
|
261
|
+
'outputs',
|
|
262
|
+
'outputAmount',
|
|
263
|
+
'changeOutputs',
|
|
264
|
+
'changeAmount',
|
|
265
|
+
'fee',
|
|
266
|
+
'withdrawAmount',
|
|
267
|
+
'sender',
|
|
268
|
+
'type',
|
|
269
|
+
];
|
|
270
|
+
const outputs = this._recipients;
|
|
271
|
+
const outputAmount = outputs
|
|
272
|
+
.reduce((accumulator, current) => accumulator.plus(current.amount), new bignumber_js_1.default('0'))
|
|
273
|
+
.toString();
|
|
274
|
+
return {
|
|
275
|
+
displayOrder,
|
|
276
|
+
id: this.id,
|
|
277
|
+
outputs,
|
|
278
|
+
outputAmount,
|
|
279
|
+
changeOutputs: [],
|
|
280
|
+
changeAmount: '0',
|
|
281
|
+
fee: { fee: this.getFee() },
|
|
282
|
+
sender: this.sender,
|
|
283
|
+
type: this.type,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
async buildRawTransaction() {
|
|
287
|
+
const network = this._coinConfig.network.type === statics_1.NetworkType.MAINNET ? ts_sdk_1.Network.MAINNET : ts_sdk_1.Network.TESTNET;
|
|
288
|
+
const aptos = new ts_sdk_1.Aptos(new ts_sdk_1.AptosConfig({ network }));
|
|
289
|
+
const senderAddress = ts_sdk_1.AccountAddress.fromString(this._sender);
|
|
290
|
+
const simpleTxn = await aptos.transaction.build.simple({
|
|
291
|
+
sender: senderAddress,
|
|
292
|
+
data: this.getTransactionPayloadData(),
|
|
293
|
+
options: {
|
|
294
|
+
maxGasAmount: this.maxGasAmount,
|
|
295
|
+
gasUnitPrice: this.gasUnitPrice,
|
|
296
|
+
expireTimestamp: this.expirationTime,
|
|
297
|
+
accountSequenceNumber: this.sequenceNumber,
|
|
298
|
+
},
|
|
299
|
+
});
|
|
300
|
+
this._rawTransaction = simpleTxn.rawTransaction;
|
|
301
|
+
}
|
|
302
|
+
getSignablePayloadWithFeePayer() {
|
|
303
|
+
const feePayerRawTxn = new ts_sdk_1.FeePayerRawTransaction(this._rawTransaction, [], ts_sdk_1.AccountAddress.fromString(this._feePayerAddress));
|
|
304
|
+
return Buffer.from((0, ts_sdk_1.generateSigningMessage)(feePayerRawTxn.bcsToBytes(), ts_sdk_1.RAW_TRANSACTION_WITH_DATA_SALT));
|
|
305
|
+
}
|
|
306
|
+
getSignablePayloadWithoutFeePayer() {
|
|
307
|
+
return Buffer.from((0, ts_sdk_1.generateSigningMessage)(this._rawTransaction.bcsToBytes(), ts_sdk_1.RAW_TRANSACTION_SALT));
|
|
308
|
+
}
|
|
309
|
+
generateTxnId() {
|
|
310
|
+
if (!this._senderSignature ||
|
|
311
|
+
!this._senderSignature.publicKey ||
|
|
312
|
+
!this._senderSignature.signature ||
|
|
313
|
+
!this._feePayerSignature ||
|
|
314
|
+
!this._feePayerSignature.publicKey ||
|
|
315
|
+
!this._feePayerSignature.signature ||
|
|
316
|
+
!this._feePayerAddress) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
const transaction = new ts_sdk_1.SimpleTransaction(this._rawTransaction, ts_sdk_1.AccountAddress.fromString(this._feePayerAddress));
|
|
320
|
+
const senderPublicKey = new ts_sdk_1.Ed25519PublicKey(utils_1.default.getBufferFromHexString(this._senderSignature.publicKey.pub));
|
|
321
|
+
const senderSignature = new ts_sdk_1.Ed25519Signature(this._senderSignature.signature);
|
|
322
|
+
const senderAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(senderPublicKey, senderSignature);
|
|
323
|
+
const feePayerPublicKey = new ts_sdk_1.Ed25519PublicKey(utils_1.default.getBufferFromHexString(this._feePayerSignature.publicKey.pub));
|
|
324
|
+
const feePayerSignature = new ts_sdk_1.Ed25519Signature(this._feePayerSignature.signature);
|
|
325
|
+
const feePayerAuthenticator = new ts_sdk_1.AccountAuthenticatorEd25519(feePayerPublicKey, feePayerSignature);
|
|
326
|
+
this._id = (0, ts_sdk_1.generateUserTransactionHash)({ transaction, senderAuthenticator, feePayerAuthenticator });
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
exports.Transaction = Transaction;
|
|
330
|
+
Transaction.EMPTY_PUBLIC_KEY = Buffer.alloc(32);
|
|
331
|
+
Transaction.EMPTY_SIGNATURE = Buffer.alloc(64);
|
|
332
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQVE4QjtBQUM5QixpREFBMEU7QUFDMUUsK0NBdUI0QjtBQUM1Qiw0Q0FBd0U7QUFDeEUscURBQTZCO0FBQzdCLGdFQUFxQztBQUVyQyxvREFBNEI7QUFFNUIsTUFBc0IsV0FBWSxTQUFRLDBCQUFlO0lBa0J2RCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLCtCQUFzQixDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsa0NBQXNCLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLHVCQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsdUJBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHO1lBQ3RCLFNBQVMsRUFBRTtnQkFDVCxHQUFHLEVBQUUsWUFBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLEVBQUU7YUFDL0Q7WUFDRCxTQUFTLEVBQUUsV0FBVyxDQUFDLGVBQWU7U0FDdkMsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyx1QkFBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsa0JBQWtCLEdBQUc7WUFDeEIsU0FBUyxFQUFFO2dCQUNULEdBQUcsRUFBRSxZQUFHLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsRUFBRTthQUMvRDtZQUNELFNBQVMsRUFBRSxXQUFXLENBQUMsZUFBZTtTQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQjtJQUNuQixJQUFXLEVBQUU7UUFDWCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsR0FBRyxJQUFJLDRCQUFnQixDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxTQUFTO1FBQ1gsSUFBQSxnQkFBTSxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFNBQVMsQ0FBQyxLQUEyQjtRQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBNkI7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksY0FBYyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsZUFBZ0M7UUFDbEQsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxLQUFjO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFNRCxpQ0FBaUMsQ0FBQyxTQUE0QjtRQUM1RCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxlQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsYUFBYSxHQUFHLGVBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztZQUU5QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM1QixNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsYUFBaUQsQ0FBQztZQUNsRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkUsTUFBTSxtQkFBbUIsR0FBRyxhQUFhLENBQUMsTUFBcUMsQ0FBQztZQUNoRixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUU3RixNQUFNLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsYUFBNEMsQ0FBQztZQUNuRyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixFQUFFLEdBQUcsRUFBRSxlQUFLLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQzFFLGlCQUFpQixDQUNsQixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFhO1FBQ25CLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLGtDQUF1QixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxtQkFBeUMsQ0FBQztRQUM5QyxJQUFJLHFCQUEyQyxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLG1CQUFtQixHQUFHLElBQUksbURBQTBDLEVBQUUsQ0FBQztZQUN2RSxxQkFBcUIsR0FBRyxJQUFJLG1EQUEwQyxFQUFFLENBQUM7UUFDM0UsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLHFCQUFxQixHQUFHLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hHLE1BQU0sZUFBZSxHQUFHLElBQUkseUJBQWdCLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNwRSxNQUFNLGVBQWUsR0FBRyxJQUFJLHlCQUFnQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5RSxtQkFBbUIsR0FBRyxJQUFJLG9DQUEyQixDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUV4RixNQUFNLHVCQUF1QixHQUFHLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSx5QkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSx5QkFBZ0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEYscUJBQXFCLEdBQUcsSUFBSSxvQ0FBMkIsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUkseUNBQWdDLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUN6RixPQUFPLEVBQUUsdUJBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ3pELGFBQWEsRUFBRSxxQkFBcUI7U0FDckMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSwwQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDaEYsT0FBTyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQW9CLEVBQUUsU0FBaUI7UUFDeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDL0MsQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQW9CLEVBQUUsU0FBaUI7UUFDMUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FDekMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFDMUQsSUFBSSxzQkFBUyxDQUFDLEdBQUcsQ0FBQyxDQUNuQixDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiO2dCQUNFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDcEIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUU7Z0JBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7YUFDNUI7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2pELE9BQU87Z0JBQ0wsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPO2dCQUMxQixLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQWdCO2dCQUNqQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2FBQzVCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxjQUFzQjtRQUN2QyxJQUFJLFNBQTRCLENBQUM7UUFDakMsSUFBSSxDQUFDO1lBQ0gsU0FBUyxHQUFHLGVBQUssQ0FBQyw0QkFBNEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFJLENBQUMsaUNBQWlDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsNEJBQTRCLENBQUMsb0JBQTRCO1FBQzlELElBQUksQ0FBQztZQUNILE9BQU8sZUFBSyxDQUFDLDRCQUE0QixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDOUIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTTtRQUNYLE9BQU8sSUFBSSxzQkFBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hGLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7SUFDakgsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixrQkFBa0I7UUFDaEIsTUFBTSxZQUFZLEdBQUc7WUFDbkIsSUFBSTtZQUNKLFNBQVM7WUFDVCxjQUFjO1lBQ2QsZUFBZTtZQUNmLGNBQWM7WUFDZCxLQUFLO1lBQ0wsZ0JBQWdCO1lBQ2hCLFFBQVE7WUFDUixNQUFNO1NBQ1AsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUEyQixJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3pELE1BQU0sWUFBWSxHQUFHLE9BQU87YUFDekIsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxzQkFBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3RGLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTztZQUNMLFlBQVk7WUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxPQUFPO1lBQ1AsWUFBWTtZQUNaLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFlBQVksRUFBRSxHQUFHO1lBQ2pCLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVTLEtBQUssQ0FBQyxtQkFBbUI7UUFDakMsTUFBTSxPQUFPLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLHFCQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQU8sQ0FBQyxPQUFPLENBQUM7UUFDbkgsTUFBTSxLQUFLLEdBQUcsSUFBSSxjQUFLLENBQUMsSUFBSSxvQkFBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sYUFBYSxHQUFHLHVCQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5RCxNQUFNLFNBQVMsR0FBRyxNQUFNLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNyRCxNQUFNLEVBQUUsYUFBYTtZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixFQUF5QztZQUM3RSxPQUFPLEVBQUU7Z0JBQ1AsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUMvQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQy9CLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDcEMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGNBQWM7YUFDM0M7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUM7SUFDbEQsQ0FBQztJQUVPLDhCQUE4QjtRQUNwQyxNQUFNLGNBQWMsR0FBRyxJQUFJLCtCQUFzQixDQUMvQyxJQUFJLENBQUMsZUFBZSxFQUNwQixFQUFFLEVBQ0YsdUJBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQ2pELENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBQSwrQkFBc0IsRUFBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEVBQUUsdUNBQThCLENBQUMsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFTyxpQ0FBaUM7UUFDdkMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUEsK0JBQXNCLEVBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsRUFBRSw2QkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFDRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFDdEIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUztZQUNoQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTO1lBQ2hDLENBQUMsSUFBSSxDQUFDLGtCQUFrQjtZQUN4QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTO1lBQ2xDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVM7WUFDbEMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQ3RCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksMEJBQWlCLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSx1QkFBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ2xILE1BQU0sZUFBZSxHQUFHLElBQUkseUJBQWdCLENBQUMsZUFBSyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoSCxNQUFNLGVBQWUsR0FBRyxJQUFJLHlCQUFnQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5RSxNQUFNLG1CQUFtQixHQUFHLElBQUksb0NBQTJCLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzlGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSx5QkFBZ0IsQ0FBQyxlQUFLLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BILE1BQU0saUJBQWlCLEdBQUcsSUFBSSx5QkFBZ0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEYsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLG9DQUEyQixDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFBLG9DQUEyQixFQUFDLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUN0RyxDQUFDOztBQXZZSCxrQ0F3WUM7QUF6WFEsNEJBQWdCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQywyQkFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQdWJsaWNLZXksXG4gIFNpZ25hdHVyZSxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZywgTmV0d29ya1R5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEFjY291bnRBZGRyZXNzLFxuICBBY2NvdW50QXV0aGVudGljYXRvcixcbiAgQWNjb3VudEF1dGhlbnRpY2F0b3JFZDI1NTE5LFxuICBBY2NvdW50QXV0aGVudGljYXRvck5vQWNjb3VudEF1dGhlbnRpY2F0b3IsXG4gIEFwdG9zLFxuICBBcHRvc0NvbmZpZyxcbiAgREVGQVVMVF9NQVhfR0FTX0FNT1VOVCxcbiAgRWQyNTUxOVB1YmxpY0tleSxcbiAgRWQyNTUxOVNpZ25hdHVyZSxcbiAgRmVlUGF5ZXJSYXdUcmFuc2FjdGlvbixcbiAgZ2VuZXJhdGVTaWduaW5nTWVzc2FnZSxcbiAgZ2VuZXJhdGVVc2VyVHJhbnNhY3Rpb25IYXNoLFxuICBIZXgsXG4gIElucHV0R2VuZXJhdGVUcmFuc2FjdGlvblBheWxvYWREYXRhLFxuICBOZXR3b3JrLFxuICBSQVdfVFJBTlNBQ1RJT05fU0FMVCxcbiAgUkFXX1RSQU5TQUNUSU9OX1dJVEhfREFUQV9TQUxULFxuICBSYXdUcmFuc2FjdGlvbixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpbXBsZVRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbkF1dGhlbnRpY2F0b3JGZWVQYXllcixcbiAgVHJhbnNhY3Rpb25QYXlsb2FkLFxufSBmcm9tICdAYXB0b3MtbGFicy90cy1zZGsnO1xuaW1wb3J0IHsgREVGQVVMVF9HQVNfVU5JVF9QUklDRSwgVU5BVkFJTEFCTEVfVEVYVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQXB0VHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgVHhEYXRhIH0gZnJvbSAnLi4vaWZhY2UnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX3Jhd1RyYW5zYWN0aW9uOiBSYXdUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIF9zZW5kZXJTaWduYXR1cmU6IFNpZ25hdHVyZTtcbiAgcHJvdGVjdGVkIF9mZWVQYXllclNpZ25hdHVyZTogU2lnbmF0dXJlO1xuICBwcm90ZWN0ZWQgX3NlbmRlcjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgX3JlY2lwaWVudHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gIHByb3RlY3RlZCBfc2VxdWVuY2VOdW1iZXI6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9tYXhHYXNBbW91bnQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9nYXNVbml0UHJpY2U6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9nYXNVc2VkOiBudW1iZXI7XG4gIHByb3RlY3RlZCBfZXhwaXJhdGlvblRpbWU6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9mZWVQYXllckFkZHJlc3M6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9hc3NldElkOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfaXNTaW11bGF0ZVR4bjogYm9vbGVhbjtcblxuICBzdGF0aWMgRU1QVFlfUFVCTElDX0tFWSA9IEJ1ZmZlci5hbGxvYygzMik7XG4gIHN0YXRpYyBFTVBUWV9TSUdOQVRVUkUgPSBCdWZmZXIuYWxsb2MoNjQpO1xuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fbWF4R2FzQW1vdW50ID0gREVGQVVMVF9NQVhfR0FTX0FNT1VOVDtcbiAgICB0aGlzLl9nYXNVbml0UHJpY2UgPSBERUZBVUxUX0dBU19VTklUX1BSSUNFO1xuICAgIHRoaXMuX2dhc1VzZWQgPSAwO1xuICAgIHRoaXMuX2V4cGlyYXRpb25UaW1lID0gdXRpbHMuZ2V0VHhuRXhwaXJhdGlvblRpbWVzdGFtcCgpO1xuICAgIHRoaXMuX3NlcXVlbmNlTnVtYmVyID0gMDtcbiAgICB0aGlzLl9zZW5kZXIgPSBBY2NvdW50QWRkcmVzcy5aRVJPLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5fcmVjaXBpZW50cyA9IFtdO1xuICAgIHRoaXMuX2Fzc2V0SWQgPSBBY2NvdW50QWRkcmVzcy5aRVJPLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5faXNTaW11bGF0ZVR4biA9IGZhbHNlO1xuICAgIHRoaXMuX3NlbmRlclNpZ25hdHVyZSA9IHtcbiAgICAgIHB1YmxpY0tleToge1xuICAgICAgICBwdWI6IEhleC5mcm9tSGV4SW5wdXQoVHJhbnNhY3Rpb24uRU1QVFlfUFVCTElDX0tFWSkudG9TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgICBzaWduYXR1cmU6IFRyYW5zYWN0aW9uLkVNUFRZX1NJR05BVFVSRSxcbiAgICB9O1xuICAgIHRoaXMuX2ZlZVBheWVyQWRkcmVzcyA9IEFjY291bnRBZGRyZXNzLlpFUk8udG9TdHJpbmcoKTtcbiAgICB0aGlzLl9mZWVQYXllclNpZ25hdHVyZSA9IHtcbiAgICAgIHB1YmxpY0tleToge1xuICAgICAgICBwdWI6IEhleC5mcm9tSGV4SW5wdXQoVHJhbnNhY3Rpb24uRU1QVFlfUFVCTElDX0tFWSkudG9TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgICBzaWduYXR1cmU6IFRyYW5zYWN0aW9uLkVNUFRZX1NJR05BVFVSRSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICoqL1xuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgdGhpcy5nZW5lcmF0ZVR4bklkKCk7XG4gICAgcmV0dXJuIHRoaXMuX2lkID8/IFVOQVZBSUxBQkxFX1RFWFQ7XG4gIH1cblxuICBnZXQgc2VuZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRlcjtcbiAgfVxuXG4gIHNldCBzZW5kZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NlbmRlciA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGByZWNpcGllbnRzKClgLlxuICAgKi9cbiAgZ2V0IHJlY2lwaWVudCgpOiBUcmFuc2FjdGlvblJlY2lwaWVudCB7XG4gICAgYXNzZXJ0KHRoaXMuX3JlY2lwaWVudHMubGVuZ3RoID4gMCwgJ05vIHJlY2lwaWVudHMgYXZhaWxhYmxlJyk7XG4gICAgcmV0dXJuIHRoaXMuX3JlY2lwaWVudHNbMF07XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgYHJlY2lwaWVudHMoKWAuXG4gICAqL1xuICBzZXQgcmVjaXBpZW50KHZhbHVlOiBUcmFuc2FjdGlvblJlY2lwaWVudCkge1xuICAgIHRoaXMucmVjaXBpZW50cyA9IFt2YWx1ZV07XG4gIH1cblxuICBnZXQgcmVjaXBpZW50cygpOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5fcmVjaXBpZW50cztcbiAgfVxuXG4gIHNldCByZWNpcGllbnRzKHZhbHVlOiBUcmFuc2FjdGlvblJlY2lwaWVudFtdKSB7XG4gICAgdGhpcy5fcmVjaXBpZW50cyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHNlcXVlbmNlTnVtYmVyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcXVlbmNlTnVtYmVyO1xuICB9XG5cbiAgc2V0IHNlcXVlbmNlTnVtYmVyKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zZXF1ZW5jZU51bWJlciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IG1heEdhc0Ftb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXhHYXNBbW91bnQ7XG4gIH1cblxuICBzZXQgbWF4R2FzQW1vdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhHYXNBbW91bnQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBnYXNVbml0UHJpY2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZ2FzVW5pdFByaWNlO1xuICB9XG5cbiAgc2V0IGdhc1VuaXRQcmljZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZ2FzVW5pdFByaWNlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZ2FzVXNlZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9nYXNVc2VkO1xuICB9XG5cbiAgc2V0IGdhc1VzZWQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2dhc1VzZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBleHBpcmF0aW9uVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9leHBpcmF0aW9uVGltZTtcbiAgfVxuXG4gIHNldCBleHBpcmF0aW9uVGltZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBmZWVQYXllckFkZHJlc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmVlUGF5ZXJBZGRyZXNzO1xuICB9XG5cbiAgc2V0IHRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSkge1xuICAgIHRoaXMuX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICBnZXQgYXNzZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hc3NldElkO1xuICB9XG5cbiAgc2V0IGFzc2V0SWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2Fzc2V0SWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpc1NpbXVsYXRlVHhuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc1NpbXVsYXRlVHhuO1xuICB9XG5cbiAgc2V0IGlzU2ltdWxhdGVUeG4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc1NpbXVsYXRlVHhuID0gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0VHJhbnNhY3Rpb25QYXlsb2FkRGF0YSgpOiBJbnB1dEdlbmVyYXRlVHJhbnNhY3Rpb25QYXlsb2FkRGF0YTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcGFyc2VUcmFuc2FjdGlvblBheWxvYWQocGF5bG9hZDogVHJhbnNhY3Rpb25QYXlsb2FkKTogdm9pZDtcblxuICBmcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHhuOiBTaWduZWRUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXdUeG4gPSBzaWduZWRUeG4ucmF3X3R4bjtcbiAgICAgIHRoaXMucGFyc2VUcmFuc2FjdGlvblBheWxvYWQocmF3VHhuLnBheWxvYWQpO1xuICAgICAgdGhpcy5fc2VuZGVyID0gcmF3VHhuLnNlbmRlci50b1N0cmluZygpO1xuICAgICAgdGhpcy5fc2VxdWVuY2VOdW1iZXIgPSB1dGlscy5jYXN0VG9OdW1iZXIocmF3VHhuLnNlcXVlbmNlX251bWJlcik7XG4gICAgICB0aGlzLl9tYXhHYXNBbW91bnQgPSB1dGlscy5jYXN0VG9OdW1iZXIocmF3VHhuLm1heF9nYXNfYW1vdW50KTtcbiAgICAgIHRoaXMuX2dhc1VuaXRQcmljZSA9IHV0aWxzLmNhc3RUb051bWJlcihyYXdUeG4uZ2FzX3VuaXRfcHJpY2UpO1xuICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUgPSB1dGlscy5jYXN0VG9OdW1iZXIocmF3VHhuLmV4cGlyYXRpb25fdGltZXN0YW1wX3NlY3MpO1xuICAgICAgdGhpcy5fcmF3VHJhbnNhY3Rpb24gPSByYXdUeG47XG5cbiAgICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgICAgIGNvbnN0IGF1dGhlbnRpY2F0b3IgPSBzaWduZWRUeG4uYXV0aGVudGljYXRvciBhcyBUcmFuc2FjdGlvbkF1dGhlbnRpY2F0b3JGZWVQYXllcjtcbiAgICAgIHRoaXMuX2ZlZVBheWVyQWRkcmVzcyA9IGF1dGhlbnRpY2F0b3IuZmVlX3BheWVyLmFkZHJlc3MudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHNlbmRlckF1dGhlbnRpY2F0b3IgPSBhdXRoZW50aWNhdG9yLnNlbmRlciBhcyBBY2NvdW50QXV0aGVudGljYXRvckVkMjU1MTk7XG4gICAgICBjb25zdCBzZW5kZXJTaWduYXR1cmUgPSBCdWZmZXIuZnJvbShzZW5kZXJBdXRoZW50aWNhdG9yLnNpZ25hdHVyZS50b1VpbnQ4QXJyYXkoKSk7XG4gICAgICB0aGlzLmFkZFNlbmRlclNpZ25hdHVyZSh7IHB1Yjogc2VuZGVyQXV0aGVudGljYXRvci5wdWJsaWNfa2V5LnRvU3RyaW5nKCkgfSwgc2VuZGVyU2lnbmF0dXJlKTtcblxuICAgICAgY29uc3QgZmVlUGF5ZXJBdXRoZW50aWNhdG9yID0gYXV0aGVudGljYXRvci5mZWVfcGF5ZXIuYXV0aGVudGljYXRvciBhcyBBY2NvdW50QXV0aGVudGljYXRvckVkMjU1MTk7XG4gICAgICBjb25zdCBmZWVQYXllclNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKGZlZVBheWVyQXV0aGVudGljYXRvci5zaWduYXR1cmUudG9VaW50OEFycmF5KCkpO1xuICAgICAgdGhpcy5hZGRGZWVQYXllclNpZ25hdHVyZShcbiAgICAgICAgeyBwdWI6IHV0aWxzLnN0cmlwSGV4UHJlZml4KGZlZVBheWVyQXV0aGVudGljYXRvci5wdWJsaWNfa2V5LnRvU3RyaW5nKCkpIH0sXG4gICAgICAgIGZlZVBheWVyU2lnbmF0dXJlXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ludmFsaWQgc2lnbmVkIHRyYW5zYWN0aW9uJywgZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc2lnbmVkIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgY2FuU2lnbihfa2V5OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3Jhd1RyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoJ0VtcHR5IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgc2VyaWFsaXplKCk6IHN0cmluZyB7XG4gICAgbGV0IHNlbmRlckF1dGhlbnRpY2F0b3I6IEFjY291bnRBdXRoZW50aWNhdG9yO1xuICAgIGxldCBmZWVQYXllckF1dGhlbnRpY2F0b3I6IEFjY291bnRBdXRoZW50aWNhdG9yO1xuICAgIGlmICh0aGlzLmlzU2ltdWxhdGVUeG4pIHtcbiAgICAgIHNlbmRlckF1dGhlbnRpY2F0b3IgPSBuZXcgQWNjb3VudEF1dGhlbnRpY2F0b3JOb0FjY291bnRBdXRoZW50aWNhdG9yKCk7XG4gICAgICBmZWVQYXllckF1dGhlbnRpY2F0b3IgPSBuZXcgQWNjb3VudEF1dGhlbnRpY2F0b3JOb0FjY291bnRBdXRoZW50aWNhdG9yKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbmRlclB1YmxpY0tleUJ1ZmZlciA9IHV0aWxzLmdldEJ1ZmZlckZyb21IZXhTdHJpbmcodGhpcy5fc2VuZGVyU2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpO1xuICAgICAgY29uc3Qgc2VuZGVyUHVibGljS2V5ID0gbmV3IEVkMjU1MTlQdWJsaWNLZXkoc2VuZGVyUHVibGljS2V5QnVmZmVyKTtcbiAgICAgIGNvbnN0IHNlbmRlclNpZ25hdHVyZSA9IG5ldyBFZDI1NTE5U2lnbmF0dXJlKHRoaXMuX3NlbmRlclNpZ25hdHVyZS5zaWduYXR1cmUpO1xuICAgICAgc2VuZGVyQXV0aGVudGljYXRvciA9IG5ldyBBY2NvdW50QXV0aGVudGljYXRvckVkMjU1MTkoc2VuZGVyUHVibGljS2V5LCBzZW5kZXJTaWduYXR1cmUpO1xuXG4gICAgICBjb25zdCBmZWVQYXllclB1YmxpY0tleUJ1ZmZlciA9IHV0aWxzLmdldEJ1ZmZlckZyb21IZXhTdHJpbmcodGhpcy5fZmVlUGF5ZXJTaWduYXR1cmUucHVibGljS2V5LnB1Yik7XG4gICAgICBjb25zdCBmZWVQYXllclB1YmxpY0tleSA9IG5ldyBFZDI1NTE5UHVibGljS2V5KGZlZVBheWVyUHVibGljS2V5QnVmZmVyKTtcbiAgICAgIGNvbnN0IGZlZVBheWVyU2lnbmF0dXJlID0gbmV3IEVkMjU1MTlTaWduYXR1cmUodGhpcy5fZmVlUGF5ZXJTaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICAgIGZlZVBheWVyQXV0aGVudGljYXRvciA9IG5ldyBBY2NvdW50QXV0aGVudGljYXRvckVkMjU1MTkoZmVlUGF5ZXJQdWJsaWNLZXksIGZlZVBheWVyU2lnbmF0dXJlKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eG5BdXRoZW50aWNhdG9yID0gbmV3IFRyYW5zYWN0aW9uQXV0aGVudGljYXRvckZlZVBheWVyKHNlbmRlckF1dGhlbnRpY2F0b3IsIFtdLCBbXSwge1xuICAgICAgYWRkcmVzczogQWNjb3VudEFkZHJlc3MuZnJvbVN0cmluZyh0aGlzLl9mZWVQYXllckFkZHJlc3MpLFxuICAgICAgYXV0aGVudGljYXRvcjogZmVlUGF5ZXJBdXRoZW50aWNhdG9yLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2lnbmVkVHhuID0gbmV3IFNpZ25lZFRyYW5zYWN0aW9uKHRoaXMuX3Jhd1RyYW5zYWN0aW9uLCB0eG5BdXRoZW50aWNhdG9yKTtcbiAgICByZXR1cm4gc2lnbmVkVHhuLnRvU3RyaW5nKCk7XG4gIH1cblxuICBhZGRTZW5kZXJTaWduYXR1cmUocHVibGljS2V5OiBQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fc2lnbmF0dXJlcyA9IFtzaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpXTtcbiAgICB0aGlzLl9zZW5kZXJTaWduYXR1cmUgPSB7IHB1YmxpY0tleSwgc2lnbmF0dXJlIH07XG4gIH1cblxuICBnZXRGZWVQYXllclB1YktleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mZWVQYXllclNpZ25hdHVyZS5wdWJsaWNLZXkucHViO1xuICB9XG5cbiAgYWRkRmVlUGF5ZXJTaWduYXR1cmUocHVibGljS2V5OiBQdWJsaWNLZXksIHNpZ25hdHVyZTogQnVmZmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZmVlUGF5ZXJTaWduYXR1cmUgPSB7IHB1YmxpY0tleSwgc2lnbmF0dXJlIH07XG4gIH1cblxuICBhZGRGZWVQYXllckFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fZmVlUGF5ZXJBZGRyZXNzID0gYWRkcmVzcztcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuYnVpbGRSYXdUcmFuc2FjdGlvbigpO1xuICAgIHRoaXMuZ2VuZXJhdGVUeG5JZCgpO1xuICAgIHRoaXMubG9hZElucHV0c0FuZE91dHB1dHMoKTtcbiAgfVxuXG4gIGxvYWRJbnB1dHNBbmRPdXRwdXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHRvdGFsQW1vdW50ID0gdGhpcy5fcmVjaXBpZW50cy5yZWR1Y2UoXG4gICAgICAoYWNjdW11bGF0b3IsIGN1cnJlbnQpID0+IGFjY3VtdWxhdG9yLnBsdXMoY3VycmVudC5hbW91bnQpLFxuICAgICAgbmV3IEJpZ051bWJlcignMCcpXG4gICAgKTtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRoaXMuc2VuZGVyLFxuICAgICAgICB2YWx1ZTogdG90YWxBbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgY29pbjogdGhpcy5fY29pbkNvbmZpZy5uYW1lLFxuICAgICAgfSxcbiAgICBdO1xuICAgIHRoaXMuX291dHB1dHMgPSB0aGlzLl9yZWNpcGllbnRzLm1hcCgocmVjaXBpZW50KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhZGRyZXNzOiByZWNpcGllbnQuYWRkcmVzcyxcbiAgICAgICAgdmFsdWU6IHJlY2lwaWVudC5hbW91bnQgYXMgc3RyaW5nLFxuICAgICAgICBjb2luOiB0aGlzLl9jb2luQ29uZmlnLm5hbWUsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZnJvbVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgc2lnbmVkVHhuOiBTaWduZWRUcmFuc2FjdGlvbjtcbiAgICB0cnkge1xuICAgICAgc2lnbmVkVHhuID0gdXRpbHMuZGVzZXJpYWxpemVTaWduZWRUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignaW52YWxpZCByYXcgdHJhbnNhY3Rpb24nLCBlKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByYXcgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgdGhpcy5mcm9tRGVzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkVHhuKTtcbiAgfVxuICAvKipcbiAgICogRGVzZXJpYWxpemVzIGEgc2lnbmVkIHRyYW5zYWN0aW9uIGhleCBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNpZ25lZFJhd1RyYW5zYWN0aW9uXG4gICAqIEByZXR1cm5zIHtTaWduZWRUcmFuc2FjdGlvbn0gdGhlIGFwdG9zIHNpZ25lZCB0cmFuc2FjdGlvblxuICAgKi9cbiAgc3RhdGljIGRlc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkUmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFNpZ25lZFRyYW5zYWN0aW9uIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHV0aWxzLmRlc2VyaWFsaXplU2lnbmVkVHJhbnNhY3Rpb24oc2lnbmVkUmF3VHJhbnNhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJywgZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmF3IHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgc2VuZGVyOiB0aGlzLnNlbmRlcixcbiAgICAgIHJlY2lwaWVudDogdGhpcy5yZWNpcGllbnQsXG4gICAgICByZWNpcGllbnRzOiB0aGlzLnJlY2lwaWVudHMsXG4gICAgICBzZXF1ZW5jZU51bWJlcjogdGhpcy5zZXF1ZW5jZU51bWJlcixcbiAgICAgIG1heEdhc0Ftb3VudDogdGhpcy5tYXhHYXNBbW91bnQsXG4gICAgICBnYXNVbml0UHJpY2U6IHRoaXMuZ2FzVW5pdFByaWNlLFxuICAgICAgZ2FzVXNlZDogdGhpcy5nYXNVc2VkLFxuICAgICAgZXhwaXJhdGlvblRpbWU6IHRoaXMuZXhwaXJhdGlvblRpbWUsXG4gICAgICBmZWVQYXllcjogdGhpcy5mZWVQYXllckFkZHJlc3MsXG4gICAgICBhc3NldElkOiB0aGlzLmFzc2V0SWQsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGZWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IEJpZ051bWJlcih0aGlzLmdhc1VzZWQpLm11bHRpcGxpZWRCeSh0aGlzLmdhc1VuaXRQcmljZSkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2lnbmFibGVQYXlsb2FkKCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIHRoaXMuZmVlUGF5ZXJBZGRyZXNzID8gdGhpcy5nZXRTaWduYWJsZVBheWxvYWRXaXRoRmVlUGF5ZXIoKSA6IHRoaXMuZ2V0U2lnbmFibGVQYXlsb2FkV2l0aG91dEZlZVBheWVyKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IEFwdFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFtcbiAgICAgICdpZCcsXG4gICAgICAnb3V0cHV0cycsXG4gICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICdjaGFuZ2VPdXRwdXRzJyxcbiAgICAgICdjaGFuZ2VBbW91bnQnLFxuICAgICAgJ2ZlZScsXG4gICAgICAnd2l0aGRyYXdBbW91bnQnLFxuICAgICAgJ3NlbmRlcicsXG4gICAgICAndHlwZScsXG4gICAgXTtcblxuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSB0aGlzLl9yZWNpcGllbnRzO1xuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IG91dHB1dHNcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yLCBjdXJyZW50KSA9PiBhY2N1bXVsYXRvci5wbHVzKGN1cnJlbnQuYW1vdW50KSwgbmV3IEJpZ051bWJlcignMCcpKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3BsYXlPcmRlcixcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIG91dHB1dEFtb3VudCxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICBmZWU6IHsgZmVlOiB0aGlzLmdldEZlZSgpIH0sXG4gICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRSYXdUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBuZXR3b3JrOiBOZXR3b3JrID0gdGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUgPT09IE5ldHdvcmtUeXBlLk1BSU5ORVQgPyBOZXR3b3JrLk1BSU5ORVQgOiBOZXR3b3JrLlRFU1RORVQ7XG4gICAgY29uc3QgYXB0b3MgPSBuZXcgQXB0b3MobmV3IEFwdG9zQ29uZmlnKHsgbmV0d29yayB9KSk7XG4gICAgY29uc3Qgc2VuZGVyQWRkcmVzcyA9IEFjY291bnRBZGRyZXNzLmZyb21TdHJpbmcodGhpcy5fc2VuZGVyKTtcblxuICAgIGNvbnN0IHNpbXBsZVR4biA9IGF3YWl0IGFwdG9zLnRyYW5zYWN0aW9uLmJ1aWxkLnNpbXBsZSh7XG4gICAgICBzZW5kZXI6IHNlbmRlckFkZHJlc3MsXG4gICAgICBkYXRhOiB0aGlzLmdldFRyYW5zYWN0aW9uUGF5bG9hZERhdGEoKSBhcyBJbnB1dEdlbmVyYXRlVHJhbnNhY3Rpb25QYXlsb2FkRGF0YSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbWF4R2FzQW1vdW50OiB0aGlzLm1heEdhc0Ftb3VudCxcbiAgICAgICAgZ2FzVW5pdFByaWNlOiB0aGlzLmdhc1VuaXRQcmljZSxcbiAgICAgICAgZXhwaXJlVGltZXN0YW1wOiB0aGlzLmV4cGlyYXRpb25UaW1lLFxuICAgICAgICBhY2NvdW50U2VxdWVuY2VOdW1iZXI6IHRoaXMuc2VxdWVuY2VOdW1iZXIsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuX3Jhd1RyYW5zYWN0aW9uID0gc2ltcGxlVHhuLnJhd1RyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaWduYWJsZVBheWxvYWRXaXRoRmVlUGF5ZXIoKTogQnVmZmVyIHtcbiAgICBjb25zdCBmZWVQYXllclJhd1R4biA9IG5ldyBGZWVQYXllclJhd1RyYW5zYWN0aW9uKFxuICAgICAgdGhpcy5fcmF3VHJhbnNhY3Rpb24sXG4gICAgICBbXSxcbiAgICAgIEFjY291bnRBZGRyZXNzLmZyb21TdHJpbmcodGhpcy5fZmVlUGF5ZXJBZGRyZXNzKVxuICAgICk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGdlbmVyYXRlU2lnbmluZ01lc3NhZ2UoZmVlUGF5ZXJSYXdUeG4uYmNzVG9CeXRlcygpLCBSQVdfVFJBTlNBQ1RJT05fV0lUSF9EQVRBX1NBTFQpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2lnbmFibGVQYXlsb2FkV2l0aG91dEZlZVBheWVyKCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGdlbmVyYXRlU2lnbmluZ01lc3NhZ2UodGhpcy5fcmF3VHJhbnNhY3Rpb24uYmNzVG9CeXRlcygpLCBSQVdfVFJBTlNBQ1RJT05fU0FMVCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVR4bklkKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLl9zZW5kZXJTaWduYXR1cmUgfHxcbiAgICAgICF0aGlzLl9zZW5kZXJTaWduYXR1cmUucHVibGljS2V5IHx8XG4gICAgICAhdGhpcy5fc2VuZGVyU2lnbmF0dXJlLnNpZ25hdHVyZSB8fFxuICAgICAgIXRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlIHx8XG4gICAgICAhdGhpcy5fZmVlUGF5ZXJTaWduYXR1cmUucHVibGljS2V5IHx8XG4gICAgICAhdGhpcy5fZmVlUGF5ZXJTaWduYXR1cmUuc2lnbmF0dXJlIHx8XG4gICAgICAhdGhpcy5fZmVlUGF5ZXJBZGRyZXNzXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFNpbXBsZVRyYW5zYWN0aW9uKHRoaXMuX3Jhd1RyYW5zYWN0aW9uLCBBY2NvdW50QWRkcmVzcy5mcm9tU3RyaW5nKHRoaXMuX2ZlZVBheWVyQWRkcmVzcykpO1xuICAgIGNvbnN0IHNlbmRlclB1YmxpY0tleSA9IG5ldyBFZDI1NTE5UHVibGljS2V5KHV0aWxzLmdldEJ1ZmZlckZyb21IZXhTdHJpbmcodGhpcy5fc2VuZGVyU2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpKTtcbiAgICBjb25zdCBzZW5kZXJTaWduYXR1cmUgPSBuZXcgRWQyNTUxOVNpZ25hdHVyZSh0aGlzLl9zZW5kZXJTaWduYXR1cmUuc2lnbmF0dXJlKTtcbiAgICBjb25zdCBzZW5kZXJBdXRoZW50aWNhdG9yID0gbmV3IEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOShzZW5kZXJQdWJsaWNLZXksIHNlbmRlclNpZ25hdHVyZSk7XG4gICAgY29uc3QgZmVlUGF5ZXJQdWJsaWNLZXkgPSBuZXcgRWQyNTUxOVB1YmxpY0tleSh1dGlscy5nZXRCdWZmZXJGcm9tSGV4U3RyaW5nKHRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlLnB1YmxpY0tleS5wdWIpKTtcbiAgICBjb25zdCBmZWVQYXllclNpZ25hdHVyZSA9IG5ldyBFZDI1NTE5U2lnbmF0dXJlKHRoaXMuX2ZlZVBheWVyU2lnbmF0dXJlLnNpZ25hdHVyZSk7XG4gICAgY29uc3QgZmVlUGF5ZXJBdXRoZW50aWNhdG9yID0gbmV3IEFjY291bnRBdXRoZW50aWNhdG9yRWQyNTUxOShmZWVQYXllclB1YmxpY0tleSwgZmVlUGF5ZXJTaWduYXR1cmUpO1xuICAgIHRoaXMuX2lkID0gZ2VuZXJhdGVVc2VyVHJhbnNhY3Rpb25IYXNoKHsgdHJhbnNhY3Rpb24sIHNlbmRlckF1dGhlbnRpY2F0b3IsIGZlZVBheWVyQXV0aGVudGljYXRvciB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Transaction } from './transaction';
|
|
2
|
+
import { InputGenerateTransactionPayloadData, TransactionPayload } from '@aptos-labs/ts-sdk';
|
|
3
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
4
|
+
export declare class TransferTransaction extends Transaction {
|
|
5
|
+
constructor(coinConfig: Readonly<CoinConfig>);
|
|
6
|
+
protected parseTransactionPayload(payload: TransactionPayload): void;
|
|
7
|
+
protected getTransactionPayloadData(): InputGenerateTransactionPayloadData;
|
|
8
|
+
private isValidPayload;
|
|
9
|
+
private coinTransferAbi;
|
|
10
|
+
private batchCoinTransferAbi;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=transferTransaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferTransaction.d.ts","sourceRoot":"","sources":["../../../../src/lib/transaction/transferTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAGL,mCAAmC,EACnC,kBAAkB,EAKnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI7D,qBAAa,mBAAoB,SAAQ,WAAW;gBACtC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM5C,SAAS,CAAC,uBAAuB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAWpE,SAAS,CAAC,yBAAyB,IAAI,mCAAmC;IAoB1E,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,eAAe,CAGrB;IAEF,OAAO,CAAC,oBAAoB,CAG1B;CACH"}
|