forked from cerc-io/plugeth
Add loading of block test privkey if present
This commit is contained in:
parent
2a61611c4f
commit
34c94d5fcd
@ -104,7 +104,7 @@ func runOneBlockTest(ctx *cli.Context, test *tests.BlockTest) (*eth.Ethereum, er
|
|||||||
ethereum.ResetWithGenesisBlock(test.Genesis)
|
ethereum.ResetWithGenesisBlock(test.Genesis)
|
||||||
|
|
||||||
// import pre accounts
|
// import pre accounts
|
||||||
statedb, err := test.InsertPreState(ethereum.StateDb())
|
statedb, err := test.InsertPreState(ethereum)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ethereum, fmt.Errorf("InsertPreState: %v", err)
|
return ethereum, fmt.Errorf("InsertPreState: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -179,6 +179,19 @@ func Decrypt(prv *ecdsa.PrivateKey, ct []byte) ([]byte, error) {
|
|||||||
return key.Decrypt(rand.Reader, ct, nil, nil)
|
return key.Decrypt(rand.Reader, ct, nil, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Used only by block tests.
|
||||||
|
func ImportBlockTestKey(privKeyBytes []byte) error {
|
||||||
|
ks := NewKeyStorePassphrase(common.DefaultDataDir() + "/keys")
|
||||||
|
ecKey := ToECDSA(privKeyBytes)
|
||||||
|
key := &Key{
|
||||||
|
Id: uuid.NewRandom(),
|
||||||
|
Address: PubkeyToAddress(ecKey.PublicKey),
|
||||||
|
PrivateKey: ecKey,
|
||||||
|
}
|
||||||
|
err := ks.StoreKey(key, "")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// creates a Key and stores that in the given KeyStore by decrypting a presale key JSON
|
// creates a Key and stores that in the given KeyStore by decrypting a presale key JSON
|
||||||
func ImportPreSaleKey(keyStore KeyStore2, keyJSON []byte, password string) (*Key, error) {
|
func ImportPreSaleKey(keyStore KeyStore2, keyJSON []byte, password string) (*Key, error) {
|
||||||
key, err := decryptPreSaleKey(keyJSON, password)
|
key, err := decryptPreSaleKey(keyJSON, password)
|
||||||
|
@ -87,7 +87,7 @@ func runBlockTest(name string, test *BlockTest, t *testing.T) {
|
|||||||
ethereum.ResetWithGenesisBlock(test.Genesis)
|
ethereum.ResetWithGenesisBlock(test.Genesis)
|
||||||
|
|
||||||
// import pre accounts
|
// import pre accounts
|
||||||
statedb, err := test.InsertPreState(ethereum.StateDb())
|
statedb, err := test.InsertPreState(ethereum)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("InsertPreState: %v", err)
|
t.Fatalf("InsertPreState: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -10,11 +10,14 @@ import (
|
|||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/core"
|
"github.com/ethereum/go-ethereum/core"
|
||||||
"github.com/ethereum/go-ethereum/core/state"
|
"github.com/ethereum/go-ethereum/core/state"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
|
"github.com/ethereum/go-ethereum/crypto"
|
||||||
|
"github.com/ethereum/go-ethereum/eth"
|
||||||
"github.com/ethereum/go-ethereum/rlp"
|
"github.com/ethereum/go-ethereum/rlp"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -45,6 +48,7 @@ type btAccount struct {
|
|||||||
Code string
|
Code string
|
||||||
Nonce string
|
Nonce string
|
||||||
Storage map[string]string
|
Storage map[string]string
|
||||||
|
PrivateKey string
|
||||||
}
|
}
|
||||||
|
|
||||||
type btHeader struct {
|
type btHeader struct {
|
||||||
@ -97,15 +101,24 @@ func LoadBlockTests(file string) (map[string]*BlockTest, error) {
|
|||||||
|
|
||||||
// InsertPreState populates the given database with the genesis
|
// InsertPreState populates the given database with the genesis
|
||||||
// accounts defined by the test.
|
// accounts defined by the test.
|
||||||
func (t *BlockTest) InsertPreState(db common.Database) (*state.StateDB, error) {
|
func (t *BlockTest) InsertPreState(ethereum *eth.Ethereum) (*state.StateDB, error) {
|
||||||
|
db := ethereum.StateDb()
|
||||||
statedb := state.New(common.Hash{}, db)
|
statedb := state.New(common.Hash{}, db)
|
||||||
for addrString, acct := range t.preAccounts {
|
for addrString, acct := range t.preAccounts {
|
||||||
// XXX: is is worth it checking for errors here?
|
addr, _ := hex.DecodeString(addrString)
|
||||||
//addr, _ := hex.DecodeString(addrString)
|
|
||||||
code, _ := hex.DecodeString(strings.TrimPrefix(acct.Code, "0x"))
|
code, _ := hex.DecodeString(strings.TrimPrefix(acct.Code, "0x"))
|
||||||
balance, _ := new(big.Int).SetString(acct.Balance, 0)
|
balance, _ := new(big.Int).SetString(acct.Balance, 0)
|
||||||
nonce, _ := strconv.ParseUint(acct.Nonce, 16, 64)
|
nonce, _ := strconv.ParseUint(acct.Nonce, 16, 64)
|
||||||
|
|
||||||
|
if acct.PrivateKey != "" {
|
||||||
|
privkey, err := hex.DecodeString(strings.TrimPrefix(acct.PrivateKey, "0x"))
|
||||||
|
err = crypto.ImportBlockTestKey(privkey)
|
||||||
|
err = ethereum.AccountManager().TimedUnlock(addr, "", 999999*time.Second)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
obj := statedb.CreateAccount(common.HexToAddress(addrString))
|
obj := statedb.CreateAccount(common.HexToAddress(addrString))
|
||||||
obj.SetCode(code)
|
obj.SetCode(code)
|
||||||
obj.SetBalance(balance)
|
obj.SetBalance(balance)
|
||||||
|
Loading…
Reference in New Issue
Block a user