arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
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}