Transactions

如何跟踪契約付款

  • December 3, 2018

我可以在區塊瀏覽器上跟踪收到的智能合約付款,還是需要為此執行合約方法?我需要金額和付款辨識資訊(我需要以某種方式辨識付款人 - 可能他會發送某種跟踪程式碼作為有效負載)。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:

http://web3js.readthedocs.io/en/1.0/

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