Merge branch 'develop' into downloader-proto
This commit is contained in:
commit
3a51c3b584
|
@ -50,8 +50,8 @@ Automated (dev) builds
|
|||
* [Docker](https://registry.hub.docker.com/u/ethereum/client-go/)
|
||||
* [OS X](http://build.ethdev.com/builds/OSX%20Go%20develop%20branch/Mist-OSX-latest.dmg)
|
||||
* Ubuntu
|
||||
[trusty](https://build.ethdev.com/builds/Linux%20Go%20develop%20deb%20i386-trusty/latest/ethereum-cli_0.9.0%2B192SNAPSHOT20150314224122trusty-0ubuntu1_i386.deb) |
|
||||
[utopic](https://build.ethdev.com/builds/Linux%20Go%20develop%20deb%20i386-utopic/latest/ethereum-cli_0.9.0%2B194SNAPSHOT20150314224124utopic-0ubuntu1_i386.deb)
|
||||
[trusty](https://build.ethdev.com/builds/Linux%20Go%20develop%20deb%20i386-trusty/latest/) |
|
||||
[utopic](https://build.ethdev.com/builds/Linux%20Go%20develop%20deb%20i386-utopic/latest/)
|
||||
* [Windows] Coming soon™
|
||||
|
||||
Executables
|
||||
|
|
|
@ -11,13 +11,11 @@ import (
|
|||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/errs"
|
||||
"github.com/ethereum/go-ethereum/event"
|
||||
ethlogger "github.com/ethereum/go-ethereum/logger"
|
||||
"github.com/ethereum/go-ethereum/logger"
|
||||
"github.com/ethereum/go-ethereum/logger/glog"
|
||||
"github.com/ethereum/go-ethereum/pow"
|
||||
)
|
||||
|
||||
var plog = ethlogger.NewLogger("Blockpool")
|
||||
|
||||
var (
|
||||
// max number of block hashes sent in one request
|
||||
blockHashesBatchSize = 256
|
||||
|
@ -36,11 +34,13 @@ var (
|
|||
// timeout interval: max time allowed for peer without sending a block
|
||||
blocksTimeout = 60 * time.Second
|
||||
// timeout interval: max time allowed for best peer to remain idle (not send new block after sync complete)
|
||||
idleBestPeerTimeout = 120 * time.Second
|
||||
idleBestPeerTimeout = 60 * time.Second
|
||||
// duration of suspension after peer fatal error during which peer is not allowed to reconnect
|
||||
peerSuspensionInterval = 300 * time.Second
|
||||
// status is logged every statusUpdateInterval
|
||||
statusUpdateInterval = 3 * time.Second
|
||||
//
|
||||
nodeCacheSize = 1000
|
||||
)
|
||||
|
||||
// blockpool config, values default to constants
|
||||
|
@ -49,6 +49,7 @@ type Config struct {
|
|||
BlockBatchSize int
|
||||
BlocksRequestRepetition int
|
||||
BlocksRequestMaxIdleRounds int
|
||||
NodeCacheSize int
|
||||
BlockHashesRequestInterval time.Duration
|
||||
BlocksRequestInterval time.Duration
|
||||
BlockHashesTimeout time.Duration
|
||||
|
@ -74,17 +75,19 @@ var errorToString = map[int]string{
|
|||
ErrInvalidPoW: "Invalid PoW", // fatal
|
||||
ErrInsufficientChainInfo: "Insufficient chain info", // fatal
|
||||
ErrIdleTooLong: "Idle too long", // fatal
|
||||
ErrIncorrectTD: "Incorrect Total Difficulty", // fatal
|
||||
ErrIncorrectTD: "Incorrect Total Difficulty", // should be fatal, not now temporarily
|
||||
ErrUnrequestedBlock: "Unrequested block",
|
||||
}
|
||||
|
||||
// error severity
|
||||
func severity(code int) ethlogger.LogLevel {
|
||||
func severity(code int) logger.LogLevel {
|
||||
switch code {
|
||||
case ErrIncorrectTD:
|
||||
return logger.WarnLevel
|
||||
case ErrUnrequestedBlock:
|
||||
return ethlogger.WarnLevel
|
||||
return logger.WarnLevel
|
||||
default:
|
||||
return ethlogger.ErrorLevel
|
||||
return logger.ErrorLevel
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -120,6 +123,9 @@ func (self *Config) init() {
|
|||
if self.PeerSuspensionInterval == 0 {
|
||||
self.PeerSuspensionInterval = peerSuspensionInterval
|
||||
}
|
||||
if self.NodeCacheSize == 0 {
|
||||
self.NodeCacheSize = nodeCacheSize
|
||||
}
|
||||
if self.StatusUpdateInterval == 0 {
|
||||
self.StatusUpdateInterval = statusUpdateInterval
|
||||
}
|
||||
|
@ -171,6 +177,7 @@ type BlockPool struct {
|
|||
|
||||
nodeCache map[common.Hash]*node
|
||||
nodeCacheLock sync.RWMutex
|
||||
nodeCacheList []common.Hash
|
||||
|
||||
// waitgroup is used in tests to wait for result-critical routines
|
||||
// as well as in determining idle / syncing status
|
||||
|
@ -248,7 +255,7 @@ func (self *BlockPool) Start() {
|
|||
if (ev.Block.HeaderHash == common.Hash{}) {
|
||||
height = ev.Block.Header().Number
|
||||
}
|
||||
plog.DebugDetailf("ChainHeadEvent: height: %v, td: %v, hash: %s", height, td, hex(ev.Block.Hash()))
|
||||
glog.V(logger.Detail).Infof("ChainHeadEvent: height: %v, td: %v, hash: %s", height, td, hex(ev.Block.Hash()))
|
||||
self.setTD(td)
|
||||
self.peers.lock.Lock()
|
||||
|
||||
|
@ -262,11 +269,11 @@ func (self *BlockPool) Start() {
|
|||
self.peers.lock.Unlock()
|
||||
}
|
||||
case <-timer.C:
|
||||
plog.DebugDetailf("status:\n%v", self.Status())
|
||||
glog.V(logger.Detail).Infof("status:\n%v", self.Status())
|
||||
}
|
||||
}
|
||||
}()
|
||||
glog.V(ethlogger.Info).Infoln("Blockpool started")
|
||||
glog.V(logger.Info).Infoln("Blockpool started")
|
||||
}
|
||||
|
||||
func (self *BlockPool) Stop() {
|
||||
|
@ -279,7 +286,7 @@ func (self *BlockPool) Stop() {
|
|||
|
||||
self.lock.Unlock()
|
||||
|
||||
plog.Infoln("Stopping...")
|
||||
glog.V(logger.Info).Infoln("Stopping...")
|
||||
|
||||
self.tdSub.Unsubscribe()
|
||||
close(self.quit)
|
||||
|
@ -289,7 +296,7 @@ func (self *BlockPool) Stop() {
|
|||
self.pool = nil
|
||||
self.lock.Unlock()
|
||||
|
||||
plog.Infoln("Stopped")
|
||||
glog.V(logger.Info).Infoln("Stopped")
|
||||
}
|
||||
|
||||
// Wait blocks until active processes finish
|
||||
|
@ -301,7 +308,7 @@ func (self *BlockPool) Wait(t time.Duration) {
|
|||
}
|
||||
self.lock.Unlock()
|
||||
|
||||
plog.Infoln("Waiting for processes to complete...")
|
||||
glog.V(logger.Info).Infoln("Waiting for processes to complete...")
|
||||
w := make(chan bool)
|
||||
go func() {
|
||||
self.wg.Wait()
|
||||
|
@ -310,9 +317,9 @@ func (self *BlockPool) Wait(t time.Duration) {
|
|||
|
||||
select {
|
||||
case <-w:
|
||||
plog.Infoln("Processes complete")
|
||||
glog.V(logger.Info).Infoln("Processes complete")
|
||||
case <-time.After(t):
|
||||
plog.Warnf("Timeout")
|
||||
glog.V(logger.Warn).Infoln("Timeout")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -343,7 +350,7 @@ func (self *BlockPool) AddPeer(
|
|||
|
||||
// RemovePeer needs to be called when the peer disconnects
|
||||
func (self *BlockPool) RemovePeer(peerId string) {
|
||||
self.peers.removePeer(peerId)
|
||||
self.peers.removePeer(peerId, true)
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -383,7 +390,7 @@ func (self *BlockPool) AddBlockHashes(next func() (common.Hash, bool), peerId st
|
|||
hash, ok = next()
|
||||
bestpeer.lock.RLock()
|
||||
|
||||
plog.Debugf("AddBlockHashes: peer <%s> starting from [%s] (peer head: %s)", peerId, hex(bestpeer.parentHash), hex(bestpeer.currentBlockHash))
|
||||
glog.V(logger.Debug).Infof("AddBlockHashes: peer <%s> starting from [%s] (peer head: %s)", peerId, hex(bestpeer.parentHash), hex(bestpeer.currentBlockHash))
|
||||
|
||||
// first check if we are building the head section of a peer's chain
|
||||
if bestpeer.parentHash == hash {
|
||||
|
@ -400,48 +407,45 @@ func (self *BlockPool) AddBlockHashes(next func() (common.Hash, bool), peerId st
|
|||
*/
|
||||
headSection = true
|
||||
if entry := self.get(bestpeer.currentBlockHash); entry == nil {
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s) head section starting from [%s] ", peerId, hex(bestpeer.currentBlockHash), hex(bestpeer.parentHash))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s) head section starting from [%s] ", peerId, hex(bestpeer.currentBlockHash), hex(bestpeer.parentHash))
|
||||
// if head block is not yet in the pool, create entry and start node list for section
|
||||
self.nodeCacheLock.Lock()
|
||||
n := self.findOrCreateNode(bestpeer.currentBlockHash, peerId)
|
||||
n.block = bestpeer.currentBlock
|
||||
n.blockBy = peerId
|
||||
n.td = bestpeer.td
|
||||
self.nodeCacheLock.Unlock()
|
||||
|
||||
node := &node{
|
||||
hash: bestpeer.currentBlockHash,
|
||||
block: bestpeer.currentBlock,
|
||||
hashBy: peerId,
|
||||
blockBy: peerId,
|
||||
td: bestpeer.td,
|
||||
}
|
||||
// nodes is a list of nodes in one section ordered top-bottom (old to young)
|
||||
nodes = append(nodes, node)
|
||||
n++
|
||||
nodes = append(nodes, n)
|
||||
} else {
|
||||
// otherwise set child section iff found node is the root of a section
|
||||
// this is a possible scenario when a singleton head section was created
|
||||
// on an earlier occasion when this peer or another with the same block was best peer
|
||||
if entry.node == entry.section.bottom {
|
||||
child = entry.section
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s>: connects to child section root %s", peerId, hex(bestpeer.currentBlockHash))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s>: connects to child section root %s", peerId, hex(bestpeer.currentBlockHash))
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// otherwise : we are not building the head section of the peer
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s) section starting from [%s] ", peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s) section starting from [%s] ", peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
}
|
||||
// the switch channel signals peerswitch event
|
||||
switchC := bestpeer.switchC
|
||||
bestpeer.lock.RUnlock()
|
||||
|
||||
// iterate over hashes coming from peer (first round we have hash set above)
|
||||
LOOP:
|
||||
for ; ok; hash, ok = next() {
|
||||
|
||||
n++
|
||||
select {
|
||||
case <-self.quit:
|
||||
// global quit for blockpool
|
||||
return
|
||||
|
||||
case <-switchC:
|
||||
case <-bestpeer.switchC:
|
||||
// if the peer is demoted, no more hashes read
|
||||
plog.DebugDetailf("AddBlockHashes: demoted peer <%s> (head: %s)", peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: demoted peer <%s> (head: %s)", peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
peerswitch = true
|
||||
break LOOP
|
||||
default:
|
||||
|
@ -450,9 +454,9 @@ LOOP:
|
|||
// if we reach the blockchain we stop reading further blockhashes
|
||||
if self.hasBlock(hash) {
|
||||
// check if known block connecting the downloaded chain to our blockchain
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s) found block %s in the blockchain", peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s) found block %s in the blockchain", peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
if len(nodes) == 1 {
|
||||
plog.DebugDetailf("AddBlockHashes: singleton section pushed to blockchain peer <%s> (head: %s) found block %s in the blockchain", peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: singleton section pushed to blockchain peer <%s> (head: %s) found block %s in the blockchain", peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
|
||||
// create new section if needed and push it to the blockchain
|
||||
sec = self.newSection(nodes)
|
||||
|
@ -470,7 +474,7 @@ LOOP:
|
|||
and td together with blockBy are recorded on the node
|
||||
*/
|
||||
if len(nodes) == 0 && child != nil {
|
||||
plog.DebugDetailf("AddBlockHashes: child section [%s] pushed to blockchain peer <%s> (head: %s) found block %s in the blockchain", sectionhex(child), peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: child section [%s] pushed to blockchain peer <%s> (head: %s) found block %s in the blockchain", sectionhex(child), peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
|
||||
child.addSectionToBlockChain(bestpeer)
|
||||
}
|
||||
|
@ -490,23 +494,21 @@ LOOP:
|
|||
response to hashes request. Note that by providing <from> we can link sections
|
||||
without having to wait for the root block of the child section to arrive, so it allows for superior performance.
|
||||
*/
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s) found head block [%s] as root of connecting child section [%s] skipping", peerId, hex(bestpeer.currentBlockHash), hex(hash), sectionhex(entry.section))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s) found head block [%s] as root of connecting child section [%s] skipping", peerId, hex(bestpeer.currentBlockHash), hex(hash), sectionhex(entry.section))
|
||||
// record the entry's chain section as child section
|
||||
child = entry.section
|
||||
continue LOOP
|
||||
}
|
||||
// otherwise record entry's chain section as parent connecting it to the pool
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s) found block [%s] in section [%s]. Connected to pool.", peerId, hex(bestpeer.currentBlockHash), hex(hash), sectionhex(entry.section))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s) found block [%s] in section [%s]. Connected to pool.", peerId, hex(bestpeer.currentBlockHash), hex(hash), sectionhex(entry.section))
|
||||
parent = entry.section
|
||||
break LOOP
|
||||
}
|
||||
|
||||
// finally if node for block hash does not exist, create it and append node to section nodes
|
||||
node := &node{
|
||||
hash: hash,
|
||||
hashBy: peerId,
|
||||
}
|
||||
nodes = append(nodes, node)
|
||||
self.nodeCacheLock.Lock()
|
||||
nodes = append(nodes, self.findOrCreateNode(hash, peerId))
|
||||
self.nodeCacheLock.Unlock()
|
||||
} //for
|
||||
|
||||
/*
|
||||
|
@ -518,13 +520,13 @@ LOOP:
|
|||
*/
|
||||
self.chainLock.Lock()
|
||||
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s): %v nodes in new section", peerId, hex(bestpeer.currentBlockHash), len(nodes))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s): %v nodes in new section", peerId, hex(bestpeer.currentBlockHash), len(nodes))
|
||||
/*
|
||||
Handle forks where connecting node is mid-section by splitting section at fork.
|
||||
No splitting needed if connecting node is head of a section.
|
||||
*/
|
||||
if parent != nil && entry != nil && entry.node != parent.top && len(nodes) > 0 {
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s): fork after %s", peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s): fork after %s", peerId, hex(bestpeer.currentBlockHash), hex(hash))
|
||||
|
||||
self.splitSection(parent, entry)
|
||||
|
||||
|
@ -537,10 +539,7 @@ LOOP:
|
|||
sec = self.linkSections(nodes, parent, child)
|
||||
|
||||
if sec != nil {
|
||||
self.status.lock.Lock()
|
||||
self.status.values.BlockHashes += len(nodes)
|
||||
self.status.lock.Unlock()
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s): section [%s] created", peerId, hex(bestpeer.currentBlockHash), sectionhex(sec))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s): section [%s] created", peerId, hex(bestpeer.currentBlockHash), sectionhex(sec))
|
||||
}
|
||||
|
||||
self.chainLock.Unlock()
|
||||
|
@ -554,10 +553,8 @@ LOOP:
|
|||
In this case no activation should happen
|
||||
*/
|
||||
if parent != nil && !peerswitch {
|
||||
bestpeer.lock.RLock()
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s): parent section [%s]", peerId, hex(bestpeer.currentBlockHash), sectionhex(parent))
|
||||
self.activateChain(parent, bestpeer, bestpeer.switchC, nil)
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s): parent section [%s]", peerId, hex(bestpeer.currentBlockHash), sectionhex(parent))
|
||||
bestpeer.lock.RUnlock()
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -578,10 +575,10 @@ LOOP:
|
|||
Otherwise no way to check if it arrived.
|
||||
*/
|
||||
bestpeer.requestBlockHashes(sec.bottom.hash)
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s): start requesting blocks for section [%s]", peerId, hex(bestpeer.currentBlockHash), sectionhex(sec))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s): start requesting blocks for section [%s]", peerId, hex(bestpeer.currentBlockHash), sectionhex(sec))
|
||||
sec.activate(bestpeer)
|
||||
} else {
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s) no longer best: delay requesting blocks for section [%s]", peerId, hex(bestpeer.currentBlockHash), sectionhex(sec))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s) no longer best: delay requesting blocks for section [%s]", peerId, hex(bestpeer.currentBlockHash), sectionhex(sec))
|
||||
sec.deactivate()
|
||||
}
|
||||
}
|
||||
|
@ -589,7 +586,7 @@ LOOP:
|
|||
// If we are processing peer's head section, signal it to headSection process that it is created.
|
||||
|
||||
if headSection {
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s) head section registered on head section process", peerId, hex(bestpeer.currentBlockHash))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s) head section registered on head section process", peerId, hex(bestpeer.currentBlockHash))
|
||||
|
||||
var headSec *section
|
||||
switch {
|
||||
|
@ -601,7 +598,7 @@ LOOP:
|
|||
headSec = parent
|
||||
}
|
||||
if !peerswitch {
|
||||
plog.DebugDetailf("AddBlockHashes: peer <%s> (head: %s) head section [%s] created signalled to head section process", peerId, hex(bestpeer.currentBlockHash), sectionhex(headSec))
|
||||
glog.V(logger.Detail).Infof("AddBlockHashes: peer <%s> (head: %s) head section [%s] created signalled to head section process", peerId, hex(bestpeer.currentBlockHash), sectionhex(headSec))
|
||||
bestpeer.headSectionC <- headSec
|
||||
}
|
||||
}
|
||||
|
@ -635,6 +632,7 @@ func (self *BlockPool) AddBlock(block *types.Block, peerId string) {
|
|||
if sender == nil {
|
||||
return
|
||||
}
|
||||
sender.lock.Lock()
|
||||
tdFromCurrentHead, currentBlockHash := sender.setChainInfoFromBlock(block)
|
||||
|
||||
entry := self.get(hash)
|
||||
|
@ -643,7 +641,7 @@ func (self *BlockPool) AddBlock(block *types.Block, peerId string) {
|
|||
requested 5 hashes from both A & B. A responds sooner then B, process blocks. Close section.
|
||||
delayed B sends you block ... UNREQUESTED. Blocked
|
||||
if entry == nil {
|
||||
plog.DebugDetailf("AddBlock: unrequested block %s received from peer <%s> (head: %s)", hex(hash), peerId, hex(sender.currentBlockHash))
|
||||
glog.V(logger.Detail).Infof("AddBlock: unrequested block %s received from peer <%s> (head: %s)", hex(hash), peerId, hex(sender.currentBlockHash))
|
||||
sender.addError(ErrUnrequestedBlock, "%x", hash)
|
||||
|
||||
self.status.lock.Lock()
|
||||
|
@ -656,28 +654,17 @@ func (self *BlockPool) AddBlock(block *types.Block, peerId string) {
|
|||
var bnode *node
|
||||
if entry == nil {
|
||||
self.nodeCacheLock.Lock()
|
||||
bnode, _ = self.nodeCache[hash]
|
||||
if bnode == nil {
|
||||
bnode = &node{
|
||||
hash: currentBlockHash,
|
||||
block: block,
|
||||
hashBy: peerId,
|
||||
blockBy: peerId,
|
||||
td: tdFromCurrentHead,
|
||||
}
|
||||
self.nodeCache[hash] = bnode
|
||||
}
|
||||
bnode = self.findOrCreateNode(currentBlockHash, peerId)
|
||||
self.nodeCacheLock.Unlock()
|
||||
} else {
|
||||
bnode = entry.node
|
||||
}
|
||||
|
||||
bnode.lock.Lock()
|
||||
defer bnode.lock.Unlock()
|
||||
|
||||
// check if block already received
|
||||
if bnode.block != nil {
|
||||
plog.DebugDetailf("AddBlock: block %s from peer <%s> (head: %s) already sent by <%s> ", hex(hash), peerId, hex(sender.currentBlockHash), bnode.blockBy)
|
||||
glog.V(logger.Detail).Infof("AddBlock: block %s from peer <%s> (head: %s) already sent by <%s> ", hex(hash), peerId, hex(sender.currentBlockHash), bnode.blockBy)
|
||||
// register peer on node as source
|
||||
if bnode.peers == nil {
|
||||
bnode.peers = make(map[string]bool)
|
||||
|
@ -699,7 +686,7 @@ func (self *BlockPool) AddBlock(block *types.Block, peerId string) {
|
|||
creation is not blocking
|
||||
// validate block for PoW
|
||||
if !self.verifyPoW(block) {
|
||||
plog.Warnf("AddBlock: invalid PoW on block %s from peer <%s> (head: %s)", hex(hash), peerId, hex(sender.currentBlockHash))
|
||||
glog.V(logger.Warn).Warnf("AddBlock: invalid PoW on block %s from peer <%s> (head: %s)", hex(hash), peerId, hex(sender.currentBlockHash))
|
||||
sender.addError(ErrInvalidPoW, "%x", hash)
|
||||
|
||||
self.status.lock.Lock()
|
||||
|
@ -711,13 +698,49 @@ func (self *BlockPool) AddBlock(block *types.Block, peerId string) {
|
|||
*/
|
||||
bnode.block = block
|
||||
bnode.blockBy = peerId
|
||||
glog.V(logger.Detail).Infof("AddBlock: set td on node %s from peer <%s> (head: %s) to %v (was %v) ", hex(hash), peerId, hex(sender.currentBlockHash), bnode.td, tdFromCurrentHead)
|
||||
bnode.td = tdFromCurrentHead
|
||||
self.status.lock.Lock()
|
||||
self.status.values.Blocks++
|
||||
self.status.values.BlocksInPool++
|
||||
self.status.lock.Unlock()
|
||||
}
|
||||
bnode.lock.Unlock()
|
||||
currentBlockC := sender.currentBlockC
|
||||
switchC := sender.switchC
|
||||
sender.lock.Unlock()
|
||||
|
||||
// this must be called without peerlock.
|
||||
// peerlock held can halt the loop and block on select forever
|
||||
if tdFromCurrentHead != nil {
|
||||
select {
|
||||
case currentBlockC <- block:
|
||||
case <-switchC: // peer is not best peer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (self *BlockPool) findOrCreateNode(hash common.Hash, peerId string) (bnode *node) {
|
||||
bnode, _ = self.nodeCache[hash]
|
||||
if bnode == nil {
|
||||
bnode = &node{
|
||||
hash: hash,
|
||||
hashBy: peerId,
|
||||
}
|
||||
self.nodeCache[hash] = bnode
|
||||
// purge oversize cache
|
||||
if len(self.nodeCache) > self.Config.NodeCacheSize {
|
||||
delete(self.nodeCache, self.nodeCacheList[0])
|
||||
self.nodeCacheList = append(self.nodeCacheList[1:], hash)
|
||||
} else {
|
||||
self.nodeCacheList = append(self.nodeCacheList, hash)
|
||||
}
|
||||
|
||||
self.status.lock.Lock()
|
||||
self.status.values.BlockHashes++
|
||||
self.status.lock.Unlock()
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -731,8 +754,8 @@ func (self *BlockPool) activateChain(sec *section, p *peer, switchC chan bool, c
|
|||
|
||||
LOOP:
|
||||
for sec != nil {
|
||||
parent := self.getParent(sec)
|
||||
plog.DebugDetailf("activateChain: section [%s] activated by peer <%s>", sectionhex(sec), p.id)
|
||||
parent := sec.parent
|
||||
glog.V(logger.Detail).Infof("activateChain: section [%s] activated by peer <%s>", sectionhex(sec), p.id)
|
||||
sec.activate(p)
|
||||
if i > 0 && connected != nil {
|
||||
connected[sec.top.hash] = sec
|
||||
|
@ -745,11 +768,11 @@ LOOP:
|
|||
if sec.bottom.block != nil {
|
||||
if entry := self.get(sec.bottom.block.ParentHash()); entry != nil {
|
||||
parent = entry.section
|
||||
plog.DebugDetailf("activateChain: [%s]-[%s] link", sectionhex(parent), sectionhex(sec))
|
||||
glog.V(logger.Detail).Infof("activateChain: [%s]-[%s] link", sectionhex(parent), sectionhex(sec))
|
||||
link(parent, sec)
|
||||
}
|
||||
} else {
|
||||
plog.DebugDetailf("activateChain: section [%s] activated by peer <%s> has missing root block", sectionhex(sec), p.id)
|
||||
glog.V(logger.Detail).Infof("activateChain: section [%s] activated by peer <%s> has missing root block", sectionhex(sec), p.id)
|
||||
}
|
||||
}
|
||||
sec = parent
|
||||
|
@ -769,17 +792,18 @@ LOOP:
|
|||
func (self *BlockPool) checkTD(nodes ...*node) {
|
||||
for _, n := range nodes {
|
||||
// skip check if queued future block
|
||||
n.lock.RLock()
|
||||
if n.td != nil && !n.block.Queued() {
|
||||
plog.DebugDetailf("peer td %v =?= block td %v", n.td, n.block.Td)
|
||||
/* @zelig: Commented out temp untill the rest of the network has been fixed.
|
||||
glog.V(logger.Detail).Infof("peer td %v =?= block td %v", n.td, n.block.Td)
|
||||
// @zelig: Commented out temp untill the rest of the network has been fixed.
|
||||
if n.td.Cmp(n.block.Td) != 0 {
|
||||
self.peers.peerError(n.blockBy, ErrIncorrectTD, "on block %x", n.hash)
|
||||
self.peers.peerError(n.blockBy, ErrIncorrectTD, "on block %x peer td %v =?= block td %v", n.hash, n.td, n.block.Td)
|
||||
self.status.lock.Lock()
|
||||
self.status.badPeers[n.blockBy]++
|
||||
self.status.lock.Unlock()
|
||||
}
|
||||
*/
|
||||
}
|
||||
n.lock.RUnlock()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,19 +3,12 @@ package blockpool
|
|||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/blockpool/test"
|
||||
)
|
||||
|
||||
func init() {
|
||||
test.LogInit()
|
||||
}
|
||||
|
||||
// using the mock framework in blockpool_util_test
|
||||
// we test various scenarios here
|
||||
|
||||
func TestPeerWithKnownBlock(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.refBlockChain[0] = nil
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
|
@ -31,7 +24,6 @@ func TestPeerWithKnownBlock(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPeerWithKnownParentBlock(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.initRefBlockChain(1)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
|
@ -50,7 +42,6 @@ func TestPeerWithKnownParentBlock(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSimpleChain(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(2)
|
||||
|
@ -70,7 +61,6 @@ func TestSimpleChain(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestChainConnectingWithParentHash(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(3)
|
||||
|
@ -90,7 +80,6 @@ func TestChainConnectingWithParentHash(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestMultiSectionChain(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(5)
|
||||
|
@ -113,7 +102,6 @@ func TestMultiSectionChain(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestNewBlocksOnPartialChain(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(7)
|
||||
|
@ -146,7 +134,6 @@ func TestNewBlocksOnPartialChain(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPeerSwitchUp(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(7)
|
||||
|
@ -174,7 +161,6 @@ func TestPeerSwitchUp(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPeerSwitchDownOverlapSectionWithoutRootBlock(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(6)
|
||||
|
@ -200,7 +186,6 @@ func TestPeerSwitchDownOverlapSectionWithoutRootBlock(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPeerSwitchDownOverlapSectionWithRootBlock(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(6)
|
||||
|
@ -227,7 +212,6 @@ func TestPeerSwitchDownOverlapSectionWithRootBlock(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPeerSwitchDownDisjointSection(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(3)
|
||||
|
@ -254,7 +238,6 @@ func TestPeerSwitchDownDisjointSection(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPeerSwitchBack(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(8)
|
||||
|
@ -270,7 +253,7 @@ func TestPeerSwitchBack(t *testing.T) {
|
|||
go peer2.serveBlockHashes(6, 5, 4)
|
||||
peer2.serveBlocks(4, 5) // section partially complete
|
||||
peer1.AddPeer() // peer1 is promoted as best peer
|
||||
go peer1.serveBlocks(10, 11) //
|
||||
peer1.serveBlocks(10, 11) //
|
||||
peer1.serveBlockHashes(11, 10) // only gives useless results
|
||||
blockPool.RemovePeer("peer1") // peer1 disconnects
|
||||
go peer2.serveBlockHashes(4, 3, 2, 1, 0) // tests that asking for hashes from 4 is remembered
|
||||
|
@ -284,7 +267,6 @@ func TestPeerSwitchBack(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestForkSimple(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(9)
|
||||
|
@ -320,7 +302,6 @@ func TestForkSimple(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestForkSwitchBackByNewBlocks(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(11)
|
||||
|
@ -351,8 +332,8 @@ func TestForkSwitchBackByNewBlocks(t *testing.T) {
|
|||
go peer1.serveBlockHashes(11, 10, 9)
|
||||
go peer1.serveBlocks(9, 10)
|
||||
// time.Sleep(1 * time.Second)
|
||||
go peer1.serveBlocks(3, 7) // tests that block requests on earlier fork are remembered
|
||||
go peer1.serveBlockHashes(2, 1) // tests that hash request from root of connecting chain section (added by demoted peer) is remembered
|
||||
go peer1.serveBlocks(3, 7) // tests that block requests on earlier fork are remembered
|
||||
go peer1.serveBlockHashes(2, 1, 0) // tests that hash request from root of connecting chain section (added by demoted peer) is remembered
|
||||
peer1.serveBlocks(0, 1)
|
||||
|
||||
blockPool.Wait(waitTimeout)
|
||||
|
@ -367,7 +348,6 @@ func TestForkSwitchBackByNewBlocks(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestForkSwitchBackByPeerSwitchBack(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(9)
|
||||
|
@ -411,7 +391,6 @@ func TestForkSwitchBackByPeerSwitchBack(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestForkCompleteSectionSwitchBackByPeerSwitchBack(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(9)
|
||||
|
@ -429,16 +408,17 @@ func TestForkCompleteSectionSwitchBackByPeerSwitchBack(t *testing.T) {
|
|||
peer1.AddPeer()
|
||||
go peer1.serveBlocks(8, 9)
|
||||
go peer1.serveBlockHashes(9, 8, 7)
|
||||
peer1.serveBlocks(3, 7, 8) // make sure this section is complete
|
||||
time.Sleep(1 * time.Second) //
|
||||
go peer1.serveBlockHashes(7, 3, 2) // block 3/7 is section boundary
|
||||
peer1.serveBlocks(3, 7, 8) // make sure this section is complete
|
||||
// time.Sleep(2 * time.Second) //
|
||||
peer1.serveBlockHashes(7, 3, 2) // block 3/7 is section boundary
|
||||
peer1.serveBlocks(2, 3) // partially complete sections block 2 missing
|
||||
peer2.AddPeer() //
|
||||
go peer2.serveBlocks(5, 6) //
|
||||
go peer2.serveBlockHashes(6, 5, 4, 3, 2) // peer2 forks on block 3
|
||||
time.Sleep(100 * time.Millisecond) //
|
||||
peer2.serveBlocks(2, 3, 4, 5) // block 2 still missing.
|
||||
blockPool.RemovePeer("peer2") // peer2 disconnects, peer1 is promoted again as best peer
|
||||
go peer1.serveBlockHashes(2, 1, 0) //
|
||||
go peer1.serveBlockHashes(2, 1) //
|
||||
peer1.serveBlocks(0, 1, 2)
|
||||
|
||||
blockPool.Wait(waitTimeout)
|
||||
|
|
|
@ -17,6 +17,7 @@ func TestBlockPoolConfig(t *testing.T) {
|
|||
test.CheckInt("BlockBatchSize", c.BlockBatchSize, blockBatchSize, t)
|
||||
test.CheckInt("BlocksRequestRepetition", c.BlocksRequestRepetition, blocksRequestRepetition, t)
|
||||
test.CheckInt("BlocksRequestMaxIdleRounds", c.BlocksRequestMaxIdleRounds, blocksRequestMaxIdleRounds, t)
|
||||
test.CheckInt("NodeCacheSize", c.NodeCacheSize, nodeCacheSize, t)
|
||||
test.CheckDuration("BlockHashesRequestInterval", c.BlockHashesRequestInterval, blockHashesRequestInterval, t)
|
||||
test.CheckDuration("BlocksRequestInterval", c.BlocksRequestInterval, blocksRequestInterval, t)
|
||||
test.CheckDuration("BlockHashesTimeout", c.BlockHashesTimeout, blockHashesTimeout, t)
|
||||
|
@ -29,7 +30,7 @@ func TestBlockPoolConfig(t *testing.T) {
|
|||
func TestBlockPoolOverrideConfig(t *testing.T) {
|
||||
test.LogInit()
|
||||
blockPool := &BlockPool{Config: &Config{}, chainEvents: &event.TypeMux{}}
|
||||
c := &Config{128, 32, 1, 0, 300 * time.Millisecond, 100 * time.Millisecond, 90 * time.Second, 0, 30 * time.Second, 30 * time.Second, 4 * time.Second}
|
||||
c := &Config{128, 32, 1, 0, 500, 300 * time.Millisecond, 100 * time.Millisecond, 90 * time.Second, 0, 30 * time.Second, 30 * time.Second, 4 * time.Second}
|
||||
|
||||
blockPool.Config = c
|
||||
blockPool.Start()
|
||||
|
@ -37,6 +38,7 @@ func TestBlockPoolOverrideConfig(t *testing.T) {
|
|||
test.CheckInt("BlockBatchSize", c.BlockBatchSize, 32, t)
|
||||
test.CheckInt("BlocksRequestRepetition", c.BlocksRequestRepetition, blocksRequestRepetition, t)
|
||||
test.CheckInt("BlocksRequestMaxIdleRounds", c.BlocksRequestMaxIdleRounds, blocksRequestMaxIdleRounds, t)
|
||||
test.CheckInt("NodeCacheSize", c.NodeCacheSize, 500, t)
|
||||
test.CheckDuration("BlockHashesRequestInterval", c.BlockHashesRequestInterval, 300*time.Millisecond, t)
|
||||
test.CheckDuration("BlocksRequestInterval", c.BlocksRequestInterval, 100*time.Millisecond, t)
|
||||
test.CheckDuration("BlockHashesTimeout", c.BlockHashesTimeout, 90*time.Second, t)
|
||||
|
|
|
@ -4,14 +4,12 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/blockpool/test"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/pow"
|
||||
)
|
||||
|
||||
func TestInvalidBlock(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(2)
|
||||
|
@ -41,7 +39,6 @@ func TestInvalidBlock(t *testing.T) {
|
|||
func TestVerifyPoW(t *testing.T) {
|
||||
t.Skip() // :FIXME:
|
||||
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(3)
|
||||
|
@ -88,7 +85,6 @@ func TestVerifyPoW(t *testing.T) {
|
|||
func TestUnrequestedBlock(t *testing.T) {
|
||||
t.Skip() // :FIXME:
|
||||
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPool.Start()
|
||||
|
@ -108,7 +104,6 @@ func TestUnrequestedBlock(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestErrInsufficientChainInfo(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPool.Config.BlockHashesTimeout = 100 * time.Millisecond
|
||||
blockPool.Start()
|
||||
|
@ -128,8 +123,6 @@ func TestErrInsufficientChainInfo(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestIncorrectTD(t *testing.T) {
|
||||
t.Skip("skipping TD check until network is healthy")
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(3)
|
||||
|
@ -156,9 +149,6 @@ func TestIncorrectTD(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestSkipIncorrectTDonFutureBlocks(t *testing.T) {
|
||||
// t.Skip() // @zelig this one requires fixing for the TD
|
||||
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(3)
|
||||
|
@ -195,31 +185,40 @@ func TestSkipIncorrectTDonFutureBlocks(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestPeerSuspension(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPool.Config.PeerSuspensionInterval = 100 * time.Millisecond
|
||||
|
||||
blockPool.Start()
|
||||
|
||||
peer1 := blockPoolTester.newPeer("peer1", 1, 3)
|
||||
peer1 := blockPoolTester.newPeer("peer1", 3, 3)
|
||||
peer1.AddPeer()
|
||||
blockPool.peers.peerError("peer1", 0, "")
|
||||
bestpeer, _ := blockPool.peers.getPeer("peer1")
|
||||
if bestpeer == nil {
|
||||
t.Errorf("peer1 not best peer")
|
||||
return
|
||||
}
|
||||
peer1.serveBlocks(2, 3)
|
||||
|
||||
blockPool.peers.peerError("peer1", 0, "")
|
||||
bestpeer, _ = blockPool.peers.getPeer("peer1")
|
||||
if bestpeer != nil {
|
||||
t.Errorf("peer1 not removed on error")
|
||||
return
|
||||
}
|
||||
peer1.AddPeer()
|
||||
bestpeer, _ = blockPool.peers.getPeer("peer1")
|
||||
if bestpeer != nil {
|
||||
t.Errorf("peer1 not removed on reconnect")
|
||||
return
|
||||
}
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
peer1.AddPeer()
|
||||
|
||||
bestpeer, _ = blockPool.peers.getPeer("peer1")
|
||||
if bestpeer == nil {
|
||||
t.Errorf("peer1 not connected after PeerSuspensionInterval")
|
||||
return
|
||||
}
|
||||
// blockPool.Wait(waitTimeout)
|
||||
blockPool.Stop()
|
||||
|
||||
}
|
||||
|
|
|
@ -10,6 +10,8 @@ import (
|
|||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/errs"
|
||||
"github.com/ethereum/go-ethereum/logger"
|
||||
"github.com/ethereum/go-ethereum/logger/glog"
|
||||
)
|
||||
|
||||
// the blockpool's model of a peer
|
||||
|
@ -106,9 +108,10 @@ func (self *peers) peerError(id string, code int, format string, params ...inter
|
|||
peer, ok := self.peers[id]
|
||||
self.lock.RUnlock()
|
||||
if ok {
|
||||
peer.addError(code, format, params)
|
||||
peer.addError(code, format, params...)
|
||||
} else {
|
||||
self.addToBlacklist(id)
|
||||
}
|
||||
self.addToBlacklist(id)
|
||||
}
|
||||
|
||||
// record time of offence in blacklist to implement suspension for PeerSuspensionInterval
|
||||
|
@ -134,7 +137,11 @@ func (self *peers) suspended(id string) (s bool) {
|
|||
func (self *peer) addError(code int, format string, params ...interface{}) {
|
||||
err := self.errors.New(code, format, params...)
|
||||
self.peerError(err)
|
||||
self.addToBlacklist(self.id)
|
||||
if err.Fatal() {
|
||||
self.addToBlacklist(self.id)
|
||||
} else {
|
||||
go self.bp.peers.removePeer(self.id, false)
|
||||
}
|
||||
}
|
||||
|
||||
// caller must hold peer lock
|
||||
|
@ -143,7 +150,8 @@ func (self *peer) setChainInfo(td *big.Int, currentBlockHash common.Hash) {
|
|||
defer self.lock.Unlock()
|
||||
if self.currentBlockHash != currentBlockHash {
|
||||
previousBlockHash := self.currentBlockHash
|
||||
plog.Debugf("addPeer: Update peer <%s> with td %v and current block %s (was %v)", self.id, td, hex(currentBlockHash), hex(previousBlockHash))
|
||||
glog.V(logger.Debug).Infof("addPeer: Update peer <%s> with td %v (was %v) and current block %s (was %v)", self.id, td, self.td, hex(currentBlockHash), hex(previousBlockHash))
|
||||
|
||||
self.td = td
|
||||
self.currentBlockHash = currentBlockHash
|
||||
self.currentBlock = nil
|
||||
|
@ -154,41 +162,30 @@ func (self *peer) setChainInfo(td *big.Int, currentBlockHash common.Hash) {
|
|||
}
|
||||
|
||||
func (self *peer) setChainInfoFromBlock(block *types.Block) (td *big.Int, currentBlockHash common.Hash) {
|
||||
self.lock.Lock()
|
||||
currentBlockC := self.currentBlockC
|
||||
switchC := self.switchC
|
||||
hash := block.Hash()
|
||||
// this happens when block came in a newblock message but
|
||||
// also if sent in a blockmsg (for instance, if we requested, only if we
|
||||
// dont apply on blockrequests the restriction of flood control)
|
||||
currentBlockHash = self.currentBlockHash
|
||||
if currentBlockHash == hash && self.currentBlock == nil {
|
||||
// signal to head section process
|
||||
plog.DebugDetailf("AddBlock: head block %s for peer <%s> (head: %s) received\n", hex(hash), self.id, hex(currentBlockHash))
|
||||
td = self.td
|
||||
} else {
|
||||
plog.DebugDetailf("AddBlock: head block %s for peer <%s> (head: %s) already known", hex(hash), self.id, hex(currentBlockHash))
|
||||
}
|
||||
self.lock.Unlock()
|
||||
// this must be called without peerlock.
|
||||
// peerlock held can halt the loop and block on select forever
|
||||
if td != nil {
|
||||
select {
|
||||
case currentBlockC <- block:
|
||||
case <-switchC: // peer is not best peer
|
||||
if currentBlockHash == hash {
|
||||
if self.currentBlock == nil {
|
||||
// signal to head section process
|
||||
glog.V(logger.Detail).Infof("AddBlock: head block %s for peer <%s> (head: %s) received\n", hex(hash), self.id, hex(currentBlockHash))
|
||||
td = self.td
|
||||
} else {
|
||||
glog.V(logger.Detail).Infof("AddBlock: head block %s for peer <%s> (head: %s) already known", hex(hash), self.id, hex(currentBlockHash))
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// this will use the TD given by the first peer to update peer td, this helps second best peer selection
|
||||
// :FIXME: node
|
||||
func (self *peer) setChainInfoFromNode(n *node) {
|
||||
// in case best peer is lost
|
||||
block := n.block
|
||||
hash := block.Hash()
|
||||
if n.td != nil && n.td.Cmp(self.td) > 0 {
|
||||
plog.DebugDetailf("AddBlock: update peer <%s> - head: %v->%v - TD: %v->%v", self.id, hex(self.currentBlockHash), hex(hash), self.td, n.td)
|
||||
glog.V(logger.Detail).Infof("AddBlock: update peer <%s> - head: %v->%v - TD: %v->%v", self.id, hex(self.currentBlockHash), hex(hash), self.td, n.td)
|
||||
self.td = n.td
|
||||
self.currentBlockHash = block.Hash()
|
||||
self.parentHash = block.ParentHash()
|
||||
|
@ -205,7 +202,7 @@ func (self *peers) requestBlocks(attempts int, hashes []common.Hash) {
|
|||
peerCount := len(self.peers)
|
||||
// on first attempt use the best peer
|
||||
if attempts == 0 && self.best != nil {
|
||||
plog.DebugDetailf("request %v missing blocks from best peer <%s>", len(hashes), self.best.id)
|
||||
glog.V(logger.Detail).Infof("request %v missing blocks from best peer <%s>", len(hashes), self.best.id)
|
||||
self.best.requestBlocks(hashes)
|
||||
return
|
||||
}
|
||||
|
@ -217,11 +214,11 @@ func (self *peers) requestBlocks(attempts int, hashes []common.Hash) {
|
|||
indexes := rand.Perm(peerCount)[0:repetitions]
|
||||
sort.Ints(indexes)
|
||||
|
||||
plog.DebugDetailf("request %v missing blocks from %v/%v peers", len(hashes), repetitions, peerCount)
|
||||
glog.V(logger.Detail).Infof("request %v missing blocks from %v/%v peers", len(hashes), repetitions, peerCount)
|
||||
for _, peer := range self.peers {
|
||||
if i == indexes[0] {
|
||||
plog.DebugDetailf("request length: %v", len(hashes))
|
||||
plog.DebugDetailf("request %v missing blocks [%x/%x] from peer <%s>", len(hashes), hashes[0][:4], hashes[len(hashes)-1][:4], peer.id)
|
||||
glog.V(logger.Detail).Infof("request length: %v", len(hashes))
|
||||
glog.V(logger.Detail).Infof("request %v missing blocks [%x/%x] from peer <%s>", len(hashes), hashes[0][:4], hashes[len(hashes)-1][:4], peer.id)
|
||||
peer.requestBlocks(hashes)
|
||||
indexes = indexes[1:]
|
||||
if len(indexes) == 0 {
|
||||
|
@ -248,7 +245,6 @@ func (self *peers) addPeer(
|
|||
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
|
||||
var previousBlockHash common.Hash
|
||||
if self.suspended(id) {
|
||||
suspended = true
|
||||
|
@ -259,7 +255,6 @@ func (self *peers) addPeer(
|
|||
// when called on an already connected peer, it means a newBlockMsg is received
|
||||
// peer head info is updated
|
||||
p.setChainInfo(td, currentBlockHash)
|
||||
// FIXME: only count the same block once
|
||||
self.status.lock.Lock()
|
||||
self.status.values.NewBlocks++
|
||||
self.status.lock.Unlock()
|
||||
|
@ -272,25 +267,25 @@ func (self *peers) addPeer(
|
|||
self.status.values.NewBlocks++
|
||||
self.status.lock.Unlock()
|
||||
|
||||
plog.Debugf("addPeer: add new peer <%v> with td %v and current block %s", id, td, hex(currentBlockHash))
|
||||
glog.V(logger.Debug).Infof("addPeer: add new peer <%v> with td %v and current block %s", id, td, hex(currentBlockHash))
|
||||
}
|
||||
|
||||
// check if peer's current head block is known
|
||||
if self.bp.hasBlock(currentBlockHash) {
|
||||
// peer not ahead
|
||||
plog.Debugf("addPeer: peer <%v> with td %v and current block %s is behind", id, td, hex(currentBlockHash))
|
||||
glog.V(logger.Debug).Infof("addPeer: peer <%v> with td %v and current block %s is behind", id, td, hex(currentBlockHash))
|
||||
return false, false
|
||||
}
|
||||
|
||||
if self.best == p {
|
||||
// new block update for active current best peer -> request hashes
|
||||
plog.Debugf("addPeer: <%s> already the best peer. Request new head section info from %s", id, hex(currentBlockHash))
|
||||
glog.V(logger.Debug).Infof("addPeer: <%s> already the best peer. Request new head section info from %s", id, hex(currentBlockHash))
|
||||
|
||||
if (previousBlockHash != common.Hash{}) {
|
||||
plog.DebugDetailf("addPeer: <%s> head changed: %s -> %s ", id, hex(previousBlockHash), hex(currentBlockHash))
|
||||
glog.V(logger.Detail).Infof("addPeer: <%s> head changed: %s -> %s ", id, hex(previousBlockHash), hex(currentBlockHash))
|
||||
p.headSectionC <- nil
|
||||
if entry := self.bp.get(previousBlockHash); entry != nil {
|
||||
plog.DebugDetailf("addPeer: <%s> previous head : %v found in pool, activate", id, hex(previousBlockHash))
|
||||
glog.V(logger.Detail).Infof("addPeer: <%s> previous head : %v found in pool, activate", id, hex(previousBlockHash))
|
||||
self.bp.activateChain(entry.section, p, p.switchC, nil)
|
||||
p.sections = append(p.sections, previousBlockHash)
|
||||
}
|
||||
|
@ -309,7 +304,8 @@ func (self *peers) addPeer(
|
|||
self.status.lock.Lock()
|
||||
self.status.bestPeers[p.id]++
|
||||
self.status.lock.Unlock()
|
||||
plog.Debugf("addPeer: peer <%v> (td: %v > current td %v) promoted best peer", id, td, currentTD)
|
||||
glog.V(logger.Debug).Infof("addPeer: peer <%v> (td: %v > current td %v) promoted best peer", id, td, currentTD)
|
||||
// fmt.Printf("best peer %v - \n", bestpeer, id)
|
||||
self.bp.switchPeer(bestpeer, p)
|
||||
self.best = p
|
||||
best = true
|
||||
|
@ -320,7 +316,7 @@ func (self *peers) addPeer(
|
|||
}
|
||||
|
||||
// removePeer is called (via RemovePeer) by the eth protocol when the peer disconnects
|
||||
func (self *peers) removePeer(id string) {
|
||||
func (self *peers) removePeer(id string, del bool) {
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
|
||||
|
@ -328,10 +324,13 @@ func (self *peers) removePeer(id string) {
|
|||
if !found {
|
||||
return
|
||||
}
|
||||
p.lock.Lock()
|
||||
defer p.lock.Unlock()
|
||||
|
||||
delete(self.peers, id)
|
||||
plog.Debugf("addPeer: remove peer <%v> (td: %v)", id, p.td)
|
||||
|
||||
if del {
|
||||
delete(self.peers, id)
|
||||
glog.V(logger.Debug).Infof("addPeer: remove peer <%v> (td: %v)", id, p.td)
|
||||
}
|
||||
// if current best peer is removed, need to find a better one
|
||||
if self.best == p {
|
||||
var newp *peer
|
||||
|
@ -339,20 +338,29 @@ func (self *peers) removePeer(id string) {
|
|||
max := self.bp.getTD()
|
||||
// peer with the highest self-acclaimed TD is chosen
|
||||
for _, pp := range self.peers {
|
||||
// demoted peer's td should be 0
|
||||
if pp.id == id {
|
||||
pp.td = common.Big0
|
||||
pp.currentBlockHash = common.Hash{}
|
||||
continue
|
||||
}
|
||||
pp.lock.RLock()
|
||||
if pp.td.Cmp(max) > 0 {
|
||||
max = pp.td
|
||||
newp = pp
|
||||
}
|
||||
pp.lock.RUnlock()
|
||||
}
|
||||
if newp != nil {
|
||||
self.status.lock.Lock()
|
||||
self.status.bestPeers[p.id]++
|
||||
self.status.lock.Unlock()
|
||||
plog.Debugf("addPeer: peer <%v> (td: %v) promoted best peer", newp.id, newp.td)
|
||||
glog.V(logger.Debug).Infof("addPeer: peer <%v> (td: %v) promoted best peer", newp.id, newp.td)
|
||||
} else {
|
||||
plog.Warnln("addPeer: no suitable peers found")
|
||||
glog.V(logger.Warn).Infof("addPeer: no suitable peers found")
|
||||
}
|
||||
self.best = newp
|
||||
// fmt.Printf("remove peer %v - %v\n", p.id, newp)
|
||||
self.bp.switchPeer(p, newp)
|
||||
}
|
||||
}
|
||||
|
@ -363,16 +371,17 @@ func (self *BlockPool) switchPeer(oldp, newp *peer) {
|
|||
// first quit AddBlockHashes, requestHeadSection and activateChain
|
||||
// by closing the old peer's switchC channel
|
||||
if oldp != nil {
|
||||
plog.DebugDetailf("<%s> quit peer processes", oldp.id)
|
||||
glog.V(logger.Detail).Infof("<%s> quit peer processes", oldp.id)
|
||||
// fmt.Printf("close %v - %v\n", oldp.id, newp)
|
||||
close(oldp.switchC)
|
||||
}
|
||||
if newp != nil {
|
||||
// newp.idleC = make(chan bool)
|
||||
// newp.switchC = make(chan bool)
|
||||
// if new best peer has no head section yet, create it and run it
|
||||
// otherwise head section is an element of peer.sections
|
||||
newp.idleC = make(chan bool)
|
||||
newp.switchC = make(chan bool)
|
||||
if newp.headSection == nil {
|
||||
plog.DebugDetailf("[%s] head section for [%s] not created, requesting info", newp.id, hex(newp.currentBlockHash))
|
||||
glog.V(logger.Detail).Infof("[%s] head section for [%s] not created, requesting info", newp.id, hex(newp.currentBlockHash))
|
||||
|
||||
if newp.idle {
|
||||
self.wg.Add(1)
|
||||
|
@ -388,15 +397,12 @@ func (self *BlockPool) switchPeer(oldp, newp *peer) {
|
|||
}
|
||||
}()
|
||||
|
||||
} else {
|
||||
newp.idleC = make(chan bool)
|
||||
newp.switchC = make(chan bool)
|
||||
}
|
||||
|
||||
var connected = make(map[common.Hash]*section)
|
||||
var sections []common.Hash
|
||||
for _, hash := range newp.sections {
|
||||
plog.DebugDetailf("activate chain starting from section [%s]", hex(hash))
|
||||
glog.V(logger.Detail).Infof("activate chain starting from section [%s]", hex(hash))
|
||||
// if section not connected (ie, top of a contiguous sequence of sections)
|
||||
if connected[hash] == nil {
|
||||
// if not deleted, then reread from pool (it can be orphaned top half of a split section)
|
||||
|
@ -407,7 +413,7 @@ func (self *BlockPool) switchPeer(oldp, newp *peer) {
|
|||
}
|
||||
}
|
||||
}
|
||||
plog.DebugDetailf("<%s> section processes (%v non-contiguous sequences, was %v before)", newp.id, len(sections), len(newp.sections))
|
||||
glog.V(logger.Detail).Infof("<%s> section processes (%v non-contiguous sequences, was %v before)", newp.id, len(sections), len(newp.sections))
|
||||
// need to lock now that newp is exposed to section processesr
|
||||
newp.lock.Lock()
|
||||
newp.sections = sections
|
||||
|
@ -416,7 +422,7 @@ func (self *BlockPool) switchPeer(oldp, newp *peer) {
|
|||
// finally deactivate section process for sections where newp didnt activate
|
||||
// newp activating section process changes the quit channel for this reason
|
||||
if oldp != nil {
|
||||
plog.DebugDetailf("<%s> quit section processes", oldp.id)
|
||||
glog.V(logger.Detail).Infof("<%s> quit section processes", oldp.id)
|
||||
close(oldp.idleC)
|
||||
}
|
||||
}
|
||||
|
@ -438,7 +444,7 @@ func (self *peers) getPeer(id string) (p *peer, best bool) {
|
|||
func (self *peer) handleSection(sec *section) {
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
plog.DebugDetailf("HeadSection: <%s> (head: %s) head section received [%s]-[%s]", self.id, hex(self.currentBlockHash), sectionhex(self.headSection), sectionhex(sec))
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> (head: %s) head section received [%s]-[%s]", self.id, hex(self.currentBlockHash), sectionhex(self.headSection), sectionhex(sec))
|
||||
|
||||
self.headSection = sec
|
||||
self.blockHashesRequestTimer = nil
|
||||
|
@ -453,7 +459,7 @@ func (self *peer) handleSection(sec *section) {
|
|||
self.headInfoTimer = time.After(self.bp.Config.BlockHashesTimeout)
|
||||
self.bestIdleTimer = nil
|
||||
|
||||
plog.DebugDetailf("HeadSection: <%s> head block hash changed (mined block received). New head %s", self.id, hex(self.currentBlockHash))
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> head block hash changed (mined block received). New head %s", self.id, hex(self.currentBlockHash))
|
||||
} else {
|
||||
if !self.idle {
|
||||
self.idle = true
|
||||
|
@ -462,12 +468,14 @@ func (self *peer) handleSection(sec *section) {
|
|||
|
||||
self.headInfoTimer = nil
|
||||
self.bestIdleTimer = time.After(self.bp.Config.IdleBestPeerTimeout)
|
||||
plog.DebugDetailf("HeadSection: <%s> (head: %s) head section [%s] created. Idle...", self.id, hex(self.currentBlockHash), sectionhex(sec))
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> (head: %s) head section [%s] created. Idle...", self.id, hex(self.currentBlockHash), sectionhex(sec))
|
||||
}
|
||||
}
|
||||
|
||||
func (self *peer) getCurrentBlock(currentBlock *types.Block) {
|
||||
// called by update or after AddBlock signals that head block of current peer is received
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
if currentBlock == nil {
|
||||
if entry := self.bp.get(self.currentBlockHash); entry != nil {
|
||||
entry.node.lock.Lock()
|
||||
|
@ -475,22 +483,20 @@ func (self *peer) getCurrentBlock(currentBlock *types.Block) {
|
|||
entry.node.lock.Unlock()
|
||||
}
|
||||
if currentBlock != nil {
|
||||
plog.DebugDetailf("HeadSection: <%s> head block %s found in blockpool", self.id, hex(self.currentBlockHash))
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> head block %s found in blockpool", self.id, hex(self.currentBlockHash))
|
||||
} else {
|
||||
plog.DebugDetailf("HeadSection: <%s> head block %s not found... requesting it", self.id, hex(self.currentBlockHash))
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> head block %s not found... requesting it", self.id, hex(self.currentBlockHash))
|
||||
self.requestBlocks([]common.Hash{self.currentBlockHash})
|
||||
self.blocksRequestTimer = time.After(self.bp.Config.BlocksRequestInterval)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
plog.DebugDetailf("HeadSection: <%s> head block %s received (parent: %s)", self.id, hex(self.currentBlockHash), hex(currentBlock.ParentHash()))
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> head block %s received (parent: %s)", self.id, hex(self.currentBlockHash), hex(currentBlock.ParentHash()))
|
||||
}
|
||||
|
||||
self.lock.Lock()
|
||||
defer self.lock.Unlock()
|
||||
self.currentBlock = currentBlock
|
||||
self.parentHash = currentBlock.ParentHash()
|
||||
plog.DebugDetailf("HeadSection: <%s> head block %s found (parent: %s)... requesting hashes", self.id, hex(self.currentBlockHash), hex(self.parentHash))
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> head block %s found (parent: %s)... requesting hashes", self.id, hex(self.currentBlockHash), hex(self.parentHash))
|
||||
self.blockHashesRequestTimer = time.After(0)
|
||||
self.blocksRequestTimer = nil
|
||||
}
|
||||
|
@ -500,7 +506,7 @@ func (self *peer) getBlockHashes() bool {
|
|||
defer self.lock.Unlock()
|
||||
//if connecting parent is found
|
||||
if self.bp.hasBlock(self.parentHash) {
|
||||
plog.DebugDetailf("HeadSection: <%s> parent block %s found in blockchain", self.id, hex(self.parentHash))
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> parent block %s found in blockchain", self.id, hex(self.parentHash))
|
||||
err := self.bp.insertChain(types.Blocks([]*types.Block{self.currentBlock}))
|
||||
|
||||
self.bp.status.lock.Lock()
|
||||
|
@ -510,16 +516,15 @@ func (self *peer) getBlockHashes() bool {
|
|||
self.addError(ErrInvalidBlock, "%v", err)
|
||||
self.bp.status.badPeers[self.id]++
|
||||
} else {
|
||||
/* @zelig: Commented out temp untill the rest of the network has been fixed.
|
||||
// XXX added currentBlock check (?)
|
||||
if self.currentBlock != nil && self.currentBlock.Td != nil && !self.currentBlock.Queued() {
|
||||
plog.DebugDetailf("HeadSection: <%s> inserted %s to blockchain... check TD %v =?= %v", self.id, hex(self.parentHash), self.td, self.currentBlock.Td)
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> inserted %s to blockchain... check TD %v =?= %v", self.id, hex(self.parentHash), self.td, self.currentBlock.Td)
|
||||
if self.td.Cmp(self.currentBlock.Td) != 0 {
|
||||
self.addError(ErrIncorrectTD, "on block %x", self.currentBlockHash)
|
||||
self.addError(ErrIncorrectTD, "on block %x %v =?= %v", hex(self.parentHash), self.td, self.currentBlock.Td)
|
||||
self.bp.status.badPeers[self.id]++
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
headKey := self.parentHash
|
||||
height := self.bp.status.chain[headKey] + 1
|
||||
self.bp.status.chain[self.currentBlockHash] = height
|
||||
|
@ -532,21 +537,20 @@ func (self *peer) getBlockHashes() bool {
|
|||
} else {
|
||||
if parent := self.bp.get(self.parentHash); parent != nil {
|
||||
if self.bp.get(self.currentBlockHash) == nil {
|
||||
plog.DebugDetailf("HeadSection: <%s> connecting parent %s found in pool... creating singleton section", self.id, hex(self.parentHash))
|
||||
n := &node{
|
||||
hash: self.currentBlockHash,
|
||||
block: self.currentBlock,
|
||||
hashBy: self.id,
|
||||
blockBy: self.id,
|
||||
td: self.td,
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> connecting parent %s found in pool... creating singleton section", self.id, hex(self.parentHash))
|
||||
self.bp.nodeCacheLock.Lock()
|
||||
n, ok := self.bp.nodeCache[self.currentBlockHash]
|
||||
if !ok {
|
||||
panic("not found in nodeCache")
|
||||
}
|
||||
self.bp.nodeCacheLock.Unlock()
|
||||
self.bp.newSection([]*node{n}).activate(self)
|
||||
} else {
|
||||
plog.DebugDetailf("HeadSection: <%s> connecting parent %s found in pool...head section [%s] exists...not requesting hashes", self.id, hex(self.parentHash), sectionhex(parent.section))
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> connecting parent %s found in pool...head section [%s] exists...not requesting hashes", self.id, hex(self.parentHash), sectionhex(parent.section))
|
||||
self.bp.activateChain(parent.section, self, self.switchC, nil)
|
||||
}
|
||||
} else {
|
||||
plog.DebugDetailf("HeadSection: <%s> section [%s] requestBlockHashes", self.id, sectionhex(self.headSection))
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> section [%s] requestBlockHashes", self.id, sectionhex(self.headSection))
|
||||
self.requestBlockHashes(self.currentBlockHash)
|
||||
self.blockHashesRequestTimer = time.After(self.bp.Config.BlockHashesRequestInterval)
|
||||
return false
|
||||
|
@ -565,15 +569,6 @@ func (self *peer) getBlockHashes() bool {
|
|||
// main loop for head section process
|
||||
func (self *peer) run() {
|
||||
|
||||
self.lock.Lock()
|
||||
self.switchC = make(chan bool)
|
||||
self.idleC = make(chan bool)
|
||||
switchC := self.switchC
|
||||
plog.Debugf("HeadSection: <%s> section process for head %s started", self.id, hex(self.currentBlockHash))
|
||||
self.lock.Unlock()
|
||||
|
||||
self.blockHashesRequestTimer = nil
|
||||
|
||||
self.blocksRequestTimer = time.After(0)
|
||||
self.headInfoTimer = time.After(self.bp.Config.BlockHashesTimeout)
|
||||
self.bestIdleTimer = nil
|
||||
|
@ -585,7 +580,7 @@ LOOP:
|
|||
select {
|
||||
// to minitor section process behaviour
|
||||
case <-ping.C:
|
||||
plog.Debugf("HeadSection: <%s> section with head %s, idle: %v", self.id, hex(self.currentBlockHash), self.idle)
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> section with head %s, idle: %v", self.id, hex(self.currentBlockHash), self.idle)
|
||||
|
||||
// signal from AddBlockHashes that head section for current best peer is created
|
||||
// if sec == nil, it signals that chain info has updated (new block message)
|
||||
|
@ -614,12 +609,12 @@ LOOP:
|
|||
// there is no persistence here, so GC will just take care of cleaning up
|
||||
|
||||
// signal for peer switch, quit
|
||||
case <-switchC:
|
||||
case <-self.switchC:
|
||||
var complete = "incomplete "
|
||||
if self.idle {
|
||||
complete = "complete"
|
||||
}
|
||||
plog.Debugf("HeadSection: <%s> section with head %s %s... quit request loop due to peer switch", self.id, hex(self.currentBlockHash), complete)
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> section with head %s %s... quit request loop due to peer switch", self.id, hex(self.currentBlockHash), complete)
|
||||
break LOOP
|
||||
|
||||
// global quit for blockpool
|
||||
|
@ -633,7 +628,7 @@ LOOP:
|
|||
self.bp.status.lock.Lock()
|
||||
self.bp.status.badPeers[self.id]++
|
||||
self.bp.status.lock.Unlock()
|
||||
plog.Debugf("HeadSection: <%s> (headsection [%s]) quit channel closed : timed out without providing new blocks...quitting", self.id, sectionhex(self.headSection))
|
||||
glog.V(logger.Detail).Infof("HeadSection: <%s> (headsection [%s]) quit channel closed : timed out without providing new blocks...quitting", self.id, sectionhex(self.headSection))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,23 +1,30 @@
|
|||
package blockpool
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"math/big"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/blockpool/test"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/logger"
|
||||
"github.com/ethereum/go-ethereum/logger/glog"
|
||||
)
|
||||
|
||||
var (
|
||||
_ = flag.Set("alsologtostderr", "true")
|
||||
// _ = flag.Set("log_dir", ".")
|
||||
_ = flag.Set("v", "5")
|
||||
)
|
||||
|
||||
// the actual tests
|
||||
func TestAddPeer(t *testing.T) {
|
||||
test.LogInit()
|
||||
glog.V(logger.Error).Infoln("logging...")
|
||||
hashPool, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
peer0 := blockPoolTester.newPeer("peer0", 1, 1)
|
||||
peer1 := blockPoolTester.newPeer("peer1", 2, 2)
|
||||
peer2 := blockPoolTester.newPeer("peer2", 3, 3)
|
||||
peer0 := blockPoolTester.newPeer("peer0", 2, 2)
|
||||
peer1 := blockPoolTester.newPeer("peer1", 4, 4)
|
||||
peer2 := blockPoolTester.newPeer("peer2", 6, 6)
|
||||
var bestpeer *peer
|
||||
|
||||
blockPool.Start()
|
||||
|
@ -25,127 +32,149 @@ func TestAddPeer(t *testing.T) {
|
|||
// pool
|
||||
best := peer0.AddPeer()
|
||||
if !best {
|
||||
t.Errorf("peer0 (TD=1) not accepted as best")
|
||||
t.Errorf("peer0 (TD=2) not accepted as best")
|
||||
return
|
||||
}
|
||||
if blockPool.peers.best.id != "peer0" {
|
||||
t.Errorf("peer0 (TD=1) not set as best")
|
||||
t.Errorf("peer0 (TD=2) not set as best")
|
||||
return
|
||||
}
|
||||
peer0.serveBlocks(1, 2)
|
||||
|
||||
best = peer2.AddPeer()
|
||||
if !best {
|
||||
t.Errorf("peer2 (TD=3) not accepted as best")
|
||||
t.Errorf("peer2 (TD=6) not accepted as best")
|
||||
return
|
||||
}
|
||||
if blockPool.peers.best.id != "peer2" {
|
||||
t.Errorf("peer2 (TD=3) not set as best")
|
||||
t.Errorf("peer2 (TD=6) not set as best")
|
||||
return
|
||||
}
|
||||
peer2.waitBlocksRequests(3)
|
||||
peer2.serveBlocks(5, 6)
|
||||
|
||||
best = peer1.AddPeer()
|
||||
if best {
|
||||
t.Errorf("peer1 (TD=2) accepted as best")
|
||||
t.Errorf("peer1 (TD=4) accepted as best")
|
||||
return
|
||||
}
|
||||
if blockPool.peers.best.id != "peer2" {
|
||||
t.Errorf("peer2 (TD=3) not set any more as best")
|
||||
t.Errorf("peer2 (TD=6) not set any more as best")
|
||||
return
|
||||
}
|
||||
if blockPool.peers.best.td.Cmp(big.NewInt(int64(3))) != 0 {
|
||||
t.Errorf("peer1 TD not set")
|
||||
if blockPool.peers.best.td.Cmp(big.NewInt(int64(6))) != 0 {
|
||||
t.Errorf("peer2 TD=6 not set")
|
||||
return
|
||||
}
|
||||
|
||||
peer2.td = 4
|
||||
peer2.currentBlock = 4
|
||||
peer2.td = 8
|
||||
peer2.currentBlock = 8
|
||||
best = peer2.AddPeer()
|
||||
if !best {
|
||||
t.Errorf("peer2 (TD=4) not accepted as best")
|
||||
t.Errorf("peer2 (TD=8) not accepted as best")
|
||||
return
|
||||
}
|
||||
if blockPool.peers.best.id != "peer2" {
|
||||
t.Errorf("peer2 (TD=4) not set as best")
|
||||
t.Errorf("peer2 (TD=8) not set as best")
|
||||
return
|
||||
}
|
||||
if blockPool.peers.best.td.Cmp(big.NewInt(int64(4))) != 0 {
|
||||
t.Errorf("peer2 TD not updated")
|
||||
if blockPool.peers.best.td.Cmp(big.NewInt(int64(8))) != 0 {
|
||||
t.Errorf("peer2 TD = 8 not updated")
|
||||
return
|
||||
}
|
||||
peer2.waitBlocksRequests(4)
|
||||
|
||||
peer1.td = 3
|
||||
peer1.currentBlock = 3
|
||||
peer1.td = 6
|
||||
peer1.currentBlock = 6
|
||||
best = peer1.AddPeer()
|
||||
if best {
|
||||
t.Errorf("peer1 (TD=3) should not be set as best")
|
||||
t.Errorf("peer1 (TD=6) should not be set as best")
|
||||
return
|
||||
}
|
||||
if blockPool.peers.best.id == "peer1" {
|
||||
t.Errorf("peer1 (TD=3) should not be set as best")
|
||||
t.Errorf("peer1 (TD=6) should not be set as best")
|
||||
return
|
||||
}
|
||||
bestpeer, best = blockPool.peers.getPeer("peer1")
|
||||
if bestpeer.td.Cmp(big.NewInt(int64(3))) != 0 {
|
||||
t.Errorf("peer1 TD should be updated")
|
||||
if bestpeer.td.Cmp(big.NewInt(int64(6))) != 0 {
|
||||
t.Errorf("peer1 TD=6 should be updated")
|
||||
return
|
||||
}
|
||||
|
||||
blockPool.RemovePeer("peer2")
|
||||
bestpeer, best = blockPool.peers.getPeer("peer2")
|
||||
if bestpeer != nil {
|
||||
t.Errorf("peer2 not removed")
|
||||
return
|
||||
}
|
||||
|
||||
if blockPool.peers.best.id != "peer1" {
|
||||
t.Errorf("existing peer1 (TD=3) should be set as best peer")
|
||||
t.Errorf("existing peer1 (TD=6) should be set as best peer")
|
||||
return
|
||||
}
|
||||
peer1.waitBlocksRequests(3)
|
||||
|
||||
blockPool.RemovePeer("peer1")
|
||||
bestpeer, best = blockPool.peers.getPeer("peer1")
|
||||
if bestpeer != nil {
|
||||
t.Errorf("peer1 not removed")
|
||||
return
|
||||
}
|
||||
|
||||
if blockPool.peers.best.id != "peer0" {
|
||||
t.Errorf("existing peer0 (TD=1) should be set as best peer")
|
||||
t.Errorf("existing peer0 (TD=2) should be set as best peer")
|
||||
return
|
||||
}
|
||||
peer0.waitBlocksRequests(1)
|
||||
|
||||
blockPool.RemovePeer("peer0")
|
||||
bestpeer, best = blockPool.peers.getPeer("peer0")
|
||||
if bestpeer != nil {
|
||||
t.Errorf("peer1 not removed")
|
||||
t.Errorf("peer0 not removed")
|
||||
return
|
||||
}
|
||||
|
||||
// adding back earlier peer ok
|
||||
peer0.currentBlock = 3
|
||||
peer0.currentBlock = 5
|
||||
peer0.td = 5
|
||||
best = peer0.AddPeer()
|
||||
if !best {
|
||||
t.Errorf("peer0 (TD=1) should be set as best")
|
||||
t.Errorf("peer0 (TD=5) should be set as best")
|
||||
return
|
||||
}
|
||||
|
||||
if blockPool.peers.best.id != "peer0" {
|
||||
t.Errorf("peer0 (TD=1) should be set as best")
|
||||
t.Errorf("peer0 (TD=5) should be set as best")
|
||||
return
|
||||
}
|
||||
peer0.waitBlocksRequests(3)
|
||||
peer0.serveBlocks(4, 5)
|
||||
|
||||
hash := hashPool.IndexesToHashes([]int{0})[0]
|
||||
newblock := &types.Block{Td: common.Big3, HeaderHash: hash}
|
||||
hash := hashPool.IndexesToHashes([]int{6})[0]
|
||||
newblock := &types.Block{Td: big.NewInt(int64(6)), HeaderHash: hash}
|
||||
blockPool.chainEvents.Post(core.ChainHeadEvent{newblock})
|
||||
time.Sleep(100 * time.Millisecond)
|
||||
if blockPool.peers.best != nil {
|
||||
t.Errorf("no peer should be ahead of self")
|
||||
return
|
||||
}
|
||||
best = peer1.AddPeer()
|
||||
if blockPool.peers.best != nil {
|
||||
t.Errorf("still no peer should be ahead of self")
|
||||
t.Errorf("after peer1 (TD=6) still no peer should be ahead of self")
|
||||
return
|
||||
}
|
||||
|
||||
best = peer2.AddPeer()
|
||||
if !best {
|
||||
t.Errorf("peer2 (TD=4) not accepted as best")
|
||||
t.Errorf("peer2 (TD=8) not accepted as best")
|
||||
return
|
||||
}
|
||||
|
||||
blockPool.RemovePeer("peer2")
|
||||
if blockPool.peers.best != nil {
|
||||
t.Errorf("no peer should be ahead of self")
|
||||
return
|
||||
}
|
||||
|
||||
blockPool.Stop()
|
||||
}
|
||||
|
||||
func TestPeerPromotionByTdOnBlock(t *testing.T) {
|
||||
test.LogInit()
|
||||
_, blockPool, blockPoolTester := newTestBlockPool(t)
|
||||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(4)
|
||||
|
|
|
@ -6,6 +6,8 @@ import (
|
|||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/logger"
|
||||
"github.com/ethereum/go-ethereum/logger/glog"
|
||||
)
|
||||
|
||||
/*
|
||||
|
@ -88,7 +90,7 @@ func (self *BlockPool) newSection(nodes []*node) *section {
|
|||
self.set(n.hash, entry)
|
||||
}
|
||||
|
||||
plog.DebugDetailf("[%s] setup section process", sectionhex(sec))
|
||||
glog.V(logger.Detail).Infof("[%s] setup section process", sectionhex(sec))
|
||||
|
||||
go sec.run()
|
||||
return sec
|
||||
|
@ -132,13 +134,13 @@ func (self *section) addSectionToBlockChain(p *peer) {
|
|||
}
|
||||
self.bp.lock.Unlock()
|
||||
|
||||
plog.Debugf("[%s] insert %v blocks [%v/%v] into blockchain", sectionhex(self), len(blocks), hex(blocks[0].Hash()), hex(blocks[len(blocks)-1].Hash()))
|
||||
glog.V(logger.Debug).Infof("[%s] insert %v blocks [%v/%v] into blockchain", sectionhex(self), len(blocks), hex(blocks[0].Hash()), hex(blocks[len(blocks)-1].Hash()))
|
||||
err := self.bp.insertChain(blocks)
|
||||
if err != nil {
|
||||
self.invalid = true
|
||||
self.bp.peers.peerError(n.blockBy, ErrInvalidBlock, "%v", err)
|
||||
plog.Warnf("invalid block %x", n.hash)
|
||||
plog.Warnf("penalise peers %v (hash), %v (block)", n.hashBy, n.blockBy)
|
||||
glog.V(logger.Error).Infof("invalid block %x", n.hash)
|
||||
glog.V(logger.Error).Infof("penalise peers %v (hash), %v (block)", n.hashBy, n.blockBy)
|
||||
|
||||
// or invalid block and the entire chain needs to be removed
|
||||
self.removeChain()
|
||||
|
@ -146,7 +148,6 @@ func (self *section) addSectionToBlockChain(p *peer) {
|
|||
// check tds
|
||||
self.bp.wg.Add(1)
|
||||
go func() {
|
||||
plog.DebugDetailf("checking td")
|
||||
self.bp.checkTD(nodes...)
|
||||
self.bp.wg.Done()
|
||||
}()
|
||||
|
@ -159,15 +160,15 @@ func (self *section) addSectionToBlockChain(p *peer) {
|
|||
if child := self.bp.getChild(self); child != nil {
|
||||
select {
|
||||
case <-child.offC:
|
||||
plog.DebugDetailf("[%s] add complete child section [%s] to the blockchain", sectionhex(self), sectionhex(child))
|
||||
glog.V(logger.Detail).Infof("[%s] add complete child section [%s] to the blockchain", sectionhex(self), sectionhex(child))
|
||||
case child.poolRootC <- p:
|
||||
plog.DebugDetailf("[%s] add incomplete child section [%s] to the blockchain", sectionhex(self), sectionhex(child))
|
||||
glog.V(logger.Detail).Infof("[%s] add incomplete child section [%s] to the blockchain", sectionhex(self), sectionhex(child))
|
||||
}
|
||||
child.addSectionToBlockChain(p)
|
||||
} else {
|
||||
plog.DebugDetailf("[%s] no child section in pool", sectionhex(self))
|
||||
glog.V(logger.Detail).Infof("[%s] no child section in pool", sectionhex(self))
|
||||
}
|
||||
plog.DebugDetailf("[%s] section completely inserted to blockchain - remove", sectionhex(self))
|
||||
glog.V(logger.Detail).Infof("[%s] section completely inserted to blockchain - remove", sectionhex(self))
|
||||
// complete sections are removed. if called from within section process,
|
||||
// this must run in its own go routine to avoid deadlock
|
||||
self.remove()
|
||||
|
@ -216,7 +217,7 @@ LOOP:
|
|||
if self.peer != nil {
|
||||
name = self.peer.id
|
||||
}
|
||||
plog.DebugDetailf("[%s] peer <%s> active: %v", sectionhex(self), name, self.active)
|
||||
glog.V(logger.Detail).Infof("[%s] peer <%s> active: %v", sectionhex(self), name, self.active)
|
||||
|
||||
// global quit from blockpool
|
||||
case <-self.bp.quit:
|
||||
|
@ -239,30 +240,30 @@ LOOP:
|
|||
// peer quit or demoted, put section in idle mode
|
||||
case <-self.idleC:
|
||||
// peer quit or demoted, put section in idle mode
|
||||
plog.Debugf("[%s] peer <%s> quit or demoted", sectionhex(self), self.peer.id)
|
||||
glog.V(logger.Debug).Infof("[%s] peer <%s> quit or demoted", sectionhex(self), self.peer.id)
|
||||
self.switchOff()
|
||||
self.idleC = nil
|
||||
|
||||
// timebomb - if section is not complete in time, nuke the entire chain
|
||||
case <-self.suicideTimer:
|
||||
self.removeChain()
|
||||
plog.Debugf("[%s] timeout. (%v total attempts): missing %v/%v/%v...suicide", sectionhex(self), self.blocksRequests, self.missing, self.lastMissing, self.depth)
|
||||
glog.V(logger.Debug).Infof("[%s] timeout. (%v total attempts): missing %v/%v/%v...suicide", sectionhex(self), self.blocksRequests, self.missing, self.lastMissing, self.depth)
|
||||
self.suicideTimer = nil
|
||||
break LOOP
|
||||
|
||||
// closing suicideC triggers section suicide: removes section nodes from pool and terminates section process
|
||||
case <-self.suicideC:
|
||||
plog.DebugDetailf("[%s] quit", sectionhex(self))
|
||||
glog.V(logger.Detail).Infof("[%s] quit", sectionhex(self))
|
||||
break LOOP
|
||||
|
||||
// alarm for checking blocks in the section
|
||||
case <-self.blocksRequestTimer:
|
||||
plog.DebugDetailf("[%s] alarm: block request time", sectionhex(self))
|
||||
glog.V(logger.Detail).Infof("[%s] alarm: block request time", sectionhex(self))
|
||||
self.processC = self.missingC
|
||||
|
||||
// alarm for checking parent of the section or sending out hash requests
|
||||
case <-self.blockHashesRequestTimer:
|
||||
plog.DebugDetailf("[%s] alarm: hash request time", sectionhex(self))
|
||||
glog.V(logger.Detail).Infof("[%s] alarm: hash request time", sectionhex(self))
|
||||
self.blockHashesRequest()
|
||||
|
||||
// activate this section process with a peer
|
||||
|
@ -283,15 +284,13 @@ LOOP:
|
|||
case n, ok := <-self.processC:
|
||||
// channel closed, first iteration finished
|
||||
if !ok && !self.initialised {
|
||||
plog.DebugDetailf("[%s] section initalised: missing %v/%v/%v", sectionhex(self), self.missing, self.lastMissing, self.depth)
|
||||
glog.V(logger.Detail).Infof("[%s] section initalised: missing %v/%v/%v", sectionhex(self), self.missing, self.lastMissing, self.depth)
|
||||
self.initialised = true
|
||||
self.processC = nil
|
||||
// self.processC = make(chan *node, self.missing)
|
||||
self.checkRound()
|
||||
checking = false
|
||||
break
|
||||
}
|
||||
// plog.DebugDetailf("[%s] section proc step %v: missing %v/%v/%v", sectionhex(self), self.step, self.missing, self.lastMissing, self.depth)
|
||||
if !checking {
|
||||
self.step = 0
|
||||
self.missing = 0
|
||||
|
@ -322,19 +321,19 @@ LOOP:
|
|||
// if node has got block (received via async AddBlock call from protocol)
|
||||
if self.step == self.lastMissing {
|
||||
// current root of the pool
|
||||
plog.DebugDetailf("[%s] received block for current pool root %s", sectionhex(self), hex(n.hash))
|
||||
glog.V(logger.Detail).Infof("[%s] received block for current pool root %s", sectionhex(self), hex(n.hash))
|
||||
self.addSectionToBlockChain(self.peer)
|
||||
}
|
||||
} else {
|
||||
if (self.parentHash == common.Hash{}) && n == self.bottom {
|
||||
self.parentHash = block.ParentHash()
|
||||
plog.DebugDetailf("[%s] got parent head block hash %s...checking", sectionhex(self), hex(self.parentHash))
|
||||
glog.V(logger.Detail).Infof("[%s] got parent head block hash %s...checking", sectionhex(self), hex(self.parentHash))
|
||||
self.blockHashesRequest()
|
||||
}
|
||||
}
|
||||
}
|
||||
if self.initialised && self.step == self.lastMissing {
|
||||
plog.DebugDetailf("[%s] check if new blocks arrived (attempt %v): missing %v/%v/%v", sectionhex(self), self.blocksRequests, self.missing, self.lastMissing, self.depth)
|
||||
glog.V(logger.Detail).Infof("[%s] check if new blocks arrived (attempt %v): missing %v/%v/%v", sectionhex(self), self.blocksRequests, self.missing, self.lastMissing, self.depth)
|
||||
self.checkRound()
|
||||
checking = false
|
||||
}
|
||||
|
@ -347,7 +346,7 @@ LOOP:
|
|||
self.bp.wg.Done()
|
||||
}
|
||||
|
||||
plog.DebugDetailf("[%s] section process terminated: %v blocks retrieved (%v attempts), hash requests complete on root (%v attempts).", sectionhex(self), self.depth, self.blocksRequests, self.blockHashesRequests)
|
||||
glog.V(logger.Detail).Infof("[%s] section process terminated: %v blocks retrieved (%v attempts), hash requests complete on root (%v attempts).", sectionhex(self), self.depth, self.blocksRequests, self.blockHashesRequests)
|
||||
|
||||
}
|
||||
|
||||
|
@ -369,7 +368,7 @@ func (self *section) switchOn(newpeer *peer) {
|
|||
newp = newpeer.id
|
||||
}
|
||||
|
||||
plog.DebugDetailf("[%s] active mode <%s> -> <%s>", sectionhex(self), oldp, newp)
|
||||
glog.V(logger.Detail).Infof("[%s] active mode <%s> -> <%s>", sectionhex(self), oldp, newp)
|
||||
}
|
||||
|
||||
// activate section with current peer
|
||||
|
@ -411,7 +410,7 @@ func (self *section) switchOff() {
|
|||
if oldpeer != nil {
|
||||
oldp = oldpeer.id
|
||||
}
|
||||
plog.DebugDetailf("[%s] idle mode peer <%s> -> <> (%v total attempts): missing %v/%v/%v", sectionhex(self), oldp, self.blocksRequests, self.missing, self.lastMissing, self.depth)
|
||||
glog.V(logger.Detail).Infof("[%s] idle mode peer <%s> -> <> (%v total attempts): missing %v/%v/%v", sectionhex(self), oldp, self.blocksRequests, self.missing, self.lastMissing, self.depth)
|
||||
|
||||
self.active = false
|
||||
self.peer = nil
|
||||
|
@ -462,19 +461,15 @@ func (self *section) blockHashesRequest() {
|
|||
if parentSection == nil {
|
||||
|
||||
// only link to new parent if not switching peers
|
||||
// this protects against synchronisation issue where during switching
|
||||
// a demoted peer's fork will be chosen over the best peer's chain
|
||||
// because relinking the correct chain (activateChain) is overwritten here in
|
||||
// demoted peer's section process just before the section is put to idle mode
|
||||
if (self.parentHash != common.Hash{}) {
|
||||
if parent := self.bp.get(self.parentHash); parent != nil {
|
||||
parentSection = parent.section
|
||||
plog.DebugDetailf("[%s] blockHashesRequest: parent section [%s] linked\n", sectionhex(self), sectionhex(parentSection))
|
||||
glog.V(logger.Detail).Infof("[%s] blockHashesRequest: parent section [%s] linked\n", sectionhex(self), sectionhex(parentSection))
|
||||
link(parentSection, self)
|
||||
} else {
|
||||
if self.bp.hasBlock(self.parentHash) {
|
||||
self.poolRoot = true
|
||||
plog.DebugDetailf("[%s] blockHashesRequest: parentHash known ... inserting section in blockchain", sectionhex(self))
|
||||
glog.V(logger.Detail).Infof("[%s] blockHashesRequest: parentHash known ... inserting section in blockchain", sectionhex(self))
|
||||
self.addSectionToBlockChain(self.peer)
|
||||
self.blockHashesRequestTimer = nil
|
||||
self.blockHashesRequestsComplete = true
|
||||
|
@ -488,15 +483,15 @@ func (self *section) blockHashesRequest() {
|
|||
if parentSection != nil {
|
||||
// activate parent section with this peer
|
||||
// but only if not during switch mode
|
||||
plog.DebugDetailf("[%s] parent section [%s] activated\n", sectionhex(self), sectionhex(parentSection))
|
||||
glog.V(logger.Detail).Infof("[%s] parent section [%s] activated\n", sectionhex(self), sectionhex(parentSection))
|
||||
self.bp.activateChain(parentSection, self.peer, self.peer.switchC, nil)
|
||||
// if not root of chain, switch off
|
||||
plog.DebugDetailf("[%s] parent found, hash requests deactivated (after %v total attempts)\n", sectionhex(self), self.blockHashesRequests)
|
||||
glog.V(logger.Detail).Infof("[%s] parent found, hash requests deactivated (after %v total attempts)\n", sectionhex(self), self.blockHashesRequests)
|
||||
self.blockHashesRequestTimer = nil
|
||||
self.blockHashesRequestsComplete = true
|
||||
} else {
|
||||
self.blockHashesRequests++
|
||||
plog.DebugDetailf("[%s] hash request on root (%v total attempts)\n", sectionhex(self), self.blockHashesRequests)
|
||||
glog.V(logger.Detail).Infof("[%s] hash request on root (%v total attempts)\n", sectionhex(self), self.blockHashesRequests)
|
||||
self.peer.requestBlockHashes(self.bottom.hash)
|
||||
self.blockHashesRequestTimer = time.After(self.bp.Config.BlockHashesRequestInterval)
|
||||
}
|
||||
|
@ -508,12 +503,12 @@ func (self *section) blockHashesRequest() {
|
|||
func (self *section) checkRound() {
|
||||
if self.missing == 0 {
|
||||
// no missing blocks
|
||||
plog.DebugDetailf("[%s] section checked: got all blocks. process complete (%v total blocksRequests): missing %v/%v/%v", sectionhex(self), self.blocksRequests, self.missing, self.lastMissing, self.depth)
|
||||
glog.V(logger.Detail).Infof("[%s] section checked: got all blocks. process complete (%v total blocksRequests): missing %v/%v/%v", sectionhex(self), self.blocksRequests, self.missing, self.lastMissing, self.depth)
|
||||
self.blocksRequestsComplete = true
|
||||
self.blocksRequestTimer = nil
|
||||
} else {
|
||||
// some missing blocks
|
||||
plog.DebugDetailf("[%s] section checked: missing %v/%v/%v", sectionhex(self), self.missing, self.lastMissing, self.depth)
|
||||
glog.V(logger.Detail).Infof("[%s] section checked: missing %v/%v/%v", sectionhex(self), self.missing, self.lastMissing, self.depth)
|
||||
self.blocksRequests++
|
||||
pos := self.missing % self.bp.Config.BlockBatchSize
|
||||
if pos == 0 {
|
||||
|
@ -529,7 +524,7 @@ func (self *section) checkRound() {
|
|||
self.idle++
|
||||
// too many idle rounds
|
||||
if self.idle >= self.bp.Config.BlocksRequestMaxIdleRounds {
|
||||
plog.DebugDetailf("[%s] block requests had %v idle rounds (%v total attempts): missing %v/%v/%v\ngiving up...", sectionhex(self), self.idle, self.blocksRequests, self.missing, self.lastMissing, self.depth)
|
||||
glog.V(logger.Detail).Infof("[%s] block requests had %v idle rounds (%v total attempts): missing %v/%v/%v\ngiving up...", sectionhex(self), self.idle, self.blocksRequests, self.missing, self.lastMissing, self.depth)
|
||||
self.removeChain()
|
||||
}
|
||||
} else {
|
||||
|
@ -558,7 +553,7 @@ func link(parent *section, child *section) {
|
|||
if exChild != nil && exChild != child {
|
||||
if child != nil {
|
||||
// if child is nil it is not a real fork
|
||||
plog.DebugDetailf("[%s] chain fork [%s] -> [%s]", sectionhex(parent), sectionhex(exChild), sectionhex(child))
|
||||
glog.V(logger.Detail).Infof("[%s] chain fork [%s] -> [%s]", sectionhex(parent), sectionhex(exChild), sectionhex(child))
|
||||
}
|
||||
exChild.parent = nil
|
||||
}
|
||||
|
@ -568,7 +563,7 @@ func link(parent *section, child *section) {
|
|||
if exParent != nil && exParent != parent {
|
||||
if parent != nil {
|
||||
// if parent is nil it is not a real fork, but suicide delinking section
|
||||
plog.DebugDetailf("[%s] chain reverse fork [%s] -> [%s]", sectionhex(child), sectionhex(exParent), sectionhex(parent))
|
||||
glog.V(logger.Detail).Infof("[%s] chain reverse fork [%s] -> [%s]", sectionhex(child), sectionhex(exParent), sectionhex(parent))
|
||||
}
|
||||
exParent.child = nil
|
||||
}
|
||||
|
@ -583,7 +578,7 @@ func link(parent *section, child *section) {
|
|||
caller must hold chain lock
|
||||
*/
|
||||
func (self *BlockPool) splitSection(parent *section, entry *entry) {
|
||||
plog.DebugDetailf("[%s] split section at fork", sectionhex(parent))
|
||||
glog.V(logger.Detail).Infof("[%s] split section at fork", sectionhex(parent))
|
||||
parent.deactivate()
|
||||
waiter := make(chan bool)
|
||||
parent.wait(waiter)
|
||||
|
@ -606,14 +601,14 @@ func (self *BlockPool) linkSections(nodes []*node, parent, child *section) (sec
|
|||
// and launch section process fetching block and further hashes
|
||||
if len(nodes) > 0 {
|
||||
sec = self.newSection(nodes)
|
||||
plog.Debugf("[%s]->[%s](%v)->[%s] new chain section", sectionhex(parent), sectionhex(sec), len(nodes), sectionhex(child))
|
||||
glog.V(logger.Debug).Infof("[%s]->[%s](%v)->[%s] new chain section", sectionhex(parent), sectionhex(sec), len(nodes), sectionhex(child))
|
||||
link(parent, sec)
|
||||
link(sec, child)
|
||||
} else {
|
||||
if parent != nil && child != nil {
|
||||
// now this can only happen if we allow response to hash request to include <from> hash
|
||||
// in this case we just link parent and child (without needing root block of child section)
|
||||
plog.Debugf("[%s]->[%s] connecting known sections", sectionhex(parent), sectionhex(child))
|
||||
glog.V(logger.Debug).Infof("[%s]->[%s] connecting known sections", sectionhex(parent), sectionhex(child))
|
||||
link(parent, child)
|
||||
}
|
||||
}
|
||||
|
@ -624,10 +619,10 @@ func (self *section) activate(p *peer) {
|
|||
self.bp.wg.Add(1)
|
||||
select {
|
||||
case <-self.offC:
|
||||
plog.DebugDetailf("[%s] completed section process. cannot activate for peer <%s>", sectionhex(self), p.id)
|
||||
glog.V(logger.Detail).Infof("[%s] completed section process. cannot activate for peer <%s>", sectionhex(self), p.id)
|
||||
self.bp.wg.Done()
|
||||
case self.controlC <- p:
|
||||
plog.DebugDetailf("[%s] activate section process for peer <%s>", sectionhex(self), p.id)
|
||||
glog.V(logger.Detail).Infof("[%s] activate section process for peer <%s>", sectionhex(self), p.id)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -641,16 +636,16 @@ func (self *section) remove() {
|
|||
select {
|
||||
case <-self.offC:
|
||||
close(self.suicideC)
|
||||
plog.DebugDetailf("[%s] remove: suicide", sectionhex(self))
|
||||
glog.V(logger.Detail).Infof("[%s] remove: suicide", sectionhex(self))
|
||||
case <-self.suicideC:
|
||||
plog.DebugDetailf("[%s] remove: suicided already", sectionhex(self))
|
||||
glog.V(logger.Detail).Infof("[%s] remove: suicided already", sectionhex(self))
|
||||
default:
|
||||
plog.DebugDetailf("[%s] remove: suicide", sectionhex(self))
|
||||
glog.V(logger.Detail).Infof("[%s] remove: suicide", sectionhex(self))
|
||||
close(self.suicideC)
|
||||
}
|
||||
self.unlink()
|
||||
self.bp.remove(self)
|
||||
plog.DebugDetailf("[%s] removed section.", sectionhex(self))
|
||||
glog.V(logger.Detail).Infof("[%s] removed section.", sectionhex(self))
|
||||
|
||||
}
|
||||
|
||||
|
@ -661,7 +656,7 @@ func (self *section) removeChain() {
|
|||
child := self.child
|
||||
self.bp.chainLock.RUnlock()
|
||||
|
||||
plog.DebugDetailf("[%s] remove chain", sectionhex(self))
|
||||
glog.V(logger.Detail).Infof("[%s] remove chain", sectionhex(self))
|
||||
self.remove()
|
||||
if child != nil {
|
||||
child.removeChain()
|
||||
|
|
|
@ -51,7 +51,6 @@ func checkStatus(t *testing.T, bp *BlockPool, syncing bool, expected []int) (err
|
|||
got := getStatusValues(s)
|
||||
for i, v := range expected {
|
||||
err = test.CheckInt(statusFields[i], got[i], v, t)
|
||||
// fmt.Printf("%v: %v (%v)\n", statusFields[i], got[i], v)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
@ -60,9 +59,6 @@ func checkStatus(t *testing.T, bp *BlockPool, syncing bool, expected []int) (err
|
|||
}
|
||||
|
||||
func TestBlockPoolStatus(t *testing.T) {
|
||||
t.Skip() // :FIXME:
|
||||
|
||||
test.LogInit()
|
||||
var err error
|
||||
n := 3
|
||||
for n > 0 {
|
||||
|
@ -86,19 +82,17 @@ func testBlockPoolStatus(t *testing.T) (err error) {
|
|||
blockPoolTester.blockChain[0] = nil
|
||||
blockPoolTester.initRefBlockChain(12)
|
||||
blockPoolTester.refBlockChain[3] = []int{4, 7}
|
||||
delete(blockPoolTester.refBlockChain, 6)
|
||||
blockPoolTester.refBlockChain[5] = []int{10}
|
||||
blockPoolTester.refBlockChain[6] = []int{11}
|
||||
blockPoolTester.refBlockChain[9] = []int{6}
|
||||
delete(blockPoolTester.refBlockChain, 10)
|
||||
|
||||
blockPool.Start()
|
||||
|
||||
blockPoolTester.tds = make(map[int]int)
|
||||
blockPoolTester.tds[9] = 1
|
||||
blockPoolTester.tds[11] = 3
|
||||
blockPoolTester.tds[6] = 2
|
||||
|
||||
peer1 := blockPoolTester.newPeer("peer1", 1, 9)
|
||||
peer2 := blockPoolTester.newPeer("peer2", 2, 6)
|
||||
peer3 := blockPoolTester.newPeer("peer3", 3, 11)
|
||||
peer4 := blockPoolTester.newPeer("peer4", 1, 9)
|
||||
peer1 := blockPoolTester.newPeer("peer1", 9, 9)
|
||||
peer2 := blockPoolTester.newPeer("peer2", 10, 10)
|
||||
peer3 := blockPoolTester.newPeer("peer3", 11, 11)
|
||||
peer4 := blockPoolTester.newPeer("peer4", 9, 9)
|
||||
peer2.blocksRequestsMap = peer1.blocksRequestsMap
|
||||
|
||||
var expected []int
|
||||
|
@ -124,119 +118,112 @@ func testBlockPoolStatus(t *testing.T) (err error) {
|
|||
}
|
||||
|
||||
peer1.serveBlockHashes(9, 8, 7, 3, 2)
|
||||
expected = []int{6, 5, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0}
|
||||
expected = []int{5, 5, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer1.serveBlocks(3, 7, 8)
|
||||
expected = []int{6, 5, 3, 3, 0, 1, 0, 0, 1, 1, 1, 1, 0}
|
||||
expected = []int{5, 5, 3, 3, 0, 1, 0, 0, 1, 1, 1, 1, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer1.serveBlocks(2, 3)
|
||||
expected = []int{6, 5, 4, 4, 0, 1, 0, 0, 1, 1, 1, 1, 0}
|
||||
expected = []int{5, 5, 4, 4, 0, 1, 0, 0, 1, 1, 1, 1, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer4.AddPeer()
|
||||
expected = []int{6, 5, 4, 4, 0, 2, 0, 0, 2, 2, 1, 1, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer4.sendBlockHashes(12, 11)
|
||||
expected = []int{6, 5, 4, 4, 0, 2, 0, 0, 2, 2, 1, 1, 0}
|
||||
expected = []int{5, 5, 4, 4, 0, 2, 0, 0, 2, 2, 1, 1, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer2.AddPeer()
|
||||
expected = []int{6, 5, 4, 4, 0, 3, 0, 0, 3, 3, 1, 2, 0}
|
||||
expected = []int{5, 5, 4, 4, 0, 3, 0, 0, 3, 3, 1, 2, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer2.serveBlocks(5, 6)
|
||||
peer2.serveBlockHashes(6, 5, 4, 3, 2)
|
||||
expected = []int{10, 8, 5, 5, 0, 3, 1, 0, 3, 3, 2, 2, 0}
|
||||
peer2.serveBlocks(5, 10)
|
||||
peer2.serveBlockHashes(10, 5, 4, 3, 2)
|
||||
expected = []int{8, 8, 5, 5, 0, 3, 1, 0, 3, 3, 2, 2, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer2.serveBlocks(2, 3, 4)
|
||||
expected = []int{10, 8, 6, 6, 0, 3, 1, 0, 3, 3, 2, 2, 0}
|
||||
expected = []int{8, 8, 6, 6, 0, 3, 1, 0, 3, 3, 2, 2, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
blockPool.RemovePeer("peer2")
|
||||
expected = []int{10, 8, 6, 6, 0, 3, 1, 0, 3, 2, 2, 2, 0}
|
||||
expected = []int{8, 8, 6, 6, 0, 3, 1, 0, 3, 2, 2, 2, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer1.serveBlockHashes(2, 1, 0)
|
||||
expected = []int{11, 9, 6, 6, 0, 3, 1, 0, 3, 2, 2, 2, 0}
|
||||
expected = []int{9, 9, 6, 6, 0, 3, 1, 0, 3, 2, 2, 2, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer1.serveBlocks(1, 2)
|
||||
expected = []int{11, 9, 7, 7, 0, 3, 1, 0, 3, 2, 2, 2, 0}
|
||||
expected = []int{9, 9, 7, 7, 0, 3, 1, 0, 3, 2, 2, 2, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer1.serveBlocks(4, 5)
|
||||
expected = []int{11, 9, 8, 8, 0, 3, 1, 0, 3, 2, 2, 2, 0}
|
||||
expected = []int{9, 9, 8, 8, 0, 3, 1, 0, 3, 2, 2, 2, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer3.AddPeer()
|
||||
expected = []int{11, 9, 8, 8, 0, 4, 1, 0, 4, 3, 2, 3, 0}
|
||||
expected = []int{9, 9, 8, 8, 0, 4, 1, 0, 4, 3, 2, 3, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer3.serveBlocks(10, 11)
|
||||
expected = []int{12, 9, 9, 9, 0, 4, 1, 0, 4, 3, 3, 3, 0}
|
||||
peer3.serveBlocks(6, 11)
|
||||
expected = []int{10, 9, 9, 9, 0, 4, 1, 0, 4, 3, 3, 3, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer3.serveBlockHashes(11, 10, 9)
|
||||
expected = []int{14, 11, 9, 9, 0, 4, 1, 0, 4, 3, 3, 3, 0}
|
||||
peer3.serveBlockHashes(11, 6, 9)
|
||||
expected = []int{11, 11, 9, 9, 0, 4, 1, 0, 4, 3, 3, 3, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
peer4.sendBlocks(11, 12)
|
||||
expected = []int{14, 11, 9, 9, 0, 4, 1, 0, 4, 3, 4, 3, 1}
|
||||
expected = []int{11, 11, 9, 9, 0, 4, 1, 0, 4, 3, 4, 3, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
peer3.serveBlocks(9, 10)
|
||||
expected = []int{14, 11, 10, 10, 0, 4, 1, 0, 4, 3, 4, 3, 1}
|
||||
peer3.serveBlocks(9, 6)
|
||||
expected = []int{11, 11, 10, 10, 0, 4, 1, 0, 4, 3, 4, 3, 0}
|
||||
err = checkStatus(nil, blockPool, true, expected)
|
||||
if err != nil {
|
||||
return
|
||||
|
@ -245,10 +232,11 @@ func testBlockPoolStatus(t *testing.T) (err error) {
|
|||
peer3.serveBlocks(0, 1)
|
||||
blockPool.Wait(waitTimeout)
|
||||
time.Sleep(200 * time.Millisecond)
|
||||
|
||||
expected = []int{11, 3, 11, 3, 8, 4, 1, 8, 4, 3, 4, 3, 0}
|
||||
err = checkStatus(nil, blockPool, false, expected)
|
||||
blockPool.Stop()
|
||||
|
||||
expected = []int{14, 3, 11, 3, 8, 4, 1, 8, 4, 3, 4, 3, 1}
|
||||
err = checkStatus(nil, blockPool, false, expected)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
|
@ -32,7 +32,6 @@ func (js *jsre) adminBindings() {
|
|||
admin.Set("unlock", js.unlock)
|
||||
admin.Set("import", js.importChain)
|
||||
admin.Set("export", js.exportChain)
|
||||
admin.Set("dumpBlock", js.dumpBlock)
|
||||
admin.Set("verbosity", js.verbosity)
|
||||
admin.Set("backtrace", js.backtrace)
|
||||
|
||||
|
@ -43,6 +42,12 @@ func (js *jsre) adminBindings() {
|
|||
miner.Set("stop", js.stopMining)
|
||||
miner.Set("hashrate", js.hashrate)
|
||||
miner.Set("setExtra", js.setExtra)
|
||||
|
||||
admin.Set("debug", struct{}{})
|
||||
t, _ = admin.Get("debug")
|
||||
debug := t.Object()
|
||||
debug.Set("printBlock", js.printBlock)
|
||||
debug.Set("dumpBlock", js.dumpBlock)
|
||||
}
|
||||
|
||||
func (js *jsre) setExtra(call otto.FunctionCall) otto.Value {
|
||||
|
@ -284,6 +289,32 @@ func (js *jsre) exportChain(call otto.FunctionCall) otto.Value {
|
|||
return otto.TrueValue()
|
||||
}
|
||||
|
||||
func (js *jsre) printBlock(call otto.FunctionCall) otto.Value {
|
||||
var block *types.Block
|
||||
if len(call.ArgumentList) > 0 {
|
||||
if call.Argument(0).IsNumber() {
|
||||
num, _ := call.Argument(0).ToInteger()
|
||||
block = js.ethereum.ChainManager().GetBlockByNumber(uint64(num))
|
||||
} else if call.Argument(0).IsString() {
|
||||
hash, _ := call.Argument(0).ToString()
|
||||
block = js.ethereum.ChainManager().GetBlock(common.HexToHash(hash))
|
||||
} else {
|
||||
fmt.Println("invalid argument for dump. Either hex string or number")
|
||||
}
|
||||
|
||||
} else {
|
||||
block = js.ethereum.ChainManager().CurrentBlock()
|
||||
}
|
||||
if block == nil {
|
||||
fmt.Println("block not found")
|
||||
return otto.UndefinedValue()
|
||||
}
|
||||
|
||||
fmt.Println(block)
|
||||
|
||||
return otto.UndefinedValue()
|
||||
}
|
||||
|
||||
func (js *jsre) dumpBlock(call otto.FunctionCall) otto.Value {
|
||||
var block *types.Block
|
||||
if len(call.ArgumentList) > 0 {
|
||||
|
|
|
@ -175,7 +175,7 @@ func TestBlockChain(t *testing.T) {
|
|||
defer ethereum.Stop()
|
||||
|
||||
// should get current block
|
||||
val0, err := repl.re.Run("admin.dumpBlock()")
|
||||
val0, err := repl.re.Run("admin.debug.dumpBlock()")
|
||||
if err != nil {
|
||||
t.Errorf("expected no error, got %v", err)
|
||||
}
|
||||
|
@ -197,7 +197,7 @@ func TestBlockChain(t *testing.T) {
|
|||
var val1 otto.Value
|
||||
|
||||
// should get current block
|
||||
val1, err = repl.re.Run("admin.dumpBlock()")
|
||||
val1, err = repl.re.Run("admin.debug.dumpBlock()")
|
||||
if err != nil {
|
||||
t.Errorf("expected no error, got %v", err)
|
||||
}
|
||||
|
|
|
@ -36,11 +36,13 @@ import (
|
|||
"github.com/ethereum/go-ethereum/accounts"
|
||||
"github.com/ethereum/go-ethereum/cmd/utils"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core"
|
||||
"github.com/ethereum/go-ethereum/core/state"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
"github.com/ethereum/go-ethereum/eth"
|
||||
"github.com/ethereum/go-ethereum/logger"
|
||||
"github.com/peterh/liner"
|
||||
"path"
|
||||
)
|
||||
import _ "net/http/pprof"
|
||||
|
||||
|
@ -208,12 +210,18 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
|
|||
Name: "export",
|
||||
Usage: `export blockchain into file`,
|
||||
},
|
||||
{
|
||||
Action: upgradeDb,
|
||||
Name: "upgradedb",
|
||||
Usage: "upgrade chainblock database",
|
||||
},
|
||||
}
|
||||
app.Flags = []cli.Flag{
|
||||
utils.UnlockedAccountFlag,
|
||||
utils.PasswordFileFlag,
|
||||
utils.BootnodesFlag,
|
||||
utils.DataDirFlag,
|
||||
utils.BlockchainVersionFlag,
|
||||
utils.JSpathFlag,
|
||||
utils.ListenPortFlag,
|
||||
utils.MaxPeersFlag,
|
||||
|
@ -437,13 +445,29 @@ func importchain(ctx *cli.Context) {
|
|||
if len(ctx.Args()) != 1 {
|
||||
utils.Fatalf("This command requires an argument.")
|
||||
}
|
||||
chainmgr, _, _ := utils.GetChain(ctx)
|
||||
|
||||
cfg := utils.MakeEthConfig(ClientIdentifier, Version, ctx)
|
||||
cfg.SkipBcVersionCheck = true
|
||||
|
||||
ethereum, err := eth.New(cfg)
|
||||
if err != nil {
|
||||
utils.Fatalf("%v\n", err)
|
||||
}
|
||||
|
||||
chainmgr := ethereum.ChainManager()
|
||||
start := time.Now()
|
||||
err := utils.ImportChain(chainmgr, ctx.Args().First())
|
||||
err = utils.ImportChain(chainmgr, ctx.Args().First())
|
||||
if err != nil {
|
||||
utils.Fatalf("Import error: %v\n", err)
|
||||
}
|
||||
|
||||
// force database flush
|
||||
ethereum.BlockDb().Close()
|
||||
ethereum.StateDb().Close()
|
||||
ethereum.ExtraDb().Close()
|
||||
|
||||
fmt.Printf("Import done in %v", time.Since(start))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -451,9 +475,18 @@ func exportchain(ctx *cli.Context) {
|
|||
if len(ctx.Args()) != 1 {
|
||||
utils.Fatalf("This command requires an argument.")
|
||||
}
|
||||
chainmgr, _, _ := utils.GetChain(ctx)
|
||||
|
||||
cfg := utils.MakeEthConfig(ClientIdentifier, Version, ctx)
|
||||
cfg.SkipBcVersionCheck = true
|
||||
|
||||
ethereum, err := eth.New(cfg)
|
||||
if err != nil {
|
||||
utils.Fatalf("%v\n", err)
|
||||
}
|
||||
|
||||
chainmgr := ethereum.ChainManager()
|
||||
start := time.Now()
|
||||
err := utils.ExportChain(chainmgr, ctx.Args().First())
|
||||
err = utils.ExportChain(chainmgr, ctx.Args().First())
|
||||
if err != nil {
|
||||
utils.Fatalf("Export error: %v\n", err)
|
||||
}
|
||||
|
@ -461,6 +494,60 @@ func exportchain(ctx *cli.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
func upgradeDb(ctx *cli.Context) {
|
||||
fmt.Println("Upgrade blockchain DB")
|
||||
|
||||
cfg := utils.MakeEthConfig(ClientIdentifier, Version, ctx)
|
||||
cfg.SkipBcVersionCheck = true
|
||||
|
||||
ethereum, err := eth.New(cfg)
|
||||
if err != nil {
|
||||
utils.Fatalf("%v\n", err)
|
||||
}
|
||||
|
||||
v, _ := ethereum.BlockDb().Get([]byte("BlockchainVersion"))
|
||||
bcVersion := int(common.NewValue(v).Uint())
|
||||
|
||||
if bcVersion == 0 {
|
||||
bcVersion = core.BlockChainVersion
|
||||
}
|
||||
|
||||
filename := fmt.Sprintf("blockchain_%d_%s.chain", bcVersion, time.Now().Format("2006-01-02_15:04:05"))
|
||||
exportFile := path.Join(ctx.GlobalString(utils.DataDirFlag.Name), filename)
|
||||
|
||||
err = utils.ExportChain(ethereum.ChainManager(), exportFile)
|
||||
if err != nil {
|
||||
utils.Fatalf("Unable to export chain for reimport %s\n", err)
|
||||
}
|
||||
|
||||
ethereum.BlockDb().Close()
|
||||
ethereum.StateDb().Close()
|
||||
ethereum.ExtraDb().Close()
|
||||
|
||||
os.RemoveAll(path.Join(ctx.GlobalString(utils.DataDirFlag.Name), "blockchain"))
|
||||
|
||||
ethereum, err = eth.New(cfg)
|
||||
if err != nil {
|
||||
utils.Fatalf("%v\n", err)
|
||||
}
|
||||
|
||||
ethereum.BlockDb().Put([]byte("BlockchainVersion"), common.NewValue(core.BlockChainVersion).Bytes())
|
||||
|
||||
err = utils.ImportChain(ethereum.ChainManager(), exportFile)
|
||||
if err != nil {
|
||||
utils.Fatalf("Import error %v (a backup is made in %s, use the import command to import it)\n", err, exportFile)
|
||||
}
|
||||
|
||||
// force database flush
|
||||
ethereum.BlockDb().Close()
|
||||
ethereum.StateDb().Close()
|
||||
ethereum.ExtraDb().Close()
|
||||
|
||||
os.Remove(exportFile)
|
||||
|
||||
fmt.Println("Import finished")
|
||||
}
|
||||
|
||||
func dump(ctx *cli.Context) {
|
||||
chainmgr, _, stateDb := utils.GetChain(ctx)
|
||||
for _, arg := range ctx.Args() {
|
||||
|
|
|
@ -155,7 +155,11 @@ func ImportChain(chainmgr *core.ChainManager, fn string) error {
|
|||
|
||||
chainmgr.Reset()
|
||||
stream := rlp.NewStream(fh)
|
||||
var i int
|
||||
var i, n int
|
||||
|
||||
batchSize := 2500
|
||||
blocks := make(types.Blocks, batchSize)
|
||||
|
||||
for ; ; i++ {
|
||||
var b types.Block
|
||||
if err := stream.Decode(&b); err == io.EOF {
|
||||
|
@ -163,10 +167,25 @@ func ImportChain(chainmgr *core.ChainManager, fn string) error {
|
|||
} else if err != nil {
|
||||
return fmt.Errorf("at block %d: %v", i, err)
|
||||
}
|
||||
if err := chainmgr.InsertChain(types.Blocks{&b}); err != nil {
|
||||
return fmt.Errorf("invalid block %d: %v", i, err)
|
||||
|
||||
blocks[n] = &b
|
||||
n++
|
||||
|
||||
if n == batchSize {
|
||||
if err := chainmgr.InsertChain(blocks); err != nil {
|
||||
return fmt.Errorf("invalid block %v", err)
|
||||
}
|
||||
n = 0
|
||||
blocks = make(types.Blocks, batchSize)
|
||||
}
|
||||
}
|
||||
|
||||
if n > 0 {
|
||||
if err := chainmgr.InsertChain(blocks[:n]); err != nil {
|
||||
return fmt.Errorf("invalid block %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("imported %d blocks\n", i)
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"runtime"
|
||||
|
||||
"github.com/codegangsta/cli"
|
||||
"github.com/ethereum/ethash"
|
||||
"github.com/ethereum/go-ethereum/accounts"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/core"
|
||||
|
@ -83,6 +84,11 @@ var (
|
|||
Usage: "Network Id",
|
||||
Value: eth.NetworkId,
|
||||
}
|
||||
BlockchainVersionFlag = cli.IntFlag{
|
||||
Name: "blockchainversion",
|
||||
Usage: "Blockchain version",
|
||||
Value: core.BlockChainVersion,
|
||||
}
|
||||
|
||||
// miner settings
|
||||
MinerThreadsFlag = cli.IntFlag{
|
||||
|
@ -237,29 +243,32 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config {
|
|||
glog.SetLogDir(ctx.GlobalString(LogFileFlag.Name))
|
||||
|
||||
return ð.Config{
|
||||
Name: common.MakeName(clientID, version),
|
||||
DataDir: ctx.GlobalString(DataDirFlag.Name),
|
||||
ProtocolVersion: ctx.GlobalInt(ProtocolVersionFlag.Name),
|
||||
NetworkId: ctx.GlobalInt(NetworkIdFlag.Name),
|
||||
LogFile: ctx.GlobalString(LogFileFlag.Name),
|
||||
LogLevel: ctx.GlobalInt(LogLevelFlag.Name),
|
||||
LogJSON: ctx.GlobalString(LogJSONFlag.Name),
|
||||
Etherbase: ctx.GlobalString(EtherbaseFlag.Name),
|
||||
MinerThreads: ctx.GlobalInt(MinerThreadsFlag.Name),
|
||||
AccountManager: GetAccountManager(ctx),
|
||||
VmDebug: ctx.GlobalBool(VMDebugFlag.Name),
|
||||
MaxPeers: ctx.GlobalInt(MaxPeersFlag.Name),
|
||||
Port: ctx.GlobalString(ListenPortFlag.Name),
|
||||
NAT: GetNAT(ctx),
|
||||
NodeKey: GetNodeKey(ctx),
|
||||
Shh: true,
|
||||
Dial: true,
|
||||
BootNodes: ctx.GlobalString(BootnodesFlag.Name),
|
||||
Name: common.MakeName(clientID, version),
|
||||
DataDir: ctx.GlobalString(DataDirFlag.Name),
|
||||
ProtocolVersion: ctx.GlobalInt(ProtocolVersionFlag.Name),
|
||||
BlockChainVersion: ctx.GlobalInt(BlockchainVersionFlag.Name),
|
||||
SkipBcVersionCheck: false,
|
||||
NetworkId: ctx.GlobalInt(NetworkIdFlag.Name),
|
||||
LogFile: ctx.GlobalString(LogFileFlag.Name),
|
||||
LogLevel: ctx.GlobalInt(LogLevelFlag.Name),
|
||||
LogJSON: ctx.GlobalString(LogJSONFlag.Name),
|
||||
Etherbase: ctx.GlobalString(EtherbaseFlag.Name),
|
||||
MinerThreads: ctx.GlobalInt(MinerThreadsFlag.Name),
|
||||
AccountManager: GetAccountManager(ctx),
|
||||
VmDebug: ctx.GlobalBool(VMDebugFlag.Name),
|
||||
MaxPeers: ctx.GlobalInt(MaxPeersFlag.Name),
|
||||
Port: ctx.GlobalString(ListenPortFlag.Name),
|
||||
NAT: GetNAT(ctx),
|
||||
NodeKey: GetNodeKey(ctx),
|
||||
Shh: true,
|
||||
Dial: true,
|
||||
BootNodes: ctx.GlobalString(BootnodesFlag.Name),
|
||||
}
|
||||
}
|
||||
|
||||
func GetChain(ctx *cli.Context) (*core.ChainManager, common.Database, common.Database) {
|
||||
dataDir := ctx.GlobalString(DataDirFlag.Name)
|
||||
|
||||
blockDb, err := ethdb.NewLDBDatabase(path.Join(dataDir, "blockchain"))
|
||||
if err != nil {
|
||||
Fatalf("Could not open database: %v", err)
|
||||
|
@ -269,7 +278,20 @@ func GetChain(ctx *cli.Context) (*core.ChainManager, common.Database, common.Dat
|
|||
if err != nil {
|
||||
Fatalf("Could not open database: %v", err)
|
||||
}
|
||||
return core.NewChainManager(blockDb, stateDb, new(event.TypeMux)), blockDb, stateDb
|
||||
|
||||
extraDb, err := ethdb.NewLDBDatabase(path.Join(dataDir, "extra"))
|
||||
if err != nil {
|
||||
Fatalf("Could not open database: %v", err)
|
||||
}
|
||||
|
||||
eventMux := new(event.TypeMux)
|
||||
chainManager := core.NewChainManager(blockDb, stateDb, eventMux)
|
||||
pow := ethash.New(chainManager)
|
||||
txPool := core.NewTxPool(eventMux, chainManager.State)
|
||||
blockProcessor := core.NewBlockProcessor(stateDb, extraDb, pow, txPool, chainManager, eventMux)
|
||||
chainManager.SetProcessor(blockProcessor)
|
||||
|
||||
return chainManager, blockDb, stateDb
|
||||
}
|
||||
|
||||
func GetAccountManager(ctx *cli.Context) *accounts.Manager {
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
package common
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"runtime"
|
||||
"runtime/debug"
|
||||
)
|
||||
|
||||
func Report(extra ...interface{}) {
|
||||
fmt.Fprintln(os.Stderr, "You've encountered a sought after, hard to reproduce bug. Please report this to the developers <3 https://github.com/ethereum/go-ethereum/issues")
|
||||
fmt.Fprintln(os.Stderr, extra...)
|
||||
|
||||
_, file, line, _ := runtime.Caller(1)
|
||||
fmt.Fprintf(os.Stderr, "%v:%v\n", file, line)
|
||||
|
||||
debug.PrintStack()
|
||||
|
||||
fmt.Fprintln(os.Stderr, "#### BUG! PLEASE REPORT ####")
|
||||
}
|
|
@ -18,6 +18,12 @@ import (
|
|||
"gopkg.in/fatih/set.v0"
|
||||
)
|
||||
|
||||
const (
|
||||
// must be bumped when consensus algorithm is changed, this forces the upgradedb
|
||||
// command to be run (forces the blocks to be imported again using the new algorithm)
|
||||
BlockChainVersion = 1
|
||||
)
|
||||
|
||||
var statelogger = logger.NewLogger("BLOCK")
|
||||
|
||||
type BlockProcessor struct {
|
||||
|
|
|
@ -284,11 +284,14 @@ func (self *ChainManager) Export(w io.Writer) error {
|
|||
defer self.mu.RUnlock()
|
||||
glog.V(logger.Info).Infof("exporting %v blocks...\n", self.currentBlock.Header().Number)
|
||||
|
||||
for block := self.currentBlock; block != nil; block = self.GetBlock(block.Header().ParentHash) {
|
||||
if err := block.EncodeRLP(w); err != nil {
|
||||
last := self.currentBlock.NumberU64()
|
||||
|
||||
for nr := uint64(0); nr <= last; nr++ {
|
||||
if err := self.GetBlockByNumber(nr).EncodeRLP(w); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -470,6 +473,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error {
|
|||
}
|
||||
|
||||
if IsParentErr(err) && self.futureBlocks.Has(block.ParentHash()) {
|
||||
block.SetQueued(true)
|
||||
self.futureBlocks.Push(block)
|
||||
stats.queued++
|
||||
continue
|
||||
|
@ -486,21 +490,24 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error {
|
|||
block.Td = td
|
||||
|
||||
self.mu.Lock()
|
||||
cblock := self.currentBlock
|
||||
{
|
||||
cblock := self.currentBlock
|
||||
// Write block to database. Eventually we'll have to improve on this and throw away blocks that are
|
||||
// not in the canonical chain.
|
||||
self.write(block)
|
||||
// Compare the TD of the last known block in the canonical chain to make sure it's greater.
|
||||
// At this point it's possible that a different chain (fork) becomes the new canonical chain.
|
||||
if td.Cmp(self.td) > 0 {
|
||||
if block.Header().Number.Cmp(new(big.Int).Add(cblock.Header().Number, common.Big1)) < 0 {
|
||||
//if block.Header().Number.Cmp(new(big.Int).Add(cblock.Header().Number, common.Big1)) < 0 {
|
||||
if block.Number().Cmp(cblock.Number()) <= 0 {
|
||||
chash := cblock.Hash()
|
||||
hash := block.Hash()
|
||||
|
||||
if glog.V(logger.Info) {
|
||||
glog.Infof("Split detected. New head #%v (%x) TD=%v, was #%v (%x) TD=%v\n", block.Header().Number, hash[:4], td, cblock.Header().Number, chash[:4], self.td)
|
||||
}
|
||||
// during split we merge two different chains and create the new canonical chain
|
||||
self.merge(cblock, block)
|
||||
|
||||
queue[i] = ChainSplitEvent{block, logs}
|
||||
queueEvent.splitCount++
|
||||
|
@ -549,6 +556,35 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// merge takes two blocks, an old chain and a new chain and will reconstruct the blocks and inserts them
|
||||
// to be part of the new canonical chain.
|
||||
func (self *ChainManager) merge(oldBlock, newBlock *types.Block) {
|
||||
glog.V(logger.Debug).Infof("Applying diff to %x & %x\n", oldBlock.Hash().Bytes()[:4], newBlock.Hash().Bytes()[:4])
|
||||
|
||||
var oldChain, newChain types.Blocks
|
||||
// First find the split (common ancestor) so we can perform an adequate merge
|
||||
for {
|
||||
oldBlock, newBlock = self.GetBlock(oldBlock.ParentHash()), self.GetBlock(newBlock.ParentHash())
|
||||
if oldBlock.Hash() == newBlock.Hash() {
|
||||
break
|
||||
}
|
||||
oldChain = append(oldChain, oldBlock)
|
||||
newChain = append(newChain, newBlock)
|
||||
}
|
||||
|
||||
// insert blocks
|
||||
for _, block := range newChain {
|
||||
self.insert(block)
|
||||
}
|
||||
|
||||
if glog.V(logger.Detail) {
|
||||
for i, oldBlock := range oldChain {
|
||||
glog.Infof("- %.10v = %x\n", oldBlock.Number(), oldBlock.Hash())
|
||||
glog.Infof("+ %.10v = %x\n", newChain[i].Number(), newChain[i].Hash())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (self *ChainManager) update() {
|
||||
events := self.eventMux.Subscribe(queueEvent{})
|
||||
futureTimer := time.NewTicker(5 * time.Second)
|
||||
|
|
|
@ -153,7 +153,7 @@ func (self *Filter) bloomFilter(block *types.Block) bool {
|
|||
if len(self.address) > 0 {
|
||||
var included bool
|
||||
for _, addr := range self.address {
|
||||
if types.BloomLookup(block.Bloom(), addr.Hash()) {
|
||||
if types.BloomLookup(block.Bloom(), addr) {
|
||||
included = true
|
||||
break
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ func (ms *ManagedState) SetState(statedb *StateDB) {
|
|||
|
||||
// RemoveNonce removed the nonce from the managed state and all future pending nonces
|
||||
func (ms *ManagedState) RemoveNonce(addr common.Address, n uint64) {
|
||||
if ms.HasAccount(addr) {
|
||||
if ms.hasAccount(addr) {
|
||||
ms.mu.Lock()
|
||||
defer ms.mu.Unlock()
|
||||
|
||||
|
@ -52,8 +52,8 @@ func (ms *ManagedState) RemoveNonce(addr common.Address, n uint64) {
|
|||
|
||||
// NewNonce returns the new canonical nonce for the managed account
|
||||
func (ms *ManagedState) NewNonce(addr common.Address) uint64 {
|
||||
ms.mu.RLock()
|
||||
defer ms.mu.RUnlock()
|
||||
ms.mu.Lock()
|
||||
defer ms.mu.Unlock()
|
||||
|
||||
account := ms.getAccount(addr)
|
||||
for i, nonce := range account.nonces {
|
||||
|
@ -67,7 +67,10 @@ func (ms *ManagedState) NewNonce(addr common.Address) uint64 {
|
|||
|
||||
// GetNonce returns the canonical nonce for the managed or unmanged account
|
||||
func (ms *ManagedState) GetNonce(addr common.Address) uint64 {
|
||||
if ms.HasAccount(addr) {
|
||||
ms.mu.RLock()
|
||||
defer ms.mu.RUnlock()
|
||||
|
||||
if ms.hasAccount(addr) {
|
||||
account := ms.getAccount(addr)
|
||||
return uint64(len(account.nonces)) + account.nstart
|
||||
} else {
|
||||
|
@ -77,6 +80,9 @@ func (ms *ManagedState) GetNonce(addr common.Address) uint64 {
|
|||
|
||||
// SetNonce sets the new canonical nonce for the managed state
|
||||
func (ms *ManagedState) SetNonce(addr common.Address, nonce uint64) {
|
||||
ms.mu.Lock()
|
||||
defer ms.mu.Unlock()
|
||||
|
||||
so := ms.GetOrNewStateObject(addr)
|
||||
so.SetNonce(nonce)
|
||||
|
||||
|
@ -85,6 +91,12 @@ func (ms *ManagedState) SetNonce(addr common.Address, nonce uint64) {
|
|||
|
||||
// HasAccount returns whether the given address is managed or not
|
||||
func (ms *ManagedState) HasAccount(addr common.Address) bool {
|
||||
ms.mu.RLock()
|
||||
defer ms.mu.RUnlock()
|
||||
return ms.hasAccount(addr)
|
||||
}
|
||||
|
||||
func (ms *ManagedState) hasAccount(addr common.Address) bool {
|
||||
_, ok := ms.accounts[addr.Str()]
|
||||
return ok
|
||||
}
|
||||
|
|
|
@ -8,6 +8,10 @@ import (
|
|||
"github.com/ethereum/go-ethereum/crypto"
|
||||
)
|
||||
|
||||
type bytesBacked interface {
|
||||
Bytes() []byte
|
||||
}
|
||||
|
||||
func CreateBloom(receipts Receipts) Bloom {
|
||||
bin := new(big.Int)
|
||||
for _, receipt := range receipts {
|
||||
|
@ -51,9 +55,9 @@ func bloom9(b []byte) *big.Int {
|
|||
|
||||
var Bloom9 = bloom9
|
||||
|
||||
func BloomLookup(bin Bloom, topic common.Hash) bool {
|
||||
func BloomLookup(bin Bloom, topic bytesBacked) bool {
|
||||
bloom := bin.Big()
|
||||
cmp := bloom9(topic[:])
|
||||
cmp := bloom9(topic.Bytes()[:])
|
||||
|
||||
return bloom.And(bloom, cmp).Cmp(cmp) == 0
|
||||
}
|
||||
|
|
|
@ -69,7 +69,7 @@ func (self *Errors) New(code int, format string, params ...interface{}) *Error {
|
|||
|
||||
func (self Error) Error() (message string) {
|
||||
if len(message) == 0 {
|
||||
self.message = fmt.Sprintf("[%s] %s", self.Package, self.Name)
|
||||
self.message = fmt.Sprintf("[%s] ERROR: %s", self.Package, self.Name)
|
||||
if self.format != "" {
|
||||
self.message += ": " + fmt.Sprintf(self.format, self.params...)
|
||||
}
|
||||
|
@ -81,15 +81,8 @@ func (self Error) Log(v glog.Verbose) {
|
|||
if v {
|
||||
v.Infoln(self)
|
||||
}
|
||||
//log.Sendln(self.level, self)
|
||||
}
|
||||
|
||||
/*
|
||||
func (self Error) Log(log *logger.Logger) {
|
||||
log.Sendln(self.level, self)
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
err.Fatal() is true if err's severity level is 0 or 1 (logger.ErrorLevel or logger.Silence)
|
||||
*/
|
||||
|
|
|
@ -28,7 +28,7 @@ func testErrors() *Errors {
|
|||
func TestErrorMessage(t *testing.T) {
|
||||
err := testErrors().New(0, "zero detail %v", "available")
|
||||
message := fmt.Sprintf("%v", err)
|
||||
exp := "[TEST] zero: zero detail available"
|
||||
exp := "[TEST] ERROR: zero: zero detail available"
|
||||
if message != exp {
|
||||
t.Errorf("error message incorrect. expected %v, got %v", exp, message)
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"crypto/ecdsa"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"math"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
|
@ -43,6 +44,9 @@ type Config struct {
|
|||
ProtocolVersion int
|
||||
NetworkId int
|
||||
|
||||
BlockChainVersion int
|
||||
SkipBcVersionCheck bool // e.g. blockchain export
|
||||
|
||||
DataDir string
|
||||
LogFile string
|
||||
LogLevel int
|
||||
|
@ -151,7 +155,7 @@ type Ethereum struct {
|
|||
}
|
||||
|
||||
func New(config *Config) (*Ethereum, error) {
|
||||
// Boostrap database
|
||||
// Bootstrap database
|
||||
logger.New(config.DataDir, config.LogFile, config.LogLevel)
|
||||
if len(config.LogJSON) > 0 {
|
||||
logger.NewJSONsystem(config.DataDir, config.LogJSON)
|
||||
|
@ -181,6 +185,16 @@ func New(config *Config) (*Ethereum, error) {
|
|||
saveProtocolVersion(blockDb, config.ProtocolVersion)
|
||||
glog.V(logger.Info).Infof("Protocol Version: %v, Network Id: %v", config.ProtocolVersion, config.NetworkId)
|
||||
|
||||
if !config.SkipBcVersionCheck {
|
||||
b, _ := blockDb.Get([]byte("BlockchainVersion"))
|
||||
bcVersion := int(common.NewValue(b).Uint())
|
||||
if bcVersion != config.BlockChainVersion && bcVersion != 0 {
|
||||
return nil, fmt.Errorf("Blockchain DB version mismatch (%d / %d). Run geth upgradedb.\n", bcVersion, config.BlockChainVersion)
|
||||
}
|
||||
saveBlockchainVersion(blockDb, config.BlockChainVersion)
|
||||
}
|
||||
glog.V(logger.Info).Infof("Blockchain DB Version: %d", config.BlockChainVersion)
|
||||
|
||||
eth := &Ethereum{
|
||||
shutdownChan: make(chan bool),
|
||||
blockDb: blockDb,
|
||||
|
@ -439,7 +453,7 @@ func (self *Ethereum) txBroadcastLoop() {
|
|||
// automatically stops if unsubscribe
|
||||
for obj := range self.txSub.Chan() {
|
||||
event := obj.(core.TxPreEvent)
|
||||
self.net.Broadcast("eth", TxMsg, []*types.Transaction{event.Tx})
|
||||
self.net.BroadcastLimited("eth", TxMsg, math.Sqrt, []*types.Transaction{event.Tx})
|
||||
self.syncAccounts(event.Tx)
|
||||
}
|
||||
}
|
||||
|
@ -463,7 +477,7 @@ func (self *Ethereum) blockBroadcastLoop() {
|
|||
for obj := range self.blockSub.Chan() {
|
||||
switch ev := obj.(type) {
|
||||
case core.ChainHeadEvent:
|
||||
self.net.Broadcast("eth", NewBlockMsg, []interface{}{ev.Block, ev.Block.Td})
|
||||
self.net.BroadcastLimited("eth", NewBlockMsg, math.Sqrt, []interface{}{ev.Block, ev.Block.Td})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -476,3 +490,12 @@ func saveProtocolVersion(db common.Database, protov int) {
|
|||
db.Put([]byte("ProtocolVersion"), common.NewValue(protov).Bytes())
|
||||
}
|
||||
}
|
||||
|
||||
func saveBlockchainVersion(db common.Database, bcVersion int) {
|
||||
d, _ := db.Get([]byte("BlockchainVersion"))
|
||||
blockchainVersion := common.NewValue(d).Uint()
|
||||
|
||||
if blockchainVersion == 0 {
|
||||
db.Put([]byte("BlockchainVersion"), common.NewValue(bcVersion).Bytes())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,8 +54,9 @@ type blockPack struct {
|
|||
}
|
||||
|
||||
type syncPack struct {
|
||||
peer *peer
|
||||
hash common.Hash
|
||||
peer *peer
|
||||
hash common.Hash
|
||||
ignoreInitial bool
|
||||
}
|
||||
|
||||
func New(hasBlock hashCheckFn, insertChain chainInsertFn, currentTd currentTdFn) *Downloader {
|
||||
|
@ -104,11 +105,13 @@ func (d *Downloader) UnregisterPeer(id string) {
|
|||
|
||||
func (d *Downloader) peerHandler() {
|
||||
// itimer is used to determine when to start ignoring `minDesiredPeerCount`
|
||||
itimer := time.NewTicker(5 * time.Second)
|
||||
//itimer := time.NewTicker(5 * time.Second)
|
||||
itimer := time.NewTimer(5 * time.Second)
|
||||
out:
|
||||
for {
|
||||
select {
|
||||
case <-d.newPeerCh:
|
||||
itimer.Stop()
|
||||
// Meet the `minDesiredPeerCount` before we select our best peer
|
||||
if len(d.peers) < minDesiredPeerCount {
|
||||
break
|
||||
|
@ -137,7 +140,7 @@ func (d *Downloader) selectPeer(p *peer) {
|
|||
}
|
||||
|
||||
glog.V(logger.Detail).Infoln("New peer with highest TD =", p.td)
|
||||
d.syncCh <- syncPack{p, p.recentHash}
|
||||
d.syncCh <- syncPack{p, p.recentHash, false}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -147,11 +150,11 @@ out:
|
|||
select {
|
||||
case sync := <-d.syncCh:
|
||||
selectedPeer := sync.peer
|
||||
glog.V(logger.Detail).Infoln("Synchronising with network using:", selectedPeer.id)
|
||||
glog.V(logger.Detail).Infoln("Synchronising with the network using:", selectedPeer.id)
|
||||
// Start the fetcher. This will block the update entirely
|
||||
// interupts need to be send to the appropriate channels
|
||||
// respectively.
|
||||
if err := d.startFetchingHashes(selectedPeer, sync.hash); err != nil {
|
||||
if err := d.startFetchingHashes(selectedPeer, sync.hash, sync.ignoreInitial); err != nil {
|
||||
// handle error
|
||||
glog.V(logger.Debug).Infoln("Error fetching hashes:", err)
|
||||
// XXX Reset
|
||||
|
@ -178,11 +181,18 @@ out:
|
|||
}
|
||||
|
||||
// XXX Make synchronous
|
||||
func (d *Downloader) startFetchingHashes(p *peer, hash common.Hash) error {
|
||||
glog.V(logger.Debug).Infoln("Downloading hashes")
|
||||
func (d *Downloader) startFetchingHashes(p *peer, hash common.Hash, ignoreInitial bool) error {
|
||||
glog.V(logger.Debug).Infof("Downloading hashes (%x) from %s", hash.Bytes()[:4], p.id)
|
||||
|
||||
start := time.Now()
|
||||
|
||||
// We ignore the initial hash in some cases (e.g. we received a block without it's parent)
|
||||
// In such circumstances we don't need to download the block so don't add it to the queue.
|
||||
if !ignoreInitial {
|
||||
// Add the hash to the queue first
|
||||
d.queue.hashPool.Add(hash)
|
||||
}
|
||||
|
||||
// Get the first batch of hashes
|
||||
p.getHashes(hash)
|
||||
atomic.StoreInt32(&d.fetchingHashes, 1)
|
||||
|
@ -195,7 +205,7 @@ out:
|
|||
hashSet := set.New()
|
||||
for _, hash := range hashes {
|
||||
if d.hasBlock(hash) {
|
||||
glog.V(logger.Debug).Infof("Found common hash %x\n", hash)
|
||||
glog.V(logger.Debug).Infof("Found common hash %x\n", hash[:4])
|
||||
|
||||
done = true
|
||||
break
|
||||
|
@ -207,7 +217,7 @@ out:
|
|||
|
||||
// Add hashes to the chunk set
|
||||
// Check if we're done fetching
|
||||
if !done {
|
||||
if !done && len(hashes) > 0 {
|
||||
//fmt.Println("re-fetch. current =", d.queue.hashPool.Size())
|
||||
// Get the next set of hashes
|
||||
p.getHashes(hashes[len(hashes)-1])
|
||||
|
@ -218,7 +228,7 @@ out:
|
|||
}
|
||||
}
|
||||
}
|
||||
glog.V(logger.Detail).Infoln("Download hashes: done. Took", time.Since(start))
|
||||
glog.V(logger.Detail).Infof("Downloaded hashes (%d). Took %v\n", d.queue.hashPool.Size(), time.Since(start))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -242,6 +252,10 @@ out:
|
|||
// from the available peers.
|
||||
if d.queue.hashPool.Size() > 0 {
|
||||
availablePeers := d.peers.get(idleState)
|
||||
if len(availablePeers) == 0 {
|
||||
glog.V(logger.Detail).Infoln("No peers available out of", len(d.peers))
|
||||
}
|
||||
|
||||
for _, peer := range availablePeers {
|
||||
// Get a possible chunk. If nil is returned no chunk
|
||||
// could be returned due to no hashes available.
|
||||
|
@ -317,21 +331,33 @@ func (d *Downloader) AddBlock(id string, block *types.Block, td *big.Int) {
|
|||
return
|
||||
}
|
||||
|
||||
peer := d.peers.getPeer(id)
|
||||
// if the peer is in our healthy list of peers; update the td
|
||||
// and add the block. Otherwise just ignore it
|
||||
if peer == nil {
|
||||
glog.V(logger.Detail).Infof("Ignored block from bad peer %s\n", id)
|
||||
return
|
||||
}
|
||||
|
||||
peer.mu.Lock()
|
||||
peer.td = td
|
||||
peer.recentHash = block.Hash()
|
||||
peer.mu.Unlock()
|
||||
|
||||
glog.V(logger.Detail).Infoln("Inserting new block from:", id)
|
||||
d.queue.addBlock(id, block, td)
|
||||
|
||||
// if the peer is in our healthy list of peers; update the td
|
||||
// here is a good chance to add the peer back to the list
|
||||
if peer := d.peers.getPeer(id); peer != nil {
|
||||
peer.mu.Lock()
|
||||
peer.td = td
|
||||
peer.recentHash = block.Hash()
|
||||
peer.mu.Unlock()
|
||||
}
|
||||
|
||||
// if neither go ahead to process
|
||||
if !(d.isFetchingHashes() || d.isDownloadingBlocks()) {
|
||||
d.process()
|
||||
// Check if the parent of the received block is known.
|
||||
// If the block is not know, request it otherwise, request.
|
||||
phash := block.ParentHash()
|
||||
if !d.hasBlock(phash) {
|
||||
glog.V(logger.Detail).Infof("Missing parent %x, requires fetching\n", phash.Bytes()[:4])
|
||||
d.syncCh <- syncPack{peer, peer.recentHash, true}
|
||||
} else {
|
||||
d.process()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -369,7 +395,7 @@ func (d *Downloader) process() error {
|
|||
// TODO change this. This shite
|
||||
for i, block := range blocks[:max] {
|
||||
if !d.hasBlock(block.ParentHash()) {
|
||||
d.syncCh <- syncPack{d.peers.bestPeer(), block.Hash()}
|
||||
d.syncCh <- syncPack{d.peers.bestPeer(), block.Hash(), true}
|
||||
// remove processed blocks
|
||||
blocks = blocks[i:]
|
||||
|
||||
|
|
|
@ -324,7 +324,7 @@ func (self *ethProtocol) handle() error {
|
|||
// to simplify backend interface adding a new block
|
||||
// uses AddPeer followed by AddBlock only if peer is the best peer
|
||||
// (or selected as new best peer)
|
||||
if best, _ := self.blockPool.AddPeer(request.TD, hash, self.id, self.requestBlockHashes, self.requestBlocks, self.protoErrorDisconnect); best {
|
||||
if _, suspended := self.blockPool.AddPeer(request.TD, hash, self.id, self.requestBlockHashes, self.requestBlocks, self.protoErrorDisconnect); !suspended {
|
||||
self.blockPool.AddBlock(request.Block, self.id)
|
||||
}
|
||||
|
||||
|
@ -415,11 +415,9 @@ func (self *ethProtocol) sendStatus() error {
|
|||
}
|
||||
|
||||
func (self *ethProtocol) protoErrorDisconnect(err *errs.Error) {
|
||||
//err.Log(self.peer.Logger)
|
||||
err.Log(glog.V(logger.Info))
|
||||
/*
|
||||
if err.Fatal() {
|
||||
self.peer.Disconnect(p2p.DiscSubprotocolError)
|
||||
}
|
||||
*/
|
||||
if err.Fatal() {
|
||||
self.peer.Disconnect(p2p.DiscSubprotocolError)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,20 +19,20 @@ The comment from glog.go introduces the ideas:
|
|||
Error, Fatal, plus formatting variants such as Infof. It
|
||||
also provides V-style logging controlled by the -v and
|
||||
-vmodule=file=2 flags.
|
||||
|
||||
|
||||
Basic examples:
|
||||
|
||||
|
||||
glog.Info("Prepare to repel boarders")
|
||||
|
||||
|
||||
glog.Fatalf("Initialization failed: %s", err)
|
||||
|
||||
|
||||
See the documentation for the V function for an explanation
|
||||
of these examples:
|
||||
|
||||
|
||||
if glog.V(2) {
|
||||
glog.Info("Starting transaction...")
|
||||
}
|
||||
|
||||
|
||||
glog.V(2).Infoln("Processed", nItems, "elements")
|
||||
|
||||
|
||||
|
|
|
@ -7,4 +7,6 @@ const (
|
|||
Core
|
||||
Debug
|
||||
Detail
|
||||
|
||||
Ridiculousness = 100
|
||||
)
|
||||
|
|
|
@ -48,14 +48,16 @@ func (self *Miner) Start(coinbase common.Address) {
|
|||
}
|
||||
|
||||
func (self *Miner) Register(agent Agent) {
|
||||
if self.mining {
|
||||
agent.Start()
|
||||
}
|
||||
|
||||
self.worker.register(agent)
|
||||
}
|
||||
|
||||
func (self *Miner) Stop() {
|
||||
self.mining = false
|
||||
self.worker.stop()
|
||||
|
||||
//self.pow.(*ethash.Ethash).Stop()
|
||||
}
|
||||
|
||||
func (self *Miner) HashRate() int64 {
|
||||
|
|
|
@ -172,7 +172,7 @@ out:
|
|||
case <-self.quit:
|
||||
break out
|
||||
case <-timer.C:
|
||||
if glog.V(logger.Debug) {
|
||||
if glog.V(logger.Detail) && atomic.LoadInt64(&self.mining) == 1 {
|
||||
glog.Infoln("Hash rate:", self.HashRate(), "Khash")
|
||||
}
|
||||
|
||||
|
@ -225,7 +225,11 @@ func (self *worker) push() {
|
|||
for _, agent := range self.agents {
|
||||
atomic.AddInt64(&self.atWork, 1)
|
||||
|
||||
agent.Work() <- self.current.block.Copy()
|
||||
if agent.Work() != nil {
|
||||
agent.Work() <- self.current.block.Copy()
|
||||
} else {
|
||||
common.Report(fmt.Sprintf("%v %T\n", agent, agent))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -264,8 +268,8 @@ func (self *worker) commitNewWork() {
|
|||
remove = set.New()
|
||||
tcount = 0
|
||||
)
|
||||
gasLimit:
|
||||
for i, tx := range transactions {
|
||||
//gasLimit:
|
||||
for _, tx := range transactions {
|
||||
self.current.state.StartRecord(tx.Hash(), common.Hash{}, 0)
|
||||
|
||||
err := self.commitTransaction(tx)
|
||||
|
@ -276,14 +280,13 @@ gasLimit:
|
|||
self.chain.TxState().RemoveNonce(from, tx.Nonce())
|
||||
remove.Add(tx.Hash())
|
||||
|
||||
if glog.V(logger.Debug) {
|
||||
if glog.V(logger.Detail) {
|
||||
glog.Infof("TX (%x) failed, will be removed: %v\n", tx.Hash().Bytes()[:4], err)
|
||||
glog.Infoln(tx)
|
||||
//glog.Infoln(tx)
|
||||
}
|
||||
case state.IsGasLimitErr(err):
|
||||
glog.V(logger.Debug).Infof("Gas limit reached for block. %d TXs included in this block\n", i)
|
||||
// Break on gas limit
|
||||
break gasLimit
|
||||
//glog.V(logger.Debug).Infof("Gas limit reached for block. %d TXs included in this block\n", i)
|
||||
//break gasLimit
|
||||
default:
|
||||
tcount++
|
||||
}
|
||||
|
@ -300,8 +303,11 @@ gasLimit:
|
|||
}
|
||||
|
||||
if err := self.commitUncle(uncle.Header()); err != nil {
|
||||
glog.V(logger.Debug).Infof("Bad uncle found and will be removed (%x)\n", hash[:4])
|
||||
glog.V(logger.Debug).Infoln(uncle)
|
||||
if glog.V(logger.Ridiculousness) {
|
||||
glog.V(logger.Detail).Infof("Bad uncle found and will be removed (%x)\n", hash[:4])
|
||||
glog.V(logger.Detail).Infoln(uncle)
|
||||
}
|
||||
|
||||
badUncles = append(badUncles, hash)
|
||||
} else {
|
||||
glog.V(logger.Debug).Infof("commiting %x as uncle\n", hash[:4])
|
||||
|
|
|
@ -14,8 +14,6 @@ import (
|
|||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/ethereum/go-ethereum/crypto/secp256k1"
|
||||
|
@ -31,9 +29,6 @@ type Node struct {
|
|||
|
||||
DiscPort int // UDP listening port for discovery protocol
|
||||
TCPPort int // TCP listening port for RLPx
|
||||
|
||||
// this must be set/read using atomic load and store.
|
||||
activeStamp int64
|
||||
}
|
||||
|
||||
func newNode(id NodeID, addr *net.UDPAddr) *Node {
|
||||
|
@ -50,16 +45,6 @@ func (n *Node) isValid() bool {
|
|||
return !n.IP.IsMulticast() && !n.IP.IsUnspecified() && n.TCPPort != 0 && n.DiscPort != 0
|
||||
}
|
||||
|
||||
func (n *Node) bumpActive() {
|
||||
stamp := time.Now().Unix()
|
||||
atomic.StoreInt64(&n.activeStamp, stamp)
|
||||
}
|
||||
|
||||
func (n *Node) active() time.Time {
|
||||
stamp := atomic.LoadInt64(&n.activeStamp)
|
||||
return time.Unix(stamp, 0)
|
||||
}
|
||||
|
||||
func (n *Node) addr() *net.UDPAddr {
|
||||
return &net.UDPAddr{IP: n.IP, Port: n.DiscPort}
|
||||
}
|
||||
|
|
|
@ -326,7 +326,6 @@ outer:
|
|||
func (b *bucket) bump(n *Node) bool {
|
||||
for i := range b.entries {
|
||||
if b.entries[i].ID == n.ID {
|
||||
n.bumpActive()
|
||||
// move it to the front
|
||||
copy(b.entries[1:], b.entries[:i])
|
||||
b.entries[0] = n
|
||||
|
|
|
@ -267,11 +267,12 @@ func (t *udp) loop() {
|
|||
defer timeout.Stop()
|
||||
|
||||
rearmTimeout := func() {
|
||||
if len(pending) == 0 || nextDeadline == pending[0].deadline {
|
||||
now := time.Now()
|
||||
if len(pending) == 0 || now.Before(nextDeadline) {
|
||||
return
|
||||
}
|
||||
nextDeadline = pending[0].deadline
|
||||
timeout.Reset(nextDeadline.Sub(time.Now()))
|
||||
timeout.Reset(nextDeadline.Sub(now))
|
||||
}
|
||||
|
||||
for {
|
||||
|
|
|
@ -115,7 +115,7 @@ func setupOutboundConn(fd net.Conn, prv *ecdsa.PrivateKey, our *protoHandshake,
|
|||
// returning the handshake read error. If the remote side
|
||||
// disconnects us early with a valid reason, we should return it
|
||||
// as the error so it can be tracked elsewhere.
|
||||
werr := make(chan error)
|
||||
werr := make(chan error, 1)
|
||||
go func() { werr <- Send(rw, handshakeMsg, our) }()
|
||||
rhs, err := readProtocolHandshake(rw, secrets.RemoteID, our)
|
||||
if err != nil {
|
||||
|
|
30
p2p/peer.go
30
p2p/peer.go
|
@ -4,7 +4,6 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"sort"
|
||||
"sync"
|
||||
|
@ -20,8 +19,7 @@ const (
|
|||
baseProtocolLength = uint64(16)
|
||||
baseProtocolMaxMsgSize = 10 * 1024 * 1024
|
||||
|
||||
pingInterval = 15 * time.Second
|
||||
disconnectGracePeriod = 2 * time.Second
|
||||
pingInterval = 15 * time.Second
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -129,39 +127,27 @@ func (p *Peer) run() DiscReason {
|
|||
case err := <-readErr:
|
||||
if r, ok := err.(DiscReason); ok {
|
||||
reason = r
|
||||
break
|
||||
} else {
|
||||
// Note: We rely on protocols to abort if there is a write
|
||||
// error. It might be more robust to handle them here as well.
|
||||
p.DebugDetailf("Read error: %v\n", err)
|
||||
reason = DiscNetworkError
|
||||
}
|
||||
// Note: We rely on protocols to abort if there is a write
|
||||
// error. It might be more robust to handle them here as well.
|
||||
p.DebugDetailf("Read error: %v\n", err)
|
||||
p.conn.Close()
|
||||
reason = DiscNetworkError
|
||||
case err := <-p.protoErr:
|
||||
reason = discReasonForError(err)
|
||||
case reason = <-p.disc:
|
||||
}
|
||||
|
||||
close(p.closed)
|
||||
p.politeDisconnect(reason)
|
||||
p.wg.Wait()
|
||||
if reason != DiscNetworkError {
|
||||
p.politeDisconnect(reason)
|
||||
}
|
||||
p.Debugf("Disconnected: %v\n", reason)
|
||||
return reason
|
||||
}
|
||||
|
||||
func (p *Peer) politeDisconnect(reason DiscReason) {
|
||||
done := make(chan struct{})
|
||||
go func() {
|
||||
if reason != DiscNetworkError {
|
||||
SendItems(p.rw, discMsg, uint(reason))
|
||||
// Wait for the other side to close the connection.
|
||||
// Discard any data that they send until then.
|
||||
io.Copy(ioutil.Discard, p.conn)
|
||||
close(done)
|
||||
}()
|
||||
select {
|
||||
case <-done:
|
||||
case <-time.After(disconnectGracePeriod):
|
||||
}
|
||||
p.conn.Close()
|
||||
}
|
||||
|
|
|
@ -136,6 +136,12 @@ func (srv *Server) SuggestPeer(n *discover.Node) {
|
|||
// Broadcast sends an RLP-encoded message to all connected peers.
|
||||
// This method is deprecated and will be removed later.
|
||||
func (srv *Server) Broadcast(protocol string, code uint64, data interface{}) error {
|
||||
return srv.BroadcastLimited(protocol, code, func(i float64) float64 { return i }, data)
|
||||
}
|
||||
|
||||
// BroadcastsRange an RLP-encoded message to a random set of peers using the limit function to limit the amount
|
||||
// of peers.
|
||||
func (srv *Server) BroadcastLimited(protocol string, code uint64, limit func(float64) float64, data interface{}) error {
|
||||
var payload []byte
|
||||
if data != nil {
|
||||
var err error
|
||||
|
@ -146,7 +152,13 @@ func (srv *Server) Broadcast(protocol string, code uint64, data interface{}) err
|
|||
}
|
||||
srv.lock.RLock()
|
||||
defer srv.lock.RUnlock()
|
||||
|
||||
i, max := 0, int(limit(float64(len(srv.peers))))
|
||||
for _, peer := range srv.peers {
|
||||
if i >= max {
|
||||
break
|
||||
}
|
||||
|
||||
if peer != nil {
|
||||
var msg = Msg{Code: code}
|
||||
if data != nil {
|
||||
|
@ -154,6 +166,7 @@ func (srv *Server) Broadcast(protocol string, code uint64, data interface{}) err
|
|||
msg.Size = uint32(len(payload))
|
||||
}
|
||||
peer.writeProtoMsg(protocol, msg)
|
||||
i++
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
@ -260,9 +273,11 @@ func (srv *Server) Stop() {
|
|||
// No new peers can be added at this point because dialLoop and
|
||||
// listenLoop are down. It is safe to call peerWG.Wait because
|
||||
// peerWG.Add is not called outside of those loops.
|
||||
srv.lock.Lock()
|
||||
for _, peer := range srv.peers {
|
||||
peer.Disconnect(DiscQuitting)
|
||||
}
|
||||
srv.lock.Unlock()
|
||||
srv.peerWG.Wait()
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
|
|||
*reply = api.xeth().IsListening()
|
||||
case "net_peerCount":
|
||||
*reply = newHexNum(api.xeth().PeerCount())
|
||||
case "eth_protocolVersion":
|
||||
case "eth_version":
|
||||
*reply = api.xeth().EthVersion()
|
||||
case "eth_coinbase":
|
||||
*reply = newHexData(api.xeth().Coinbase())
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
"net/http"
|
||||
|
||||
"github.com/ethereum/go-ethereum/logger"
|
||||
"github.com/ethereum/go-ethereum/logger/glog"
|
||||
"github.com/ethereum/go-ethereum/xeth"
|
||||
"github.com/rs/cors"
|
||||
)
|
||||
|
@ -110,7 +111,7 @@ func RpcResponse(api *EthereumApi, request *RpcRequest) *interface{} {
|
|||
response = &RpcErrorResponse{Jsonrpc: jsonrpcver, Id: request.Id, Error: jsonerr}
|
||||
}
|
||||
|
||||
rpclogger.DebugDetailf("Generated response: %T %s", response, response)
|
||||
glog.V(logger.Detail).Infof("Generated response: %T %s", response, response)
|
||||
return &response
|
||||
}
|
||||
|
||||
|
@ -121,7 +122,7 @@ func send(writer io.Writer, v interface{}) (n int, err error) {
|
|||
rpclogger.Fatalln("Error marshalling JSON", err)
|
||||
return 0, err
|
||||
}
|
||||
rpclogger.DebugDetailf("Sending payload: %s", payload)
|
||||
glog.V(logger.Detail).Infof("Sending payload: %s", payload)
|
||||
|
||||
return writer.Write(payload)
|
||||
}
|
||||
|
|
|
@ -277,7 +277,6 @@ type LogRes struct {
|
|||
Topics []*hexdata `json:"topics"`
|
||||
Data *hexdata `json:"data"`
|
||||
BlockNumber *hexnum `json:"blockNumber"`
|
||||
Hash *hexdata `json:"hash"`
|
||||
LogIndex *hexnum `json:"logIndex"`
|
||||
BlockHash *hexdata `json:"blockHash"`
|
||||
TransactionHash *hexdata `json:"transactionHash"`
|
||||
|
|
|
@ -81,7 +81,7 @@ type BlockTest struct {
|
|||
// LoadBlockTests loads a block test JSON file.
|
||||
func LoadBlockTests(file string) (map[string]*BlockTest, error) {
|
||||
bt := make(map[string]*btJSON)
|
||||
if err := loadJSON(file, &bt); err != nil {
|
||||
if err := LoadJSON(file, &bt); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
out := make(map[string]*BlockTest)
|
||||
|
@ -250,6 +250,14 @@ func mustConvertBigInt10(in string) *big.Int {
|
|||
return out
|
||||
}
|
||||
|
||||
func mustConvertBigIntHex(in string) *big.Int {
|
||||
out, ok := new(big.Int).SetString(in, 16)
|
||||
if !ok {
|
||||
panic(fmt.Errorf("invalid integer: %q", in))
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func mustConvertUint(in string) uint64 {
|
||||
out, err := strconv.ParseUint(in, 0, 64)
|
||||
if err != nil {
|
||||
|
@ -258,8 +266,16 @@ func mustConvertUint(in string) uint64 {
|
|||
return out
|
||||
}
|
||||
|
||||
// loadJSON reads the given file and unmarshals its content.
|
||||
func loadJSON(file string, val interface{}) error {
|
||||
func mustConvertUintHex(in string) uint64 {
|
||||
out, err := strconv.ParseUint(in, 16, 64)
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("invalid integer: %q", in))
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
// LoadJSON reads the given file and unmarshals its content.
|
||||
func LoadJSON(file string, val interface{}) error {
|
||||
content, err := ioutil.ReadFile(file)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe40437f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe163119185560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "1263945493",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998736054553",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "df4b7ba2bbcedccfabcabc186f9b8930d621319cce791f183c607b584f78c53d",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe40437f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe163119185560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe40437f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1631191855",
|
||||
"gasLimit" : "0x4b5646e7",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "826837032"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1740863815",
|
||||
"code" : "0x457f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000000b60005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
"0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "45343",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998259090888",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "803f04e36d462235dee12690809f33cb0020c810a6b421a46f97a89b5fade3b3",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x457f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000000b60005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x457f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000000b",
|
||||
"gasLimit" : "0x25a86258",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1740863815"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000120ba49036880f86529655",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "1004111128",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998995888918",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "ee237a377144cd7fd095bbd85d5f0ae3a12f83ccf41c488a3233504bea606830",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000120ba49036880f86529655",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000120ba49036880f865296",
|
||||
"gasLimit" : "0x3bd984ea",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1727538107"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff35427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5595584a2558493a25b5a6a60005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "155778310",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999844221736",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "05fb639609fc4553f7566f7aca01caba3908916c56656c72ef2d4fba8e9ddb32",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff35427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5595584a2558493a25b5a6a60005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff35427ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5595584a2558493a25b5a6a",
|
||||
"gasLimit" : "0x0948fcd8",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "465395296"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "994504369",
|
||||
"code" : "0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350f25b557e348ff374819d123109539b55",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
"0x01" : "0xc350"
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "64654",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999005431023",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "df58551e1739386d31615d6d5ec6af7a87a7b86b5dd03ea65da6ff06eacf1309",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350f25b557e348ff374819d123109539b55",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000000000000000000000000000000000000000c350f25b557e348ff374819d123109539b",
|
||||
"gasLimit" : "0x4fd07f62",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "994504369"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "794450594",
|
||||
"code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff917f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3501833815560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
"0x" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cae",
|
||||
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3cae" : "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b"
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "71115",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999205478337",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "f98ac46d7c5ea5b279ef41988e03f25a094ad6b99b0e99247cb79151f936945e",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff917f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3501833815560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff917f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350183381",
|
||||
"gasLimit" : "0x664f3c42",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "794450594"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000399f869aff3b06333860005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "526560004",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999473440042",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "462ff1e3cfe9f27035a3316763bdedf8e8a992d7999aa04af6d8dd1206fac2da",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000399f869aff3b06333860005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000399f869aff3b063338",
|
||||
"gasLimit" : "0x1f62aad6",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "2058040485"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000000000000000000000000000000000000000c350417f0000000000000000000000000000000000000000000000000000000000000001437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000000b9b84a360005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "1368228805",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998631771241",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "4f684fdda7058333c43f71c4ab683a7cea14fddbe339d318d0252edd3710d2eb",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000000000000000000000000000000000000000c350417f0000000000000000000000000000000000000000000000000000000000000001437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000000b9b84a360005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f000000000000000000000000000000000000000000000000000000000000c350417f0000000000000000000000000000000000000000000000000000000000000001437f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000001357f00000000000000000000000000000000000000000000000000000000000000000b9b84a3",
|
||||
"gasLimit" : "0x518d8397",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "40953114"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000000557f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000557f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b50a84339188646595668352a061855560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "801162376",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999198837670",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "8b95863987e182e7ba0991c0d07e9f14959c04239819ee32c3ffe81cbec8400c",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000000557f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000557f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b50a84339188646595668352a061855560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000000557f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000557f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b50a84339188646595668352a06185",
|
||||
"gasLimit" : "0x2fc0c45a",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1431310051"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff45457f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3505b0a36095511805131558f14fc3b",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "547588606",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999452411440",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "17e529f47db8b8fde95c285b5de8f37cd8f8c94dd1ac48a1289b8791676b8558",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff45457f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3505b0a36095511805131558f14fc3b",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff45457f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3505b0a36095511805131558f14fc3b",
|
||||
"gasLimit" : "0x20a389d0",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "831662408"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff3b437ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001982046817382a13afa3760088d55",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "485979581",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999514020465",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "b94e1ef66b03fbd5194cde790dd593e3b32dc1f940fc219df947586e28602cb1",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff3b437ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001982046817382a13afa3760088d55",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff3b437ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f0000000000000000000000000000000000000000000000000000000000000001982046817382a13afa3760088d",
|
||||
"gasLimit" : "0x1cf7758f",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "406473464"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x347f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff447f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff80a160005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "423699300",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999576300746",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "50e33a02616d3b0f18c73efa68528c6611152a537a23947e3b3ab013fc7bc945",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x347f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff447f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff80a160005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x347f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff447f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff80a1",
|
||||
"gasLimit" : "0x19412336",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "179309326"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000000120417f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3508859a1740a0528f26a635216cd980a9a9255",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "484101526",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999515898520",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "400ff231b558eae5262ba43f7f863a200cf49aab2abc77ca61fdf4b6c6db8574",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000000120417f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3508859a1740a0528f26a635216cd980a9a9255",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000000120417f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c3508859a1740a0528f26a635216cd980a9a92",
|
||||
"gasLimit" : "0x1cdacd68",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "364185236"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1239417538",
|
||||
"code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6676029968ffa27d0455",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
"0x" : "0xffffffffffffffffffffffffffffffffffffffff"
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "52474",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998760530034",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "d94c703fa989aa575dda329d0b94a86404a7f8c2cec091baefdc61a95b4f419a",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6676029968ffa27d0455",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6676029968ffa27d04",
|
||||
"gasLimit" : "0x67dad272",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1239417538"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "380785530",
|
||||
"code" : "0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe55",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "52366",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999619162150",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "f1c347fdb630a79c4abbea6110b2ec2be15f193f4fb48c4032a3216705a50462",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe55",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe",
|
||||
"gasLimit" : "0x0af82ef7",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "380785530"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "399078357",
|
||||
"code" : "0x7f000000000000000000000000000000000000000000000000000000000000c350457f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff4255",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
"0x01" : "0xffffffffffffffffffffffffffffffffffffffff"
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46028",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999600875661",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "67230074006cf0475a284a552238e611525750b787814f9ebdfa25f176f5ac6e",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000000000000000000000000000000000000000c350457f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff4255",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f000000000000000000000000000000000000000000000000000000000000c350457f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff42",
|
||||
"gasLimit" : "0x73673a3c",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "399078357"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1675392723",
|
||||
"code" : "0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000001a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000001a736e628f796436739660005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "27285",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998324580038",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "65f9c92fa1a162b6bca6a3342ec84c62bb2a60d0eb1960412d58b4fcbf7aa5d6",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000001a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000001a736e628f796436739660005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000001a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000001a736e628f7964367396",
|
||||
"gasLimit" : "0x75367410",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1675392723"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20b39838f628b96846cff0455",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "1869556482",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998130443564",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "913792f777fb1b2537eef57d043131df032838d246b94ade5b4b33e8cb140412",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20b39838f628b96846cff0455",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20b39838f628b96846cff04",
|
||||
"gasLimit" : "0x6f6f2ad4",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "490453529"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000010000000000000000000000000000000000000000407f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9a8b7379431080346b159960005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "1150985044",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998849015002",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "c124ab3ba66012badfe5f44331fa53fbfeda3936fc6d01a5402f2210e41ddd08",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000010000000000000000000000000000000000000000407f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9a8b7379431080346b159960005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000010000000000000000000000000000000000000000407f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9a8b7379431080346b1599",
|
||||
"gasLimit" : "0x449aa326",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1492970685"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1088932905",
|
||||
"code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6251437f0000000000000000000000010000000000000000000000000000000000000000437f000000000000000000000000fffffffffffffffffffffffffffffffffffffffff11460005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "25440",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998911041701",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "dab455db73ff719b0c2c947098879612bd577d7d600a849526ef17dde23bbfc8",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6251437f0000000000000000000000010000000000000000000000000000000000000000437f000000000000000000000000fffffffffffffffffffffffffffffffffffffffff11460005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6251437f0000000000000000000000010000000000000000000000000000000000000000437f000000000000000000000000fffffffffffffffffffffffffffffffffffffffff114",
|
||||
"gasLimit" : "0x487b0e6d",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1088932905"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "679576029",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350447f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506d766d67fe0785320899130644945560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
"0x" : "0x766d67fe07853208991306449455"
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "47313",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999320376704",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "1fd62a58329ce462edac2a08724b7f2defd5c55ef226f52574c6d5802abf626f",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350447f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506d766d67fe0785320899130644945560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000000000000000000000000000000000000000c350447f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3506d766d67fe078532089913064494",
|
||||
"gasLimit" : "0x08befbe7",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "679576029"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff417f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5385b9655558f510a6c73",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "995346411",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999004653635",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "4c1a23fe6e433d7bda3b573e94605a4b924ab3601d81b546f0ff3f43089956f7",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff417f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5385b9655558f510a6c73",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff417f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5385b9655558f510a6c73",
|
||||
"gasLimit" : "0x3b53c7bd",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "185739865"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x9a7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000000117f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b593963332578665734360005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "304093142",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999695906904",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "da9ba6a63835b74e053ed244ee764e193863ac80eac5d74c597213f341f63dc2",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x9a7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000000117f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b593963332578665734360005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x9a7f000000000000000000000000000000000000000000000000000000000000c3507f0000000000000000000000000000000000000000000000000000000000000000117f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5939633325786657343",
|
||||
"gasLimit" : "0x122017a8",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "565778672"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "242920391",
|
||||
"code" : "0x327fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350427f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff041469988517f6889d92799e74664160005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "29110",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999757050545",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "66980db101b2e820fdc3418ff5b01df768fcc0a3f1f21c8b089f5c5b3e9f2a8b",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x327fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350427f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff041469988517f6889d92799e74664160005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x327fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c350427f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff041469988517f6889d92799e746641",
|
||||
"gasLimit" : "0x5cf09c2a",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "242920391"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x41417f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff459d7f0000000000000000000000000000000000000000000000000000000000000001817f000000000000000000000000000000000000000000000000000000000000c35095418211337b0530435560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "719647680",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999280352366",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "b319385cfc5c92f37a91028cf8d74e58564275ccb12105334c98468f56d7259a",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x41417f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff459d7f0000000000000000000000000000000000000000000000000000000000000001817f000000000000000000000000000000000000000000000000000000000000c35095418211337b0530435560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x41417f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff459d7f0000000000000000000000000000000000000000000000000000000000000001817f000000000000000000000000000000000000000000000000000000000000c35095418211337b053043",
|
||||
"gasLimit" : "0x2ae4f392",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1715561909"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42057f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff517f000000000000000000000001000000000000000000000000000000000000000065715460005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "385557369",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999614442677",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "89a81299ddb2523582de6db7dad040f4b94a648c7a9183c3f0c016daffff3efb",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42057f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff517f000000000000000000000001000000000000000000000000000000000000000065715460005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff42057f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff517f0000000000000000000000010000000000000000000000000000000000000000657154",
|
||||
"gasLimit" : "0x16fb234b",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "2008364606"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1998384914",
|
||||
"code" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe43147256a3130255",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "27924",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998001587208",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "cb6a09074033e79b032266b4559b951707d2573a430f58550855dd6236f2cb3a",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe43147256a3130255",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe43147256a31302",
|
||||
"gasLimit" : "0x13f6aeec",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1998384914"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1955628831",
|
||||
"code" : "0x6f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe74977f000000000000000000000000000000000000000000000000000000000000c3506f6b7936181136392060005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "27581",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998044343634",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "90d9ee4c28bc9fc8ce533dc87f1ed0349c3ea302c5b37bd3f354ca4d30dd9c25",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x6f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe74977f000000000000000000000000000000000000000000000000000000000000c3506f6b7936181136392060005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x6f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe74977f000000000000000000000000000000000000000000000000000000000000c3506f6b79361811363920",
|
||||
"gasLimit" : "0x5bca15f0",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1955628831"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"000000000000417fffffffffffffffffffffffff" : {
|
||||
"balance" : "1814313700",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "14710",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998185671636",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "53b61b0ec6357529a26cd0a546e75b1340a1f29fabfdb407d641c7ddcfb708a7",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x6d417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e969f926084143c7960005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x6d417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e969f926084143c79",
|
||||
"gasLimit" : "0x60e16136",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1814313700"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000008e447f00000000000000000000000100000000000000000000000000000000000000003a1a7e",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "157799148",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999842200898",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "5a92da9d20ba315a915849860cb82e883ea9b833444a30ef9aa59034a45e2b61",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000008e447f00000000000000000000000100000000000000000000000000000000000000003a1a7e",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000008e447f00000000000000000000000100000000000000000000000000000000000000003a1a7e",
|
||||
"gasLimit" : "0x0967d2be",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1573164058"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x197f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b58b66e4ff65a056f39b529f",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "535923539",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999464076507",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "4464263a97ca34956c33f5ee1f832cc031a381af5cc62c2a840616df19945719",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x197f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b58b66e4ff65a056f39b529f",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x197f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b58b66e4ff65a056f39b529f",
|
||||
"gasLimit" : "0x1ff18b25",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1857649905"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001458b5554397513",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "1926099380",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998073900666",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "40072f5f137ca3604e5904d1da01778435aa9f16af53721046d822b5b1def18c",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001458b5554397513",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000001458b5554397513",
|
||||
"gasLimit" : "0x72cdf186",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "592296179"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000887f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3015560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "1908121208",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998091878838",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "b246fb668f7a50d98d195c8dcc8522f7042d3228e8ea22f908aa65e9334d66b7",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000887f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa3015560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000010000000000000000000000000000000000000000887f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000c350457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa301",
|
||||
"gasLimit" : "0x71bb9e4a",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1618548956"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff357f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000034208a340a9e5560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "692102669",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999307897377",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "cd011ca3a24ae9664db18ee1273cf494ad2047f020e4285ced363653fe1f02ed",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff357f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000034208a340a9e5560005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x457ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe427f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff357f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000034208a340a9e",
|
||||
"gasLimit" : "0x2940a5df",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1968091255"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1430892634",
|
||||
"code" : "0x7f0000000000000000000000000000000000000000000000000000000000000000447f000000000000000000000000000000000000000000000000000000000000c350757f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c35060005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "26017",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998569081395",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "54b6f50f518be844cd51ecb45b2579ce2bf90b6fe98a5efdba9d552942db757a",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f0000000000000000000000000000000000000000000000000000000000000000447f000000000000000000000000000000000000000000000000000000000000c350757f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c35060005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f0000000000000000000000000000000000000000000000000000000000000000447f000000000000000000000000000000000000000000000000000000000000c350757f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c350",
|
||||
"gasLimit" : "0x66e1ca2f",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1430892634"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "600472398",
|
||||
"code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017e7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe906697998df1160b",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "29512",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999399498136",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "d2a415a9f1f0c6293af9e5e47f963d989f96b88d16e8db6556ec8733d76b0655",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017e7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe906697998df1160b",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000017e7f00000000000000000000000000000000000000000000000000000000000000017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe906697998df1160b",
|
||||
"gasLimit" : "0x213b31cb",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "600472398"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008756993365a1376155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "18216539",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999981783507",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "248865514189f3f7c8d2f00511eb7259e5c3b97df45d9d980126c5e9425063d9",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008756993365a1376155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000c3507f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008756993365a13761",
|
||||
"gasLimit" : "0x0115f62d",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "340638033"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "992438124",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f0000000000000000000000000000000000000000000000000000000000000000187b55",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "27124",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999007534798",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "4229d22eba45964985613259c569942393f6cb51bf3b409442acee73e0ed778a",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f0000000000000000000000000000000000000000000000000000000000000000187b55",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f00000000000000000000000000000000000000000000000000000000000000017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff427f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f0000000000000000000000000000000000000000000000000000000000000000187b",
|
||||
"gasLimit" : "0x4e58e928",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "992438124"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1664390209",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff033a06869867986202413a537c60005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "30166",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998335579671",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "8b9afa9dee2fef920f0d9e0933aedd94cf3a1ad0dff782835db49ea498d4ed51",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff033a06869867986202413a537c60005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000100000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006a7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff033a06869867986202413a537c",
|
||||
"gasLimit" : "0x7d74638e",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1664390209"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1631233707",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff857ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1302056f60005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "29198",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998368737141",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "588f574aadabcd11da91c32f9931372cca74e5e1830acc06246d9bb53f7a3d84",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff857ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1302056f60005155",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000100000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000000000000000000000000000000000000000c3507f00000000000000000000000100000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff857ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1302056f",
|
||||
"gasLimit" : "0x24c93d75",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1631233707"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000000084967f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff137ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016f3a5b594088a2f238089b71",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "735473324",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999264526722",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "6679658a0098c0b2d5bfcad043a0d321ac3bd90a2202253d1ac2db557560f0b6",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000000084967f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff137ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016f3a5b594088a2f238089b71",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b57f000000000000000000000000000000000000000000000000000000000000000084967f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff137ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016f3a5b594088a2f238089b71",
|
||||
"gasLimit" : "0x2bd66e7e",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1086316137"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe418b7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b50461098038315ba267",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "1043284103",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998956715943",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "0e20a3eb1ed620f84ba16992f75adeca330f8b2c2c1790fc8b57346d3c44a9eb",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe418b7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b50461098038315ba267",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe418b7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b50461098038315ba267",
|
||||
"gasLimit" : "0x3e2f4059",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "1283542119"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"randomStatetest" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "945304eb96065b2a98b57a48a06ae28d285a71b5",
|
||||
"currentDifficulty" : "5623894562375",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5417f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000013063a09c825a338e",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "1236557795",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999998763442251",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "1829b72b95a73eb31adf971f232abc7561961a0fc2c4714d6bd9fefb936137b5",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "0",
|
||||
"code" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5417f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000013063a09c825a338e",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"945304eb96065b2a98b57a48a06ae28d285a71b5" : {
|
||||
"balance" : "46",
|
||||
"code" : "0x6000355415600957005b60203560003555",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "0x7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000945304eb96065b2a98b57a48a06ae28d285a71b5417f000000000000000000000000000000000000000000000000000000000000c3507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe7f00000000000000000000000000000000000000000000000000000000000000013063a09c825a338e",
|
||||
"gasLimit" : "0x49b45fb5",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "828199880"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,10 +2,10 @@
|
|||
"blockhash0" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "100000000000",
|
||||
"currentNumber" : "5",
|
||||
"currentTimestamp" : 1,
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x174876e800",
|
||||
"currentNumber" : "0x05",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
|
@ -13,25 +13,25 @@
|
|||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1000000000000000010",
|
||||
"balance" : "0x0de0b6b3a764000a",
|
||||
"code" : "0x600040600055600540600155600440600255",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
"0x" : "0x044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
|
||||
"0x02" : "0x13600b294191fc92924bb3ce4b969c1e7e2bab8f4c93c3fc6d0a51733df3c060"
|
||||
}
|
||||
},
|
||||
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||
"balance" : "66078",
|
||||
"balance" : "0x01021e",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "933912",
|
||||
"balance" : "0x0e4018",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -39,37 +39,37 @@
|
|||
"postStateRoot" : "3e6dacc1575c6a8c76422255eca03529bbf4c0dda75dfc110b22d6dc4152396f",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"balance" : "0x0de0b6b3a7640000",
|
||||
"code" : "0x600040600055600540600155600440600255",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000",
|
||||
"balance" : "0x0f4240",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "",
|
||||
"gasLimit" : "285000",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"data" : "0x",
|
||||
"gasLimit" : "0x045948",
|
||||
"gasPrice" : "0x01",
|
||||
"nonce" : "0x",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "10"
|
||||
"value" : "0x0a"
|
||||
}
|
||||
},
|
||||
"blockhashInRange" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "100000000",
|
||||
"currentNumber" : "257",
|
||||
"currentTimestamp" : 1,
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x05f5e100",
|
||||
"currentNumber" : "0x0101",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
|
@ -77,9 +77,9 @@
|
|||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1000000000000000010",
|
||||
"balance" : "0x0de0b6b3a764000a",
|
||||
"code" : "0x60014060005560024060015561010040600255",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
"0x" : "0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6",
|
||||
"0x01" : "0xad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5",
|
||||
|
@ -87,16 +87,16 @@
|
|||
}
|
||||
},
|
||||
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||
"balance" : "81078",
|
||||
"balance" : "0x013cb6",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "918912",
|
||||
"balance" : "0x0e0580",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -104,37 +104,37 @@
|
|||
"postStateRoot" : "ab8432acf840bc3cff40a4bce7a59639712bd74e6243144879d41ccc33d10564",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"balance" : "0x0de0b6b3a7640000",
|
||||
"code" : "0x60014060005560024060015561010040600255",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000",
|
||||
"balance" : "0x0f4240",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "",
|
||||
"gasLimit" : "285000",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"data" : "0x",
|
||||
"gasLimit" : "0x045948",
|
||||
"gasPrice" : "0x01",
|
||||
"nonce" : "0x",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "10"
|
||||
"value" : "0x0a"
|
||||
}
|
||||
},
|
||||
"blockhashOutOfRange" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "100000000",
|
||||
"currentNumber" : "257",
|
||||
"currentTimestamp" : 1,
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x05f5e100",
|
||||
"currentNumber" : "0x0101",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
|
@ -142,52 +142,45 @@
|
|||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1000000000000000010",
|
||||
"balance" : "0x0de0b6b3a7640000",
|
||||
"code" : "0x600040600055610101406001557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40600255",
|
||||
"nonce" : "0",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||
"balance" : "36078",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "963912",
|
||||
"balance" : "0x0f4240",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"postStateRoot" : "0e96d68de926409b99cc790cea2521251252caf771bbef9b5ddc5c30e1a7db90",
|
||||
"postStateRoot" : "06288380a8085485ac48f0b726c86f3e6253946ba969ed0d9e1a0f34d0133b81",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"balance" : "0x0de0b6b3a7640000",
|
||||
"code" : "0x600040600055610101406001557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40600255",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000",
|
||||
"balance" : "0x0f4240",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "",
|
||||
"gasLimit" : "285000",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"data" : "0x",
|
||||
"gasLimit" : "0x2b7cd0",
|
||||
"gasPrice" : "0x01",
|
||||
"nonce" : "0x",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "10"
|
||||
"value" : "0x0a"
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -2,10 +2,10 @@
|
|||
"add11" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : 1,
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
|
@ -13,24 +13,24 @@
|
|||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1000000000000100000",
|
||||
"balance" : "0x0de0b6b3a76586a0",
|
||||
"code" : "0x6001600101600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
"0x" : "0x02"
|
||||
}
|
||||
},
|
||||
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||
"balance" : "41012",
|
||||
"balance" : "0xa034",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999999858988",
|
||||
"balance" : "0x0de0b6b3a761d92c",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -38,28 +38,28 @@
|
|||
"postStateRoot" : "17454a767e5f04461256f3812ffca930443c04a47d05ce3f38940c4a14b8c479",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"balance" : "0x0de0b6b3a7640000",
|
||||
"code" : "0x6001600101600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"balance" : "0x0de0b6b3a7640000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "",
|
||||
"gasLimit" : "400000",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"data" : "0x",
|
||||
"gasLimit" : "0x061a80",
|
||||
"gasPrice" : "0x01",
|
||||
"nonce" : "0x",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "100000"
|
||||
"value" : "0x0186a0"
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -2,10 +2,10 @@
|
|||
"recursiveCreate" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "10000000",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : 1,
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x989680",
|
||||
"currentNumber" : "0x",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
|
@ -13,107 +13,107 @@
|
|||
"out" : "0x",
|
||||
"post" : {
|
||||
"04110d816c380812a427968ece99b1c963dfbce6" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "20100000",
|
||||
"balance" : "0x0132b3a0",
|
||||
"code" : "0x60206000600039602060006000f0",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"24dd378f51adc67a50e339e8031fe9bd4aafab36" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||
"balance" : "465224",
|
||||
"balance" : "0x071948",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"2cf5732f017b0cf1b1f13a1478e10239716bf6b5" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"37f998764813b136ddf5a754f34063fd03065e36" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"37fa399a749c121f8a15ce77e3d9f9bec8020d7a" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"62c01474f089b07dae603491675dc5b5748f7049" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"83e3e5a16d3b696a0314b30b2534804dd5e11197" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"8703df2417e0d7c59d063caa9583cb10a4d20532" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"99b2fcba8120bedd048fe79f5262a6690ed38c39" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "999999999999434776",
|
||||
"balance" : "0x0de0b6b3a75b6018",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a9647f4a0a14042d91dc33c0328030a7157c93ae" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"aae4a2e3c51c04606dcb3723456e58f3ed214f45" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"d2571607e241ecf590ed94b12d87c94babe36db6" : {
|
||||
"balance" : "0",
|
||||
"balance" : "0x",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -121,28 +121,28 @@
|
|||
"postStateRoot" : "eee65c3186265472b087f52db4d1f5f9b9dc232c57b5749e1dd80a53165f6cb9",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "20000000",
|
||||
"balance" : "0x01312d00",
|
||||
"code" : "0x60206000600039602060006000f0",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"balance" : "0x0de0b6b3a7640000",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "",
|
||||
"gasLimit" : "465224",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"data" : "0x",
|
||||
"gasLimit" : "0x071948",
|
||||
"gasPrice" : "0x01",
|
||||
"nonce" : "0x",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "100000"
|
||||
"value" : "0x0186a0"
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -2,10 +2,10 @@
|
|||
"OverflowGasMakeMoney" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "45678256",
|
||||
"currentGasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639935",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : 1,
|
||||
"currentDifficulty" : "0x02b8feb0",
|
||||
"currentGasLimit" : "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
|
||||
"currentNumber" : "0x",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
|
@ -13,9 +13,9 @@
|
|||
"out" : "0x",
|
||||
"post" : {
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000",
|
||||
"balance" : "0x03e8",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -23,30 +23,30 @@
|
|||
"postStateRoot" : "a60566e0ecd43f9224e59c41de05e376869357327052aba6a61614fbcccf32ac",
|
||||
"pre" : {
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000",
|
||||
"balance" : "0x03e8",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "",
|
||||
"gasLimit" : "115792089237316195423570985008687907853269984665640564039457584007913129639435",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"data" : "0x",
|
||||
"gasLimit" : "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0b",
|
||||
"gasPrice" : "0x01",
|
||||
"nonce" : "0x",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "b94f5374fce5edbc8e2a8697c15331677e6ebf0b",
|
||||
"value" : "501"
|
||||
"value" : "0x01f5"
|
||||
}
|
||||
},
|
||||
"makeMoney" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : 1,
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"logs" : [
|
||||
|
@ -54,30 +54,30 @@
|
|||
"out" : "0x",
|
||||
"post" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"balance" : "0x0de0b6b3a7640000",
|
||||
"code" : "0x7b601080600c6000396000f200600035541560095700602035600035556000526000600060006000601773aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecf1",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"2adc25665018aa1fe0e6bc666dac8fc2697ff9ba" : {
|
||||
"balance" : "228500",
|
||||
"balance" : "0x037c94",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "771500",
|
||||
"balance" : "0x0bc5ac",
|
||||
"code" : "0x",
|
||||
"nonce" : "1",
|
||||
"nonce" : "0x01",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"balance" : "0x0de0b6b3a7640000",
|
||||
"code" : "0x600160015532600255",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -85,35 +85,35 @@
|
|||
"postStateRoot" : "deecad9edcf67263e8e8f56c4db89a1620a964da88dac1734461ebc1126682cf",
|
||||
"pre" : {
|
||||
"095e7baea6a6c7c4c2dfeb977efac326af552d87" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"balance" : "0x0de0b6b3a7640000",
|
||||
"code" : "0x7b601080600c6000396000f200600035541560095700602035600035556000526000600060006000601773aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecf1",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000",
|
||||
"balance" : "0x0f4240",
|
||||
"code" : "0x",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
},
|
||||
"aaaaaaaaace5edbc8e2a8697c15331677e6ebf0b" : {
|
||||
"balance" : "1000000000000000000",
|
||||
"balance" : "0x0de0b6b3a7640000",
|
||||
"code" : "0x600160015532600255",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"transaction" : {
|
||||
"data" : "",
|
||||
"gasLimit" : "228500",
|
||||
"gasPrice" : "1",
|
||||
"nonce" : "0",
|
||||
"data" : "0x",
|
||||
"gasLimit" : "0x037c94",
|
||||
"gasPrice" : "0x01",
|
||||
"nonce" : "0x",
|
||||
"secretKey" : "45a915e4d060149eb4365960e6a7a45f334393093061116b197e3240065ff2d8",
|
||||
"to" : "095e7baea6a6c7c4c2dfeb977efac326af552d87",
|
||||
"value" : "10"
|
||||
"value" : "0x0a"
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -53,6 +53,9 @@
|
|||
"value" : ""
|
||||
}
|
||||
},
|
||||
"RSsecp256k1" : {
|
||||
"rlp" : "0xf86103018207d094b94f5374fce5edbc8e2a8697c15331677e6ebf0b0a8255441ca0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141a0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"
|
||||
},
|
||||
"RightVRSTest" : {
|
||||
"rlp" : "0xf86103018207d094b94f5374fce5edbc8e2a8697c15331677e6ebf0b0a8255441ca098ff921201554726367d2be8c804a7ff89ccf285ebc57dff8ae4c44b9c19ac4aa08887321be575c8095f789dd4c743dfe42c1820f9231f98a962b210e3ac2452a3",
|
||||
"sender" : "5ba306ae3650c72c3586da6f1dbac3c9fa7e529e",
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -4,10 +4,10 @@
|
|||
],
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "257",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x0101",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -15,29 +15,29 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x600040600055",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"gas" : "94974",
|
||||
"gas" : "0x0172fe",
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x600040600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x600040600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -48,10 +48,10 @@
|
|||
],
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "258",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x0102",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -59,29 +59,29 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x600140600055",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"gas" : "94974",
|
||||
"gas" : "0x0172fe",
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x600140600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x600140600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -92,10 +92,10 @@
|
|||
],
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "257",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x0101",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -103,20 +103,20 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x60014060005560024060015561010040600255",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"gas" : "39922",
|
||||
"gas" : "0x9bf2",
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x60014060005560024060015561010040600255",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
"0x" : "0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6",
|
||||
"0x01" : "0xad7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5",
|
||||
|
@ -126,9 +126,9 @@
|
|||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x60014060005560024060015561010040600255",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -139,10 +139,10 @@
|
|||
],
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "1",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x01",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -150,29 +150,29 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x600140600055",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"gas" : "94974",
|
||||
"gas" : "0x0172fe",
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x600140600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x600140600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -183,10 +183,10 @@
|
|||
],
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "1",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x01",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -194,29 +194,29 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x600240600055",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"gas" : "94974",
|
||||
"gas" : "0x0172fe",
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x600240600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x600240600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -227,10 +227,10 @@
|
|||
],
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "257",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x0101",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -238,29 +238,29 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x600040600055610101406001557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40600255",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"gas" : "84922",
|
||||
"gas" : "0x014bba",
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x600040600055610101406001557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40600255",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x600040600055610101406001557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40600255",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -269,10 +269,10 @@
|
|||
"blockhashUnderFlow" : {
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "1",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x01",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -280,16 +280,16 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x40",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x40",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -300,10 +300,10 @@
|
|||
],
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -311,20 +311,20 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x41600055",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"gas" : "79995",
|
||||
"gas" : "0x01387b",
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x41600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
"0x" : "0x2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"
|
||||
}
|
||||
|
@ -332,9 +332,9 @@
|
|||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x41600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -345,10 +345,10 @@
|
|||
],
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -356,20 +356,20 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x44600055",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"gas" : "79995",
|
||||
"gas" : "0x01387b",
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x44600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
"0x" : "0x0100"
|
||||
}
|
||||
|
@ -377,9 +377,9 @@
|
|||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x44600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -390,10 +390,10 @@
|
|||
],
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -401,20 +401,20 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x45600055",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"gas" : "79995",
|
||||
"gas" : "0x01387b",
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x45600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
"0x" : "0x0f4240"
|
||||
}
|
||||
|
@ -422,9 +422,9 @@
|
|||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x45600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -435,10 +435,10 @@
|
|||
],
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x01",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -446,29 +446,30 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x43600055",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"gas" : "94995",
|
||||
"gas" : "0x01387b",
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x43600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
"0x" : "0x01"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x43600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
@ -479,10 +480,10 @@
|
|||
],
|
||||
"env" : {
|
||||
"currentCoinbase" : "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba",
|
||||
"currentDifficulty" : "256",
|
||||
"currentGasLimit" : "1000000",
|
||||
"currentNumber" : "0",
|
||||
"currentTimestamp" : "1",
|
||||
"currentDifficulty" : "0x0100",
|
||||
"currentGasLimit" : "0x0f4240",
|
||||
"currentNumber" : "0x",
|
||||
"currentTimestamp" : "0x01",
|
||||
"previousHash" : "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"
|
||||
},
|
||||
"exec" : {
|
||||
|
@ -490,20 +491,20 @@
|
|||
"caller" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"code" : "0x42600055",
|
||||
"data" : "0x",
|
||||
"gas" : "100000",
|
||||
"gasPrice" : "100000000000000",
|
||||
"gas" : "0x0186a0",
|
||||
"gasPrice" : "0x5af3107a4000",
|
||||
"origin" : "cd1722f3947def4cf144679da39c4c32bdc35681",
|
||||
"value" : "1000000000000000000"
|
||||
"value" : "0x0de0b6b3a7640000"
|
||||
},
|
||||
"gas" : "79995",
|
||||
"gas" : "0x01387b",
|
||||
"logs" : [
|
||||
],
|
||||
"out" : "0x",
|
||||
"post" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x42600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
"0x" : "0x01"
|
||||
}
|
||||
|
@ -511,9 +512,9 @@
|
|||
},
|
||||
"pre" : {
|
||||
"0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6" : {
|
||||
"balance" : "100000000000000000000000",
|
||||
"balance" : "0x152d02c7e14af6800000",
|
||||
"code" : "0x42600055",
|
||||
"nonce" : "0",
|
||||
"nonce" : "0x",
|
||||
"storage" : {
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue