Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
7324176f
Commit
7324176f
authored
Aug 24, 2015
by
Gustav Simonsson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add tests for uncle timestamps and refactor timestamp type
parent
d51d0022
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
380 additions
and
43 deletions
+380
-43
main.go
cmd/evm/main.go
+3
-3
block_processor.go
core/block_processor.go
+13
-7
block_processor_test.go
core/block_processor_test.go
+2
-2
chain_makers.go
core/chain_makers.go
+8
-3
chain_manager.go
core/chain_manager.go
+2
-1
error.go
core/error.go
+4
-3
genesis.go
core/genesis.go
+1
-1
block.go
core/types/block.go
+6
-3
block_test.go
core/types/block_test.go
+1
-1
environment.go
core/vm/environment.go
+1
-1
instructions.go
core/vm/instructions.go
+1
-1
jit_test.go
core/vm/jit_test.go
+1
-1
vm.go
core/vm/vm.go
+1
-1
vm_env.go
core/vm_env.go
+1
-1
handler.go
eth/handler.go
+1
-1
worker.go
miner/worker.go
+5
-5
block_test.go
tests/block_test.go
+7
-0
block_test_util.go
tests/block_test_util.go
+3
-3
bcUncleTest.json
tests/files/BlockchainTests/bcUncleTest.json
+314
-1
util.go
tests/util.go
+3
-3
types.go
xeth/types.go
+2
-1
No files found.
cmd/evm/main.go
View file @
7324176f
...
...
@@ -166,7 +166,7 @@ type VMEnv struct {
depth
int
Gas
*
big
.
Int
time
uint64
time
*
big
.
Int
logs
[]
vm
.
StructLog
}
...
...
@@ -175,7 +175,7 @@ func NewEnv(state *state.StateDB, transactor common.Address, value *big.Int) *VM
state
:
state
,
transactor
:
&
transactor
,
value
:
value
,
time
:
uint64
(
time
.
Now
()
.
Unix
()),
time
:
big
.
NewInt
(
time
.
Now
()
.
Unix
()),
}
}
...
...
@@ -183,7 +183,7 @@ func (self *VMEnv) State() *state.StateDB { return self.state }
func
(
self
*
VMEnv
)
Origin
()
common
.
Address
{
return
*
self
.
transactor
}
func
(
self
*
VMEnv
)
BlockNumber
()
*
big
.
Int
{
return
common
.
Big0
}
func
(
self
*
VMEnv
)
Coinbase
()
common
.
Address
{
return
*
self
.
transactor
}
func
(
self
*
VMEnv
)
Time
()
uint64
{
return
self
.
time
}
func
(
self
*
VMEnv
)
Time
()
*
big
.
Int
{
return
self
.
time
}
func
(
self
*
VMEnv
)
Difficulty
()
*
big
.
Int
{
return
common
.
Big1
}
func
(
self
*
VMEnv
)
BlockHash
()
[]
byte
{
return
make
([]
byte
,
32
)
}
func
(
self
*
VMEnv
)
Value
()
*
big
.
Int
{
return
self
.
value
}
...
...
core/block_processor.go
View file @
7324176f
...
...
@@ -203,7 +203,7 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st
txs
:=
block
.
Transactions
()
// Block validation
if
err
=
ValidateHeader
(
sm
.
Pow
,
header
,
parent
,
false
);
err
!=
nil
{
if
err
=
ValidateHeader
(
sm
.
Pow
,
header
,
parent
,
false
,
false
);
err
!=
nil
{
return
}
...
...
@@ -327,7 +327,7 @@ func (sm *BlockProcessor) VerifyUncles(statedb *state.StateDB, block, parent *ty
return
UncleError
(
"uncle[%d](%x)'s parent is not ancestor (%x)"
,
i
,
hash
[
:
4
],
uncle
.
ParentHash
[
0
:
4
])
}
if
err
:=
ValidateHeader
(
sm
.
Pow
,
uncle
,
ancestors
[
uncle
.
ParentHash
],
true
);
err
!=
nil
{
if
err
:=
ValidateHeader
(
sm
.
Pow
,
uncle
,
ancestors
[
uncle
.
ParentHash
],
true
,
true
);
err
!=
nil
{
return
ValidationError
(
fmt
.
Sprintf
(
"uncle[%d](%x) header invalid: %v"
,
i
,
hash
[
:
4
],
err
))
}
}
...
...
@@ -358,19 +358,25 @@ func (sm *BlockProcessor) GetLogs(block *types.Block) (logs state.Logs, err erro
// See YP section 4.3.4. "Block Header Validity"
// Validates a block. Returns an error if the block is invalid.
func
ValidateHeader
(
pow
pow
.
PoW
,
block
*
types
.
Header
,
parent
*
types
.
Block
,
checkPow
bool
)
error
{
func
ValidateHeader
(
pow
pow
.
PoW
,
block
*
types
.
Header
,
parent
*
types
.
Block
,
checkPow
,
uncle
bool
)
error
{
if
big
.
NewInt
(
int64
(
len
(
block
.
Extra
)))
.
Cmp
(
params
.
MaximumExtraDataSize
)
==
1
{
return
fmt
.
Errorf
(
"Block extra data too long (%d)"
,
len
(
block
.
Extra
))
}
if
block
.
Time
>
uint64
(
time
.
Now
()
.
Unix
())
{
return
BlockFutureErr
if
uncle
{
if
block
.
Time
.
Cmp
(
common
.
MaxBig
)
==
1
{
return
BlockTSTooBigErr
}
}
else
{
if
block
.
Time
.
Cmp
(
big
.
NewInt
(
time
.
Now
()
.
Unix
()))
==
1
{
return
BlockFutureErr
}
}
if
block
.
Time
<=
parent
.
Time
()
{
if
block
.
Time
.
Cmp
(
parent
.
Time
())
!=
1
{
return
BlockEqualTSErr
}
expd
:=
CalcDifficulty
(
block
.
Time
,
parent
.
Time
(),
parent
.
Number
(),
parent
.
Difficulty
())
expd
:=
CalcDifficulty
(
block
.
Time
.
Uint64
(),
parent
.
Time
()
.
Uint64
(),
parent
.
Number
(),
parent
.
Difficulty
())
if
expd
.
Cmp
(
block
.
Difficulty
)
!=
0
{
return
fmt
.
Errorf
(
"Difficulty check failed for block %v, %v"
,
block
.
Difficulty
,
expd
)
}
...
...
core/block_processor_test.go
View file @
7324176f
...
...
@@ -48,13 +48,13 @@ func TestNumber(t *testing.T) {
statedb
:=
state
.
New
(
chain
.
Genesis
()
.
Root
(),
chain
.
chainDb
)
header
:=
makeHeader
(
chain
.
Genesis
(),
statedb
)
header
.
Number
=
big
.
NewInt
(
3
)
err
:=
ValidateHeader
(
pow
,
header
,
chain
.
Genesis
(),
false
)
err
:=
ValidateHeader
(
pow
,
header
,
chain
.
Genesis
(),
false
,
false
)
if
err
!=
BlockNumberErr
{
t
.
Errorf
(
"expected block number error, got %q"
,
err
)
}
header
=
makeHeader
(
chain
.
Genesis
(),
statedb
)
err
=
ValidateHeader
(
pow
,
header
,
chain
.
Genesis
(),
false
)
err
=
ValidateHeader
(
pow
,
header
,
chain
.
Genesis
(),
false
,
false
)
if
err
==
BlockNumberErr
{
t
.
Errorf
(
"didn't expect block number error"
)
}
...
...
core/chain_makers.go
View file @
7324176f
...
...
@@ -166,16 +166,21 @@ func GenerateChain(parent *types.Block, db common.Database, n int, gen func(int,
}
func
makeHeader
(
parent
*
types
.
Block
,
state
*
state
.
StateDB
)
*
types
.
Header
{
time
:=
parent
.
Time
()
+
10
// block time is fixed at 10 seconds
var
time
*
big
.
Int
if
parent
.
Time
()
==
nil
{
time
=
big
.
NewInt
(
10
)
}
else
{
time
=
new
(
big
.
Int
)
.
Add
(
parent
.
Time
(),
big
.
NewInt
(
10
))
// block time is fixed at 10 seconds
}
return
&
types
.
Header
{
Root
:
state
.
Root
(),
ParentHash
:
parent
.
Hash
(),
Coinbase
:
parent
.
Coinbase
(),
Difficulty
:
CalcDifficulty
(
time
,
parent
.
Time
(),
parent
.
Number
(),
parent
.
Difficulty
()),
Difficulty
:
CalcDifficulty
(
time
.
Uint64
(),
new
(
big
.
Int
)
.
Sub
(
time
,
big
.
NewInt
(
10
))
.
Uint64
(),
parent
.
Number
(),
parent
.
Difficulty
()),
GasLimit
:
CalcGasLimit
(
parent
),
GasUsed
:
new
(
big
.
Int
),
Number
:
new
(
big
.
Int
)
.
Add
(
parent
.
Number
(),
common
.
Big1
),
Time
:
uint64
(
time
)
,
Time
:
time
,
}
}
...
...
core/chain_manager.go
View file @
7324176f
...
...
@@ -596,7 +596,8 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
// Allow up to MaxFuture second in the future blocks. If this limit
// is exceeded the chain is discarded and processed at a later time
// if given.
if
max
:=
uint64
(
time
.
Now
()
.
Unix
())
+
maxTimeFutureBlocks
;
block
.
Time
()
>
max
{
max
:=
big
.
NewInt
(
time
.
Now
()
.
Unix
()
+
maxTimeFutureBlocks
)
if
block
.
Time
()
.
Cmp
(
max
)
==
1
{
return
i
,
fmt
.
Errorf
(
"%v: BlockFutureErr, %v > %v"
,
BlockFutureErr
,
block
.
Time
(),
max
)
}
...
...
core/error.go
View file @
7324176f
...
...
@@ -25,9 +25,10 @@ import (
)
var
(
BlockNumberErr
=
errors
.
New
(
"block number invalid"
)
BlockFutureErr
=
errors
.
New
(
"block time is in the future"
)
BlockEqualTSErr
=
errors
.
New
(
"block time stamp equal to previous"
)
BlockNumberErr
=
errors
.
New
(
"block number invalid"
)
BlockFutureErr
=
errors
.
New
(
"block time is in the future"
)
BlockTSTooBigErr
=
errors
.
New
(
"block time too big"
)
BlockEqualTSErr
=
errors
.
New
(
"block time stamp equal to previous"
)
)
// Parent error. In case a parent is unknown this error will be thrown
...
...
core/genesis.go
View file @
7324176f
...
...
@@ -73,7 +73,7 @@ func WriteGenesisBlock(chainDb common.Database, reader io.Reader) (*types.Block,
difficulty
:=
common
.
String2Big
(
genesis
.
Difficulty
)
block
:=
types
.
NewBlock
(
&
types
.
Header
{
Nonce
:
types
.
EncodeNonce
(
common
.
String2Big
(
genesis
.
Nonce
)
.
Uint64
()),
Time
:
common
.
String2Big
(
genesis
.
Timestamp
)
.
Uint64
()
,
Time
:
common
.
String2Big
(
genesis
.
Timestamp
),
ParentHash
:
common
.
HexToHash
(
genesis
.
ParentHash
),
Extra
:
common
.
FromHex
(
genesis
.
ExtraData
),
GasLimit
:
common
.
String2Big
(
genesis
.
GasLimit
),
...
...
core/types/block.go
View file @
7324176f
...
...
@@ -60,7 +60,7 @@ type Header struct {
Number
*
big
.
Int
// The block number
GasLimit
*
big
.
Int
// Gas limit
GasUsed
*
big
.
Int
// Gas used
Time
uint64
// Creation time
Time
*
big
.
Int
// Creation time
Extra
[]
byte
// Extra data
MixDigest
common
.
Hash
// for quick difficulty verification
Nonce
BlockNonce
...
...
@@ -94,7 +94,7 @@ func (h *Header) UnmarshalJSON(data []byte) error {
Coinbase
string
Difficulty
string
GasLimit
string
Time
uint64
Time
*
big
.
Int
Extra
string
}
dec
:=
json
.
NewDecoder
(
bytes
.
NewReader
(
data
))
...
...
@@ -210,6 +210,9 @@ func NewBlockWithHeader(header *Header) *Block {
func
copyHeader
(
h
*
Header
)
*
Header
{
cpy
:=
*
h
if
cpy
.
Time
=
new
(
big
.
Int
);
h
.
Time
!=
nil
{
cpy
.
Time
.
Set
(
h
.
Time
)
}
if
cpy
.
Difficulty
=
new
(
big
.
Int
);
h
.
Difficulty
!=
nil
{
cpy
.
Difficulty
.
Set
(
h
.
Difficulty
)
}
...
...
@@ -301,13 +304,13 @@ func (b *Block) Number() *big.Int { return new(big.Int).Set(b.header.Number)
func
(
b
*
Block
)
GasLimit
()
*
big
.
Int
{
return
new
(
big
.
Int
)
.
Set
(
b
.
header
.
GasLimit
)
}
func
(
b
*
Block
)
GasUsed
()
*
big
.
Int
{
return
new
(
big
.
Int
)
.
Set
(
b
.
header
.
GasUsed
)
}
func
(
b
*
Block
)
Difficulty
()
*
big
.
Int
{
return
new
(
big
.
Int
)
.
Set
(
b
.
header
.
Difficulty
)
}
func
(
b
*
Block
)
Time
()
*
big
.
Int
{
return
new
(
big
.
Int
)
.
Set
(
b
.
header
.
Time
)
}
func
(
b
*
Block
)
NumberU64
()
uint64
{
return
b
.
header
.
Number
.
Uint64
()
}
func
(
b
*
Block
)
MixDigest
()
common
.
Hash
{
return
b
.
header
.
MixDigest
}
func
(
b
*
Block
)
Nonce
()
uint64
{
return
binary
.
BigEndian
.
Uint64
(
b
.
header
.
Nonce
[
:
])
}
func
(
b
*
Block
)
Bloom
()
Bloom
{
return
b
.
header
.
Bloom
}
func
(
b
*
Block
)
Coinbase
()
common
.
Address
{
return
b
.
header
.
Coinbase
}
func
(
b
*
Block
)
Time
()
uint64
{
return
b
.
header
.
Time
}
func
(
b
*
Block
)
Root
()
common
.
Hash
{
return
b
.
header
.
Root
}
func
(
b
*
Block
)
ParentHash
()
common
.
Hash
{
return
b
.
header
.
ParentHash
}
func
(
b
*
Block
)
TxHash
()
common
.
Hash
{
return
b
.
header
.
TxHash
}
...
...
core/types/block_test.go
View file @
7324176f
...
...
@@ -47,7 +47,7 @@ func TestBlockEncoding(t *testing.T) {
check
(
"Root"
,
block
.
Root
(),
common
.
HexToHash
(
"ef1552a40b7165c3cd773806b9e0c165b75356e0314bf0706f279c729f51e017"
))
check
(
"Hash"
,
block
.
Hash
(),
common
.
HexToHash
(
"0a5843ac1cb04865017cb35a57b50b07084e5fcee39b5acadade33149f4fff9e"
))
check
(
"Nonce"
,
block
.
Nonce
(),
uint64
(
0xa13a5a8c8f2bb1c4
))
check
(
"Time"
,
block
.
Time
(),
uint64
(
1426516743
))
check
(
"Time"
,
block
.
Time
(),
big
.
NewInt
(
1426516743
))
check
(
"Size"
,
block
.
Size
(),
common
.
StorageSize
(
len
(
blockEnc
)))
tx1
:=
NewTransaction
(
0
,
common
.
HexToAddress
(
"095e7baea6a6c7c4c2dfeb977efac326af552d87"
),
big
.
NewInt
(
10
),
big
.
NewInt
(
50000
),
big
.
NewInt
(
10
),
nil
)
...
...
core/vm/environment.go
View file @
7324176f
...
...
@@ -33,7 +33,7 @@ type Environment interface {
BlockNumber
()
*
big
.
Int
GetHash
(
n
uint64
)
common
.
Hash
Coinbase
()
common
.
Address
Time
()
uint64
Time
()
*
big
.
Int
Difficulty
()
*
big
.
Int
GasLimit
()
*
big
.
Int
CanTransfer
(
from
Account
,
balance
*
big
.
Int
)
bool
...
...
core/vm/instructions.go
View file @
7324176f
...
...
@@ -341,7 +341,7 @@ func opCoinbase(instr instruction, env Environment, context *Context, memory *Me
}
func
opTimestamp
(
instr
instruction
,
env
Environment
,
context
*
Context
,
memory
*
Memory
,
stack
*
stack
)
{
stack
.
push
(
U256
(
new
(
big
.
Int
)
.
Set
Uint64
(
env
.
Time
())))
stack
.
push
(
U256
(
new
(
big
.
Int
)
.
Set
(
env
.
Time
())))
}
func
opNumber
(
instr
instruction
,
env
Environment
,
context
*
Context
,
memory
*
Memory
,
stack
*
stack
)
{
...
...
core/vm/jit_test.go
View file @
7324176f
...
...
@@ -93,7 +93,7 @@ func (self *Env) StructLogs() []StructLog {
//func (self *Env) PrevHash() []byte { return self.parent }
func
(
self
*
Env
)
Coinbase
()
common
.
Address
{
return
common
.
Address
{}
}
func
(
self
*
Env
)
Time
()
uint64
{
return
uint64
(
time
.
Now
()
.
Unix
())
}
func
(
self
*
Env
)
Time
()
*
big
.
Int
{
return
big
.
NewInt
(
time
.
Now
()
.
Unix
())
}
func
(
self
*
Env
)
Difficulty
()
*
big
.
Int
{
return
big
.
NewInt
(
0
)
}
func
(
self
*
Env
)
State
()
*
state
.
StateDB
{
return
nil
}
func
(
self
*
Env
)
GasLimit
()
*
big
.
Int
{
return
self
.
gasLimit
}
...
...
core/vm/vm.go
View file @
7324176f
...
...
@@ -491,7 +491,7 @@ func (self *Vm) Run(context *Context, input []byte) (ret []byte, err error) {
case
TIMESTAMP
:
time
:=
self
.
env
.
Time
()
stack
.
push
(
new
(
big
.
Int
)
.
Set
Uint64
(
time
))
stack
.
push
(
new
(
big
.
Int
)
.
Set
(
time
))
case
NUMBER
:
number
:=
self
.
env
.
BlockNumber
()
...
...
core/vm_env.go
View file @
7324176f
...
...
@@ -49,7 +49,7 @@ func NewEnv(state *state.StateDB, chain *ChainManager, msg Message, header *type
func
(
self
*
VMEnv
)
Origin
()
common
.
Address
{
f
,
_
:=
self
.
msg
.
From
();
return
f
}
func
(
self
*
VMEnv
)
BlockNumber
()
*
big
.
Int
{
return
self
.
header
.
Number
}
func
(
self
*
VMEnv
)
Coinbase
()
common
.
Address
{
return
self
.
header
.
Coinbase
}
func
(
self
*
VMEnv
)
Time
()
uint64
{
return
self
.
header
.
Time
}
func
(
self
*
VMEnv
)
Time
()
*
big
.
Int
{
return
self
.
header
.
Time
}
func
(
self
*
VMEnv
)
Difficulty
()
*
big
.
Int
{
return
self
.
header
.
Difficulty
}
func
(
self
*
VMEnv
)
GasLimit
()
*
big
.
Int
{
return
self
.
header
.
GasLimit
}
func
(
self
*
VMEnv
)
Value
()
*
big
.
Int
{
return
self
.
msg
.
Value
()
}
...
...
eth/handler.go
View file @
7324176f
...
...
@@ -117,7 +117,7 @@ func NewProtocolManager(networkId int, mux *event.TypeMux, txpool txPool, pow po
manager
.
downloader
=
downloader
.
New
(
manager
.
eventMux
,
manager
.
chainman
.
HasBlock
,
manager
.
chainman
.
GetBlock
,
manager
.
chainman
.
CurrentBlock
,
manager
.
chainman
.
InsertChain
,
manager
.
removePeer
)
validator
:=
func
(
block
*
types
.
Block
,
parent
*
types
.
Block
)
error
{
return
core
.
ValidateHeader
(
pow
,
block
.
Header
(),
parent
,
true
)
return
core
.
ValidateHeader
(
pow
,
block
.
Header
(),
parent
,
true
,
false
)
}
heighter
:=
func
()
uint64
{
return
manager
.
chainman
.
CurrentBlock
()
.
NumberU64
()
...
...
miner/worker.go
View file @
7324176f
...
...
@@ -278,7 +278,7 @@ func (self *worker) wait() {
glog
.
V
(
logger
.
Error
)
.
Infoln
(
"Invalid block found during mining"
)
continue
}
if
err
:=
core
.
ValidateHeader
(
self
.
eth
.
BlockProcessor
()
.
Pow
,
block
.
Header
(),
parent
,
true
);
err
!=
nil
&&
err
!=
core
.
BlockFutureErr
{
if
err
:=
core
.
ValidateHeader
(
self
.
eth
.
BlockProcessor
()
.
Pow
,
block
.
Header
(),
parent
,
true
,
false
);
err
!=
nil
&&
err
!=
core
.
BlockFutureErr
{
glog
.
V
(
logger
.
Error
)
.
Infoln
(
"Invalid header on mined block:"
,
err
)
continue
}
...
...
@@ -434,8 +434,8 @@ func (self *worker) commitNewWork() {
tstart
:=
time
.
Now
()
parent
:=
self
.
chain
.
CurrentBlock
()
tstamp
:=
tstart
.
Unix
()
if
tstamp
<=
int64
(
parent
.
Time
())
{
tstamp
=
int64
(
parent
.
Time
()
)
+
1
if
parent
.
Time
()
.
Cmp
(
new
(
big
.
Int
)
.
SetInt64
(
tstamp
))
!=
1
{
tstamp
=
parent
.
Time
()
.
Int64
(
)
+
1
}
// this will ensure we're not going off too far in the future
if
now
:=
time
.
Now
()
.
Unix
();
tstamp
>
now
+
4
{
...
...
@@ -448,12 +448,12 @@ func (self *worker) commitNewWork() {
header
:=
&
types
.
Header
{
ParentHash
:
parent
.
Hash
(),
Number
:
num
.
Add
(
num
,
common
.
Big1
),
Difficulty
:
core
.
CalcDifficulty
(
uint64
(
tstamp
),
parent
.
Time
(),
parent
.
Number
(),
parent
.
Difficulty
()),
Difficulty
:
core
.
CalcDifficulty
(
uint64
(
tstamp
),
parent
.
Time
()
.
Uint64
()
,
parent
.
Number
(),
parent
.
Difficulty
()),
GasLimit
:
core
.
CalcGasLimit
(
parent
),
GasUsed
:
new
(
big
.
Int
),
Coinbase
:
self
.
coinbase
,
Extra
:
self
.
extra
,
Time
:
uint64
(
tstamp
),
Time
:
big
.
NewInt
(
tstamp
),
}
previous
:=
self
.
current
...
...
tests/block_test.go
View file @
7324176f
...
...
@@ -35,6 +35,13 @@ func TestBcUncleHeaderValidityTests(t *testing.T) {
}
}
func
TestBcUncleTests
(
t
*
testing
.
T
)
{
err
:=
RunBlockTest
(
filepath
.
Join
(
blockTestDir
,
"bcUncleTest.json"
),
BlockSkipTests
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
}
func
TestBcInvalidHeaderTests
(
t
*
testing
.
T
)
{
err
:=
RunBlockTest
(
filepath
.
Join
(
blockTestDir
,
"bcInvalidHeaderTest.json"
),
BlockSkipTests
)
if
err
!=
nil
{
...
...
tests/block_test_util.go
View file @
7324176f
...
...
@@ -365,8 +365,8 @@ func (s *BlockTest) validateBlockHeader(h *btHeader, h2 *types.Header) error {
return
fmt
.
Errorf
(
"GasUsed: expected: %v, decoded: %v"
,
expectedGasUsed
,
h2
.
GasUsed
)
}
expectedTimestamp
:=
mustConvert
Ui
nt
(
h
.
Timestamp
,
16
)
if
expectedTimestamp
!=
h2
.
Time
{
expectedTimestamp
:=
mustConvert
BigI
nt
(
h
.
Timestamp
,
16
)
if
expectedTimestamp
.
Cmp
(
h2
.
Time
)
!=
0
{
return
fmt
.
Errorf
(
"Timestamp: expected: %v, decoded: %v"
,
expectedTimestamp
,
h2
.
Time
)
}
...
...
@@ -461,7 +461,7 @@ func mustConvertHeader(in btHeader) *types.Header {
GasUsed
:
mustConvertBigInt
(
in
.
GasUsed
,
16
),
GasLimit
:
mustConvertBigInt
(
in
.
GasLimit
,
16
),
Difficulty
:
mustConvertBigInt
(
in
.
Difficulty
,
16
),
Time
:
mustConvert
Ui
nt
(
in
.
Timestamp
,
16
),
Time
:
mustConvert
BigI
nt
(
in
.
Timestamp
,
16
),
Nonce
:
types
.
EncodeNonce
(
mustConvertUint
(
in
.
Nonce
,
16
)),
}
return
header
...
...
tests/files/BlockchainTests/bcUncleTest.json
View file @
7324176f
...
...
@@ -4543,5 +4543,318 @@
}
}
}
},
"uncleTimestampTooBig"
:
{
"blocks"
:
[
{
"blockHeader"
:
{
"bloom"
:
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"coinbase"
:
"8888f1f195afa192cfee860698584c030f4c9db1"
,
"difficulty"
:
"0x020000"
,
"extraData"
:
"0x"
,
"gasLimit"
:
"0x2fefd8"
,
"gasUsed"
:
"0x5208"
,
"hash"
:
"6bd328a10bb674cc758bd1bccb8afb584808766434c28b85580b422c75d4130e"
,
"mixHash"
:
"fefce638471ab6b66b1f1423ae574a99a6b2137229fe1846c508554d718d2bc1"
,
"nonce"
:
"f8cf2912afdd244d"
,
"number"
:
"0x01"
,
"parentHash"
:
"b964d0b68e5a3c7265e4087dc2a8aaf599f06b6d6c1316a1b1b6475587f569e2"
,
"receiptTrie"
:
"e9244cf7503b79c03d3a099e07a80d2dbc77bb0b502d8a89d51ac0d68dd31313"
,
"stateRoot"
:
"cb52de543653d86ccd13ba3ddf8b052525b04231c6884a4db3188a184681d878"
,
"timestamp"
:
"0x55d9d69f"
,
"transactionsTrie"
:
"5c9151c2413d1cd25c51ffb4ac38948acc1359bf08c6b49f283660e9bcf0f516"
,
"uncleHash"
:
"1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
},
"rlp"
:
"0xf90261f901f9a0b964d0b68e5a3c7265e4087dc2a8aaf599f06b6d6c1316a1b1b6475587f569e2a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0cb52de543653d86ccd13ba3ddf8b052525b04231c6884a4db3188a184681d878a05c9151c2413d1cd25c51ffb4ac38948acc1359bf08c6b49f283660e9bcf0f516a0e9244cf7503b79c03d3a099e07a80d2dbc77bb0b502d8a89d51ac0d68dd31313b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd88252088455d9d69f80a0fefce638471ab6b66b1f1423ae574a99a6b2137229fe1846c508554d718d2bc188f8cf2912afdd244df862f86080018304cb2f94095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba077c7cd36820c71821c1aed59de46e70e701c4a8dd89c9ba508ab722210f60da8a03f29825d40c7c3f7bff3ca69267e0f3fb74b2d18b8c2c4e3c135b5d3b06e288dc0"
,
"transactions"
:
[
{
"data"
:
"0x"
,
"gasLimit"
:
"0x04cb2f"
,
"gasPrice"
:
"0x01"
,
"nonce"
:
"0x00"
,
"r"
:
"0x77c7cd36820c71821c1aed59de46e70e701c4a8dd89c9ba508ab722210f60da8"
,
"s"
:
"0x3f29825d40c7c3f7bff3ca69267e0f3fb74b2d18b8c2c4e3c135b5d3b06e288d"
,
"to"
:
"095e7baea6a6c7c4c2dfeb977efac326af552d87"
,
"v"
:
"0x1b"
,
"value"
:
"0x0a"
}
],
"uncleHeaders"
:
[
]
},
{
"blockHeader"
:
{
"bloom"
:
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"coinbase"
:
"8888f1f195afa192cfee860698584c030f4c9db1"
,
"difficulty"
:
"0x020040"
,
"extraData"
:
"0x"
,
"gasLimit"
:
"0x2fefd8"
,
"gasUsed"
:
"0x5208"
,
"hash"
:
"4c179927c9b9897464c7133033b412c9b66ee2bb1fa4a4b2595a6006d4081e3f"
,
"mixHash"
:
"3449cf46635bab4ae7121dcd145e6ca12ac4337f79e88354c41bff1c48335b48"
,
"nonce"
:
"4376da5cd48ffb68"
,
"number"
:
"0x02"
,
"parentHash"
:
"6bd328a10bb674cc758bd1bccb8afb584808766434c28b85580b422c75d4130e"
,
"receiptTrie"
:
"5ea1a8b24652fed0ecab4738edd9211891eb8c4353c345973b78a02cc0f32f6b"
,
"stateRoot"
:
"e7e4760f75476ec7f51869d8bdce5c693058fd5a95c77ea9c0bf7ced1e50d70e"
,
"timestamp"
:
"0x55d9d6a1"
,
"transactionsTrie"
:
"c673e076264c4669a5c2e479f1757b78e42511efe33b5fd2c0a23b929c7f87f5"
,
"uncleHash"
:
"1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
},
"rlp"
:
"0xf90260f901f9a06bd328a10bb674cc758bd1bccb8afb584808766434c28b85580b422c75d4130ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0e7e4760f75476ec7f51869d8bdce5c693058fd5a95c77ea9c0bf7ced1e50d70ea0c673e076264c4669a5c2e479f1757b78e42511efe33b5fd2c0a23b929c7f87f5a05ea1a8b24652fed0ecab4738edd9211891eb8c4353c345973b78a02cc0f32f6bb90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302004002832fefd88252088455d9d6a180a03449cf46635bab4ae7121dcd145e6ca12ac4337f79e88354c41bff1c48335b48884376da5cd48ffb68f861f85f01018304cb2f94095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba033c86e64d708c97c6b135cadff79dbf45985aa0b53694789e90d15f756765f239f1d0f8caa2a16405148c9d85581be5814960010f3cba938b5501590cea1f7cfc0"
,
"transactions"
:
[
{
"data"
:
"0x"
,
"gasLimit"
:
"0x04cb2f"
,
"gasPrice"
:
"0x01"
,
"nonce"
:
"0x01"
,
"r"
:
"0x33c86e64d708c97c6b135cadff79dbf45985aa0b53694789e90d15f756765f23"
,
"s"
:
"0x1d0f8caa2a16405148c9d85581be5814960010f3cba938b5501590cea1f7cf"
,
"to"
:
"095e7baea6a6c7c4c2dfeb977efac326af552d87"
,
"v"
:
"0x1b"
,
"value"
:
"0x0a"
}
],
"uncleHeaders"
:
[
]
},
{
"rlp"
:
"0xf90459f901f9a04c179927c9b9897464c7133033b412c9b66ee2bb1fa4a4b2595a6006d4081e3fa0f4fd3b99eb9b343e87bc472fdcd6b18e5cbcb231b1e70f8948e97b02c008ac26948888f1f195afa192cfee860698584c030f4c9db1a0e9940294a09308406a3d2e09203aed11db40259fac0a25e639ad2b30b82d07dea01722b8a91bfc4f5614ce36ee77c7cce6620ab4af36d3c54baa66d7dbeb7bce1aa04ede0225773c7a517b91994aca65ade45124e7ef4b8be1e6097c9773a11920afb90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302008003832fefd88252088455d9d6a680a0caf6f553d8c1394d291caaeabc61bc25f9126f4c313c829b2a51134cbd23d27188e6999e52421f5a38f862f86002018304cb2f94095e7baea6a6c7c4c2dfeb977efac326af552d870a801ca015eb1cc916728b9799e55c489857727669afb2986433d5f54cde11faaed9f0eea05d36f6d06c34aae8d0a2a5895c8ba4a17ad46a5fa59f361cb3e7e01a23030e38f901f6f901f3a06bd328a10bb674cc758bd1bccb8afb584808766434c28b85580b422c75d4130ea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794bcde5374fce5edbc8e2a8697c15331677e6ebf0ba0cb52de543653d86ccd13ba3ddf8b052525b04231c6884a4db3188a184681d878a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000002832fefd8808080a077355633b05269548d6b3bd8e80d334fcb1a31c566b980dfc56eb57d5c16acc388846c622f81a727e7"
}
],
"genesisBlockHeader"
:
{
"bloom"
:
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"coinbase"
:
"8888f1f195afa192cfee860698584c030f4c9db1"
,
"difficulty"
:
"0x020000"
,
"extraData"
:
"0x42"
,
"gasLimit"
:
"0x2fefd8"
,
"gasUsed"
:
"0x00"
,
"hash"
:
"b964d0b68e5a3c7265e4087dc2a8aaf599f06b6d6c1316a1b1b6475587f569e2"
,
"mixHash"
:
"b65f3c17c458ce015c087c3e4c0ffeeb010bf648a1faa2585c674d81ea7dcdfd"
,
"nonce"
:
"0b2ec3394d2421e3"
,
"number"
:
"0x00"
,
"parentHash"
:
"0000000000000000000000000000000000000000000000000000000000000000"
,
"receiptTrie"
:
"56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
,
"stateRoot"
:
"7dba07d6b448a186e9612e5f737d1c909dce473e53199901a302c00646d523c1"
,
"timestamp"
:
"0x54c98c81"
,
"transactionsTrie"
:
"56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
,
"uncleHash"
:
"1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
},
"genesisRLP"
:
"0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a07dba07d6b448a186e9612e5f737d1c909dce473e53199901a302c00646d523c1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0b65f3c17c458ce015c087c3e4c0ffeeb010bf648a1faa2585c674d81ea7dcdfd880b2ec3394d2421e3c0c0"
,
"lastblockhash"
:
"4c179927c9b9897464c7133033b412c9b66ee2bb1fa4a4b2595a6006d4081e3f"
,
"postState"
:
{
"095e7baea6a6c7c4c2dfeb977efac326af552d87"
:
{
"balance"
:
"0x14"
,
"code"
:
"0x"
,
"nonce"
:
"0x00"
,
"storage"
:
{
}
},
"8888f1f195afa192cfee860698584c030f4c9db1"
:
{
"balance"
:
"0x8ac7230489e8a410"
,
"code"
:
"0x"
,
"nonce"
:
"0x00"
,
"storage"
:
{
}
},
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b"
:
{
"balance"
:
"0x09184e71fbdc"
,
"code"
:
"0x"
,
"nonce"
:
"0x02"
,
"storage"
:
{
}
}
},
"pre"
:
{
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b"
:
{
"balance"
:
"0x09184e72a000"
,
"code"
:
"0x"
,
"nonce"
:
"0x00"
,
"storage"
:
{
}
}
}
},
"uncleTimestampMaxUint256"
:
{
"blocks"
:
[
{
"blockHeader"
:
{
"bloom"
:
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"coinbase"
:
"8888f1f195afa192cfee860698584c030f4c9db1"
,
"difficulty"
:
"0x020000"
,
"extraData"
:
"0x"
,
"gasLimit"
:
"0x2fefd8"
,
"gasUsed"
:
"0x5208"
,
"hash"
:
"19c900975f94fd78dc12ad13740200fbe0a2eba43fd070bedc65588b0c95438a"
,
"mixHash"
:
"4296af28ea723598c959f1cabc6f01fa0c75d126cfde89f13ccd9debcf3079c3"
,
"nonce"
:
"3213b3fd7789f5d5"
,
"number"
:
"0x01"
,
"parentHash"
:
"e688d736f1307c6f97b6777381b30556137b9d4ca5c43fbd5b30d6b5df315264"
,
"receiptTrie"
:
"e9244cf7503b79c03d3a099e07a80d2dbc77bb0b502d8a89d51ac0d68dd31313"
,
"stateRoot"
:
"cb52de543653d86ccd13ba3ddf8b052525b04231c6884a4db3188a184681d878"
,
"timestamp"
:
"0x55d9c571"
,
"transactionsTrie"
:
"5c9151c2413d1cd25c51ffb4ac38948acc1359bf08c6b49f283660e9bcf0f516"
,
"uncleHash"
:
"1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
},
"rlp"
:
"0xf90261f901f9a0e688d736f1307c6f97b6777381b30556137b9d4ca5c43fbd5b30d6b5df315264a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0cb52de543653d86ccd13ba3ddf8b052525b04231c6884a4db3188a184681d878a05c9151c2413d1cd25c51ffb4ac38948acc1359bf08c6b49f283660e9bcf0f516a0e9244cf7503b79c03d3a099e07a80d2dbc77bb0b502d8a89d51ac0d68dd31313b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001832fefd88252088455d9c57180a04296af28ea723598c959f1cabc6f01fa0c75d126cfde89f13ccd9debcf3079c3883213b3fd7789f5d5f862f86080018304cb2f94095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba077c7cd36820c71821c1aed59de46e70e701c4a8dd89c9ba508ab722210f60da8a03f29825d40c7c3f7bff3ca69267e0f3fb74b2d18b8c2c4e3c135b5d3b06e288dc0"
,
"transactions"
:
[
{
"data"
:
"0x"
,
"gasLimit"
:
"0x04cb2f"
,
"gasPrice"
:
"0x01"
,
"nonce"
:
"0x00"
,
"r"
:
"0x77c7cd36820c71821c1aed59de46e70e701c4a8dd89c9ba508ab722210f60da8"
,
"s"
:
"0x3f29825d40c7c3f7bff3ca69267e0f3fb74b2d18b8c2c4e3c135b5d3b06e288d"
,
"to"
:
"095e7baea6a6c7c4c2dfeb977efac326af552d87"
,
"v"
:
"0x1b"
,
"value"
:
"0x0a"
}
],
"uncleHeaders"
:
[
]
},
{
"blockHeader"
:
{
"bloom"
:
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"coinbase"
:
"8888f1f195afa192cfee860698584c030f4c9db1"
,
"difficulty"
:
"0x020040"
,
"extraData"
:
"0x"
,
"gasLimit"
:
"0x2fefd8"
,
"gasUsed"
:
"0x5208"
,
"hash"
:
"04e0807bea4d9766809afba8f4dbf2e5ab4e522aa4570bb915381c6593530e89"
,
"mixHash"
:
"782e9bf4a3427dee8cf2494f966830dd04a217eb5cf8769dba0ed6400212264f"
,
"nonce"
:
"e83b4878a0b9a46f"
,
"number"
:
"0x02"
,
"parentHash"
:
"19c900975f94fd78dc12ad13740200fbe0a2eba43fd070bedc65588b0c95438a"
,
"receiptTrie"
:
"5ea1a8b24652fed0ecab4738edd9211891eb8c4353c345973b78a02cc0f32f6b"
,
"stateRoot"
:
"e7e4760f75476ec7f51869d8bdce5c693058fd5a95c77ea9c0bf7ced1e50d70e"
,
"timestamp"
:
"0x55d9c573"
,
"transactionsTrie"
:
"c673e076264c4669a5c2e479f1757b78e42511efe33b5fd2c0a23b929c7f87f5"
,
"uncleHash"
:
"1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
},
"rlp"
:
"0xf90260f901f9a019c900975f94fd78dc12ad13740200fbe0a2eba43fd070bedc65588b0c95438aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0e7e4760f75476ec7f51869d8bdce5c693058fd5a95c77ea9c0bf7ced1e50d70ea0c673e076264c4669a5c2e479f1757b78e42511efe33b5fd2c0a23b929c7f87f5a05ea1a8b24652fed0ecab4738edd9211891eb8c4353c345973b78a02cc0f32f6bb90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302004002832fefd88252088455d9c57380a0782e9bf4a3427dee8cf2494f966830dd04a217eb5cf8769dba0ed6400212264f88e83b4878a0b9a46ff861f85f01018304cb2f94095e7baea6a6c7c4c2dfeb977efac326af552d870a801ba033c86e64d708c97c6b135cadff79dbf45985aa0b53694789e90d15f756765f239f1d0f8caa2a16405148c9d85581be5814960010f3cba938b5501590cea1f7cfc0"
,
"transactions"
:
[
{
"data"
:
"0x"
,
"gasLimit"
:
"0x04cb2f"
,
"gasPrice"
:
"0x01"
,
"nonce"
:
"0x01"
,
"r"
:
"0x33c86e64d708c97c6b135cadff79dbf45985aa0b53694789e90d15f756765f23"
,
"s"
:
"0x1d0f8caa2a16405148c9d85581be5814960010f3cba938b5501590cea1f7cf"
,
"to"
:
"095e7baea6a6c7c4c2dfeb977efac326af552d87"
,
"v"
:
"0x1b"
,
"value"
:
"0x0a"
}
],
"uncleHeaders"
:
[
]
},
{
"blockHeader"
:
{
"bloom"
:
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"coinbase"
:
"8888f1f195afa192cfee860698584c030f4c9db1"
,
"difficulty"
:
"0x020080"
,
"extraData"
:
"0x"
,
"gasLimit"
:
"0x2fefd8"
,
"gasUsed"
:
"0x5208"
,
"hash"
:
"eed1b4da708283370856fc76352d68f36d9766b7f366da372e2992ced9a1f663"
,
"mixHash"
:
"c250fe02a675a64e068023f48df2662ff2269d970f7689bde287228e200d5401"
,
"nonce"
:
"105781dacf8bcf41"
,
"number"
:
"0x03"
,
"parentHash"
:
"04e0807bea4d9766809afba8f4dbf2e5ab4e522aa4570bb915381c6593530e89"
,
"receiptTrie"
:
"4ede0225773c7a517b91994aca65ade45124e7ef4b8be1e6097c9773a11920af"
,
"stateRoot"
:
"e9940294a09308406a3d2e09203aed11db40259fac0a25e639ad2b30b82d07de"
,
"timestamp"
:
"0x55d9c577"
,
"transactionsTrie"
:
"1722b8a91bfc4f5614ce36ee77c7cce6620ab4af36d3c54baa66d7dbeb7bce1a"
,
"uncleHash"
:
"1e8797b712282d23d059df15e9082411499795fe2644bdfb35f310c10c78169b"
},
"rlp"
:
"0xf90479f901f9a004e0807bea4d9766809afba8f4dbf2e5ab4e522aa4570bb915381c6593530e89a01e8797b712282d23d059df15e9082411499795fe2644bdfb35f310c10c78169b948888f1f195afa192cfee860698584c030f4c9db1a0e9940294a09308406a3d2e09203aed11db40259fac0a25e639ad2b30b82d07dea01722b8a91bfc4f5614ce36ee77c7cce6620ab4af36d3c54baa66d7dbeb7bce1aa04ede0225773c7a517b91994aca65ade45124e7ef4b8be1e6097c9773a11920afb90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302008003832fefd88252088455d9c57780a0c250fe02a675a64e068023f48df2662ff2269d970f7689bde287228e200d540188105781dacf8bcf41f862f86002018304cb2f94095e7baea6a6c7c4c2dfeb977efac326af552d870a801ca015eb1cc916728b9799e55c489857727669afb2986433d5f54cde11faaed9f0eea05d36f6d06c34aae8d0a2a5895c8ba4a17ad46a5fa59f361cb3e7e01a23030e38f90216f90213a019c900975f94fd78dc12ad13740200fbe0a2eba43fd070bedc65588b0c95438aa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d4934794bcde5374fce5edbc8e2a8697c15331677e6ebf0ba0cb52de543653d86ccd13ba3ddf8b052525b04231c6884a4db3188a184681d878a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000002832fefd880a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80a06868c784ca472bb16eb9b23029965a737713003d0da6c006e4923e400cd783fc88d99c24fcd2648302"
,
"transactions"
:
[
{
"data"
:
"0x"
,
"gasLimit"
:
"0x04cb2f"
,
"gasPrice"
:
"0x01"
,
"nonce"
:
"0x02"
,
"r"
:
"0x15eb1cc916728b9799e55c489857727669afb2986433d5f54cde11faaed9f0ee"
,
"s"
:
"0x5d36f6d06c34aae8d0a2a5895c8ba4a17ad46a5fa59f361cb3e7e01a23030e38"
,
"to"
:
"095e7baea6a6c7c4c2dfeb977efac326af552d87"
,
"v"
:
"0x1c"
,
"value"
:
"0x0a"
}
],
"uncleHeaders"
:
[
{
"bloom"
:
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"coinbase"
:
"bcde5374fce5edbc8e2a8697c15331677e6ebf0b"
,
"difficulty"
:
"0x020000"
,
"extraData"
:
"0x"
,
"gasLimit"
:
"0x2fefd8"
,
"gasUsed"
:
"0x00"
,
"hash"
:
"5264110fedc6f468e9b3c1fead10ee4bdd4957bcb6d193503f8ede6a0d478b95"
,
"mixHash"
:
"6868c784ca472bb16eb9b23029965a737713003d0da6c006e4923e400cd783fc"
,
"nonce"
:
"d99c24fcd2648302"
,
"number"
:
"0x02"
,
"parentHash"
:
"19c900975f94fd78dc12ad13740200fbe0a2eba43fd070bedc65588b0c95438a"
,
"receiptTrie"
:
"56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
,
"stateRoot"
:
"cb52de543653d86ccd13ba3ddf8b052525b04231c6884a4db3188a184681d878"
,
"timestamp"
:
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
,
"transactionsTrie"
:
"56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
,
"uncleHash"
:
"1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
}
]
}
],
"genesisBlockHeader"
:
{
"bloom"
:
"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
,
"coinbase"
:
"8888f1f195afa192cfee860698584c030f4c9db1"
,
"difficulty"
:
"0x020000"
,
"extraData"
:
"0x42"
,
"gasLimit"
:
"0x2fefd8"
,
"gasUsed"
:
"0x00"
,
"hash"
:
"e688d736f1307c6f97b6777381b30556137b9d4ca5c43fbd5b30d6b5df315264"
,
"mixHash"
:
"f35b4695bdfef02db19d255636bec7911667c7056df2b2f475053ea78dd1b0ff"
,
"nonce"
:
"5333c47f947590d8"
,
"number"
:
"0x00"
,
"parentHash"
:
"0000000000000000000000000000000000000000000000000000000000000000"
,
"receiptTrie"
:
"56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
,
"stateRoot"
:
"7dba07d6b448a186e9612e5f737d1c909dce473e53199901a302c00646d523c1"
,
"timestamp"
:
"0x54c98c81"
,
"transactionsTrie"
:
"56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
,
"uncleHash"
:
"1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347"
},
"genesisRLP"
:
"0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a07dba07d6b448a186e9612e5f737d1c909dce473e53199901a302c00646d523c1a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000080832fefd8808454c98c8142a0f35b4695bdfef02db19d255636bec7911667c7056df2b2f475053ea78dd1b0ff885333c47f947590d8c0c0"
,
"lastblockhash"
:
"eed1b4da708283370856fc76352d68f36d9766b7f366da372e2992ced9a1f663"
,
"postState"
:
{
"095e7baea6a6c7c4c2dfeb977efac326af552d87"
:
{
"balance"
:
"0x14"
,
"code"
:
"0x"
,
"nonce"
:
"0x00"
,
"storage"
:
{
}
},
"8888f1f195afa192cfee860698584c030f4c9db1"
:
{
"balance"
:
"0x8ac7230489e8a410"
,
"code"
:
"0x"
,
"nonce"
:
"0x00"
,
"storage"
:
{
}
},
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b"
:
{
"balance"
:
"0x09184e71fbdc"
,
"code"
:
"0x"
,
"nonce"
:
"0x02"
,
"storage"
:
{
}
}
},
"pre"
:
{
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b"
:
{
"balance"
:
"0x09184e72a000"
,
"code"
:
"0x"
,
"nonce"
:
"0x00"
,
"storage"
:
{
}
}
}
}
}
\ No newline at end of file
}
tests/util.go
View file @
7324176f
...
...
@@ -135,7 +135,7 @@ type Env struct {
coinbase
common
.
Address
number
*
big
.
Int
time
uint64
time
*
big
.
Int
difficulty
*
big
.
Int
gasLimit
*
big
.
Int
...
...
@@ -165,7 +165,7 @@ func NewEnvFromMap(state *state.StateDB, envValues map[string]string, exeValues
//env.parent = common.Hex2Bytes(envValues["previousHash"])
env
.
coinbase
=
common
.
HexToAddress
(
envValues
[
"currentCoinbase"
])
env
.
number
=
common
.
Big
(
envValues
[
"currentNumber"
])
env
.
time
=
common
.
Big
(
envValues
[
"currentTimestamp"
])
.
Uint64
()
env
.
time
=
common
.
Big
(
envValues
[
"currentTimestamp"
])
env
.
difficulty
=
common
.
Big
(
envValues
[
"currentDifficulty"
])
env
.
gasLimit
=
common
.
Big
(
envValues
[
"currentGasLimit"
])
env
.
Gas
=
new
(
big
.
Int
)
...
...
@@ -178,7 +178,7 @@ func (self *Env) BlockNumber() *big.Int { return self.number }
//func (self *Env) PrevHash() []byte { return self.parent }
func
(
self
*
Env
)
Coinbase
()
common
.
Address
{
return
self
.
coinbase
}
func
(
self
*
Env
)
Time
()
uint64
{
return
self
.
time
}
func
(
self
*
Env
)
Time
()
*
big
.
Int
{
return
self
.
time
}
func
(
self
*
Env
)
Difficulty
()
*
big
.
Int
{
return
self
.
difficulty
}
func
(
self
*
Env
)
State
()
*
state
.
StateDB
{
return
self
.
state
}
func
(
self
*
Env
)
GasLimit
()
*
big
.
Int
{
return
self
.
gasLimit
}
...
...
xeth/types.go
View file @
7324176f
...
...
@@ -19,6 +19,7 @@ package xeth
import
(
"bytes"
"fmt"
"math/big"
"strings"
"github.com/ethereum/go-ethereum/common"
...
...
@@ -76,7 +77,7 @@ type Block struct {
Hash
string
`json:"hash"`
Transactions
*
common
.
List
`json:"transactions"`
Uncles
*
common
.
List
`json:"uncles"`
Time
uint64
`json:"time"`
Time
*
big
.
Int
`json:"time"`
Coinbase
string
`json:"coinbase"`
Name
string
`json:"name"`
GasLimit
string
`json:"gasLimit"`
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment