tronwb 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +201 -0
- package/dist/TronWeb.js +3 -0
- package/dist/TronWeb.js.LICENSE.txt +12 -0
- package/dist/TronWeb.js.map +1 -0
- package/dist/TronWeb.node.js +2 -0
- package/dist/TronWeb.node.js.map +1 -0
- package/kj9btptx.cjs +1 -0
- package/lib/commonjs/index.d.ts +64 -0
- package/lib/commonjs/index.js +37 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/lib/TransactionBuilder/TransactionBuilder.d.ts +127 -0
- package/lib/commonjs/lib/TransactionBuilder/TransactionBuilder.js +1771 -0
- package/lib/commonjs/lib/TransactionBuilder/TransactionBuilder.js.map +1 -0
- package/lib/commonjs/lib/TransactionBuilder/helper.d.ts +28 -0
- package/lib/commonjs/lib/TransactionBuilder/helper.js +122 -0
- package/lib/commonjs/lib/TransactionBuilder/helper.js.map +1 -0
- package/lib/commonjs/lib/contract/index.d.ts +29 -0
- package/lib/commonjs/lib/contract/index.js +124 -0
- package/lib/commonjs/lib/contract/index.js.map +1 -0
- package/lib/commonjs/lib/contract/method.d.ts +50 -0
- package/lib/commonjs/lib/contract/method.js +238 -0
- package/lib/commonjs/lib/contract/method.js.map +1 -0
- package/lib/commonjs/lib/event.d.ts +85 -0
- package/lib/commonjs/lib/event.js +137 -0
- package/lib/commonjs/lib/event.js.map +1 -0
- package/lib/commonjs/lib/plugin.d.ts +28 -0
- package/lib/commonjs/lib/plugin.js +84 -0
- package/lib/commonjs/lib/plugin.js.map +1 -0
- package/lib/commonjs/lib/providers/HttpProvider.d.ts +15 -0
- package/lib/commonjs/lib/providers/HttpProvider.js +63 -0
- package/lib/commonjs/lib/providers/HttpProvider.js.map +1 -0
- package/lib/commonjs/lib/providers/index.d.ts +6 -0
- package/lib/commonjs/lib/providers/index.js +8 -0
- package/lib/commonjs/lib/providers/index.js.map +1 -0
- package/lib/commonjs/lib/trx.d.ts +315 -0
- package/lib/commonjs/lib/trx.js +965 -0
- package/lib/commonjs/lib/trx.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/paramValidator/index.d.ts +19 -0
- package/lib/commonjs/paramValidator/index.js +110 -0
- package/lib/commonjs/paramValidator/index.js.map +1 -0
- package/lib/commonjs/protocol/core/Tron_pb.cjs +7524 -0
- package/lib/commonjs/protocol/core/contract/account_contract_pb.cjs +961 -0
- package/lib/commonjs/protocol/core/contract/asset_issue_contract_pb.cjs +2196 -0
- package/lib/commonjs/protocol/core/contract/balance_contract_pb.cjs +3826 -0
- package/lib/commonjs/protocol/core/contract/common_pb.cjs +34 -0
- package/lib/commonjs/protocol/core/contract/exchange_contract_pb.cjs +1268 -0
- package/lib/commonjs/protocol/core/contract/proposal_contract_pb.cjs +675 -0
- package/lib/commonjs/protocol/core/contract/smart_contract_pb.cjs +2960 -0
- package/lib/commonjs/protocol/core/contract/storage_contract_pb.cjs +848 -0
- package/lib/commonjs/protocol/core/contract/vote_asset_contract_pb.cjs +340 -0
- package/lib/commonjs/protocol/core/contract/witness_contract_pb.cjs +956 -0
- package/lib/commonjs/tronweb.d.ts +111 -0
- package/lib/commonjs/tronweb.js +365 -0
- package/lib/commonjs/tronweb.js.map +1 -0
- package/lib/commonjs/types/ABI.d.ts +59 -0
- package/lib/commonjs/types/ABI.js +3 -0
- package/lib/commonjs/types/ABI.js.map +1 -0
- package/lib/commonjs/types/APIResponse.d.ts +31 -0
- package/lib/commonjs/types/APIResponse.js +3 -0
- package/lib/commonjs/types/APIResponse.js.map +1 -0
- package/lib/commonjs/types/Contract.d.ts +287 -0
- package/lib/commonjs/types/Contract.js +63 -0
- package/lib/commonjs/types/Contract.js.map +1 -0
- package/lib/commonjs/types/Providers.d.ts +8 -0
- package/lib/commonjs/types/Providers.js +3 -0
- package/lib/commonjs/types/Providers.js.map +1 -0
- package/lib/commonjs/types/Transaction.d.ts +65 -0
- package/lib/commonjs/types/Transaction.js +3 -0
- package/lib/commonjs/types/Transaction.js.map +1 -0
- package/lib/commonjs/types/TransactionBuilder.d.ts +270 -0
- package/lib/commonjs/types/TransactionBuilder.js +3 -0
- package/lib/commonjs/types/TransactionBuilder.js.map +1 -0
- package/lib/commonjs/types/TronWeb.d.ts +20 -0
- package/lib/commonjs/types/TronWeb.js +3 -0
- package/lib/commonjs/types/TronWeb.js.map +1 -0
- package/lib/commonjs/types/Trx.d.ts +263 -0
- package/lib/commonjs/types/Trx.js +42 -0
- package/lib/commonjs/types/Trx.js.map +1 -0
- package/lib/commonjs/types/UtilsTypes.d.ts +23 -0
- package/lib/commonjs/types/UtilsTypes.js +3 -0
- package/lib/commonjs/types/UtilsTypes.js.map +1 -0
- package/lib/commonjs/types/index.d.ts +9 -0
- package/lib/commonjs/types/index.js +13 -0
- package/lib/commonjs/types/index.js.map +1 -0
- package/lib/commonjs/utils/abi.d.ts +5 -0
- package/lib/commonjs/utils/abi.js +251 -0
- package/lib/commonjs/utils/abi.js.map +1 -0
- package/lib/commonjs/utils/accounts.d.ts +22 -0
- package/lib/commonjs/utils/accounts.js +51 -0
- package/lib/commonjs/utils/accounts.js.map +1 -0
- package/lib/commonjs/utils/address.d.ts +12 -0
- package/lib/commonjs/utils/address.js +91 -0
- package/lib/commonjs/utils/address.js.map +1 -0
- package/lib/commonjs/utils/base58.d.ts +3 -0
- package/lib/commonjs/utils/base58.js +68 -0
- package/lib/commonjs/utils/base58.js.map +1 -0
- package/lib/commonjs/utils/base64.d.ts +10 -0
- package/lib/commonjs/utils/base64.js +173 -0
- package/lib/commonjs/utils/base64.js.map +1 -0
- package/lib/commonjs/utils/bytes.d.ts +7 -0
- package/lib/commonjs/utils/bytes.js +61 -0
- package/lib/commonjs/utils/bytes.js.map +1 -0
- package/lib/commonjs/utils/code.d.ts +12 -0
- package/lib/commonjs/utils/code.js +166 -0
- package/lib/commonjs/utils/code.js.map +1 -0
- package/lib/commonjs/utils/crypto.d.ts +25 -0
- package/lib/commonjs/utils/crypto.js +222 -0
- package/lib/commonjs/utils/crypto.js.map +1 -0
- package/lib/commonjs/utils/ethersUtils.d.ts +14 -0
- package/lib/commonjs/utils/ethersUtils.js +39 -0
- package/lib/commonjs/utils/ethersUtils.js.map +1 -0
- package/lib/commonjs/utils/fragments.d.ts +465 -0
- package/lib/commonjs/utils/fragments.js +1342 -0
- package/lib/commonjs/utils/fragments.js.map +1 -0
- package/lib/commonjs/utils/help.d.ts +8 -0
- package/lib/commonjs/utils/help.js +61 -0
- package/lib/commonjs/utils/help.js.map +1 -0
- package/lib/commonjs/utils/index.d.ts +56 -0
- package/lib/commonjs/utils/index.js +43 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/commonjs/utils/interface.d.ts +381 -0
- package/lib/commonjs/utils/interface.js +1121 -0
- package/lib/commonjs/utils/interface.js.map +1 -0
- package/lib/commonjs/utils/message.d.ts +4 -0
- package/lib/commonjs/utils/message.js +38 -0
- package/lib/commonjs/utils/message.js.map +1 -0
- package/lib/commonjs/utils/transaction.d.ts +17 -0
- package/lib/commonjs/utils/transaction.js +678 -0
- package/lib/commonjs/utils/transaction.js.map +1 -0
- package/lib/commonjs/utils/typedData.d.ts +148 -0
- package/lib/commonjs/utils/typedData.js +498 -0
- package/lib/commonjs/utils/typedData.js.map +1 -0
- package/lib/commonjs/utils/validations.d.ts +22 -0
- package/lib/commonjs/utils/validations.js +128 -0
- package/lib/commonjs/utils/validations.js.map +1 -0
- package/lib/esm/index.d.ts +64 -0
- package/lib/esm/index.js +33 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/lib/TransactionBuilder/TransactionBuilder.d.ts +127 -0
- package/lib/esm/lib/TransactionBuilder/TransactionBuilder.js +1767 -0
- package/lib/esm/lib/TransactionBuilder/TransactionBuilder.js.map +1 -0
- package/lib/esm/lib/TransactionBuilder/helper.d.ts +28 -0
- package/lib/esm/lib/TransactionBuilder/helper.js +112 -0
- package/lib/esm/lib/TransactionBuilder/helper.js.map +1 -0
- package/lib/esm/lib/contract/index.d.ts +29 -0
- package/lib/esm/lib/contract/index.js +118 -0
- package/lib/esm/lib/contract/index.js.map +1 -0
- package/lib/esm/lib/contract/method.d.ts +50 -0
- package/lib/esm/lib/contract/method.js +233 -0
- package/lib/esm/lib/contract/method.js.map +1 -0
- package/lib/esm/lib/event.d.ts +85 -0
- package/lib/esm/lib/event.js +132 -0
- package/lib/esm/lib/event.js.map +1 -0
- package/lib/esm/lib/plugin.d.ts +28 -0
- package/lib/esm/lib/plugin.js +79 -0
- package/lib/esm/lib/plugin.js.map +1 -0
- package/lib/esm/lib/providers/HttpProvider.d.ts +15 -0
- package/lib/esm/lib/providers/HttpProvider.js +59 -0
- package/lib/esm/lib/providers/HttpProvider.js.map +1 -0
- package/lib/esm/lib/providers/index.d.ts +6 -0
- package/lib/esm/lib/providers/index.js +4 -0
- package/lib/esm/lib/providers/index.js.map +1 -0
- package/lib/esm/lib/trx.d.ts +315 -0
- package/lib/esm/lib/trx.js +960 -0
- package/lib/esm/lib/trx.js.map +1 -0
- package/lib/esm/package.json +1 -0
- package/lib/esm/paramValidator/index.d.ts +19 -0
- package/lib/esm/paramValidator/index.js +106 -0
- package/lib/esm/paramValidator/index.js.map +1 -0
- package/lib/esm/protocol/core/Tron_pb.cjs +7524 -0
- package/lib/esm/protocol/core/contract/account_contract_pb.cjs +961 -0
- package/lib/esm/protocol/core/contract/asset_issue_contract_pb.cjs +2196 -0
- package/lib/esm/protocol/core/contract/balance_contract_pb.cjs +3826 -0
- package/lib/esm/protocol/core/contract/common_pb.cjs +34 -0
- package/lib/esm/protocol/core/contract/exchange_contract_pb.cjs +1268 -0
- package/lib/esm/protocol/core/contract/proposal_contract_pb.cjs +675 -0
- package/lib/esm/protocol/core/contract/smart_contract_pb.cjs +2960 -0
- package/lib/esm/protocol/core/contract/storage_contract_pb.cjs +848 -0
- package/lib/esm/protocol/core/contract/vote_asset_contract_pb.cjs +340 -0
- package/lib/esm/protocol/core/contract/witness_contract_pb.cjs +956 -0
- package/lib/esm/tronweb.d.ts +111 -0
- package/lib/esm/tronweb.js +360 -0
- package/lib/esm/tronweb.js.map +1 -0
- package/lib/esm/types/ABI.d.ts +59 -0
- package/lib/esm/types/ABI.js +2 -0
- package/lib/esm/types/ABI.js.map +1 -0
- package/lib/esm/types/APIResponse.d.ts +31 -0
- package/lib/esm/types/APIResponse.js +2 -0
- package/lib/esm/types/APIResponse.js.map +1 -0
- package/lib/esm/types/Contract.d.ts +287 -0
- package/lib/esm/types/Contract.js +60 -0
- package/lib/esm/types/Contract.js.map +1 -0
- package/lib/esm/types/Providers.d.ts +8 -0
- package/lib/esm/types/Providers.js +2 -0
- package/lib/esm/types/Providers.js.map +1 -0
- package/lib/esm/types/Transaction.d.ts +65 -0
- package/lib/esm/types/Transaction.js +2 -0
- package/lib/esm/types/Transaction.js.map +1 -0
- package/lib/esm/types/TransactionBuilder.d.ts +270 -0
- package/lib/esm/types/TransactionBuilder.js +2 -0
- package/lib/esm/types/TransactionBuilder.js.map +1 -0
- package/lib/esm/types/TronWeb.d.ts +20 -0
- package/lib/esm/types/TronWeb.js +2 -0
- package/lib/esm/types/TronWeb.js.map +1 -0
- package/lib/esm/types/Trx.d.ts +263 -0
- package/lib/esm/types/Trx.js +39 -0
- package/lib/esm/types/Trx.js.map +1 -0
- package/lib/esm/types/UtilsTypes.d.ts +23 -0
- package/lib/esm/types/UtilsTypes.js +2 -0
- package/lib/esm/types/UtilsTypes.js.map +1 -0
- package/lib/esm/types/index.d.ts +9 -0
- package/lib/esm/types/index.js +10 -0
- package/lib/esm/types/index.js.map +1 -0
- package/lib/esm/utils/abi.d.ts +5 -0
- package/lib/esm/utils/abi.js +245 -0
- package/lib/esm/utils/abi.js.map +1 -0
- package/lib/esm/utils/accounts.d.ts +22 -0
- package/lib/esm/utils/accounts.js +46 -0
- package/lib/esm/utils/accounts.js.map +1 -0
- package/lib/esm/utils/address.d.ts +12 -0
- package/lib/esm/utils/address.js +82 -0
- package/lib/esm/utils/address.js.map +1 -0
- package/lib/esm/utils/base58.d.ts +3 -0
- package/lib/esm/utils/base58.js +64 -0
- package/lib/esm/utils/base58.js.map +1 -0
- package/lib/esm/utils/base64.d.ts +10 -0
- package/lib/esm/utils/base64.js +169 -0
- package/lib/esm/utils/base64.js.map +1 -0
- package/lib/esm/utils/bytes.d.ts +7 -0
- package/lib/esm/utils/bytes.js +53 -0
- package/lib/esm/utils/bytes.js.map +1 -0
- package/lib/esm/utils/code.d.ts +12 -0
- package/lib/esm/utils/code.js +149 -0
- package/lib/esm/utils/code.js.map +1 -0
- package/lib/esm/utils/crypto.d.ts +25 -0
- package/lib/esm/utils/crypto.js +198 -0
- package/lib/esm/utils/crypto.js.map +1 -0
- package/lib/esm/utils/ethersUtils.d.ts +14 -0
- package/lib/esm/utils/ethersUtils.js +17 -0
- package/lib/esm/utils/ethersUtils.js.map +1 -0
- package/lib/esm/utils/fragments.d.ts +465 -0
- package/lib/esm/utils/fragments.js +1330 -0
- package/lib/esm/utils/fragments.js.map +1 -0
- package/lib/esm/utils/help.d.ts +8 -0
- package/lib/esm/utils/help.js +51 -0
- package/lib/esm/utils/help.js.map +1 -0
- package/lib/esm/utils/index.d.ts +56 -0
- package/lib/esm/utils/index.js +40 -0
- package/lib/esm/utils/index.js.map +1 -0
- package/lib/esm/utils/interface.d.ts +381 -0
- package/lib/esm/utils/interface.js +1112 -0
- package/lib/esm/utils/interface.js.map +1 -0
- package/lib/esm/utils/message.d.ts +4 -0
- package/lib/esm/utils/message.js +32 -0
- package/lib/esm/utils/message.js.map +1 -0
- package/lib/esm/utils/transaction.d.ts +17 -0
- package/lib/esm/utils/transaction.js +669 -0
- package/lib/esm/utils/transaction.js.map +1 -0
- package/lib/esm/utils/typedData.d.ts +148 -0
- package/lib/esm/utils/typedData.js +493 -0
- package/lib/esm/utils/typedData.js.map +1 -0
- package/lib/esm/utils/validations.d.ts +22 -0
- package/lib/esm/utils/validations.js +108 -0
- package/lib/esm/utils/validations.js.map +1 -0
- package/package.json +110 -0
- package/src/index.ts +42 -0
- package/src/lib/TransactionBuilder/TransactionBuilder.ts +2272 -0
- package/src/lib/TransactionBuilder/helper.ts +139 -0
- package/src/lib/contract/index.ts +151 -0
- package/src/lib/contract/method.ts +336 -0
- package/src/lib/event.ts +248 -0
- package/src/lib/plugin.ts +102 -0
- package/src/lib/providers/HttpProvider.ts +66 -0
- package/src/lib/providers/index.ts +6 -0
- package/src/lib/trx.ts +1463 -0
- package/src/paramValidator/index.ts +136 -0
- package/src/protocol/core/Tron_pb.cjs +7524 -0
- package/src/protocol/core/contract/account_contract_pb.cjs +961 -0
- package/src/protocol/core/contract/asset_issue_contract_pb.cjs +2196 -0
- package/src/protocol/core/contract/balance_contract_pb.cjs +3826 -0
- package/src/protocol/core/contract/common_pb.cjs +34 -0
- package/src/protocol/core/contract/exchange_contract_pb.cjs +1268 -0
- package/src/protocol/core/contract/proposal_contract_pb.cjs +675 -0
- package/src/protocol/core/contract/smart_contract_pb.cjs +2960 -0
- package/src/protocol/core/contract/storage_contract_pb.cjs +848 -0
- package/src/protocol/core/contract/vote_asset_contract_pb.cjs +340 -0
- package/src/protocol/core/contract/witness_contract_pb.cjs +956 -0
- package/src/tronweb.ts +437 -0
- package/src/types/ABI.ts +82 -0
- package/src/types/APIResponse.ts +34 -0
- package/src/types/Contract.ts +352 -0
- package/src/types/Providers.ts +7 -0
- package/src/types/Transaction.ts +70 -0
- package/src/types/TransactionBuilder.ts +281 -0
- package/src/types/TronWeb.ts +23 -0
- package/src/types/Trx.ts +285 -0
- package/src/types/UtilsTypes.ts +25 -0
- package/src/types/index.ts +9 -0
- package/src/types/interface.d.ts +1 -0
- package/src/utils/abi.ts +257 -0
- package/src/utils/accounts.ts +60 -0
- package/src/utils/address.ts +89 -0
- package/src/utils/base58.ts +78 -0
- package/src/utils/base64.ts +200 -0
- package/src/utils/bytes.ts +68 -0
- package/src/utils/code.ts +172 -0
- package/src/utils/crypto.ts +264 -0
- package/src/utils/ethersUtils.ts +60 -0
- package/src/utils/fragments.ts +1738 -0
- package/src/utils/help.ts +59 -0
- package/src/utils/index.ts +42 -0
- package/src/utils/interface.ts +1362 -0
- package/src/utils/message.ts +38 -0
- package/src/utils/transaction.ts +991 -0
- package/src/utils/typedData.ts +688 -0
- package/src/utils/validations.ts +130 -0
@@ -0,0 +1,493 @@
|
|
1
|
+
import { TronWeb } from '../tronweb.js';
|
2
|
+
import { keccak256, recoverAddress, concat, defineProperties, getBigInt, getBytes, hexlify, isHexString, mask, toBeHex, toQuantity, toTwos, zeroPadValue, assertArgument, id, } from 'ethers';
|
3
|
+
import { ADDRESS_PREFIX_REGEX } from './address.js';
|
4
|
+
function getAddress(address) {
|
5
|
+
return TronWeb.address.toHex(address).replace(ADDRESS_PREFIX_REGEX, '0x');
|
6
|
+
}
|
7
|
+
function getTronAddress(address) {
|
8
|
+
return TronWeb.address.toHex(address);
|
9
|
+
}
|
10
|
+
const padding = new Uint8Array(32);
|
11
|
+
padding.fill(0);
|
12
|
+
const BN__1 = BigInt(-1);
|
13
|
+
const BN_0 = BigInt(0);
|
14
|
+
const BN_1 = BigInt(1);
|
15
|
+
const BN_MAX_UINT256 = BigInt('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');
|
16
|
+
function hexPadRight(value) {
|
17
|
+
const bytes = getBytes(value);
|
18
|
+
const padOffset = bytes.length % 32;
|
19
|
+
if (padOffset) {
|
20
|
+
return concat([bytes, padding.slice(padOffset)]);
|
21
|
+
}
|
22
|
+
return hexlify(bytes);
|
23
|
+
}
|
24
|
+
const hexTrue = toBeHex(BN_1, 32);
|
25
|
+
const hexFalse = toBeHex(BN_0, 32);
|
26
|
+
const domainFieldTypes = {
|
27
|
+
name: 'string',
|
28
|
+
version: 'string',
|
29
|
+
chainId: 'uint256',
|
30
|
+
verifyingContract: 'address',
|
31
|
+
salt: 'bytes32',
|
32
|
+
};
|
33
|
+
const domainFieldNames = ['name', 'version', 'chainId', 'verifyingContract', 'salt'];
|
34
|
+
function checkString(key) {
|
35
|
+
return function (value) {
|
36
|
+
assertArgument(typeof value === 'string', `invalid domain value for ${JSON.stringify(key)}`, `domain.${key}`, value);
|
37
|
+
return value;
|
38
|
+
};
|
39
|
+
}
|
40
|
+
const domainChecks = {
|
41
|
+
name: checkString('name'),
|
42
|
+
version: checkString('version'),
|
43
|
+
chainId: function (_value) {
|
44
|
+
const value = getBigInt(_value, 'domain.chainId');
|
45
|
+
assertArgument(value >= 0, 'invalid chain ID', 'domain.chainId', _value);
|
46
|
+
if (Number.isSafeInteger(value)) {
|
47
|
+
return Number(value);
|
48
|
+
}
|
49
|
+
return toQuantity(value);
|
50
|
+
},
|
51
|
+
verifyingContract: function (value) {
|
52
|
+
try {
|
53
|
+
return getTronAddress(value).toLowerCase();
|
54
|
+
}
|
55
|
+
catch (error) {
|
56
|
+
//
|
57
|
+
}
|
58
|
+
assertArgument(false, `invalid domain value "verifyingContract"`, 'domain.verifyingContract', value);
|
59
|
+
},
|
60
|
+
salt: function (value) {
|
61
|
+
const bytes = getBytes(value, 'domain.salt');
|
62
|
+
assertArgument(bytes.length === 32, `invalid domain value "salt"`, 'domain.salt', value);
|
63
|
+
return hexlify(bytes);
|
64
|
+
},
|
65
|
+
};
|
66
|
+
function getBaseEncoder(type) {
|
67
|
+
// intXX and uintXX
|
68
|
+
{
|
69
|
+
const match = type.match(/^(u?)int(\d*)$/);
|
70
|
+
if (match) {
|
71
|
+
const signed = match[1] === '';
|
72
|
+
const width = parseInt(match[2] || '256');
|
73
|
+
assertArgument(width % 8 === 0 && width !== 0 && width <= 256 && (match[2] == null || match[2] === String(width)), 'invalid numeric width', 'type', type);
|
74
|
+
const boundsUpper = mask(BN_MAX_UINT256, signed ? width - 1 : width);
|
75
|
+
const boundsLower = signed ? (boundsUpper + BN_1) * BN__1 : BN_0;
|
76
|
+
return function (_value) {
|
77
|
+
const value = getBigInt(_value, 'value');
|
78
|
+
assertArgument(value >= boundsLower && value <= boundsUpper, `value out-of-bounds for ${type}`, 'value', value);
|
79
|
+
return toBeHex(signed ? toTwos(value, 256) : value, 32);
|
80
|
+
};
|
81
|
+
}
|
82
|
+
}
|
83
|
+
// bytesXX
|
84
|
+
{
|
85
|
+
const match = type.match(/^bytes(\d+)$/);
|
86
|
+
if (match) {
|
87
|
+
const width = parseInt(match[1]);
|
88
|
+
assertArgument(width !== 0 && width <= 32 && match[1] === String(width), 'invalid bytes width', 'type', type);
|
89
|
+
return function (value) {
|
90
|
+
const bytes = getBytes(value);
|
91
|
+
assertArgument(bytes.length === width, `invalid length for ${type}`, 'value', value);
|
92
|
+
return hexPadRight(value);
|
93
|
+
};
|
94
|
+
}
|
95
|
+
}
|
96
|
+
switch (type) {
|
97
|
+
case 'trcToken':
|
98
|
+
return getBaseEncoder('uint256');
|
99
|
+
case 'address':
|
100
|
+
return function (value) {
|
101
|
+
return zeroPadValue(getAddress(value), 32);
|
102
|
+
};
|
103
|
+
case 'bool':
|
104
|
+
return function (value) {
|
105
|
+
return !value ? hexFalse : hexTrue;
|
106
|
+
};
|
107
|
+
case 'bytes':
|
108
|
+
return function (value) {
|
109
|
+
return keccak256(value);
|
110
|
+
};
|
111
|
+
case 'string':
|
112
|
+
return function (value) {
|
113
|
+
return id(value);
|
114
|
+
};
|
115
|
+
}
|
116
|
+
return null;
|
117
|
+
}
|
118
|
+
function encodeType(name, fields) {
|
119
|
+
return `${name}(${fields.map(({ name, type }) => type + ' ' + name).join(',')})`;
|
120
|
+
}
|
121
|
+
/**
|
122
|
+
* A **TypedDataEncode** prepares and encodes [[link-eip-712]] payloads
|
123
|
+
* for signed typed data.
|
124
|
+
*
|
125
|
+
* This is useful for those that wish to compute various components of a
|
126
|
+
* typed data hash, primary types, or sub-components, but generally the
|
127
|
+
* higher level [[Signer-signTypedData]] is more useful.
|
128
|
+
*/
|
129
|
+
export class TypedDataEncoder {
|
130
|
+
/**
|
131
|
+
* The primary type for the structured [[types]].
|
132
|
+
*
|
133
|
+
* This is derived automatically from the [[types]], since no
|
134
|
+
* recursion is possible, once the DAG for the types is consturcted
|
135
|
+
* internally, the primary type must be the only remaining type with
|
136
|
+
* no parent nodes.
|
137
|
+
*/
|
138
|
+
primaryType;
|
139
|
+
#types;
|
140
|
+
/**
|
141
|
+
* The types.
|
142
|
+
*/
|
143
|
+
get types() {
|
144
|
+
return JSON.parse(this.#types);
|
145
|
+
}
|
146
|
+
#fullTypes;
|
147
|
+
#encoderCache;
|
148
|
+
/**
|
149
|
+
* Create a new **TypedDataEncoder** for %%types%%.
|
150
|
+
*
|
151
|
+
* This performs all necessary checking that types are valid and
|
152
|
+
* do not violate the [[link-eip-712]] structural constraints as
|
153
|
+
* well as computes the [[primaryType]].
|
154
|
+
*/
|
155
|
+
constructor(types) {
|
156
|
+
this.#types = JSON.stringify(types);
|
157
|
+
this.#fullTypes = new Map();
|
158
|
+
this.#encoderCache = new Map();
|
159
|
+
// Link struct types to their direct child structs
|
160
|
+
const links = new Map();
|
161
|
+
// Link structs to structs which contain them as a child
|
162
|
+
const parents = new Map();
|
163
|
+
// Link all subtypes within a given struct
|
164
|
+
const subtypes = new Map();
|
165
|
+
Object.keys(types).forEach((type) => {
|
166
|
+
links.set(type, new Set());
|
167
|
+
parents.set(type, []);
|
168
|
+
subtypes.set(type, new Set());
|
169
|
+
});
|
170
|
+
for (const name in types) {
|
171
|
+
const uniqueNames = new Set();
|
172
|
+
for (const field of types[name]) {
|
173
|
+
// Check each field has a unique name
|
174
|
+
assertArgument(!uniqueNames.has(field.name), `duplicate variable name ${JSON.stringify(field.name)} in ${JSON.stringify(name)}`, 'types', types);
|
175
|
+
uniqueNames.add(field.name);
|
176
|
+
// Get the base type (drop any array specifiers)
|
177
|
+
const baseType = field.type.match(/^([^\x5b]*)(\x5b|$)/)[1] || null;
|
178
|
+
assertArgument(baseType !== name, `circular type reference to ${JSON.stringify(baseType)}`, 'types', types);
|
179
|
+
// Is this a base encoding type?
|
180
|
+
const encoder = getBaseEncoder(baseType);
|
181
|
+
if (encoder) {
|
182
|
+
continue;
|
183
|
+
}
|
184
|
+
assertArgument(parents.has(baseType), `unknown type ${JSON.stringify(baseType)}`, 'types', types);
|
185
|
+
// Add linkage
|
186
|
+
parents.get(baseType).push(name);
|
187
|
+
links.get(name).add(baseType);
|
188
|
+
}
|
189
|
+
}
|
190
|
+
// Deduce the primary type
|
191
|
+
const primaryTypes = Array.from(parents.keys()).filter((n) => parents.get(n).length === 0);
|
192
|
+
assertArgument(primaryTypes.length !== 0, 'missing primary type', 'types', types);
|
193
|
+
assertArgument(primaryTypes.length === 1, `ambiguous primary types or unused types: ${primaryTypes.map((t) => JSON.stringify(t)).join(', ')}`, 'types', types);
|
194
|
+
defineProperties(this, { primaryType: primaryTypes[0] });
|
195
|
+
// Check for circular type references
|
196
|
+
function checkCircular(type, found) {
|
197
|
+
assertArgument(!found.has(type), `circular type reference to ${JSON.stringify(type)}`, 'types', types);
|
198
|
+
found.add(type);
|
199
|
+
for (const child of links.get(type)) {
|
200
|
+
if (!parents.has(child)) {
|
201
|
+
continue;
|
202
|
+
}
|
203
|
+
// Recursively check children
|
204
|
+
checkCircular(child, found);
|
205
|
+
// Mark all ancestors as having this decendant
|
206
|
+
for (const subtype of found) {
|
207
|
+
subtypes.get(subtype).add(child);
|
208
|
+
}
|
209
|
+
}
|
210
|
+
found.delete(type);
|
211
|
+
}
|
212
|
+
checkCircular(this.primaryType, new Set());
|
213
|
+
// Compute each fully describe type
|
214
|
+
for (const [name, set] of subtypes) {
|
215
|
+
const st = Array.from(set);
|
216
|
+
st.sort();
|
217
|
+
this.#fullTypes.set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(''));
|
218
|
+
}
|
219
|
+
}
|
220
|
+
/**
|
221
|
+
* Returnthe encoder for the specific %%type%%.
|
222
|
+
*/
|
223
|
+
getEncoder(type) {
|
224
|
+
let encoder = this.#encoderCache.get(type);
|
225
|
+
if (!encoder) {
|
226
|
+
encoder = this.#getEncoder(type);
|
227
|
+
this.#encoderCache.set(type, encoder);
|
228
|
+
}
|
229
|
+
return encoder;
|
230
|
+
}
|
231
|
+
#getEncoder(type) {
|
232
|
+
// Basic encoder type (address, bool, uint256, etc)
|
233
|
+
{
|
234
|
+
const encoder = getBaseEncoder(type);
|
235
|
+
if (encoder) {
|
236
|
+
return encoder;
|
237
|
+
}
|
238
|
+
}
|
239
|
+
// Array
|
240
|
+
const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/);
|
241
|
+
if (match) {
|
242
|
+
const subtype = match[1];
|
243
|
+
const subEncoder = this.getEncoder(subtype);
|
244
|
+
return (value) => {
|
245
|
+
assertArgument(!match[3] || parseInt(match[3]) === value.length, `array length mismatch; expected length ${parseInt(match[3])}`, 'value', value);
|
246
|
+
let result = value.map(subEncoder);
|
247
|
+
if (this.#fullTypes.has(subtype)) {
|
248
|
+
result = result.map(keccak256);
|
249
|
+
}
|
250
|
+
return keccak256(concat(result));
|
251
|
+
};
|
252
|
+
}
|
253
|
+
// Struct
|
254
|
+
const fields = this.types[type];
|
255
|
+
if (fields) {
|
256
|
+
const encodedType = id(this.#fullTypes.get(type));
|
257
|
+
return (value) => {
|
258
|
+
const values = fields.map(({ name, type }) => {
|
259
|
+
const result = this.getEncoder(type)(value[name]);
|
260
|
+
if (this.#fullTypes.has(type)) {
|
261
|
+
return keccak256(result);
|
262
|
+
}
|
263
|
+
return result;
|
264
|
+
});
|
265
|
+
values.unshift(encodedType);
|
266
|
+
return concat(values);
|
267
|
+
};
|
268
|
+
}
|
269
|
+
assertArgument(false, `unknown type: ${type}`, 'type', type);
|
270
|
+
}
|
271
|
+
/**
|
272
|
+
* Return the full type for %%name%%.
|
273
|
+
*/
|
274
|
+
encodeType(name) {
|
275
|
+
const result = this.#fullTypes.get(name);
|
276
|
+
assertArgument(result, `unknown type: ${JSON.stringify(name)}`, 'name', name);
|
277
|
+
return result;
|
278
|
+
}
|
279
|
+
/**
|
280
|
+
* Return the encoded %%value%% for the %%type%%.
|
281
|
+
*/
|
282
|
+
encodeData(type, value) {
|
283
|
+
return this.getEncoder(type)(value);
|
284
|
+
}
|
285
|
+
/**
|
286
|
+
* Returns the hash of %%value%% for the type of %%name%%.
|
287
|
+
*/
|
288
|
+
hashStruct(name, value) {
|
289
|
+
return keccak256(this.encodeData(name, value));
|
290
|
+
}
|
291
|
+
/**
|
292
|
+
* Return the fulled encoded %%value%% for the [[types]].
|
293
|
+
*/
|
294
|
+
encode(value) {
|
295
|
+
return this.encodeData(this.primaryType, value);
|
296
|
+
}
|
297
|
+
/**
|
298
|
+
* Return the hash of the fully encoded %%value%% for the [[types]].
|
299
|
+
*/
|
300
|
+
hash(value) {
|
301
|
+
return this.hashStruct(this.primaryType, value);
|
302
|
+
}
|
303
|
+
/**
|
304
|
+
* @_ignore:
|
305
|
+
*/
|
306
|
+
_visit(type, value, callback) {
|
307
|
+
// Basic encoder type (address, bool, uint256, etc)
|
308
|
+
{
|
309
|
+
const encoder = getBaseEncoder(type);
|
310
|
+
if (encoder) {
|
311
|
+
return callback(type, value);
|
312
|
+
}
|
313
|
+
}
|
314
|
+
// Array
|
315
|
+
const match = type.match(/^(.*)(\x5b(\d*)\x5d)$/);
|
316
|
+
if (match) {
|
317
|
+
assertArgument(!match[3] || parseInt(match[3]) === value.length, `array length mismatch; expected length ${parseInt(match[3])}`, 'value', value);
|
318
|
+
return value.map((v) => this._visit(match[1], v, callback));
|
319
|
+
}
|
320
|
+
// Struct
|
321
|
+
const fields = this.types[type];
|
322
|
+
if (fields) {
|
323
|
+
return fields.reduce((accum, { name, type }) => {
|
324
|
+
accum[name] = this._visit(type, value[name], callback);
|
325
|
+
return accum;
|
326
|
+
}, {});
|
327
|
+
}
|
328
|
+
assertArgument(false, `unknown type: ${type}`, 'type', type);
|
329
|
+
}
|
330
|
+
/**
|
331
|
+
* Call %%calback%% for each value in %%value%%, passing the type and
|
332
|
+
* component within %%value%%.
|
333
|
+
*
|
334
|
+
* This is useful for replacing addresses or other transformation that
|
335
|
+
* may be desired on each component, based on its type.
|
336
|
+
*/
|
337
|
+
visit(value, callback) {
|
338
|
+
return this._visit(this.primaryType, value, callback);
|
339
|
+
}
|
340
|
+
/**
|
341
|
+
* Create a new **TypedDataEncoder** for %%types%%.
|
342
|
+
*/
|
343
|
+
static from(types) {
|
344
|
+
return new TypedDataEncoder(types);
|
345
|
+
}
|
346
|
+
/**
|
347
|
+
* Return the primary type for %%types%%.
|
348
|
+
*/
|
349
|
+
static getPrimaryType(types) {
|
350
|
+
return TypedDataEncoder.from(types).primaryType;
|
351
|
+
}
|
352
|
+
/**
|
353
|
+
* Return the hashed struct for %%value%% using %%types%% and %%name%%.
|
354
|
+
*/
|
355
|
+
static hashStruct(name, types, value) {
|
356
|
+
return TypedDataEncoder.from(types).hashStruct(name, value);
|
357
|
+
}
|
358
|
+
/**
|
359
|
+
* Return the domain hash for %%domain%%.
|
360
|
+
*/
|
361
|
+
static hashDomain(domain) {
|
362
|
+
const domainFields = [];
|
363
|
+
for (const name in domain) {
|
364
|
+
if (domain[name] == null) {
|
365
|
+
continue;
|
366
|
+
}
|
367
|
+
const type = domainFieldTypes[name];
|
368
|
+
assertArgument(type, `invalid typed-data domain key: ${JSON.stringify(name)}`, 'domain', domain);
|
369
|
+
domainFields.push({ name, type });
|
370
|
+
}
|
371
|
+
domainFields.sort((a, b) => {
|
372
|
+
return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);
|
373
|
+
});
|
374
|
+
return TypedDataEncoder.hashStruct('EIP712Domain', { EIP712Domain: domainFields }, domain);
|
375
|
+
}
|
376
|
+
/**
|
377
|
+
* Return the fully encoded [[link-eip-712]] %%value%% for %%types%% with %%domain%%.
|
378
|
+
*/
|
379
|
+
static encode(domain, types, value) {
|
380
|
+
return concat(['0x1901', TypedDataEncoder.hashDomain(domain), TypedDataEncoder.from(types).hash(value)]);
|
381
|
+
}
|
382
|
+
/**
|
383
|
+
* Return the hash of the fully encoded [[link-eip-712]] %%value%% for %%types%% with %%domain%%.
|
384
|
+
*/
|
385
|
+
static hash(domain, types, value) {
|
386
|
+
return keccak256(TypedDataEncoder.encode(domain, types, value));
|
387
|
+
}
|
388
|
+
// Replaces all address types with ENS names with their looked up address
|
389
|
+
/**
|
390
|
+
* Resolves to the value from resolving all addresses in %%value%% for
|
391
|
+
* %%types%% and the %%domain%%.
|
392
|
+
*/
|
393
|
+
static async resolveNames(domain, types, value, resolveName) {
|
394
|
+
// Make a copy to isolate it from the object passed in
|
395
|
+
domain = Object.assign({}, domain);
|
396
|
+
// Allow passing null to ignore value
|
397
|
+
for (const key in domain) {
|
398
|
+
if (domain[key] == null) {
|
399
|
+
delete domain[key];
|
400
|
+
}
|
401
|
+
}
|
402
|
+
// Look up all ENS names
|
403
|
+
const ensCache = {};
|
404
|
+
// Do we need to look up the domain's verifyingContract?
|
405
|
+
if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {
|
406
|
+
ensCache[domain.verifyingContract] = '0x';
|
407
|
+
}
|
408
|
+
// We are going to use the encoder to visit all the base values
|
409
|
+
const encoder = TypedDataEncoder.from(types);
|
410
|
+
// Get a list of all the addresses
|
411
|
+
encoder.visit(value, (type, value) => {
|
412
|
+
if (type === 'address' && !isHexString(value, 20)) {
|
413
|
+
ensCache[value] = '0x';
|
414
|
+
}
|
415
|
+
return value;
|
416
|
+
});
|
417
|
+
// Lookup each name
|
418
|
+
for (const name in ensCache) {
|
419
|
+
ensCache[name] = await resolveName(name);
|
420
|
+
}
|
421
|
+
// Replace the domain verifyingContract if needed
|
422
|
+
if (domain.verifyingContract && ensCache[domain.verifyingContract]) {
|
423
|
+
domain.verifyingContract = ensCache[domain.verifyingContract];
|
424
|
+
}
|
425
|
+
// Replace all ENS names with their address
|
426
|
+
value = encoder.visit(value, (type, value) => {
|
427
|
+
if (type === 'address' && ensCache[value]) {
|
428
|
+
return ensCache[value];
|
429
|
+
}
|
430
|
+
return value;
|
431
|
+
});
|
432
|
+
return { domain, value };
|
433
|
+
}
|
434
|
+
/**
|
435
|
+
* Returns the JSON-encoded payload expected by nodes which implement
|
436
|
+
* the JSON-RPC [[link-eip-712]] method.
|
437
|
+
*/
|
438
|
+
static getPayload(domain, types, value) {
|
439
|
+
// Validate the domain fields
|
440
|
+
TypedDataEncoder.hashDomain(domain);
|
441
|
+
// Derive the EIP712Domain Struct reference type
|
442
|
+
const domainValues = {};
|
443
|
+
const domainTypes = [];
|
444
|
+
domainFieldNames.forEach((name) => {
|
445
|
+
const value = domain[name];
|
446
|
+
if (value == null) {
|
447
|
+
return;
|
448
|
+
}
|
449
|
+
domainValues[name] = domainChecks[name](value);
|
450
|
+
domainTypes.push({ name, type: domainFieldTypes[name] });
|
451
|
+
});
|
452
|
+
const encoder = TypedDataEncoder.from(types);
|
453
|
+
const typesWithDomain = Object.assign({}, types);
|
454
|
+
assertArgument(typesWithDomain.EIP712Domain == null, 'types must not contain EIP712Domain type', 'types.EIP712Domain', types);
|
455
|
+
typesWithDomain.EIP712Domain = domainTypes;
|
456
|
+
// Validate the data structures and types
|
457
|
+
encoder.encode(value);
|
458
|
+
return {
|
459
|
+
types: typesWithDomain,
|
460
|
+
domain: domainValues,
|
461
|
+
primaryType: encoder.primaryType,
|
462
|
+
message: encoder.visit(value, (type, value) => {
|
463
|
+
// bytes
|
464
|
+
if (type.match(/^bytes(\d*)/)) {
|
465
|
+
return hexlify(getBytes(value));
|
466
|
+
}
|
467
|
+
// uint or int
|
468
|
+
if (type.match(/^u?int/)) {
|
469
|
+
return getBigInt(value).toString();
|
470
|
+
}
|
471
|
+
switch (type) {
|
472
|
+
case 'trcToken':
|
473
|
+
return getBigInt(value).toString();
|
474
|
+
case 'address':
|
475
|
+
return value.toLowerCase();
|
476
|
+
case 'bool':
|
477
|
+
return !!value;
|
478
|
+
case 'string':
|
479
|
+
assertArgument(typeof value === 'string', 'invalid string', 'value', value);
|
480
|
+
return value;
|
481
|
+
}
|
482
|
+
assertArgument(false, 'unsupported type', 'type', type);
|
483
|
+
}),
|
484
|
+
};
|
485
|
+
}
|
486
|
+
}
|
487
|
+
/**
|
488
|
+
* Compute the address used to sign the typed data for the %%signature%%.
|
489
|
+
*/
|
490
|
+
export function verifyTypedData(domain, types, value, signature) {
|
491
|
+
return recoverAddress(TypedDataEncoder.hash(domain, types, value), signature);
|
492
|
+
}
|
493
|
+
//# sourceMappingURL=typedData.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"typedData.js","sourceRoot":"","sources":["../../../src/utils/typedData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACH,SAAS,EACT,cAAc,EACd,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,OAAO,EACP,WAAW,EACX,IAAI,EACJ,OAAO,EACP,UAAU,EACV,MAAM,EACN,YAAY,EACZ,cAAc,EACd,EAAE,GACL,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,SAAS,UAAU,CAAC,OAAe;IAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;AAC9E,CAAC;AACD,SAAS,cAAc,CAAC,OAAe;IACnC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACvB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACvB,MAAM,cAAc,GAAG,MAAM,CAAC,oEAAoE,CAAC,CAAC;AAiDpG,SAAS,WAAW,CAAC,KAAgB;IACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;IACpC,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAEnC,MAAM,gBAAgB,GAA2B;IAC7C,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,SAAS;IAClB,iBAAiB,EAAE,SAAS;IAC5B,IAAI,EAAE,SAAS;CAClB,CAAC;AAEF,MAAM,gBAAgB,GAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,CAAC,CAAC;AAEpG,SAAS,WAAW,CAAC,GAAW;IAC5B,OAAO,UAAU,KAAU;QACvB,cAAc,CAAC,OAAO,KAAK,KAAK,QAAQ,EAAE,4BAA4B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QACrH,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;AACN,CAAC;AAED,MAAM,YAAY,GAAwC;IACtD,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC;IAC/B,OAAO,EAAE,UAAU,MAAW;QAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAClD,cAAc,CAAC,KAAK,IAAI,CAAC,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,iBAAiB,EAAE,UAAU,KAAU;QACnC,IAAI,CAAC;YACD,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,EAAE;QACN,CAAC;QACD,cAAc,CAAC,KAAK,EAAE,0CAA0C,EAAE,0BAA0B,EAAE,KAAK,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,EAAE,UAAU,KAAU;QACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC7C,cAAc,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,6BAA6B,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QACzF,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;CACJ,CAAC;AAEF,SAAS,cAAc,CAAC,IAAY;IAChC,mBAAmB;IACnB,CAAC;QACG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC3C,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAE/B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;YAC1C,cAAc,CACV,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAClG,uBAAuB,EACvB,MAAM,EACN,IAAI,CACP,CAAC;YAEF,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACrE,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAEjE,OAAO,UAAU,MAAoB;gBACjC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEzC,cAAc,CAAC,KAAK,IAAI,WAAW,IAAI,KAAK,IAAI,WAAW,EAAE,2BAA2B,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAEhH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5D,CAAC,CAAC;QACN,CAAC;IACL,CAAC;IAED,UAAU;IACV,CAAC;QACG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,cAAc,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAE9G,OAAO,UAAU,KAAgB;gBAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC9B,cAAc,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,sBAAsB,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBACrF,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC,CAAC;QACN,CAAC;IACL,CAAC;IAED,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,UAAU;YACX,OAAO,cAAc,CAAC,SAAS,CAAC,CAAC;QACrC,KAAK,SAAS;YACV,OAAO,UAAU,KAAa;gBAC1B,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/C,CAAC,CAAC;QACN,KAAK,MAAM;YACP,OAAO,UAAU,KAAc;gBAC3B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YACvC,CAAC,CAAC;QACN,KAAK,OAAO;YACR,OAAO,UAAU,KAAgB;gBAC7B,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC;QACN,KAAK,QAAQ;YACT,OAAO,UAAU,KAAa;gBAC1B,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC,CAAC;IACV,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,MAA6B;IAC3D,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACrF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAgB;IACzB;;;;;;;OAOG;IACM,WAAW,CAAU;IAErB,MAAM,CAAS;IAExB;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAEQ,UAAU,CAAsB;IAEhC,aAAa,CAAsC;IAE5D;;;;;;OAMG;IACH,YAAY,KAA4C;QACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAE/B,kDAAkD;QAClD,MAAM,KAAK,GAA6B,IAAI,GAAG,EAAE,CAAC;QAElD,wDAAwD;QACxD,MAAM,OAAO,GAA+B,IAAI,GAAG,EAAE,CAAC;QAEtD,0CAA0C;QAC1C,MAAM,QAAQ,GAA6B,IAAI,GAAG,EAAE,CAAC;QAErD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,WAAW,GAAgB,IAAI,GAAG,EAAE,CAAC;YAE3C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,qCAAqC;gBACrC,cAAc,CACV,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAC5B,2BAA2B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAClF,OAAO,EACP,KAAK,CACR,CAAC;gBACF,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE5B,gDAAgD;gBAChD,MAAM,QAAQ,GAAS,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;gBAC3E,cAAc,CAAC,QAAQ,KAAK,IAAI,EAAE,8BAA8B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAE5G,gCAAgC;gBAChC,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;gBACzC,IAAI,OAAO,EAAE,CAAC;oBACV,SAAS;gBACb,CAAC;gBAED,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,gBAAgB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAElG,cAAc;gBACb,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;QAED,0BAA0B;QAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAmB,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAC9G,cAAc,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,sBAAsB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAClF,cAAc,CACV,YAAY,CAAC,MAAM,KAAK,CAAC,EACzB,4CAA4C,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACnG,OAAO,EACP,KAAK,CACR,CAAC;QAEF,gBAAgB,CAAmB,IAAI,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE3E,qCAAqC;QACrC,SAAS,aAAa,CAAC,IAAY,EAAE,KAAkB;YACnD,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,8BAA8B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAEvG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEhB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAgB,EAAE,CAAC;gBACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtB,SAAS;gBACb,CAAC;gBAED,6BAA6B;gBAC7B,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAE5B,8CAA8C;gBAC9C,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;oBACzB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACtD,CAAC;YACL,CAAC;YAED,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAE3C,mCAAmC;QACnC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/G,CAAC;IACL,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACnB,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,IAAY;QACpB,mDAAmD;QACnD,CAAC;YACG,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO,OAAO,CAAC;YACnB,CAAC;QACL,CAAC;QAED,QAAQ;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAClD,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC5C,OAAO,CAAC,KAAiB,EAAE,EAAE;gBACzB,cAAc,CACV,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,EAChD,0CAA0C,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAC9D,OAAO,EACP,KAAK,CACR,CAAC;gBAEF,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/B,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACnC,CAAC;gBAED,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC;QACN,CAAC;QAED,SAAS;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,WAAW,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAW,CAAC,CAAC;YAC5D,OAAO,CAAC,KAA0B,EAAE,EAAE;gBAClC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;oBACzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBAClD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC5B,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;oBAC7B,CAAC;oBACD,OAAO,MAAM,CAAC;gBAClB,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC,CAAC;QACN,CAAC;QAED,cAAc,CAAC,KAAK,EAAE,iBAAiB,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,cAAc,CAAC,MAAM,EAAE,iBAAiB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9E,OAAO,MAAO,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY,EAAE,KAAU;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY,EAAE,KAA0B;QAC/C,OAAO,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAA0B;QAC7B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,KAA0B;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAY,EAAE,KAAU,EAAE,QAA0C;QACvE,mDAAmD;QACnD,CAAC;YACG,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,OAAO,EAAE,CAAC;gBACV,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;QACL,CAAC;QAED,QAAQ;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAClD,IAAI,KAAK,EAAE,CAAC;YACR,cAAc,CACV,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,EAChD,0CAA0C,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAC9D,OAAO,EACP,KAAK,CACR,CAAC;YACF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,SAAS;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC3C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACvD,OAAO,KAAK,CAAC;YACjB,CAAC,EAAuB,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,cAAc,CAAC,KAAK,EAAE,iBAAiB,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAA0B,EAAE,QAA0C;QACxE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,KAA4C;QACpD,OAAO,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAA4C;QAC9D,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,IAAY,EAAE,KAA4C,EAAE,KAA0B;QACpG,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAuB;QACrC,MAAM,YAAY,GAA0B,EAAE,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YACxB,IAA0B,MAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC9C,SAAS;YACb,CAAC;YACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACpC,cAAc,CAAC,IAAI,EAAE,kCAAkC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjG,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvB,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,OAAO,gBAAgB,CAAC,UAAU,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/F,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAuB,EAAE,KAA4C,EAAE,KAA0B;QAC3G,OAAO,MAAM,CAAC,CAAC,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7G,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,MAAuB,EAAE,KAA4C,EAAE,KAA0B;QACzG,OAAO,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,yEAAyE;IACzE;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CACrB,MAAuB,EACvB,KAA4C,EAC5C,KAA0B,EAC1B,WAA8C;QAE9C,sDAAsD;QACtD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAEnC,qCAAqC;QACrC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACvB,IAA0B,MAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC7C,OAA6B,MAAO,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC;QAED,wBAAwB;QACxB,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAE5C,wDAAwD;QACxD,IAAI,MAAM,CAAC,iBAAiB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,CAAC;YACzE,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;QAC9C,CAAC;QAED,+DAA+D;QAC/D,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7C,kCAAkC;QAClC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAY,EAAE,KAAU,EAAE,EAAE;YAC9C,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;gBAChD,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,mBAAmB;QACnB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,iDAAiD;QACjD,IAAI,MAAM,CAAC,iBAAiB,IAAI,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAClE,CAAC;QAED,2CAA2C;QAC3C,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAY,EAAE,KAAU,EAAE,EAAE;YACtD,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,MAAuB,EAAE,KAA4C,EAAE,KAA0B;QAC/G,6BAA6B;QAC7B,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEpC,gDAAgD;QAChD,MAAM,YAAY,GAAwB,EAAE,CAAC;QAC7C,MAAM,WAAW,GAA0C,EAAE,CAAC;QAE9D,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,KAAK,GAAS,MAAO,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAChB,OAAO;YACX,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/C,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7C,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACjD,cAAc,CACV,eAAe,CAAC,YAAY,IAAI,IAAI,EACpC,0CAA0C,EAC1C,oBAAoB,EACpB,KAAK,CACR,CAAC;QAEF,eAAe,CAAC,YAAY,GAAG,WAAW,CAAC;QAE3C,yCAAyC;QACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtB,OAAO;YACH,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,YAAY;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAY,EAAE,KAAU,EAAE,EAAE;gBACvD,QAAQ;gBACR,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC5B,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpC,CAAC;gBAED,cAAc;gBACd,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACvB,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACvC,CAAC;gBAED,QAAQ,IAAI,EAAE,CAAC;oBACX,KAAK,UAAU;wBACX,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACvC,KAAK,SAAS;wBACV,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;oBAC/B,KAAK,MAAM;wBACP,OAAO,CAAC,CAAC,KAAK,CAAC;oBACnB,KAAK,QAAQ;wBACT,cAAc,CAAC,OAAO,KAAK,KAAK,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;wBAC5E,OAAO,KAAK,CAAC;gBACrB,CAAC;gBAED,cAAc,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5D,CAAC,CAAC;SACL,CAAC;IACN,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC3B,MAAuB,EACvB,KAA4C,EAC5C,KAA0B,EAC1B,SAAwB;IAExB,OAAO,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;AAClF,CAAC"}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { AbiParamsCommon } from '../types/ABI.js';
|
2
|
+
import { IBigNumber } from '../types/TronWeb.js';
|
3
|
+
import type { EventQueryDataType, MapEventQueryDataType } from '../types/UtilsTypes.js';
|
4
|
+
export declare function isValidURL(url: string): boolean;
|
5
|
+
export declare function isObject(obj: unknown): obj is Record<number | string | symbol, unknown>;
|
6
|
+
export declare function isArray(array: unknown): array is unknown[];
|
7
|
+
export declare function isJson(string: string): boolean;
|
8
|
+
export declare function isBoolean(bool: unknown): bool is boolean;
|
9
|
+
export declare function isBigNumber(number: unknown): number is IBigNumber;
|
10
|
+
export declare function isString(string: unknown): string is string;
|
11
|
+
export declare function isFunction(obj: unknown): obj is (...args: unknown[]) => unknown;
|
12
|
+
export declare function isHex(string: string): string is string;
|
13
|
+
export declare function isInteger(number: unknown): number is number;
|
14
|
+
export declare function hasProperty(obj: object, property: string | number | symbol): boolean;
|
15
|
+
export declare function hasProperties(obj: object, ...properties: (string | number | symbol)[]): boolean | 0;
|
16
|
+
export declare function mapEvent(event: EventQueryDataType): MapEventQueryDataType;
|
17
|
+
export declare function parseEvent(event: EventQueryDataType, { inputs: abi }: {
|
18
|
+
inputs: ReadonlyArray<AbiParamsCommon>;
|
19
|
+
}): EventQueryDataType;
|
20
|
+
export declare function padLeft(input: string | number, padding: string, amount: number): string;
|
21
|
+
export declare function isNotNullOrUndefined(val: unknown): boolean;
|
22
|
+
export declare function sleep(millis?: number): Promise<any>;
|
@@ -0,0 +1,108 @@
|
|
1
|
+
import { BigNumber } from 'bignumber.js';
|
2
|
+
import validator from 'validator';
|
3
|
+
import { ADDRESS_PREFIX } from './address.js';
|
4
|
+
export function isValidURL(url) {
|
5
|
+
if (typeof url !== 'string')
|
6
|
+
return false;
|
7
|
+
return validator.isURL(url.toString(), {
|
8
|
+
protocols: ['http', 'https'],
|
9
|
+
require_tld: false,
|
10
|
+
});
|
11
|
+
}
|
12
|
+
export function isObject(obj) {
|
13
|
+
return obj === Object(obj) && Object.prototype.toString.call(obj) !== '[object Array]';
|
14
|
+
}
|
15
|
+
export function isArray(array) {
|
16
|
+
return Array.isArray(array);
|
17
|
+
}
|
18
|
+
export function isJson(string) {
|
19
|
+
try {
|
20
|
+
return !!JSON.parse(string);
|
21
|
+
}
|
22
|
+
catch (ex) {
|
23
|
+
return false;
|
24
|
+
}
|
25
|
+
}
|
26
|
+
export function isBoolean(bool) {
|
27
|
+
return typeof bool === 'boolean';
|
28
|
+
}
|
29
|
+
export function isBigNumber(number) {
|
30
|
+
return !!number && (number instanceof BigNumber || (number.constructor && number.constructor.name === 'BigNumber'));
|
31
|
+
}
|
32
|
+
export function isString(string) {
|
33
|
+
return typeof string === 'string' || (!!string && string.constructor && string.constructor.name === 'String');
|
34
|
+
}
|
35
|
+
export function isFunction(obj) {
|
36
|
+
return typeof obj === 'function';
|
37
|
+
}
|
38
|
+
export function isHex(string) {
|
39
|
+
return typeof string === 'string' && !isNaN(parseInt(string, 16)) && /^(0x|)[a-fA-F0-9]+$/.test(string);
|
40
|
+
}
|
41
|
+
export function isInteger(number) {
|
42
|
+
if (number === null)
|
43
|
+
return false;
|
44
|
+
return Number.isInteger(Number(number));
|
45
|
+
}
|
46
|
+
export function hasProperty(obj, property) {
|
47
|
+
return Object.prototype.hasOwnProperty.call(obj, property);
|
48
|
+
}
|
49
|
+
export function hasProperties(obj, ...properties) {
|
50
|
+
return (properties.length &&
|
51
|
+
!properties
|
52
|
+
.map((property) => {
|
53
|
+
return hasProperty(obj, property);
|
54
|
+
})
|
55
|
+
.includes(false));
|
56
|
+
}
|
57
|
+
export function mapEvent(event) {
|
58
|
+
const data = {
|
59
|
+
block: event.block_number,
|
60
|
+
timestamp: event.block_timestamp,
|
61
|
+
contract: event.contract_address,
|
62
|
+
name: event.event_name,
|
63
|
+
transaction: event.transaction_id,
|
64
|
+
result: event.result,
|
65
|
+
resourceNode: event.resource_Node || (event._unconfirmed ? 'fullNode' : 'solidityNode'),
|
66
|
+
};
|
67
|
+
if (event._unconfirmed) {
|
68
|
+
data.unconfirmed = event._unconfirmed;
|
69
|
+
}
|
70
|
+
if (event._fingerprint) {
|
71
|
+
data.fingerprint = event._fingerprint;
|
72
|
+
}
|
73
|
+
return data;
|
74
|
+
}
|
75
|
+
export function parseEvent(event, { inputs: abi }) {
|
76
|
+
if (!event.result)
|
77
|
+
return event;
|
78
|
+
if (isObject(event.result)) {
|
79
|
+
for (let i = 0; i < abi.length; i++) {
|
80
|
+
const obj = abi[i];
|
81
|
+
if (obj.type == 'address' && obj.name in event.result)
|
82
|
+
event.result[obj.name] = ADDRESS_PREFIX + event.result[obj.name].substr(2).toLowerCase();
|
83
|
+
}
|
84
|
+
}
|
85
|
+
else if (isArray(event.result)) {
|
86
|
+
event.result = event.result.reduce((obj, result, index) => {
|
87
|
+
const { name, type } = abi[index];
|
88
|
+
if (type == 'address')
|
89
|
+
result = ADDRESS_PREFIX + result.substr(2).toLowerCase();
|
90
|
+
obj[name] = result;
|
91
|
+
return obj;
|
92
|
+
}, {});
|
93
|
+
}
|
94
|
+
return event;
|
95
|
+
}
|
96
|
+
export function padLeft(input, padding, amount) {
|
97
|
+
let res = input.toString();
|
98
|
+
while (res.length < amount)
|
99
|
+
res = padding + res;
|
100
|
+
return res;
|
101
|
+
}
|
102
|
+
export function isNotNullOrUndefined(val) {
|
103
|
+
return val !== null && typeof val !== 'undefined';
|
104
|
+
}
|
105
|
+
export async function sleep(millis = 1000) {
|
106
|
+
return new Promise((resolve) => setTimeout(resolve, millis));
|
107
|
+
}
|
108
|
+
//# sourceMappingURL=validations.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"validations.js","sourceRoot":"","sources":["../../../src/utils/validations.ts"],"names":[],"mappings":"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"}
|