进阶 docs.web3js.org 2026-10-19 02:32:30 · 18 阅读

第13章 Web3.js 配置指南

Web3.js 配置指南 配置参数 web3.js 提供了一系列配置参数,可调整不同函数的行为。以下是所有可用的配置选项及其说明: handleRevert defaultAccount defaultBlock transactionBlockTimeout transactionConfirmationBlocks transactionPollingInterval transactionPollingTimeout transactionReceiptPollingInterval transactionSendTimeout [已弃用] transactionConfirmationPollingInterval blockHeaderTimeout maxListenersWarningThreshold contractDataInputFill defaultNetworkId defaultChain defaultHardfork defaultCommon defaultTransactionType defaultMaxPriorityFeePerGas customTransactionSchema defaultReturnFormat ignoreGasPricing 全局级配置 在实例化 Web3 对象时,可设置上述任意配置参数,使其对所有包生效。 import { Web3 } from 'web3'; const web3 = new Web3({ provider: 'https://mainnet.infura.io/v3/YOURID', config: { defaultTransactionType: '0x0', }, }); // 此时默认交易类型为 0x0,使用 eth 的 sendTransaction 函数将发送 0x0 类型交易 web3.eth .sendTransaction({ from: '0x18532dF2Ab835d4E9D07a8b9B759bf5F8f890f49', to: '0xB2f70d8965e754cc07D343a9b5332876D3070155', value: 100, gasLimit: 21000, }) .then(res => console.log(res)); 高级用户:也可通过 Web3Context 对象设置全局配置。 import { Web3, Web3Context } from 'web3'; const context = new Web3Context('http://127.0.0.1:7545'); context.setConfig({ defaultTransactionType: '0x0' }); const web3 = new Web3(context); // 此时交易将默认使用 0x0 类型 web3.eth .sendTransaction({ from: '0x18532dF2Ab835d4E9D07a8b9B759bf5F8f890f49', to: '0x018e221145dE7cefAD09BD53F41c11A918Bf1Cb7', value: 100, gasLimit: 21000, }) .then(res => console.log(res)); 包级配置 在 Web3 实例内的单个包下设置配置 部分影响特定包的配置选项可通过 setConfig(...) 函数进行修改。 import { Web3 } from 'web3'; const web3 = new Web3('https://mainnet.infura.io/v3/YOURID'); web3.eth.setConfig({ defaultTransactionType: '0x0' }); web3.eth .sendTransaction({ from: '0x18532dF2Ab835d4E9D07a8b9B759bf5F8f890f49', to: '0xB2f70d8965e754cc07D343a9b5332876D3070155',
value: 100,
gasLimit: 21000,
})
.then(res => console.log(res));
在单独导入的包中设置配置 如果不是导入整个 web3.js,而是单独导入某个包,可以通过在构造函数中传入配置参数,或使用 setConfig(...) 函数来设置配置。 例如,如果仅通过以下命令安装了 web3Eth 包: npm i web3-eth
可以通过在构造函数中传入配置来设置选项: 在构造函数中设置 setConfigimport { Web3Eth } from 'web3-eth';

const web3EthObj = new Web3Eth({
provider: 'http://127.0.0.1:7545',
config: {
defaultTransactionType: 0x0,
},
});

web3EthObj
.sendTransaction({
from: '0x18532dF2Ab835d4E9D07a8b9B759bf5F8f890f49',
to: '0x018e221145dE7cefAD09BD53F41c11A918Bf1Cb7',
value: 100,
gasLimit: 21000,
})
.then(res => console.log(res));
另一种为单独导入的包设置配置的方法是使用 setConfig(...) 函数。 使用 setConfig 函数import { Web3Eth } from 'web3-eth';

const web3EthObj = new Web3Eth('http://127.0.0.1:7545');

web3EthObj.setConfig({ defaultTransactionType: 0x0 });

