mirror of https://github.com/hyperledger/besu
Add Parity style Statediff (#326)
* State diff All but balances work at this point. And it has something to do with upfront gas costs. Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> * fix the balances bug There was also a chained transactions bug. To address this I create a new WorldUpdater for each iteration of a transaction through the block. The current world updater has the new state, the prior the old one. Diffs just fall out after that. Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> * get rid of midBlock state, it's unneeded with the chained updaters. Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> * remove rootWorld method, old code from a prior attempt. Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> * remove println Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> * spotless Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> * spotless, comments, and cleanup Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> * spotless keeps missing this. Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> * javadoc Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> * fix broken reference tests Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> * spotless Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> * tighten access Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>pull/329/head
parent
1d316196f9
commit
f9b0439fdc
@ -0,0 +1,61 @@ |
||||
/* |
||||
* Copyright ConsenSys AG. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
* |
||||
*/ |
||||
|
||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.tracing.diff; |
||||
|
||||
import java.util.Map; |
||||
|
||||
public final class AccountDiff { |
||||
|
||||
private final DiffNode balance; |
||||
private final DiffNode code; |
||||
private final DiffNode nonce; |
||||
private final Map<String, DiffNode> storage; |
||||
|
||||
AccountDiff( |
||||
final DiffNode balance, |
||||
final DiffNode code, |
||||
final DiffNode nonce, |
||||
final Map<String, DiffNode> storage) { |
||||
this.balance = balance; |
||||
this.code = code; |
||||
this.nonce = nonce; |
||||
this.storage = storage; |
||||
} |
||||
|
||||
public DiffNode getBalance() { |
||||
return balance; |
||||
} |
||||
|
||||
public DiffNode getCode() { |
||||
return code; |
||||
} |
||||
|
||||
public DiffNode getNonce() { |
||||
return nonce; |
||||
} |
||||
|
||||
public Map<String, DiffNode> getStorage() { |
||||
return storage; |
||||
} |
||||
|
||||
boolean hasDifference() { |
||||
return balance.hasDifference() |
||||
|| code.hasDifference() |
||||
|| nonce.hasDifference() |
||||
|| !storage.isEmpty(); |
||||
} |
||||
} |
@ -0,0 +1,94 @@ |
||||
/* |
||||
* Copyright ConsenSys AG. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
* |
||||
*/ |
||||
|
||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.tracing.diff; |
||||
|
||||
import java.io.IOException; |
||||
import java.util.Optional; |
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator; |
||||
import com.fasterxml.jackson.databind.SerializerProvider; |
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
||||
import com.fasterxml.jackson.databind.ser.std.StdSerializer; |
||||
|
||||
@JsonSerialize(using = DiffNode.Serializer.class) |
||||
public final class DiffNode { |
||||
|
||||
private final Optional<String> from; |
||||
private final Optional<String> to; |
||||
|
||||
public DiffNode() { |
||||
from = Optional.empty(); |
||||
to = Optional.empty(); |
||||
} |
||||
|
||||
DiffNode(final String from, final String to) { |
||||
this.from = Optional.ofNullable(from); |
||||
this.to = Optional.ofNullable(to); |
||||
} |
||||
|
||||
DiffNode(final Optional<String> from, final Optional<String> to) { |
||||
this.from = from; |
||||
this.to = to; |
||||
} |
||||
|
||||
boolean hasDifference() { |
||||
return from.map(it -> !it.equals(to.get())).orElse(to.isPresent()); |
||||
} |
||||
|
||||
public static class Serializer extends StdSerializer<DiffNode> { |
||||
|
||||
public Serializer() { |
||||
this(null); |
||||
} |
||||
|
||||
protected Serializer(final Class<DiffNode> t) { |
||||
super(t); |
||||
} |
||||
|
||||
@Override |
||||
public void serialize( |
||||
final DiffNode value, final JsonGenerator gen, final SerializerProvider provider) |
||||
throws IOException { |
||||
if (value.from.isPresent()) { |
||||
if (value.to.isPresent()) { |
||||
if (value.from.get().equalsIgnoreCase(value.to.get())) { |
||||
gen.writeString("="); |
||||
} else { |
||||
gen.writeStartObject(); |
||||
gen.writeObjectFieldStart("*"); |
||||
gen.writeObjectField("from", value.from.get()); |
||||
gen.writeObjectField("to", value.to.get()); |
||||
gen.writeEndObject(); |
||||
gen.writeEndObject(); |
||||
} |
||||
} else { |
||||
gen.writeStartObject(); |
||||
gen.writeObjectField("-", value.from.get()); |
||||
gen.writeEndObject(); |
||||
} |
||||
} else { |
||||
if (value.to.isPresent()) { |
||||
gen.writeStartObject(); |
||||
gen.writeObjectField("+", value.to.get()); |
||||
gen.writeEndObject(); |
||||
} else { |
||||
gen.writeString("="); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,128 @@ |
||||
/* |
||||
* Copyright ConsenSys AG. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
* |
||||
*/ |
||||
|
||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.tracing.diff; |
||||
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.processor.TransactionTrace; |
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.tracing.Trace; |
||||
import org.hyperledger.besu.ethereum.core.AbstractWorldUpdater; |
||||
import org.hyperledger.besu.ethereum.core.AbstractWorldUpdater.UpdateTrackingAccount; |
||||
import org.hyperledger.besu.ethereum.core.Account; |
||||
import org.hyperledger.besu.ethereum.core.Address; |
||||
import org.hyperledger.besu.ethereum.core.Wei; |
||||
import org.hyperledger.besu.ethereum.core.WorldUpdater; |
||||
import org.hyperledger.besu.ethereum.debug.TraceFrame; |
||||
|
||||
import java.util.Collections; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
import java.util.Optional; |
||||
import java.util.TreeMap; |
||||
import java.util.function.Function; |
||||
import java.util.stream.Stream; |
||||
|
||||
import org.apache.tuweni.units.bigints.UInt256; |
||||
|
||||
public class StateDiffGenerator { |
||||
|
||||
public Stream<Trace> generateStateDiff(final TransactionTrace transactionTrace) { |
||||
List<TraceFrame> traceFrames = transactionTrace.getTraceFrames(); |
||||
if (traceFrames.size() < 1) { |
||||
return Stream.empty(); |
||||
} |
||||
|
||||
// This corresponds to the world state after the TX executed
|
||||
// It is two deep because of the way we addressed Spurious Dragon.
|
||||
WorldUpdater transactionUpdater = |
||||
traceFrames |
||||
.get(0) |
||||
.getMessageFrame() |
||||
.getWorldState() |
||||
.parentUpdater() |
||||
.get() |
||||
.parentUpdater() |
||||
.get(); |
||||
// This corresponds to the world state prior to the TX execution,
|
||||
// Either the initial block state or the state of the prior TX
|
||||
WorldUpdater previousUpdater = transactionUpdater.parentUpdater().get(); |
||||
|
||||
StateDiffTrace stateDiffResult = new StateDiffTrace(); |
||||
|
||||
for (Account touchedAccount : transactionUpdater.getTouchedAccounts()) { |
||||
if (!(touchedAccount instanceof AbstractWorldUpdater.UpdateTrackingAccount)) { |
||||
continue; |
||||
} |
||||
Address accountAddress = touchedAccount.getAddress(); |
||||
UpdateTrackingAccount<?> updatedAccount = |
||||
(UpdateTrackingAccount<?>) transactionUpdater.get(accountAddress); |
||||
Account rootAccount = previousUpdater.get(accountAddress); |
||||
|
||||
// calculate storage diff
|
||||
Map<String, DiffNode> storageDiff = new TreeMap<>(); |
||||
for (Map.Entry<UInt256, UInt256> entry : updatedAccount.getUpdatedStorage().entrySet()) { |
||||
UInt256 originalValue = rootAccount.getStorageValue(entry.getKey()); |
||||
UInt256 newValue = entry.getValue(); |
||||
storageDiff.put( |
||||
entry.getKey().toHexString(), |
||||
new DiffNode(originalValue.toHexString(), newValue.toHexString())); |
||||
} |
||||
|
||||
// populate the diff object
|
||||
AccountDiff accountDiff = |
||||
new AccountDiff( |
||||
createDiffNode(rootAccount, updatedAccount, StateDiffGenerator::balanceAsHex), |
||||
createDiffNode(rootAccount, updatedAccount, StateDiffGenerator::codeAsHex), |
||||
createDiffNode(rootAccount, updatedAccount, StateDiffGenerator::nonceAsHex), |
||||
storageDiff); |
||||
|
||||
if (accountDiff.hasDifference()) { |
||||
stateDiffResult.put(accountAddress.toHexString(), accountDiff); |
||||
} |
||||
} |
||||
|
||||
// Add deleted accounts
|
||||
for (Address accountAddress : transactionUpdater.getDeletedAccountAddresses()) { |
||||
Account deletedAccount = previousUpdater.get(accountAddress); |
||||
AccountDiff accountDiff = |
||||
new AccountDiff( |
||||
createDiffNode(deletedAccount, null, StateDiffGenerator::balanceAsHex), |
||||
createDiffNode(deletedAccount, null, StateDiffGenerator::codeAsHex), |
||||
createDiffNode(deletedAccount, null, StateDiffGenerator::nonceAsHex), |
||||
Collections.emptyMap()); |
||||
stateDiffResult.put(accountAddress.toHexString(), accountDiff); |
||||
} |
||||
|
||||
return Stream.of(stateDiffResult); |
||||
} |
||||
|
||||
private DiffNode createDiffNode( |
||||
final Account from, final Account to, final Function<Account, String> func) { |
||||
return new DiffNode(Optional.ofNullable(from).map(func), Optional.ofNullable(to).map(func)); |
||||
} |
||||
|
||||
private static String balanceAsHex(final Account account) { |
||||
Wei balance = account.getBalance(); |
||||
return balance.isZero() ? "0x0" : balance.toShortHexString(); |
||||
} |
||||
|
||||
private static String codeAsHex(final Account account) { |
||||
return account.getCode().toHexString(); |
||||
} |
||||
|
||||
private static String nonceAsHex(final Account account) { |
||||
return "0x" + Long.toHexString(account.getNonce()); |
||||
} |
||||
} |
@ -0,0 +1,23 @@ |
||||
/* |
||||
* Copyright ConsenSys AG. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on |
||||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
||||
* specific language governing permissions and limitations under the License. |
||||
* |
||||
* SPDX-License-Identifier: Apache-2.0 |
||||
* |
||||
*/ |
||||
|
||||
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.tracing.diff; |
||||
|
||||
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.results.tracing.Trace; |
||||
|
||||
import java.util.TreeMap; |
||||
|
||||
class StateDiffTrace extends TreeMap<String, AccountDiff> implements Trace {} |
@ -1,5 +1,5 @@ |
||||
{ |
||||
"request": { |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
@ -0,0 +1,19 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0x0", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,19 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0x1", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,67 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0x2", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0x", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x1bc16d674ec80000", |
||||
"to": "0x1bc16d674f149578" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0x0000000000000000000000000000000000000999": { |
||||
"balance": { |
||||
"+": "0x1" |
||||
}, |
||||
"code": { |
||||
"+": "0x" |
||||
}, |
||||
"nonce": { |
||||
"+": "0x0" |
||||
}, |
||||
"storage": {} |
||||
}, |
||||
"0x627306090abab3a6e1400e9345bc60c78a8bef57": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xf0000000000000000000000", |
||||
"to": "0xeffffffffffffffffb36a87" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x0", |
||||
"to": "0x1" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0x28fa8042c7b5835f4f91fc20937f3e70dcf3585c1afe31202bb6075185f9abfe", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,67 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0x3", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0x600035ff", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x3782dace9ddc9578", |
||||
"to": "0x3782dace9ea423b8" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0x627306090abab3a6e1400e9345bc60c78a8bef57": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xeffffffffffffffffb36a87", |
||||
"to": "0xefffffffffffffffeebdc47" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x1", |
||||
"to": "0x2" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
}, |
||||
"0xf12b5dd4ead5f743c6baa640b0216200e89b60da": { |
||||
"balance": { |
||||
"+": "0x0" |
||||
}, |
||||
"code": { |
||||
"+": "0x600035ff" |
||||
}, |
||||
"nonce": { |
||||
"+": "0x1" |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0x8d5477f0aae852c3e9487b0f8e7b9ecf9ccdf23d7934d4b4b7eff40c271031e5", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,128 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0x4", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0x", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x53444835ed6c23b8", |
||||
"to": "0x53444835ee4d7c58" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0x0010000000000000000000000000000000000000": { |
||||
"balance": "=", |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000001": { |
||||
"*": { |
||||
"from": "0x0000000000000000000000000000000000000000000000000000000000000000", |
||||
"to": "0x0000000000000000000000000000000000000000000000000000000000000001" |
||||
} |
||||
}, |
||||
"0x0000000000000000000000000000000000000000000000000000000000000002": { |
||||
"*": { |
||||
"from": "0x0000000000000000000000000000000000000000000000000000000000000000", |
||||
"to": "0x0000000000000000000000000000000000000000000000000000000000000002" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xfffffffffffffffffffffffffffffffffffffffff", |
||||
"to": "0xfffffffffffffffffffffffffffffffffff1ea75f" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x0", |
||||
"to": "0x1" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0x4de634fe767d1f6d0512ca0c9c0a054d3a2596f7cdd7c1eea5f93046a740b3c7", |
||||
"vmTrace": null |
||||
}, |
||||
{ |
||||
"output": "0x", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x53444835ee4d7c58", |
||||
"to": "0x53444835eec16d28" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0x0010000000000000000000000000000000000000": { |
||||
"balance": "=", |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000001": { |
||||
"*": { |
||||
"from": "0x0000000000000000000000000000000000000000000000000000000000000001", |
||||
"to": "0x0000000000000000000000000000000000000000000000000000000000000003" |
||||
} |
||||
}, |
||||
"0x0000000000000000000000000000000000000000000000000000000000000002": { |
||||
"*": { |
||||
"from": "0x0000000000000000000000000000000000000000000000000000000000000002", |
||||
"to": "0x0000000000000000000000000000000000000000000000000000000000000004" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"0x627306090abab3a6e1400e9345bc60c78a8bef57": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xefffffffffffffffeebdc47", |
||||
"to": "0xefffffffffffffffe77eb77" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x2", |
||||
"to": "0x3" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0xf882ec206292910527fd7095e59a1ca027b873296f1eba3886aa1addc4ff0ab9", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,74 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0x5", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0x", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x6f05b59d3d896d28", |
||||
"to": "0x6f05b59d3dc329d0" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0x0010000000000000000000000000000000000000": { |
||||
"balance": "=", |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000001": { |
||||
"*": { |
||||
"from": "0x0000000000000000000000000000000000000000000000000000000000000003", |
||||
"to": "0x0000000000000000000000000000000000000000000000000000000000000000" |
||||
} |
||||
}, |
||||
"0x0000000000000000000000000000000000000000000000000000000000000002": { |
||||
"*": { |
||||
"from": "0x0000000000000000000000000000000000000000000000000000000000000004", |
||||
"to": "0x0000000000000000000000000000000000000000000000000000000000000000" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xfffffffffffffffffffffffffffffffffff1ea75f", |
||||
"to": "0xffffffffffffffffffffffffffffffffffee4eab7" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x1", |
||||
"to": "0x2" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0xdb2cd5e93dedae66371fc4a95452c746e11f7d2097464707597b8807c889ef5b", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,79 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0x6", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0x", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x8ac723048c8b29d0", |
||||
"to": "0x8ac723048cee68a2" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0x0000000000000999000000000000000000000000": { |
||||
"balance": { |
||||
"+": "0x300" |
||||
}, |
||||
"code": { |
||||
"+": "0x" |
||||
}, |
||||
"nonce": { |
||||
"+": "0x0" |
||||
}, |
||||
"storage": {} |
||||
}, |
||||
"0x0020000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"-": "0x300" |
||||
}, |
||||
"code": { |
||||
"-": "0x600035ff" |
||||
}, |
||||
"nonce": { |
||||
"-": "0x0" |
||||
}, |
||||
"storage": {} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xffffffffffffffffffffffffffffffffffee4eab7", |
||||
"to": "0xffffffffffffffffffffffffffffffffffe81abe5" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x2", |
||||
"to": "0x3" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0x91eeabc671e2dd2b1c8ddebb46ba59e8cb3e7d189f80bcc868a9787728c6e59e", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,55 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0x7", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0xf000000000000000000000000000000000000000000000000000000000000002", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xa688906bdbb668a2", |
||||
"to": "0xa688906bdc04064f" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xffffffffffffffffffffffffffffffffffe81abe5", |
||||
"to": "0xffffffffffffffffffffffffffffffffffe340e38" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x3", |
||||
"to": "0x4" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0x47f4d445ea1812cb1ddd3464ab23d2bfc6ed408a8a9db1c497f94e8e06e85286", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,55 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0x8", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0xf000000000000000000000000000000000000000000000000000000000000002", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xc249fdd32acc064f", |
||||
"to": "0xc249fdd32b1d145d" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xffffffffffffffffffffffffffffffffffe340e38", |
||||
"to": "0xffffffffffffffffffffffffffffffffffde3002a" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x4", |
||||
"to": "0x5" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0xa29f9d6a4f183f4c22c4857544a9a6b69c48d7bb8a97652be06e50bb69470666", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,55 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0x9", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0xf000000000000000000000000000000000000000000000000000000000000002", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xde0b6b3a79e5145d", |
||||
"to": "0xde0b6b3a7a3d13fb" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xffffffffffffffffffffffffffffffffffde3002a", |
||||
"to": "0xffffffffffffffffffffffffffffffffffd8b008c" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x5", |
||||
"to": "0x6" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0x4af0ef28fbfcbdee7cc5925797c1b9030b3848c2f63f92737c3fe76b45582af5", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,55 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0xA", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0xf000000000000000000000000000000000000000000000000000000000000002", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xf9ccd8a1c90513fb", |
||||
"to": "0xf9ccd8a1c9562209" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xffffffffffffffffffffffffffffffffffd8b008c", |
||||
"to": "0xffffffffffffffffffffffffffffffffffd39f27e" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x6", |
||||
"to": "0x7" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0x4ec95b7de430b61fc9a57ed35274fd766b7f5fac5213ab946963eb528deae6b5", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,55 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0xB", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0xf000000000000000000000000000000000000000000000000000000000000001", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x1158e4609181e2209", |
||||
"to": "0x1158e4609186f3017" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xffffffffffffffffffffffffffffffffffd39f27e", |
||||
"to": "0xffffffffffffffffffffffffffffffffffce8e470" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x7", |
||||
"to": "0x8" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0x6f77512ee9d43474a884c0703c86712fb98dca772fa6e12252786e3e23f196c1", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,55 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0xC", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0x", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x1314fb37067373017", |
||||
"to": "0x1314fb3706783e191" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xffffffffffffffffffffffffffffffffffce8e470", |
||||
"to": "0xffffffffffffffffffffffffffffffffffc9c32f6" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x8", |
||||
"to": "0x9" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0x12e4a98e63825852a69d7702202a3b593e4059ec913c479443665d590da18724", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,55 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0xD", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0x", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x14d1120d7b64be191", |
||||
"to": "0x14d1120d8a54bd47f" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xffffffffffffffffffffffffffffffffffc9c32f6", |
||||
"to": "0xfffffffffffffffffffffffffffffffff0d9c4008" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0x9", |
||||
"to": "0xa" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0x547c7e2fcdf9f88b03b4f4184d667d6768c669f279785774d0cf42435cab06f1", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,164 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0xE", |
||||
[ |
||||
"stateDiff" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0x01", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x168d28e3ff413d47f", |
||||
"to": "0x168d28e3ff4aa3091" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0x0090000000000000000000000000000000000000": { |
||||
"balance": "=", |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000000": { |
||||
"*": { |
||||
"from": "0x0000000000000000000000000000000000000000000000000000000000000000", |
||||
"to": "0x0000000000000000000000000000000000000000000000000000000000000001" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xfffffffffffffffffffffffffffffffff0d9c4008", |
||||
"to": "0xfffffffffffffffffffffffffffffffff0d05e3f6" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0xa", |
||||
"to": "0xb" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0xe3ebc73c55176c3f2e72b289f8a9cefbcd5b25dcd205db5661f81b0bb974fa73", |
||||
"vmTrace": null |
||||
}, |
||||
{ |
||||
"output": "0x02", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x168d28e3ff4aa3091", |
||||
"to": "0x168d28e3ff509d8bb" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0x0090000000000000000000000000000000000000": { |
||||
"balance": "=", |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000000": { |
||||
"*": { |
||||
"from": "0x0000000000000000000000000000000000000000000000000000000000000001", |
||||
"to": "0x0000000000000000000000000000000000000000000000000000000000000002" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xfffffffffffffffffffffffffffffffff0d05e3f6", |
||||
"to": "0xfffffffffffffffffffffffffffffffff0ca63bcc" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0xb", |
||||
"to": "0xc" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0xb4dc55ca4a7c1f72402860c594efaa7da32035003f8e203b7f6a3cf1826685a5", |
||||
"vmTrace": null |
||||
}, |
||||
{ |
||||
"output": "0x03", |
||||
"stateDiff": { |
||||
"0x0000000000000000000000000000000000000000": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0x168d28e3ff509d8bb", |
||||
"to": "0x168d28e3ff56980e5" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": {} |
||||
}, |
||||
"0x0090000000000000000000000000000000000000": { |
||||
"balance": "=", |
||||
"code": "=", |
||||
"nonce": "=", |
||||
"storage": { |
||||
"0x0000000000000000000000000000000000000000000000000000000000000000": { |
||||
"*": { |
||||
"from": "0x0000000000000000000000000000000000000000000000000000000000000002", |
||||
"to": "0x0000000000000000000000000000000000000000000000000000000000000003" |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { |
||||
"balance": { |
||||
"*": { |
||||
"from": "0xfffffffffffffffffffffffffffffffff0ca63bcc", |
||||
"to": "0xfffffffffffffffffffffffffffffffff0c4693a2" |
||||
} |
||||
}, |
||||
"code": "=", |
||||
"nonce": { |
||||
"*": { |
||||
"from": "0xc", |
||||
"to": "0xd" |
||||
} |
||||
}, |
||||
"storage": {} |
||||
} |
||||
}, |
||||
"trace": [], |
||||
"transactionHash": "0x1a9f6256886437cfa21ee7685dd7a996024bea4d4bf6554b14787a6c9e5b90e6", |
||||
"vmTrace": null |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
@ -0,0 +1,524 @@ |
||||
{ |
||||
"request": { |
||||
"jsonrpc": "2.0", |
||||
"method": "trace_replayBlockTransactions", |
||||
"params": [ |
||||
"0xE", |
||||
[ |
||||
"vmTrace" |
||||
] |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"response": { |
||||
"jsonrpc": "2.0", |
||||
"result": [ |
||||
{ |
||||
"output": "0x01", |
||||
"stateDiff": null, |
||||
"trace": [], |
||||
"transactionHash": "0xe3ebc73c55176c3f2e72b289f8a9cefbcd5b25dcd205db5661f81b0bb974fa73", |
||||
"vmTrace": { |
||||
"code": "0x6000546001018060005360005560016000f3", |
||||
"ops": [ |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16756199 |
||||
}, |
||||
"pc": 0, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 200, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16755999 |
||||
}, |
||||
"pc": 2, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x1" |
||||
], |
||||
"store": null, |
||||
"used": 16755996 |
||||
}, |
||||
"pc": 3, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x1" |
||||
], |
||||
"store": null, |
||||
"used": 16755993 |
||||
}, |
||||
"pc": 5, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x1", |
||||
"0x1" |
||||
], |
||||
"store": null, |
||||
"used": 16755990 |
||||
}, |
||||
"pc": 6, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16755987 |
||||
}, |
||||
"pc": 7, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 6, |
||||
"ex": { |
||||
"mem": { |
||||
"data": "0x01", |
||||
"off": 0 |
||||
}, |
||||
"push": [], |
||||
"store": null, |
||||
"used": 16755981 |
||||
}, |
||||
"pc": 9, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16755978 |
||||
}, |
||||
"pc": 10, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 20000, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [], |
||||
"store": { |
||||
"key": "0x0", |
||||
"val": "0x1" |
||||
}, |
||||
"used": 16735978 |
||||
}, |
||||
"pc": 12, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x1" |
||||
], |
||||
"store": null, |
||||
"used": 16735975 |
||||
}, |
||||
"pc": 13, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16735972 |
||||
}, |
||||
"pc": 15, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 0, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [], |
||||
"store": null, |
||||
"used": 16735972 |
||||
}, |
||||
"pc": 17, |
||||
"sub": null |
||||
} |
||||
] |
||||
} |
||||
}, |
||||
{ |
||||
"output": "0x02", |
||||
"stateDiff": null, |
||||
"trace": [], |
||||
"transactionHash": "0xb4dc55ca4a7c1f72402860c594efaa7da32035003f8e203b7f6a3cf1826685a5", |
||||
"vmTrace": { |
||||
"code": "0x6000546001018060005360005560016000f3", |
||||
"ops": [ |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16756199 |
||||
}, |
||||
"pc": 0, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 200, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x1" |
||||
], |
||||
"store": null, |
||||
"used": 16755999 |
||||
}, |
||||
"pc": 2, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x1" |
||||
], |
||||
"store": null, |
||||
"used": 16755996 |
||||
}, |
||||
"pc": 3, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x2" |
||||
], |
||||
"store": null, |
||||
"used": 16755993 |
||||
}, |
||||
"pc": 5, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x2", |
||||
"0x2" |
||||
], |
||||
"store": null, |
||||
"used": 16755990 |
||||
}, |
||||
"pc": 6, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16755987 |
||||
}, |
||||
"pc": 7, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 6, |
||||
"ex": { |
||||
"mem": { |
||||
"data": "0x02", |
||||
"off": 0 |
||||
}, |
||||
"push": [], |
||||
"store": null, |
||||
"used": 16755981 |
||||
}, |
||||
"pc": 9, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16755978 |
||||
}, |
||||
"pc": 10, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 5000, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [], |
||||
"store": { |
||||
"key": "0x0", |
||||
"val": "0x2" |
||||
}, |
||||
"used": 16750978 |
||||
}, |
||||
"pc": 12, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x1" |
||||
], |
||||
"store": null, |
||||
"used": 16750975 |
||||
}, |
||||
"pc": 13, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16750972 |
||||
}, |
||||
"pc": 15, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 0, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [], |
||||
"store": null, |
||||
"used": 16750972 |
||||
}, |
||||
"pc": 17, |
||||
"sub": null |
||||
} |
||||
] |
||||
} |
||||
}, |
||||
{ |
||||
"output": "0x03", |
||||
"stateDiff": null, |
||||
"trace": [], |
||||
"transactionHash": "0x1a9f6256886437cfa21ee7685dd7a996024bea4d4bf6554b14787a6c9e5b90e6", |
||||
"vmTrace": { |
||||
"code": "0x6000546001018060005360005560016000f3", |
||||
"ops": [ |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16756199 |
||||
}, |
||||
"pc": 0, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 200, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x2" |
||||
], |
||||
"store": null, |
||||
"used": 16755999 |
||||
}, |
||||
"pc": 2, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x1" |
||||
], |
||||
"store": null, |
||||
"used": 16755996 |
||||
}, |
||||
"pc": 3, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x3" |
||||
], |
||||
"store": null, |
||||
"used": 16755993 |
||||
}, |
||||
"pc": 5, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x3", |
||||
"0x3" |
||||
], |
||||
"store": null, |
||||
"used": 16755990 |
||||
}, |
||||
"pc": 6, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16755987 |
||||
}, |
||||
"pc": 7, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 6, |
||||
"ex": { |
||||
"mem": { |
||||
"data": "0x03", |
||||
"off": 0 |
||||
}, |
||||
"push": [], |
||||
"store": null, |
||||
"used": 16755981 |
||||
}, |
||||
"pc": 9, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16755978 |
||||
}, |
||||
"pc": 10, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 5000, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [], |
||||
"store": { |
||||
"key": "0x0", |
||||
"val": "0x3" |
||||
}, |
||||
"used": 16750978 |
||||
}, |
||||
"pc": 12, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x1" |
||||
], |
||||
"store": null, |
||||
"used": 16750975 |
||||
}, |
||||
"pc": 13, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 3, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [ |
||||
"0x0" |
||||
], |
||||
"store": null, |
||||
"used": 16750972 |
||||
}, |
||||
"pc": 15, |
||||
"sub": null |
||||
}, |
||||
{ |
||||
"cost": 0, |
||||
"ex": { |
||||
"mem": null, |
||||
"push": [], |
||||
"store": null, |
||||
"used": 16750972 |
||||
}, |
||||
"pc": 17, |
||||
"sub": null |
||||
} |
||||
] |
||||
} |
||||
} |
||||
], |
||||
"id": 415 |
||||
}, |
||||
"statusCode": 200 |
||||
} |
Loading…
Reference in new issue