github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/test/benchmarks/sequencer/scripts/common/environment/init.go (about)

     1  package environment
     2  
     3  import (
     4  	"context"
     5  	"math/big"
     6  	"strconv"
     7  	"strings"
     8  
     9  	"github.com/0xPolygon/supernets2-node/db"
    10  	"github.com/0xPolygon/supernets2-node/log"
    11  	"github.com/0xPolygon/supernets2-node/pool/pgpoolstorage"
    12  	"github.com/0xPolygon/supernets2-node/state"
    13  	"github.com/0xPolygon/supernets2-node/test/benchmarks/sequencer/common/params"
    14  	"github.com/ethereum/go-ethereum/accounts/abi/bind"
    15  	"github.com/ethereum/go-ethereum/crypto"
    16  	"github.com/ethereum/go-ethereum/ethclient"
    17  )
    18  
    19  var (
    20  	maxConnections = 10
    21  	bitSize        = 64
    22  )
    23  
    24  // Init sets up the environment for the benchmark
    25  func Init() (context.Context, *pgpoolstorage.PostgresPoolStorage, *state.PostgresStorage, *ethclient.Client, *bind.TransactOpts) {
    26  	ctx := context.Background()
    27  	pl, err := pgpoolstorage.NewPostgresPoolStorage(db.Config{
    28  		Name:      poolDbName,
    29  		User:      poolDbUser,
    30  		Password:  poolDbPass,
    31  		Host:      poolDbHost,
    32  		Port:      poolDbPort,
    33  		EnableLog: false,
    34  		MaxConns:  maxConnections,
    35  	})
    36  	if err != nil {
    37  		panic(err)
    38  	}
    39  
    40  	l2Client, err := ethclient.Dial(l2NetworkRPCURL)
    41  	if err != nil {
    42  		panic(err)
    43  	}
    44  	// PrivateKey is the private key of the sender
    45  	privateKey, err := crypto.HexToECDSA(strings.TrimPrefix(PrivateKey, "0x"))
    46  	if err != nil {
    47  		panic(err)
    48  	}
    49  	chainId, err := strconv.ParseUint(L2ChainId, IntBase, bitSize)
    50  	if err != nil {
    51  		panic(err)
    52  	}
    53  	log.Infof("L2ChainId: %d", chainId)
    54  	// Auth is the auth of the sender
    55  	auth, err := bind.NewKeyedTransactorWithChainID(privateKey, new(big.Int).SetUint64(chainId))
    56  	if err != nil {
    57  		panic(err)
    58  	}
    59  	// Print Info before send
    60  	senderBalance, err := l2Client.BalanceAt(ctx, auth.From, nil)
    61  	if err != nil {
    62  		panic(err)
    63  	}
    64  	senderNonce, err := l2Client.PendingNonceAt(ctx, auth.From)
    65  	if err != nil {
    66  		panic(err)
    67  	}
    68  
    69  	// Print Initial Stats
    70  	log.Infof("Receiver Addr: %v", params.To.String())
    71  	log.Infof("Sender Addr: %v", auth.From.String())
    72  	log.Infof("Sender Balance: %v", senderBalance.String())
    73  	log.Infof("Sender Nonce: %v", senderNonce)
    74  
    75  	gasPrice, err := l2Client.SuggestGasPrice(ctx)
    76  	if err != nil {
    77  		panic(err)
    78  	}
    79  	auth.GasPrice = gasPrice
    80  	stateDbCfg := db.Config{
    81  		User:      stateDbUser,
    82  		Password:  stateDbPass,
    83  		Name:      stateDbName,
    84  		Host:      stateDbHost,
    85  		Port:      stateDbPort,
    86  		EnableLog: true,
    87  		MaxConns:  maxConnections,
    88  	}
    89  	stateDb, err := db.NewSQLDB(stateDbCfg)
    90  	if err != nil {
    91  		panic(err)
    92  	}
    93  	stateStorage := state.NewPostgresStorage(stateDb)
    94  	auth.Nonce = new(big.Int).SetUint64(senderNonce)
    95  
    96  	return ctx, pl, stateStorage, l2Client, auth
    97  }