kopia lustrzana https://github.com/bugout-dev/moonstream
66 wiersze
1.6 KiB
Go
66 wiersze
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"strings"
|
|
|
|
"github.com/ethereum/go-ethereum/accounts/abi/bind"
|
|
"github.com/ethereum/go-ethereum/accounts/keystore"
|
|
"github.com/ethereum/go-ethereum/common"
|
|
)
|
|
|
|
type SignerInstance struct {
|
|
Address common.Address
|
|
PrivateKey *keystore.Key
|
|
}
|
|
|
|
// initializeSigner parse secrets directory with keyfile and passfile,
|
|
// then opens keyfile with password to privateKey
|
|
func initializeSigner(keyfileName, passfileName string) (*SignerInstance, error) {
|
|
if ROBOTS_SIGNER_SECRETS_DIR_PATH == "" {
|
|
return nil, errors.New("Directory with signer secrets not set")
|
|
}
|
|
|
|
keyfilePath := fmt.Sprintf("%s/%s", ROBOTS_SIGNER_SECRETS_DIR_PATH, keyfileName)
|
|
keyfilePasswordPath := fmt.Sprintf("%s/%s", ROBOTS_SIGNER_SECRETS_DIR_PATH, passfileName)
|
|
|
|
passfile, err := ioutil.ReadFile(keyfilePasswordPath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
passfile_lines := strings.Split(string(passfile), "\n")
|
|
password := passfile_lines[0]
|
|
|
|
keyfile, err := ioutil.ReadFile(keyfilePath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
privateKey, err := keystore.DecryptKey(keyfile, password)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
signer := SignerInstance{
|
|
Address: privateKey.Address,
|
|
PrivateKey: privateKey,
|
|
}
|
|
|
|
return &signer, nil
|
|
}
|
|
|
|
func (s *SignerInstance) CreateTransactor(network NetworkInstance) (*bind.TransactOpts, error) {
|
|
auth, err := bind.NewKeyedTransactorWithChainID(s.PrivateKey.PrivateKey, network.ChainID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// auth.Nonce = big.NewInt(int64(nonce))
|
|
// auth.Value = big.NewInt(0)
|
|
// auth.GasLimit = uint64(300000)
|
|
// auth.GasPrice = gasPrice
|
|
|
|
return auth, nil
|
|
}
|