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 safetyAccount *accounts.Account
69 safetyAddressConst ethCommon.Address
70)
71
72// Ethereum Accounts
73var (
74 hermezGovernanceDAOAccount *accounts.Account
75 hermezGovernanceDAOAddressConst ethCommon.Address
76
77 whiteHackGroupAccount *accounts.Account
78 whiteHackGroupAddressConst ethCommon.Address
79
80 hermezKeeperAccount *accounts.Account
81 hermezKeeperAddressConst ethCommon.Address
82
83 governanceAccount *accounts.Account
84 governanceAddressConst ethCommon.Address
85
86 auxAccount *accounts.Account
87 auxAddressConst ethCommon.Address
88
89 aux2Account *accounts.Account
90 aux2AddressConst ethCommon.Address
91
92 hermezRollupTestAccount *accounts.Account
93 hermezRollupTestAddressConst ethCommon.Address
94)
95
96var (
97 ks *keystore.KeyStore
98 ethClient *ethclient.Client
99 ethereumClientWhite *EthereumClient
100 ethereumClientKep *EthereumClient
101 ethereumClientGovDAO *EthereumClient
102 ethereumClientAux *EthereumClient
103 ethereumClientAux2 *EthereumClient
104 ethereumClientHermez *EthereumClient
105)
106
107func getEnvVariables() {
108 err := godotenv.Load()
109 if err != nil {
110 fmt.Println("Variables loaded from environment")
111 } else {
112 fmt.Println("Variables loaded from .env file")
113 }
114 var auctionAddressStr = os.Getenv("AUCTION")
115 var auctionTestAddressStr = os.Getenv("AUCTION_TEST")
116 var tokenHEZAddressStr = os.Getenv("TOKENHEZ")
117 var hermezRollupAddressStr = os.Getenv("HERMEZ")
118 var wdelayerAddressStr = os.Getenv("WDELAYER")
119 var wdelayerTestAddressStr = os.Getenv("WDELAYER_TEST")
120 genesisBlockEnv := os.Getenv("GENESIS_BLOCK")
121 genesisBlock, err = strconv.ParseInt(genesisBlockEnv, 10, 64)
122 if err != nil {
123 log.Fatal(errEnvVar)
124 }
125 if auctionAddressStr == "" || auctionTestAddressStr == "" || tokenHEZAddressStr == "" || hermezRollupAddressStr == "" || wdelayerAddressStr == "" || wdelayerTestAddressStr == "" || genesisBlockEnv == "" {
126 log.Fatal(errEnvVar)
127 }
128
129 auctionAddressConst = ethCommon.HexToAddress(auctionAddressStr)
130 auctionTestAddressConst = ethCommon.HexToAddress(auctionTestAddressStr)
131 tokenHEZAddressConst = ethCommon.HexToAddress(tokenHEZAddressStr)
132 hermezRollupAddressConst = ethCommon.HexToAddress(hermezRollupAddressStr)
133 wdelayerAddressConst = ethCommon.HexToAddress(wdelayerAddressStr)
134 wdelayerTestAddressConst = ethCommon.HexToAddress(wdelayerTestAddressStr)
135 tokenHEZ = TokenConfig{
136 Address: tokenHEZAddressConst,
137 Name: "Hermez Network Token",
138 }
139}
140
141func TestMain(m *testing.M) {
142 exitVal := 0
143
144 if os.Getenv("INTEGRATION") != "" {
145 getEnvVariables()
146 dir, err := ioutil.TempDir("", "tmpks")
147 if err != nil {
148 log.Fatal(err)
149 }
150 defer func() {
151 if err := os.RemoveAll(dir); err != nil {
152 log.Fatal(err)
153 }
154 }()
155 ks = keystore.NewKeyStore(dir, keystore.LightScryptN, keystore.LightScryptP)
156
157 w, err := hdwallet.NewFromMnemonic(mnemonic)
158 if err != nil {
159 log.Fatal(err)
160 }
161
162 // Create ethereum accounts from mnemonic and load private keys
163 // into the keystore
164 bootCoordinatorAccount, bootCoordinatorAddressConst = genAcc(w, ks, 0)
165 governanceAccount, governanceAddressConst = genAcc(w, ks, 1)
166 safetyAccount, safetyAddressConst = genAcc(w, ks, 2)
167 hermezKeeperAccount, hermezKeeperAddressConst = genAcc(w, ks, 6)
168 hermezGovernanceDAOAccount, hermezGovernanceDAOAddressConst = genAcc(w, ks, 7)
169 whiteHackGroupAccount, whiteHackGroupAddressConst = genAcc(w, ks, 8)
170 donationAccount, donationAddressConst = genAcc(w, ks, 9)
171 aux2Account, aux2AddressConst = genAcc(w, ks, 11)
172 hermezRollupTestAccount, hermezRollupTestAddressConst = genAcc(w, ks, 12)
173 auxAccount, auxAddressConst = genAcc(w, ks, 13)
174
175 ethClient, err = ethclient.Dial(ethClientDialURL)
176 if err != nil {
177 log.Fatal(err)
178 }
179
180 // Controllable Governance Address
181 ethereumClientGov := NewEthereumClient(ethClient, governanceAccount, ks, nil)
182 auctionClient, err = NewAuctionClient(ethereumClientGov, auctionAddressConst, tokenHEZ)
183 if err != nil {
184 log.Fatal(err)
185 }
186 auctionClientTest, err = NewAuctionClient(ethereumClientGov, auctionTestAddressConst, tokenHEZ)
187 if err != nil {
188 log.Fatal(err)
189 }
190 rollupClient, err = NewRollupClient(ethereumClientGov, hermezRollupAddressConst, tokenHEZ)
191 if err != nil {
192 log.Fatal(err)
193 }
194 wdelayerClient, err = NewWDelayerClient(ethereumClientGov, wdelayerAddressConst)
195 if err != nil {
196 log.Fatal(err)
197 }
198 wdelayerClientTest, err = NewWDelayerClient(ethereumClientGov, wdelayerTestAddressConst)
199 if err != nil {
200 log.Fatal(err)
201 }
202
203 ethereumClientKep = NewEthereumClient(ethClient, hermezKeeperAccount, ks, nil)
204 ethereumClientWhite = NewEthereumClient(ethClient, whiteHackGroupAccount, ks, nil)
205 ethereumClientGovDAO = NewEthereumClient(ethClient, hermezGovernanceDAOAccount, ks, nil)
206 ethereumClientAux = NewEthereumClient(ethClient, auxAccount, ks, nil)
207 ethereumClientAux2 = NewEthereumClient(ethClient, aux2Account, ks, nil)
208 ethereumClientHermez = NewEthereumClient(ethClient, hermezRollupTestAccount, ks, nil)
209
210 exitVal = m.Run()
211 }
212 os.Exit(exitVal)
213}