kopia lustrzana https://github.com/bugout-dev/moonstream
74 wiersze
2.1 KiB
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
|
|
}
|