mirror of https://github.com/ethereum/go-ethereum
commit
ca73dea3b9
@ -1,63 +0,0 @@ |
||||
// Copyright 2016 The go-ethereum Authors
|
||||
// This file is part of the go-ethereum library.
|
||||
//
|
||||
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
package core |
||||
|
||||
import ( |
||||
"errors" |
||||
"math/big" |
||||
|
||||
"github.com/ethereum/go-ethereum/common" |
||||
"github.com/ethereum/go-ethereum/core/vm" |
||||
"github.com/ethereum/go-ethereum/params" |
||||
) |
||||
|
||||
var ChainConfigNotFoundErr = errors.New("ChainConfig not found") // general config not found error
|
||||
|
||||
// ChainConfig is the core config which determines the blockchain settings.
|
||||
//
|
||||
// ChainConfig is stored in the database on a per block basis. This means
|
||||
// that any network, identified by its genesis block, can have its own
|
||||
// set of configuration options.
|
||||
type ChainConfig struct { |
||||
HomesteadBlock *big.Int `json:"homesteadBlock"` // Homestead switch block (nil = no fork, 0 = already homestead)
|
||||
DAOForkBlock *big.Int `json:"daoForkBlock"` // TheDAO hard-fork switch block (nil = no fork)
|
||||
DAOForkSupport bool `json:"daoForkSupport"` // Whether the nodes supports or opposes the DAO hard-fork
|
||||
|
||||
HomesteadGasRepriceBlock *big.Int `json:"homesteadGasRepriceBlock"` // Homestead gas reprice switch block (nil = no fork)
|
||||
HomesteadGasRepriceHash common.Hash `json:"homesteadGasRepriceHash"` // Homestead gas reprice switch block hash (fast sync aid)
|
||||
|
||||
VmConfig vm.Config `json:"-"` |
||||
} |
||||
|
||||
// IsHomestead returns whether num is either equal to the homestead block or greater.
|
||||
func (c *ChainConfig) IsHomestead(num *big.Int) bool { |
||||
if c.HomesteadBlock == nil || num == nil { |
||||
return false |
||||
} |
||||
return num.Cmp(c.HomesteadBlock) >= 0 |
||||
} |
||||
|
||||
// GasTable returns the gas table corresponding to the current phase (homestead or homestead reprice).
|
||||
//
|
||||
// The returned GasTable's fields shouldn't, under any circumstances, be changed.
|
||||
func (c *ChainConfig) GasTable(num *big.Int) params.GasTable { |
||||
if c.HomesteadGasRepriceBlock == nil || num == nil || num.Cmp(c.HomesteadGasRepriceBlock) < 0 { |
||||
return params.GasTableHomestead |
||||
} |
||||
|
||||
return params.GasTableHomesteadGasRepriceFork |
||||
} |
@ -0,0 +1,340 @@ |
||||
// Copyright 2016 The go-ethereum Authors
|
||||
// This file is part of the go-ethereum library.
|
||||
//
|
||||
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
package types |
||||
|
||||
import ( |
||||
"crypto/ecdsa" |
||||
"errors" |
||||
"fmt" |
||||
"math/big" |
||||
"reflect" |
||||
|
||||
"github.com/ethereum/go-ethereum/common" |
||||
"github.com/ethereum/go-ethereum/crypto" |
||||
"github.com/ethereum/go-ethereum/params" |
||||
) |
||||
|
||||
// sigCache is used to cache the derived sender and contains
|
||||
// the signer used to derive it.
|
||||
type sigCache struct { |
||||
signer Signer |
||||
from common.Address |
||||
} |
||||
|
||||
// MakeSigner returns a Signer based on the given chain config and block number.
|
||||
func MakeSigner(config *params.ChainConfig, blockNumber *big.Int) Signer { |
||||
var signer Signer |
||||
switch { |
||||
case config.IsEIP155(blockNumber): |
||||
signer = NewEIP155Signer(config.ChainId) |
||||
case config.IsHomestead(blockNumber): |
||||
signer = HomesteadSigner{} |
||||
default: |
||||
signer = FrontierSigner{} |
||||
} |
||||
return signer |
||||
} |
||||
|
||||
// SignECDSA signs the transaction using the given signer and private key
|
||||
func SignECDSA(s Signer, tx *Transaction, prv *ecdsa.PrivateKey) (*Transaction, error) { |
||||
h := s.Hash(tx) |
||||
sig, err := crypto.SignEthereum(h[:], prv) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
return s.WithSignature(tx, sig) |
||||
} |
||||
|
||||
// Sender derives the sender from the tx using the signer derivation
|
||||
// functions.
|
||||
|
||||
// Sender returns the address derived from the signature (V, R, S) using secp256k1
|
||||
// elliptic curve and an error if it failed deriving or upon an incorrect
|
||||
// signature.
|
||||
//
|
||||
// Sender may cache the address, allowing it to be used regardless of
|
||||
// signing method. The cache is invalidated if the cached signer does
|
||||
// not match the signer used in the current call.
|
||||
func Sender(signer Signer, tx *Transaction) (common.Address, error) { |
||||
if sc := tx.from.Load(); sc != nil { |
||||
sigCache := sc.(sigCache) |
||||
// If the signer used to derive from in a previous
|
||||
// call is not the same as used current, invalidate
|
||||
// the cache.
|
||||
if reflect.TypeOf(sigCache.signer) == reflect.TypeOf(signer) { |
||||
return sigCache.from, nil |
||||
} |
||||
} |
||||
|
||||
pubkey, err := signer.PublicKey(tx) |
||||
if err != nil { |
||||
return common.Address{}, err |
||||
} |
||||
var addr common.Address |
||||
copy(addr[:], crypto.Keccak256(pubkey[1:])[12:]) |
||||
tx.from.Store(sigCache{signer: signer, from: addr}) |
||||
return addr, nil |
||||
} |
||||
|
||||
// SignatureValues returns the ECDSA signature values contained in the transaction.
|
||||
func SignatureValues(signer Signer, tx *Transaction) (v byte, r *big.Int, s *big.Int) { |
||||
return normaliseV(signer, tx.data.V), new(big.Int).Set(tx.data.R), new(big.Int).Set(tx.data.S) |
||||
} |
||||
|
||||
type Signer interface { |
||||
// Hash returns the rlp encoded hash for signatures
|
||||
Hash(tx *Transaction) common.Hash |
||||
// PubilcKey returns the public key derived from the signature
|
||||
PublicKey(tx *Transaction) ([]byte, error) |
||||
// SignECDSA signs the transaction with the given and returns a copy of the tx
|
||||
SignECDSA(tx *Transaction, prv *ecdsa.PrivateKey) (*Transaction, error) |
||||
// WithSignature returns a copy of the transaction with the given signature
|
||||
WithSignature(tx *Transaction, sig []byte) (*Transaction, error) |
||||
} |
||||
|
||||
// EIP155Transaction implements TransactionInterface using the
|
||||
// EIP155 rules
|
||||
type EIP155Signer struct { |
||||
HomesteadSigner |
||||
|
||||
chainId, chainIdMul *big.Int |
||||
} |
||||
|
||||
func NewEIP155Signer(chainId *big.Int) EIP155Signer { |
||||
return EIP155Signer{ |
||||
chainId: chainId, |
||||
chainIdMul: new(big.Int).Mul(chainId, big.NewInt(2)), |
||||
} |
||||
} |
||||
|
||||
func (s EIP155Signer) SignECDSA(tx *Transaction, prv *ecdsa.PrivateKey) (*Transaction, error) { |
||||
return SignECDSA(s, tx, prv) |
||||
} |
||||
|
||||
func (s EIP155Signer) PublicKey(tx *Transaction) ([]byte, error) { |
||||
// if the transaction is not protected fall back to homestead signer
|
||||
if !tx.Protected() { |
||||
return (HomesteadSigner{}).PublicKey(tx) |
||||
} |
||||
|
||||
V := normaliseV(s, tx.data.V) |
||||
if !crypto.ValidateSignatureValues(V, tx.data.R, tx.data.S, true) { |
||||
return nil, ErrInvalidSig |
||||
} |
||||
|
||||
// encode the signature in uncompressed format
|
||||
R, S := tx.data.R.Bytes(), tx.data.S.Bytes() |
||||
sig := make([]byte, 65) |
||||
copy(sig[32-len(R):32], R) |
||||
copy(sig[64-len(S):64], S) |
||||
sig[64] = V - 27 |
||||
|
||||
// recover the public key from the signature
|
||||
hash := s.Hash(tx) |
||||
pub, err := crypto.Ecrecover(hash[:], sig) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
if len(pub) == 0 || pub[0] != 4 { |
||||
return nil, errors.New("invalid public key") |
||||
} |
||||
return pub, nil |
||||
} |
||||
|
||||
// WithSignature returns a new transaction with the given signature.
|
||||
// This signature needs to be formatted as described in the yellow paper (v+27).
|
||||
func (s EIP155Signer) WithSignature(tx *Transaction, sig []byte) (*Transaction, error) { |
||||
if len(sig) != 65 { |
||||
panic(fmt.Sprintf("wrong size for snature: got %d, want 65", len(sig))) |
||||
} |
||||
|
||||
cpy := &Transaction{data: tx.data} |
||||
cpy.data.R = new(big.Int).SetBytes(sig[:32]) |
||||
cpy.data.S = new(big.Int).SetBytes(sig[32:64]) |
||||
cpy.data.V = new(big.Int).SetBytes([]byte{sig[64]}) |
||||
if s.chainId.BitLen() > 0 { |
||||
cpy.data.V = big.NewInt(int64(sig[64] - 27 + 35)) |
||||
cpy.data.V.Add(cpy.data.V, s.chainIdMul) |
||||
} |
||||
return cpy, nil |
||||
} |
||||
|
||||
// Hash returns the hash to be signed by the sender.
|
||||
// It does not uniquely identify the transaction.
|
||||
func (s EIP155Signer) Hash(tx *Transaction) common.Hash { |
||||
return rlpHash([]interface{}{ |
||||
tx.data.AccountNonce, |
||||
tx.data.Price, |
||||
tx.data.GasLimit, |
||||
tx.data.Recipient, |
||||
tx.data.Amount, |
||||
tx.data.Payload, |
||||
s.chainId, uint(0), uint(0), |
||||
}) |
||||
} |
||||
|
||||
func (s EIP155Signer) SigECDSA(tx *Transaction, prv *ecdsa.PrivateKey) (*Transaction, error) { |
||||
h := s.Hash(tx) |
||||
sig, err := crypto.SignEthereum(h[:], prv) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
return s.WithSignature(tx, sig) |
||||
} |
||||
|
||||
// HomesteadTransaction implements TransactionInterface using the
|
||||
// homestead rules.
|
||||
type HomesteadSigner struct{ FrontierSigner } |
||||
|
||||
// WithSignature returns a new transaction with the given snature.
|
||||
// This snature needs to be formatted as described in the yellow paper (v+27).
|
||||
func (hs HomesteadSigner) WithSignature(tx *Transaction, sig []byte) (*Transaction, error) { |
||||
if len(sig) != 65 { |
||||
panic(fmt.Sprintf("wrong size for snature: got %d, want 65", len(sig))) |
||||
} |
||||
cpy := &Transaction{data: tx.data} |
||||
cpy.data.R = new(big.Int).SetBytes(sig[:32]) |
||||
cpy.data.S = new(big.Int).SetBytes(sig[32:64]) |
||||
cpy.data.V = new(big.Int).SetBytes([]byte{sig[64]}) |
||||
return cpy, nil |
||||
} |
||||
|
||||
func (hs HomesteadSigner) SignECDSA(tx *Transaction, prv *ecdsa.PrivateKey) (*Transaction, error) { |
||||
h := hs.Hash(tx) |
||||
sig, err := crypto.SignEthereum(h[:], prv) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
return hs.WithSignature(tx, sig) |
||||
} |
||||
|
||||
func (hs HomesteadSigner) PublicKey(tx *Transaction) ([]byte, error) { |
||||
if tx.data.V.BitLen() > 8 { |
||||
return nil, ErrInvalidSig |
||||
} |
||||
V := byte(tx.data.V.Uint64()) |
||||
if !crypto.ValidateSignatureValues(V, tx.data.R, tx.data.S, true) { |
||||
return nil, ErrInvalidSig |
||||
} |
||||
// encode the snature in uncompressed format
|
||||
r, s := tx.data.R.Bytes(), tx.data.S.Bytes() |
||||
sig := make([]byte, 65) |
||||
copy(sig[32-len(r):32], r) |
||||
copy(sig[64-len(s):64], s) |
||||
sig[64] = V - 27 |
||||
|
||||
// recover the public key from the snature
|
||||
hash := hs.Hash(tx) |
||||
pub, err := crypto.Ecrecover(hash[:], sig) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
if len(pub) == 0 || pub[0] != 4 { |
||||
return nil, errors.New("invalid public key") |
||||
} |
||||
return pub, nil |
||||
} |
||||
|
||||
type FrontierSigner struct{} |
||||
|
||||
// WithSignature returns a new transaction with the given snature.
|
||||
// This snature needs to be formatted as described in the yellow paper (v+27).
|
||||
func (fs FrontierSigner) WithSignature(tx *Transaction, sig []byte) (*Transaction, error) { |
||||
if len(sig) != 65 { |
||||
panic(fmt.Sprintf("wrong size for snature: got %d, want 65", len(sig))) |
||||
} |
||||
cpy := &Transaction{data: tx.data} |
||||
cpy.data.R = new(big.Int).SetBytes(sig[:32]) |
||||
cpy.data.S = new(big.Int).SetBytes(sig[32:64]) |
||||
cpy.data.V = new(big.Int).SetBytes([]byte{sig[64]}) |
||||
return cpy, nil |
||||
} |
||||
|
||||
func (fs FrontierSigner) SignECDSA(tx *Transaction, prv *ecdsa.PrivateKey) (*Transaction, error) { |
||||
h := fs.Hash(tx) |
||||
sig, err := crypto.SignEthereum(h[:], prv) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
return fs.WithSignature(tx, sig) |
||||
} |
||||
|
||||
// Hash returns the hash to be sned by the sender.
|
||||
// It does not uniquely identify the transaction.
|
||||
func (fs FrontierSigner) Hash(tx *Transaction) common.Hash { |
||||
return rlpHash([]interface{}{ |
||||
tx.data.AccountNonce, |
||||
tx.data.Price, |
||||
tx.data.GasLimit, |
||||
tx.data.Recipient, |
||||
tx.data.Amount, |
||||
tx.data.Payload, |
||||
}) |
||||
} |
||||
|
||||
func (fs FrontierSigner) PublicKey(tx *Transaction) ([]byte, error) { |
||||
if tx.data.V.BitLen() > 8 { |
||||
return nil, ErrInvalidSig |
||||
} |
||||
|
||||
V := byte(tx.data.V.Uint64()) |
||||
if !crypto.ValidateSignatureValues(V, tx.data.R, tx.data.S, false) { |
||||
return nil, ErrInvalidSig |
||||
} |
||||
// encode the snature in uncompressed format
|
||||
r, s := tx.data.R.Bytes(), tx.data.S.Bytes() |
||||
sig := make([]byte, 65) |
||||
copy(sig[32-len(r):32], r) |
||||
copy(sig[64-len(s):64], s) |
||||
sig[64] = V - 27 |
||||
|
||||
// recover the public key from the snature
|
||||
hash := fs.Hash(tx) |
||||
pub, err := crypto.Ecrecover(hash[:], sig) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
if len(pub) == 0 || pub[0] != 4 { |
||||
return nil, errors.New("invalid public key") |
||||
} |
||||
return pub, nil |
||||
} |
||||
|
||||
// normaliseV returns the Ethereum version of the V parameter
|
||||
func normaliseV(s Signer, v *big.Int) byte { |
||||
if s, ok := s.(EIP155Signer); ok { |
||||
stdV := v.BitLen() <= 8 && (v.Uint64() == 27 || v.Uint64() == 28) |
||||
if s.chainId.BitLen() > 0 && !stdV { |
||||
nv := byte((new(big.Int).Sub(v, s.chainIdMul).Uint64()) - 35 + 27) |
||||
return nv |
||||
} |
||||
} |
||||
return byte(v.Uint64()) |
||||
} |
||||
|
||||
// deriveChainId derives the chain id from the given v parameter
|
||||
func deriveChainId(v *big.Int) *big.Int { |
||||
if v.BitLen() <= 64 { |
||||
v := v.Uint64() |
||||
if v == 27 || v == 28 { |
||||
return new(big.Int) |
||||
} |
||||
return new(big.Int).SetUint64((v - 35) / 2) |
||||
} |
||||
v = new(big.Int).Sub(v, big.NewInt(35)) |
||||
return v.Div(v, big.NewInt(2)) |
||||
} |
@ -0,0 +1,116 @@ |
||||
// Copyright 2016 The go-ethereum Authors
|
||||
// This file is part of the go-ethereum library.
|
||||
//
|
||||
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
package types |
||||
|
||||
import ( |
||||
"math/big" |
||||
"testing" |
||||
|
||||
"github.com/ethereum/go-ethereum/common" |
||||
"github.com/ethereum/go-ethereum/crypto" |
||||
"github.com/ethereum/go-ethereum/rlp" |
||||
) |
||||
|
||||
func TestEIP155Signing(t *testing.T) { |
||||
key, _ := crypto.GenerateKey() |
||||
addr := crypto.PubkeyToAddress(key.PublicKey) |
||||
|
||||
signer := NewEIP155Signer(big.NewInt(18)) |
||||
tx, err := NewTransaction(0, addr, new(big.Int), new(big.Int), new(big.Int), nil).SignECDSA(signer, key) |
||||
if err != nil { |
||||
t.Fatal(err) |
||||
} |
||||
|
||||
from, err := Sender(signer, tx) |
||||
if err != nil { |
||||
t.Fatal(err) |
||||
} |
||||
if from != addr { |
||||
t.Errorf("exected from and address to be equal. Got %x want %x", from, addr) |
||||
} |
||||
} |
||||
|
||||
func TestEIP155ChainId(t *testing.T) { |
||||
key, _ := crypto.GenerateKey() |
||||
addr := crypto.PubkeyToAddress(key.PublicKey) |
||||
|
||||
signer := NewEIP155Signer(big.NewInt(18)) |
||||
tx, err := NewTransaction(0, addr, new(big.Int), new(big.Int), new(big.Int), nil).SignECDSA(signer, key) |
||||
if err != nil { |
||||
t.Fatal(err) |
||||
} |
||||
if !tx.Protected() { |
||||
t.Fatal("expected tx to be protected") |
||||
} |
||||
|
||||
if tx.ChainId().Cmp(signer.chainId) != 0 { |
||||
t.Error("expected chainId to be", signer.chainId, "got", tx.ChainId()) |
||||
} |
||||
|
||||
tx = NewTransaction(0, addr, new(big.Int), new(big.Int), new(big.Int), nil) |
||||
tx, err = tx.SignECDSA(HomesteadSigner{}, key) |
||||
if err != nil { |
||||
t.Fatal(err) |
||||
} |
||||
|
||||
if tx.Protected() { |
||||
t.Error("didn't expect tx to be protected") |
||||
} |
||||
|
||||
if tx.ChainId().BitLen() > 0 { |
||||
t.Error("expected chain id to be 0 got", tx.ChainId()) |
||||
} |
||||
} |
||||
|
||||
func TestEIP155SigningVitalik(t *testing.T) { |
||||
// Test vectors come from http://vitalik.ca/files/eip155_testvec.txt
|
||||
for i, test := range []struct { |
||||
txRlp, addr string |
||||
}{ |
||||
{"f864808504a817c800825208943535353535353535353535353535353535353535808025a0044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116da0044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d", "0xf0f6f18bca1b28cd68e4357452947e021241e9ce"}, |
||||
{"f864018504a817c80182a410943535353535353535353535353535353535353535018025a0489efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bcaa0489efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", "0x23ef145a395ea3fa3deb533b8a9e1b4c6c25d112"}, |
||||
{"f864028504a817c80282f618943535353535353535353535353535353535353535088025a02d7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5a02d7c5bef027816a800da1736444fb58a807ef4c9603b7848673f7e3a68eb14a5", "0x2e485e0c23b4c3c542628a5f672eeab0ad4888be"}, |
||||
{"f865038504a817c803830148209435353535353535353535353535353535353535351b8025a02a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4e0a02a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de", "0x82a88539669a3fd524d669e858935de5e5410cf0"}, |
||||
{"f865048504a817c80483019a28943535353535353535353535353535353535353535408025a013600b294191fc92924bb3ce4b969c1e7e2bab8f4c93c3fc6d0a51733df3c063a013600b294191fc92924bb3ce4b969c1e7e2bab8f4c93c3fc6d0a51733df3c060", "0xf9358f2538fd5ccfeb848b64a96b743fcc930554"}, |
||||
{"f865058504a817c8058301ec309435353535353535353535353535353535353535357d8025a04eebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1a04eebf77a833b30520287ddd9478ff51abbdffa30aa90a8d655dba0e8a79ce0c1", "0xa8f7aba377317440bc5b26198a363ad22af1f3a4"}, |
||||
{"f866068504a817c80683023e3894353535353535353535353535353535353535353581d88025a06455bf8ea6e7463a1046a0b52804526e119b4bf5136279614e0b1e8e296a4e2fa06455bf8ea6e7463a1046a0b52804526e119b4bf5136279614e0b1e8e296a4e2d", "0xf1f571dc362a0e5b2696b8e775f8491d3e50de35"}, |
||||
{"f867078504a817c807830290409435353535353535353535353535353535353535358201578025a052f1a9b320cab38e5da8a8f97989383aab0a49165fc91c737310e4f7e9821021a052f1a9b320cab38e5da8a8f97989383aab0a49165fc91c737310e4f7e9821021", "0xd37922162ab7cea97c97a87551ed02c9a38b7332"}, |
||||
{"f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10", "0x9bddad43f934d313c2b79ca28a432dd2b7281029"}, |
||||
{"f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb", "0x3c24d7329e92f84f08556ceb6df1cdb0104ca49f"}, |
||||
} { |
||||
signer := NewEIP155Signer(big.NewInt(1)) |
||||
|
||||
var tx *Transaction |
||||
err := rlp.DecodeBytes(common.Hex2Bytes(test.txRlp), &tx) |
||||
if err != nil { |
||||
t.Errorf("%d: %v", i, err) |
||||
continue |
||||
} |
||||
|
||||
from, err := Sender(signer, tx) |
||||
if err != nil { |
||||
t.Errorf("%d: %v", i, err) |
||||
continue |
||||
} |
||||
|
||||
addr := common.HexToAddress(test.addr) |
||||
if from != addr { |
||||
t.Errorf("%d: expected %x got %x", i, addr, from) |
||||
} |
||||
|
||||
} |
||||
} |
@ -0,0 +1,112 @@ |
||||
// Copyright 2016 The go-ethereum Authors
|
||||
// This file is part of the go-ethereum library.
|
||||
//
|
||||
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
package params |
||||
|
||||
import ( |
||||
"math/big" |
||||
|
||||
"github.com/ethereum/go-ethereum/common" |
||||
) |
||||
|
||||
// ChainConfig is the core config which determines the blockchain settings.
|
||||
//
|
||||
// ChainConfig is stored in the database on a per block basis. This means
|
||||
// that any network, identified by its genesis block, can have its own
|
||||
// set of configuration options.
|
||||
type ChainConfig struct { |
||||
ChainId *big.Int `json:"chainId"` // Chain id identifies the current chain and is used for replay protection
|
||||
|
||||
HomesteadBlock *big.Int `json:"homesteadBlock"` // Homestead switch block (nil = no fork, 0 = already homestead)
|
||||
DAOForkBlock *big.Int `json:"daoForkBlock"` // TheDAO hard-fork switch block (nil = no fork)
|
||||
DAOForkSupport bool `json:"daoForkSupport"` // Whether the nodes supports or opposes the DAO hard-fork
|
||||
|
||||
// EIP150 implements the Gas price changes (https://github.com/ethereum/EIPs/issues/150)
|
||||
EIP150Block *big.Int `json:"eip150Block"` // EIP150 HF block (nil = no fork)
|
||||
EIP150Hash common.Hash `json:"eip150Hash"` // EIP150 HF hash (fast sync aid)
|
||||
|
||||
EIP155Block *big.Int `json:"eip155Block"` // EIP155 HF block
|
||||
EIP158Block *big.Int `json:"eip158Block"` // EIP158 HF block
|
||||
} |
||||
|
||||
var ( |
||||
TestChainConfig = &ChainConfig{big.NewInt(1), new(big.Int), new(big.Int), true, new(big.Int), common.Hash{}, new(big.Int), new(big.Int)} |
||||
TestRules = TestChainConfig.Rules(new(big.Int)) |
||||
) |
||||
|
||||
// IsHomestead returns whether num is either equal to the homestead block or greater.
|
||||
func (c *ChainConfig) IsHomestead(num *big.Int) bool { |
||||
if c.HomesteadBlock == nil || num == nil { |
||||
return false |
||||
} |
||||
return num.Cmp(c.HomesteadBlock) >= 0 |
||||
} |
||||
|
||||
// GasTable returns the gas table corresponding to the current phase (homestead or homestead reprice).
|
||||
//
|
||||
// The returned GasTable's fields shouldn't, under any circumstances, be changed.
|
||||
func (c *ChainConfig) GasTable(num *big.Int) GasTable { |
||||
if num == nil { |
||||
return GasTableHomestead |
||||
} |
||||
|
||||
switch { |
||||
case c.EIP158Block != nil && num.Cmp(c.EIP158Block) >= 0: |
||||
return GasTableEIP158 |
||||
case c.EIP150Block != nil && num.Cmp(c.EIP150Block) >= 0: |
||||
return GasTableHomesteadGasRepriceFork |
||||
default: |
||||
return GasTableHomestead |
||||
} |
||||
} |
||||
|
||||
func (c *ChainConfig) IsEIP150(num *big.Int) bool { |
||||
if c.EIP150Block == nil || num == nil { |
||||
return false |
||||
} |
||||
return num.Cmp(c.EIP150Block) >= 0 |
||||
|
||||
} |
||||
|
||||
func (c *ChainConfig) IsEIP155(num *big.Int) bool { |
||||
if c.EIP155Block == nil || num == nil { |
||||
return false |
||||
} |
||||
return num.Cmp(c.EIP155Block) >= 0 |
||||
|
||||
} |
||||
|
||||
func (c *ChainConfig) IsEIP158(num *big.Int) bool { |
||||
if c.EIP158Block == nil || num == nil { |
||||
return false |
||||
} |
||||
return num.Cmp(c.EIP158Block) >= 0 |
||||
|
||||
} |
||||
|
||||
// Rules wraps ChainConfig and is merely syntatic sugar or can be used for functions
|
||||
// that do not have or require information about the block.
|
||||
//
|
||||
// Rules is a one time interface meaning that it shouldn't be used in between transition
|
||||
// phases.
|
||||
type Rules struct { |
||||
ChainId *big.Int |
||||
IsHomestead, IsEIP150, IsEIP155, IsEIP158 bool |
||||
} |
||||
|
||||
func (c *ChainConfig) Rules(num *big.Int) Rules { |
||||
return Rules{ChainId: new(big.Int).Set(c.ChainId), IsHomestead: c.IsHomestead(num), IsEIP150: c.IsEIP150(num), IsEIP155: c.IsEIP155(num), IsEIP158: c.IsEIP158(num)} |
||||
} |
@ -0,0 +1,4 @@ |
||||
Rules for .json tests execution in this folder: |
||||
|
||||
All blocks starting from #0 are on Homestead+EIP150 rules |
||||
No Dao Transition rules applied |
@ -0,0 +1,644 @@ |
||||
{ |
||||
"GasUsedHigherThanBlockGasLimitButNotWithRefundsSuicideFirst" : { |
||||
"blocks" : [ |
||||
{ |
||||
"blockHeader" : { |
||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", |
||||
"coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", |
||||
"difficulty" : "0x020000", |
||||
"extraData" : "0x", |
||||
"gasLimit" : "0x0573e3", |
||||
"gasUsed" : "0x021efa", |
||||
"hash" : "8086802b019efc2bca969f14c1ced66661ff0250481dcfbaa609c60f0d490c34", |
||||
"mixHash" : "0f3f1d2ad01778b1b2c6c307df2f89dfc670b5efc82c0f8aef87a509e602997b", |
||||
"nonce" : "c29fac11db33446c", |
||||
"number" : "0x01", |
||||
"parentHash" : "6b68d5db45371f617741815045c95862f0fbcb659c1eb25dda1d63b15d7280af", |
||||
"receiptTrie" : "bb6c4ae4ebcbc88ae8357320da84cc4e3cbcd7d8e23324b4a2d9646680e65d44", |
||||
"stateRoot" : "96860dd0661d97a7f0d394ebc3505f9cb804be725da9a2b7800ab3f73c3e17fc", |
||||
"timestamp" : "0x580223b5", |
||||
"transactionsTrie" : "7ae056a6d50cfeb8d04816bc1d1e7751f4e054e04d9fde05f5ca200fa0c85b1a", |
||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" |
||||
}, |
||||
"rlp" : "0xf904a8f901faa06b68d5db45371f617741815045c95862f0fbcb659c1eb25dda1d63b15d7280afa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a096860dd0661d97a7f0d394ebc3505f9cb804be725da9a2b7800ab3f73c3e17fca07ae056a6d50cfeb8d04816bc1d1e7751f4e054e04d9fde05f5ca200fa0c85b1aa0bb6c4ae4ebcbc88ae8357320da84cc4e3cbcd7d8e23324b4a2d9646680e65d44b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008302000001830573e383021efa84580223b580a00f3f1d2ad01778b1b2c6c307df2f89dfc670b5efc82c0f8aef87a509e602997b88c29fac11db33446cf902a7f85f800a82cb2094aaaf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba02609a830fd417f9e998391145c3e00efda383fd5ac9e67154a94c9a58ba57eaea00826134c963655d5f0d3c7b6e66a2978cd4b9e99e555d3d8540e60c0291b35ddf85f010a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca054b220ad38df2c2f927f6db93047e2fd19ed3d4fa3263c64db555529b00caddca0688f6a99a0a02850ebe5015a2bbacd780a236dffc2cf41069c7e9f374e618310f85f020a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba0739f7287fe4c8c4d41a9721f7c7dca156a70e07c3bc58ac8680cc03add73cc5da056909c94e76719d959fa30679f1080431395f4b85f1fc011f2176ad9119f7dccf85f030a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca09a6b71ffd5ca40339dc032244b33b9dcee5c6c2f5a6519ccb695a959dde6a579a03003f276fa97709ae630cc53d301441e4527ab9645da02053676990943c0f73ef85f040a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca08070f1c4c61c8a2b8f6f814e08a0460dec7fd337e5fde990ad157239c92a7b8fa051dc860feae88e8851be7c7d9b3665d4185b6b85510bdb9426eb9806d0e3d5f0f85f050a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca016886934bf97dc78307bc6d4ad150255d15531043ac7e8073c599dc7903dbd4aa0413ba95502d806757c7b273f018904f19d5c0d441e3547002a387f0e55c4f406f85f060a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca08cdece94e5a6f5a3ea7b3962db6e623efc3c17b8668b94975657078b436c19f1a04453797459a63ca64d238328d86756995b688b4239e62c686aeb6a4e8003f0b8c0", |
||||
"transactions" : [ |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xcb20", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x00", |
||||
"r" : "0x2609a830fd417f9e998391145c3e00efda383fd5ac9e67154a94c9a58ba57eae", |
||||
"s" : "0x0826134c963655d5f0d3c7b6e66a2978cd4b9e99e555d3d8540e60c0291b35dd", |
||||
"to" : "aaaf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1b", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x01", |
||||
"r" : "0x54b220ad38df2c2f927f6db93047e2fd19ed3d4fa3263c64db555529b00caddc", |
||||
"s" : "0x688f6a99a0a02850ebe5015a2bbacd780a236dffc2cf41069c7e9f374e618310", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x02", |
||||
"r" : "0x739f7287fe4c8c4d41a9721f7c7dca156a70e07c3bc58ac8680cc03add73cc5d", |
||||
"s" : "0x56909c94e76719d959fa30679f1080431395f4b85f1fc011f2176ad9119f7dcc", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1b", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x03", |
||||
"r" : "0x9a6b71ffd5ca40339dc032244b33b9dcee5c6c2f5a6519ccb695a959dde6a579", |
||||
"s" : "0x3003f276fa97709ae630cc53d301441e4527ab9645da02053676990943c0f73e", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x04", |
||||
"r" : "0x8070f1c4c61c8a2b8f6f814e08a0460dec7fd337e5fde990ad157239c92a7b8f", |
||||
"s" : "0x51dc860feae88e8851be7c7d9b3665d4185b6b85510bdb9426eb9806d0e3d5f0", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x05", |
||||
"r" : "0x16886934bf97dc78307bc6d4ad150255d15531043ac7e8073c599dc7903dbd4a", |
||||
"s" : "0x413ba95502d806757c7b273f018904f19d5c0d441e3547002a387f0e55c4f406", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x06", |
||||
"r" : "0x8cdece94e5a6f5a3ea7b3962db6e623efc3c17b8668b94975657078b436c19f1", |
||||
"s" : "0x4453797459a63ca64d238328d86756995b688b4239e62c686aeb6a4e8003f0b8", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
} |
||||
], |
||||
"uncleHeaders" : [ |
||||
] |
||||
} |
||||
], |
||||
"genesisBlockHeader" : { |
||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", |
||||
"coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", |
||||
"difficulty" : "0x020000", |
||||
"extraData" : "0x42", |
||||
"gasLimit" : "0x057288", |
||||
"gasUsed" : "0x00", |
||||
"hash" : "6b68d5db45371f617741815045c95862f0fbcb659c1eb25dda1d63b15d7280af", |
||||
"mixHash" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"nonce" : "0102030405060708", |
||||
"number" : "0x00", |
||||
"parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", |
||||
"receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"stateRoot" : "af81e09f8c46ca322193edfda764fa7e88e81923f802f1d325ec0b0308ac2cd0", |
||||
"timestamp" : "0x54c98c81", |
||||
"transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" |
||||
}, |
||||
"genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0af81e09f8c46ca322193edfda764fa7e88e81923f802f1d325ec0b0308ac2cd0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008083057288808454c98c8142a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", |
||||
"lastblockhash" : "8086802b019efc2bca969f14c1ced66661ff0250481dcfbaa609c60f0d490c34", |
||||
"postState" : { |
||||
"8888f1f195afa192cfee860698584c030f4c9db1" : { |
||||
"balance" : "0x45639182450935c4", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x4a723dc6b40b8cedf6ae00", |
||||
"code" : "0x", |
||||
"nonce" : "0x07", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"bbbf5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x3c", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
} |
||||
}, |
||||
"pre" : { |
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x4a723dc6b40b8a9a000000", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"aaaf5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x02540be400", |
||||
"code" : "0x73a94f5374fce5edbc8e2a8697c15331677e6ebf0bff", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"GasUsedHigherThanBlockGasLimitButNotWithRefundsSuicideFirst2" : { |
||||
"blocks" : [ |
||||
{ |
||||
"blockHeader" : { |
||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", |
||||
"coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", |
||||
"difficulty" : "0x020000", |
||||
"extraData" : "0x", |
||||
"gasLimit" : "0x023ec6", |
||||
"gasUsed" : "0x01f018", |
||||
"hash" : "7f7b5aa2c8b0c530c860c294e1c68ce1da99e19f8adc9db3a39650d12e820cc2", |
||||
"mixHash" : "067968b01dfe7bd172a87f8380db26a013f8bc37147a406ba2ec67d2400a1265", |
||||
"nonce" : "c196d1163d69e2bb", |
||||
"number" : "0x01", |
||||
"parentHash" : "ce1f26f798dd03c8782d63b3e42e79a64eaea5694ea686ac5d7ce3df5171d1ae", |
||||
"receiptTrie" : "516f24d9989eb3dec28434a8f1667a42342f98adb2524b980b9f116f9e93e487", |
||||
"stateRoot" : "d6c172507a4e3d5977e652d294075e0d35469808ded3843d62daa63f28281236", |
||||
"timestamp" : "0x580223b8", |
||||
"transactionsTrie" : "50f0f01320e78f4ea013368304ca412fd36cb758cd051a717378cc8dd18b871b", |
||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" |
||||
}, |
||||
"rlp" : "0xf90447f901faa0ce1f26f798dd03c8782d63b3e42e79a64eaea5694ea686ac5d7ce3df5171d1aea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0d6c172507a4e3d5977e652d294075e0d35469808ded3843d62daa63f28281236a050f0f01320e78f4ea013368304ca412fd36cb758cd051a717378cc8dd18b871ba0516f24d9989eb3dec28434a8f1667a42342f98adb2524b980b9f116f9e93e487b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000183023ec68301f01884580223b880a0067968b01dfe7bd172a87f8380db26a013f8bc37147a406ba2ec67d2400a126588c196d1163d69e2bbf90246f85f800a8255f094aaaf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca0575da4e21b66fa764be5f74da9389e67693d066fb0d1312e19e17e501da00ecda06baf5a5327595f6619dfc2fcb3f2e6fb410b5810af3cb52d0e7508038e91a188f85f010a82520894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba04fa966bf34b93abc1bcd665554b7f316b50f928477b50be0f3285ead29d18c5ba017bba0eeec1625ab433746955e125d46d80b7fdc97386c51266f842d8e02192ef85f020a82520894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca004377418ae981cc32b1312b4a427a1d69a821b28db8584f5f2bd8c6d42458adaa053a1dba1af177fac92f3b6af0a9fa46a22adf56e686c93794b6a012bf254abf5f85f030a82520894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca04fe13febd28a05f4fcb2f451d7ddc2dda56486d9f8c79a62b0ba4da775122615a0651b2382dd402df9ebc27f8cb4b2e0f3cea68dda2dca0ee9603608f0b6f51668f85f040a82520894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba078e6a0ba086a08f8450e208a399bb2f2d2a0d984acd2517c7c7df66ccfab567da013254002cd45a97fac049ae00afbc43ed0d9961d0c56a3b2382c80ce41c198ddf85f050a82520894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba0a7174d8f43ea71c8e3ca9477691add8d80ac8e0ed89d8d8b572041eef81f4a54a0534ea2e28ec4da3b5b944b18c51ec84a5cf35f5b3343c5fb86521fd2d388f506c0", |
||||
"transactions" : [ |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0x55f0", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x00", |
||||
"r" : "0x575da4e21b66fa764be5f74da9389e67693d066fb0d1312e19e17e501da00ecd", |
||||
"s" : "0x6baf5a5327595f6619dfc2fcb3f2e6fb410b5810af3cb52d0e7508038e91a188", |
||||
"to" : "aaaf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0x5208", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x01", |
||||
"r" : "0x4fa966bf34b93abc1bcd665554b7f316b50f928477b50be0f3285ead29d18c5b", |
||||
"s" : "0x17bba0eeec1625ab433746955e125d46d80b7fdc97386c51266f842d8e02192e", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1b", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0x5208", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x02", |
||||
"r" : "0x04377418ae981cc32b1312b4a427a1d69a821b28db8584f5f2bd8c6d42458ada", |
||||
"s" : "0x53a1dba1af177fac92f3b6af0a9fa46a22adf56e686c93794b6a012bf254abf5", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0x5208", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x03", |
||||
"r" : "0x4fe13febd28a05f4fcb2f451d7ddc2dda56486d9f8c79a62b0ba4da775122615", |
||||
"s" : "0x651b2382dd402df9ebc27f8cb4b2e0f3cea68dda2dca0ee9603608f0b6f51668", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0x5208", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x04", |
||||
"r" : "0x78e6a0ba086a08f8450e208a399bb2f2d2a0d984acd2517c7c7df66ccfab567d", |
||||
"s" : "0x13254002cd45a97fac049ae00afbc43ed0d9961d0c56a3b2382c80ce41c198dd", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1b", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0x5208", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x05", |
||||
"r" : "0xa7174d8f43ea71c8e3ca9477691add8d80ac8e0ed89d8d8b572041eef81f4a54", |
||||
"s" : "0x534ea2e28ec4da3b5b944b18c51ec84a5cf35f5b3343c5fb86521fd2d388f506", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1b", |
||||
"value" : "0x0a" |
||||
} |
||||
], |
||||
"uncleHeaders" : [ |
||||
] |
||||
} |
||||
], |
||||
"genesisBlockHeader" : { |
||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", |
||||
"coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", |
||||
"difficulty" : "0x020000", |
||||
"extraData" : "0x42", |
||||
"gasLimit" : "0x023e38", |
||||
"gasUsed" : "0x00", |
||||
"hash" : "ce1f26f798dd03c8782d63b3e42e79a64eaea5694ea686ac5d7ce3df5171d1ae", |
||||
"mixHash" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"nonce" : "0102030405060708", |
||||
"number" : "0x00", |
||||
"parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", |
||||
"receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"stateRoot" : "af81e09f8c46ca322193edfda764fa7e88e81923f802f1d325ec0b0308ac2cd0", |
||||
"timestamp" : "0x54c98c81", |
||||
"transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" |
||||
}, |
||||
"genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0af81e09f8c46ca322193edfda764fa7e88e81923f802f1d325ec0b0308ac2cd0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008083023e38808454c98c8142a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", |
||||
"lastblockhash" : "7f7b5aa2c8b0c530c860c294e1c68ce1da99e19f8adc9db3a39650d12e820cc2", |
||||
"postState" : { |
||||
"8888f1f195afa192cfee860698584c030f4c9db1" : { |
||||
"balance" : "0x45639182450760f0", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x4a723dc6b40b8a99ec9ede", |
||||
"code" : "0x", |
||||
"nonce" : "0x06", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"aaaf5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x02540be400", |
||||
"code" : "0x73a94f5374fce5edbc8e2a8697c15331677e6ebf0bff", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"bbbf5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x32", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
} |
||||
}, |
||||
"pre" : { |
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x4a723dc6b40b8a9a000000", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"aaaf5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x02540be400", |
||||
"code" : "0x73a94f5374fce5edbc8e2a8697c15331677e6ebf0bff", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"GasUsedHigherThanBlockGasLimitButNotWithRefundsSuicideLast" : { |
||||
"blocks" : [ |
||||
{ |
||||
"blockHeader" : { |
||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", |
||||
"coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", |
||||
"difficulty" : "0x020000", |
||||
"extraData" : "0x", |
||||
"gasLimit" : "0x057224", |
||||
"gasUsed" : "0x021efa", |
||||
"hash" : "2eb60f05a7c1de9324272c530a036f9d7d4961bd0624a4305332688ee4f3a1ad", |
||||
"mixHash" : "46f46431ee1ccce22ed8a9ba68a376b13fdf11049fde4b0673ff9b7cb69a2113", |
||||
"nonce" : "7174ad3c7b1386db", |
||||
"number" : "0x01", |
||||
"parentHash" : "6b68d5db45371f617741815045c95862f0fbcb659c1eb25dda1d63b15d7280af", |
||||
"receiptTrie" : "2244456c1f7bdf7204250dfa2a2a1474014a9f50477ae0106dcf2dda6227a0f1", |
||||
"stateRoot" : "96860dd0661d97a7f0d394ebc3505f9cb804be725da9a2b7800ab3f73c3e17fc", |
||||
"timestamp" : "0x580223ba", |
||||
"transactionsTrie" : "f326b89e33ec4068bb300de24bb45f2a81e59333badd5b858e60e7239e984a00", |
||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" |
||||
}, |
||||
"rlp" : "0xf904a8f901faa06b68d5db45371f617741815045c95862f0fbcb659c1eb25dda1d63b15d7280afa01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a096860dd0661d97a7f0d394ebc3505f9cb804be725da9a2b7800ab3f73c3e17fca0f326b89e33ec4068bb300de24bb45f2a81e59333badd5b858e60e7239e984a00a02244456c1f7bdf7204250dfa2a2a1474014a9f50477ae0106dcf2dda6227a0f1b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018305722483021efa84580223ba80a046f46431ee1ccce22ed8a9ba68a376b13fdf11049fde4b0673ff9b7cb69a2113887174ad3c7b1386dbf902a7f85f800a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca0d5f556ab52e7baa68c0312f2482ec84288d55fec2e3feb617e11859269aea1f7a0546a329bf1ab773dcec4861c7341bcd8de5a0f3c75c37230a101cd0c8f763155f85f010a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca054b220ad38df2c2f927f6db93047e2fd19ed3d4fa3263c64db555529b00caddca0688f6a99a0a02850ebe5015a2bbacd780a236dffc2cf41069c7e9f374e618310f85f020a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba0739f7287fe4c8c4d41a9721f7c7dca156a70e07c3bc58ac8680cc03add73cc5da056909c94e76719d959fa30679f1080431395f4b85f1fc011f2176ad9119f7dccf85f030a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca09a6b71ffd5ca40339dc032244b33b9dcee5c6c2f5a6519ccb695a959dde6a579a03003f276fa97709ae630cc53d301441e4527ab9645da02053676990943c0f73ef85f040a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca08070f1c4c61c8a2b8f6f814e08a0460dec7fd337e5fde990ad157239c92a7b8fa051dc860feae88e8851be7c7d9b3665d4185b6b85510bdb9426eb9806d0e3d5f0f85f050a82c73894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca016886934bf97dc78307bc6d4ad150255d15531043ac7e8073c599dc7903dbd4aa0413ba95502d806757c7b273f018904f19d5c0d441e3547002a387f0e55c4f406f85f060a82cb2094aaaf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba0fac540b907e8ad85e503830b3ebdd35336fc535102bde0790987cd0ee253d876a0668bc7331874caefbb7d457161632482293e7df4c90c84a254850cabc13a83eac0", |
||||
"transactions" : [ |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x00", |
||||
"r" : "0xd5f556ab52e7baa68c0312f2482ec84288d55fec2e3feb617e11859269aea1f7", |
||||
"s" : "0x546a329bf1ab773dcec4861c7341bcd8de5a0f3c75c37230a101cd0c8f763155", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x01", |
||||
"r" : "0x54b220ad38df2c2f927f6db93047e2fd19ed3d4fa3263c64db555529b00caddc", |
||||
"s" : "0x688f6a99a0a02850ebe5015a2bbacd780a236dffc2cf41069c7e9f374e618310", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x02", |
||||
"r" : "0x739f7287fe4c8c4d41a9721f7c7dca156a70e07c3bc58ac8680cc03add73cc5d", |
||||
"s" : "0x56909c94e76719d959fa30679f1080431395f4b85f1fc011f2176ad9119f7dcc", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1b", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x03", |
||||
"r" : "0x9a6b71ffd5ca40339dc032244b33b9dcee5c6c2f5a6519ccb695a959dde6a579", |
||||
"s" : "0x3003f276fa97709ae630cc53d301441e4527ab9645da02053676990943c0f73e", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x04", |
||||
"r" : "0x8070f1c4c61c8a2b8f6f814e08a0460dec7fd337e5fde990ad157239c92a7b8f", |
||||
"s" : "0x51dc860feae88e8851be7c7d9b3665d4185b6b85510bdb9426eb9806d0e3d5f0", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xc738", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x05", |
||||
"r" : "0x16886934bf97dc78307bc6d4ad150255d15531043ac7e8073c599dc7903dbd4a", |
||||
"s" : "0x413ba95502d806757c7b273f018904f19d5c0d441e3547002a387f0e55c4f406", |
||||
"to" : "bbbf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1c", |
||||
"value" : "0x0a" |
||||
}, |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0xcb20", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x06", |
||||
"r" : "0xfac540b907e8ad85e503830b3ebdd35336fc535102bde0790987cd0ee253d876", |
||||
"s" : "0x668bc7331874caefbb7d457161632482293e7df4c90c84a254850cabc13a83ea", |
||||
"to" : "aaaf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1b", |
||||
"value" : "0x0a" |
||||
} |
||||
], |
||||
"uncleHeaders" : [ |
||||
] |
||||
} |
||||
], |
||||
"genesisBlockHeader" : { |
||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", |
||||
"coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", |
||||
"difficulty" : "0x020000", |
||||
"extraData" : "0x42", |
||||
"gasLimit" : "0x057288", |
||||
"gasUsed" : "0x00", |
||||
"hash" : "6b68d5db45371f617741815045c95862f0fbcb659c1eb25dda1d63b15d7280af", |
||||
"mixHash" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"nonce" : "0102030405060708", |
||||
"number" : "0x00", |
||||
"parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", |
||||
"receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"stateRoot" : "af81e09f8c46ca322193edfda764fa7e88e81923f802f1d325ec0b0308ac2cd0", |
||||
"timestamp" : "0x54c98c81", |
||||
"transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" |
||||
}, |
||||
"genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0af81e09f8c46ca322193edfda764fa7e88e81923f802f1d325ec0b0308ac2cd0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008083057288808454c98c8142a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", |
||||
"lastblockhash" : "2eb60f05a7c1de9324272c530a036f9d7d4961bd0624a4305332688ee4f3a1ad", |
||||
"postState" : { |
||||
"8888f1f195afa192cfee860698584c030f4c9db1" : { |
||||
"balance" : "0x45639182450935c4", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x4a723dc6b40b8cedf6ae00", |
||||
"code" : "0x", |
||||
"nonce" : "0x07", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"bbbf5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x3c", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
} |
||||
}, |
||||
"pre" : { |
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x4a723dc6b40b8a9a000000", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"aaaf5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x02540be400", |
||||
"code" : "0x73a94f5374fce5edbc8e2a8697c15331677e6ebf0bff", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"GasUsedHigherThanBlockGasLimitButNotWithRefundsSuicideLast2" : { |
||||
"blocks" : [ |
||||
{ |
||||
"rlp" : "0xf904a8f901faa0ce1f26f798dd03c8782d63b3e42e79a64eaea5694ea686ac5d7ce3df5171d1aea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0a053f912b64765458bba76c0978a8e5ecd90417d527ea20f55689108400763c8a039b55901ee38a65fa27c7d60137fd431afcf6a7615746ae9501e7cf0ca68bd11a071ba8e7c3c6ee55bfb14c3119ca5b4ceb032cfad51952e3a116a449240b38aa4b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200000183023dd48302422084580223bb80a04b470f8cc54688c5989133701126272e6c272a4a7853a5d05b27adc94460f50b88830f7ed5cbc7d1f9f902a7f85f800a82520894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba01117bd549fe17f8383012bf168dabd9e70851fdf2f332e5bfea89318dddd6c77a001364d3a0e23f462052127c53a5473c428e2211806c927601562f840eb6b899cf85f010a82520894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba04fa966bf34b93abc1bcd665554b7f316b50f928477b50be0f3285ead29d18c5ba017bba0eeec1625ab433746955e125d46d80b7fdc97386c51266f842d8e02192ef85f020a82520894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca004377418ae981cc32b1312b4a427a1d69a821b28db8584f5f2bd8c6d42458adaa053a1dba1af177fac92f3b6af0a9fa46a22adf56e686c93794b6a012bf254abf5f85f030a82520894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca04fe13febd28a05f4fcb2f451d7ddc2dda56486d9f8c79a62b0ba4da775122615a0651b2382dd402df9ebc27f8cb4b2e0f3cea68dda2dca0ee9603608f0b6f51668f85f040a82520894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba078e6a0ba086a08f8450e208a399bb2f2d2a0d984acd2517c7c7df66ccfab567da013254002cd45a97fac049ae00afbc43ed0d9961d0c56a3b2382c80ce41c198ddf85f050a82520894bbbf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba0a7174d8f43ea71c8e3ca9477691add8d80ac8e0ed89d8d8b572041eef81f4a54a0534ea2e28ec4da3b5b944b18c51ec84a5cf35f5b3343c5fb86521fd2d388f506f85f060a8255f094aaaf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ca0c40c1300a7cc64b842c9421a6c6e985b5531020d1a26c82f9c6a5200154e91dfa052c28fc6dc0dad9ea23fcce6510a9dc23b9903b1b19a126ac25f77a195b50f83c0" |
||||
} |
||||
], |
||||
"genesisBlockHeader" : { |
||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", |
||||
"coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", |
||||
"difficulty" : "0x020000", |
||||
"extraData" : "0x42", |
||||
"gasLimit" : "0x023e38", |
||||
"gasUsed" : "0x00", |
||||
"hash" : "ce1f26f798dd03c8782d63b3e42e79a64eaea5694ea686ac5d7ce3df5171d1ae", |
||||
"mixHash" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"nonce" : "0102030405060708", |
||||
"number" : "0x00", |
||||
"parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", |
||||
"receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"stateRoot" : "af81e09f8c46ca322193edfda764fa7e88e81923f802f1d325ec0b0308ac2cd0", |
||||
"timestamp" : "0x54c98c81", |
||||
"transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" |
||||
}, |
||||
"genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0af81e09f8c46ca322193edfda764fa7e88e81923f802f1d325ec0b0308ac2cd0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000830200008083023e38808454c98c8142a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", |
||||
"lastblockhash" : "ce1f26f798dd03c8782d63b3e42e79a64eaea5694ea686ac5d7ce3df5171d1ae", |
||||
"postState" : { |
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x4a723dc6b40b8a9a000000", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"aaaf5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x02540be400", |
||||
"code" : "0x73a94f5374fce5edbc8e2a8697c15331677e6ebf0bff", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
} |
||||
}, |
||||
"pre" : { |
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x4a723dc6b40b8a9a000000", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"aaaf5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x02540be400", |
||||
"code" : "0x73a94f5374fce5edbc8e2a8697c15331677e6ebf0bff", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
} |
||||
} |
||||
}, |
||||
"SuicideTransaction" : { |
||||
"blocks" : [ |
||||
{ |
||||
"blockHeader" : { |
||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", |
||||
"coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", |
||||
"difficulty" : "0x020000", |
||||
"extraData" : "0x", |
||||
"gasLimit" : "0x01e8c1", |
||||
"gasUsed" : "0x32ca", |
||||
"hash" : "a3eba1779c002a8e02f41bab6dea595cbad0e44d5c3fbbdd0ad908190c34c63d", |
||||
"mixHash" : "e13d00455c6d34792fcd2f2036744f822e2f269e8bc6f5a7389307812db0711d", |
||||
"nonce" : "97bf5b2844593304", |
||||
"number" : "0x01", |
||||
"parentHash" : "926fddd6a0f69ff8c29833222a7150b9d50f759bda6d50e4c9ea3af6c4ba921d", |
||||
"receiptTrie" : "10910901e8fd125dffe40187af7dae0d71bbf63f0fed0bb84bedc624586060f7", |
||||
"stateRoot" : "483344fadf21e2fc01ab19a4041532edc23747d017bb386edcc0859ba225fe0d", |
||||
"timestamp" : "0x580223bd", |
||||
"transactionsTrie" : "f0162cdb94cda8b79bf634c6093931008a12d1e4922821a992e34511b83ed0d5", |
||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" |
||||
}, |
||||
"rlp" : "0xf90261f901f9a0926fddd6a0f69ff8c29833222a7150b9d50f759bda6d50e4c9ea3af6c4ba921da01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0483344fadf21e2fc01ab19a4041532edc23747d017bb386edcc0859ba225fe0da0f0162cdb94cda8b79bf634c6093931008a12d1e4922821a992e34511b83ed0d5a010910901e8fd125dffe40187af7dae0d71bbf63f0fed0bb84bedc624586060f7b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000018301e8c18232ca84580223bd80a0e13d00455c6d34792fcd2f2036744f822e2f269e8bc6f5a7389307812db0711d8897bf5b2844593304f862f860800a830186a094aaaf5374fce5edbc8e2a8697c15331677e6ebf0b0a801ba0444ed2cb67c1cce2c37add4bef48d3dda9ef05e28eaf023006036a4c5f7c96b0a00c56b07bfc50471d458e67923c91108b90cb7bba23f4d373f0a75632a413bd84c0", |
||||
"transactions" : [ |
||||
{ |
||||
"data" : "0x", |
||||
"gasLimit" : "0x0186a0", |
||||
"gasPrice" : "0x0a", |
||||
"nonce" : "0x00", |
||||
"r" : "0x444ed2cb67c1cce2c37add4bef48d3dda9ef05e28eaf023006036a4c5f7c96b0", |
||||
"s" : "0x0c56b07bfc50471d458e67923c91108b90cb7bba23f4d373f0a75632a413bd84", |
||||
"to" : "aaaf5374fce5edbc8e2a8697c15331677e6ebf0b", |
||||
"v" : "0x1b", |
||||
"value" : "0x0a" |
||||
} |
||||
], |
||||
"uncleHeaders" : [ |
||||
] |
||||
} |
||||
], |
||||
"genesisBlockHeader" : { |
||||
"bloom" : "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", |
||||
"coinbase" : "8888f1f195afa192cfee860698584c030f4c9db1", |
||||
"difficulty" : "0x020000", |
||||
"extraData" : "0x42", |
||||
"gasLimit" : "0x01e848", |
||||
"gasUsed" : "0x00", |
||||
"hash" : "926fddd6a0f69ff8c29833222a7150b9d50f759bda6d50e4c9ea3af6c4ba921d", |
||||
"mixHash" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"nonce" : "0102030405060708", |
||||
"number" : "0x00", |
||||
"parentHash" : "0000000000000000000000000000000000000000000000000000000000000000", |
||||
"receiptTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"stateRoot" : "af81e09f8c46ca322193edfda764fa7e88e81923f802f1d325ec0b0308ac2cd0", |
||||
"timestamp" : "0x54c98c81", |
||||
"transactionsTrie" : "56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", |
||||
"uncleHash" : "1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347" |
||||
}, |
||||
"genesisRLP" : "0xf901fcf901f7a00000000000000000000000000000000000000000000000000000000000000000a01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0af81e09f8c46ca322193edfda764fa7e88e81923f802f1d325ec0b0308ac2cd0a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083020000808301e848808454c98c8142a056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421880102030405060708c0c0", |
||||
"lastblockhash" : "a3eba1779c002a8e02f41bab6dea595cbad0e44d5c3fbbdd0ad908190c34c63d", |
||||
"postState" : { |
||||
"8888f1f195afa192cfee860698584c030f4c9db1" : { |
||||
"balance" : "0x4563918244f5fbe4", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x4a723dc6b40b8cee09e81c", |
||||
"code" : "0x", |
||||
"nonce" : "0x01", |
||||
"storage" : { |
||||
} |
||||
} |
||||
}, |
||||
"pre" : { |
||||
"a94f5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x4a723dc6b40b8a9a000000", |
||||
"code" : "0x", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
}, |
||||
"aaaf5374fce5edbc8e2a8697c15331677e6ebf0b" : { |
||||
"balance" : "0x02540be400", |
||||
"code" : "0x73a94f5374fce5edbc8e2a8697c15331677e6ebf0bff", |
||||
"nonce" : "0x00", |
||||
"storage" : { |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue