Go-Ethereum

使用 abi.encodePacked 填充 eth_call 中的數據欄位的工具?

  • May 17, 2021

我正在嘗試deposit使用 geth’s 呼叫契約的方法eth_call。此函式以data字節為單位接收值:

{
 "from": "0xd9c9cd5f6779558b6e0ed4e6acf6b1947e7fa1f3",
 "to":   "0xebe8efa441b9302a0d7eaecc277c09d20d684540",
 "gas":  "0x1bd7c",
 "data": "0xd459fc46000000000000000000000000000000000000000000000000000000000046c650dbb5e8cb2bac4d2ed0b1e6475d37361157738801c494ca482f96527eb48f9eec488c2eba92d31baeccfb6968fad5c21a3df93181b43b4cf253b4d572b64172ef000000000000000000000000000000000000000000000000000000000000008c00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000002b85c0c828d7a98633b4e1b65eac0c017502da909420aeade9a280675013df36bdc71cffdf420cef3d24ba4b3f9b980bfbb26bd5e2dcf7795b3519a3fd22ffbb2000000000000000000000000000000000000000000000000000000000000000238fb6606dc2b5e42d00c653372c153da8560de77bd9afaba94b4ab6e4aa11d565d858c761320dbf23a94018d843772349bd9d92301b0ca9ca983a22d86a70628",
}

在solidity中,我會傳入,abi.encodePacked(arc20Address, assetID, assetAmount, abi.encodeWithSignature("deposit()"))它會為我將這些參數轉換為字節數據。

但是由於我使用的是 geth,我想知道是否有一個我可以使用的工具可以為我做到這一點?

如果你有合約的 ABI,你可以使用encodeABI.

如果您沒有合約的 ABI web3.eth.abi.encodeFunctionCall,那麼您可以使用或組合web3.eth.abi.*.

如果您不想使用 web3js,可以使用ethereumjs-abi來實現類似的功能。

但是由於您使用的是 geth,因此您必須查看 web3 v0.20 文件,尤其是getData。這裡還有一些答案: Encoding/Decoding contract ABI data my help with web3 v0.20。

引用自:https://ethereum.stackexchange.com/questions/99099