Merge branch 'release/0.9.24'
This commit is contained in:
commit
52b4e51366
@ -141,7 +141,7 @@ var net = web3.net;
|
|||||||
utils.Fatalf("Error setting namespaces: %v", err)
|
utils.Fatalf("Error setting namespaces: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
js.re.Eval(globalRegistrar + "registrar = new GlobalRegistrar(\"" + globalRegistrarAddr + "\");")
|
js.re.Eval(globalRegistrar + "registrar = GlobalRegistrar.at(\"" + globalRegistrarAddr + "\");")
|
||||||
}
|
}
|
||||||
|
|
||||||
var ds, _ = docserver.New("/")
|
var ds, _ = docserver.New("/")
|
||||||
|
@ -48,7 +48,7 @@ import _ "net/http/pprof"
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
ClientIdentifier = "Geth"
|
ClientIdentifier = "Geth"
|
||||||
Version = "0.9.23"
|
Version = "0.9.24"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -4,4 +4,5 @@ import "github.com/ethereum/go-ethereum/common"
|
|||||||
|
|
||||||
var badHashes = []common.Hash{
|
var badHashes = []common.Hash{
|
||||||
common.HexToHash("f269c503aed286caaa0d114d6a5320e70abbc2febe37953207e76a2873f2ba79"),
|
common.HexToHash("f269c503aed286caaa0d114d6a5320e70abbc2febe37953207e76a2873f2ba79"),
|
||||||
|
common.HexToHash("38f5bbbffd74804820ffa4bab0cd540e9de229725afb98c1a7e57936f4a714bc"),
|
||||||
}
|
}
|
||||||
|
21
core/vm/disasm.go
Normal file
21
core/vm/disasm.go
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package vm
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func Disasm(code []byte) []string {
|
||||||
|
var out []string
|
||||||
|
for pc := uint64(0); pc < uint64(len(code)); pc++ {
|
||||||
|
op := OpCode(code[pc])
|
||||||
|
out = append(out, op.String())
|
||||||
|
|
||||||
|
switch op {
|
||||||
|
case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
|
||||||
|
a := uint64(op) - uint64(PUSH1) + 1
|
||||||
|
out = append(out, fmt.Sprintf("0x%x", code[pc+1:pc+1+a]))
|
||||||
|
|
||||||
|
pc += a
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return out
|
||||||
|
}
|
@ -1,10 +1,6 @@
|
|||||||
package vm
|
package vm
|
||||||
|
|
||||||
import (
|
import "fmt"
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Memory struct {
|
type Memory struct {
|
||||||
store []byte
|
store []byte
|
||||||
@ -24,7 +20,7 @@ func (m *Memory) Set(offset, size uint64, value []byte) {
|
|||||||
// It's possible the offset is greater than 0 and size equals 0. This is because
|
// It's possible the offset is greater than 0 and size equals 0. This is because
|
||||||
// the calcMemSize (common.go) could potentially return 0 when size is zero (NO-OP)
|
// the calcMemSize (common.go) could potentially return 0 when size is zero (NO-OP)
|
||||||
if size > 0 {
|
if size > 0 {
|
||||||
copy(m.store[offset:offset+size], common.RightPadBytes(value, int(size)))
|
copy(m.store[offset:offset+size], value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +128,6 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
mem.Resize(newMemSize.Uint64())
|
mem.Resize(newMemSize.Uint64())
|
||||||
|
|
||||||
switch op {
|
switch op {
|
||||||
// 0x20 range
|
|
||||||
case ADD:
|
case ADD:
|
||||||
x, y := stack.pop(), stack.pop()
|
x, y := stack.pop(), stack.pop()
|
||||||
self.Printf(" %v + %v", y, x)
|
self.Printf(" %v + %v", y, x)
|
||||||
@ -142,7 +141,7 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
stack.push(base)
|
stack.push(base)
|
||||||
case SUB:
|
case SUB:
|
||||||
x, y := stack.pop(), stack.pop()
|
x, y := stack.pop(), stack.pop()
|
||||||
self.Printf(" %v - %v", y, x)
|
self.Printf(" %v - %v", x, y)
|
||||||
|
|
||||||
base.Sub(x, y)
|
base.Sub(x, y)
|
||||||
|
|
||||||
@ -268,9 +267,6 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
}
|
}
|
||||||
case NOT:
|
case NOT:
|
||||||
stack.push(U256(new(big.Int).Not(stack.pop())))
|
stack.push(U256(new(big.Int).Not(stack.pop())))
|
||||||
//base.Sub(Pow256, stack.pop()).Sub(base, common.Big1)
|
|
||||||
//base = U256(base)
|
|
||||||
//stack.push(base)
|
|
||||||
case LT:
|
case LT:
|
||||||
x, y := stack.pop(), stack.pop()
|
x, y := stack.pop(), stack.pop()
|
||||||
self.Printf(" %v < %v", x, y)
|
self.Printf(" %v < %v", x, y)
|
||||||
@ -329,7 +325,6 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
stack.push(common.BigTrue)
|
stack.push(common.BigTrue)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0x10 range
|
|
||||||
case AND:
|
case AND:
|
||||||
x, y := stack.pop(), stack.pop()
|
x, y := stack.pop(), stack.pop()
|
||||||
self.Printf(" %v & %v", y, x)
|
self.Printf(" %v & %v", y, x)
|
||||||
@ -390,7 +385,6 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
|
|
||||||
stack.push(base)
|
stack.push(base)
|
||||||
|
|
||||||
// 0x20 range
|
|
||||||
case SHA3:
|
case SHA3:
|
||||||
offset, size := stack.pop(), stack.pop()
|
offset, size := stack.pop(), stack.pop()
|
||||||
data := crypto.Sha3(mem.Get(offset.Int64(), size.Int64()))
|
data := crypto.Sha3(mem.Get(offset.Int64(), size.Int64()))
|
||||||
@ -398,7 +392,6 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
stack.push(common.BigD(data))
|
stack.push(common.BigD(data))
|
||||||
|
|
||||||
self.Printf(" => (%v) %x", size, data)
|
self.Printf(" => (%v) %x", size, data)
|
||||||
// 0x30 range
|
|
||||||
case ADDRESS:
|
case ADDRESS:
|
||||||
stack.push(common.Bytes2Big(context.Address().Bytes()))
|
stack.push(common.Bytes2Big(context.Address().Bytes()))
|
||||||
|
|
||||||
@ -486,7 +479,6 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
|
|
||||||
self.Printf(" => %x", context.Price)
|
self.Printf(" => %x", context.Price)
|
||||||
|
|
||||||
// 0x40 range
|
|
||||||
case BLOCKHASH:
|
case BLOCKHASH:
|
||||||
num := stack.pop()
|
num := stack.pop()
|
||||||
|
|
||||||
@ -527,7 +519,6 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
|
|
||||||
stack.push(self.env.GasLimit())
|
stack.push(self.env.GasLimit())
|
||||||
|
|
||||||
// 0x50 range
|
|
||||||
case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
|
case PUSH1, PUSH2, PUSH3, PUSH4, PUSH5, PUSH6, PUSH7, PUSH8, PUSH9, PUSH10, PUSH11, PUSH12, PUSH13, PUSH14, PUSH15, PUSH16, PUSH17, PUSH18, PUSH19, PUSH20, PUSH21, PUSH22, PUSH23, PUSH24, PUSH25, PUSH26, PUSH27, PUSH28, PUSH29, PUSH30, PUSH31, PUSH32:
|
||||||
a := big.NewInt(int64(op - PUSH1 + 1))
|
a := big.NewInt(int64(op - PUSH1 + 1))
|
||||||
byts := getData(code, new(big.Int).Add(pc, big.NewInt(1)), a)
|
byts := getData(code, new(big.Int).Add(pc, big.NewInt(1)), a)
|
||||||
@ -553,12 +544,11 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
topics := make([]common.Hash, n)
|
topics := make([]common.Hash, n)
|
||||||
mStart, mSize := stack.pop(), stack.pop()
|
mStart, mSize := stack.pop(), stack.pop()
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
topics[i] = common.BigToHash(stack.pop()) //common.LeftPadBytes(stack.pop().Bytes(), 32)
|
topics[i] = common.BigToHash(stack.pop())
|
||||||
}
|
}
|
||||||
|
|
||||||
data := mem.Get(mStart.Int64(), mSize.Int64())
|
data := mem.Get(mStart.Int64(), mSize.Int64())
|
||||||
log := state.NewLog(context.Address(), topics, data, self.env.BlockNumber().Uint64())
|
log := state.NewLog(context.Address(), topics, data, self.env.BlockNumber().Uint64())
|
||||||
//log := &Log{context.Address(), topics, data, self.env.BlockNumber().Uint64()}
|
|
||||||
self.env.AddLog(log)
|
self.env.AddLog(log)
|
||||||
|
|
||||||
self.Printf(" => %v", log)
|
self.Printf(" => %v", log)
|
||||||
@ -568,7 +558,7 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
stack.push(val)
|
stack.push(val)
|
||||||
|
|
||||||
self.Printf(" => 0x%x", val.Bytes())
|
self.Printf(" => 0x%x", val.Bytes())
|
||||||
case MSTORE: // Store the value at stack top-1 in to memory at location stack top
|
case MSTORE:
|
||||||
// pop value of the stack
|
// pop value of the stack
|
||||||
mStart, val := stack.pop(), stack.pop()
|
mStart, val := stack.pop(), stack.pop()
|
||||||
mem.Set(mStart.Uint64(), 32, common.BigToBytes(val, 256))
|
mem.Set(mStart.Uint64(), 32, common.BigToBytes(val, 256))
|
||||||
@ -614,7 +604,6 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
|
|
||||||
case JUMPDEST:
|
case JUMPDEST:
|
||||||
case PC:
|
case PC:
|
||||||
//stack.push(big.NewInt(int64(pc)))
|
|
||||||
stack.push(pc)
|
stack.push(pc)
|
||||||
case MSIZE:
|
case MSIZE:
|
||||||
stack.push(big.NewInt(int64(mem.Len())))
|
stack.push(big.NewInt(int64(mem.Len())))
|
||||||
@ -622,7 +611,6 @@ func (self *Vm) Run(context *Context, callData []byte) (ret []byte, err error) {
|
|||||||
stack.push(context.Gas)
|
stack.push(context.Gas)
|
||||||
|
|
||||||
self.Printf(" => %x", context.Gas)
|
self.Printf(" => %x", context.Gas)
|
||||||
// 0x60 range
|
|
||||||
case CREATE:
|
case CREATE:
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -93,6 +93,12 @@ type Downloader struct {
|
|||||||
cancelLock sync.RWMutex // Lock to protect the cancel channel in delivers
|
cancelLock sync.RWMutex // Lock to protect the cancel channel in delivers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Block is an origin-tagged blockchain block.
|
||||||
|
type Block struct {
|
||||||
|
RawBlock *types.Block
|
||||||
|
OriginPeer string
|
||||||
|
}
|
||||||
|
|
||||||
func New(mux *event.TypeMux, hasBlock hashCheckFn, getBlock getBlockFn) *Downloader {
|
func New(mux *event.TypeMux, hasBlock hashCheckFn, getBlock getBlockFn) *Downloader {
|
||||||
downloader := &Downloader{
|
downloader := &Downloader{
|
||||||
mux: mux,
|
mux: mux,
|
||||||
@ -177,7 +183,7 @@ func (d *Downloader) Synchronise(id string, hash common.Hash) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TakeBlocks takes blocks from the queue and yields them to the caller.
|
// TakeBlocks takes blocks from the queue and yields them to the caller.
|
||||||
func (d *Downloader) TakeBlocks() types.Blocks {
|
func (d *Downloader) TakeBlocks() []*Block {
|
||||||
return d.queue.TakeBlocks()
|
return d.queue.TakeBlocks()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,10 +88,10 @@ func (dl *downloadTester) sync(peerId string, head common.Hash) error {
|
|||||||
// syncTake is starts synchronising with a remote peer, but concurrently it also
|
// syncTake is starts synchronising with a remote peer, but concurrently it also
|
||||||
// starts fetching blocks that the downloader retrieved. IT blocks until both go
|
// starts fetching blocks that the downloader retrieved. IT blocks until both go
|
||||||
// routines terminate.
|
// routines terminate.
|
||||||
func (dl *downloadTester) syncTake(peerId string, head common.Hash) (types.Blocks, error) {
|
func (dl *downloadTester) syncTake(peerId string, head common.Hash) ([]*Block, error) {
|
||||||
// Start a block collector to take blocks as they become available
|
// Start a block collector to take blocks as they become available
|
||||||
done := make(chan struct{})
|
done := make(chan struct{})
|
||||||
took := []*types.Block{}
|
took := []*Block{}
|
||||||
go func() {
|
go func() {
|
||||||
for running := true; running; {
|
for running := true; running; {
|
||||||
select {
|
select {
|
||||||
@ -349,7 +349,7 @@ func TestNonExistingParentAttack(t *testing.T) {
|
|||||||
if len(bs) != 1 {
|
if len(bs) != 1 {
|
||||||
t.Fatalf("retrieved block mismatch: have %v, want %v", len(bs), 1)
|
t.Fatalf("retrieved block mismatch: have %v, want %v", len(bs), 1)
|
||||||
}
|
}
|
||||||
if tester.hasBlock(bs[0].ParentHash()) {
|
if tester.hasBlock(bs[0].RawBlock.ParentHash()) {
|
||||||
t.Fatalf("tester knows about the unknown hash")
|
t.Fatalf("tester knows about the unknown hash")
|
||||||
}
|
}
|
||||||
tester.downloader.Cancel()
|
tester.downloader.Cancel()
|
||||||
@ -364,7 +364,7 @@ func TestNonExistingParentAttack(t *testing.T) {
|
|||||||
if len(bs) != 1 {
|
if len(bs) != 1 {
|
||||||
t.Fatalf("retrieved block mismatch: have %v, want %v", len(bs), 1)
|
t.Fatalf("retrieved block mismatch: have %v, want %v", len(bs), 1)
|
||||||
}
|
}
|
||||||
if !tester.hasBlock(bs[0].ParentHash()) {
|
if !tester.hasBlock(bs[0].RawBlock.ParentHash()) {
|
||||||
t.Fatalf("tester doesn't know about the origin hash")
|
t.Fatalf("tester doesn't know about the origin hash")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ type queue struct {
|
|||||||
pendPool map[string]*fetchRequest // Currently pending block retrieval operations
|
pendPool map[string]*fetchRequest // Currently pending block retrieval operations
|
||||||
|
|
||||||
blockPool map[common.Hash]int // Hash-set of the downloaded data blocks, mapping to cache indexes
|
blockPool map[common.Hash]int // Hash-set of the downloaded data blocks, mapping to cache indexes
|
||||||
blockCache []*types.Block // Downloaded but not yet delivered blocks
|
blockCache []*Block // Downloaded but not yet delivered blocks
|
||||||
blockOffset int // Offset of the first cached block in the block-chain
|
blockOffset int // Offset of the first cached block in the block-chain
|
||||||
|
|
||||||
lock sync.RWMutex
|
lock sync.RWMutex
|
||||||
@ -148,7 +148,7 @@ func (q *queue) Insert(hashes []common.Hash) []common.Hash {
|
|||||||
|
|
||||||
// GetHeadBlock retrieves the first block from the cache, or nil if it hasn't
|
// GetHeadBlock retrieves the first block from the cache, or nil if it hasn't
|
||||||
// been downloaded yet (or simply non existent).
|
// been downloaded yet (or simply non existent).
|
||||||
func (q *queue) GetHeadBlock() *types.Block {
|
func (q *queue) GetHeadBlock() *Block {
|
||||||
q.lock.RLock()
|
q.lock.RLock()
|
||||||
defer q.lock.RUnlock()
|
defer q.lock.RUnlock()
|
||||||
|
|
||||||
@ -159,7 +159,7 @@ func (q *queue) GetHeadBlock() *types.Block {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetBlock retrieves a downloaded block, or nil if non-existent.
|
// GetBlock retrieves a downloaded block, or nil if non-existent.
|
||||||
func (q *queue) GetBlock(hash common.Hash) *types.Block {
|
func (q *queue) GetBlock(hash common.Hash) *Block {
|
||||||
q.lock.RLock()
|
q.lock.RLock()
|
||||||
defer q.lock.RUnlock()
|
defer q.lock.RUnlock()
|
||||||
|
|
||||||
@ -176,18 +176,18 @@ func (q *queue) GetBlock(hash common.Hash) *types.Block {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TakeBlocks retrieves and permanently removes a batch of blocks from the cache.
|
// TakeBlocks retrieves and permanently removes a batch of blocks from the cache.
|
||||||
func (q *queue) TakeBlocks() types.Blocks {
|
func (q *queue) TakeBlocks() []*Block {
|
||||||
q.lock.Lock()
|
q.lock.Lock()
|
||||||
defer q.lock.Unlock()
|
defer q.lock.Unlock()
|
||||||
|
|
||||||
// Accumulate all available blocks
|
// Accumulate all available blocks
|
||||||
var blocks types.Blocks
|
blocks := []*Block{}
|
||||||
for _, block := range q.blockCache {
|
for _, block := range q.blockCache {
|
||||||
if block == nil {
|
if block == nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
blocks = append(blocks, block)
|
blocks = append(blocks, block)
|
||||||
delete(q.blockPool, block.Hash())
|
delete(q.blockPool, block.RawBlock.Hash())
|
||||||
}
|
}
|
||||||
// Delete the blocks from the slice and let them be garbage collected
|
// Delete the blocks from the slice and let them be garbage collected
|
||||||
// without this slice trick the blocks would stay in memory until nil
|
// without this slice trick the blocks would stay in memory until nil
|
||||||
@ -312,8 +312,10 @@ func (q *queue) Deliver(id string, blocks []*types.Block) (err error) {
|
|||||||
return ErrInvalidChain
|
return ErrInvalidChain
|
||||||
}
|
}
|
||||||
// Otherwise merge the block and mark the hash block
|
// Otherwise merge the block and mark the hash block
|
||||||
q.blockCache[index] = block
|
q.blockCache[index] = &Block{
|
||||||
|
RawBlock: block,
|
||||||
|
OriginPeer: id,
|
||||||
|
}
|
||||||
delete(request.Hashes, hash)
|
delete(request.Hashes, hash)
|
||||||
delete(q.hashPool, hash)
|
delete(q.hashPool, hash)
|
||||||
q.blockPool[hash] = int(block.NumberU64())
|
q.blockPool[hash] = int(block.NumberU64())
|
||||||
@ -342,6 +344,6 @@ func (q *queue) Alloc(offset int) {
|
|||||||
size = blockCacheLimit
|
size = blockCacheLimit
|
||||||
}
|
}
|
||||||
if len(q.blockCache) < size {
|
if len(q.blockCache) < size {
|
||||||
q.blockCache = append(q.blockCache, make([]*types.Block, size-len(q.blockCache))...)
|
q.blockCache = append(q.blockCache, make([]*Block, size-len(q.blockCache))...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -92,13 +92,13 @@ func NewProtocolManager(protocolVersion, networkId int, mux *event.TypeMux, txpo
|
|||||||
return manager
|
return manager
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pm *ProtocolManager) removePeer(peer *peer) {
|
func (pm *ProtocolManager) removePeer(id string) {
|
||||||
// Unregister the peer from the downloader
|
// Unregister the peer from the downloader
|
||||||
pm.downloader.UnregisterPeer(peer.id)
|
pm.downloader.UnregisterPeer(id)
|
||||||
|
|
||||||
// Remove the peer from the Ethereum peer set too
|
// Remove the peer from the Ethereum peer set too
|
||||||
glog.V(logger.Detail).Infoln("Removing peer", peer.id)
|
glog.V(logger.Detail).Infoln("Removing peer", id)
|
||||||
if err := pm.peers.Unregister(peer.id); err != nil {
|
if err := pm.peers.Unregister(id); err != nil {
|
||||||
glog.V(logger.Error).Infoln("Removal failed:", err)
|
glog.V(logger.Error).Infoln("Removal failed:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -148,7 +148,7 @@ func (pm *ProtocolManager) handle(p *peer) error {
|
|||||||
glog.V(logger.Error).Infoln("Addition failed:", err)
|
glog.V(logger.Error).Infoln("Addition failed:", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer pm.removePeer(p)
|
defer pm.removePeer(p.id)
|
||||||
|
|
||||||
if err := pm.downloader.RegisterPeer(p.id, p.recentHash, p.requestHashes, p.requestBlocks); err != nil {
|
if err := pm.downloader.RegisterPeer(p.id, p.recentHash, p.requestHashes, p.requestBlocks); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -315,7 +315,7 @@ func (self *ProtocolManager) handleMsg(p *peer) error {
|
|||||||
if _, err := self.chainman.InsertChain(types.Blocks{request.Block}); err != nil {
|
if _, err := self.chainman.InsertChain(types.Blocks{request.Block}); err != nil {
|
||||||
glog.V(logger.Error).Infoln("removed peer (", p.id, ") due to block error")
|
glog.V(logger.Error).Infoln("removed peer (", p.id, ") due to block error")
|
||||||
|
|
||||||
self.removePeer(p)
|
self.removePeer(p.id)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
16
eth/sync.go
16
eth/sync.go
@ -5,6 +5,7 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/eth/downloader"
|
"github.com/ethereum/go-ethereum/eth/downloader"
|
||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/ethereum/go-ethereum/logger/glog"
|
"github.com/ethereum/go-ethereum/logger/glog"
|
||||||
@ -57,13 +58,20 @@ func (pm *ProtocolManager) processBlocks() error {
|
|||||||
if len(blocks) == 0 {
|
if len(blocks) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
glog.V(logger.Debug).Infof("Inserting chain with %d blocks (#%v - #%v)\n", len(blocks), blocks[0].Number(), blocks[len(blocks)-1].Number())
|
glog.V(logger.Debug).Infof("Inserting chain with %d blocks (#%v - #%v)\n", len(blocks), blocks[0].RawBlock.Number(), blocks[len(blocks)-1].RawBlock.Number())
|
||||||
|
|
||||||
for len(blocks) != 0 && !pm.quit {
|
for len(blocks) != 0 && !pm.quit {
|
||||||
|
// Retrieve the first batch of blocks to insert
|
||||||
max := int(math.Min(float64(len(blocks)), float64(blockProcAmount)))
|
max := int(math.Min(float64(len(blocks)), float64(blockProcAmount)))
|
||||||
_, err := pm.chainman.InsertChain(blocks[:max])
|
raw := make(types.Blocks, 0, max)
|
||||||
|
for _, block := range blocks[:max] {
|
||||||
|
raw = append(raw, block.RawBlock)
|
||||||
|
}
|
||||||
|
// Try to inset the blocks, drop the originating peer if there's an error
|
||||||
|
index, err := pm.chainman.InsertChain(raw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.V(logger.Warn).Infof("Block insertion failed: %v", err)
|
glog.V(logger.Warn).Infof("Block insertion failed: %v", err)
|
||||||
|
pm.removePeer(blocks[index].OriginPeer)
|
||||||
pm.downloader.Cancel()
|
pm.downloader.Cancel()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -82,7 +90,7 @@ func (pm *ProtocolManager) synchronise(peer *peer) {
|
|||||||
}
|
}
|
||||||
// Make sure the peer's TD is higher than our own. If not drop.
|
// Make sure the peer's TD is higher than our own. If not drop.
|
||||||
if peer.td.Cmp(pm.chainman.Td()) <= 0 {
|
if peer.td.Cmp(pm.chainman.Td()) <= 0 {
|
||||||
glog.V(logger.Debug).Infoln("Synchronisation canceled: peer TD too small")
|
glog.V(logger.Debug).Infoln("Synchronisation canceled: peer's total difficulty is too small")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// FIXME if we have the hash in our chain and the TD of the peer is
|
// FIXME if we have the hash in our chain and the TD of the peer is
|
||||||
@ -105,7 +113,7 @@ func (pm *ProtocolManager) synchronise(peer *peer) {
|
|||||||
|
|
||||||
case downloader.ErrTimeout, downloader.ErrBadPeer, downloader.ErrInvalidChain, downloader.ErrCrossCheckFailed:
|
case downloader.ErrTimeout, downloader.ErrBadPeer, downloader.ErrInvalidChain, downloader.ErrCrossCheckFailed:
|
||||||
glog.V(logger.Debug).Infof("Removing peer %v: %v", peer.id, err)
|
glog.V(logger.Debug).Infof("Removing peer %v: %v", peer.id, err)
|
||||||
pm.removePeer(peer)
|
pm.removePeer(peer.id)
|
||||||
|
|
||||||
case downloader.ErrPendingQueue:
|
case downloader.ErrPendingQueue:
|
||||||
glog.V(logger.Debug).Infoln("Synchronisation aborted:", err)
|
glog.V(logger.Debug).Infoln("Synchronisation aborted:", err)
|
||||||
|
@ -33,6 +33,8 @@ type nodeDB struct {
|
|||||||
lvl *leveldb.DB // Interface to the database itself
|
lvl *leveldb.DB // Interface to the database itself
|
||||||
seeder iterator.Iterator // Iterator for fetching possible seed nodes
|
seeder iterator.Iterator // Iterator for fetching possible seed nodes
|
||||||
|
|
||||||
|
self NodeID // Own node id to prevent adding it into the database
|
||||||
|
|
||||||
runner sync.Once // Ensures we can start at most one expirer
|
runner sync.Once // Ensures we can start at most one expirer
|
||||||
quit chan struct{} // Channel to signal the expiring thread to stop
|
quit chan struct{} // Channel to signal the expiring thread to stop
|
||||||
}
|
}
|
||||||
@ -50,29 +52,30 @@ var (
|
|||||||
// newNodeDB creates a new node database for storing and retrieving infos about
|
// newNodeDB creates a new node database for storing and retrieving infos about
|
||||||
// known peers in the network. If no path is given, an in-memory, temporary
|
// known peers in the network. If no path is given, an in-memory, temporary
|
||||||
// database is constructed.
|
// database is constructed.
|
||||||
func newNodeDB(path string, version int) (*nodeDB, error) {
|
func newNodeDB(path string, version int, self NodeID) (*nodeDB, error) {
|
||||||
if path == "" {
|
if path == "" {
|
||||||
return newMemoryNodeDB()
|
return newMemoryNodeDB(self)
|
||||||
}
|
}
|
||||||
return newPersistentNodeDB(path, version)
|
return newPersistentNodeDB(path, version, self)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newMemoryNodeDB creates a new in-memory node database without a persistent
|
// newMemoryNodeDB creates a new in-memory node database without a persistent
|
||||||
// backend.
|
// backend.
|
||||||
func newMemoryNodeDB() (*nodeDB, error) {
|
func newMemoryNodeDB(self NodeID) (*nodeDB, error) {
|
||||||
db, err := leveldb.Open(storage.NewMemStorage(), nil)
|
db, err := leveldb.Open(storage.NewMemStorage(), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &nodeDB{
|
return &nodeDB{
|
||||||
lvl: db,
|
lvl: db,
|
||||||
|
self: self,
|
||||||
quit: make(chan struct{}),
|
quit: make(chan struct{}),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// newPersistentNodeDB creates/opens a leveldb backed persistent node database,
|
// newPersistentNodeDB creates/opens a leveldb backed persistent node database,
|
||||||
// also flushing its contents in case of a version mismatch.
|
// also flushing its contents in case of a version mismatch.
|
||||||
func newPersistentNodeDB(path string, version int) (*nodeDB, error) {
|
func newPersistentNodeDB(path string, version int, self NodeID) (*nodeDB, error) {
|
||||||
opts := &opt.Options{OpenFilesCacheCapacity: 5}
|
opts := &opt.Options{OpenFilesCacheCapacity: 5}
|
||||||
db, err := leveldb.OpenFile(path, opts)
|
db, err := leveldb.OpenFile(path, opts)
|
||||||
if _, iscorrupted := err.(*errors.ErrCorrupted); iscorrupted {
|
if _, iscorrupted := err.(*errors.ErrCorrupted); iscorrupted {
|
||||||
@ -102,11 +105,12 @@ func newPersistentNodeDB(path string, version int) (*nodeDB, error) {
|
|||||||
if err = os.RemoveAll(path); err != nil {
|
if err = os.RemoveAll(path); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return newPersistentNodeDB(path, version)
|
return newPersistentNodeDB(path, version, self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return &nodeDB{
|
return &nodeDB{
|
||||||
lvl: db,
|
lvl: db,
|
||||||
|
self: self,
|
||||||
quit: make(chan struct{}),
|
quit: make(chan struct{}),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
@ -182,6 +186,17 @@ func (db *nodeDB) updateNode(node *Node) error {
|
|||||||
return db.lvl.Put(makeKey(node.ID, nodeDBDiscoverRoot), blob, nil)
|
return db.lvl.Put(makeKey(node.ID, nodeDBDiscoverRoot), blob, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deleteNode deletes all information/keys associated with a node.
|
||||||
|
func (db *nodeDB) deleteNode(id NodeID) error {
|
||||||
|
deleter := db.lvl.NewIterator(util.BytesPrefix(makeKey(id, "")), nil)
|
||||||
|
for deleter.Next() {
|
||||||
|
if err := db.lvl.Delete(deleter.Key(), nil); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// ensureExpirer is a small helper method ensuring that the data expiration
|
// ensureExpirer is a small helper method ensuring that the data expiration
|
||||||
// mechanism is running. If the expiration goroutine is already running, this
|
// mechanism is running. If the expiration goroutine is already running, this
|
||||||
// method simply returns.
|
// method simply returns.
|
||||||
@ -227,17 +242,14 @@ func (db *nodeDB) expireNodes() error {
|
|||||||
if field != nodeDBDiscoverRoot {
|
if field != nodeDBDiscoverRoot {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// Skip the node if not expired yet
|
// Skip the node if not expired yet (and not self)
|
||||||
|
if bytes.Compare(id[:], db.self[:]) != 0 {
|
||||||
if seen := db.lastPong(id); seen.After(threshold) {
|
if seen := db.lastPong(id); seen.After(threshold) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// Otherwise delete all associated information
|
// Otherwise delete all associated information
|
||||||
deleter := db.lvl.NewIterator(util.BytesPrefix(makeKey(id, "")), nil)
|
db.deleteNode(id)
|
||||||
for deleter.Next() {
|
|
||||||
if err := db.lvl.Delete(deleter.Key(), nil); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -286,6 +298,11 @@ func (db *nodeDB) querySeeds(n int) []*Node {
|
|||||||
if field != nodeDBDiscoverRoot {
|
if field != nodeDBDiscoverRoot {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
// Dump it if its a self reference
|
||||||
|
if bytes.Compare(id[:], db.self[:]) == 0 {
|
||||||
|
db.deleteNode(id)
|
||||||
|
continue
|
||||||
|
}
|
||||||
// Load it as a potential seed
|
// Load it as a potential seed
|
||||||
if node := db.node(id); node != nil {
|
if node := db.node(id); node != nil {
|
||||||
nodes = append(nodes, node)
|
nodes = append(nodes, node)
|
||||||
|
@ -63,7 +63,7 @@ var nodeDBInt64Tests = []struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNodeDBInt64(t *testing.T) {
|
func TestNodeDBInt64(t *testing.T) {
|
||||||
db, _ := newNodeDB("", Version)
|
db, _ := newNodeDB("", Version, NodeID{})
|
||||||
defer db.close()
|
defer db.close()
|
||||||
|
|
||||||
tests := nodeDBInt64Tests
|
tests := nodeDBInt64Tests
|
||||||
@ -94,7 +94,7 @@ func TestNodeDBFetchStore(t *testing.T) {
|
|||||||
)
|
)
|
||||||
inst := time.Now()
|
inst := time.Now()
|
||||||
|
|
||||||
db, _ := newNodeDB("", Version)
|
db, _ := newNodeDB("", Version, NodeID{})
|
||||||
defer db.close()
|
defer db.close()
|
||||||
|
|
||||||
// Check fetch/store operations on a node ping object
|
// Check fetch/store operations on a node ping object
|
||||||
@ -165,7 +165,7 @@ var nodeDBSeedQueryNodes = []struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNodeDBSeedQuery(t *testing.T) {
|
func TestNodeDBSeedQuery(t *testing.T) {
|
||||||
db, _ := newNodeDB("", Version)
|
db, _ := newNodeDB("", Version, NodeID{})
|
||||||
defer db.close()
|
defer db.close()
|
||||||
|
|
||||||
// Insert a batch of nodes for querying
|
// Insert a batch of nodes for querying
|
||||||
@ -205,7 +205,7 @@ func TestNodeDBSeedQuery(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNodeDBSeedQueryContinuation(t *testing.T) {
|
func TestNodeDBSeedQueryContinuation(t *testing.T) {
|
||||||
db, _ := newNodeDB("", Version)
|
db, _ := newNodeDB("", Version, NodeID{})
|
||||||
defer db.close()
|
defer db.close()
|
||||||
|
|
||||||
// Insert a batch of nodes for querying
|
// Insert a batch of nodes for querying
|
||||||
@ -230,6 +230,32 @@ func TestNodeDBSeedQueryContinuation(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNodeDBSelfSeedQuery(t *testing.T) {
|
||||||
|
// Assign a node as self to verify evacuation
|
||||||
|
self := nodeDBSeedQueryNodes[0].node.ID
|
||||||
|
db, _ := newNodeDB("", Version, self)
|
||||||
|
defer db.close()
|
||||||
|
|
||||||
|
// Insert a batch of nodes for querying
|
||||||
|
for i, seed := range nodeDBSeedQueryNodes {
|
||||||
|
if err := db.updateNode(seed.node); err != nil {
|
||||||
|
t.Fatalf("node %d: failed to insert: %v", i, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Retrieve the entire batch and check that self was evacuated
|
||||||
|
seeds := db.querySeeds(2 * len(nodeDBSeedQueryNodes))
|
||||||
|
if len(seeds) != len(nodeDBSeedQueryNodes)-1 {
|
||||||
|
t.Errorf("seed count mismatch: have %v, want %v", len(seeds), len(nodeDBSeedQueryNodes)-1)
|
||||||
|
}
|
||||||
|
have := make(map[NodeID]struct{})
|
||||||
|
for _, seed := range seeds {
|
||||||
|
have[seed.ID] = struct{}{}
|
||||||
|
}
|
||||||
|
if _, ok := have[self]; ok {
|
||||||
|
t.Errorf("self not evacuated")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNodeDBPersistency(t *testing.T) {
|
func TestNodeDBPersistency(t *testing.T) {
|
||||||
root, err := ioutil.TempDir("", "nodedb-")
|
root, err := ioutil.TempDir("", "nodedb-")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -243,7 +269,7 @@ func TestNodeDBPersistency(t *testing.T) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Create a persistent database and store some values
|
// Create a persistent database and store some values
|
||||||
db, err := newNodeDB(filepath.Join("root", "database"), Version)
|
db, err := newNodeDB(filepath.Join(root, "database"), Version, NodeID{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to create persistent database: %v", err)
|
t.Fatalf("failed to create persistent database: %v", err)
|
||||||
}
|
}
|
||||||
@ -253,7 +279,7 @@ func TestNodeDBPersistency(t *testing.T) {
|
|||||||
db.close()
|
db.close()
|
||||||
|
|
||||||
// Reopen the database and check the value
|
// Reopen the database and check the value
|
||||||
db, err = newNodeDB(filepath.Join("root", "database"), Version)
|
db, err = newNodeDB(filepath.Join(root, "database"), Version, NodeID{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to open persistent database: %v", err)
|
t.Fatalf("failed to open persistent database: %v", err)
|
||||||
}
|
}
|
||||||
@ -263,7 +289,7 @@ func TestNodeDBPersistency(t *testing.T) {
|
|||||||
db.close()
|
db.close()
|
||||||
|
|
||||||
// Change the database version and check flush
|
// Change the database version and check flush
|
||||||
db, err = newNodeDB(filepath.Join("root", "database"), Version+1)
|
db, err = newNodeDB(filepath.Join(root, "database"), Version+1, NodeID{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to open persistent database: %v", err)
|
t.Fatalf("failed to open persistent database: %v", err)
|
||||||
}
|
}
|
||||||
@ -300,7 +326,7 @@ var nodeDBExpirationNodes = []struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestNodeDBExpiration(t *testing.T) {
|
func TestNodeDBExpiration(t *testing.T) {
|
||||||
db, _ := newNodeDB("", Version)
|
db, _ := newNodeDB("", Version, NodeID{})
|
||||||
defer db.close()
|
defer db.close()
|
||||||
|
|
||||||
// Add all the test nodes and set their last pong time
|
// Add all the test nodes and set their last pong time
|
||||||
@ -323,3 +349,34 @@ func TestNodeDBExpiration(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNodeDBSelfExpiration(t *testing.T) {
|
||||||
|
// Find a node in the tests that shouldn't expire, and assign it as self
|
||||||
|
var self NodeID
|
||||||
|
for _, node := range nodeDBExpirationNodes {
|
||||||
|
if !node.exp {
|
||||||
|
self = node.node.ID
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
db, _ := newNodeDB("", Version, self)
|
||||||
|
defer db.close()
|
||||||
|
|
||||||
|
// Add all the test nodes and set their last pong time
|
||||||
|
for i, seed := range nodeDBExpirationNodes {
|
||||||
|
if err := db.updateNode(seed.node); err != nil {
|
||||||
|
t.Fatalf("node %d: failed to insert: %v", i, err)
|
||||||
|
}
|
||||||
|
if err := db.updateLastPong(seed.node.ID, seed.pong); err != nil {
|
||||||
|
t.Fatalf("node %d: failed to update pong: %v", i, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Expire the nodes and make sure self has been evacuated too
|
||||||
|
if err := db.expireNodes(); err != nil {
|
||||||
|
t.Fatalf("failed to expire nodes: %v", err)
|
||||||
|
}
|
||||||
|
node := db.node(self)
|
||||||
|
if node != nil {
|
||||||
|
t.Errorf("self not evacuated")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -68,10 +68,10 @@ type bucket struct {
|
|||||||
|
|
||||||
func newTable(t transport, ourID NodeID, ourAddr *net.UDPAddr, nodeDBPath string) *Table {
|
func newTable(t transport, ourID NodeID, ourAddr *net.UDPAddr, nodeDBPath string) *Table {
|
||||||
// If no node database was given, use an in-memory one
|
// If no node database was given, use an in-memory one
|
||||||
db, err := newNodeDB(nodeDBPath, Version)
|
db, err := newNodeDB(nodeDBPath, Version, ourID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.V(logger.Warn).Infoln("Failed to open node database:", err)
|
glog.V(logger.Warn).Infoln("Failed to open node database:", err)
|
||||||
db, _ = newNodeDB("", Version)
|
db, _ = newNodeDB("", Version, ourID)
|
||||||
}
|
}
|
||||||
tab := &Table{
|
tab := &Table{
|
||||||
net: t,
|
net: t,
|
||||||
|
29
rpc/api.go
29
rpc/api.go
@ -6,6 +6,7 @@ import (
|
|||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/ethereum/go-ethereum/core/vm"
|
||||||
"github.com/ethereum/go-ethereum/crypto"
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/ethereum/go-ethereum/logger/glog"
|
"github.com/ethereum/go-ethereum/logger/glog"
|
||||||
@ -158,16 +159,16 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
|
|||||||
v := api.xethAtStateNum(args.BlockNumber).CodeAtBytes(args.Address)
|
v := api.xethAtStateNum(args.BlockNumber).CodeAtBytes(args.Address)
|
||||||
*reply = newHexData(v)
|
*reply = newHexData(v)
|
||||||
|
|
||||||
// case "eth_sign":
|
case "eth_sign":
|
||||||
// args := new(NewSigArgs)
|
args := new(NewSigArgs)
|
||||||
// if err := json.Unmarshal(req.Params, &args); err != nil {
|
if err := json.Unmarshal(req.Params, &args); err != nil {
|
||||||
// return err
|
return err
|
||||||
// }
|
}
|
||||||
// v, err := api.xeth().Sign(args.From, args.Data, false)
|
v, err := api.xeth().Sign(args.From, args.Data, false)
|
||||||
// if err != nil {
|
if err != nil {
|
||||||
// return err
|
return err
|
||||||
// }
|
}
|
||||||
// *reply = v
|
*reply = v
|
||||||
|
|
||||||
case "eth_sendTransaction", "eth_transact":
|
case "eth_sendTransaction", "eth_transact":
|
||||||
args := new(NewTxArgs)
|
args := new(NewTxArgs)
|
||||||
@ -344,7 +345,6 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
|
|||||||
return NewNotImplementedError(req.Method)
|
return NewNotImplementedError(req.Method)
|
||||||
|
|
||||||
case "eth_compileSolidity":
|
case "eth_compileSolidity":
|
||||||
|
|
||||||
solc, _ := api.xeth().Solc()
|
solc, _ := api.xeth().Solc()
|
||||||
if solc == nil {
|
if solc == nil {
|
||||||
return NewNotAvailableError(req.Method, "solc (solidity compiler) not found")
|
return NewNotAvailableError(req.Method, "solc (solidity compiler) not found")
|
||||||
@ -562,6 +562,13 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
|
|||||||
|
|
||||||
case "eth_hashrate":
|
case "eth_hashrate":
|
||||||
*reply = newHexNum(api.xeth().HashRate())
|
*reply = newHexNum(api.xeth().HashRate())
|
||||||
|
case "ext_disasm":
|
||||||
|
args := new(SourceArgs)
|
||||||
|
if err := json.Unmarshal(req.Params, &args); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
*reply = vm.Disasm(common.FromHex(args.Source))
|
||||||
|
|
||||||
// case "eth_register":
|
// case "eth_register":
|
||||||
// // Placeholder for actual type
|
// // Placeholder for actual type
|
||||||
|
64
rpc/args.go
64
rpc/args.go
@ -166,45 +166,45 @@ type NewTxArgs struct {
|
|||||||
BlockNumber int64
|
BlockNumber int64
|
||||||
}
|
}
|
||||||
|
|
||||||
// type NewSigArgs struct {
|
type NewSigArgs struct {
|
||||||
// From string
|
From string
|
||||||
// Data string
|
Data string
|
||||||
// }
|
}
|
||||||
|
|
||||||
// func (args *NewSigArgs) UnmarshalJSON(b []byte) (err error) {
|
func (args *NewSigArgs) UnmarshalJSON(b []byte) (err error) {
|
||||||
// var obj []json.RawMessage
|
var obj []json.RawMessage
|
||||||
// var ext struct {
|
var ext struct {
|
||||||
// From string
|
From string
|
||||||
// Data string
|
Data string
|
||||||
// }
|
}
|
||||||
|
|
||||||
// // Decode byte slice to array of RawMessages
|
// Decode byte slice to array of RawMessages
|
||||||
// if err := json.Unmarshal(b, &obj); err != nil {
|
if err := json.Unmarshal(b, &obj); err != nil {
|
||||||
// return NewDecodeParamError(err.Error())
|
return NewDecodeParamError(err.Error())
|
||||||
// }
|
}
|
||||||
|
|
||||||
// // Check for sufficient params
|
// Check for sufficient params
|
||||||
// if len(obj) < 1 {
|
if len(obj) < 1 {
|
||||||
// return NewInsufficientParamsError(len(obj), 1)
|
return NewInsufficientParamsError(len(obj), 1)
|
||||||
// }
|
}
|
||||||
|
|
||||||
// // Decode 0th RawMessage to temporary struct
|
// Decode 0th RawMessage to temporary struct
|
||||||
// if err := json.Unmarshal(obj[0], &ext); err != nil {
|
if err := json.Unmarshal(obj[0], &ext); err != nil {
|
||||||
// return NewDecodeParamError(err.Error())
|
return NewDecodeParamError(err.Error())
|
||||||
// }
|
}
|
||||||
|
|
||||||
// if len(ext.From) == 0 {
|
if len(ext.From) == 0 {
|
||||||
// return NewValidationError("from", "is required")
|
return NewValidationError("from", "is required")
|
||||||
// }
|
}
|
||||||
|
|
||||||
// if len(ext.Data) == 0 {
|
if len(ext.Data) == 0 {
|
||||||
// return NewValidationError("data", "is required")
|
return NewValidationError("data", "is required")
|
||||||
// }
|
}
|
||||||
|
|
||||||
// args.From = ext.From
|
args.From = ext.From
|
||||||
// args.Data = ext.Data
|
args.Data = ext.Data
|
||||||
// return nil
|
return nil
|
||||||
// }
|
}
|
||||||
|
|
||||||
func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) {
|
func (args *NewTxArgs) UnmarshalJSON(b []byte) (err error) {
|
||||||
var obj []json.RawMessage
|
var obj []json.RawMessage
|
||||||
|
@ -32,10 +32,6 @@ func TestBcInvalidRLPTests(t *testing.T) {
|
|||||||
runBlockTestsInFile("files/BlockTests/bcInvalidRLPTest.json", []string{}, t)
|
runBlockTestsInFile("files/BlockTests/bcInvalidRLPTest.json", []string{}, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBcJSAPITests(t *testing.T) {
|
|
||||||
runBlockTestsInFile("files/BlockTests/bcJS_API_Test.json", []string{}, t)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestBcRPCAPITests(t *testing.T) {
|
func TestBcRPCAPITests(t *testing.T) {
|
||||||
runBlockTestsInFile("files/BlockTests/bcRPC_API_Test.json", []string{}, t)
|
runBlockTestsInFile("files/BlockTests/bcRPC_API_Test.json", []string{}, t)
|
||||||
}
|
}
|
||||||
|
@ -1,111 +0,0 @@
|
|||||||
{
|
|
||||||
"twoEqualUncle" : {
|
|
||||||
"blocks" : [
|
|
||||||
{
|
|
||||||
"blockHeader" : {
|
|
||||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"coinbase" : "0000000000000000000000000000000000000000",
|
|
||||||
"difficulty" : "131072",
|
|
||||||
"extraData" : "0x",
|
|
||||||
"gasLimit" : "99902343",
|
|
||||||
"gasUsed" : "21000",
|
|
||||||
"hash" : "4c533f45444cb163685e2fbe6a2590e9df706d68265c8a408901c0dc28d46a23",
|
|
||||||
"mixHash" : "87ec7508237058ad033ea901e37c2088d658ed44750467fdd9c684b6babdd75d",
|
|
||||||
"nonce" : "e1122a49842f7f50",
|
|
||||||
"number" : "1",
|
|
||||||
"parentHash" : "c592c9c7def5cf2f8725a456672e35ffe11e9d70a1b458a34e9ac5296cc66168",
|
|
||||||
"receiptTrie" : "eeceeeb4567b38e5b86275e3a36ac4ff55b9764b427714426710c3631a29011a",
|
|
||||||
"seedHash" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"stateRoot" : "0178d4488f358061cbf1a6086fa270e4a7d6ce54a26947eb84a5157251090124",
|
|
||||||
"timestamp" : "1425890331",
|
|
||||||
"transactionsTrie" : "f3eeb8b8f5145aa53b081fb23cb063460926206e586cecb50beefcd33ec51a8e",
|
|
||||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
|
|
||||||
},
|
|
||||||
"rlp" : "0xf90284f9021ba0c592c9c7def5cf2f8725a456672e35ffe11e9d70a1b458a34e9ac5296cc66168a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00178d4488f358061cbf1a6086fa270e4a7d6ce54a26947eb84a5157251090124a0f3eeb8b8f5145aa53b081fb23cb063460926206e586cecb50beefcd33ec51a8ea0eeceeeb4567b38e5b86275e3a36ac4ff55b9764b427714426710c3631a29011ab901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018405f463878252088454fd5c1b80a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a087ec7508237058ad033ea901e37c2088d658ed44750467fdd9c684b6babdd75d88e1122a49842f7f50f863f86180018404c4b43294095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba0d16be854df702c12898c9a2f39d51506ea463dee1628f4825813402496999b5da065254f5c97bd509965e36ad8c1acf0c3b79ae2e121530a28e19fd7830cd256b3c0",
|
|
||||||
"transactions" : [
|
|
||||||
{
|
|
||||||
"data" : "0x",
|
|
||||||
"gasLimit" : "80000050",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "0",
|
|
||||||
"r" : "0xd16be854df702c12898c9a2f39d51506ea463dee1628f4825813402496999b5d",
|
|
||||||
"s" : "0x65254f5c97bd509965e36ad8c1acf0c3b79ae2e121530a28e19fd7830cd256b3",
|
|
||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
|
||||||
"v" : "27",
|
|
||||||
"value" : "10"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"uncleHeaders" : [
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"blockHeader" : {
|
|
||||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"coinbase" : "0000000000000000000000000000000000000000",
|
|
||||||
"difficulty" : "131072",
|
|
||||||
"extraData" : "0x",
|
|
||||||
"gasLimit" : "99804806",
|
|
||||||
"gasUsed" : "21000",
|
|
||||||
"hash" : "de55eee1914b0b672cc07e14e401edf2efa597a87355d96abc8221d102a6b8f1",
|
|
||||||
"mixHash" : "a69431f3cc389924714f86189677d9c27ddfdae4430a872233b4e7cf31128b5c",
|
|
||||||
"nonce" : "8e9e518688f03a48",
|
|
||||||
"number" : "2",
|
|
||||||
"parentHash" : "4c533f45444cb163685e2fbe6a2590e9df706d68265c8a408901c0dc28d46a23",
|
|
||||||
"receiptTrie" : "3d08abeec9cf28f9a518de4c71ebbfc8021f18dec3ccd0a72ad1fc0f168339d4",
|
|
||||||
"seedHash" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"stateRoot" : "66120efd3d0e512866232ed57647a33055770ec98eeaddcdbbdedca49a69f9ca",
|
|
||||||
"timestamp" : "1425890359",
|
|
||||||
"transactionsTrie" : "e1db5609ec46993e1a28e2a6b3a08b3dedfa83e887f82226031617bc206933ae",
|
|
||||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
|
|
||||||
},
|
|
||||||
"rlp" : "0xf90284f9021ba04c533f45444cb163685e2fbe6a2590e9df706d68265c8a408901c0dc28d46a23a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a066120efd3d0e512866232ed57647a33055770ec98eeaddcdbbdedca49a69f9caa0e1db5609ec46993e1a28e2a6b3a08b3dedfa83e887f82226031617bc206933aea03d08abeec9cf28f9a518de4c71ebbfc8021f18dec3ccd0a72ad1fc0f168339d4b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000028405f2e6868252088454fd5c3780a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0a69431f3cc389924714f86189677d9c27ddfdae4430a872233b4e7cf31128b5c888e9e518688f03a48f863f86101018404c4b43294095e7baea6a6c7c4c2dfeb977efac326af552d870a801ca00e4a73c953cee6f1491875e2fafc50b8a9e3fbecfb180703de9d1725276eb0d6a0e58b7a6cf23780540e0beb4805f6107b533e9504457536c174a33d6fe59fdc15c0",
|
|
||||||
"transactions" : [
|
|
||||||
{
|
|
||||||
"data" : "0x",
|
|
||||||
"gasLimit" : "80000050",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "1",
|
|
||||||
"r" : "0x0e4a73c953cee6f1491875e2fafc50b8a9e3fbecfb180703de9d1725276eb0d6",
|
|
||||||
"s" : "0xe58b7a6cf23780540e0beb4805f6107b533e9504457536c174a33d6fe59fdc15",
|
|
||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
|
||||||
"v" : "28",
|
|
||||||
"value" : "10"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"uncleHeaders" : [
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"rlp" : "0xf906bef9021ba0de55eee1914b0b672cc07e14e401edf2efa597a87355d96abc8221d102a6b8f1a0c0bf38076f461c25d6812aa54f460b7a0234cdf290d98f6753ace80f206985ac940000000000000000000000000000000000000000a01daecd242890ad6311ac970368e1b60a7ea8d416c188fa5936f7417540063cfba0e920b203f54cf996c273190495c2eb25cabbf87babf5e1b27c475de4ee4e36fca0b0d9c46c2ccd51080abcc280710b6d63f8b541ca7d258a0246acadde0b172094b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000038405f169e48252088454fd5c4a80a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a080dc22f354186a974a1ec95f9afe79ca917d0cc53812d662dfbe69b637f691638877dbe7e6e80cd6d5f863f86102018404c4b43294095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba01674970389da7f54566d7e6c2500b43c79ae3224f070734031940c80766d95f9a02aec2f9d58a51981eca597c1ae60481470c81c9fa05ffc4970d3d02c33073b06f90438f90219a04c533f45444cb163685e2fbe6a2590e9df706d68265c8a408901c0dc28d46a23a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00178d4488f358061cbf1a6086fa270e4a7d6ce54a26947eb84a5157251090124a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000028405f2e686808454fd5c4a80a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0ebb7d3a141c8673b5ef482f5acb36aea9652d47b765564838e0115310101d91f887c7399a4215b2a2cf90219a04c533f45444cb163685e2fbe6a2590e9df706d68265c8a408901c0dc28d46a23a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a00178d4488f358061cbf1a6086fa270e4a7d6ce54a26947eb84a5157251090124a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000028405f2e686808454fd5c4a80a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a0ebb7d3a141c8673b5ef482f5acb36aea9652d47b765564838e0115310101d91f887c7399a4215b2a2c"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"genesisBlockHeader" : {
|
|
||||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1",
|
|
||||||
"difficulty" : "131072",
|
|
||||||
"extraData" : "0x42",
|
|
||||||
"gasLimit" : "100000000",
|
|
||||||
"gasUsed" : "0",
|
|
||||||
"hash" : "268dce55e621352eae62d48eaa3167a065931881b73bf11f4a2f0a37fba40731",
|
|
||||||
"mixHash" : "47728da86b0fd331e6739efa5122a1547056bf54086e8ff0985d19795a9b06d2",
|
|
||||||
"nonce" : "cf08f66f929ad29f",
|
|
||||||
"number" : "0",
|
|
||||||
"parentHash" : "0000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"seedHash" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"stateRoot" : "7dba07d6b448a186e9612e5f737d1c909dce473e53199901a302c00646d523c1",
|
|
||||||
"timestamp" : "1422494849",
|
|
||||||
"transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
|
|
||||||
},
|
|
||||||
"pre" : {
|
|
||||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
|
||||||
"balance" : "10000000000000",
|
|
||||||
"code" : "0x",
|
|
||||||
"nonce" : "0",
|
|
||||||
"storage" : {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,250 +0,0 @@
|
|||||||
{
|
|
||||||
"JS_API_Tests" : {
|
|
||||||
"blocks" : [
|
|
||||||
{
|
|
||||||
"transactions" : [
|
|
||||||
{
|
|
||||||
"data" : "0x60406103ca600439600451602451336000819055506000600481905550816001819055508060028190555042600581905550336003819055505050610381806100496000396000f30060003560e060020a9004806343d726d61461004257806391b7f5ed14610050578063d686f9ee14610061578063f5bade661461006f578063fcfff16f1461008057005b61004a6101de565b60006000f35b61005b6004356100bf565b60006000f35b610069610304565b60006000f35b61007a60043561008e565b60006000f35b6100886100f0565b60006000f35b600054600160a060020a031633600160a060020a031614156100af576100b4565b6100bc565b806001819055505b50565b600054600160a060020a031633600160a060020a031614156100e0576100e5565b6100ed565b806002819055505b50565b600054600160a060020a031633600160a060020a031614806101255750600354600160a060020a031633600160a060020a0316145b61012e57610161565b60016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a16101dc565b60045460011480610173575060015434105b6101b85760016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a142600581905550336003819055506101db565b33600160a060020a03166000346000600060006000848787f16101d757005b5050505b5b565b60006004546000146101ef576101f4565b610301565b600054600160a060020a031633600160a060020a031614801561022c5750600054600160a060020a0316600354600160a060020a0316145b61023557610242565b6000600481905550610301565b600354600160a060020a031633600160a060020a03161461026257610300565b600554420360025402905060015481116102c757600354600160a060020a0316600082600154036000600060006000848787f161029b57005b505050600054600160a060020a03166000826000600060006000848787f16102bf57005b5050506102ee565b600054600160a060020a031660006001546000600060006000848787f16102ea57005b5050505b60006004819055506000546003819055505b5b50565b6000600054600160a060020a031633600160a060020a031614156103275761032c565b61037e565b600554420360025402905060015481116103455761037d565b600054600160a060020a031660006001546000600060006000848787f161036857005b50505060006004819055506000546003819055505b5b505600000000000000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000023",
|
|
||||||
"gasLimit" : "600000",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "0",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"to" : "",
|
|
||||||
"value" : "100000"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"uncleHeaders" : [
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"transactions" : [
|
|
||||||
{
|
|
||||||
"data" : "",
|
|
||||||
"gasLimit" : "314159",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "1",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
|
||||||
"value" : "10"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"uncleHeaders" : [
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"transactions" : [
|
|
||||||
{
|
|
||||||
"data" : "0xfcfff16f",
|
|
||||||
"gasLimit" : "600000",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "2",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"to" : "6295ee1b4f6dd65047762f924ecd367c17eabf8f",
|
|
||||||
"value" : "0x42"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"uncleHeaders" : [
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"transactions" : [
|
|
||||||
{
|
|
||||||
"data" : "",
|
|
||||||
"gasLimit" : "314159",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "3",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
|
||||||
"value" : "10"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"uncleHeaders" : [
|
|
||||||
{
|
|
||||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"coinbase" : "a94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
|
||||||
"difficulty" : "131072",
|
|
||||||
"extraData" : "0x",
|
|
||||||
"gasLimit" : "3141592",
|
|
||||||
"gasUsed" : "0",
|
|
||||||
"hash" : "9de9879b6a81d1b6c4993c63c90a3c9d1e775f14572694778e828bc64972ae04",
|
|
||||||
"mixHash" : "b557f905d29ed0fca99d65d0adcce698dee97cf72a13c7cd8d7a7826b8eee770",
|
|
||||||
"nonce" : "18a524c1790fa83b",
|
|
||||||
"number" : "2",
|
|
||||||
"parentHash" : "6134fc6b5d99ee03c4aab1592640f6f9dcbc850668d75d631aee34989b938fae",
|
|
||||||
"receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"stateRoot" : "ff640b30d613c35dad43e3693329e1b1ee6350f989cf46a288025a1cbfdab9cd",
|
|
||||||
"timestamp" : "0x54c98c82",
|
|
||||||
"transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"coinbase" : "bcde5374fce5edbc8e2a8697c15331677e6ebf0b",
|
|
||||||
"difficulty" : "131072",
|
|
||||||
"extraData" : "0x",
|
|
||||||
"gasLimit" : "3141592",
|
|
||||||
"gasUsed" : "0",
|
|
||||||
"hash" : "9de9879b6a81d1b6c4993c63c90a3c9d1e775f14572694778e828bc64972ae04",
|
|
||||||
"mixHash" : "b557f905d29ed0fca99d65d0adcce698dee97cf72a13c7cd8d7a7826b8eee770",
|
|
||||||
"nonce" : "18a524c1790fa83b",
|
|
||||||
"number" : "2",
|
|
||||||
"parentHash" : "6134fc6b5d99ee03c4aab1592640f6f9dcbc850668d75d631aee34989b938fae",
|
|
||||||
"receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"stateRoot" : "ff640b30d613c35dad43e3693329e1b1ee6350f989cf46a288025a1cbfdab9cd",
|
|
||||||
"timestamp" : "0x54c98c82",
|
|
||||||
"transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"transactions" : [
|
|
||||||
{
|
|
||||||
"data" : "",
|
|
||||||
"gasLimit" : "314159",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "4",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
|
||||||
"value" : "10"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"uncleHeaders" : [
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"transactions" : [
|
|
||||||
{
|
|
||||||
"data" : "",
|
|
||||||
"gasLimit" : "314159",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "5",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
|
||||||
"value" : "10"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"uncleHeaders" : [
|
|
||||||
{
|
|
||||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"coinbase" : "bcde5374fce5edbc8e2a8697c15331677e6ebf0b",
|
|
||||||
"difficulty" : "131072",
|
|
||||||
"extraData" : "0x",
|
|
||||||
"gasLimit" : "314159",
|
|
||||||
"gasUsed" : "0",
|
|
||||||
"hash" : "9de9879b6a81d1b6c4993c63c90a3c9d1e775f14572694778e828bc64972ae04",
|
|
||||||
"mixHash" : "b557f905d29ed0fca99d65d0adcce698dee97cf72a13c7cd8d7a7826b8eee770",
|
|
||||||
"nonce" : "18a524c1790fa83b",
|
|
||||||
"number" : "2",
|
|
||||||
"parentHash" : "6134fc6b5d99ee03c4aab1592640f6f9dcbc850668d75d631aee34989b938fae",
|
|
||||||
"receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"stateRoot" : "ff640b30d613c35dad43e3693329e1b1ee6350f989cf46a288025a1cbfdab9cd",
|
|
||||||
"timestamp" : "0x54c98c82",
|
|
||||||
"transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"transactions" : [
|
|
||||||
{
|
|
||||||
"data" : "",
|
|
||||||
"gasLimit" : "314159",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "6",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
|
||||||
"value" : "10"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"uncleHeaders" : [
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"transactions" : [
|
|
||||||
{
|
|
||||||
"data" : "",
|
|
||||||
"gasLimit" : "314159",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "7",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
|
||||||
"value" : "10"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"uncleHeaders" : [
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"transactions" : [
|
|
||||||
{
|
|
||||||
"data" : "",
|
|
||||||
"gasLimit" : "314159",
|
|
||||||
"gasPrice" : "1",
|
|
||||||
"nonce" : "8",
|
|
||||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
|
||||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
|
||||||
"value" : "10"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"uncleHeaders" : [
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"expect" : {
|
|
||||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
|
||||||
"balance" : "70"
|
|
||||||
},
|
|
||||||
"6295ee1b4f6dd65047762f924ecd367c17eabf8f" : {
|
|
||||||
"storage" : {
|
|
||||||
"0x" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
|
||||||
"0x01" : "0x42",
|
|
||||||
"0x02" : "0x23",
|
|
||||||
"0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
|
||||||
"0x04" : "0x01",
|
|
||||||
"0x05" : "0x55114a49"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"genesisBlockHeader" : {
|
|
||||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1",
|
|
||||||
"difficulty" : "0x020000",
|
|
||||||
"extraData" : "0x42",
|
|
||||||
"gasLimit" : "0x2fefd8",
|
|
||||||
"gasUsed" : "0x",
|
|
||||||
"hash" : "fd14b310ae11a0c7676efe909a17e41ad02c6844dbf78cd63e3ef564b48c2313",
|
|
||||||
"mixHash" : "a966ec2638f836ff19e02c51cc83266e5e54047e2c5d238b93dc1806c788890e",
|
|
||||||
"nonce" : "4fd18ffeb816cfde",
|
|
||||||
"number" : "0x",
|
|
||||||
"parentHash" : "0000000000000000000000000000000000000000000000000000000000000000",
|
|
||||||
"receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"stateRoot" : "e1a3750b19ae018e0179d9e5f2ab65af3afe10b15e1754f85f8324b4ba38fe9f",
|
|
||||||
"timestamp" : "0x54c98c81",
|
|
||||||
"transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
|
|
||||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
|
|
||||||
},
|
|
||||||
"genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0e1a3750b19ae018e0179d9e5f2ab65af3afe10b15e1754f85f8324b4ba38fe9fa056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0a966ec2638f836ff19e02c51cc83266e5e54047e2c5d238b93dc1806c788890e884fd18ffeb816cfdec0c0",
|
|
||||||
"pre" : {
|
|
||||||
"6295ee1b4f6dd65047762f924ecd367c17eabf8f" : {
|
|
||||||
"balance" : "0x0186a0",
|
|
||||||
"code" : "0x60003560e060020a9004806343d726d61461004257806391b7f5ed14610050578063d686f9ee14610061578063f5bade661461006f578063fcfff16f1461008057005b61004a6101de565b60006000f35b61005b6004356100bf565b60006000f35b610069610304565b60006000f35b61007a60043561008e565b60006000f35b6100886100f0565b60006000f35b600054600160a060020a031633600160a060020a031614156100af576100b4565b6100bc565b806001819055505b50565b600054600160a060020a031633600160a060020a031614156100e0576100e5565b6100ed565b806002819055505b50565b600054600160a060020a031633600160a060020a031614806101255750600354600160a060020a031633600160a060020a0316145b61012e57610161565b60016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a16101dc565b60045460011480610173575060015434105b6101b85760016004819055507f59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a560006000a142600581905550336003819055506101db565b33600160a060020a03166000346000600060006000848787f16101d757005b5050505b5b565b60006004546000146101ef576101f4565b610301565b600054600160a060020a031633600160a060020a031614801561022c5750600054600160a060020a0316600354600160a060020a0316145b61023557610242565b6000600481905550610301565b600354600160a060020a031633600160a060020a03161461026257610300565b600554420360025402905060015481116102c757600354600160a060020a0316600082600154036000600060006000848787f161029b57005b505050600054600160a060020a03166000826000600060006000848787f16102bf57005b5050506102ee565b600054600160a060020a031660006001546000600060006000848787f16102ea57005b5050505b60006004819055506000546003819055505b5b50565b6000600054600160a060020a031633600160a060020a031614156103275761032c565b61037e565b600554420360025402905060015481116103455761037d565b600054600160a060020a031660006001546000600060006000848787f161036857005b50505060006004819055506000546003819055505b5b5056",
|
|
||||||
"nonce" : "0x",
|
|
||||||
"storage" : {
|
|
||||||
"0x" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
|
||||||
"0x01" : "0x42",
|
|
||||||
"0x02" : "0x23",
|
|
||||||
"0x03" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
|
||||||
"0x05" : "0x54c98c81"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
|
||||||
"balance" : "0x09184e72a000",
|
|
||||||
"code" : "0x",
|
|
||||||
"nonce" : "0x",
|
|
||||||
"storage" : {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
97
tests/files/KeyStoreTests/basic_tests.json
Normal file
97
tests/files/KeyStoreTests/basic_tests.json
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"test1": {
|
||||||
|
"json": {
|
||||||
|
"crypto" : {
|
||||||
|
"cipher" : "aes-128-ctr",
|
||||||
|
"cipherparams" : {
|
||||||
|
"iv" : "6087dab2f9fdbbfaddc31a909735c1e6"
|
||||||
|
},
|
||||||
|
"ciphertext" : "5318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46",
|
||||||
|
"kdf" : "pbkdf2",
|
||||||
|
"kdfparams" : {
|
||||||
|
"c" : 262144,
|
||||||
|
"dklen" : 32,
|
||||||
|
"prf" : "hmac-sha256",
|
||||||
|
"salt" : "ae3cd4e7013836a3df6bd7241b12db061dbe2c6785853cce422d148a624ce0bd"
|
||||||
|
},
|
||||||
|
"mac" : "517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2"
|
||||||
|
},
|
||||||
|
"id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6",
|
||||||
|
"version" : 3
|
||||||
|
},
|
||||||
|
"password": "testpassword",
|
||||||
|
"priv": "7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d"
|
||||||
|
},
|
||||||
|
"test2": {
|
||||||
|
"json": {
|
||||||
|
"crypto" : {
|
||||||
|
"cipher" : "aes-128-ctr",
|
||||||
|
"cipherparams" : {
|
||||||
|
"iv" : "83dbcc02d8ccb40e466191a123791e0e"
|
||||||
|
},
|
||||||
|
"ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c",
|
||||||
|
"kdf" : "scrypt",
|
||||||
|
"kdfparams" : {
|
||||||
|
"dklen" : 32,
|
||||||
|
"n" : 262144,
|
||||||
|
"r" : 1,
|
||||||
|
"p" : 8,
|
||||||
|
"salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19"
|
||||||
|
},
|
||||||
|
"mac" : "2103ac29920d71da29f15d75b4a16dbe95cfd7ff8faea1056c33131d846e3097"
|
||||||
|
},
|
||||||
|
"id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6",
|
||||||
|
"version" : 3
|
||||||
|
},
|
||||||
|
"password": "testpassword",
|
||||||
|
"priv": "7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d"
|
||||||
|
},
|
||||||
|
"python_generated_test_with_odd_iv": {
|
||||||
|
"json": {
|
||||||
|
"version": 3,
|
||||||
|
"crypto": {
|
||||||
|
"ciphertext": "ee75456c006b1e468133c5d2a916bacd3cf515ced4d9b021b5c59978007d1e87",
|
||||||
|
"version": 1,
|
||||||
|
"kdf": "pbkdf2",
|
||||||
|
"kdfparams": {
|
||||||
|
"dklen": 32,
|
||||||
|
"c": 262144,
|
||||||
|
"prf": "hmac-sha256",
|
||||||
|
"salt": "504490577620f64f43d73f29479c2cf0"
|
||||||
|
},
|
||||||
|
"mac": "196815708465de9af7504144a1360d08874fc3c30bb0e648ce88fbc36830d35d",
|
||||||
|
"cipherparams": {
|
||||||
|
"iv": "514ccc8c4fb3e60e5538e0cf1e27c233"
|
||||||
|
},
|
||||||
|
"cipher": "aes-128-ctr"
|
||||||
|
},
|
||||||
|
"id": "98d193c7-5174-4c7c-5345-c1daf95477b5"
|
||||||
|
},
|
||||||
|
"password": "foo",
|
||||||
|
"priv": "0101010101010101010101010101010101010101010101010101010101010101"
|
||||||
|
},
|
||||||
|
"evilnonce": {
|
||||||
|
"json": {
|
||||||
|
"version": 3,
|
||||||
|
"crypto": {
|
||||||
|
"ciphertext": "d69313b6470ac1942f75d72ebf8818a0d484ac78478a132ee081cd954d6bd7a9",
|
||||||
|
"cipherparams": {
|
||||||
|
"iv": "ffffffffffffffffffffffffffffffff"
|
||||||
|
},
|
||||||
|
"kdf": "pbkdf2",
|
||||||
|
"kdfparams": {
|
||||||
|
"dklen": 32,
|
||||||
|
"c": 262144,
|
||||||
|
"prf": "hmac-sha256",
|
||||||
|
"salt": "c82ef14476014cbf438081a42709e2ed"
|
||||||
|
},
|
||||||
|
"mac": "cf6bfbcc77142a22c4a908784b4a16f1023a1d0e2aff404c20158fa4f1587177",
|
||||||
|
"cipher": "aes-128-ctr",
|
||||||
|
"version": 1
|
||||||
|
},
|
||||||
|
"id": "abb67040-8dbe-0dad-fc39-2b082ef0ee5f"
|
||||||
|
},
|
||||||
|
"password": "bar",
|
||||||
|
"priv": "0202020202020202020202020202020202020202020202020202020202020202"
|
||||||
|
}
|
||||||
|
}
|
@ -467,6 +467,472 @@
|
|||||||
"value" : "0x0a"
|
"value" : "0x0a"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"callOutput1" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526000600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x02"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "7b27c1a486cad63a429086b85416cb2d8cebb0c159a7f73be018c30de2ecdf28",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526000600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callOutput2" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526000600060206000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x02"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "5e362b5144a434345036ebbd58cfe65a597cdcff2fa24ec661c7a09ca608ec0f",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526000600060206000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callOutput3" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526020600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x02"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "0152447aa19bc18ad06b4c1ca4fa9f163d9f8c258925d9e1a38936588847a5ea",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526020600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callOutput3Fail" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526020600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x016001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "b5f1a90133ac8a91c55acfe81e3c9fdda619081ae5251e160214090245bbebb9",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526020600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x016001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callOutput3partial" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6600052600a600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x02"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "a69a06073030c243674bff83b6b69e44cf1e5c3922a7bbb8e0f016b2bf16c67a",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6600052600a600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callOutput3partialFail" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6600052600a600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x016001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "24d198fb3b2d5fc65c0f331a129e013dedc29a4af9df00b77b6011cad25ee975",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6600052600a600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f150600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x016001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"callWithHighValue" : {
|
"callWithHighValue" : {
|
||||||
"env" : {
|
"env" : {
|
||||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
@ -772,6 +1238,468 @@
|
|||||||
"value" : "0x00"
|
"value" : "0x00"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"callcodeOutput1" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526000600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "6803680f0aea1573dfdde914548a5e1d7661b182d676cdb73f4c2bc7d348aae8",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526000600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callcodeOutput2" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526000600060206000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "78fe48479cfd9f57c8ab5937a0805d4d04d40823c291fcc4adf0c9b61f6fc0d9",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526000600060206000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callcodeOutput3" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526020600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "b737505a15b9bfdb788595646aeec43d1827feb376cdc56aefc9081cb7f6e8a7",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526020600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callcodeOutput3Fail" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526020600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x016001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "fd3a6c8827305178fad93c3268903e7e3a04fe1347e56c3a05a20616ca4acd3f",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b66000526020600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x016001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callcodeOutput3partial" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6600052600a600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "5ea923fe41814229d0076dce8fe91703070eddef323b233e43901a9bd8cafcbc",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6600052600a600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x6001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"callcodeOutput3partialFail" : {
|
||||||
|
"env" : {
|
||||||
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
"currentDifficulty" : "0x0100",
|
||||||
|
"currentGasLimit" : "0x0f4240",
|
||||||
|
"currentNumber" : "0x00",
|
||||||
|
"currentTimestamp" : "0x01",
|
||||||
|
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
},
|
||||||
|
"logs" : [
|
||||||
|
],
|
||||||
|
"out" : "0x",
|
||||||
|
"post" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a76586a0",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6600052600a600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
"0x00" : "0x5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||||
|
"balance" : "0x00",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7627960",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x01",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x016001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postStateRoot" : "db077b8446cf6ccba2575d27f2656e89ed494a6fa5fa8302dba207ee16af8b56",
|
||||||
|
"pre" : {
|
||||||
|
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x7f5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6600052600a600060006000600073aaae7baea6a6c7c4c2dfeb977efac326af552d8761c350f250600051600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"aaae7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||||
|
"balance" : "0x0de0b6b3a7640000",
|
||||||
|
"code" : "0x016001600101600055",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"storage" : {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transaction" : {
|
||||||
|
"data" : "",
|
||||||
|
"gasLimit" : "0x0f4240",
|
||||||
|
"gasPrice" : "0x00",
|
||||||
|
"nonce" : "0x00",
|
||||||
|
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||||
|
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||||
|
"value" : "0x0186a0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"callcodeWithHighValue" : {
|
"callcodeWithHighValue" : {
|
||||||
"env" : {
|
"env" : {
|
||||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||||
|
File diff suppressed because one or more lines are too long
@ -2,7 +2,6 @@ package vm
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"io/ioutil"
|
|
||||||
"math/big"
|
"math/big"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -373,21 +372,16 @@ func TestWallet(t *testing.T) {
|
|||||||
RunVmTest(fn, t)
|
RunVmTest(fn, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRandom(t *testing.T) {
|
func TestStateTestsRandom(t *testing.T) {
|
||||||
// TODO: fix JSON EOF bug and unskip
|
fns, _ := filepath.Glob("../files/StateTests/RandomTests/*")
|
||||||
t.Skip()
|
for _, fn := range fns {
|
||||||
fileNames := make([]string, 1024)
|
RunVmTest(fn, t)
|
||||||
fileInfos, err := ioutil.ReadDir("../files/StateTests/RandomTests")
|
}
|
||||||
if err != nil {
|
}
|
||||||
t.Errorf("Could not read StateTests/RandomTests dir: %v", err)
|
|
||||||
return
|
func TestVMRandom(t *testing.T) {
|
||||||
|
fns, _ := filepath.Glob("../files/VMTests/RandomTests/*")
|
||||||
|
for _, fn := range fns {
|
||||||
|
RunVmTest(fn, t)
|
||||||
}
|
}
|
||||||
for _, fileInfo := range fileInfos {
|
|
||||||
fileNames = append(fileNames, fileInfo.Name())
|
|
||||||
}
|
|
||||||
|
|
||||||
//for _, f := range fileNames {
|
|
||||||
path := filepath.Join("../files/StateTests/RandomTests/", fileNames[0])
|
|
||||||
RunVmTest(path, t)
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user