Transactions
如何根據他們呼叫的方法對使用 web3 進行轉移和非轉移交易的交易進行分類?
區塊鏈瀏覽器顯示“轉移”而不是其列表中某些交易的方法 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"); }
希望有幫助!
編輯:如果您想辨識更廣泛的呼叫,這可能對您有用。