hermez-node/eth/main_test.go
eth/main_test.goRaw
1package eth
2
3import (
4 "fmt"
5 "io/ioutil"
6 "log"
7 "math/big"
8 "os"
9 "strconv"
10 "testing"
11
12 "github.com/ethereum/go-ethereum/accounts"
13 "github.com/ethereum/go-ethereum/accounts/keystore"
14 ethCommon "github.com/ethereum/go-ethereum/common"
15 "github.com/ethereum/go-ethereum/ethclient"
16 "github.com/joho/godotenv"
17 hdwallet "github.com/miguelmota/go-ethereum-hdwallet"
18)
19
20var errEnvVar = fmt.Errorf("Some environment variable is missing")
21
22var (
23 ethClientDialURL = "http://localhost:8545"
24 password = "pass"
25 deadline, _ = new(big.Int).SetString("ffffffffffffffffffffffffffffffff", 16)
26 mnemonic = "explain tackle mirror kit van hammer degree position ginger unfair soup bonus"
27)
28
29func genAcc(w *hdwallet.Wallet, ks *keystore.KeyStore, i int) (*accounts.Account, ethCommon.Address) {
30 path := hdwallet.MustParseDerivationPath(fmt.Sprintf("m/44'/60'/0'/0/%d", i))
31 account, err := w.Derive(path, false)
32 if err != nil {
33 log.Fatal(err)
34 }
35
36 key, err := w.PrivateKey(account)
37 if err != nil {
38 log.Fatal(err)
39 }
40 _, err = ks.ImportECDSA(key, password)
41 if err != nil {
42 log.Fatal(err)
43 }
44 if err := ks.Unlock(account, password); err != nil {
45 log.Fatal(err)
46 }
47
48 return &account, account.Address
49}
50
51// Smart Contract Addresses
52var (
53 genesisBlock int64
54 auctionAddressConst ethCommon.Address
55 auctionTestAddressConst ethCommon.Address
56 tokenHEZAddressConst ethCommon.Address
57 hermezRollupAddressConst ethCommon.Address
58 wdelayerAddressConst ethCommon.Address
59 wdelayerTestAddressConst ethCommon.Address
60 tokenHEZ TokenConfig
61
62 donationAccount *accounts.Account
63 donationAddressConst ethCommon.Address
64
65 bootCoordinatorAccount *accounts.Account
66 bootCoordinatorAddressConst ethCommon.Address
67)
68
69// Ethereum Accounts
70var (
71 emergencyCouncilAccount *accounts.Account
72 emergencyCouncilAddressConst ethCommon.Address
73
74 governanceAccount *accounts.Account
75 governanceAddressConst ethCommon.Address
76
77 auxAccount *accounts.Account
78 auxAddressConst ethCommon.Address
79
80 aux2Account *accounts.Account
81 aux2AddressConst ethCommon.Address
82
83 hermezRollupTestAccount *accounts.Account
84 hermezRollupTestAddressConst ethCommon.Address
85)
86
87var (
88 ks *keystore.KeyStore
89 ethClient *ethclient.Client
90 ethereumClientEmergencyCouncil *EthereumClient
91 ethereumClientAux *EthereumClient
92 ethereumClientAux2 *EthereumClient
93 ethereumClientHermez *EthereumClient
94)
95
96func getEnvVariables() {
97 err := godotenv.Load()
98 if err != nil {
99 fmt.Println("Variables loaded from environment")
100 } else {
101 fmt.Println("Variables loaded from .env file")
102 }
103 var auctionAddressStr = os.Getenv("AUCTION")
104 var auctionTestAddressStr = os.Getenv("AUCTION_TEST")
105 var tokenHEZAddressStr = os.Getenv("TOKENHEZ")
106 var hermezRollupAddressStr = os.Getenv("HERMEZ")
107 var wdelayerAddressStr = os.Getenv("WDELAYER")
108 var wdelayerTestAddressStr = os.Getenv("WDELAYER_TEST")
109 genesisBlockEnv := os.Getenv("GENESIS_BLOCK")
110 genesisBlock, err = strconv.ParseInt(genesisBlockEnv, 10, 64)
111 if err != nil {
112 log.Fatal(errEnvVar)
113 }
114 if auctionAddressStr == "" || auctionTestAddressStr == "" || tokenHEZAddressStr == "" || hermezRollupAddressStr == "" || wdelayerAddressStr == "" || wdelayerTestAddressStr == "" || genesisBlockEnv == "" {
115 log.Fatal(errEnvVar)
116 }
117
118 auctionAddressConst = ethCommon.HexToAddress(auctionAddressStr)
119 auctionTestAddressConst = ethCommon.HexToAddress(auctionTestAddressStr)
120 tokenHEZAddressConst = ethCommon.HexToAddress(tokenHEZAddressStr)
121 hermezRollupAddressConst = ethCommon.HexToAddress(hermezRollupAddressStr)
122 wdelayerAddressConst = ethCommon.HexToAddress(wdelayerAddressStr)
123 wdelayerTestAddressConst = ethCommon.HexToAddress(wdelayerTestAddressStr)
124 tokenHEZ = TokenConfig{
125 Address: tokenHEZAddressConst,
126 Name: "Hermez Network Token",
127 }
128}
129
130func TestMain(m *testing.M) {
131 exitVal := 0
132
133 if os.Getenv("INTEGRATION") != "" {
134 getEnvVariables()
135 dir, err := ioutil.TempDir("", "tmpks")
136 if err != nil {
137 log.Fatal(err)
138 }
139 defer func() {
140 if err := os.RemoveAll(dir); err != nil {
141 log.Fatal(err)
142 }
143 }()
144 ks = keystore.NewKeyStore(dir, keystore.LightScryptN, keystore.LightScryptP)
145
146 w, err := hdwallet.NewFromMnemonic(mnemonic)
147 if err != nil {
148 log.Fatal(err)
149 }
150
151 // Create ethereum accounts from mnemonic and load private keys
152 // into the keystore
153 bootCoordinatorAccount, bootCoordinatorAddressConst = genAcc(w, ks, 0)
154 governanceAccount, governanceAddressConst = genAcc(w, ks, 1)
155 emergencyCouncilAccount, emergencyCouncilAddressConst = genAcc(w, ks, 2)
156 donationAccount, donationAddressConst = genAcc(w, ks, 3)
157 hermezRollupTestAccount, hermezRollupTestAddressConst = genAcc(w, ks, 4)
158 auxAccount, auxAddressConst = genAcc(w, ks, 5)
159 aux2Account, aux2AddressConst = genAcc(w, ks, 6)
160
161 ethClient, err = ethclient.Dial(ethClientDialURL)
162 if err != nil {
163 log.Fatal(err)
164 }
165
166 // Controllable Governance Address
167 ethereumClientGov, err := NewEthereumClient(ethClient, governanceAccount, ks, nil)
168 if err != nil {
169 log.Fatal(err)
170 }
171 auctionClient, err = NewAuctionClient(ethereumClientGov, auctionAddressConst, tokenHEZ)
172 if err != nil {
173 log.Fatal(err)
174 }
175 auctionClientTest, err = NewAuctionClient(ethereumClientGov, auctionTestAddressConst, tokenHEZ)
176 if err != nil {
177 log.Fatal(err)
178 }
179 rollupClient, err = NewRollupClient(ethereumClientGov, hermezRollupAddressConst, tokenHEZ)
180 if err != nil {
181 log.Fatal(err)
182 }
183 wdelayerClient, err = NewWDelayerClient(ethereumClientGov, wdelayerAddressConst)
184 if err != nil {
185 log.Fatal(err)
186 }
187 wdelayerClientTest, err = NewWDelayerClient(ethereumClientGov, wdelayerTestAddressConst)
188 if err != nil {
189 log.Fatal(err)
190 }
191
192 ethereumClientEmergencyCouncil, err = NewEthereumClient(ethClient, emergencyCouncilAccount, ks, nil)
193 if err != nil {
194 log.Fatal(err)
195 }
196 ethereumClientAux, err = NewEthereumClient(ethClient, auxAccount, ks, nil)
197 if err != nil {
198 log.Fatal(err)
199 }
200 ethereumClientAux2, err = NewEthereumClient(ethClient, aux2Account, ks, nil)
201 if err != nil {
202 log.Fatal(err)
203 }
204 ethereumClientHermez, err = NewEthereumClient(ethClient, hermezRollupTestAccount, ks, nil)
205 if err != nil {
206 log.Fatal(err)
207 }
208
209 exitVal = m.Run()
210 }
211 os.Exit(exitVal)
212}