web3EthObj
.sendTransaction({
from: '0x18532dF2Ab835d4E9D07a8b9B759bf5F8f890f49',
to: '0x018e221145dE7cefAD09BD53F41c11A918Bf1Cb7',
value: 100,
gasLimit: 21000,
})
.then(res => console.log(res));
获取当前配置 要获取当前配置参数列表,可以使用 getContextObject().config,例如: 在 Web3 对象中使用 getContextObject()import { Web3 } from 'web3';

const web3 = new Web3('http://127.0.0.1:7545');

console.log(web3.getContextObject().config);
/* ↳
handleRevert: false,
defaultAccount: undefined,
defaultBlock: 'latest',
transactionBlockTimeout: 50,
transactionConfirmationBlocks: 24,
transactionPollingInterval: 1000,
transactionPollingTimeout: 750000,
transactionReceiptPollingInterval: undefined,
transactionSendTimeout: 750000,
transactionConfirmationPollingInterval: undefined,
blockHeaderTimeout: 10,
maxListenersWarningThreshold: 100,
contractDataInputFill: 'input',
defaultNetworkId: undefined,
defaultChain: 'mainnet',
defaultHardfork: 'london',
defaultCommon: undefined,
defaultTransactionType: '0x2',
defaultMaxPriorityFeePerGas: '0x9502f900',
...
*/
对于单独导入的包,也可以用同样的方法获取当前配置参数。 导入包中使用 getContextObject() ```js import { Web3Eth } from 'web3'; const web3 = new Web3Eth('http://127.0.0.1:7545'); console.log(web3.getContextObject().config); /* ↳ handleRevert: false, defaultAccount: undefined, defaultBlock: 'latest', transactionBlockTimeout: 50, transactionConfirmationBlocks: 24, transactionPollingInterval: 1000, transactionPollingTimeout: 750000, ... */ ``` ## 配置参数说明 ### handleRevert 当 handleRevert 设置为 true 时,以下方法会返回具体的错误类型和错误信息: - web3.eth.sendTransaction(); - myContract.methods.myMethod().send(); 错误类型为以下几种之一: - InvalidResponseError - ContractExecutionError - TransactionRevertWithCustomError - TransactionRevertedWithoutReasonError - TransactionRevertInstructionError - TransactionPollingTimeoutError 例如,错误信息可能是 TransactionRevertInstructionError('Returned error: invalid argument 0: json: cannot unmarshal invalid hex string into Go struct field TransactionArgs.data of type hexutil.Bytes')。目前 handleRevert 选项只支持 sendTransaction,暂不支持 sendSignedTransaction。 handleRevert 的默认值是 false。 ### defaultAccount 在以下方法中,如果没有显式指定 from 属性,就会使用 defaultAccount 选项作为默认的 from 值: - web3.eth.sendTransaction(); - web3.eth.call(); - myContract.methods.myMethod().call(); - myContract.methods.myMethod().send(); defaultAccount 的默认值是 undefined。 ### defaultBlock 以下方法接受一个可选的 blockNumber 参数,如果未提供该参数,就会使用 defaultBlock 选项: - web3.eth.getBalance(); - web3.eth.getCode(); - web3.eth.getTransactionCount(); - web3.eth.getStorageAt(); - web3.eth.call(); - myContract.methods.myMethod().call(); 如果调用时显式传入了 blockNumber 参数,则会覆盖这个选项。 defaultBlock 的默认值是 "latest"。 ### defaultBlock 的所有可选值 ```js web3.defaultBlock = 20167235; // 区块号 web3.defaultBlock = 'earliest'; // 创世区块 web3.defaultBlock = 'latest'; // 最新区块(区块链当前头部) web3.defaultBlock = 'pending'; // 待挖出的区块(包含待处理交易) ``` web3.defaultBlock = 'finalized'; // (针对 POS 网络)最终确认区块是被超过 2/3 验证者接受为规范链的区块
web3.defaultBlock = 'safe'; // (针对 POS 网络)安全头区块指在正常网络条件下,预期会被包含在规范链中的区块。在正常情况下,安全头与链的实际末端是等效的(安全头仅落后几秒)。与工作量证明网络的最新区块相比,安全头被重组的可能性更低。
transactionBlockTimeout 此选项定义等待首次确认的新区块数量,若超时,Promise 事件将以超时错误拒绝。 transactionBlockTimeout 的默认值为 50。 transactionConfirmationBlocks 此参数定义被视为已确认交易所需的区块数量。不同链的安全考虑和确认区块数量要求各不相同。 transactionConfirmationBlocks 的默认值为 24。 transactionPollingInterval 此选项定义 Web3 获取交易收据的调用间隔(以秒为单位),该收据用于确认网络已挖掘该交易。修改此值可以缩短确认等待时间或减少网络请求次数。设置 transactionPollingInterval 会同时将 transactionReceiptPollingInterval 和 transactionConfirmationPollingInterval 设置为相同值。 transactionPollingInterval 的默认值为 1000 毫秒。 import { Web3 } from 'web3';

