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	"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}