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