@bitgo-beta/abstract-eth 1.0.2-beta.202 → 1.0.2-beta.2020
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/abstractEthLikeCoin.d.ts +20 -9
- package/dist/src/abstractEthLikeCoin.d.ts.map +1 -1
- package/dist/src/abstractEthLikeCoin.js +46 -15
- package/dist/src/abstractEthLikeNewCoins.d.ts +847 -0
- package/dist/src/abstractEthLikeNewCoins.d.ts.map +1 -0
- package/dist/src/abstractEthLikeNewCoins.js +2553 -0
- package/dist/src/ethLikeToken.d.ts +38 -6
- package/dist/src/ethLikeToken.d.ts.map +1 -1
- package/dist/src/ethLikeToken.js +289 -10
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -2
- package/dist/src/lib/constants.d.ts +4 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +11 -0
- package/dist/src/lib/contractCall.d.ts +8 -0
- package/dist/src/lib/contractCall.d.ts.map +1 -0
- package/dist/src/lib/contractCall.js +17 -0
- package/dist/src/lib/decryptionDelegationBuilder.d.ts +90 -0
- package/dist/src/lib/decryptionDelegationBuilder.d.ts.map +1 -0
- package/dist/src/lib/decryptionDelegationBuilder.js +59 -0
- package/dist/src/lib/iface.d.ts +137 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +8 -0
- package/dist/src/lib/index.d.ts +19 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +60 -0
- package/dist/src/lib/keyPair.d.ts +26 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +65 -0
- package/dist/src/lib/messages/eip191/eip191Message.d.ts +12 -0
- package/dist/src/lib/messages/eip191/eip191Message.d.ts.map +1 -0
- package/dist/src/lib/messages/eip191/eip191Message.js +25 -0
- package/dist/src/lib/messages/eip191/eip191MessageBuilder.d.ts +19 -0
- package/dist/src/lib/messages/eip191/eip191MessageBuilder.d.ts.map +1 -0
- package/dist/src/lib/messages/eip191/eip191MessageBuilder.js +27 -0
- package/dist/src/lib/messages/eip191/index.d.ts +3 -0
- package/dist/src/lib/messages/eip191/index.d.ts.map +1 -0
- package/dist/src/lib/messages/eip191/index.js +19 -0
- package/dist/src/lib/messages/eip712/eip712Message.d.ts +6 -0
- package/dist/src/lib/messages/eip712/eip712Message.d.ts.map +1 -0
- package/dist/src/lib/messages/eip712/eip712Message.js +27 -0
- package/dist/src/lib/messages/eip712/eip712MessageBuilder.d.ts +7 -0
- package/dist/src/lib/messages/eip712/eip712MessageBuilder.d.ts.map +1 -0
- package/dist/src/lib/messages/eip712/eip712MessageBuilder.js +15 -0
- package/dist/src/lib/messages/eip712/index.d.ts +3 -0
- package/dist/src/lib/messages/eip712/index.d.ts.map +1 -0
- package/dist/src/lib/messages/eip712/index.js +19 -0
- package/dist/src/lib/messages/index.d.ts +4 -0
- package/dist/src/lib/messages/index.d.ts.map +1 -0
- package/dist/src/lib/messages/index.js +20 -0
- package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
- package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/messages/messageBuilderFactory.js +23 -0
- package/dist/src/lib/transaction.d.ts +69 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +149 -0
- package/dist/src/lib/transactionBuilder.d.ts +270 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +834 -0
- package/dist/src/lib/transferBuilder.d.ts +76 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +307 -0
- package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts +54 -0
- package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.js +120 -0
- package/dist/src/lib/transferBuilders/index.d.ts +4 -0
- package/dist/src/lib/transferBuilders/index.d.ts.map +1 -0
- package/dist/src/lib/transferBuilders/index.js +20 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts +17 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts.map +1 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC1155.js +96 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts +21 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts.map +1 -0
- package/dist/src/lib/transferBuilders/transferBuilderERC721.js +91 -0
- package/dist/src/lib/types.d.ts +40 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +140 -0
- package/dist/src/lib/utils.d.ts +310 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +851 -0
- package/dist/src/lib/walletUtil.d.ts +42 -0
- package/dist/src/lib/walletUtil.d.ts.map +1 -0
- package/dist/src/lib/walletUtil.js +45 -0
- package/dist/src/lib/zamaUtils.d.ts +73 -0
- package/dist/src/lib/zamaUtils.d.ts.map +1 -0
- package/dist/src/lib/zamaUtils.js +159 -0
- package/dist/src/types.d.ts +9 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/test/index.d.ts +2 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +18 -0
- package/dist/test/unit/coin.d.ts +8 -0
- package/dist/test/unit/coin.d.ts.map +1 -0
- package/dist/test/unit/coin.js +577 -0
- package/dist/test/unit/decryptionDelegationBuilder.d.ts +2 -0
- package/dist/test/unit/decryptionDelegationBuilder.d.ts.map +1 -0
- package/dist/test/unit/decryptionDelegationBuilder.js +265 -0
- package/dist/test/unit/index.d.ts +8 -0
- package/dist/test/unit/index.d.ts.map +1 -0
- package/dist/test/unit/index.js +24 -0
- package/dist/test/unit/messages/abstractEthMessageBuilderTests.d.ts +3 -0
- package/dist/test/unit/messages/abstractEthMessageBuilderTests.d.ts.map +1 -0
- package/dist/test/unit/messages/abstractEthMessageBuilderTests.js +110 -0
- package/dist/test/unit/messages/abstractEthMessageTestTypes.d.ts +43 -0
- package/dist/test/unit/messages/abstractEthMessageTestTypes.d.ts.map +1 -0
- package/dist/test/unit/messages/abstractEthMessageTestTypes.js +3 -0
- package/dist/test/unit/messages/abstractEthMessagesTests.d.ts +3 -0
- package/dist/test/unit/messages/abstractEthMessagesTests.d.ts.map +1 -0
- package/dist/test/unit/messages/abstractEthMessagesTests.js +129 -0
- package/dist/test/unit/messages/eip191/eip191Message.d.ts +2 -0
- package/dist/test/unit/messages/eip191/eip191Message.d.ts.map +1 -0
- package/dist/test/unit/messages/eip191/eip191Message.js +15 -0
- package/dist/test/unit/messages/eip191/eip191MessageBuilder.d.ts +2 -0
- package/dist/test/unit/messages/eip191/eip191MessageBuilder.d.ts.map +1 -0
- package/dist/test/unit/messages/eip191/eip191MessageBuilder.js +16 -0
- package/dist/test/unit/messages/eip191/fixtures.d.ts +109 -0
- package/dist/test/unit/messages/eip191/fixtures.d.ts.map +1 -0
- package/dist/test/unit/messages/eip191/fixtures.js +63 -0
- package/dist/test/unit/messages/eip712/eip712Message.d.ts +2 -0
- package/dist/test/unit/messages/eip712/eip712Message.d.ts.map +1 -0
- package/dist/test/unit/messages/eip712/eip712Message.js +15 -0
- package/dist/test/unit/messages/eip712/eip712MessageBuilder.d.ts +2 -0
- package/dist/test/unit/messages/eip712/eip712MessageBuilder.d.ts.map +1 -0
- package/dist/test/unit/messages/eip712/eip712MessageBuilder.js +16 -0
- package/dist/test/unit/messages/eip712/fixtures.d.ts +76 -0
- package/dist/test/unit/messages/eip712/fixtures.d.ts.map +1 -0
- package/dist/test/unit/messages/eip712/fixtures.js +120 -0
- package/dist/test/unit/messages/index.d.ts +4 -0
- package/dist/test/unit/messages/index.d.ts.map +1 -0
- package/dist/test/unit/messages/index.js +20 -0
- package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
- package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/messages/messageBuilderFactory.js +52 -0
- package/dist/test/unit/token.d.ts +2 -0
- package/dist/test/unit/token.d.ts.map +1 -0
- package/dist/test/unit/token.js +37 -0
- package/dist/test/unit/transaction.d.ts +3 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +73 -0
- package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +8 -0
- package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/addressInitialization.js +95 -0
- package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts +3 -0
- package/dist/test/unit/transactionBuilder/decryptionDelegation.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/decryptionDelegation.js +161 -0
- package/dist/test/unit/transactionBuilder/flushNft.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/flushNft.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/flushNft.js +381 -0
- package/dist/test/unit/transactionBuilder/index.d.ts +6 -0
- package/dist/test/unit/transactionBuilder/index.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/index.js +22 -0
- package/dist/test/unit/transactionBuilder/send.d.ts +3 -0
- package/dist/test/unit/transactionBuilder/send.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/send.js +197 -0
- package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +11 -0
- package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/walletInitialization.js +137 -0
- package/dist/test/unit/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transferBuilder.js +76 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +214 -0
- package/dist/test/unit/zamaUtils.d.ts +2 -0
- package/dist/test/unit/zamaUtils.d.ts.map +1 -0
- package/dist/test/unit/zamaUtils.js +251 -0
- package/dist/tsconfig.tsbuildinfo +1 -8244
- package/package.json +34 -10
- package/.eslintignore +0 -5
- package/CHANGELOG.md +0 -166
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./baseNFTTransferBuilder"), exports);
|
|
18
|
+
__exportStar(require("./transferBuilderERC1155"), exports);
|
|
19
|
+
__exportStar(require("./transferBuilderERC721"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3RyYW5zZmVyQnVpbGRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJEQUF5QztBQUN6QywyREFBeUM7QUFDekMsMERBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9iYXNlTkZUVHJhbnNmZXJCdWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNmZXJCdWlsZGVyRVJDMTE1NSc7XG5leHBvcnQgKiBmcm9tICcuL3RyYW5zZmVyQnVpbGRlckVSQzcyMSc7XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseNFTTransferBuilder } from './baseNFTTransferBuilder';
|
|
2
|
+
export declare class ERC1155TransferBuilder extends BaseNFTTransferBuilder {
|
|
3
|
+
private _tokenIds;
|
|
4
|
+
private _values;
|
|
5
|
+
private _bytes;
|
|
6
|
+
constructor(serializedData?: string);
|
|
7
|
+
coin(coin: string): ERC1155TransferBuilder;
|
|
8
|
+
tokenContractAddress(address: string): ERC1155TransferBuilder;
|
|
9
|
+
entry(tokenId: number, value: number): ERC1155TransferBuilder;
|
|
10
|
+
bytes(bytesInNumber: number): ERC1155TransferBuilder;
|
|
11
|
+
getIsFirstSigner(): boolean;
|
|
12
|
+
signAndBuild(chainId: string): string;
|
|
13
|
+
private hasMandatoryFields;
|
|
14
|
+
private decodeTransferData;
|
|
15
|
+
build(): string;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=transferBuilderERC1155.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilderERC1155.d.ts","sourceRoot":"","sources":["../../../../src/lib/transferBuilders/transferBuilderERC1155.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,qBAAa,sBAAuB,SAAQ,sBAAsB;IAChE,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,MAAM,CAAS;gBAEX,cAAc,CAAC,EAAE,MAAM;IAWnC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB;IAM1C,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB;IAQ7D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,sBAAsB;IAM7D,KAAK,CAAC,aAAa,EAAE,MAAM,GAAG,sBAAsB;IAKpD,gBAAgB,IAAI,OAAO;IAI3B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAqBrC,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,kBAAkB;IAe1B,KAAK,IAAI,MAAM;CAWhB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ERC1155TransferBuilder = void 0;
|
|
4
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
5
|
+
const utils_1 = require("ethers/lib/utils");
|
|
6
|
+
const contractCall_1 = require("../contractCall");
|
|
7
|
+
const utils_2 = require("../utils");
|
|
8
|
+
const walletUtil_1 = require("../walletUtil");
|
|
9
|
+
const baseNFTTransferBuilder_1 = require("./baseNFTTransferBuilder");
|
|
10
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
11
|
+
class ERC1155TransferBuilder extends baseNFTTransferBuilder_1.BaseNFTTransferBuilder {
|
|
12
|
+
constructor(serializedData) {
|
|
13
|
+
super(serializedData);
|
|
14
|
+
this.bytes(0);
|
|
15
|
+
if (serializedData) {
|
|
16
|
+
this.decodeTransferData(serializedData);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
this._tokenIds = [];
|
|
20
|
+
this._values = [];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
coin(coin) {
|
|
24
|
+
this._coin = statics_1.coins.get(coin);
|
|
25
|
+
this._nativeCoinOperationHashPrefix = this._coin.network.nativeCoinOperationHashPrefix;
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
tokenContractAddress(address) {
|
|
29
|
+
if ((0, utils_2.isValidEthAddress)(address)) {
|
|
30
|
+
this._tokenContractAddress = address;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
throw new sdk_core_1.InvalidParameterValueError('Invalid address');
|
|
34
|
+
}
|
|
35
|
+
entry(tokenId, value) {
|
|
36
|
+
this._tokenIds.push(tokenId.toString());
|
|
37
|
+
this._values.push(value.toString());
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
bytes(bytesInNumber) {
|
|
41
|
+
this._bytes = (0, utils_1.hexZeroPad)((0, utils_1.hexlify)(bytesInNumber), 32);
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
getIsFirstSigner() {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
signAndBuild(chainId) {
|
|
48
|
+
this._chainId = chainId;
|
|
49
|
+
const hasMandatoryFields = this.hasMandatoryFields();
|
|
50
|
+
if (hasMandatoryFields) {
|
|
51
|
+
this._data = this.build();
|
|
52
|
+
return (0, utils_2.sendMultiSigData)(this._tokenContractAddress, '0', // dummy amount value
|
|
53
|
+
this._data, this._expirationTime, this._sequenceId, this.getSignature());
|
|
54
|
+
}
|
|
55
|
+
throw new sdk_core_1.BuildTransactionError(`Missing transfer mandatory fields.
|
|
56
|
+
Destination (to) address, source (from) address, sequenceID, the token contract address, tokenIDs and their values are mandatory`);
|
|
57
|
+
}
|
|
58
|
+
hasMandatoryFields() {
|
|
59
|
+
return (this._tokenIds !== undefined &&
|
|
60
|
+
this._tokenIds.length !== 0 &&
|
|
61
|
+
this._values.length !== 0 &&
|
|
62
|
+
this._tokenIds.length === this._values.length &&
|
|
63
|
+
this._toAddress !== undefined &&
|
|
64
|
+
this._fromAddress !== undefined &&
|
|
65
|
+
this._tokenContractAddress !== undefined &&
|
|
66
|
+
this._sequenceId !== undefined);
|
|
67
|
+
}
|
|
68
|
+
decodeTransferData(data) {
|
|
69
|
+
const transferData = (0, utils_2.decodeERC1155TransferData)(data);
|
|
70
|
+
this._toAddress = transferData.to;
|
|
71
|
+
this._fromAddress = transferData.from;
|
|
72
|
+
this._expirationTime = transferData.expireTime;
|
|
73
|
+
this._sequenceId = transferData.sequenceId;
|
|
74
|
+
this._signature = transferData.signature;
|
|
75
|
+
this._tokenContractAddress = transferData.tokenContractAddress;
|
|
76
|
+
this._tokenIds = transferData.tokenIds;
|
|
77
|
+
this._values = transferData.values;
|
|
78
|
+
if (transferData.data) {
|
|
79
|
+
this._data = transferData.data;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
build() {
|
|
83
|
+
if (this._tokenIds.length === 1) {
|
|
84
|
+
const values = [this._fromAddress, this._toAddress, this._tokenIds[0], this._values[0], this._bytes];
|
|
85
|
+
const contractCall = new contractCall_1.ContractCall(walletUtil_1.ERC1155SafeTransferTypeMethodId, walletUtil_1.ERC1155SafeTransferTypes, values);
|
|
86
|
+
return contractCall.serialize();
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const values = [this._fromAddress, this._toAddress, this._tokenIds, this._values, this._bytes];
|
|
90
|
+
const contractCall = new contractCall_1.ContractCall(walletUtil_1.ERC1155BatchTransferTypeMethodId, walletUtil_1.ERC1155BatchTransferTypes, values);
|
|
91
|
+
return contractCall.serialize();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.ERC1155TransferBuilder = ERC1155TransferBuilder;
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyRVJDMTE1NS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdHJhbnNmZXJCdWlsZGVycy90cmFuc2ZlckJ1aWxkZXJFUkMxMTU1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUF5RjtBQUN6Riw0Q0FBdUQ7QUFFdkQsa0RBQStDO0FBQy9DLG9DQUEwRjtBQUMxRiw4Q0FLdUI7QUFDdkIscUVBQWtFO0FBQ2xFLGlEQUErRTtBQUUvRSxNQUFhLHNCQUF1QixTQUFRLCtDQUFzQjtJQUtoRSxZQUFZLGNBQXVCO1FBQ2pDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFZO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyw4QkFBOEIsR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQTBCLENBQUMsNkJBQTZCLENBQUM7UUFDM0csT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBZTtRQUNsQyxJQUFJLElBQUEseUJBQWlCLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sSUFBSSxxQ0FBMEIs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R0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JHLE1BQU0sWUFBWSxHQUFHLElBQUksMkJBQVksQ0FBQyw0Q0FBK0IsRUFBRSxxQ0FBd0IsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN6RyxPQUFPLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0YsTUFBTSxZQUFZLEdBQUcsSUFBSSwyQkFBWSxDQUFDLDZDQUFnQyxFQUFFLHNDQUF5QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzNHLE9BQU8sWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF4R0Qsd0RBd0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGhleGxpZnksIGhleFplcm9QYWQgfSBmcm9tICdldGhlcnMvbGliL3V0aWxzJztcblxuaW1wb3J0IHsgQ29udHJhY3RDYWxsIH0gZnJvbSAnLi4vY29udHJhY3RDYWxsJztcbmltcG9ydCB7IGRlY29kZUVSQzExNTVUcmFuc2ZlckRhdGEsIGlzVmFsaWRFdGhBZGRyZXNzLCBzZW5kTXVsdGlTaWdEYXRhIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgRVJDMTE1NUJhdGNoVHJhbnNmZXJUeXBlcyxcbiAgRVJDMTE1NVNhZmVUcmFuc2ZlclR5cGVzLFxuICBFUkMxMTU1QmF0Y2hUcmFuc2ZlclR5cGVNZXRob2RJZCxcbiAgRVJDMTE1NVNhZmVUcmFuc2ZlclR5cGVNZXRob2RJZCxcbn0gZnJvbSAnLi4vd2FsbGV0VXRpbCc7XG5pbXBvcnQgeyBCYXNlTkZUVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi9iYXNlTkZUVHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IGNvaW5zLCBFdGhlcmV1bU5ldHdvcmsgYXMgRXRoTGlrZU5ldHdvcmsgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuZXhwb3J0IGNsYXNzIEVSQzExNTVUcmFuc2ZlckJ1aWxkZXIgZXh0ZW5kcyBCYXNlTkZUVHJhbnNmZXJCdWlsZGVyIHtcbiAgcHJpdmF0ZSBfdG9rZW5JZHM6IHN0cmluZ1tdO1xuICBwcml2YXRlIF92YWx1ZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIF9ieXRlczogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNlcmlhbGl6ZWREYXRhPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2VyaWFsaXplZERhdGEpO1xuICAgIHRoaXMuYnl0ZXMoMCk7XG4gICAgaWYgKHNlcmlhbGl6ZWREYXRhKSB7XG4gICAgICB0aGlzLmRlY29kZVRyYW5zZmVyRGF0YShzZXJpYWxpemVkRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Rva2VuSWRzID0gW107XG4gICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICB9XG4gIH1cblxuICBjb2luKGNvaW46IHN0cmluZyk6IEVSQzExNTVUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHRoaXMuX2NvaW4gPSBjb2lucy5nZXQoY29pbik7XG4gICAgdGhpcy5fbmF0aXZlQ29pbk9wZXJhdGlvbkhhc2hQcmVmaXggPSAodGhpcy5fY29pbi5uZXR3b3JrIGFzIEV0aExpa2VOZXR3b3JrKS5uYXRpdmVDb2luT3BlcmF0aW9uSGFzaFByZWZpeDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRva2VuQ29udHJhY3RBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IEVSQzExNTVUcmFuc2ZlckJ1aWxkZXIge1xuICAgIGlmIChpc1ZhbGlkRXRoQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gIH1cblxuICBlbnRyeSh0b2tlbklkOiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiBFUkMxMTU1VHJhbnNmZXJCdWlsZGVyIHtcbiAgICB0aGlzLl90b2tlbklkcy5wdXNoKHRva2VuSWQudG9TdHJpbmcoKSk7XG4gICAgdGhpcy5fdmFsdWVzLnB1c2godmFsdWUudG9TdHJpbmcoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBieXRlcyhieXRlc0luTnVtYmVyOiBudW1iZXIpOiBFUkMxMTU1VHJhbnNmZXJCdWlsZGVyIHtcbiAgICB0aGlzLl9ieXRlcyA9IGhleFplcm9QYWQoaGV4bGlmeShieXRlc0luTnVtYmVyKSwgMzIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0SXNGaXJzdFNpZ25lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzaWduQW5kQnVpbGQoY2hhaW5JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0aGlzLl9jaGFpbklkID0gY2hhaW5JZDtcbiAgICBjb25zdCBoYXNNYW5kYXRvcnlGaWVsZHMgPSB0aGlzLmhhc01hbmRhdG9yeUZpZWxkcygpO1xuICAgIGlmIChoYXNNYW5kYXRvcnlGaWVsZHMpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSB0aGlzLmJ1aWxkKCk7XG5cbiAgICAgIHJldHVybiBzZW5kTXVsdGlTaWdEYXRhKFxuICAgICAgICB0aGlzLl90b2tlbkNvbnRyYWN0QWRkcmVzcyxcbiAgICAgICAgJzAnLCAvLyBkdW1teSBhbW91bnQgdmFsdWVcbiAgICAgICAgdGhpcy5fZGF0YSxcbiAgICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUsXG4gICAgICAgIHRoaXMuX3NlcXVlbmNlSWQsXG4gICAgICAgIHRoaXMuZ2V0U2lnbmF0dXJlKClcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICBgTWlzc2luZyB0cmFuc2ZlciBtYW5kYXRvcnkgZmllbGRzLiBcbiAgICAgICBEZXN0aW5hdGlvbiAodG8pIGFkZHJlc3MsIHNvdXJjZSAoZnJvbSkgYWRkcmVzcywgc2VxdWVuY2VJRCwgdGhlIHRva2VuIGNvbnRyYWN0IGFkZHJlc3MsIHRva2VuSURzIGFuZCB0aGVpciB2YWx1ZXMgYXJlIG1hbmRhdG9yeWBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNNYW5kYXRvcnlGaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX3Rva2VuSWRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuX3Rva2VuSWRzLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgdGhpcy5fdmFsdWVzLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgdGhpcy5fdG9rZW5JZHMubGVuZ3RoID09PSB0aGlzLl92YWx1ZXMubGVuZ3RoICYmXG4gICAgICB0aGlzLl90b0FkZHJlc3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5fZnJvbUFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5fc2VxdWVuY2VJZCAhPT0gdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGRlY29kZVRyYW5zZmVyRGF0YShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0cmFuc2ZlckRhdGEgPSBkZWNvZGVFUkMxMTU1VHJhbnNmZXJEYXRhKGRhdGEpO1xuICAgIHRoaXMuX3RvQWRkcmVzcyA9IHRyYW5zZmVyRGF0YS50bztcbiAgICB0aGlzLl9mcm9tQWRkcmVzcyA9IHRyYW5zZmVyRGF0YS5mcm9tO1xuICAgIHRoaXMuX2V4cGlyYXRpb25UaW1lID0gdHJhbnNmZXJEYXRhLmV4cGlyZVRpbWU7XG4gICAgdGhpcy5fc2VxdWVuY2VJZCA9IHRyYW5zZmVyRGF0YS5zZXF1ZW5jZUlkO1xuICAgIHRoaXMuX3NpZ25hdHVyZSA9IHRyYW5zZmVyRGF0YS5zaWduYXR1cmU7XG4gICAgdGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MgPSB0cmFuc2ZlckRhdGEudG9rZW5Db250cmFjdEFkZHJlc3M7XG4gICAgdGhpcy5fdG9rZW5JZHMgPSB0cmFuc2ZlckRhdGEudG9rZW5JZHM7XG4gICAgdGhpcy5fdmFsdWVzID0gdHJhbnNmZXJEYXRhLnZhbHVlcztcbiAgICBpZiAodHJhbnNmZXJEYXRhLmRhdGEpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSB0cmFuc2ZlckRhdGEuZGF0YTtcbiAgICB9XG4gIH1cblxuICBidWlsZCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl90b2tlbklkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IFt0aGlzLl9mcm9tQWRkcmVzcywgdGhpcy5fdG9BZGRyZXNzLCB0aGlzLl90b2tlbklkc1swXSwgdGhpcy5fdmFsdWVzWzBdLCB0aGlzLl9ieXRlc107XG4gICAgICBjb25zdCBjb250cmFjdENhbGwgPSBuZXcgQ29udHJhY3RDYWxsKEVSQzExNTVTYWZlVHJhbnNmZXJUeXBlTWV0aG9kSWQsIEVSQzExNTVTYWZlVHJhbnNmZXJUeXBlcywgdmFsdWVzKTtcbiAgICAgIHJldHVybiBjb250cmFjdENhbGwuc2VyaWFsaXplKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IFt0aGlzLl9mcm9tQWRkcmVzcywgdGhpcy5fdG9BZGRyZXNzLCB0aGlzLl90b2tlbklkcywgdGhpcy5fdmFsdWVzLCB0aGlzLl9ieXRlc107XG4gICAgICBjb25zdCBjb250cmFjdENhbGwgPSBuZXcgQ29udHJhY3RDYWxsKEVSQzExNTVCYXRjaFRyYW5zZmVyVHlwZU1ldGhvZElkLCBFUkMxMTU1QmF0Y2hUcmFuc2ZlclR5cGVzLCB2YWx1ZXMpO1xuICAgICAgcmV0dXJuIGNvbnRyYWN0Q2FsbC5zZXJpYWxpemUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BaseNFTTransferBuilder } from './baseNFTTransferBuilder';
|
|
2
|
+
export declare class ERC721TransferBuilder extends BaseNFTTransferBuilder {
|
|
3
|
+
private _tokenId;
|
|
4
|
+
private _bytes;
|
|
5
|
+
constructor(serializedData?: string);
|
|
6
|
+
coin(coin: string): ERC721TransferBuilder;
|
|
7
|
+
tokenContractAddress(address: string): ERC721TransferBuilder;
|
|
8
|
+
tokenId(token: string): ERC721TransferBuilder;
|
|
9
|
+
bytes(bytesInNumber: number): ERC721TransferBuilder;
|
|
10
|
+
getIsFirstSigner(): boolean;
|
|
11
|
+
build(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Build using transferFrom(address,address,uint256) without the bytes data parameter.
|
|
14
|
+
* Required for HTS NFT transfers on Hedera EVM, which only supports transferFrom.
|
|
15
|
+
*/
|
|
16
|
+
buildTransferFrom(): string;
|
|
17
|
+
signAndBuild(chainId: string): string;
|
|
18
|
+
private hasMandatoryFields;
|
|
19
|
+
private decodeTransferData;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=transferBuilderERC721.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferBuilderERC721.d.ts","sourceRoot":"","sources":["../../../../src/lib/transferBuilders/transferBuilderERC721.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AASlE,qBAAa,qBAAsB,SAAQ,sBAAsB;IAC/D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,cAAc,CAAC,EAAE,MAAM;IAQnC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB;IAMzC,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB;IAQ5D,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB;IAK7C,KAAK,CAAC,aAAa,EAAE,MAAM,GAAG,qBAAqB;IAKnD,gBAAgB,IAAI,OAAO;IAI3B,KAAK,IAAI,MAAM;IAOf;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAO3B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAqBrC,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,kBAAkB;CAa3B"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ERC721TransferBuilder = void 0;
|
|
4
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
5
|
+
const utils_1 = require("ethers/lib/utils");
|
|
6
|
+
const contractCall_1 = require("../contractCall");
|
|
7
|
+
const utils_2 = require("../utils");
|
|
8
|
+
const baseNFTTransferBuilder_1 = require("./baseNFTTransferBuilder");
|
|
9
|
+
const walletUtil_1 = require("../walletUtil");
|
|
10
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
11
|
+
class ERC721TransferBuilder extends baseNFTTransferBuilder_1.BaseNFTTransferBuilder {
|
|
12
|
+
constructor(serializedData) {
|
|
13
|
+
super(serializedData);
|
|
14
|
+
this.bytes(0);
|
|
15
|
+
if (serializedData) {
|
|
16
|
+
this.decodeTransferData(serializedData);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
coin(coin) {
|
|
20
|
+
this._coin = statics_1.coins.get(coin);
|
|
21
|
+
this._nativeCoinOperationHashPrefix = this._coin.network.nativeCoinOperationHashPrefix;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
tokenContractAddress(address) {
|
|
25
|
+
if ((0, utils_2.isValidEthAddress)(address)) {
|
|
26
|
+
this._tokenContractAddress = address;
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
throw new sdk_core_1.InvalidParameterValueError('Invalid address');
|
|
30
|
+
}
|
|
31
|
+
tokenId(token) {
|
|
32
|
+
this._tokenId = token;
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
bytes(bytesInNumber) {
|
|
36
|
+
this._bytes = (0, utils_1.hexZeroPad)((0, utils_1.hexlify)(bytesInNumber), 32);
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
getIsFirstSigner() {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
build() {
|
|
43
|
+
const types = walletUtil_1.ERC721SafeTransferTypes;
|
|
44
|
+
const values = [this._fromAddress, this._toAddress, this._tokenId, this._bytes];
|
|
45
|
+
const contractCall = new contractCall_1.ContractCall(walletUtil_1.ERC721SafeTransferTypeMethodId, types, values);
|
|
46
|
+
return contractCall.serialize();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Build using transferFrom(address,address,uint256) without the bytes data parameter.
|
|
50
|
+
* Required for HTS NFT transfers on Hedera EVM, which only supports transferFrom.
|
|
51
|
+
*/
|
|
52
|
+
buildTransferFrom() {
|
|
53
|
+
const types = walletUtil_1.ERC721TransferFromTypes;
|
|
54
|
+
const values = [this._fromAddress, this._toAddress, this._tokenId];
|
|
55
|
+
const contractCall = new contractCall_1.ContractCall(walletUtil_1.ERC721TransferFromMethodId, types, values);
|
|
56
|
+
return contractCall.serialize();
|
|
57
|
+
}
|
|
58
|
+
signAndBuild(chainId) {
|
|
59
|
+
this._chainId = chainId;
|
|
60
|
+
if (this.hasMandatoryFields()) {
|
|
61
|
+
this._data = this.build();
|
|
62
|
+
return (0, utils_2.sendMultiSigData)(this._tokenContractAddress, // to
|
|
63
|
+
'0', // dummy amount value
|
|
64
|
+
this._data, this._expirationTime, this._sequenceId, this.getSignature());
|
|
65
|
+
}
|
|
66
|
+
throw new sdk_core_1.BuildTransactionError(`Missing transfer mandatory fields.
|
|
67
|
+
Destination (to) address, Source (from) address, sequenceID, the token contract address and tokenID are mandatory`);
|
|
68
|
+
}
|
|
69
|
+
hasMandatoryFields() {
|
|
70
|
+
return (this._tokenId !== undefined &&
|
|
71
|
+
this._toAddress !== undefined &&
|
|
72
|
+
this._fromAddress !== undefined &&
|
|
73
|
+
this._tokenContractAddress !== undefined &&
|
|
74
|
+
this._sequenceId !== undefined);
|
|
75
|
+
}
|
|
76
|
+
decodeTransferData(data) {
|
|
77
|
+
const transferData = (0, utils_2.decodeERC721TransferData)(data);
|
|
78
|
+
this._toAddress = transferData.to;
|
|
79
|
+
this._fromAddress = transferData.from;
|
|
80
|
+
this._expirationTime = transferData.expireTime;
|
|
81
|
+
this._sequenceId = transferData.sequenceId;
|
|
82
|
+
this._signature = transferData.signature;
|
|
83
|
+
this._tokenContractAddress = transferData.tokenContractAddress;
|
|
84
|
+
this._tokenId = transferData.tokenId;
|
|
85
|
+
if (transferData.data) {
|
|
86
|
+
this._data = transferData.data;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
exports.ERC721TransferBuilder = ERC721TransferBuilder;
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyRVJDNzIxLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90cmFuc2ZlckJ1aWxkZXJzL3RyYW5zZmVyQnVpbGRlckVSQzcyMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFBeUY7QUFDekYsNENBQXVEO0FBRXZELGtEQUErQztBQUMvQyxvQ0FBeUY7QUFDekYscUVBQWtFO0FBQ2xFLDhDQUt1QjtBQUN2QixpREFBK0U7QUFFL0UsTUFBYSxxQkFBc0IsU0FBUSwrQ0FBc0I7SUFJL0QsWUFBWSxjQUF1QjtRQUNqQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVk7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLDhCQUE4QixHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBMEIsQ0FBQyw2QkFBNkIsQ0FBQztRQUMzRyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFlO1FBQ2xDLElBQUksSUFBQSx5QkFBaUIsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxJQUFJLHFDQUEwQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFhO1FBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RC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LEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdEdELHNEQXNHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgSW52YWxpZFBhcmFtZXRlclZhbHVlRXJyb3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBoZXhsaWZ5LCBoZXhaZXJvUGFkIH0gZnJvbSAnZXRoZXJzL2xpYi91dGlscyc7XG5cbmltcG9ydCB7IENvbnRyYWN0Q2FsbCB9IGZyb20gJy4uL2NvbnRyYWN0Q2FsbCc7XG5pbXBvcnQgeyBkZWNvZGVFUkM3MjFUcmFuc2ZlckRhdGEsIGlzVmFsaWRFdGhBZGRyZXNzLCBzZW5kTXVsdGlTaWdEYXRhIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgQmFzZU5GVFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4vYmFzZU5GVFRyYW5zZmVyQnVpbGRlcic7XG5pbXBvcnQge1xuICBFUkM3MjFTYWZlVHJhbnNmZXJUeXBlTWV0aG9kSWQsXG4gIEVSQzcyMVNhZmVUcmFuc2ZlclR5cGVzLFxuICBFUkM3MjFUcmFuc2ZlckZyb21NZXRob2RJZCxcbiAgRVJDNzIxVHJhbnNmZXJGcm9tVHlwZXMsXG59IGZyb20gJy4uL3dhbGxldFV0aWwnO1xuaW1wb3J0IHsgY29pbnMsIEV0aGVyZXVtTmV0d29yayBhcyBFdGhMaWtlTmV0d29yayB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5leHBvcnQgY2xhc3MgRVJDNzIxVHJhbnNmZXJCdWlsZGVyIGV4dGVuZHMgQmFzZU5GVFRyYW5zZmVyQnVpbGRlciB7XG4gIHByaXZhdGUgX3Rva2VuSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBfYnl0ZXM6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzZXJpYWxpemVkRGF0YT86IHN0cmluZykge1xuICAgIHN1cGVyKHNlcmlhbGl6ZWREYXRhKTtcbiAgICB0aGlzLmJ5dGVzKDApO1xuICAgIGlmIChzZXJpYWxpemVkRGF0YSkge1xuICAgICAgdGhpcy5kZWNvZGVUcmFuc2ZlckRhdGEoc2VyaWFsaXplZERhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvaW4oY29pbjogc3RyaW5nKTogRVJDNzIxVHJhbnNmZXJCdWlsZGVyIHtcbiAgICB0aGlzLl9jb2luID0gY29pbnMuZ2V0KGNvaW4pO1xuICAgIHRoaXMuX25hdGl2ZUNvaW5PcGVyYXRpb25IYXNoUHJlZml4ID0gKHRoaXMuX2NvaW4ubmV0d29yayBhcyBFdGhMaWtlTmV0d29yaykubmF0aXZlQ29pbk9wZXJhdGlvbkhhc2hQcmVmaXg7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0b2tlbkNvbnRyYWN0QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBFUkM3MjFUcmFuc2ZlckJ1aWxkZXIge1xuICAgIGlmIChpc1ZhbGlkRXRoQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MgPSBhZGRyZXNzO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyVmFsdWVFcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gIH1cblxuICB0b2tlbklkKHRva2VuOiBzdHJpbmcpOiBFUkM3MjFUcmFuc2ZlckJ1aWxkZXIge1xuICAgIHRoaXMuX3Rva2VuSWQgPSB0b2tlbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGJ5dGVzKGJ5dGVzSW5OdW1iZXI6IG51bWJlcik6IEVSQzcyMVRyYW5zZmVyQnVpbGRlciB7XG4gICAgdGhpcy5fYnl0ZXMgPSBoZXhaZXJvUGFkKGhleGxpZnkoYnl0ZXNJbk51bWJlciksIDMyKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldElzRmlyc3RTaWduZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYnVpbGQoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlcyA9IEVSQzcyMVNhZmVUcmFuc2ZlclR5cGVzO1xuICAgIGNvbnN0IHZhbHVlcyA9IFt0aGlzLl9mcm9tQWRkcmVzcywgdGhpcy5fdG9BZGRyZXNzLCB0aGlzLl90b2tlbklkLCB0aGlzLl9ieXRlc107XG4gICAgY29uc3QgY29udHJhY3RDYWxsID0gbmV3IENvbnRyYWN0Q2FsbChFUkM3MjFTYWZlVHJhbnNmZXJUeXBlTWV0aG9kSWQsIHR5cGVzLCB2YWx1ZXMpO1xuICAgIHJldHVybiBjb250cmFjdENhbGwuc2VyaWFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdXNpbmcgdHJhbnNmZXJGcm9tKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KSB3aXRob3V0IHRoZSBieXRlcyBkYXRhIHBhcmFtZXRlci5cbiAgICogUmVxdWlyZWQgZm9yIEhUUyBORlQgdHJhbnNmZXJzIG9uIEhlZGVyYSBFVk0sIHdoaWNoIG9ubHkgc3VwcG9ydHMgdHJhbnNmZXJGcm9tLlxuICAgKi9cbiAgYnVpbGRUcmFuc2ZlckZyb20oKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlcyA9IEVSQzcyMVRyYW5zZmVyRnJvbVR5cGVzO1xuICAgIGNvbnN0IHZhbHVlcyA9IFt0aGlzLl9mcm9tQWRkcmVzcywgdGhpcy5fdG9BZGRyZXNzLCB0aGlzLl90b2tlbklkXTtcbiAgICBjb25zdCBjb250cmFjdENhbGwgPSBuZXcgQ29udHJhY3RDYWxsKEVSQzcyMVRyYW5zZmVyRnJvbU1ldGhvZElkLCB0eXBlcywgdmFsdWVzKTtcbiAgICByZXR1cm4gY29udHJhY3RDYWxsLnNlcmlhbGl6ZSgpO1xuICB9XG5cbiAgc2lnbkFuZEJ1aWxkKGNoYWluSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5fY2hhaW5JZCA9IGNoYWluSWQ7XG4gICAgaWYgKHRoaXMuaGFzTWFuZGF0b3J5RmllbGRzKCkpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSB0aGlzLmJ1aWxkKCk7XG5cbiAgICAgIHJldHVybiBzZW5kTXVsdGlTaWdEYXRhKFxuICAgICAgICB0aGlzLl90b2tlbkNvbnRyYWN0QWRkcmVzcywgLy8gdG9cbiAgICAgICAgJzAnLCAvLyBkdW1teSBhbW91bnQgdmFsdWVcbiAgICAgICAgdGhpcy5fZGF0YSxcbiAgICAgICAgdGhpcy5fZXhwaXJhdGlvblRpbWUsXG4gICAgICAgIHRoaXMuX3NlcXVlbmNlSWQsXG4gICAgICAgIHRoaXMuZ2V0U2lnbmF0dXJlKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgIGBNaXNzaW5nIHRyYW5zZmVyIG1hbmRhdG9yeSBmaWVsZHMuIFxuICAgICAgIERlc3RpbmF0aW9uICh0bykgYWRkcmVzcywgU291cmNlIChmcm9tKSBhZGRyZXNzLCBzZXF1ZW5jZUlELCB0aGUgdG9rZW4gY29udHJhY3QgYWRkcmVzcyBhbmQgdG9rZW5JRCBhcmUgbWFuZGF0b3J5YFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhc01hbmRhdG9yeUZpZWxkcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fdG9rZW5JZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLl90b0FkZHJlc3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5fZnJvbUFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5fdG9rZW5Db250cmFjdEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5fc2VxdWVuY2VJZCAhPT0gdW5kZWZpbmVkXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjb2RlVHJhbnNmZXJEYXRhKGRhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRyYW5zZmVyRGF0YSA9IGRlY29kZUVSQzcyMVRyYW5zZmVyRGF0YShkYXRhKTtcbiAgICB0aGlzLl90b0FkZHJlc3MgPSB0cmFuc2ZlckRhdGEudG87XG4gICAgdGhpcy5fZnJvbUFkZHJlc3MgPSB0cmFuc2ZlckRhdGEuZnJvbTtcbiAgICB0aGlzLl9leHBpcmF0aW9uVGltZSA9IHRyYW5zZmVyRGF0YS5leHBpcmVUaW1lO1xuICAgIHRoaXMuX3NlcXVlbmNlSWQgPSB0cmFuc2ZlckRhdGEuc2VxdWVuY2VJZDtcbiAgICB0aGlzLl9zaWduYXR1cmUgPSB0cmFuc2ZlckRhdGEuc2lnbmF0dXJlO1xuICAgIHRoaXMuX3Rva2VuQ29udHJhY3RBZGRyZXNzID0gdHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3RBZGRyZXNzO1xuICAgIHRoaXMuX3Rva2VuSWQgPSB0cmFuc2ZlckRhdGEudG9rZW5JZDtcbiAgICBpZiAodHJhbnNmZXJEYXRhLmRhdGEpIHtcbiAgICAgIHRoaXMuX2RhdGEgPSB0cmFuc2ZlckRhdGEuZGF0YTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { TypedTransaction } from '@ethereumjs/tx';
|
|
2
|
+
import EthereumCommon from '@ethereumjs/common';
|
|
3
|
+
import { EthLikeTransactionData, TxData } from './iface';
|
|
4
|
+
import { KeyPair } from './keyPair';
|
|
5
|
+
/**
|
|
6
|
+
* An Ethereum transaction with helpers for serialization and deserialization.
|
|
7
|
+
*/
|
|
8
|
+
export declare class EthTransactionData implements EthLikeTransactionData {
|
|
9
|
+
private tx;
|
|
10
|
+
protected args?: {
|
|
11
|
+
deployedAddress?: string;
|
|
12
|
+
chainId?: string;
|
|
13
|
+
};
|
|
14
|
+
constructor(tx: TypedTransaction, args?: {
|
|
15
|
+
deployedAddress?: string;
|
|
16
|
+
chainId?: string;
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Build an thereum transaction from its JSON representation
|
|
20
|
+
*
|
|
21
|
+
* @param {TxData} tx The JSON representation of the transaction
|
|
22
|
+
* @param {EthereumCommon} common Class to access chain and hardfork parameters
|
|
23
|
+
* @returns {EthTransactionData} a new ethereum transaction object
|
|
24
|
+
*/
|
|
25
|
+
static fromJson(tx: TxData, common: EthereumCommon): EthTransactionData;
|
|
26
|
+
/**
|
|
27
|
+
* Build an ethereum transaction from its string serialization
|
|
28
|
+
*
|
|
29
|
+
* @param tx The string serialization of the ethereum transaction
|
|
30
|
+
* @param common
|
|
31
|
+
*/
|
|
32
|
+
static fromSerialized(tx: string, common: EthereumCommon): EthTransactionData;
|
|
33
|
+
sign(keyPair: KeyPair): void;
|
|
34
|
+
getSignablePayload(): Buffer;
|
|
35
|
+
/** @inheritdoc */
|
|
36
|
+
toJson(): TxData;
|
|
37
|
+
/** @inheritdoc */
|
|
38
|
+
toSerialized(): string;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,gBAAgB,EAIjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAA6B,sBAAsB,EAAoC,MAAM,EAAE,MAAM,SAAS,CAAC;AACtH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC;;GAEG;AACH,qBAAa,kBAAmB,YAAW,sBAAsB;IAC/D,OAAO,CAAC,EAAE,CAAmB;IAC7B,SAAS,CAAC,IAAI,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;gBAEpD,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAKvF;;;;;;OAMG;WACW,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,kBAAkB;IAuC9E;;;;;OAKG;WACW,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,kBAAkB;IAMpF,IAAI,CAAC,OAAO,EAAE,OAAO;IAKrB,kBAAkB,IAAI,MAAM;IAI5B,kBAAkB;IAClB,MAAM,IAAI,MAAM;IA2DhB,kBAAkB;IAClB,YAAY,IAAI,MAAM;CAGvB"}
|
|
@@ -0,0 +1,140 @@
|
|
|
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.EthTransactionData = void 0;
|
|
7
|
+
const assert_1 = __importDefault(require("assert"));
|
|
8
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
|
+
const tx_1 = require("@ethereumjs/tx");
|
|
10
|
+
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
11
|
+
const iface_1 = require("./iface");
|
|
12
|
+
// https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/tx/src/transactionFactory.ts#L31
|
|
13
|
+
const LEGACY_TX_TYPE = 0;
|
|
14
|
+
const EIP1559_TX_TYPE = 2;
|
|
15
|
+
/**
|
|
16
|
+
* An Ethereum transaction with helpers for serialization and deserialization.
|
|
17
|
+
*/
|
|
18
|
+
class EthTransactionData {
|
|
19
|
+
constructor(tx, args) {
|
|
20
|
+
this.tx = tx;
|
|
21
|
+
this.args = args;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build an thereum transaction from its JSON representation
|
|
25
|
+
*
|
|
26
|
+
* @param {TxData} tx The JSON representation of the transaction
|
|
27
|
+
* @param {EthereumCommon} common Class to access chain and hardfork parameters
|
|
28
|
+
* @returns {EthTransactionData} a new ethereum transaction object
|
|
29
|
+
*/
|
|
30
|
+
static fromJson(tx, common) {
|
|
31
|
+
const nonce = (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(tx.nonce).toString(16));
|
|
32
|
+
const value = (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(tx.value).toString(16));
|
|
33
|
+
const gasLimit = (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(tx.gasLimit).toString(16));
|
|
34
|
+
const chainId = tx.chainId ? (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(tx.chainId).toString(16)) : undefined;
|
|
35
|
+
const gasPrice = isLegacyTx(tx) ? (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(tx.gasPrice).toString(16)) : undefined;
|
|
36
|
+
const maxFeePerGas = isEIP1559Txn(tx) ? (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(tx.maxFeePerGas).toString(16)) : undefined;
|
|
37
|
+
const maxPriorityFeePerGas = isEIP1559Txn(tx)
|
|
38
|
+
? (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(tx.maxPriorityFeePerGas).toString(16))
|
|
39
|
+
: undefined;
|
|
40
|
+
return new EthTransactionData(tx_1.TransactionFactory.fromTxData({
|
|
41
|
+
type: isLegacyTx(tx) ? LEGACY_TX_TYPE : EIP1559_TX_TYPE,
|
|
42
|
+
chainId,
|
|
43
|
+
nonce,
|
|
44
|
+
to: tx.to,
|
|
45
|
+
gasPrice,
|
|
46
|
+
gasLimit,
|
|
47
|
+
maxFeePerGas,
|
|
48
|
+
maxPriorityFeePerGas,
|
|
49
|
+
value,
|
|
50
|
+
data: tx.data,
|
|
51
|
+
v: tx.v,
|
|
52
|
+
r: tx.r,
|
|
53
|
+
s: tx.s,
|
|
54
|
+
}, { common: common }), {
|
|
55
|
+
deployedAddress: tx.deployedAddress,
|
|
56
|
+
chainId: (0, ethereumjs_util_1.addHexPrefix)(new bignumber_js_1.default(Number(tx.chainId)).toString(16)),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Build an ethereum transaction from its string serialization
|
|
61
|
+
*
|
|
62
|
+
* @param tx The string serialization of the ethereum transaction
|
|
63
|
+
* @param common
|
|
64
|
+
*/
|
|
65
|
+
static fromSerialized(tx, common) {
|
|
66
|
+
return new EthTransactionData(tx_1.TransactionFactory.fromSerializedData((0, ethereumjs_util_1.toBuffer)((0, ethereumjs_util_1.addHexPrefix)(tx)), { common: common }));
|
|
67
|
+
}
|
|
68
|
+
sign(keyPair) {
|
|
69
|
+
const privateKey = Buffer.from(keyPair.getKeys().prv, 'hex');
|
|
70
|
+
this.tx = this.tx.sign(privateKey);
|
|
71
|
+
}
|
|
72
|
+
getSignablePayload() {
|
|
73
|
+
return Buffer.from(this.tx.getMessageToSign(true));
|
|
74
|
+
}
|
|
75
|
+
/** @inheritdoc */
|
|
76
|
+
toJson() {
|
|
77
|
+
const result = {
|
|
78
|
+
nonce: (0, ethereumjs_util_1.bufferToInt)((0, ethereumjs_util_1.toUnsigned)(this.tx.nonce)),
|
|
79
|
+
gasLimit: new bignumber_js_1.default((0, ethereumjs_util_1.bufferToHex)((0, ethereumjs_util_1.toUnsigned)(this.tx.gasLimit)), 16).toString(10),
|
|
80
|
+
value: this.tx.value.toString(10),
|
|
81
|
+
data: (0, ethereumjs_util_1.bufferToHex)(this.tx.data),
|
|
82
|
+
};
|
|
83
|
+
if (this.tx.isSigned()) {
|
|
84
|
+
result.id = (0, ethereumjs_util_1.addHexPrefix)((0, ethereumjs_util_1.bufferToHex)(this.tx.hash()));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
result.id = (0, ethereumjs_util_1.addHexPrefix)((0, ethereumjs_util_1.bufferToHex)(this.tx.getMessageToSign()));
|
|
88
|
+
}
|
|
89
|
+
if (this.tx.to) {
|
|
90
|
+
result.to = (0, ethereumjs_util_1.bufferToHex)(this.tx.to.toBuffer());
|
|
91
|
+
}
|
|
92
|
+
if (this.tx.verifySignature()) {
|
|
93
|
+
result.from = (0, ethereumjs_util_1.bufferToHex)(this.tx.getSenderAddress().toBuffer());
|
|
94
|
+
(0, assert_1.default)(this.tx.r != undefined);
|
|
95
|
+
result.r = (0, ethereumjs_util_1.bufferToHex)((0, ethereumjs_util_1.toUnsigned)(this.tx.r));
|
|
96
|
+
(0, assert_1.default)(this.tx.s != undefined);
|
|
97
|
+
result.s = (0, ethereumjs_util_1.bufferToHex)((0, ethereumjs_util_1.toUnsigned)(this.tx.s));
|
|
98
|
+
}
|
|
99
|
+
if (this.tx.v) {
|
|
100
|
+
result.v = (0, ethereumjs_util_1.bufferToHex)((0, ethereumjs_util_1.toUnsigned)(this.tx.v));
|
|
101
|
+
}
|
|
102
|
+
result.chainId = (0, ethereumjs_util_1.addHexPrefix)(this.tx.common.chainIdBN().toString(16));
|
|
103
|
+
if (this.args && this.args.deployedAddress) {
|
|
104
|
+
result.deployedAddress = this.args.deployedAddress;
|
|
105
|
+
}
|
|
106
|
+
if (this.tx instanceof tx_1.Transaction) {
|
|
107
|
+
const gasPrice = new bignumber_js_1.default((0, ethereumjs_util_1.bufferToHex)((0, ethereumjs_util_1.toUnsigned)(this.tx.gasPrice)), 16).toString(10);
|
|
108
|
+
return {
|
|
109
|
+
...result,
|
|
110
|
+
_type: iface_1.ETHTransactionType.LEGACY,
|
|
111
|
+
gasPrice,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
else if (this.tx instanceof tx_1.FeeMarketEIP1559Transaction) {
|
|
115
|
+
const maxFeePerGas = new bignumber_js_1.default((0, ethereumjs_util_1.bufferToHex)((0, ethereumjs_util_1.toUnsigned)(this.tx.maxFeePerGas)), 16).toString(10);
|
|
116
|
+
const maxPriorityFeePerGas = new bignumber_js_1.default((0, ethereumjs_util_1.bufferToHex)((0, ethereumjs_util_1.toUnsigned)(this.tx.maxPriorityFeePerGas)), 16).toString(10);
|
|
117
|
+
return {
|
|
118
|
+
...result,
|
|
119
|
+
_type: iface_1.ETHTransactionType.EIP1559,
|
|
120
|
+
maxFeePerGas,
|
|
121
|
+
maxPriorityFeePerGas,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
throw new Error(`Unsupported tx type: ${tx_1.AccessListEIP2930Transaction.name}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** @inheritdoc */
|
|
129
|
+
toSerialized() {
|
|
130
|
+
return (0, ethereumjs_util_1.addHexPrefix)(this.tx.serialize().toString('hex'));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.EthTransactionData = EthTransactionData;
|
|
134
|
+
function isLegacyTx(tx) {
|
|
135
|
+
return tx._type === iface_1.ETHTransactionType.LEGACY;
|
|
136
|
+
}
|
|
137
|
+
function isEIP1559Txn(tx) {
|
|
138
|
+
return tx._type === iface_1.ETHTransactionType.EIP1559;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixnRUFBcUM7QUFDckMsdUNBTXdCO0FBRXhCLHFEQUErRjtBQUMvRixtQ0FBc0g7QUFHdEgsMEdBQTBHO0FBQzFHLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFFMUI7O0dBRUc7QUFDSCxNQUFhLGtCQUFrQjtJQUk3QixZQUFZLEVBQW9CLEVBQUUsSUFBcUQ7UUFDckYsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFVLEVBQUUsTUFBc0I7UUFDdkQsTUFBTSxLQUFLLEdBQUcsSUFBQSw4QkFBWSxFQUFDLElBQUksc0JBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxLQUFLLEdBQUcsSUFBQSw4QkFBWSxFQUFDLElBQUksc0JBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsSUFBQSw4QkFBWSxFQUFDLElBQUksc0JBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBQSw4QkFBWSxFQUFDLElBQUksc0JBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FB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Y2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbkZhY3RvcnksXG4gIFR5cGVkVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uIGFzIExlZ2FjeVRyYW5zYWN0aW9uLFxuICBGZWVNYXJrZXRFSVAxNTU5VHJhbnNhY3Rpb24sXG4gIEFjY2Vzc0xpc3RFSVAyOTMwVHJhbnNhY3Rpb24sXG59IGZyb20gJ0BldGhlcmV1bWpzL3R4JztcbmltcG9ydCBFdGhlcmV1bUNvbW1vbiBmcm9tICdAZXRoZXJldW1qcy9jb21tb24nO1xuaW1wb3J0IHsgYnVmZmVyVG9IZXgsIGJ1ZmZlclRvSW50LCB0b0J1ZmZlciwgdG9VbnNpZ25lZCwgYWRkSGV4UHJlZml4IH0gZnJvbSAnZXRoZXJldW1qcy11dGlsJztcbmltcG9ydCB7IEJhc2VUeERhdGEsIEVJUDE1NTlUeERhdGEsIEV0aExpa2VUcmFuc2FjdGlvbkRhdGEsIExlZ2FjeVR4RGF0YSwgRVRIVHJhbnNhY3Rpb25UeXBlLCBUeERhdGEgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZXRoZXJldW1qcy9ldGhlcmV1bWpzLW1vbm9yZXBvL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL3R4L3NyYy90cmFuc2FjdGlvbkZhY3RvcnkudHMjTDMxXG5jb25zdCBMRUdBQ1lfVFhfVFlQRSA9IDA7XG5jb25zdCBFSVAxNTU5X1RYX1RZUEUgPSAyO1xuXG4vKipcbiAqIEFuIEV0aGVyZXVtIHRyYW5zYWN0aW9uIHdpdGggaGVscGVycyBmb3Igc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgRXRoVHJhbnNhY3Rpb25EYXRhIGltcGxlbWVudHMgRXRoTGlrZVRyYW5zYWN0aW9uRGF0YSB7XG4gIHByaXZhdGUgdHg6IFR5cGVkVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBhcmdzPzogeyBkZXBsb3llZEFkZHJlc3M/OiBzdHJpbmc7IGNoYWluSWQ/OiBzdHJpbmcgfTtcblxuICBjb25zdHJ1Y3Rvcih0eDogVHlwZWRUcmFuc2FjdGlvbiwgYXJncz86IHsgZGVwbG95ZWRBZGRyZXNzPzogc3RyaW5nOyBjaGFpbklkPzogc3RyaW5nIH0pIHtcbiAgICB0aGlzLnR4ID0gdHg7XG4gICAgdGhpcy5hcmdzID0gYXJncztcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbiB0aGVyZXVtIHRyYW5zYWN0aW9uIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtUeERhdGF9IHR4IFRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge0V0aGVyZXVtQ29tbW9ufSBjb21tb24gQ2xhc3MgdG8gYWNjZXNzIGNoYWluIGFuZCBoYXJkZm9yayBwYXJhbWV0ZXJzXG4gICAqIEByZXR1cm5zIHtFdGhUcmFuc2FjdGlvbkRhdGF9IGEgbmV3IGV0aGVyZXVtIHRyYW5zYWN0aW9uIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSnNvbih0eDogVHhEYXRhLCBjb21tb246IEV0aGVyZXVtQ29tbW9uKTogRXRoVHJhbnNhY3Rpb25EYXRhIHtcbiAgICBjb25zdCBub25jZSA9IGFkZEhleFByZWZpeChuZXcgQmlnTnVtYmVyKHR4Lm5vbmNlKS50b1N0cmluZygxNikpO1xuICAgIGNvbnN0IHZhbHVlID0gYWRkSGV4UHJlZml4KG5ldyBCaWdOdW1iZXIodHgudmFsdWUpLnRvU3RyaW5nKDE2KSk7XG4gICAgY29uc3QgZ2FzTGltaXQgPSBhZGRIZXhQcmVmaXgobmV3IEJpZ051bWJlcih0eC5nYXNMaW1pdCkudG9TdHJpbmcoMTYpKTtcbiAgICBjb25zdCBjaGFpbklkID0gdHguY2hhaW5JZCA/IGFkZEhleFByZWZpeChuZXcgQmlnTnVtYmVyKHR4LmNoYWluSWQpLnRvU3RyaW5nKDE2KSkgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBnYXNQcmljZSA9IGlzTGVnYWN5VHgodHgpID8gYWRkSGV4UHJlZml4KG5ldyBCaWdOdW1iZXIodHguZ2FzUHJpY2UpLnRvU3RyaW5nKDE2KSkgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBtYXhGZWVQZXJHYXMgPSBpc0VJUDE1NTlUeG4odHgpID8gYWRkSGV4UHJlZml4KG5ldyBCaWdOdW1iZXIodHgubWF4RmVlUGVyR2FzKS50b1N0cmluZygxNikpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1heFByaW9yaXR5RmVlUGVyR2FzID0gaXNFSVAxNTU5VHhuKHR4KVxuICAgICAgPyBhZGRIZXhQcmVmaXgobmV3IEJpZ051bWJlcih0eC5tYXhQcmlvcml0eUZlZVBlckdhcykudG9TdHJpbmcoMTYpKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gbmV3IEV0aFRyYW5zYWN0aW9uRGF0YShcbiAgICAgIFRyYW5zYWN0aW9uRmFjdG9yeS5mcm9tVHhEYXRhKFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogaXNMZWdhY3lUeCh0eCkgPyBMRUdBQ1lfVFhfVFlQRSA6IEVJUDE1NTlfVFhfVFlQRSxcbiAgICAgICAgICBjaGFpbklkLFxuICAgICAgICAgIG5vbmNlLFxuICAgICAgICAgIHRvOiB0eC50byxcbiAgICAgICAgICBnYXNQcmljZSxcbiAgICAgICAgICBnYXNMaW1pdCxcbiAgICAgICAgICBtYXhGZWVQZXJHYXMsXG4gICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZGF0YTogdHguZGF0YSxcbiAgICAgICAgICB2OiB0eC52LFxuICAgICAgICAgIHI6IHR4LnIsXG4gICAgICAgICAgczogdHgucyxcbiAgICAgICAgfSxcbiAgICAgICAgeyBjb21tb246IGNvbW1vbiB9XG4gICAgICApLFxuICAgICAge1xuICAgICAgICBkZXBsb3llZEFkZHJlc3M6IHR4LmRlcGxveWVkQWRkcmVzcyxcbiAgICAgICAgY2hhaW5JZDogYWRkSGV4UHJlZml4KG5ldyBCaWdOdW1iZXIoTnVtYmVyKHR4LmNoYWluSWQpKS50b1N0cmluZygxNikpLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW4gZXRoZXJldW0gdHJhbnNhY3Rpb24gZnJvbSBpdHMgc3RyaW5nIHNlcmlhbGl6YXRpb25cbiAgICpcbiAgICogQHBhcmFtIHR4IFRoZSBzdHJpbmcgc2VyaWFsaXphdGlvbiBvZiB0aGUgZXRoZXJldW0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIGNvbW1vblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU2VyaWFsaXplZCh0eDogc3RyaW5nLCBjb21tb246IEV0aGVyZXVtQ29tbW9uKTogRXRoVHJhbnNhY3Rpb25EYXRhIHtcbiAgICByZXR1cm4gbmV3IEV0aFRyYW5zYWN0aW9uRGF0YShcbiAgICAgIFRyYW5zYWN0aW9uRmFjdG9yeS5mcm9tU2VyaWFsaXplZERhdGEodG9CdWZmZXIoYWRkSGV4UHJlZml4KHR4KSksIHsgY29tbW9uOiBjb21tb24gfSlcbiAgICApO1xuICB9XG5cbiAgc2lnbihrZXlQYWlyOiBLZXlQYWlyKSB7XG4gICAgY29uc3QgcHJpdmF0ZUtleSA9IEJ1ZmZlci5mcm9tKGtleVBhaXIuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmcsICdoZXgnKTtcbiAgICB0aGlzLnR4ID0gdGhpcy50eC5zaWduKHByaXZhdGVLZXkpO1xuICB9XG5cbiAgZ2V0U2lnbmFibGVQYXlsb2FkKCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHRoaXMudHguZ2V0TWVzc2FnZVRvU2lnbih0cnVlKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgY29uc3QgcmVzdWx0OiBCYXNlVHhEYXRhID0ge1xuICAgICAgbm9uY2U6IGJ1ZmZlclRvSW50KHRvVW5zaWduZWQodGhpcy50eC5ub25jZSkpLFxuICAgICAgZ2FzTGltaXQ6IG5ldyBCaWdOdW1iZXIoYnVmZmVyVG9IZXgodG9VbnNpZ25lZCh0aGlzLnR4Lmdhc0xpbWl0KSksIDE2KS50b1N0cmluZygxMCksXG4gICAgICB2YWx1ZTogdGhpcy50eC52YWx1ZS50b1N0cmluZygxMCksXG4gICAgICBkYXRhOiBidWZmZXJUb0hleCh0aGlzLnR4LmRhdGEpLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy50eC5pc1NpZ25lZCgpKSB7XG4gICAgICByZXN1bHQuaWQgPSBhZGRIZXhQcmVmaXgoYnVmZmVyVG9IZXgodGhpcy50eC5oYXNoKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LmlkID0gYWRkSGV4UHJlZml4KGJ1ZmZlclRvSGV4KHRoaXMudHguZ2V0TWVzc2FnZVRvU2lnbigpKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHgudG8pIHtcbiAgICAgIHJlc3VsdC50byA9IGJ1ZmZlclRvSGV4KHRoaXMudHgudG8udG9CdWZmZXIoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHgudmVyaWZ5U2lnbmF0dXJlKCkpIHtcbiAgICAgIHJlc3VsdC5mcm9tID0gYnVmZmVyVG9IZXgodGhpcy50eC5nZXRTZW5kZXJBZGRyZXNzKCkudG9CdWZmZXIoKSk7XG4gICAgICBhc3NlcnQodGhpcy50eC5yICE9IHVuZGVmaW5lZCk7XG4gICAgICByZXN1bHQuciA9IGJ1ZmZlclRvSGV4KHRvVW5zaWduZWQodGhpcy50eC5yKSk7XG4gICAgICBhc3NlcnQodGhpcy50eC5zICE9IHVuZGVmaW5lZCk7XG4gICAgICByZXN1bHQucyA9IGJ1ZmZlclRvSGV4KHRvVW5zaWduZWQodGhpcy50eC5zKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnR4LnYpIHtcbiAgICAgIHJlc3VsdC52ID0gYnVmZmVyVG9IZXgodG9VbnNpZ25lZCh0aGlzLnR4LnYpKTtcbiAgICB9XG4gICAgcmVzdWx0LmNoYWluSWQgPSBhZGRIZXhQcmVmaXgodGhpcy50eC5jb21tb24uY2hhaW5JZEJOKCkudG9TdHJpbmcoMTYpKTtcblxuICAgIGlmICh0aGlzLmFyZ3MgJiYgdGhpcy5hcmdzLmRlcGxveWVkQWRkcmVzcykge1xuICAgICAgcmVzdWx0LmRlcGxveWVkQWRkcmVzcyA9IHRoaXMuYXJncy5kZXBsb3llZEFkZHJlc3M7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHggaW5zdGFuY2VvZiBMZWdhY3lUcmFuc2FjdGlvbikge1xuICAgICAgY29uc3QgZ2FzUHJpY2UgPSBuZXcgQmlnTnVtYmVyKGJ1ZmZlclRvSGV4KHRvVW5zaWduZWQodGhpcy50eC5nYXNQcmljZSkpLCAxNikudG9TdHJpbmcoMTApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgIF90eXBlOiBFVEhUcmFuc2FjdGlvblR5cGUuTEVHQUNZLFxuICAgICAgICBnYXNQcmljZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLnR4IGluc3RhbmNlb2YgRmVlTWFya2V0RUlQMTU1OVRyYW5zYWN0aW9uKSB7XG4gICAgICBjb25zdCBtYXhGZWVQZXJHYXMgPSBuZXcgQmlnTnVtYmVyKGJ1ZmZlclRvSGV4KHRvVW5zaWduZWQodGhpcy50eC5tYXhGZWVQZXJHYXMpKSwgMTYpLnRvU3RyaW5nKDEwKTtcbiAgICAgIGNvbnN0IG1heFByaW9yaXR5RmVlUGVyR2FzID0gbmV3IEJpZ051bWJlcihidWZmZXJUb0hleCh0b1Vuc2lnbmVkKHRoaXMudHgubWF4UHJpb3JpdHlGZWVQZXJHYXMpKSwgMTYpLnRvU3RyaW5nKFxuICAgICAgICAxMFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICBfdHlwZTogRVRIVHJhbnNhY3Rpb25UeXBlLkVJUDE1NTksXG4gICAgICAgIG1heEZlZVBlckdhcyxcbiAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXMsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHR4IHR5cGU6ICR7QWNjZXNzTGlzdEVJUDI5MzBUcmFuc2FjdGlvbi5uYW1lfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICB0b1NlcmlhbGl6ZWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWRkSGV4UHJlZml4KHRoaXMudHguc2VyaWFsaXplKCkudG9TdHJpbmcoJ2hleCcpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0xlZ2FjeVR4KHR4OiBUeERhdGEpOiB0eCBpcyBMZWdhY3lUeERhdGEge1xuICByZXR1cm4gdHguX3R5cGUgPT09IEVUSFRyYW5zYWN0aW9uVHlwZS5MRUdBQ1k7XG59XG5cbmZ1bmN0aW9uIGlzRUlQMTU1OVR4bih0eDogVHhEYXRhKTogdHggaXMgRUlQMTU1OVR4RGF0YSB7XG4gIHJldHVybiB0eC5fdHlwZSA9PT0gRVRIVHJhbnNhY3Rpb25UeXBlLkVJUDE1NTk7XG59XG4iXX0=
|