const web3 = new Web3('http://127.0.0.1:7545');

web3.transactionPollingInterval = 1000; // 1000 毫秒 = 1 秒

console.log(web3.getContextObject().config);
/* ↳
...
transactionPollingInterval: 1000,
transactionPollingTimeout: 750000,
transactionReceiptPollingInterval: 1000,
transactionSendTimeout: 750000,
transactionConfirmationPollingInterval: 1000,
...
*/
transactionPollingTimeout 此选项定义了 Web3 等待网络确认交易已打包的收据时,需等待的秒数。该值可基于网络上的平均交易确认时间来设定。注意:若超出 transactionPollingTimeout,交易仍可能处于待处理状态。 transactionPollingTimeout 的默认值为 750 秒(12.5 分钟)。 transactionReceiptPollingInterval 此选项定义了 Web3 获取确认交易已打包的收据时,两次调用之间的间隔秒数。相较于 transactionPollingInterval,它的优先级更高。当同时设置时,系统会优先读取此值。 transactionReceiptPollingInterval 的默认值为 undefined。 transactionSendTimeout transactionSendTimeout 选项用于指定等待网络返回已发送交易结果的最长时间。注意:若 RPC 调用超时,交易可能仍为待处理状态,甚至已被网络打包。在这种情况下,建议检查待处理交易。 transactionSendTimeout 的默认值为 750 秒(12.5 分钟)。 transactionConfirmationPollingInterval transactionConfirmationPollingInterval 选项已弃用。请改用 transactionReceiptPollingInterval 或 transactionPollingInterval。 blockHeaderTimeout 发送交易后,Web3 会监听新块的产生,并根据其中包含的交易结果执行后续操作。此选项定义了 Web3 等待新块出现的秒数,若超过此时限,将回退到轮询方式获取交易收据。 blockHeaderTimeout 的默认值为 10 秒。 maxListenersWarningThreshold maxListenersWarningThreshold 用于设置 EventEmitter 的 maxListeners 属性。 maxListenersWarningThreshold 的默认值为 100。 contractDataInputFill contractDataInputFill 选项允许用户指定是否将 data 或 input 属性(或两者同时)设置为方法签名和编码参数的哈希值。这将影响合约的 send、call 和 estimateGas 方法。 contractDataInputFill 的默认值为 data。 contractDataInputFill 所有可用选项: 'data';
'input';
'both';
defaultNetworkId​ 每个网络都有自己的网络 ID。defaultNetworkId 选项允许用户设置默认的网络 ID。如果未设置该选项,Web3 会通过 RPC 请求获取网络 ID。 defaultNetworkId 的默认值是 undefined。 defaultChain​ defaultChain 选项用于设置 Common 的 baseChain 属性。如果同时设置了 defaultCommon.baseChain,两者的值必须一致。 defaultChain 的默认值是 mainnet。 defaultChain 的所有可选值: 'goerli';
'kovan';
'mainnet';
'rinkeby';
'ropsten';
'sepolia';
defaultHardfork​ defaultHardfork 选项用于设置 Common 的 hardfork 属性。如果同时设置了 defaultCommon.hardfork,两者的值必须一致。 defaultHardfork 的默认值是 london。 defaultHardFork 的所有可选值: 'chainstart';
'frontier';
'homestead';
'dao';
'tangerineWhistle';
'spuriousDragon';
'byzantium';
'constantinople';
'petersburg';
'istanbul';
'muirGlacier';
'berlin';
'london';
'altair';
'arrowGlacier';
'grayGlacier';
'bellatrix';
'merge';
'capella';
'sharding';
defaultCommon​ defaultCommon 选项用于为智能合约交易设置默认的 defaultCommon 值。如果设置了 defaultHardfork 和 defaultChain 选项,它必须与它们保持一致。 defaultCommon 的默认值是 undefined。 import { Web3, Hardfork } from 'web3';

