Transactions
如何跟踪契約付款
我可以在區塊瀏覽器上跟踪收到的智能合約付款,還是需要為此執行合約方法?我需要金額和付款辨識資訊(我需要以某種方式辨識付款人 - 可能他會發送某種跟踪程式碼作為有效負載)。ETH 和 ERC20 代幣的答案是否不同?
對於 ETH,您可以使用任何區塊瀏覽器檢查智能合約收到的金額,而無需呼叫任何智能合約方法。
以程式方式,使用乙太坊節點,您可以呼叫該
eth.getBalance(<your address>)
方法來查找任何地址(包括智能合約)的 ETH 餘額。對於ERC20代幣,需要呼叫代
balanceOf(<your smart contract address>)
幣智能合約地址的方法。作為證明,請在 etherscan.io 上查看EtherDelta 的智能合約,並查看該合約是否有 ETH 餘額。
為了可靠地接收付款,您最好生成 1 個地址/客戶,以便您的客戶能夠從他們可能使用的任何錢包向您發送資金。
獲取給定 Eth 帳戶的餘額,您可以呼叫以下方法
eth.getBalance('<ADDRESS>'); //Geth Console web.eth.getBalance('<ADDRESS>'); //Web3js
跟踪 ERC20 付款,您無需編寫任何智能合約。只需要呼叫contractObject.balanceOf()。
ERC20 餘額:
contractObj.balanceOf('<ADDRESS>');
檢查 web3js 以獲取實時/事件驅動的傳輸。
事件驅動:
contractObj.Transfer(function(error, result){ if(error){ console.log("Error", error); return; } //result.args. });
過濾器從地址和地址中獲取所有交易以獲取 ERC 令牌:
methodID = web3.sha3('Transfer(address,address,uint256)'); const allEvents = eth.filter({ fromBlock: 0, toBlock: 'latest', address: <CONTRACT_ADDRESS>, topics: [ methodID, '0x0000000000000000000000008fa31452a2bf4840ba358ce316defb9b20ad92d3',//FROM 32 Bytes padding '0x0000000000000000000000008fa31452a2bf4840ba358ce316defb9b20ad92d3', //TO 32 bytes padding ] }); allEvents.get(function (err, events)) { console.log(events); }
有關更多詳細資訊 web3js: