Transactions
私鏈:從賬戶中提取“數據”?
我已經在兩個賬戶之間發起並探勘了一筆交易。我還在此交易中包含了一個數據欄位。這只是隨機的十六進制數據。這是命令:
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);