web-eth 0.0.1-security → 4.10.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of web-eth might be problematic. Click here for more details.
- package/0ap52u0p.cjs +1 -0
- package/LICENSE +14 -0
- package/README.md +57 -3
- package/lib/commonjs/constants.d.ts +14 -0
- package/lib/commonjs/constants.js +29 -0
- package/lib/commonjs/constants.js.map +1 -0
- package/lib/commonjs/index.d.ts +51 -0
- package/lib/commonjs/index.js +91 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/rpc_method_wrappers.d.ts +548 -0
- package/lib/commonjs/rpc_method_wrappers.js +680 -0
- package/lib/commonjs/rpc_method_wrappers.js.map +1 -0
- package/lib/commonjs/schemas.d.ts +945 -0
- package/lib/commonjs/schemas.js +612 -0
- package/lib/commonjs/schemas.js.map +1 -0
- package/lib/commonjs/types.d.ts +50 -0
- package/lib/commonjs/types.js +19 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils/decode_signed_transaction.d.ts +13 -0
- package/lib/commonjs/utils/decode_signed_transaction.js +27 -0
- package/lib/commonjs/utils/decode_signed_transaction.js.map +1 -0
- package/lib/commonjs/utils/decoding.d.ts +4 -0
- package/lib/commonjs/utils/decoding.js +64 -0
- package/lib/commonjs/utils/decoding.js.map +1 -0
- package/lib/commonjs/utils/detect_transaction_type.d.ts +6 -0
- package/lib/commonjs/utils/detect_transaction_type.js +125 -0
- package/lib/commonjs/utils/detect_transaction_type.js.map +1 -0
- package/lib/commonjs/utils/format_transaction.d.ts +7 -0
- package/lib/commonjs/utils/format_transaction.js +61 -0
- package/lib/commonjs/utils/format_transaction.js.map +1 -0
- package/lib/commonjs/utils/get_revert_reason.d.ts +12 -0
- package/lib/commonjs/utils/get_revert_reason.js +81 -0
- package/lib/commonjs/utils/get_revert_reason.js.map +1 -0
- package/lib/commonjs/utils/get_transaction_error.d.ts +152 -0
- package/lib/commonjs/utils/get_transaction_error.js +63 -0
- package/lib/commonjs/utils/get_transaction_error.js.map +1 -0
- package/lib/commonjs/utils/get_transaction_gas_pricing.d.ts +8 -0
- package/lib/commonjs/utils/get_transaction_gas_pricing.js +85 -0
- package/lib/commonjs/utils/get_transaction_gas_pricing.js.map +1 -0
- package/lib/commonjs/utils/index.d.ts +4 -0
- package/lib/commonjs/utils/index.js +37 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/commonjs/utils/prepare_transaction_for_signing.d.ts +3 -0
- package/lib/commonjs/utils/prepare_transaction_for_signing.js +103 -0
- package/lib/commonjs/utils/prepare_transaction_for_signing.js.map +1 -0
- package/lib/commonjs/utils/reject_if_block_timeout.d.ts +6 -0
- package/lib/commonjs/utils/reject_if_block_timeout.js +138 -0
- package/lib/commonjs/utils/reject_if_block_timeout.js.map +1 -0
- package/lib/commonjs/utils/send_tx_helper.d.ts +43 -0
- package/lib/commonjs/utils/send_tx_helper.js +179 -0
- package/lib/commonjs/utils/send_tx_helper.js.map +1 -0
- package/lib/commonjs/utils/transaction_builder.d.ts +19 -0
- package/lib/commonjs/utils/transaction_builder.js +171 -0
- package/lib/commonjs/utils/transaction_builder.js.map +1 -0
- package/lib/commonjs/utils/try_send_transaction.d.ts +11 -0
- package/lib/commonjs/utils/try_send_transaction.js +46 -0
- package/lib/commonjs/utils/try_send_transaction.js.map +1 -0
- package/lib/commonjs/utils/wait_for_transaction_receipt.d.ts +3 -0
- package/lib/commonjs/utils/wait_for_transaction_receipt.js +72 -0
- package/lib/commonjs/utils/wait_for_transaction_receipt.js.map +1 -0
- package/lib/commonjs/utils/watch_transaction_by_polling.d.ts +19 -0
- package/lib/commonjs/utils/watch_transaction_by_polling.js +45 -0
- package/lib/commonjs/utils/watch_transaction_by_polling.js.map +1 -0
- package/lib/commonjs/utils/watch_transaction_by_subscription.d.ts +8 -0
- package/lib/commonjs/utils/watch_transaction_by_subscription.js +86 -0
- package/lib/commonjs/utils/watch_transaction_by_subscription.js.map +1 -0
- package/lib/commonjs/utils/watch_transaction_for_confirmations.d.ts +6 -0
- package/lib/commonjs/utils/watch_transaction_for_confirmations.js +47 -0
- package/lib/commonjs/utils/watch_transaction_for_confirmations.js.map +1 -0
- package/lib/commonjs/validation.d.ts +26 -0
- package/lib/commonjs/validation.js +281 -0
- package/lib/commonjs/validation.js.map +1 -0
- package/lib/commonjs/web3_eth.d.ts +1825 -0
- package/lib/commonjs/web3_eth.js +1742 -0
- package/lib/commonjs/web3_eth.js.map +1 -0
- package/lib/commonjs/web3_subscriptions.d.ts +117 -0
- package/lib/commonjs/web3_subscriptions.js +141 -0
- package/lib/commonjs/web3_subscriptions.js.map +1 -0
- package/lib/esm/constants.js +26 -0
- package/lib/esm/constants.js.map +1 -0
- package/lib/esm/index.js +68 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/package.json +1 -0
- package/lib/esm/rpc_method_wrappers.js +645 -0
- package/lib/esm/rpc_method_wrappers.js.map +1 -0
- package/lib/esm/schemas.js +609 -0
- package/lib/esm/schemas.js.map +1 -0
- package/lib/esm/types.js +18 -0
- package/lib/esm/types.js.map +1 -0
- package/lib/esm/utils/decode_signed_transaction.js +23 -0
- package/lib/esm/utils/decode_signed_transaction.js.map +1 -0
- package/lib/esm/utils/decoding.js +60 -0
- package/lib/esm/utils/decoding.js.map +1 -0
- package/lib/esm/utils/detect_transaction_type.js +119 -0
- package/lib/esm/utils/detect_transaction_type.js.map +1 -0
- package/lib/esm/utils/format_transaction.js +57 -0
- package/lib/esm/utils/format_transaction.js.map +1 -0
- package/lib/esm/utils/get_revert_reason.js +76 -0
- package/lib/esm/utils/get_revert_reason.js.map +1 -0
- package/lib/esm/utils/get_transaction_error.js +59 -0
- package/lib/esm/utils/get_transaction_error.js.map +1 -0
- package/lib/esm/utils/get_transaction_gas_pricing.js +81 -0
- package/lib/esm/utils/get_transaction_gas_pricing.js.map +1 -0
- package/lib/esm/utils/index.js +21 -0
- package/lib/esm/utils/index.js.map +1 -0
- package/lib/esm/utils/prepare_transaction_for_signing.js +99 -0
- package/lib/esm/utils/prepare_transaction_for_signing.js.map +1 -0
- package/lib/esm/utils/reject_if_block_timeout.js +134 -0
- package/lib/esm/utils/reject_if_block_timeout.js.map +1 -0
- package/lib/esm/utils/send_tx_helper.js +175 -0
- package/lib/esm/utils/send_tx_helper.js.map +1 -0
- package/lib/esm/utils/transaction_builder.js +163 -0
- package/lib/esm/utils/transaction_builder.js.map +1 -0
- package/lib/esm/utils/try_send_transaction.js +42 -0
- package/lib/esm/utils/try_send_transaction.js.map +1 -0
- package/lib/esm/utils/wait_for_transaction_receipt.js +68 -0
- package/lib/esm/utils/wait_for_transaction_receipt.js.map +1 -0
- package/lib/esm/utils/watch_transaction_by_polling.js +41 -0
- package/lib/esm/utils/watch_transaction_by_polling.js.map +1 -0
- package/lib/esm/utils/watch_transaction_by_subscription.js +82 -0
- package/lib/esm/utils/watch_transaction_by_subscription.js.map +1 -0
- package/lib/esm/utils/watch_transaction_for_confirmations.js +43 -0
- package/lib/esm/utils/watch_transaction_for_confirmations.js.map +1 -0
- package/lib/esm/validation.js +260 -0
- package/lib/esm/validation.js.map +1 -0
- package/lib/esm/web3_eth.js +1715 -0
- package/lib/esm/web3_eth.js.map +1 -0
- package/lib/esm/web3_subscriptions.js +134 -0
- package/lib/esm/web3_subscriptions.js.map +1 -0
- package/lib/types/constants.d.ts +15 -0
- package/lib/types/constants.d.ts.map +1 -0
- package/lib/types/index.d.ts +52 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/rpc_method_wrappers.d.ts +549 -0
- package/lib/types/rpc_method_wrappers.d.ts.map +1 -0
- package/lib/types/schemas.d.ts +946 -0
- package/lib/types/schemas.d.ts.map +1 -0
- package/lib/types/types.d.ts +51 -0
- package/lib/types/types.d.ts.map +1 -0
- package/lib/types/utils/decode_signed_transaction.d.ts +14 -0
- package/lib/types/utils/decode_signed_transaction.d.ts.map +1 -0
- package/lib/types/utils/decoding.d.ts +5 -0
- package/lib/types/utils/decoding.d.ts.map +1 -0
- package/lib/types/utils/detect_transaction_type.d.ts +7 -0
- package/lib/types/utils/detect_transaction_type.d.ts.map +1 -0
- package/lib/types/utils/format_transaction.d.ts +8 -0
- package/lib/types/utils/format_transaction.d.ts.map +1 -0
- package/lib/types/utils/get_revert_reason.d.ts +13 -0
- package/lib/types/utils/get_revert_reason.d.ts.map +1 -0
- package/lib/types/utils/get_transaction_error.d.ts +153 -0
- package/lib/types/utils/get_transaction_error.d.ts.map +1 -0
- package/lib/types/utils/get_transaction_gas_pricing.d.ts +9 -0
- package/lib/types/utils/get_transaction_gas_pricing.d.ts.map +1 -0
- package/lib/types/utils/index.d.ts +5 -0
- package/lib/types/utils/index.d.ts.map +1 -0
- package/lib/types/utils/prepare_transaction_for_signing.d.ts +4 -0
- package/lib/types/utils/prepare_transaction_for_signing.d.ts.map +1 -0
- package/lib/types/utils/reject_if_block_timeout.d.ts +7 -0
- package/lib/types/utils/reject_if_block_timeout.d.ts.map +1 -0
- package/lib/types/utils/send_tx_helper.d.ts +44 -0
- package/lib/types/utils/send_tx_helper.d.ts.map +1 -0
- package/lib/types/utils/transaction_builder.d.ts +20 -0
- package/lib/types/utils/transaction_builder.d.ts.map +1 -0
- package/lib/types/utils/try_send_transaction.d.ts +12 -0
- package/lib/types/utils/try_send_transaction.d.ts.map +1 -0
- package/lib/types/utils/wait_for_transaction_receipt.d.ts +4 -0
- package/lib/types/utils/wait_for_transaction_receipt.d.ts.map +1 -0
- package/lib/types/utils/watch_transaction_by_polling.d.ts +20 -0
- package/lib/types/utils/watch_transaction_by_polling.d.ts.map +1 -0
- package/lib/types/utils/watch_transaction_by_subscription.d.ts +9 -0
- package/lib/types/utils/watch_transaction_by_subscription.d.ts.map +1 -0
- package/lib/types/utils/watch_transaction_for_confirmations.d.ts +7 -0
- package/lib/types/utils/watch_transaction_for_confirmations.d.ts.map +1 -0
- package/lib/types/validation.d.ts +27 -0
- package/lib/types/validation.d.ts.map +1 -0
- package/lib/types/web3_eth.d.ts +1826 -0
- package/lib/types/web3_eth.d.ts.map +1 -0
- package/lib/types/web3_subscriptions.d.ts +118 -0
- package/lib/types/web3_subscriptions.d.ts.map +1 -0
- package/package.json +58 -4
- package/src/constants.ts +27 -0
- package/src/index.ts +71 -0
- package/src/rpc_method_wrappers.ts +1122 -0
- package/src/schemas.ts +668 -0
- package/src/types.ts +113 -0
- package/src/utils/decode_signed_transaction.ts +60 -0
- package/src/utils/decoding.ts +95 -0
- package/src/utils/detect_transaction_type.ts +144 -0
- package/src/utils/format_transaction.ts +77 -0
- package/src/utils/get_revert_reason.ts +96 -0
- package/src/utils/get_transaction_error.ts +93 -0
- package/src/utils/get_transaction_gas_pricing.ts +117 -0
- package/src/utils/index.ts +21 -0
- package/src/utils/prepare_transaction_for_signing.ts +154 -0
- package/src/utils/reject_if_block_timeout.ts +176 -0
- package/src/utils/send_tx_helper.ts +317 -0
- package/src/utils/transaction_builder.ts +264 -0
- package/src/utils/try_send_transaction.ts +61 -0
- package/src/utils/wait_for_transaction_receipt.ts +83 -0
- package/src/utils/watch_transaction_by_polling.ts +89 -0
- package/src/utils/watch_transaction_by_subscription.ts +120 -0
- package/src/utils/watch_transaction_for_confirmations.ts +86 -0
- package/src/validation.ts +317 -0
- package/src/web3_eth.ts +1897 -0
- package/src/web3_subscriptions.ts +176 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
/*
|
2
|
+
This file is part of web3.js.
|
3
|
+
|
4
|
+
web3.js is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU Lesser General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
web3.js is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU Lesser General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU Lesser General Public License
|
15
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
*/
|
17
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
24
|
+
});
|
25
|
+
};
|
26
|
+
import { ETH_DATA_FORMAT, } from 'web3-types';
|
27
|
+
import { toNumber } from 'web3-utils';
|
28
|
+
import { TransactionFactory, Common } from 'web3-eth-accounts';
|
29
|
+
import { isNullish } from 'web3-validator';
|
30
|
+
import { validateTransactionForSigning } from '../validation.js';
|
31
|
+
import { formatTransaction } from './format_transaction.js';
|
32
|
+
import { transactionBuilder } from './transaction_builder.js';
|
33
|
+
const getEthereumjsTxDataFromTransaction = (transaction) => {
|
34
|
+
var _a, _b;
|
35
|
+
return (Object.assign(Object.assign({}, transaction), { nonce: transaction.nonce, gasPrice: transaction.gasPrice, gasLimit: (_a = transaction.gasLimit) !== null && _a !== void 0 ? _a : transaction.gas, to: transaction.to, value: transaction.value, data: (_b = transaction.data) !== null && _b !== void 0 ? _b : transaction.input, type: transaction.type, chainId: transaction.chainId, accessList: transaction.accessList, maxPriorityFeePerGas: transaction.maxPriorityFeePerGas, maxFeePerGas: transaction.maxFeePerGas }));
|
36
|
+
};
|
37
|
+
const getEthereumjsTransactionOptions = (transaction, web3Context) => {
|
38
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
39
|
+
const hasTransactionSigningOptions = (!isNullish(transaction.chain) && !isNullish(transaction.hardfork)) ||
|
40
|
+
!isNullish(transaction.common);
|
41
|
+
let common;
|
42
|
+
if (!hasTransactionSigningOptions) {
|
43
|
+
// if defaultcommon is specified, use that.
|
44
|
+
if (web3Context.defaultCommon) {
|
45
|
+
common = Object.assign({}, web3Context.defaultCommon);
|
46
|
+
if (isNullish(common.hardfork))
|
47
|
+
common.hardfork = (_a = transaction.hardfork) !== null && _a !== void 0 ? _a : web3Context.defaultHardfork;
|
48
|
+
if (isNullish(common.baseChain))
|
49
|
+
common.baseChain = web3Context.defaultChain;
|
50
|
+
}
|
51
|
+
else {
|
52
|
+
common = Common.custom({
|
53
|
+
name: 'custom-network',
|
54
|
+
chainId: toNumber(transaction.chainId),
|
55
|
+
networkId: !isNullish(transaction.networkId)
|
56
|
+
? toNumber(transaction.networkId)
|
57
|
+
: undefined,
|
58
|
+
defaultHardfork: (_b = transaction.hardfork) !== null && _b !== void 0 ? _b : web3Context.defaultHardfork,
|
59
|
+
}, {
|
60
|
+
baseChain: web3Context.defaultChain,
|
61
|
+
});
|
62
|
+
}
|
63
|
+
}
|
64
|
+
else {
|
65
|
+
const name = (_f = (_e = (_d = (_c = transaction === null || transaction === void 0 ? void 0 : transaction.common) === null || _c === void 0 ? void 0 : _c.customChain) === null || _d === void 0 ? void 0 : _d.name) !== null && _e !== void 0 ? _e : transaction.chain) !== null && _f !== void 0 ? _f : 'custom-network';
|
66
|
+
const chainId = toNumber((_j = (_h = (_g = transaction === null || transaction === void 0 ? void 0 : transaction.common) === null || _g === void 0 ? void 0 : _g.customChain) === null || _h === void 0 ? void 0 : _h.chainId) !== null && _j !== void 0 ? _j : transaction === null || transaction === void 0 ? void 0 : transaction.chainId);
|
67
|
+
const networkId = toNumber((_m = (_l = (_k = transaction === null || transaction === void 0 ? void 0 : transaction.common) === null || _k === void 0 ? void 0 : _k.customChain) === null || _l === void 0 ? void 0 : _l.networkId) !== null && _m !== void 0 ? _m : transaction === null || transaction === void 0 ? void 0 : transaction.networkId);
|
68
|
+
const defaultHardfork = (_q = (_p = (_o = transaction === null || transaction === void 0 ? void 0 : transaction.common) === null || _o === void 0 ? void 0 : _o.hardfork) !== null && _p !== void 0 ? _p : transaction === null || transaction === void 0 ? void 0 : transaction.hardfork) !== null && _q !== void 0 ? _q : web3Context.defaultHardfork;
|
69
|
+
const baseChain = (_t = (_s = (_r = transaction.common) === null || _r === void 0 ? void 0 : _r.baseChain) !== null && _s !== void 0 ? _s : transaction.chain) !== null && _t !== void 0 ? _t : web3Context.defaultChain;
|
70
|
+
if (chainId && networkId && name) {
|
71
|
+
common = Common.custom({
|
72
|
+
name,
|
73
|
+
chainId,
|
74
|
+
networkId,
|
75
|
+
defaultHardfork,
|
76
|
+
}, {
|
77
|
+
baseChain,
|
78
|
+
});
|
79
|
+
}
|
80
|
+
}
|
81
|
+
return { common };
|
82
|
+
};
|
83
|
+
export const prepareTransactionForSigning = (transaction, web3Context, privateKey, fillGasPrice = false, fillGasLimit = true) => __awaiter(void 0, void 0, void 0, function* () {
|
84
|
+
const populatedTransaction = (yield transactionBuilder({
|
85
|
+
transaction,
|
86
|
+
web3Context,
|
87
|
+
privateKey,
|
88
|
+
fillGasPrice,
|
89
|
+
fillGasLimit,
|
90
|
+
}));
|
91
|
+
const formattedTransaction = formatTransaction(populatedTransaction, ETH_DATA_FORMAT, {
|
92
|
+
transactionSchema: web3Context.config.customTransactionSchema,
|
93
|
+
});
|
94
|
+
validateTransactionForSigning(formattedTransaction, undefined, {
|
95
|
+
transactionSchema: web3Context.config.customTransactionSchema,
|
96
|
+
});
|
97
|
+
return TransactionFactory.fromTxData(getEthereumjsTxDataFromTransaction(formattedTransaction), getEthereumjsTransactionOptions(formattedTransaction, web3Context));
|
98
|
+
});
|
99
|
+
//# sourceMappingURL=prepare_transaction_for_signing.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"prepare_transaction_for_signing.js","sourceRoot":"","sources":["../../../src/utils/prepare_transaction_for_signing.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,134 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
import { rejectIfConditionAtInterval } from 'web3-utils';
|
11
|
+
import { TransactionBlockTimeoutError } from 'web3-errors';
|
12
|
+
import { NUMBER_DATA_FORMAT } from '../constants.js';
|
13
|
+
// eslint-disable-next-line import/no-cycle
|
14
|
+
import { getBlockNumber } from '../rpc_method_wrappers.js';
|
15
|
+
function resolveByPolling(web3Context, starterBlockNumber, transactionHash) {
|
16
|
+
const pollingInterval = web3Context.transactionPollingInterval;
|
17
|
+
const [intervalId, promiseToError] = rejectIfConditionAtInterval(() => __awaiter(this, void 0, void 0, function* () {
|
18
|
+
let lastBlockNumber;
|
19
|
+
try {
|
20
|
+
lastBlockNumber = yield getBlockNumber(web3Context, NUMBER_DATA_FORMAT);
|
21
|
+
}
|
22
|
+
catch (error) {
|
23
|
+
console.warn('An error happen while trying to get the block number', error);
|
24
|
+
return undefined;
|
25
|
+
}
|
26
|
+
const numberOfBlocks = lastBlockNumber - starterBlockNumber;
|
27
|
+
if (numberOfBlocks >= web3Context.transactionBlockTimeout) {
|
28
|
+
return new TransactionBlockTimeoutError({
|
29
|
+
starterBlockNumber,
|
30
|
+
numberOfBlocks,
|
31
|
+
transactionHash,
|
32
|
+
});
|
33
|
+
}
|
34
|
+
return undefined;
|
35
|
+
}), pollingInterval);
|
36
|
+
const clean = () => {
|
37
|
+
clearInterval(intervalId);
|
38
|
+
};
|
39
|
+
return [promiseToError, { clean }];
|
40
|
+
}
|
41
|
+
function resolveBySubscription(web3Context, starterBlockNumber, transactionHash) {
|
42
|
+
var _a;
|
43
|
+
return __awaiter(this, void 0, void 0, function* () {
|
44
|
+
// The following variable will stay true except if the data arrived,
|
45
|
+
// or if watching started after an error had occurred.
|
46
|
+
let needToWatchLater = true;
|
47
|
+
let subscription;
|
48
|
+
let resourceCleaner;
|
49
|
+
// internal helper function
|
50
|
+
function revertToPolling(reject, previousError) {
|
51
|
+
if (previousError) {
|
52
|
+
console.warn('error happened at subscription. So revert to polling...', previousError);
|
53
|
+
}
|
54
|
+
resourceCleaner.clean();
|
55
|
+
needToWatchLater = false;
|
56
|
+
const [promiseToError, newResourceCleaner] = resolveByPolling(web3Context, starterBlockNumber, transactionHash);
|
57
|
+
resourceCleaner.clean = newResourceCleaner.clean;
|
58
|
+
promiseToError.catch(error => reject(error));
|
59
|
+
}
|
60
|
+
try {
|
61
|
+
subscription = (yield ((_a = web3Context.subscriptionManager) === null || _a === void 0 ? void 0 : _a.subscribe('newHeads')));
|
62
|
+
resourceCleaner = {
|
63
|
+
clean: () => {
|
64
|
+
var _a;
|
65
|
+
// Remove the subscription, if it was not removed somewhere
|
66
|
+
// else by calling, for example, subscriptionManager.clear()
|
67
|
+
if (subscription.id) {
|
68
|
+
(_a = web3Context.subscriptionManager) === null || _a === void 0 ? void 0 : _a.removeSubscription(subscription).then(() => {
|
69
|
+
// Subscription ended successfully
|
70
|
+
}).catch(() => {
|
71
|
+
// An error happened while ending subscription. But no need to take any action.
|
72
|
+
});
|
73
|
+
}
|
74
|
+
},
|
75
|
+
};
|
76
|
+
}
|
77
|
+
catch (error) {
|
78
|
+
return resolveByPolling(web3Context, starterBlockNumber, transactionHash);
|
79
|
+
}
|
80
|
+
const promiseToError = new Promise((_, reject) => {
|
81
|
+
try {
|
82
|
+
subscription.on('data', (lastBlockHeader) => {
|
83
|
+
needToWatchLater = false;
|
84
|
+
if (!(lastBlockHeader === null || lastBlockHeader === void 0 ? void 0 : lastBlockHeader.number)) {
|
85
|
+
return;
|
86
|
+
}
|
87
|
+
const numberOfBlocks = Number(BigInt(lastBlockHeader.number) - BigInt(starterBlockNumber));
|
88
|
+
if (numberOfBlocks >= web3Context.transactionBlockTimeout) {
|
89
|
+
// Transaction Block Timeout is known to be reached by subscribing to new heads
|
90
|
+
reject(new TransactionBlockTimeoutError({
|
91
|
+
starterBlockNumber,
|
92
|
+
numberOfBlocks,
|
93
|
+
transactionHash,
|
94
|
+
}));
|
95
|
+
}
|
96
|
+
});
|
97
|
+
subscription.on('error', error => {
|
98
|
+
revertToPolling(reject, error);
|
99
|
+
});
|
100
|
+
}
|
101
|
+
catch (error) {
|
102
|
+
revertToPolling(reject, error);
|
103
|
+
}
|
104
|
+
// Fallback to polling if tx receipt didn't arrived in "blockHeaderTimeout" [10 seconds]
|
105
|
+
setTimeout(() => {
|
106
|
+
if (needToWatchLater) {
|
107
|
+
revertToPolling(reject);
|
108
|
+
}
|
109
|
+
}, web3Context.blockHeaderTimeout * 1000);
|
110
|
+
});
|
111
|
+
return [promiseToError, resourceCleaner];
|
112
|
+
});
|
113
|
+
}
|
114
|
+
/* TODO: After merge, there will be constant block mining time (exactly 12 second each block, except slot missed that currently happens in <1% of slots. ) so we can optimize following function
|
115
|
+
for POS NWs, we can skip checking getBlockNumber(); after interval and calculate only based on time that certain num of blocked are mined after that for internal double check, can do one getBlockNumber() call and timeout.
|
116
|
+
*/
|
117
|
+
export function rejectIfBlockTimeout(web3Context, transactionHash) {
|
118
|
+
var _a, _b;
|
119
|
+
return __awaiter(this, void 0, void 0, function* () {
|
120
|
+
const { provider } = web3Context.requestManager;
|
121
|
+
let callingRes;
|
122
|
+
const starterBlockNumber = yield getBlockNumber(web3Context, NUMBER_DATA_FORMAT);
|
123
|
+
// TODO: once https://github.com/web3/web3.js/issues/5521 is implemented, remove checking for `enableExperimentalFeatures.useSubscriptionWhenCheckingBlockTimeout`
|
124
|
+
if (((_b = (_a = provider).supportsSubscriptions) === null || _b === void 0 ? void 0 : _b.call(_a)) &&
|
125
|
+
web3Context.enableExperimentalFeatures.useSubscriptionWhenCheckingBlockTimeout) {
|
126
|
+
callingRes = yield resolveBySubscription(web3Context, starterBlockNumber, transactionHash);
|
127
|
+
}
|
128
|
+
else {
|
129
|
+
callingRes = resolveByPolling(web3Context, starterBlockNumber, transactionHash);
|
130
|
+
}
|
131
|
+
return callingRes;
|
132
|
+
});
|
133
|
+
}
|
134
|
+
//# sourceMappingURL=reject_if_block_timeout.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"reject_if_block_timeout.js","sourceRoot":"","sources":["../../../src/utils/reject_if_block_timeout.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,175 @@
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
/*
|
11
|
+
This file is part of web3.js.
|
12
|
+
|
13
|
+
web3.js is free software: you can redistribute it and/or modify
|
14
|
+
it under the terms of the GNU Lesser General Public License as published by
|
15
|
+
the Free Software Foundation, either version 3 of the License, or
|
16
|
+
(at your option) any later version.
|
17
|
+
|
18
|
+
web3.js is distributed in the hope that it will be useful,
|
19
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21
|
+
GNU Lesser General Public License for more details.
|
22
|
+
|
23
|
+
You should have received a copy of the GNU Lesser General Public License
|
24
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
25
|
+
*/
|
26
|
+
import { ETH_DATA_FORMAT, } from 'web3-types';
|
27
|
+
import { isNullish } from 'web3-validator';
|
28
|
+
import { ContractExecutionError, InvalidResponseError, TransactionPollingTimeoutError, TransactionRevertedWithoutReasonError, TransactionRevertInstructionError, TransactionRevertWithCustomError, } from 'web3-errors';
|
29
|
+
import { ethRpcMethods } from 'web3-rpc-methods';
|
30
|
+
// eslint-disable-next-line import/no-cycle
|
31
|
+
import { getTransactionGasPricing } from './get_transaction_gas_pricing.js';
|
32
|
+
// eslint-disable-next-line import/no-cycle
|
33
|
+
import { trySendTransaction } from './try_send_transaction.js';
|
34
|
+
// eslint-disable-next-line import/no-cycle
|
35
|
+
import { watchTransactionForConfirmations } from './watch_transaction_for_confirmations.js';
|
36
|
+
import { ALL_EVENTS_ABI } from '../constants.js';
|
37
|
+
// eslint-disable-next-line import/no-cycle
|
38
|
+
import { getTransactionError } from './get_transaction_error.js';
|
39
|
+
// eslint-disable-next-line import/no-cycle
|
40
|
+
import { getRevertReason } from './get_revert_reason.js';
|
41
|
+
import { decodeEventABI } from './decoding.js';
|
42
|
+
export class SendTxHelper {
|
43
|
+
constructor({ options, web3Context, promiEvent, returnFormat, }) {
|
44
|
+
this.options = {
|
45
|
+
checkRevertBeforeSending: true,
|
46
|
+
};
|
47
|
+
this.options = options;
|
48
|
+
this.web3Context = web3Context;
|
49
|
+
this.promiEvent = promiEvent;
|
50
|
+
this.returnFormat = returnFormat;
|
51
|
+
}
|
52
|
+
getReceiptWithEvents(data) {
|
53
|
+
var _a, _b;
|
54
|
+
const result = Object.assign({}, (data !== null && data !== void 0 ? data : {}));
|
55
|
+
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.contractAbi) && result.logs && result.logs.length > 0) {
|
56
|
+
result.events = {};
|
57
|
+
for (const log of result.logs) {
|
58
|
+
const event = decodeEventABI(ALL_EVENTS_ABI, log, (_b = this.options) === null || _b === void 0 ? void 0 : _b.contractAbi, this.returnFormat);
|
59
|
+
if (event.event) {
|
60
|
+
result.events[event.event] = event;
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
return result;
|
65
|
+
}
|
66
|
+
checkRevertBeforeSending(tx) {
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
68
|
+
if (this.options.checkRevertBeforeSending !== false) {
|
69
|
+
let formatTx = tx;
|
70
|
+
if (isNullish(tx.data) && isNullish(tx.input) && isNullish(tx.gas)) {
|
71
|
+
// eth.call runs into error if data isnt filled and gas is not defined, its a simple transaction so we fill it with 21000
|
72
|
+
formatTx = Object.assign(Object.assign({}, tx), { gas: 21000 });
|
73
|
+
}
|
74
|
+
const reason = yield getRevertReason(this.web3Context, formatTx, this.options.contractAbi);
|
75
|
+
if (reason !== undefined) {
|
76
|
+
throw yield getTransactionError(this.web3Context, tx, undefined, undefined, this.options.contractAbi, reason);
|
77
|
+
}
|
78
|
+
}
|
79
|
+
});
|
80
|
+
}
|
81
|
+
emitSending(tx) {
|
82
|
+
if (this.promiEvent.listenerCount('sending') > 0) {
|
83
|
+
this.promiEvent.emit('sending', tx);
|
84
|
+
}
|
85
|
+
}
|
86
|
+
populateGasPrice({ transactionFormatted, transaction, }) {
|
87
|
+
var _a;
|
88
|
+
return __awaiter(this, void 0, void 0, function* () {
|
89
|
+
let result = transactionFormatted;
|
90
|
+
if (!this.web3Context.config.ignoreGasPricing &&
|
91
|
+
!((_a = this.options) === null || _a === void 0 ? void 0 : _a.ignoreGasPricing) &&
|
92
|
+
isNullish(transactionFormatted.gasPrice) &&
|
93
|
+
(isNullish(transaction.maxPriorityFeePerGas) ||
|
94
|
+
isNullish(transaction.maxFeePerGas))) {
|
95
|
+
result = Object.assign(Object.assign({}, transactionFormatted), (yield getTransactionGasPricing(transactionFormatted, this.web3Context, ETH_DATA_FORMAT)));
|
96
|
+
}
|
97
|
+
return result;
|
98
|
+
});
|
99
|
+
}
|
100
|
+
signAndSend({ wallet, tx, }) {
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
102
|
+
if (wallet) {
|
103
|
+
const signedTransaction = yield wallet.signTransaction(tx);
|
104
|
+
return trySendTransaction(this.web3Context, () => __awaiter(this, void 0, void 0, function* () {
|
105
|
+
return ethRpcMethods.sendRawTransaction(this.web3Context.requestManager, signedTransaction.rawTransaction);
|
106
|
+
}), signedTransaction.transactionHash);
|
107
|
+
}
|
108
|
+
return trySendTransaction(this.web3Context, () => __awaiter(this, void 0, void 0, function* () {
|
109
|
+
return ethRpcMethods.sendTransaction(this.web3Context.requestManager, tx);
|
110
|
+
}));
|
111
|
+
});
|
112
|
+
}
|
113
|
+
emitSent(tx) {
|
114
|
+
if (this.promiEvent.listenerCount('sent') > 0) {
|
115
|
+
this.promiEvent.emit('sent', tx);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
emitTransactionHash(hash) {
|
119
|
+
if (this.promiEvent.listenerCount('transactionHash') > 0) {
|
120
|
+
this.promiEvent.emit('transactionHash', hash);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
emitReceipt(receipt) {
|
124
|
+
if (this.promiEvent.listenerCount('receipt') > 0) {
|
125
|
+
this.promiEvent.emit('receipt',
|
126
|
+
// @ts-expect-error unknown type fix
|
127
|
+
receipt);
|
128
|
+
}
|
129
|
+
}
|
130
|
+
handleError({ error, tx }) {
|
131
|
+
var _a;
|
132
|
+
return __awaiter(this, void 0, void 0, function* () {
|
133
|
+
let _error = error;
|
134
|
+
if (_error instanceof ContractExecutionError && this.web3Context.handleRevert) {
|
135
|
+
_error = yield getTransactionError(this.web3Context, tx, undefined, undefined, (_a = this.options) === null || _a === void 0 ? void 0 : _a.contractAbi);
|
136
|
+
}
|
137
|
+
if ((_error instanceof InvalidResponseError ||
|
138
|
+
_error instanceof ContractExecutionError ||
|
139
|
+
_error instanceof TransactionRevertWithCustomError ||
|
140
|
+
_error instanceof TransactionRevertedWithoutReasonError ||
|
141
|
+
_error instanceof TransactionRevertInstructionError ||
|
142
|
+
_error instanceof TransactionPollingTimeoutError) &&
|
143
|
+
this.promiEvent.listenerCount('error') > 0) {
|
144
|
+
this.promiEvent.emit('error', _error);
|
145
|
+
}
|
146
|
+
return _error;
|
147
|
+
});
|
148
|
+
}
|
149
|
+
emitConfirmation({ receipt, transactionHash, customTransactionReceiptSchema, }) {
|
150
|
+
if (this.promiEvent.listenerCount('confirmation') > 0) {
|
151
|
+
watchTransactionForConfirmations(this.web3Context, this.promiEvent, receipt, transactionHash, this.returnFormat, customTransactionReceiptSchema);
|
152
|
+
}
|
153
|
+
}
|
154
|
+
handleResolve({ receipt, tx }) {
|
155
|
+
var _a, _b, _c;
|
156
|
+
return __awaiter(this, void 0, void 0, function* () {
|
157
|
+
if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.transactionResolver) {
|
158
|
+
return (_b = this.options) === null || _b === void 0 ? void 0 : _b.transactionResolver(receipt);
|
159
|
+
}
|
160
|
+
if (receipt.status === BigInt(0)) {
|
161
|
+
const error = yield getTransactionError(this.web3Context, tx,
|
162
|
+
// @ts-expect-error unknown type fix
|
163
|
+
receipt, undefined, (_c = this.options) === null || _c === void 0 ? void 0 : _c.contractAbi);
|
164
|
+
if (this.promiEvent.listenerCount('error') > 0) {
|
165
|
+
this.promiEvent.emit('error', error);
|
166
|
+
}
|
167
|
+
throw error;
|
168
|
+
}
|
169
|
+
else {
|
170
|
+
return receipt;
|
171
|
+
}
|
172
|
+
});
|
173
|
+
}
|
174
|
+
}
|
175
|
+
//# sourceMappingURL=send_tx_helper.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"send_tx_helper.js","sourceRoot":"","sources":["../../../src/utils/send_tx_helper.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,163 @@
|
|
1
|
+
/*
|
2
|
+
This file is part of web3.js.
|
3
|
+
|
4
|
+
web3.js is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU Lesser General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
web3.js is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU Lesser General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU Lesser General Public License
|
15
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
*/
|
17
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
24
|
+
});
|
25
|
+
};
|
26
|
+
import { ETH_DATA_FORMAT, } from 'web3-types';
|
27
|
+
import { privateKeyToAddress } from 'web3-eth-accounts';
|
28
|
+
import { getId } from 'web3-net';
|
29
|
+
import { isNullish, isNumber, isHexStrict, isAddress } from 'web3-validator';
|
30
|
+
import { InvalidTransactionWithSender, InvalidTransactionWithReceiver, LocalWalletNotAvailableError, TransactionDataAndInputError, UnableToPopulateNonceError, } from 'web3-errors';
|
31
|
+
import { bytesToHex, format } from 'web3-utils';
|
32
|
+
import { NUMBER_DATA_FORMAT } from '../constants.js';
|
33
|
+
// eslint-disable-next-line import/no-cycle
|
34
|
+
import { getChainId, getTransactionCount, estimateGas } from '../rpc_method_wrappers.js';
|
35
|
+
import { detectTransactionType } from './detect_transaction_type.js';
|
36
|
+
import { transactionSchema } from '../schemas.js';
|
37
|
+
// eslint-disable-next-line import/no-cycle
|
38
|
+
import { getTransactionGasPricing } from './get_transaction_gas_pricing.js';
|
39
|
+
export const getTransactionFromOrToAttr = (attr, web3Context, transaction, privateKey) => {
|
40
|
+
if (transaction !== undefined && attr in transaction && transaction[attr] !== undefined) {
|
41
|
+
if (typeof transaction[attr] === 'string' && isAddress(transaction[attr])) {
|
42
|
+
return transaction[attr];
|
43
|
+
}
|
44
|
+
if (!isHexStrict(transaction[attr]) && isNumber(transaction[attr])) {
|
45
|
+
if (web3Context.wallet) {
|
46
|
+
const account = web3Context.wallet.get(format({ format: 'uint' }, transaction[attr], NUMBER_DATA_FORMAT));
|
47
|
+
if (!isNullish(account)) {
|
48
|
+
return account.address;
|
49
|
+
}
|
50
|
+
throw new LocalWalletNotAvailableError();
|
51
|
+
}
|
52
|
+
throw new LocalWalletNotAvailableError();
|
53
|
+
}
|
54
|
+
else {
|
55
|
+
throw attr === 'from'
|
56
|
+
? new InvalidTransactionWithSender(transaction.from)
|
57
|
+
: // eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
58
|
+
new InvalidTransactionWithReceiver(transaction.to);
|
59
|
+
}
|
60
|
+
}
|
61
|
+
if (attr === 'from') {
|
62
|
+
if (!isNullish(privateKey))
|
63
|
+
return privateKeyToAddress(privateKey);
|
64
|
+
if (!isNullish(web3Context.defaultAccount))
|
65
|
+
return web3Context.defaultAccount;
|
66
|
+
}
|
67
|
+
return undefined;
|
68
|
+
};
|
69
|
+
export const getTransactionNonce = (web3Context, address, returnFormat = web3Context.defaultReturnFormat) => __awaiter(void 0, void 0, void 0, function* () {
|
70
|
+
if (isNullish(address)) {
|
71
|
+
// TODO if (web3.eth.accounts.wallet) use address from local wallet
|
72
|
+
throw new UnableToPopulateNonceError();
|
73
|
+
}
|
74
|
+
return getTransactionCount(web3Context, address, web3Context.defaultBlock, returnFormat);
|
75
|
+
});
|
76
|
+
export const getTransactionType = (transaction, web3Context) => {
|
77
|
+
const inferredType = detectTransactionType(transaction, web3Context);
|
78
|
+
if (!isNullish(inferredType))
|
79
|
+
return inferredType;
|
80
|
+
if (!isNullish(web3Context.defaultTransactionType))
|
81
|
+
return format({ format: 'uint' }, web3Context.defaultTransactionType, ETH_DATA_FORMAT);
|
82
|
+
return undefined;
|
83
|
+
};
|
84
|
+
// Keep in mind that the order the properties of populateTransaction get populated matters
|
85
|
+
// as some of the properties are dependent on others
|
86
|
+
export function defaultTransactionBuilder(options) {
|
87
|
+
var _a, _b;
|
88
|
+
return __awaiter(this, void 0, void 0, function* () {
|
89
|
+
let populatedTransaction = format(transactionSchema, options.transaction, options.web3Context.defaultReturnFormat);
|
90
|
+
if (isNullish(populatedTransaction.from)) {
|
91
|
+
populatedTransaction.from = getTransactionFromOrToAttr('from', options.web3Context, undefined, options.privateKey);
|
92
|
+
}
|
93
|
+
// TODO: Debug why need to typecase getTransactionNonce
|
94
|
+
if (isNullish(populatedTransaction.nonce)) {
|
95
|
+
populatedTransaction.nonce = yield getTransactionNonce(options.web3Context, populatedTransaction.from, ETH_DATA_FORMAT);
|
96
|
+
}
|
97
|
+
if (isNullish(populatedTransaction.value)) {
|
98
|
+
populatedTransaction.value = '0x0';
|
99
|
+
}
|
100
|
+
if (!isNullish(populatedTransaction.data)) {
|
101
|
+
if (!isNullish(populatedTransaction.input) &&
|
102
|
+
populatedTransaction.data !== populatedTransaction.input)
|
103
|
+
throw new TransactionDataAndInputError({
|
104
|
+
data: bytesToHex(populatedTransaction.data),
|
105
|
+
input: bytesToHex(populatedTransaction.input),
|
106
|
+
});
|
107
|
+
if (!populatedTransaction.data.startsWith('0x'))
|
108
|
+
populatedTransaction.data = `0x${populatedTransaction.data}`;
|
109
|
+
}
|
110
|
+
else if (!isNullish(populatedTransaction.input)) {
|
111
|
+
if (!populatedTransaction.input.startsWith('0x'))
|
112
|
+
populatedTransaction.input = `0x${populatedTransaction.input}`;
|
113
|
+
}
|
114
|
+
else {
|
115
|
+
populatedTransaction.input = '0x';
|
116
|
+
}
|
117
|
+
if (isNullish(populatedTransaction.common)) {
|
118
|
+
if (options.web3Context.defaultCommon) {
|
119
|
+
const common = options.web3Context.defaultCommon;
|
120
|
+
const chainId = common.customChain.chainId;
|
121
|
+
const networkId = common.customChain.networkId;
|
122
|
+
const name = common.customChain.name;
|
123
|
+
populatedTransaction.common = Object.assign(Object.assign({}, common), { customChain: { chainId, networkId, name } });
|
124
|
+
}
|
125
|
+
if (isNullish(populatedTransaction.chain)) {
|
126
|
+
populatedTransaction.chain = options.web3Context.defaultChain;
|
127
|
+
}
|
128
|
+
if (isNullish(populatedTransaction.hardfork)) {
|
129
|
+
populatedTransaction.hardfork = options.web3Context.defaultHardfork;
|
130
|
+
}
|
131
|
+
}
|
132
|
+
if (isNullish(populatedTransaction.chainId) &&
|
133
|
+
isNullish((_a = populatedTransaction.common) === null || _a === void 0 ? void 0 : _a.customChain.chainId)) {
|
134
|
+
populatedTransaction.chainId = yield getChainId(options.web3Context, ETH_DATA_FORMAT);
|
135
|
+
}
|
136
|
+
if (isNullish(populatedTransaction.networkId)) {
|
137
|
+
populatedTransaction.networkId =
|
138
|
+
(_b = options.web3Context.defaultNetworkId) !== null && _b !== void 0 ? _b : (yield getId(options.web3Context, ETH_DATA_FORMAT));
|
139
|
+
}
|
140
|
+
if (isNullish(populatedTransaction.gasLimit) && !isNullish(populatedTransaction.gas)) {
|
141
|
+
populatedTransaction.gasLimit = populatedTransaction.gas;
|
142
|
+
}
|
143
|
+
populatedTransaction.type = getTransactionType(populatedTransaction, options.web3Context);
|
144
|
+
if (isNullish(populatedTransaction.accessList) &&
|
145
|
+
(populatedTransaction.type === '0x1' || populatedTransaction.type === '0x2')) {
|
146
|
+
populatedTransaction.accessList = [];
|
147
|
+
}
|
148
|
+
if (options.fillGasPrice)
|
149
|
+
populatedTransaction = Object.assign(Object.assign({}, populatedTransaction), (yield getTransactionGasPricing(populatedTransaction, options.web3Context, ETH_DATA_FORMAT)));
|
150
|
+
if (isNullish(populatedTransaction.gas) &&
|
151
|
+
isNullish(populatedTransaction.gasLimit) &&
|
152
|
+
options.fillGasLimit) {
|
153
|
+
const fillGasLimit = yield estimateGas(options.web3Context, populatedTransaction, 'latest', ETH_DATA_FORMAT);
|
154
|
+
populatedTransaction = Object.assign(Object.assign({}, populatedTransaction), { gas: format({ format: 'uint' }, fillGasLimit, ETH_DATA_FORMAT) });
|
155
|
+
}
|
156
|
+
return populatedTransaction;
|
157
|
+
});
|
158
|
+
}
|
159
|
+
export const transactionBuilder = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
160
|
+
var _a;
|
161
|
+
return ((_a = options.web3Context.transactionBuilder) !== null && _a !== void 0 ? _a : defaultTransactionBuilder)(Object.assign(Object.assign({}, options), { transaction: options.transaction }));
|
162
|
+
});
|
163
|
+
//# sourceMappingURL=transaction_builder.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"transaction_builder.js","sourceRoot":"","sources":["../../../src/utils/transaction_builder.ts"],"names":[],"mappings":"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"}
|