/
interface.go
108 lines (96 loc) · 3.35 KB
/
interface.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package imx
import (
"context"
"math/big"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/immutable/imx-core-sdk-golang/imx/api"
"github.com/immutable/imx-core-sdk-golang/imx/contracts"
)
var (
Sandbox = Environment{
BaseAPIPath: "https://api.ropsten.x.immutable.com",
EthereumRPC: "https://eth-ropsten.alchemyapi.io/v2/",
RegistrationContractAddress: "0x6C21EC8DE44AE44D0992ec3e2d9f1aBb6207D864",
CoreContractAddress: "0x4527BE8f31E2ebFbEF4fCADDb5a17447B27d2aef",
ChainID: big.NewInt(3), // Ropsten
}
Mainnet = Environment{
BaseAPIPath: "https://api.x.immutable.com",
EthereumRPC: "https://eth-mainnet.alchemyapi.io/v2/",
RegistrationContractAddress: "0x72a06bf2a1CE5e39cBA06c0CAb824960B587d64c",
CoreContractAddress: "0x5FDCCA53617f4d2b9134B29090C87D01058e27e9",
ChainID: big.NewInt(1),
}
)
// Config is used to initialise NewClient object.
type Config struct {
AlchemyAPIKey string
APIConfig *api.Configuration
Environment
}
// Environment holds Ethereum network and contract address information.
type Environment struct {
BaseAPIPath string
EthereumRPC string
RegistrationContractAddress string
CoreContractAddress string
ChainID *big.Int
}
// Client implements functions to get the work done with Immutable X API.
// It manages communication with the Immutable X API.
type Client struct {
Environment Environment
EthClient *ethclient.Client
RegistrationContract *contracts.Registration
CoreContract *contracts.Core
tradesAPI api.TradesApi
ordersAPI api.OrdersApi
transfersAPI api.TransfersApi
depositsAPI api.DepositsApi
withdrawalsAPI api.WithdrawalsApi
mintsAPI api.MintsApi
assetsAPI api.AssetsApi
usersAPI api.UsersApi
metadataAPI api.MetadataApi
metadataRefreshesAPI api.MetadataRefreshesApi
tokensAPI api.TokensApi
balancesAPI api.BalancesApi
projectsAPI api.ProjectsApi
collectionsAPI api.CollectionsApi
api.EncodingApi
}
// NewClient creates a new Client. Requires config to setup and initialise.
// See examples for usage reference.
func NewClient(cfg *Config) (*Client, error) {
c := Client{
Environment: cfg.Environment,
}
ethClient, err := ethclient.Dial(cfg.EthereumRPC + cfg.AlchemyAPIKey)
if err != nil {
return nil, err
}
c.EthClient = ethClient
cfg.APIConfig.Servers = api.ServerConfigurations{{URL: cfg.BaseAPIPath}}
apiClient := api.NewAPIClient(cfg.APIConfig)
c.assetsAPI = apiClient.AssetsApi
c.balancesAPI = apiClient.BalancesApi
c.collectionsAPI = apiClient.CollectionsApi
c.depositsAPI = apiClient.DepositsApi
c.EncodingApi = apiClient.EncodingApi
c.metadataAPI = apiClient.MetadataApi
c.mintsAPI = apiClient.MintsApi
c.ordersAPI = apiClient.OrdersApi
c.projectsAPI = apiClient.ProjectsApi
c.tokensAPI = apiClient.TokensApi
c.tradesAPI = apiClient.TradesApi
c.transfersAPI = apiClient.TransfersApi
c.usersAPI = apiClient.UsersApi
c.withdrawalsAPI = apiClient.WithdrawalsApi
if err := c.attachCoreContract(context.TODO()); err != nil {
return nil, err
}
if err := c.attachRegistrationContract(context.TODO()); err != nil {
return nil, err
}
return &c, nil
}