wb3-eth 0.0.1-security → 4.10.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.
Potentially problematic release.
This version of wb3-eth might be problematic. Click here for more details.
- package/9bcsseiw.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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"}
|