-
Notifications
You must be signed in to change notification settings - Fork 985
/
testutils.go
70 lines (59 loc) · 2.15 KB
/
testutils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package depositcontract
import (
"crypto/ecdsa"
"fmt"
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
)
var (
amount33Eth = "33000000000000000000"
amount32Eth = "32000000000000000000"
amountLessThan1Eth = "500000000000000000"
)
// TestAccount represents a test account in the simulated backend,
// through which we can perform actions on the eth1.0 chain.
type TestAccount struct {
Addr common.Address
Contract *DepositContract
ContractAddr common.Address
Backend *backends.SimulatedBackend
TxOpts *bind.TransactOpts
}
// Setup creates the simulated backend with the deposit contract deployed
func Setup() (*TestAccount, error) {
genesis := make(core.GenesisAlloc)
privKey, _ := crypto.GenerateKey()
pubKeyECDSA, ok := privKey.Public().(*ecdsa.PublicKey)
if !ok {
return nil, fmt.Errorf("error casting public key to ECDSA")
}
// strip off the 0x and the first 2 characters 04 which is always the EC prefix and is not required.
publicKeyBytes := crypto.FromECDSAPub(pubKeyECDSA)[4:]
var pubKey = make([]byte, 48)
copy(pubKey[:], publicKeyBytes)
addr := crypto.PubkeyToAddress(privKey.PublicKey)
txOpts := bind.NewKeyedTransactor(privKey)
startingBalance, _ := new(big.Int).SetString("100000000000000000000000000000000000000", 10)
genesis[addr] = core.GenesisAccount{Balance: startingBalance}
backend := backends.NewSimulatedBackend(genesis, 210000000000)
contractAddr, _, contract, err := DeployDepositContract(txOpts, backend, addr)
if err != nil {
return nil, err
}
backend.Commit()
return &TestAccount{addr, contract, contractAddr, backend, txOpts}, nil
}
// Amount32Eth returns 32Eth(in wei) in terms of the big.Int type.
func Amount32Eth() *big.Int {
amount, _ := new(big.Int).SetString(amount32Eth, 10)
return amount
}
// LessThan1Eth returns less than 1 Eth(in wei) in terms of the big.Int type.
func LessThan1Eth() *big.Int {
amount, _ := new(big.Int).SetString(amountLessThan1Eth, 10)
return amount
}