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