cic-go/cic_net/util.go

51 lines
1005 B
Go
Raw Normal View History

package cic_net
import (
"context"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/lmittmann/w3/module/eth"
"math/big"
)
func (c *CicNet) latestNonce(ctx context.Context, address common.Address) (uint64, error) {
var nonce uint64
err := c.ethClient.CallCtx(
ctx,
eth.Nonce(address, nil).Returns(&nonce),
)
if err != nil {
return 0, err
}
return nonce, nil
}
func (c *CicNet) signAndCall(ctx context.Context, input []byte, txData WriteTx) (common.Hash, error) {
var txHash common.Hash
nonce, err := c.latestNonce(ctx, txData.from)
if err != nil {
return [32]byte{}, err
}
tx, err := types.SignNewTx(&txData.privateKey, c.kitabuSigner, &types.LegacyTx{
To: &txData.to,
Nonce: nonce,
Data: input,
Gas: txData.gasLimit,
GasPrice: big.NewInt(1),
})
err = c.ethClient.CallCtx(
ctx,
eth.SendTransaction(tx).Returns(&txHash),
)
if err != nil {
return [32]byte{}, err
}
return txHash, nil
}