本文介绍如何在web3.js中手动添加未文档化的eth_getRawTransactionByHash方法。通过修改types.d.ts、index.js及formatters.js文件,实现获取原始交易数据的功能。适用于1.0版本,提供具体代码示例与注意事项。
添加eth.getRawTransactionByHash方法步骤
在以太坊节点通信中,JSON-RPC接口提供了[[t0]]这一功能。
https://ethereum.stackexchange.com/questions/7473/get-raw-transaction-from-hash
该接口属于JSON-RPC协议中一个未被官方文档明确列出的方法。
curl -H "Content-Type: application/json" -X POST --data \
'{"jsonrpc":"2.0","method":"eth_getRawTransactionByHash","params":["<TX_HASH>"],"id":1}' http://localhost:8545
<TX_HASH> - transaction id
首先,在项目的node_modules目录下定位到web3库的types.d.ts文件。
在Eth类定义中扩展方法签名。
具体操作为在Eth类内部添加相应的方法定义。
getRawTransaction(hash: string, cb?: Callback<TransactionRaw>): Promise<TransactionRaw>
同时,需要新增TransactionRaw类型定义以支持返回值结构。
export declare interface TransactionRaw {
raw: string
}
其次,在node_modules目录下找到web3-eth模块的index.js文件。
methods={}
在此文件中注册并实现该方法。
new Method({
name: 'getRawTransaction',
call: 'eth_getRawTransactionByHash',
params: 1,
inputFormatter: [null],
outputFormatter: formatter.outputTransactionRawFormatter
}),
接着,进入node_modules目录下的web3-core-helpers模块。
在formatters.js文件中增加outputTransactionRawFormatter格式化函数,并在module.exports中导出该函数。
/**
* Formats the output of a transaction raw value
*
* @method outputTransactionRawFormatter
* @param {Object} tx
* @returns {Object}
*/
var outputTransactionRawFormatter = function (tx){
return tx;
};
module.exports = {
inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
inputBlockNumberFormatter: inputBlockNumberFormatter,
inputCallFormatter: inputCallFormatter,
inputTransactionFormatter: inputTransactionFormatter,
inputAddressFormatter: inputAddressFormatter,
inputPostFormatter: inputPostFormatter,
inputLogFormatter: inputLogFormatter,
inputSignFormatter: inputSignFormatter,
outputBigNumberFormatter: outputBigNumberFormatter,
outputTransactionFormatter: outputTransactionFormatter,
outputTransactionRawFormatter: outputTransactionRawFormatter,
outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,
outputBlockFormatter: outputBlockFormatter,
outputLogFormatter: outputLogFormatter,
outputPostFormatter: outputPostFormatter,
outputSyncingFormatter: outputSyncingFormatter
};
注意:上述修改方案基于web3.js 1.0版本,其他版本可能存在差异。
总结
以上内容介绍了在web3.js中手动添加eth.getRawTransactionByHash(txhash)方法的具体步骤。希望这些信息能对您有所帮助。如有任何疑问,欢迎留言,我们将及时回复。感谢支持!