Transactions

如何根據他們呼叫的方法對使用 web3 進行轉移和非轉移交易的交易進行分類?

  • November 21, 2021

區塊鏈瀏覽器顯示“轉移”而不是其列表中某些交易的方法 ID,因此應該有一種方法可以根據他們呼叫的方法過濾交易。如何根據是轉移/非轉移交易過濾交易?我想我可以使用

web3.eth.abi.encodeFunctionSignature 

不知道如何做到這一點。

我知道這debug.traceTransaction是一種可能性,但是我正在尋找一種成本更低的方法來實現這一目標。

函式標識符將允許您定義傳遞與非傳遞函式。

基本上,它是呼叫數據的前 4 個字節。

以進行 USDC 轉賬的這筆交易為例。

呼叫數據的前 4 個字節為:0xa9059cbb。這些匹配的前 4 個字節keccak256("transfer(address, uint256)"):0xa9059cbb….

因此,如果呼叫數據的前 4 個字節與該值匹配,您可以辨識每筆轉賬交易。

以下程式碼在我之前連結的 tx 上執行此操作:

import web3 from "web3";

const Web3 = new web3("https://mainnet.infura.io/v3/PROJECT-ID");

const transferIdentifier = Web3.eth.abi.encodeFunctionSignature("transfer(address,uint256)");

const tx = await Web3.eth.getTransaction("0x87f86d88cc3461b0ed120979bc7c1c47fd3dd8638cc3a4632f02ace629920678");

if (tx.input.slice(0, transferIdentifier.length) === transferIdentifier) {
 console.log("This is a transfer");
}

希望有幫助!

編輯:如果您想辨識更廣泛的呼叫,這可能對您有用。

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