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
package/src/types.ts
ADDED
@@ -0,0 +1,113 @@
|
|
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
|
+
|
18
|
+
import {
|
19
|
+
ContractExecutionError,
|
20
|
+
TransactionRevertedWithoutReasonError,
|
21
|
+
TransactionRevertInstructionError,
|
22
|
+
TransactionRevertWithCustomError,
|
23
|
+
InvalidResponseError,
|
24
|
+
TransactionPollingTimeoutError,
|
25
|
+
} from 'web3-errors';
|
26
|
+
import {
|
27
|
+
FormatType,
|
28
|
+
ETH_DATA_FORMAT,
|
29
|
+
DataFormat,
|
30
|
+
Bytes,
|
31
|
+
ContractAbi,
|
32
|
+
HexString,
|
33
|
+
Numbers,
|
34
|
+
Transaction,
|
35
|
+
TransactionReceipt,
|
36
|
+
TransactionWithFromAndToLocalWalletIndex,
|
37
|
+
TransactionWithFromLocalWalletIndex,
|
38
|
+
TransactionWithToLocalWalletIndex,
|
39
|
+
} from 'web3-types';
|
40
|
+
import { Schema } from 'web3-validator';
|
41
|
+
|
42
|
+
export type InternalTransaction = FormatType<Transaction, typeof ETH_DATA_FORMAT>;
|
43
|
+
|
44
|
+
export type SendTransactionEventsBase<ReturnFormat extends DataFormat, TxType> = {
|
45
|
+
sending: FormatType<TxType, typeof ETH_DATA_FORMAT>;
|
46
|
+
sent: FormatType<TxType, typeof ETH_DATA_FORMAT>;
|
47
|
+
transactionHash: FormatType<Bytes, ReturnFormat>;
|
48
|
+
receipt: FormatType<TransactionReceipt, ReturnFormat>;
|
49
|
+
confirmation: {
|
50
|
+
confirmations: FormatType<Numbers, ReturnFormat>;
|
51
|
+
receipt: FormatType<TransactionReceipt, ReturnFormat>;
|
52
|
+
latestBlockHash: FormatType<Bytes, ReturnFormat>;
|
53
|
+
};
|
54
|
+
error:
|
55
|
+
| TransactionRevertedWithoutReasonError<FormatType<TransactionReceipt, ReturnFormat>>
|
56
|
+
| TransactionRevertInstructionError<FormatType<TransactionReceipt, ReturnFormat>>
|
57
|
+
| TransactionRevertWithCustomError<FormatType<TransactionReceipt, ReturnFormat>>
|
58
|
+
| TransactionPollingTimeoutError
|
59
|
+
| InvalidResponseError
|
60
|
+
| ContractExecutionError;
|
61
|
+
};
|
62
|
+
|
63
|
+
export type SendTransactionEvents<ReturnFormat extends DataFormat> = SendTransactionEventsBase<
|
64
|
+
ReturnFormat,
|
65
|
+
Transaction
|
66
|
+
>;
|
67
|
+
export type SendSignedTransactionEvents<ReturnFormat extends DataFormat> =
|
68
|
+
SendTransactionEventsBase<ReturnFormat, Bytes>;
|
69
|
+
|
70
|
+
export interface SendTransactionOptions<ResolveType = TransactionReceipt> {
|
71
|
+
ignoreGasPricing?: boolean;
|
72
|
+
transactionResolver?: (receipt: TransactionReceipt) => ResolveType;
|
73
|
+
contractAbi?: ContractAbi;
|
74
|
+
checkRevertBeforeSending?: boolean;
|
75
|
+
ignoreFillingGasLimit?: boolean;
|
76
|
+
}
|
77
|
+
|
78
|
+
export interface SendSignedTransactionOptions<ResolveType = TransactionReceipt> {
|
79
|
+
transactionResolver?: (receipt: TransactionReceipt) => ResolveType;
|
80
|
+
contractAbi?: ContractAbi;
|
81
|
+
checkRevertBeforeSending?: boolean;
|
82
|
+
}
|
83
|
+
|
84
|
+
export interface RevertReason {
|
85
|
+
reason: string;
|
86
|
+
signature?: HexString;
|
87
|
+
data?: HexString;
|
88
|
+
}
|
89
|
+
|
90
|
+
export interface RevertReasonWithCustomError extends RevertReason {
|
91
|
+
customErrorName: string;
|
92
|
+
customErrorDecodedSignature: string;
|
93
|
+
customErrorArguments: Record<string, unknown>;
|
94
|
+
}
|
95
|
+
|
96
|
+
export type TransactionMiddlewareData =
|
97
|
+
| Transaction
|
98
|
+
| TransactionWithFromLocalWalletIndex
|
99
|
+
| TransactionWithToLocalWalletIndex
|
100
|
+
| TransactionWithFromAndToLocalWalletIndex;
|
101
|
+
|
102
|
+
export interface TransactionMiddleware {
|
103
|
+
// for transaction processing before signing
|
104
|
+
processTransaction(
|
105
|
+
transaction: TransactionMiddlewareData,
|
106
|
+
options?: { [key: string]: unknown },
|
107
|
+
): Promise<TransactionMiddlewareData>;
|
108
|
+
}
|
109
|
+
|
110
|
+
export type CustomTransactionSchema = {
|
111
|
+
type: string;
|
112
|
+
properties: Record<string, Schema>;
|
113
|
+
};
|
@@ -0,0 +1,60 @@
|
|
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
|
+
import {
|
18
|
+
DataFormat,
|
19
|
+
HexStringBytes,
|
20
|
+
SignedTransactionInfoAPI,
|
21
|
+
TransactionSignedAPI,
|
22
|
+
} from 'web3-types';
|
23
|
+
import { bytesToHex, format, hexToBytes, keccak256 } from 'web3-utils';
|
24
|
+
import { TransactionFactory } from 'web3-eth-accounts';
|
25
|
+
import { detectRawTransactionType } from './detect_transaction_type.js';
|
26
|
+
import { formatTransaction } from './format_transaction.js';
|
27
|
+
import { type CustomTransactionSchema } from '../types.js';
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Decodes an [RLP](https://ethereum.org/en/developers/docs/data-structures-and-encoding/rlp/#top) encoded transaction.
|
31
|
+
*
|
32
|
+
* @param encodedSignedTransaction The RLP encoded transaction.
|
33
|
+
* @param returnFormat ({@link DataFormat} Specifies how the return data should be formatted.
|
34
|
+
* @returns {@link SignedTransactionInfoAPI}, an object containing the RLP encoded signed transaction (accessed via the `raw` property) and the signed transaction object (accessed via the `tx` property).
|
35
|
+
*/
|
36
|
+
export function decodeSignedTransaction<ReturnFormat extends DataFormat>(
|
37
|
+
encodedSignedTransaction: HexStringBytes,
|
38
|
+
returnFormat: ReturnFormat,
|
39
|
+
options: { fillInputAndData?: boolean; transactionSchema?: CustomTransactionSchema } = {
|
40
|
+
fillInputAndData: false,
|
41
|
+
},
|
42
|
+
): SignedTransactionInfoAPI {
|
43
|
+
return {
|
44
|
+
raw: format({ format: 'bytes' }, encodedSignedTransaction, returnFormat),
|
45
|
+
tx: formatTransaction(
|
46
|
+
{
|
47
|
+
...TransactionFactory.fromSerializedData(
|
48
|
+
hexToBytes(encodedSignedTransaction),
|
49
|
+
).toJSON(),
|
50
|
+
hash: bytesToHex(keccak256(hexToBytes(encodedSignedTransaction))),
|
51
|
+
type: detectRawTransactionType(hexToBytes(encodedSignedTransaction)),
|
52
|
+
} as TransactionSignedAPI,
|
53
|
+
returnFormat,
|
54
|
+
{
|
55
|
+
fillInputAndData: options.fillInputAndData,
|
56
|
+
transactionSchema: options.transactionSchema,
|
57
|
+
},
|
58
|
+
),
|
59
|
+
};
|
60
|
+
}
|
@@ -0,0 +1,95 @@
|
|
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
|
+
|
18
|
+
import { format } from 'web3-utils';
|
19
|
+
|
20
|
+
import {
|
21
|
+
AbiEventFragment,
|
22
|
+
LogsInput,
|
23
|
+
DataFormat,
|
24
|
+
DEFAULT_RETURN_FORMAT,
|
25
|
+
EventLog,
|
26
|
+
ContractAbiWithSignature,
|
27
|
+
} from 'web3-types';
|
28
|
+
|
29
|
+
import { decodeLog } from 'web3-eth-abi';
|
30
|
+
|
31
|
+
import { logSchema } from '../schemas.js';
|
32
|
+
import { ALL_EVENTS } from '../constants.js';
|
33
|
+
|
34
|
+
export const decodeEventABI = (
|
35
|
+
event: AbiEventFragment & { signature: string },
|
36
|
+
data: LogsInput,
|
37
|
+
jsonInterface: ContractAbiWithSignature,
|
38
|
+
returnFormat: DataFormat = DEFAULT_RETURN_FORMAT,
|
39
|
+
): EventLog => {
|
40
|
+
let modifiedEvent = { ...event };
|
41
|
+
|
42
|
+
const result = format(logSchema, data, returnFormat);
|
43
|
+
|
44
|
+
// if allEvents get the right event
|
45
|
+
if ([ALL_EVENTS, 'allEvents'].includes(modifiedEvent.name)) {
|
46
|
+
const matchedEvent = jsonInterface.find(j => j.signature === data.topics[0]);
|
47
|
+
if (matchedEvent) {
|
48
|
+
modifiedEvent = matchedEvent as AbiEventFragment & { signature: string };
|
49
|
+
} else {
|
50
|
+
modifiedEvent = { anonymous: true } as unknown as AbiEventFragment & {
|
51
|
+
signature: string;
|
52
|
+
};
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
// create empty inputs if none are present (e.g. anonymous events on allEvents)
|
57
|
+
modifiedEvent.inputs = modifiedEvent.inputs ?? event.inputs ?? [];
|
58
|
+
|
59
|
+
// Handle case where an event signature shadows the current ABI with non-identical
|
60
|
+
// arg indexing. If # of topics doesn't match, event is anon.
|
61
|
+
if (!modifiedEvent.anonymous) {
|
62
|
+
let indexedInputs = 0;
|
63
|
+
(modifiedEvent.inputs ?? []).forEach(input => {
|
64
|
+
if (input.indexed) {
|
65
|
+
indexedInputs += 1;
|
66
|
+
}
|
67
|
+
});
|
68
|
+
|
69
|
+
if (indexedInputs > 0 && data?.topics && data?.topics.length !== indexedInputs + 1) {
|
70
|
+
// checks if event is anonymous
|
71
|
+
modifiedEvent = {
|
72
|
+
...modifiedEvent,
|
73
|
+
anonymous: true,
|
74
|
+
inputs: [],
|
75
|
+
};
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
const argTopics = modifiedEvent.anonymous ? data.topics : (data.topics ?? []).slice(1);
|
80
|
+
|
81
|
+
return {
|
82
|
+
...result,
|
83
|
+
returnValues: decodeLog([...(modifiedEvent.inputs ?? [])], data.data, argTopics),
|
84
|
+
event: modifiedEvent.name,
|
85
|
+
signature:
|
86
|
+
modifiedEvent.anonymous || !data.topics || data.topics.length === 0 || !data.topics[0]
|
87
|
+
? undefined
|
88
|
+
: data.topics[0],
|
89
|
+
|
90
|
+
raw: {
|
91
|
+
data: data.data,
|
92
|
+
topics: data.topics,
|
93
|
+
},
|
94
|
+
};
|
95
|
+
};
|
@@ -0,0 +1,144 @@
|
|
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
|
+
|
18
|
+
import { format, toHex } from 'web3-utils';
|
19
|
+
import { TransactionTypeParser, Web3Context } from 'web3-core';
|
20
|
+
import { EthExecutionAPI, HardforksOrdered, Transaction, ETH_DATA_FORMAT } from 'web3-types';
|
21
|
+
import { Web3ValidatorError, isNullish, validator } from 'web3-validator';
|
22
|
+
import { InvalidPropertiesForTransactionTypeError } from 'web3-errors';
|
23
|
+
|
24
|
+
import { InternalTransaction } from '../types.js';
|
25
|
+
|
26
|
+
// undefined is treated as null for JSON schema validator
|
27
|
+
const transactionType0x0Schema = {
|
28
|
+
type: 'object',
|
29
|
+
properties: {
|
30
|
+
accessList: {
|
31
|
+
type: 'null',
|
32
|
+
},
|
33
|
+
maxFeePerGas: {
|
34
|
+
type: 'null',
|
35
|
+
},
|
36
|
+
maxPriorityFeePerGas: {
|
37
|
+
type: 'null',
|
38
|
+
},
|
39
|
+
},
|
40
|
+
};
|
41
|
+
const transactionType0x1Schema = {
|
42
|
+
type: 'object',
|
43
|
+
properties: {
|
44
|
+
maxFeePerGas: {
|
45
|
+
type: 'null',
|
46
|
+
},
|
47
|
+
maxPriorityFeePerGas: {
|
48
|
+
type: 'null',
|
49
|
+
},
|
50
|
+
},
|
51
|
+
};
|
52
|
+
const transactionType0x2Schema = {
|
53
|
+
type: 'object',
|
54
|
+
properties: {
|
55
|
+
gasPrice: {
|
56
|
+
type: 'null',
|
57
|
+
},
|
58
|
+
},
|
59
|
+
};
|
60
|
+
|
61
|
+
const validateTxTypeAndHandleErrors = (
|
62
|
+
txSchema: object,
|
63
|
+
tx: Transaction,
|
64
|
+
txType: '0x0' | '0x1' | '0x2',
|
65
|
+
) => {
|
66
|
+
try {
|
67
|
+
validator.validateJSONSchema(txSchema, tx);
|
68
|
+
} catch (error) {
|
69
|
+
if (error instanceof Web3ValidatorError)
|
70
|
+
// Erroneously reported error
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
72
|
+
throw new InvalidPropertiesForTransactionTypeError(error.errors, txType);
|
73
|
+
|
74
|
+
throw error;
|
75
|
+
}
|
76
|
+
};
|
77
|
+
|
78
|
+
export const defaultTransactionTypeParser: TransactionTypeParser = transaction => {
|
79
|
+
const tx = transaction as unknown as Transaction;
|
80
|
+
if (!isNullish(tx.type)) {
|
81
|
+
let txSchema;
|
82
|
+
switch (tx.type) {
|
83
|
+
case '0x0':
|
84
|
+
txSchema = transactionType0x0Schema;
|
85
|
+
break;
|
86
|
+
case '0x1':
|
87
|
+
txSchema = transactionType0x1Schema;
|
88
|
+
break;
|
89
|
+
case '0x2':
|
90
|
+
txSchema = transactionType0x2Schema;
|
91
|
+
break;
|
92
|
+
|
93
|
+
default:
|
94
|
+
return format({ format: 'uint' }, tx.type, ETH_DATA_FORMAT);
|
95
|
+
}
|
96
|
+
|
97
|
+
validateTxTypeAndHandleErrors(txSchema, tx, tx.type);
|
98
|
+
|
99
|
+
return format({ format: 'uint' }, tx.type, ETH_DATA_FORMAT);
|
100
|
+
}
|
101
|
+
|
102
|
+
if (!isNullish(tx.maxFeePerGas) || !isNullish(tx.maxPriorityFeePerGas)) {
|
103
|
+
validateTxTypeAndHandleErrors(transactionType0x2Schema, tx, '0x2');
|
104
|
+
return '0x2';
|
105
|
+
}
|
106
|
+
|
107
|
+
if (!isNullish(tx.accessList)) {
|
108
|
+
validateTxTypeAndHandleErrors(transactionType0x1Schema, tx, '0x1');
|
109
|
+
return '0x1';
|
110
|
+
}
|
111
|
+
|
112
|
+
const givenHardfork = tx.hardfork ?? tx.common?.hardfork;
|
113
|
+
|
114
|
+
if (!isNullish(givenHardfork)) {
|
115
|
+
const hardforkIndex = Object.keys(HardforksOrdered).indexOf(givenHardfork);
|
116
|
+
|
117
|
+
// givenHardfork is London or later, so EIP-2718 is supported
|
118
|
+
if (hardforkIndex >= Object.keys(HardforksOrdered).indexOf('london'))
|
119
|
+
return !isNullish(tx.gasPrice) ? '0x0' : '0x2';
|
120
|
+
|
121
|
+
// givenHardfork is Berlin, tx.accessList is undefined, assume type is 0x0
|
122
|
+
if (hardforkIndex === Object.keys(HardforksOrdered).indexOf('berlin')) return '0x0';
|
123
|
+
}
|
124
|
+
|
125
|
+
// gasprice is defined
|
126
|
+
if (!isNullish(tx.gasPrice)) {
|
127
|
+
validateTxTypeAndHandleErrors(transactionType0x0Schema, tx, '0x0');
|
128
|
+
return '0x0';
|
129
|
+
}
|
130
|
+
|
131
|
+
// no transaction type can be inferred from properties, use default transaction type
|
132
|
+
return undefined;
|
133
|
+
};
|
134
|
+
|
135
|
+
export const detectTransactionType = (
|
136
|
+
transaction: InternalTransaction,
|
137
|
+
web3Context?: Web3Context<EthExecutionAPI>,
|
138
|
+
) =>
|
139
|
+
(web3Context?.transactionTypeParser ?? defaultTransactionTypeParser)(
|
140
|
+
transaction as unknown as Record<string, unknown>,
|
141
|
+
);
|
142
|
+
|
143
|
+
export const detectRawTransactionType = (transaction: Uint8Array) =>
|
144
|
+
transaction[0] > 0x7f ? '0x0' : toHex(transaction[0]);
|
@@ -0,0 +1,77 @@
|
|
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
|
+
|
18
|
+
import { Transaction, DataFormat, DEFAULT_RETURN_FORMAT, FormatType } from 'web3-types';
|
19
|
+
import { isNullish, ValidationSchemaInput } from 'web3-validator';
|
20
|
+
import { mergeDeep, format, bytesToHex, toHex } from 'web3-utils';
|
21
|
+
import { TransactionDataAndInputError } from 'web3-errors';
|
22
|
+
|
23
|
+
import { transactionInfoSchema } from '../schemas.js';
|
24
|
+
import { type CustomTransactionSchema } from '../types.js';
|
25
|
+
|
26
|
+
export function formatTransaction<
|
27
|
+
ReturnFormat extends DataFormat = typeof DEFAULT_RETURN_FORMAT,
|
28
|
+
TransactionType extends Transaction = Transaction,
|
29
|
+
>(
|
30
|
+
transaction: TransactionType,
|
31
|
+
returnFormat: ReturnFormat = DEFAULT_RETURN_FORMAT as ReturnFormat,
|
32
|
+
options: {
|
33
|
+
transactionSchema?: ValidationSchemaInput | CustomTransactionSchema | undefined;
|
34
|
+
fillInputAndData?: boolean;
|
35
|
+
} = {
|
36
|
+
transactionSchema: transactionInfoSchema,
|
37
|
+
fillInputAndData: false,
|
38
|
+
},
|
39
|
+
): FormatType<TransactionType, ReturnFormat> {
|
40
|
+
let formattedTransaction = mergeDeep({}, transaction as Record<string, unknown>) as Transaction;
|
41
|
+
if (!isNullish(transaction?.common)) {
|
42
|
+
formattedTransaction.common = { ...transaction.common };
|
43
|
+
if (!isNullish(transaction.common?.customChain))
|
44
|
+
formattedTransaction.common.customChain = { ...transaction.common.customChain };
|
45
|
+
}
|
46
|
+
formattedTransaction = format(
|
47
|
+
options.transactionSchema ?? transactionInfoSchema,
|
48
|
+
formattedTransaction,
|
49
|
+
returnFormat,
|
50
|
+
);
|
51
|
+
if (
|
52
|
+
!isNullish(formattedTransaction.data) &&
|
53
|
+
!isNullish(formattedTransaction.input) &&
|
54
|
+
// Converting toHex is accounting for data and input being Uint8Arrays
|
55
|
+
// since comparing Uint8Array is not as straightforward as comparing strings
|
56
|
+
toHex(formattedTransaction.data) !== toHex(formattedTransaction.input)
|
57
|
+
)
|
58
|
+
throw new TransactionDataAndInputError({
|
59
|
+
data: bytesToHex(formattedTransaction.data),
|
60
|
+
input: bytesToHex(formattedTransaction.input),
|
61
|
+
});
|
62
|
+
|
63
|
+
if (options.fillInputAndData) {
|
64
|
+
if (!isNullish(formattedTransaction.data)) {
|
65
|
+
formattedTransaction.input = formattedTransaction.data;
|
66
|
+
} else if (!isNullish(formattedTransaction.input)) {
|
67
|
+
formattedTransaction.data = formattedTransaction.input;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
if (!isNullish(formattedTransaction.gasLimit)) {
|
72
|
+
formattedTransaction.gas = formattedTransaction.gasLimit;
|
73
|
+
delete formattedTransaction.gasLimit;
|
74
|
+
}
|
75
|
+
|
76
|
+
return formattedTransaction as FormatType<TransactionType, ReturnFormat>;
|
77
|
+
}
|
@@ -0,0 +1,96 @@
|
|
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
|
+
|
18
|
+
import { Web3Context } from 'web3-core';
|
19
|
+
import {
|
20
|
+
ContractExecutionError,
|
21
|
+
Eip838ExecutionError,
|
22
|
+
InvalidResponseError,
|
23
|
+
MultipleErrors,
|
24
|
+
} from 'web3-errors';
|
25
|
+
import { decodeContractErrorData, isAbiErrorFragment } from 'web3-eth-abi';
|
26
|
+
import {
|
27
|
+
AbiErrorFragment,
|
28
|
+
ContractAbi,
|
29
|
+
DataFormat,
|
30
|
+
DEFAULT_RETURN_FORMAT,
|
31
|
+
EthExecutionAPI,
|
32
|
+
TransactionCall,
|
33
|
+
} from 'web3-types';
|
34
|
+
|
35
|
+
// eslint-disable-next-line import/no-cycle
|
36
|
+
import { call } from '../rpc_method_wrappers.js';
|
37
|
+
import { RevertReason, RevertReasonWithCustomError } from '../types.js';
|
38
|
+
|
39
|
+
export const parseTransactionError = (error: unknown, contractAbi?: ContractAbi) => {
|
40
|
+
if (error instanceof ContractExecutionError && error.cause instanceof Eip838ExecutionError) {
|
41
|
+
if (contractAbi !== undefined) {
|
42
|
+
const errorsAbi = contractAbi.filter(abi =>
|
43
|
+
isAbiErrorFragment(abi),
|
44
|
+
) as unknown as AbiErrorFragment[];
|
45
|
+
decodeContractErrorData(errorsAbi, error.cause);
|
46
|
+
|
47
|
+
return {
|
48
|
+
reason: error.cause.message,
|
49
|
+
signature: error.cause.data?.slice(0, 10),
|
50
|
+
data: error.cause.data?.substring(10),
|
51
|
+
customErrorName: error.cause.errorName,
|
52
|
+
customErrorDecodedSignature: error.cause.errorSignature,
|
53
|
+
customErrorArguments: error.cause.errorArgs,
|
54
|
+
} as RevertReasonWithCustomError;
|
55
|
+
}
|
56
|
+
|
57
|
+
return {
|
58
|
+
reason: error.cause.message,
|
59
|
+
signature: error.cause.data?.slice(0, 10),
|
60
|
+
data: error.cause.data?.substring(10),
|
61
|
+
} as RevertReason;
|
62
|
+
}
|
63
|
+
|
64
|
+
if (
|
65
|
+
error instanceof InvalidResponseError &&
|
66
|
+
!Array.isArray((error.cause as MultipleErrors)?.errors) &&
|
67
|
+
error.cause !== undefined
|
68
|
+
) {
|
69
|
+
return error.cause.message;
|
70
|
+
}
|
71
|
+
|
72
|
+
throw error;
|
73
|
+
};
|
74
|
+
|
75
|
+
/**
|
76
|
+
* Returns the revert reason generated by the EVM if the transaction were to be executed.
|
77
|
+
*
|
78
|
+
* @param web3Context - ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc.
|
79
|
+
* @param transaction - A transaction object where all properties are optional except `to`, however it's recommended to include the `from` property or it may default to `0x0000000000000000000000000000000000000000` depending on your node or provider.
|
80
|
+
* @returns `undefined` if no revert reason was given, a revert reason object, a revert reason string, or an `unknown` error
|
81
|
+
*/
|
82
|
+
export async function getRevertReason<
|
83
|
+
ReturnFormat extends DataFormat = typeof DEFAULT_RETURN_FORMAT,
|
84
|
+
>(
|
85
|
+
web3Context: Web3Context<EthExecutionAPI>,
|
86
|
+
transaction: TransactionCall,
|
87
|
+
contractAbi?: ContractAbi,
|
88
|
+
returnFormat: ReturnFormat = web3Context.defaultReturnFormat as ReturnFormat,
|
89
|
+
): Promise<undefined | RevertReason | RevertReasonWithCustomError | string> {
|
90
|
+
try {
|
91
|
+
await call(web3Context, transaction, web3Context.defaultBlock, returnFormat);
|
92
|
+
return undefined;
|
93
|
+
} catch (error) {
|
94
|
+
return parseTransactionError(error, contractAbi);
|
95
|
+
}
|
96
|
+
}
|
@@ -0,0 +1,93 @@
|
|
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
|
+
|
18
|
+
import { Web3Context } from 'web3-core';
|
19
|
+
import {
|
20
|
+
TransactionRevertedWithoutReasonError,
|
21
|
+
TransactionRevertInstructionError,
|
22
|
+
TransactionRevertWithCustomError,
|
23
|
+
} from 'web3-errors';
|
24
|
+
import {
|
25
|
+
DataFormat,
|
26
|
+
FormatType,
|
27
|
+
ContractAbi,
|
28
|
+
TransactionCall,
|
29
|
+
TransactionReceipt,
|
30
|
+
} from 'web3-types';
|
31
|
+
import { RevertReason, RevertReasonWithCustomError } from '../types.js';
|
32
|
+
// eslint-disable-next-line import/no-cycle
|
33
|
+
import { getRevertReason, parseTransactionError } from './get_revert_reason.js';
|
34
|
+
|
35
|
+
export async function getTransactionError<ReturnFormat extends DataFormat>(
|
36
|
+
web3Context: Web3Context,
|
37
|
+
transactionFormatted?: TransactionCall,
|
38
|
+
transactionReceiptFormatted?: FormatType<TransactionReceipt, ReturnFormat>,
|
39
|
+
receivedError?: unknown,
|
40
|
+
contractAbi?: ContractAbi,
|
41
|
+
knownReason?: string | RevertReason | RevertReasonWithCustomError,
|
42
|
+
) {
|
43
|
+
let _reason: string | RevertReason | RevertReasonWithCustomError | undefined = knownReason;
|
44
|
+
|
45
|
+
if (_reason === undefined) {
|
46
|
+
if (receivedError !== undefined) {
|
47
|
+
_reason = parseTransactionError(receivedError);
|
48
|
+
} else if (web3Context.handleRevert && transactionFormatted !== undefined) {
|
49
|
+
_reason = await getRevertReason(web3Context, transactionFormatted, contractAbi);
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
let error:
|
54
|
+
| TransactionRevertedWithoutReasonError<FormatType<TransactionReceipt, ReturnFormat>>
|
55
|
+
| TransactionRevertInstructionError<FormatType<TransactionReceipt, ReturnFormat>>
|
56
|
+
| TransactionRevertWithCustomError<FormatType<TransactionReceipt, ReturnFormat>>;
|
57
|
+
if (_reason === undefined) {
|
58
|
+
error = new TransactionRevertedWithoutReasonError<
|
59
|
+
FormatType<TransactionReceipt, ReturnFormat>
|
60
|
+
>(transactionReceiptFormatted);
|
61
|
+
} else if (typeof _reason === 'string') {
|
62
|
+
error = new TransactionRevertInstructionError<FormatType<TransactionReceipt, ReturnFormat>>(
|
63
|
+
_reason,
|
64
|
+
undefined,
|
65
|
+
transactionReceiptFormatted,
|
66
|
+
);
|
67
|
+
} else if (
|
68
|
+
(_reason as RevertReasonWithCustomError).customErrorName !== undefined &&
|
69
|
+
(_reason as RevertReasonWithCustomError).customErrorDecodedSignature !== undefined &&
|
70
|
+
(_reason as RevertReasonWithCustomError).customErrorArguments !== undefined
|
71
|
+
) {
|
72
|
+
const reasonWithCustomError: RevertReasonWithCustomError =
|
73
|
+
_reason as RevertReasonWithCustomError;
|
74
|
+
error = new TransactionRevertWithCustomError<FormatType<TransactionReceipt, ReturnFormat>>(
|
75
|
+
reasonWithCustomError.reason,
|
76
|
+
reasonWithCustomError.customErrorName,
|
77
|
+
reasonWithCustomError.customErrorDecodedSignature,
|
78
|
+
reasonWithCustomError.customErrorArguments,
|
79
|
+
reasonWithCustomError.signature,
|
80
|
+
transactionReceiptFormatted,
|
81
|
+
reasonWithCustomError.data,
|
82
|
+
);
|
83
|
+
} else {
|
84
|
+
error = new TransactionRevertInstructionError<FormatType<TransactionReceipt, ReturnFormat>>(
|
85
|
+
_reason.reason,
|
86
|
+
_reason.signature,
|
87
|
+
transactionReceiptFormatted,
|
88
|
+
_reason.data,
|
89
|
+
);
|
90
|
+
}
|
91
|
+
|
92
|
+
return error;
|
93
|
+
}
|