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