moonstream/robots/cmd/robots/terminus.go

74 wiersze
2.1 KiB
Go

package main
import (
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
terminus_contract "github.com/bugout-dev/engine/robots/pkg/terminus"
)
type ContractTerminusInstance struct {
Address common.Address
Instance *terminus_contract.Terminus
TerminusPoolId int64
}
func GetTerminusContractAddress(terminusAddress string) common.Address {
return common.HexToAddress(terminusAddress)
}
// InitializeContractInstance parse contract to instance
func InitializeTerminusContractInstance(client *ethclient.Client, address common.Address) (*terminus_contract.Terminus, error) {
contractInstance, err := terminus_contract.NewTerminus(address, client)
if err != nil {
return nil, err
}
return contractInstance, nil
}
func (ct *ContractTerminusInstance) FetchPoolCapacity(pool_id int64) (*big.Int, error) {
pool_capacity, err := ct.Instance.TerminusPoolCapacity(nil, big.NewInt(pool_id))
if err != nil {
return nil, err
}
return pool_capacity, nil
}
// PoolMintBatch executes PoolMintBatch for list of address with same value amount
func (cti *ContractTerminusInstance) PoolMintBatch(auth *bind.TransactOpts, claimants []Claimant, value int64) (*types.Transaction, error) {
to_addresses := []common.Address{}
values := []*big.Int{}
for _, claimant := range claimants {
to_addresses = append(to_addresses, common.HexToAddress(claimant.Address))
values = append(values, big.NewInt(value))
}
tx, err := cti.Instance.PoolMintBatch(auth, big.NewInt(cti.TerminusPoolId), to_addresses, values)
if err != nil {
return nil, err
}
return tx, nil
}
func (cti *ContractTerminusInstance) BalanceOfBatch(auth *bind.CallOpts, claimants []Claimant, id_int int64) ([]*big.Int, error) {
addresses := []common.Address{}
ids := []*big.Int{}
for _, claimant := range claimants {
addresses = append(addresses, common.HexToAddress(claimant.Address))
ids = append(ids, big.NewInt(id_int))
}
balances, err := cti.Instance.BalanceOfBatch(auth, addresses, ids)
if err != nil {
return nil, err
}
return balances, nil
}