Что я хотел бы сделать, так это проанализировать все коды операций, которые выполняются, когда я вызываю контракт или вызываю функцию из контракта.
Насколько я понимаю, это вычисление будет происходить на моей собственной машине, в EVM
, и только результат будет отправлен в блокчейн.
Моя идея состоит в том, что для вычисления этого результата вычисления должны выполняться на моем локальном компьютере в какой-то момент в следующем процессе:
var contractAbi = eth.contract([{"constant":true,"inputs":[],"name":"getPeople","outputs":[{"name":"","type":"bytes32[]"},{"name":"","type":"bytes32[]"},{"name":"","type":"uint256[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_firstName","type":"bytes32"},{"name":"_lastName","type":"bytes32"},{"name":"_age","type":"uint256"}],"name":"addPerson","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"people","outputs":[{"name":"firstName","type":"bytes32"},{"name":"lastName","type":"bytes32"},{"name":"age","type":"uint256"}],"payable":false,"type":"function"}]);
undefined
var myContract = contractAbi.at("0xC127E3ca071892B1b471b4FC568312Fcbb737879");
undefined
var getData = myContract.addPerson.getData("S. Matthew", "English", 28);
undefined
personal.unlockAccount(eth.coinbase, 'hunter2');
web3.eth.sendTransaction({to:"0xC127E3ca071892B1b471b4FC568312Fcbb737879", from:"0xd7a9a61a480d458a1181e0563b07f944df4489a6", data: getData, gas: (270000)});
"0x0cec118d22fbd572bf25c7e4143919e608989bec7da08512f2a6f3171df3b3b8"
myContract.address
"0xC127E3ca071892B1b471b4FC568312Fcbb737879"
myContract.getPeople()
[["0x532e204d61747468657700000000000000000000000000000000000000000000"], ["0x456e676c69736800000000000000000000000000000000000000000000000000"], [28]]
myContract.getPeople().toLocaleString()
"0x532e204d61747468657700000000000000000000000000000000000000000000,0x456e676c69736800000000000000000000000000000000000000000000000000,28"
Как я могу наблюдать за кодами операций, которые выполняются в результате указанной выше последовательности?
Использование дизассемблера ByteCode To Opcode Disassembler на Etherscan Я видел, какие коды операций вызываются при создании контракта, но я полагаю, что это отличается от простого вызова контракта или одной из его функций, поскольку, например, вам не нужно будет вызывать снова конструктор и т.д.
Используйте debug.traceTransaction(...)
.
Пример из основной сети:
> debug.traceTransaction("0xe7cdf3ddebd6b1f3c21b26346da52901b6035b39bdfb58de49491b47a92808a7")
{
gas: 30981,
returnValue: "",
structLogs: [{
depth: 1,
error: null,
gas: 13725,
gasCost: 3,
memory: null,
op: "PUSH1",
pc: 0,
stack: [],
storage: {}
}, {
depth: 1,
error: null,
gas: 13722,
gasCost: 3,
memory: null,
op: "PUSH1",
pc: 2,
stack: ["0000000000000000000000000000000000000000000000000000000000000060"],
storage: {}
}, {
...
}, {
depth: 1,
error: null,
gas: 4019,
gasCost: 1,
memory: ["0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000060", "000000000000000000000000000000000000000000000000015a1fa6f11a5551"],
op: "JUMPDEST",
pc: 80,
stack: ["00000000000000000000000000000000000000000000000000000000f7654176"],
storage: {}
}, {
depth: 1,
error: null,
gas: 4019,
gasCost: 0,
memory: ["0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000000000000000000000000000000000000000000000000060", "000000000000000000000000000000000000000000000000015a1fa6f11a5551"],
op: "STOP",
pc: 81,
stack: ["00000000000000000000000000000000000000000000000000000000f7654176"],
storage: {}
}]
}
английский
конфиденциальностьisahumanright.eth
geth
данные блокчейна содержат полные данные транзакции. Если вы--fast
синхронизируете свою цепочку блоков, полные данные транзакции будут недоступны до блока, который быстро синхронизируется. См. также ethereum.stackexchange.com/questions/4282/… и ethereum.stackexchange.com/questions/6007/…английский
JSON
объектов на каждом полном узле со всеми этими данными кода операции на них?английский
английский