mirror of
https://github.com/arnaucube/hermez-node.git
synced 2026-02-07 11:26:44 +01:00
Load an ethereum keystore when the node is started in coordinator mode. The private key corresponding to the forger address must be imported into the keystore before running the node in coordinator mode. You can see an examples in `cli/node/load-sk-example.sh`.
213 lines
6.2 KiB
Go
213 lines
6.2 KiB
Go
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)
|
|
}
|