Я инициировал и заработал транзакцию между двумя аккаунтами. Я также включил поле данных в эту транзакцию. Это просто случайные шестнадцатеричные данные. Вот команда:
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);
Гавей