Transactions

私鏈:從賬戶中提取“數據”?

  • May 11, 2017

我已經在兩個賬戶之間發起並探勘了一筆交易。我還在此交易中包含了一個數據欄位。這只是隨機的十六進制數據。這是命令:

eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,"ether"),data:"4e4f"})

現在,從交易雜湊,我可以得到這個數據(它在輸入欄位中):

eth.getTransaction("<transaction hash>")
{
 blockHash: "0xfa62730b0f9e310cd07d615b78857e338e845b9098c26f861e2713c5f690497d",
 blockNumber: 15,
 from: "0x37e5a459dbd48d4d9874e13cc334dab30373cece",
 gas: 90000,
 gasPrice: 20000000000,
 hash: "0x2beef248d7d690d95cd1da22c8bf12937d323b197430e5a384cf4259db290bef",
 input: "0x4e4f",
 nonce: 2,
 to: "0xe1e09a6f9504d42e2e63e1b21447f4410159cf24",
 transactionIndex: 0,
 value: 1000000000000000000
}

但是,我想使用收件人帳戶地址 檢索此數據

0xe1e09a6f9504d42e2e63e1b21447f4410159cf24

我們可以使用eth.getBalance(account_address)獲取該賬戶的餘額。除了乙太幣,我還將數據發送到這個帳戶(這不是它的工作原理嗎?)。那麼,有沒有類似這樣的eth.getData/eth.getInput函式來查找某個賬戶收到的數據呢?

這些數據實際上儲存在我的私有區塊鏈中的什麼位置?

您發送的數據是交易的一部分,但不會“添加”到帳戶中。有與帳戶關聯的儲存空間(通過 訪問eth.getStorageAt(address,location)),但除非合約在那裡儲存數據,否則它將是空的。

由於數據僅與交易相關聯,而不與帳戶相關聯,因此訪問它的最佳方式是使用過濾器

var filter = eth.filter({fromBlock:0,toBlock:"latest", address:eth.accounts[1]});
var data = [];
filter.get(function(error,result){
   data.append(eth.getTransaction(result.transactionHash).data);
});

console.log(data)

或者,您可以創建一個簡單地記錄發送給它的所有數據的契約:

contract Store {

   bytes[] public data;

   function(){
       data.push(msg.data);
   }
}

然後只需使用store.data(index);

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