|
|
package eth
import ( "fmt" "io/ioutil" "log" "math/big" "os" "strconv" "testing"
"github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/keystore" ethCommon "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/ethclient" "github.com/joho/godotenv" hdwallet "github.com/miguelmota/go-ethereum-hdwallet" )
var errEnvVar = fmt.Errorf("Some environment variable is missing")
var ( ethClientDialURL = "http://localhost:8545" password = "pass" deadline, _ = new(big.Int).SetString("ffffffffffffffffffffffffffffffff", 16) mnemonic = "explain tackle mirror kit van hammer degree position ginger unfair soup bonus" )
func genAcc(w *hdwallet.Wallet, ks *keystore.KeyStore, i int) (*accounts.Account, ethCommon.Address) { path := hdwallet.MustParseDerivationPath(fmt.Sprintf("m/44'/60'/0'/0/%d", i)) account, err := w.Derive(path, false) if err != nil { log.Fatal(err) }
key, err := w.PrivateKey(account) if err != nil { log.Fatal(err) } _, err = ks.ImportECDSA(key, password) if err != nil { log.Fatal(err) } if err := ks.Unlock(account, password); err != nil { log.Fatal(err) }
return &account, account.Address }
// Smart Contract Addresses
var ( genesisBlock int64 auctionAddressConst ethCommon.Address auctionTestAddressConst ethCommon.Address tokenHEZAddressConst ethCommon.Address hermezRollupAddressConst ethCommon.Address wdelayerAddressConst ethCommon.Address wdelayerTestAddressConst ethCommon.Address tokenHEZ TokenConfig
donationAccount *accounts.Account donationAddressConst ethCommon.Address
bootCoordinatorAccount *accounts.Account bootCoordinatorAddressConst ethCommon.Address )
// Ethereum Accounts
var ( emergencyCouncilAccount *accounts.Account emergencyCouncilAddressConst ethCommon.Address
governanceAccount *accounts.Account governanceAddressConst ethCommon.Address
auxAccount *accounts.Account auxAddressConst ethCommon.Address
aux2Account *accounts.Account aux2AddressConst ethCommon.Address
hermezRollupTestAccount *accounts.Account hermezRollupTestAddressConst ethCommon.Address )
var ( ks *keystore.KeyStore ethClient *ethclient.Client ethereumClientEmergencyCouncil *EthereumClient ethereumClientAux *EthereumClient ethereumClientAux2 *EthereumClient ethereumClientHermez *EthereumClient )
func getEnvVariables() { err := godotenv.Load() if err != nil { fmt.Println("Variables loaded from environment") } else { fmt.Println("Variables loaded from .env file") } var auctionAddressStr = os.Getenv("AUCTION") var auctionTestAddressStr = os.Getenv("AUCTION_TEST") var tokenHEZAddressStr = os.Getenv("TOKENHEZ") var hermezRollupAddressStr = os.Getenv("HERMEZ") var wdelayerAddressStr = os.Getenv("WDELAYER") var wdelayerTestAddressStr = os.Getenv("WDELAYER_TEST") genesisBlockEnv := os.Getenv("GENESIS_BLOCK") genesisBlock, err = strconv.ParseInt(genesisBlockEnv, 10, 64) if err != nil { log.Fatal(errEnvVar) } if auctionAddressStr == "" || auctionTestAddressStr == "" || tokenHEZAddressStr == "" || hermezRollupAddressStr == "" || wdelayerAddressStr == "" || wdelayerTestAddressStr == "" || genesisBlockEnv == "" { log.Fatal(errEnvVar) }
auctionAddressConst = ethCommon.HexToAddress(auctionAddressStr) auctionTestAddressConst = ethCommon.HexToAddress(auctionTestAddressStr) tokenHEZAddressConst = ethCommon.HexToAddress(tokenHEZAddressStr) hermezRollupAddressConst = ethCommon.HexToAddress(hermezRollupAddressStr) wdelayerAddressConst = ethCommon.HexToAddress(wdelayerAddressStr) wdelayerTestAddressConst = ethCommon.HexToAddress(wdelayerTestAddressStr) tokenHEZ = TokenConfig{ Address: tokenHEZAddressConst, Name: "Hermez Network Token", } }
func TestMain(m *testing.M) { exitVal := 0
if os.Getenv("INTEGRATION") != "" { getEnvVariables() dir, err := ioutil.TempDir("", "tmpks") if err != nil { log.Fatal(err) } defer func() { if err := os.RemoveAll(dir); err != nil { log.Fatal(err) } }() ks = keystore.NewKeyStore(dir, keystore.LightScryptN, keystore.LightScryptP)
w, err := hdwallet.NewFromMnemonic(mnemonic) if err != nil { log.Fatal(err) }
// Create ethereum accounts from mnemonic and load private keys
// into the keystore
bootCoordinatorAccount, bootCoordinatorAddressConst = genAcc(w, ks, 0) governanceAccount, governanceAddressConst = genAcc(w, ks, 1) emergencyCouncilAccount, emergencyCouncilAddressConst = genAcc(w, ks, 2) donationAccount, donationAddressConst = genAcc(w, ks, 3) hermezRollupTestAccount, hermezRollupTestAddressConst = genAcc(w, ks, 4) auxAccount, auxAddressConst = genAcc(w, ks, 5) aux2Account, aux2AddressConst = genAcc(w, ks, 6)
ethClient, err = ethclient.Dial(ethClientDialURL) if err != nil { log.Fatal(err) }
// Controllable Governance Address
ethereumClientGov, err := NewEthereumClient(ethClient, governanceAccount, ks, nil) if err != nil { log.Fatal(err) } auctionClient, err = NewAuctionClient(ethereumClientGov, auctionAddressConst, tokenHEZ) if err != nil { log.Fatal(err) } auctionClientTest, err = NewAuctionClient(ethereumClientGov, auctionTestAddressConst, tokenHEZ) if err != nil { log.Fatal(err) } rollupClient, err = NewRollupClient(ethereumClientGov, hermezRollupAddressConst, tokenHEZ) if err != nil { log.Fatal(err) } wdelayerClient, err = NewWDelayerClient(ethereumClientGov, wdelayerAddressConst) if err != nil { log.Fatal(err) } wdelayerClientTest, err = NewWDelayerClient(ethereumClientGov, wdelayerTestAddressConst) if err != nil { log.Fatal(err) }
ethereumClientEmergencyCouncil, err = NewEthereumClient(ethClient, emergencyCouncilAccount, ks, nil) if err != nil { log.Fatal(err) } ethereumClientAux, err = NewEthereumClient(ethClient, auxAccount, ks, nil) if err != nil { log.Fatal(err) } ethereumClientAux2, err = NewEthereumClient(ethClient, aux2Account, ks, nil) if err != nil { log.Fatal(err) } ethereumClientHermez, err = NewEthereumClient(ethClient, hermezRollupTestAccount, ks, nil) if err != nil { log.Fatal(err) }
exitVal = m.Run() } os.Exit(exitVal) }
|