status-go/contracts/contracts.go

247 lines
5.7 KiB
Go
Raw Normal View History

2022-02-02 22:50:55 +00:00
package contracts
import (
"context"
"errors"
2022-02-02 22:50:55 +00:00
"github.com/ethereum/go-ethereum/common"
"github.com/status-im/status-go/contracts/directory"
2022-09-09 06:58:36 +00:00
"github.com/status-im/status-go/contracts/ethscan"
2022-09-13 07:10:59 +00:00
"github.com/status-im/status-go/contracts/hop"
hopBridge "github.com/status-im/status-go/contracts/hop/bridge"
hopSwap "github.com/status-im/status-go/contracts/hop/swap"
hopWrapper "github.com/status-im/status-go/contracts/hop/wrapper"
2022-12-19 12:37:37 +00:00
"github.com/status-im/status-go/contracts/ierc20"
2022-02-02 22:50:55 +00:00
"github.com/status-im/status-go/contracts/registrar"
"github.com/status-im/status-go/contracts/resolver"
"github.com/status-im/status-go/contracts/snt"
"github.com/status-im/status-go/contracts/stickers"
"github.com/status-im/status-go/rpc"
)
type ContractMaker struct {
RPCClient *rpc.Client
}
2023-08-29 12:59:37 +00:00
func NewContractMaker(client *rpc.Client) (*ContractMaker, error) {
if client == nil {
return nil, errors.New("could not initialize ContractMaker with an rpc client")
}
return &ContractMaker{RPCClient: client}, nil
}
func (c *ContractMaker) NewRegistryWithAddress(chainID uint64, address common.Address) (*resolver.ENSRegistryWithFallback, error) {
2022-02-02 22:50:55 +00:00
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return resolver.NewENSRegistryWithFallback(
address,
2022-02-02 22:50:55 +00:00
backend,
)
}
func (c *ContractMaker) NewRegistry(chainID uint64) (*resolver.ENSRegistryWithFallback, error) {
contractAddr, err := resolver.ContractAddress(chainID)
if err != nil {
return nil, err
}
return c.NewRegistryWithAddress(chainID, contractAddr)
}
2022-02-02 22:50:55 +00:00
func (c *ContractMaker) NewPublicResolver(chainID uint64, resolverAddress *common.Address) (*resolver.PublicResolver, error) {
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return resolver.NewPublicResolver(*resolverAddress, backend)
}
func (c *ContractMaker) NewUsernameRegistrar(chainID uint64, contractAddr common.Address) (*registrar.UsernameRegistrar, error) {
2022-02-02 22:50:55 +00:00
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return registrar.NewUsernameRegistrar(
contractAddr,
backend,
)
}
2022-12-19 12:37:37 +00:00
func (c *ContractMaker) NewERC20(chainID uint64, contractAddr common.Address) (*ierc20.IERC20, error) {
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return ierc20.NewIERC20(
contractAddr,
backend,
)
}
2022-02-02 22:50:55 +00:00
func (c *ContractMaker) NewSNT(chainID uint64) (*snt.SNT, error) {
contractAddr, err := snt.ContractAddress(chainID)
if err != nil {
return nil, err
}
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return snt.NewSNT(contractAddr, backend)
}
func (c *ContractMaker) NewStickerType(chainID uint64) (*stickers.StickerType, error) {
contractAddr, err := stickers.StickerTypeContractAddress(chainID)
if err != nil {
return nil, err
}
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return stickers.NewStickerType(
contractAddr,
backend,
)
}
func (c *ContractMaker) NewStickerMarket(chainID uint64) (*stickers.StickerMarket, error) {
contractAddr, err := stickers.StickerMarketContractAddress(chainID)
if err != nil {
return nil, err
}
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return stickers.NewStickerMarket(
contractAddr,
backend,
)
}
func (c *ContractMaker) NewStickerPack(chainID uint64) (*stickers.StickerPack, error) {
contractAddr, err := stickers.StickerPackContractAddress(chainID)
if err != nil {
return nil, err
}
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return stickers.NewStickerPack(
contractAddr,
backend,
)
}
func (c *ContractMaker) NewDirectory(chainID uint64) (*directory.Directory, error) {
contractAddr, err := directory.ContractAddress(chainID)
if err != nil {
return nil, err
}
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return directory.NewDirectory(
contractAddr,
backend,
)
}
func (c *ContractMaker) NewEthScan(chainID uint64) (*ethscan.BalanceScanner, uint, error) {
2022-09-09 06:58:36 +00:00
contractAddr, err := ethscan.ContractAddress(chainID)
if err != nil {
return nil, 0, err
}
contractCreatedAt, err := ethscan.ContractCreatedAt(chainID)
if err != nil {
return nil, 0, err
2022-09-09 06:58:36 +00:00
}
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, 0, err
2022-09-09 06:58:36 +00:00
}
bytecode, err := backend.CodeAt(context.Background(), contractAddr, nil)
if err != nil {
return nil, 0, err
}
if len(bytecode) == 0 {
return nil, 0, errors.New("is not a contract")
}
scanner, err := ethscan.NewBalanceScanner(
2022-09-09 06:58:36 +00:00
contractAddr,
backend,
)
return scanner, contractCreatedAt, err
2022-09-09 06:58:36 +00:00
}
2022-09-13 07:10:59 +00:00
func (c *ContractMaker) NewHopL2SaddlSwap(chainID uint64, symbol string) (*hopSwap.HopSwap, error) {
contractAddr, err := hop.L2SaddleSwapContractAddress(chainID, symbol)
if err != nil {
return nil, err
}
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return hopSwap.NewHopSwap(
contractAddr,
backend,
)
}
func (c *ContractMaker) NewHopL1Bridge(chainID uint64, symbol string) (*hopBridge.HopBridge, error) {
contractAddr, err := hop.L1BridgeContractAddress(chainID, symbol)
if err != nil {
return nil, err
}
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return hopBridge.NewHopBridge(
contractAddr,
backend,
)
}
func (c *ContractMaker) NewHopL2AmmWrapper(chainID uint64, symbol string) (*hopWrapper.HopWrapper, error) {
contractAddr, err := hop.L2AmmWrapperContractAddress(chainID, symbol)
if err != nil {
return nil, err
}
backend, err := c.RPCClient.EthClient(chainID)
if err != nil {
return nil, err
}
return hopWrapper.NewHopWrapper(
contractAddr,
backend,
)
}