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

第5章 Web3.js 返回格式详解

返回格式 默认情况下,Web3.js 会把字节值格式化为十六进制字符串(如 "0x221"),把数字值格式化为 BigInt。通过修改 defaultReturnFormat 配置项,可以在全局层面调整默认格式。许多 Web3.js 函数(如 getBlock、sendTransaction)还接受一个名为 returnFormat 的可选参数(类型为 DataFormat),用于单独配置某次函数调用返回数据的格式。 下面的示例演示了如何使用返回格式: import { Block, FMT_BYTES, FMT_NUMBER, Numbers, Web3 } from 'web3';

const web3 = new Web3('https://eth.llamarpc.com');

// use the default return format
web3.eth.getBlock().then((block: Block) => {
console.log(`Block #${block.number} Hash: ${block.hash}`);
});
// ↳ Block #20735255 Hash: 0xbaea6dbd46fa810a27be4c9eac782602f8efe7512fb30a8455c127b101a23e22

// specify the return format for a single function invocation
web3.eth
.getBlockNumber({
bytes: FMT_BYTES.HEX,
number: FMT_NUMBER.HEX,
})
.then((blockNumber: Numbers) => {
console.log(`Block #${blockNumber}`);
});
// ↳ Block #0x13c6517

// configure default return format for the web3-eth package
web3.eth.defaultReturnFormat = {
bytes: FMT_BYTES.UINT8ARRAY,
number: FMT_NUMBER.HEX,
};

web3.eth.getBlock().then((block: Block) => {
console.log(`Block #${block.number} Hash: [${block.hash}]`);
});
// ↳ Block #0x13c6517 Hash: [186,234,109,...,162,62,34]
支持的返回格式如下: 字节(Bytes) FMT_BYTES.HEX:十六进制字符串(如 "0xdd") web3.eth
.getBlock(undefined, undefined, {
bytes: FMT_BYTES.HEX,
number: FMT_NUMBER.BIGINT,
})
.then((block: Block) => {
console.log(`Block hash: ${block.hash}`);
});
// ↳ Block hash: 0xbaea6dbd46fa810a27be4c9eac782602f8efe7512fb30a8455c127b101a23e22
FMT_BYTES.UINT8ARRAY:Uint8Array(如 [ 2, 33 ]) web3.eth
.getBlock(undefined, undefined, {
bytes: FMT_BYTES.UINT8ARRAY,
number: FMT_NUMBER.BIGINT,
})
.then((block: Block) => {
console.log(`Block hash: [${block.hash}]`);
});
// ↳ Block hash: [186,234,109,...,162,62,34]
数字(Numbers) FMT_NUMBER.BIGINT:BigInt(如 221n) web3.eth
.getBlockNumber({
bytes: FMT_BYTES.HEX,
number: FMT_NUMBER.BIGINT,
})
.then((blockNumber: Numbers) => {
console.log(`Block #${blockNumber}`);
});
// ↳ Block #20735255
FMT_NUMBER.HEX:十六进制字符串(例如 "0xdd") web3.eth
.getBlockNumber({
bytes: FMT_BYTES.HEX,
number: FMT_NUMBER.HEX,
})
.then((blockNumber: Numbers) => {
console.log(`Block #${blockNumber}`);
});
// ↳ Block #0x13c6517
FMT_NUMBER.NUMBER:Number 类型(例如 221) web3.eth
.getBlockNumber({
bytes: FMT_BYTES.HEX,
number: FMT_NUMBER.NUMBER,
})
.then((blockNumber: Numbers) => {
console.log(`Block #${blockNumber}`);
});
// ↳ Block #20735255
FMT_NUMBER.STR:字符串(例如 "221") web3.eth
.getBlockNumber({
bytes: FMT_BYTES.HEX,
number: FMT_NUMBER.STR,
})
.then((blockNumber: Numbers) => {
console.log(`Block #${blockNumber}`);
});
// ↳ Block #20735255

评论 (0)