Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
all:

clone-injective-indexer:
git clone https://github.com/InjectiveLabs/injective-indexer.git -b v1.16.0-rc2 --depth 1 --single-branch
git clone https://github.com/InjectiveLabs/injective-indexer.git -b v1.16.3 --depth 1 --single-branch

clone-injective-core:
git clone https://github.com/InjectiveLabs/injective-core.git -b v1.16.0-beta.2 --depth 1 --single-branch
Expand Down
108 changes: 108 additions & 0 deletions client/chain/chain.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"

erc20types "github.com/InjectiveLabs/sdk-go/chain/erc20/types"
evmtypes "github.com/InjectiveLabs/sdk-go/chain/evm/types"
exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types"
exchangev2types "github.com/InjectiveLabs/sdk-go/chain/exchange/types/v2"
permissionstypes "github.com/InjectiveLabs/sdk-go/chain/permissions/types"
Expand Down Expand Up @@ -452,6 +454,20 @@ type ChainClient interface {
FetchTxFeesParams(ctx context.Context) (*txfeestypes.QueryParamsResponse, error)
FetchEipBaseFee(ctx context.Context) (*txfeestypes.QueryEipBaseFeeResponse, error)

// ERC20 module
FetchAllTokenPairs(ctx context.Context) (*erc20types.QueryAllTokenPairsResponse, error)
FetchTokenPairByDenom(ctx context.Context, bankDenom string) (*erc20types.QueryTokenPairByDenomResponse, error)
FetchTokenPairByERC20Address(ctx context.Context, erc20Address string) (*erc20types.QueryTokenPairByERC20AddressResponse, error)

// EVM module
FetchEVMAccount(ctx context.Context, evmAddress string) (*evmtypes.QueryAccountResponse, error)
FetchEVMCosmosAccount(ctx context.Context, address string) (*evmtypes.QueryCosmosAccountResponse, error)
FetchEVMValidatorAccount(ctx context.Context, consAddress string) (*evmtypes.QueryValidatorAccountResponse, error)
FetchEVMBalance(ctx context.Context, address string) (*evmtypes.QueryBalanceResponse, error)
FetchEVMStorage(ctx context.Context, address string, key *string) (*evmtypes.QueryStorageResponse, error)
FetchEVMCode(ctx context.Context, address string) (*evmtypes.QueryCodeResponse, error)
FetchEVMBaseFee(ctx context.Context) (*evmtypes.QueryBaseFeeResponse, error)

CurrentChainGasPrice() int64
SetGasPrice(gasPrice int64)

Expand Down Expand Up @@ -492,6 +508,8 @@ type chainClient struct {
chainStreamClient chainstreamtypes.StreamClient
chainStreamV2Client chainstreamv2types.StreamClient
distributionQueryClient distributiontypes.QueryClient
erc20QueryClient erc20types.QueryClient
evmQueryClient evmtypes.QueryClient
exchangeQueryClient exchangetypes.QueryClient
exchangeV2QueryClient exchangev2types.QueryClient
ibcChannelQueryClient ibcchanneltypes.QueryClient
Expand Down Expand Up @@ -596,6 +614,8 @@ func NewChainClient(
chainStreamClient: chainstreamtypes.NewStreamClient(chainStreamConn),
chainStreamV2Client: chainstreamv2types.NewStreamClient(chainStreamConn),
distributionQueryClient: distributiontypes.NewQueryClient(conn),
erc20QueryClient: erc20types.NewQueryClient(conn),
evmQueryClient: evmtypes.NewQueryClient(conn),
exchangeQueryClient: exchangetypes.NewQueryClient(conn),
exchangeV2QueryClient: exchangev2types.NewQueryClient(conn),
ibcChannelQueryClient: ibcchanneltypes.NewQueryClient(conn),
Expand Down Expand Up @@ -3586,6 +3606,94 @@ func (c *chainClient) GetNetwork() common.Network {
return c.network
}

// ERC20 module

func (c *chainClient) FetchAllTokenPairs(ctx context.Context) (*erc20types.QueryAllTokenPairsResponse, error) {
req := &erc20types.QueryAllTokenPairsRequest{}
res, err := common.ExecuteCall(ctx, c.network.ChainCookieAssistant, c.erc20QueryClient.AllTokenPairs, req)

return res, err
}

func (c *chainClient) FetchTokenPairByDenom(ctx context.Context, bankDenom string) (*erc20types.QueryTokenPairByDenomResponse, error) {
req := &erc20types.QueryTokenPairByDenomRequest{
BankDenom: bankDenom,
}
res, err := common.ExecuteCall(ctx, c.network.ChainCookieAssistant, c.erc20QueryClient.TokenPairByDenom, req)

return res, err
}

func (c *chainClient) FetchTokenPairByERC20Address(ctx context.Context, erc20Address string) (*erc20types.QueryTokenPairByERC20AddressResponse, error) {
req := &erc20types.QueryTokenPairByERC20AddressRequest{
Erc20Address: erc20Address,
}
res, err := common.ExecuteCall(ctx, c.network.ChainCookieAssistant, c.erc20QueryClient.TokenPairByERC20Address, req)

return res, err
}

// EVM module

func (c *chainClient) FetchEVMAccount(ctx context.Context, address string) (*evmtypes.QueryAccountResponse, error) {
req := &evmtypes.QueryAccountRequest{
Address: address,
}
res, err := common.ExecuteCall(ctx, c.network.ChainCookieAssistant, c.evmQueryClient.Account, req)
return res, err
}

func (c *chainClient) FetchEVMCosmosAccount(ctx context.Context, address string) (*evmtypes.QueryCosmosAccountResponse, error) {
req := &evmtypes.QueryCosmosAccountRequest{
Address: address,
}
res, err := common.ExecuteCall(ctx, c.network.ChainCookieAssistant, c.evmQueryClient.CosmosAccount, req)
return res, err
}

func (c *chainClient) FetchEVMValidatorAccount(ctx context.Context, consAddress string) (*evmtypes.QueryValidatorAccountResponse, error) {
req := &evmtypes.QueryValidatorAccountRequest{
ConsAddress: consAddress,
}
res, err := common.ExecuteCall(ctx, c.network.ChainCookieAssistant, c.evmQueryClient.ValidatorAccount, req)
return res, err
}

func (c *chainClient) FetchEVMBalance(ctx context.Context, address string) (*evmtypes.QueryBalanceResponse, error) {
req := &evmtypes.QueryBalanceRequest{
Address: address,
}
res, err := common.ExecuteCall(ctx, c.network.ChainCookieAssistant, c.evmQueryClient.Balance, req)
return res, err
}

func (c *chainClient) FetchEVMStorage(ctx context.Context, address string, key *string) (*evmtypes.QueryStorageResponse, error) {
req := &evmtypes.QueryStorageRequest{
Address: address,
}

if key != nil {
req.Key = *key
}

res, err := common.ExecuteCall(ctx, c.network.ChainCookieAssistant, c.evmQueryClient.Storage, req)
return res, err
}

func (c *chainClient) FetchEVMCode(ctx context.Context, address string) (*evmtypes.QueryCodeResponse, error) {
req := &evmtypes.QueryCodeRequest{
Address: address,
}
res, err := common.ExecuteCall(ctx, c.network.ChainCookieAssistant, c.evmQueryClient.Code, req)
return res, err
}

func (c *chainClient) FetchEVMBaseFee(ctx context.Context) (*evmtypes.QueryBaseFeeResponse, error) {
req := &evmtypes.QueryBaseFeeRequest{}
res, err := common.ExecuteCall(ctx, c.network.ChainCookieAssistant, c.evmQueryClient.BaseFee, req)
return res, err
}

// SyncBroadcastMsg sends Tx to chain and waits until Tx is included in block.
func (c *chainClient) SyncBroadcastMsg(msgs ...sdk.Msg) (*txtypes.BroadcastTxResponse, error) {
req, res, err := c.BroadcastMsg(txtypes.BroadcastMode_BROADCAST_MODE_SYNC, msgs...)
Expand Down
44 changes: 44 additions & 0 deletions client/chain/chain_test_support.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ import (
ethcommon "github.com/ethereum/go-ethereum/common"
"google.golang.org/grpc"

erc20types "github.com/InjectiveLabs/sdk-go/chain/erc20/types"
evmtypes "github.com/InjectiveLabs/sdk-go/chain/evm/types"
exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types"
exchangev2types "github.com/InjectiveLabs/sdk-go/chain/exchange/types/v2"
permissionstypes "github.com/InjectiveLabs/sdk-go/chain/permissions/types"
Expand Down Expand Up @@ -1165,6 +1167,48 @@ func (c *MockChainClient) FetchEipBaseFee(ctx context.Context) (*txfeestypes.Que
return &txfeestypes.QueryEipBaseFeeResponse{}, nil
}

// ERC20 module
func (c *MockChainClient) FetchAllTokenPairs(ctx context.Context) (*erc20types.QueryAllTokenPairsResponse, error) {
return &erc20types.QueryAllTokenPairsResponse{}, nil
}

func (c *MockChainClient) FetchTokenPairByDenom(ctx context.Context, bankDenom string) (*erc20types.QueryTokenPairByDenomResponse, error) {
return &erc20types.QueryTokenPairByDenomResponse{}, nil
}

func (c *MockChainClient) FetchTokenPairByERC20Address(ctx context.Context, erc20Address string) (*erc20types.QueryTokenPairByERC20AddressResponse, error) {
return &erc20types.QueryTokenPairByERC20AddressResponse{}, nil
}

// EVM module
func (c *MockChainClient) FetchEVMAccount(ctx context.Context, address string) (*evmtypes.QueryAccountResponse, error) {
return &evmtypes.QueryAccountResponse{}, nil
}

func (c *MockChainClient) FetchEVMCosmosAccount(ctx context.Context, address string) (*evmtypes.QueryCosmosAccountResponse, error) {
return &evmtypes.QueryCosmosAccountResponse{}, nil
}

func (c *MockChainClient) FetchEVMValidatorAccount(ctx context.Context, consAddress string) (*evmtypes.QueryValidatorAccountResponse, error) {
return &evmtypes.QueryValidatorAccountResponse{}, nil
}

func (c *MockChainClient) FetchEVMBalance(ctx context.Context, address string) (*evmtypes.QueryBalanceResponse, error) {
return &evmtypes.QueryBalanceResponse{}, nil
}

func (c *MockChainClient) FetchEVMStorage(ctx context.Context, address string, key *string) (*evmtypes.QueryStorageResponse, error) {
return &evmtypes.QueryStorageResponse{}, nil
}

func (c *MockChainClient) FetchEVMCode(ctx context.Context, address string) (*evmtypes.QueryCodeResponse, error) {
return &evmtypes.QueryCodeResponse{}, nil
}

func (c *MockChainClient) FetchEVMBaseFee(ctx context.Context) (*evmtypes.QueryBaseFeeResponse, error) {
return &evmtypes.QueryBaseFeeResponse{}, nil
}

func (c *MockChainClient) CurrentChainGasPrice() int64 {
return int64(injectiveclient.DefaultGasPrice)
}
Expand Down
24 changes: 12 additions & 12 deletions examples/chain/12_ChainStream/example.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"encoding/json"
"fmt"

chainStreamModule "github.com/InjectiveLabs/sdk-go/chain/stream/types/v2"
chainstreamv2 "github.com/InjectiveLabs/sdk-go/chain/stream/types/v2"
"github.com/InjectiveLabs/sdk-go/client"
chainclient "github.com/InjectiveLabs/sdk-go/client/chain"
"github.com/InjectiveLabs/sdk-go/client/common"
Expand Down Expand Up @@ -39,40 +39,40 @@ func main() {
injUsdtMarket := "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe"
injUsdtPerpMarket := "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6"

req := chainStreamModule.StreamRequest{
BankBalancesFilter: &chainStreamModule.BankBalancesFilter{
req := chainstreamv2.StreamRequest{
BankBalancesFilter: &chainstreamv2.BankBalancesFilter{
Accounts: []string{"*"},
},
SpotOrdersFilter: &chainStreamModule.OrdersFilter{
SpotOrdersFilter: &chainstreamv2.OrdersFilter{
MarketIds: []string{injUsdtMarket},
SubaccountIds: []string{subaccountId},
},
DerivativeOrdersFilter: &chainStreamModule.OrdersFilter{
DerivativeOrdersFilter: &chainstreamv2.OrdersFilter{
MarketIds: []string{injUsdtPerpMarket},
SubaccountIds: []string{subaccountId},
},
SpotTradesFilter: &chainStreamModule.TradesFilter{
SpotTradesFilter: &chainstreamv2.TradesFilter{
MarketIds: []string{injUsdtMarket},
SubaccountIds: []string{"*"},
},
SubaccountDepositsFilter: &chainStreamModule.SubaccountDepositsFilter{
SubaccountDepositsFilter: &chainstreamv2.SubaccountDepositsFilter{
SubaccountIds: []string{subaccountId},
},
DerivativeOrderbooksFilter: &chainStreamModule.OrderbookFilter{
DerivativeOrderbooksFilter: &chainstreamv2.OrderbookFilter{
MarketIds: []string{injUsdtPerpMarket},
},
SpotOrderbooksFilter: &chainStreamModule.OrderbookFilter{
SpotOrderbooksFilter: &chainstreamv2.OrderbookFilter{
MarketIds: []string{injUsdtMarket},
},
PositionsFilter: &chainStreamModule.PositionsFilter{
PositionsFilter: &chainstreamv2.PositionsFilter{
SubaccountIds: []string{subaccountId},
MarketIds: []string{injUsdtPerpMarket},
},
DerivativeTradesFilter: &chainStreamModule.TradesFilter{
DerivativeTradesFilter: &chainstreamv2.TradesFilter{
SubaccountIds: []string{"*"},
MarketIds: []string{injUsdtPerpMarket},
},
OraclePriceFilter: &chainStreamModule.OraclePriceFilter{
OraclePriceFilter: &chainstreamv2.OraclePriceFilter{
Symbol: []string{"INJ", "USDT"},
},
}
Expand Down
93 changes: 93 additions & 0 deletions examples/chain/erc20/1_CreateTokenPair/example.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package main

import (
"fmt"
"os"
"time"

rpchttp "github.com/cometbft/cometbft/rpc/client/http"

erc20types "github.com/InjectiveLabs/sdk-go/chain/erc20/types"
chainclient "github.com/InjectiveLabs/sdk-go/client/chain"
"github.com/InjectiveLabs/sdk-go/client/common"
)

func main() {
network := common.LoadNetwork("testnet", "lb")
tmClient, err := rpchttp.New(network.TmEndpoint)
if err != nil {
panic(err)
}

senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring(
os.Getenv("HOME")+"/.injectived",
"injectived",
"file",
"inj-user",
"12345678",
"5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided
false,
)

if err != nil {
panic(err)
}

clientCtx, err := chainclient.NewClientContext(
network.ChainId,
senderAddress.String(),
cosmosKeyring,
)
if err != nil {
panic(err)
}
clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient)

chainClient, err := chainclient.NewChainClient(
clientCtx,
network,
)

if err != nil {
panic(err)
}

gasPrice := chainClient.CurrentChainGasPrice()
// adjust gas price to make it valid even if it changes between the time it is requested and the TX is broadcasted
gasPrice = int64(float64(gasPrice) * 1.1)
chainClient.SetGasPrice(gasPrice)

usdtDenom := "factory/inj10vkkttgxdeqcgeppu20x9qtyvuaxxev8qh0awq/usdt"
usdtERC20 := "0xdAC17F958D2ee523a2206206994597C13D831ec7"

msg := &erc20types.MsgCreateTokenPair{
Sender: senderAddress.String(),
TokenPair: erc20types.TokenPair{
BankDenom: usdtDenom,
Erc20Address: usdtERC20,
},
}

// AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg
err = chainClient.QueueBroadcastMsg(msg)

if err != nil {
fmt.Println(err)
}

time.Sleep(time.Second * 5)

gasFee, err := chainClient.GetGasFee()

if err != nil {
fmt.Println(err)
return
}

fmt.Println("gas fee:", gasFee, "INJ")

gasPrice = chainClient.CurrentChainGasPrice()
// adjust gas price to make it valid even if it changes between the time it is requested and the TX is broadcasted
gasPrice = int64(float64(gasPrice) * 1.1)
chainClient.SetGasPrice(gasPrice)
}
Loading
Loading