const web3 = new Web3('http://127.0.0.1:7545');

web3.defaultHardfork = 'berlin';
web3.defaultChain = 'goerli';

web3.defaultCommon = {
baseChain: 'goerli',
hardfork: 'berlin' as Hardfork,
customChain: {
networkId: 1,
chainId: 1,
},
};

console.log(web3.getContextObject().config);
defaultTransactionType​ defaultTransactionType 选项用于设置交易类型。类型 0x0 为遗留交易,采用 EIP-2718 引入 typed transaction 之前的交易格式。类型 0x1 的交易由 EIP-2930 引入。类型 0x2 的交易由 EIP-1559 引入,包含在以太坊 London fork 中。 defaultTransactionType 的默认值为 0x02。 defaultMaxPriorityFeePerGas​ defaultMaxPriorityFeePerGas 选项用于设置 EIP-1559 智能合约交易(交易类型 0x2)的 defaultMaxPriorityFeePerGas 值。 defaultMaxPriorityFeePerGas 的默认值为 2500000000(即 2.5 gwei),以 hexstring 格式表示。 customTransactionSchema​ customTransactionSchema 选项允许 formatTransaction 接受自定义 schema 来验证交易。一个使用场景是:你的链在交易中有一个额外字段,你想编写一个插件来简化发送这些交易。 defaultReturnFormat​ defaultReturnFormat 选项允许用户指定某些类型数据的默认返回格式。它是一个可在全局级别设置的配置参数,会影响整个库的数据返回方式。 import { Web3, FMT_NUMBER, FMT_BYTES } from 'web3';

web3.defaultReturnFormat = {
number: FMT_NUMBER.BIGINT,
bytes: FMT_BYTES.HEX,
};
所有可用的数字数据选项:​ export enum FMT_NUMBER {
NUMBER = 'NUMBER_NUMBER',
HEX = 'NUMBER_HEX',
STR = 'NUMBER_STR',
BIGINT = 'NUMBER_BIGINT',
}
所有可用的字节数据选项:​ export enum FMT_BYTES {
HEX = 'BYTES_HEX',
UINT8ARRAY = 'BYTES_UINT8ARRAY',
}
[ignoreGasPricing]​ ignoreGasPricing 选项允许你在发送交易或与合约交互时,不让 web3.js 自动填充 gas estimate。当你希望由钱包或 provider 处理 gas 估算时,此功能特别有用。 发送交易示例​ const web3 = new Web3(PROVIDER);
web3.config.ignoreGasPricing = true; // when setting configurations for the web3 object, this will also apply to newly created contracts from the web3 object
const transaction: TransactionWithToLocalWalletIndex = {
from: tempAcc.address,
to: '0x0000000000000000000000000000000000000000',
value: BigInt(1),
data: '0x64edfbf0e2c706ba4a09595315c45355a341a576cc17f3a19f43ac1c02f814ee',
};
const receipt = await web3.eth.sendTransaction(transaction); // web3.js 此时不再估算 gas 费用。
合约示例 let contractDeployed: Contract;
// 实例化合约...
contractDeployed.config.ignoreGasPricing = true;
const receipt = await contractDeployed.methods.setValues(1, 'string value', true).send(sendOptions);

评论 (0)