hermez-node/eth/main_test.go
eth/main_test.goRaw
1package eth
2
3import (
4 "fmt"
5 "io/ioutil"
6 "math/big"
7 "os"
8 "strconv"
9 "testing"
10
11 "github.com/ethereum/go-ethereum/accounts"
12 "github.com/ethereum/go-ethereum/accounts/keystore"
13 ethCommon "github.com/ethereum/go-ethereum/common"
14 "github.com/ethereum/go-ethereum/crypto"
15 "github.com/ethereum/go-ethereum/ethclient"
16 "github.com/joho/godotenv"
17)
18
19var ethClientDialURLConst = "http://localhost:8545"
20var passwordConst = "pass"
21var deadlineConst, _ = new(big.Int).SetString("ffffffffffffffffffffffffffffffff", 16)
22
23var errEnvVar = fmt.Errorf("Some environment variable is missing")
24
25// Smart Contract Addresses
26var (
27 password string
28 ethClientDialURL string
29 deadline *big.Int
30 genesisBlock int64
31 auctionAddressConst ethCommon.Address
32 auctionTestAddressConst ethCommon.Address
33 tokenHEZAddressConst ethCommon.Address
34 hermezRollupAddressConst ethCommon.Address
35 wdelayerAddressConst ethCommon.Address
36 wdelayerTestAddressConst ethCommon.Address
37 tokenHEZ TokenConfig
38 donationAddressStr = "0x6c365935CA8710200C7595F0a72EB6023A7706Cd"
39 donationAddressConst = ethCommon.HexToAddress(donationAddressStr)
40 bootCoordinatorAddressStr = "0xc783df8a850f42e7f7e57013759c285caa701eb6"
41 bootCoordinatorAddressConst = ethCommon.HexToAddress(bootCoordinatorAddressStr)
42 safetyAddressStr = "0xE5904695748fe4A84b40b3fc79De2277660BD1D3"
43 safetyAddressConst = ethCommon.HexToAddress(safetyAddressStr)
44)
45
46// Ethereum Accounts
47var (
48 hermezGovernanceDAOAddressSK = "2a8aede924268f84156a00761de73998dac7bf703408754b776ff3f873bcec60"
49 hermezGovernanceDAOAddressStr = "0x84Fae3d3Cba24A97817b2a18c2421d462dbBCe9f"
50 hermezGovernanceDAOAddressConst = ethCommon.HexToAddress(hermezGovernanceDAOAddressStr)
51
52 whiteHackGroupAddressSK = "8b24fd94f1ce869d81a34b95351e7f97b2cd88a891d5c00abc33d0ec9501902e"
53 whiteHackGroupAddressStr = "0xfa3BdC8709226Da0dA13A4d904c8b66f16c3c8BA"
54 whiteHackGroupAddressConst = ethCommon.HexToAddress(whiteHackGroupAddressStr)
55
56 hermezKeeperAddressSK = "7f307c41137d1ed409f0a7b028f6c7596f12734b1d289b58099b99d60a96efff"
57 hermezKeeperAddressStr = "0xFbC51a9582D031f2ceaaD3959256596C5D3a5468"
58 hermezKeeperAddressConst = ethCommon.HexToAddress(hermezKeeperAddressStr)
59
60 governanceAddressSK = "d49743deccbccc5dc7baa8e69e5be03298da8688a15dd202e20f15d5e0e9a9fb"
61 governanceAddressStr = "0xead9c93b79ae7c1591b1fb5323bd777e86e150d4"
62 governanceAddressConst = ethCommon.HexToAddress(governanceAddressStr)
63
64 auxAddressSK = "28d1bfbbafe9d1d4f5a11c3c16ab6bf9084de48d99fbac4058bdfa3c80b29089"
65 auxAddressStr = "0x3d91185a02774C70287F6c74Dd26d13DFB58ff16"
66 auxAddressConst = ethCommon.HexToAddress(auxAddressStr)
67
68 aux2AddressSK = "28d1bfbbafe9d1d4f5a11c3c16ab6bf9084de48d99fbac4058bdfa3c80b29087"
69 aux2AddressStr = "0x532792b73c0c6e7565912e7039c59986f7e1dd1f"
70 aux2AddressConst = ethCommon.HexToAddress(aux2AddressStr)
71
72 hermezRollupTestSK = "28d1bfbbafe9d1d4f5a11c3c16ab6bf9084de48d99fbac4058bdfa3c80b29088"
73 hermezRollupTestAddressStr = "0xEa960515F8b4C237730F028cBAcF0a28E7F45dE0"
74 hermezRollupAddressTestConst = ethCommon.HexToAddress(hermezRollupTestAddressStr)
75)
76
77var (
78 accountGov *accounts.Account
79 accountKep *accounts.Account
80 accountWhite *accounts.Account
81 accountGovDAO *accounts.Account
82 accountAux *accounts.Account
83 accountAux2 *accounts.Account
84 accountHermez *accounts.Account
85 ks *keystore.KeyStore
86 ethClient *ethclient.Client
87 ethereumClientWhite *EthereumClient
88 ethereumClientKep *EthereumClient
89 ethereumClientGovDAO *EthereumClient
90 ethereumClientAux *EthereumClient
91 ethereumClientAux2 *EthereumClient
92 ethereumClientHermez *EthereumClient
93)
94
95func addKey(ks *keystore.KeyStore, skHex string) *accounts.Account {
96 key, err := crypto.HexToECDSA(skHex)
97 if err != nil {
98 panic(err)
99 }
100 account, err := ks.ImportECDSA(key, password)
101 if err != nil {
102 panic(err)
103 }
104 err = ks.Unlock(account, password)
105 if err != nil {
106 panic(err)
107 }
108 return &account
109}
110
111func getEnvVariables() {
112 err := godotenv.Load()
113 if err != nil {
114 fmt.Println("Variables loaded from command")
115 } else {
116 fmt.Println("Variables loaded from .env file")
117 }
118 var auctionAddressStr = os.Getenv("AUCTION")
119 var auctionTestAddressStr = os.Getenv("AUCTION_TEST")
120 var tokenHEZAddressStr = os.Getenv("TOKENHEZ")
121 var hermezRollupAddressStr = os.Getenv("HERMEZ")
122 var wdelayerAddressStr = os.Getenv("WDELAYER")
123 var wdelayerTestAddressStr = os.Getenv("WDELAYER_TEST")
124 genesisBlockEnv := os.Getenv("GENESIS_BLOCK")
125 genesisBlock, err = strconv.ParseInt(genesisBlockEnv, 10, 64)
126 if err != nil {
127 panic(errEnvVar)
128 }
129 if auctionAddressStr == "" || auctionTestAddressStr == "" || tokenHEZAddressStr == "" || hermezRollupAddressStr == "" || wdelayerAddressStr == "" || wdelayerTestAddressStr == "" || genesisBlockEnv == "" {
130 panic(errEnvVar)
131 }
132
133 ethClientDialURL = ethClientDialURLConst
134 password = passwordConst
135 deadline = deadlineConst
136 auctionAddressConst = ethCommon.HexToAddress(auctionAddressStr)
137 auctionTestAddressConst = ethCommon.HexToAddress(auctionTestAddressStr)
138 tokenHEZAddressConst = ethCommon.HexToAddress(tokenHEZAddressStr)
139 hermezRollupAddressConst = ethCommon.HexToAddress(hermezRollupAddressStr)
140 wdelayerAddressConst = ethCommon.HexToAddress(wdelayerAddressStr)
141 wdelayerTestAddressConst = ethCommon.HexToAddress(wdelayerTestAddressStr)
142 tokenHEZ = TokenConfig{
143 Address: tokenHEZAddressConst,
144 Name: "Hermez Network Token",
145 }
146}
147
148func TestMain(m *testing.M) {
149 exitVal := 0
150
151 if os.Getenv("INTEGRATION") != "" {
152 getEnvVariables()
153 dir, err := ioutil.TempDir("", "tmpks")
154 if err != nil {
155 panic(err)
156 }
157 defer func() {
158 if err := os.RemoveAll(dir); err != nil {
159 panic(err)
160 }
161 }()
162 ks = keystore.NewKeyStore(dir, keystore.LightScryptN, keystore.LightScryptP)
163
164 // Load ethereum accounts from private keys
165 accountGov = addKey(ks, governanceAddressSK)
166 accountKep = addKey(ks, hermezKeeperAddressSK)
167 accountWhite = addKey(ks, whiteHackGroupAddressSK)
168 accountGovDAO = addKey(ks, hermezGovernanceDAOAddressSK)
169 accountAux = addKey(ks, auxAddressSK)
170 accountAux2 = addKey(ks, aux2AddressSK)
171 accountHermez = addKey(ks, hermezRollupTestSK)
172
173 ethClient, err = ethclient.Dial(ethClientDialURL)
174 if err != nil {
175 panic(err)
176 }
177
178 // Controllable Governance Address
179 ethereumClientGov := NewEthereumClient(ethClient, accountGov, ks, nil)
180 auctionClient, err = NewAuctionClient(ethereumClientGov, auctionAddressConst, tokenHEZ)
181 if err != nil {
182 panic(err)
183 }
184 auctionClientTest, err = NewAuctionClient(ethereumClientGov, auctionTestAddressConst, tokenHEZ)
185 if err != nil {
186 panic(err)
187 }
188 rollupClient, err = NewRollupClient(ethereumClientGov, hermezRollupAddressConst, tokenHEZ)
189 if err != nil {
190 panic(err)
191 }
192 wdelayerClient, err = NewWDelayerClient(ethereumClientGov, wdelayerAddressConst)
193 if err != nil {
194 panic(err)
195 }
196 wdelayerClientTest, err = NewWDelayerClient(ethereumClientGov, wdelayerTestAddressConst)
197 if err != nil {
198 panic(err)
199 }
200
201 ethereumClientKep = NewEthereumClient(ethClient, accountKep, ks, nil)
202 ethereumClientWhite = NewEthereumClient(ethClient, accountWhite, ks, nil)
203 ethereumClientGovDAO = NewEthereumClient(ethClient, accountGovDAO, ks, nil)
204 ethereumClientAux = NewEthereumClient(ethClient, accountAux, ks, nil)
205 ethereumClientAux2 = NewEthereumClient(ethClient, accountAux2, ks, nil)
206 ethereumClientHermez = NewEthereumClient(ethClient, accountHermez, ks, nil)
207
208 exitVal = m.Run()
209 }
210 os.Exit(exitVal)
211}