如何列出來自賬戶地址的交易?
我有一項小型服務,人們可以在其中交換加密貨幣。每個使用者都有自己的比特幣、萊特幣等地址用於餘額存款。現在我想添加乙太坊。所以我想我會為每個使用者創建帳戶,然後檢查傳入的交易。但據我了解,我無法從帳戶地址獲取交易清單。這很奇怪。即使在 Mist 錢包中,我也看不到乙太幣是從哪裡來的。獲得交易的唯一方法是檢查一些第 3 方區塊鏈瀏覽器。
另外據我了解,正確的方法是創建智能合約,因為它具有必要的 API。但我無法為每個使用者創建聯繫人。
也許我只需要創建 1 個將乙太“重定向”到我的主帳戶的合約,但這對使用者來說不是很友好,因為會要求使用者在交易中添加一些額外的數據,以便我可以了解誰是誰。
任何建議都會有所幫助。
如果我正確理解您的問題,您希望能夠看到誰將 Eth 存入了您的合約地址。這就是事件日誌的用途。
(1)創建一個合約,每次有交易就有一個事件。例如:
contract someContract { address public owner; // Set the owner of the contract to be the creator of the contract i.e. you function someContract() { owner = msg.sender; } // This is an event event DepositMade(address _from, uint value); event WithdrawalMade(address _to, uint value); //Catch all function function() { // generate an event when someone sends you Eth if (msg.value > 0) DepositMade(msg.sender, msg.value); } // Only the owner of the site can withdraw Eth modifier admin { if (msg.sender == owner) _ } function withdraw(uint amount, address recipient) admin { if(recipient.send(amount)) WithdrawalMade(msg.sender, msg.value); else throw; } }
重要的位是定義事件類型
event DepositMade(address _from, uint value)
並在發生某些事情時生成事件,DepositMade(msg.sender, msg.value);
這些事件儲存在與已部署合約實例的地址相關聯的事件日誌中。
eth_newFilter
(2) 您使用 rpc或類似的方式檢索此契約上的事件web3.eth.filter
:var filter = web3.eth.filter({fromBlock:0, toBlock: 'latest', address: contractAddress, 'topics':['0x' + web3.sha3('DepositMade(hexstring,uint256)')]}); filter.watch(function(error, result) { if(!error) console.log(result); })
您可以嘗試使用https://etherchain.org/documentation/api/中記錄的 etherchain.org GetAccountTransactions API 。
例如:https ://etherchain.org/api/account/0xbeef281b81d383336aca8b2b067a526227638087/tx/0 將為您提供 https://etherchain.org/account/0xbeef281b81d383336aca8b2b067a526227638087#txsent中顯示的交易
Etherscan 也有一些記錄在案的 API - https://etherscan.io/apis。這是與上述帳戶相同的交易數據的等效 API 呼叫。 http://api.etherscan.io/api?module=account&action=txlist&address=0xbeef281b81d383336aca8b2b067a526227638087&sort=asc