Skip to content

Commit abb3094

Browse files
authored
Merge pull request #30 from InjectiveLabs/f/load_metadata_examples
Refactor sdk
2 parents ab3c602 + 90f475a commit abb3094

File tree

74 files changed

+407
-253
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+407
-253
lines changed

client/chain/chain.go

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/hex"
66
"encoding/json"
77
"math/big"
8+
"strconv"
89
common "github.com/InjectiveLabs/sdk-go/client/common"
910
chaintypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types"
1011
txtypes "github.com/cosmos/cosmos-sdk/types/tx"
@@ -55,13 +56,9 @@ type ChainClient interface {
5556
GetBankBalances(ctx context.Context, address string) (*banktypes.QueryAllBalancesResponse, error)
5657

5758
DefaultSubaccount(acc cosmtypes.AccAddress) eth.Hash
58-
GetSpotQuantity(value decimal.Decimal, minTickSize cosmtypes.Dec, baseDecimals int) (qty cosmtypes.Dec)
59-
GetSpotPrice(price decimal.Decimal, baseDecimals int, quoteDecimals int, minPriceTickSize cosmtypes.Dec) cosmtypes.Dec
60-
GetDerivativeQuantity(value decimal.Decimal, minTickSize cosmtypes.Dec) (qty cosmtypes.Dec)
61-
GetDerivativePrice(value, tickSize cosmtypes.Dec) cosmtypes.Dec
6259

63-
SpotOrder(defaultSubaccountID eth.Hash, d *SpotOrderData) *exchangetypes.SpotOrder
64-
DerivativeOrder(defaultSubaccountID eth.Hash, d *DerivativeOrderData) *exchangetypes.DerivativeOrder
60+
SpotOrder(defaultSubaccountID eth.Hash, network common.Network, d *SpotOrderData) *exchangetypes.SpotOrder
61+
DerivativeOrder(defaultSubaccountID eth.Hash, network common.Network, d *DerivativeOrderData) *exchangetypes.DerivativeOrder
6562
OrderCancel(defaultSubaccountID eth.Hash, d *OrderCancelData) *exchangetypes.OrderData
6663

6764
Close()
@@ -543,7 +540,7 @@ func formatPriceToTickSize(value, tickSize cosmtypes.Dec) cosmtypes.Dec {
543540
}
544541

545542

546-
func (c *chainClient) GetSpotQuantity(value decimal.Decimal, minTickSize cosmtypes.Dec, baseDecimals int) (qty cosmtypes.Dec) {
543+
func GetSpotQuantity(value decimal.Decimal, minTickSize cosmtypes.Dec, baseDecimals int) (qty cosmtypes.Dec) {
547544
mid, _ := cosmtypes.NewDecFromStr(value.String())
548545
bStr := decimal.New(1, int32(baseDecimals)).String()
549546
baseDec, _ := cosmtypes.NewDecFromStr(bStr)
@@ -553,7 +550,7 @@ func (c *chainClient) GetSpotQuantity(value decimal.Decimal, minTickSize cosmtyp
553550
return qty
554551
}
555552

556-
func (c *chainClient) GetSpotPrice(price decimal.Decimal, baseDecimals int, quoteDecimals int, minPriceTickSize cosmtypes.Dec) cosmtypes.Dec {
553+
func GetSpotPrice(price decimal.Decimal, baseDecimals int, quoteDecimals int, minPriceTickSize cosmtypes.Dec) cosmtypes.Dec {
557554
scale := decimal.New(1, int32(quoteDecimals-baseDecimals))
558555
priceStr := scale.Mul(price).StringFixed(18)
559556
decPrice, err := cosmtypes.NewDecFromStr(priceStr)
@@ -566,7 +563,7 @@ func (c *chainClient) GetSpotPrice(price decimal.Decimal, baseDecimals int, quot
566563
return realPrice
567564
}
568565

569-
func (c *chainClient) GetDerivativeQuantity(value decimal.Decimal, minTickSize cosmtypes.Dec) (qty cosmtypes.Dec) {
566+
func GetDerivativeQuantity(value decimal.Decimal, minTickSize cosmtypes.Dec) (qty cosmtypes.Dec) {
570567
mid := cosmtypes.MustNewDecFromStr(value.StringFixed(18))
571568
baseDec := cosmtypes.OneDec()
572569
scale := baseDec.Quo(minTickSize)
@@ -575,7 +572,7 @@ func (c *chainClient) GetDerivativeQuantity(value decimal.Decimal, minTickSize c
575572
return qty
576573
}
577574

578-
func (c *chainClient) GetDerivativePrice(value, tickSize cosmtypes.Dec) cosmtypes.Dec {
575+
func GetDerivativePrice(value, tickSize cosmtypes.Dec) cosmtypes.Dec {
579576
residue := new(big.Int).Mod(value.BigInt(), tickSize.BigInt())
580577
formattedValue := new(big.Int).Sub(value.BigInt(), residue)
581578
p := decimal.NewFromBigInt(formattedValue, -18).String()
@@ -584,29 +581,47 @@ func (c *chainClient) GetDerivativePrice(value, tickSize cosmtypes.Dec) cosmtype
584581
}
585582

586583

587-
func (c *chainClient) SpotOrder(defaultSubaccountID eth.Hash, d *SpotOrderData) *exchangetypes.SpotOrder {
584+
func (c *chainClient) SpotOrder(defaultSubaccountID eth.Hash, network common.Network, d *SpotOrderData) *exchangetypes.SpotOrder {
585+
586+
baseDecimals := common.LoadMetadata(network, d.MarketId).Base
587+
quoteDecimals := common.LoadMetadata(network, d.MarketId).Quote
588+
minPriceTickSize := common.LoadMetadata(network, d.MarketId).MinPriceTickSize
589+
minQuantityTickSize := common.LoadMetadata(network, d.MarketId).MinQuantityTickSize
590+
591+
orderSize := GetSpotQuantity(d.Quantity, cosmtypes.MustNewDecFromStr(strconv.FormatFloat(minQuantityTickSize, 'f', -1, 64)), baseDecimals)
592+
orderPrice := GetSpotPrice(d.Price, baseDecimals, quoteDecimals, cosmtypes.MustNewDecFromStr(strconv.FormatFloat(minPriceTickSize, 'f', -1, 64)))
593+
588594
return &exchangetypes.SpotOrder{
589595
MarketId: d.MarketId,
590596
OrderType: d.OrderType,
591597
OrderInfo: exchangetypes.OrderInfo{
592598
SubaccountId: defaultSubaccountID.Hex(),
593599
FeeRecipient: d.FeeRecipient,
594-
Price: d.Price,
595-
Quantity: d.Quantity,
600+
Price: orderPrice,
601+
Quantity: orderSize,
596602
},
597603
}
598604
}
599605

600-
func (c *chainClient) DerivativeOrder(defaultSubaccountID eth.Hash, d *DerivativeOrderData) *exchangetypes.DerivativeOrder {
606+
func (c *chainClient) DerivativeOrder(defaultSubaccountID eth.Hash, network common.Network, d *DerivativeOrderData) *exchangetypes.DerivativeOrder {
607+
608+
minPriceTickSize := common.LoadMetadata(network, d.MarketId).MinPriceTickSize
609+
minQuantityTickSize := common.LoadMetadata(network, d.MarketId).MinQuantityTickSize
610+
611+
margin := cosmtypes.MustNewDecFromStr(fmt.Sprint(d.Quantity)).Mul(d.Price).Quo(d.Leverage)
612+
orderSize := GetDerivativeQuantity(d.Quantity, cosmtypes.MustNewDecFromStr(strconv.FormatFloat(minQuantityTickSize, 'f', -1, 64)))
613+
orderPrice := GetDerivativePrice(d.Price, cosmtypes.MustNewDecFromStr(strconv.FormatFloat(minPriceTickSize, 'f', -1, 64)))
614+
orderMargin := GetDerivativePrice(margin, cosmtypes.MustNewDecFromStr(strconv.FormatFloat(minPriceTickSize, 'f', -1, 64)))
615+
601616
return &exchangetypes.DerivativeOrder{
602617
MarketId: d.MarketId,
603618
OrderType: d.OrderType,
604-
Margin: d.Margin,
619+
Margin: orderMargin,
605620
OrderInfo: exchangetypes.OrderInfo{
606621
SubaccountId: defaultSubaccountID.Hex(),
607622
FeeRecipient: d.FeeRecipient,
608-
Price: d.Price,
609-
Quantity: d.Quantity,
623+
Price: orderPrice,
624+
Quantity: orderSize,
610625
},
611626
}
612627
}
@@ -624,8 +639,7 @@ func (c *chainClient) OrderCancel(defaultSubaccountID eth.Hash, d *OrderCancelDa
624639
type DerivativeOrderData struct {
625640
OrderType exchangetypes.OrderType
626641
Price cosmtypes.Dec
627-
Margin cosmtypes.Dec
628-
Quantity cosmtypes.Dec
642+
Quantity decimal.Decimal
629643
Leverage cosmtypes.Dec
630644
FeeRecipient string
631645
MarketId string
@@ -634,8 +648,8 @@ type DerivativeOrderData struct {
634648

635649
type SpotOrderData struct {
636650
OrderType exchangetypes.OrderType
637-
Price cosmtypes.Dec
638-
Quantity cosmtypes.Dec
651+
Price decimal.Decimal
652+
Quantity decimal.Decimal
639653
FeeRecipient string
640654
MarketId string
641655
}

client/common/metadata/mainnet.ini

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,15 @@ min_display_price_tick_size = 0.0100
196196
min_quantity_tick_size = 10000.000000
197197
min_display_quantity_tick_size = 0.0100
198198

199+
[0xf04d1b7acf40b331d239fcff7950f98a4f2ab7adb2ceb8f65aa32ac29455d7b4]
200+
description = 'mainnet Spot HUAHUA/USDT'
201+
base = 6
202+
quote = 6
203+
min_price_tick_size = 0.000001000000000000
204+
min_display_price_tick_size = 0.000001
205+
min_quantity_tick_size = 100000000.000000
206+
min_display_quantity_tick_size = 100
207+
199208
[0x7f71c4fba375c964be8db7fc7a5275d974f8c6cdc4d758f2ac4997f106bb052b]
200209
description = 'mainnet Spot GF/USDT'
201210
base = 18
@@ -223,6 +232,15 @@ min_display_price_tick_size = 0.0100
223232
min_quantity_tick_size = 100000.000000
224233
min_display_quantity_tick_size = 0.1000
225234

235+
[0x572f05fd93a6c2c4611b2eba1a0a36e102b6a592781956f0128a27662d84f112]
236+
description = 'mainnet Spot APE/USDT'
237+
base = 18
238+
quote = 6
239+
min_price_tick_size = 0.000000000000001000
240+
min_display_price_tick_size = 0.0010
241+
min_quantity_tick_size = 10000000000000000.000000
242+
min_display_quantity_tick_size = 0.010
243+
226244
[0xfbc729e93b05b4c48916c1433c9f9c2ddb24605a73483303ea0f87a8886b52af]
227245
description = 'mainnet Spot INJ/UST'
228246
base = 18
@@ -358,3 +376,11 @@ decimals = 18
358376
peggy_denom = peggy0xBB0E17EF65F82Ab018d8EDd776e8DD940327B28b
359377
decimals = 18
360378

379+
[APE]
380+
peggy_denom = peggy0x4d224452801ACEd8B2F0aebE155379bb5D594381
381+
decimals = 18
382+
383+
[HUAHUA]
384+
peggy_denom = ibc/E7807A46C0B7B44B350DA58F51F278881B863EC4DCA94635DAB39E52C30766CB
385+
decimals = 6
386+

client/exchange/exchange.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -970,5 +970,5 @@ func (c *exchangeClient) GetTxByTxHash(ctx context.Context, hash string) (explor
970970

971971

972972
func (c *exchangeClient) Close() {
973-
c.Close()
973+
c.conn.Close()
974974
}

examples/chain/10_MsgBatchCancelDerivativeOrders/example.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
)
1515

1616
func main() {
17+
// network := common.LoadNetwork("mainnet", "k8s")
1718
network := common.LoadNetwork("testnet", "k8s")
1819
tmRPC, err := rpchttp.New(network.TmEndpoint, "/websocket")
1920
if err != nil {
@@ -72,12 +73,12 @@ func main() {
7273
msg.Sender = senderAddress.String()
7374
msg.Data = []exchangetypes.OrderData{*order}
7475
CosMsgs := []cosmtypes.Msg{msg}
75-
for i := 0; i < 1; i++ {
76-
err := chainClient.QueueBroadcastMsg(CosMsgs...)
77-
if err != nil {
78-
fmt.Println(err)
79-
}
76+
77+
err = chainClient.QueueBroadcastMsg(CosMsgs...)
78+
79+
if err != nil {
80+
fmt.Println(err)
8081
}
81-
time.Sleep(time.Second * 5)
8282

83+
time.Sleep(time.Second * 5)
8384
}

examples/chain/11_MsgBatchCreateSpotLimitOrders/example.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
)
1616

1717
func main() {
18+
// network := common.LoadNetwork("mainnet", "k8s")
1819
network := common.LoadNetwork("testnet", "k8s")
1920
tmRPC, err := rpchttp.New(network.TmEndpoint, "/websocket")
2021
if err != nil {
@@ -64,13 +65,11 @@ func main() {
6465
marketId := "0x0511ddc4e6586f3bfe1acb2dd905f8b8a82c97e1edaef654b12ca7e6031ca0fa"
6566
amount := decimal.NewFromFloat(2)
6667
price := decimal.NewFromFloat(22.5)
67-
orderSize := chainClient.GetSpotQuantity(amount, cosmtypes.MustNewDecFromStr("10000"), 6)
68-
orderPrice := chainClient.GetSpotPrice(price, 6, 6, cosmtypes.MustNewDecFromStr("0.01"))
6968

70-
order := chainClient.SpotOrder(defaultSubaccountID, &chainclient.SpotOrderData{
69+
order := chainClient.SpotOrder(defaultSubaccountID, network, &chainclient.SpotOrderData{
7170
OrderType: exchangetypes.OrderType_SELL,
72-
Quantity: orderSize,
73-
Price: orderPrice,
71+
Quantity: amount,
72+
Price: price,
7473
FeeRecipient: senderAddress.String(),
7574
MarketId: marketId,
7675
})
@@ -79,12 +78,12 @@ func main() {
7978
msg.Sender = senderAddress.String()
8079
msg.Orders = []exchangetypes.SpotOrder{*order}
8180
CosMsgs := []cosmtypes.Msg{msg}
82-
for i := 0; i < 1; i++ {
83-
err := chainClient.QueueBroadcastMsg(CosMsgs...)
84-
if err != nil {
85-
fmt.Println(err)
86-
}
81+
82+
err = chainClient.QueueBroadcastMsg(CosMsgs...)
83+
84+
if err != nil {
85+
fmt.Println(err)
8786
}
88-
time.Sleep(time.Second * 5)
8987

88+
time.Sleep(time.Second * 5)
9089
}

examples/chain/12_MsgBatchCreateDerivativeLimitOrders/example.go

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
)
1616

1717
func main() {
18+
// network := common.LoadNetwork("mainnet", "k8s")
1819
network := common.LoadNetwork("testnet", "k8s")
1920
tmRPC, err := rpchttp.New(network.TmEndpoint, "/websocket")
2021
if err != nil {
@@ -65,17 +66,12 @@ func main() {
6566
amount := decimal.NewFromFloat(2)
6667
price := cosmtypes.MustNewDecFromStr("31000000000") //31,000
6768
leverage := cosmtypes.MustNewDecFromStr("2.5")
68-
margin := cosmtypes.MustNewDecFromStr(fmt.Sprint(amount)).Mul(price).Quo(leverage)
6969

70-
orderSize := chainClient.GetDerivativeQuantity(amount, cosmtypes.MustNewDecFromStr("0.0001"))
71-
orderPrice := chainClient.GetDerivativePrice(price, cosmtypes.MustNewDecFromStr("1000"))
72-
orderMargin := chainClient.GetDerivativePrice(margin, cosmtypes.MustNewDecFromStr("1000"))
73-
74-
order := chainClient.DerivativeOrder(defaultSubaccountID, &chainclient.DerivativeOrderData{
70+
order := chainClient.DerivativeOrder(defaultSubaccountID, network, &chainclient.DerivativeOrderData{
7571
OrderType: exchangetypes.OrderType_BUY,
76-
Quantity: orderSize,
77-
Price: orderPrice,
78-
Margin: orderMargin,
72+
Quantity: amount,
73+
Price: price,
74+
Leverage: leverage,
7975
FeeRecipient: senderAddress.String(),
8076
MarketId: marketId,
8177
})
@@ -84,12 +80,12 @@ func main() {
8480
msg.Sender = senderAddress.String()
8581
msg.Orders = []exchangetypes.DerivativeOrder{*order}
8682
CosMsgs := []cosmtypes.Msg{msg}
87-
for i := 0; i < 1; i++ {
88-
err := chainClient.QueueBroadcastMsg(CosMsgs...)
89-
if err != nil {
90-
fmt.Println(err)
91-
}
83+
84+
err = chainClient.QueueBroadcastMsg(CosMsgs...)
85+
86+
if err != nil {
87+
fmt.Println(err)
9288
}
93-
time.Sleep(time.Second * 5)
9489

90+
time.Sleep(time.Second * 5)
9591
}

examples/chain/13_MsgIncreasePositionMargin/example.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
)
1515

1616
func main() {
17+
// network := common.LoadNetwork("mainnet", "k8s")
1718
network := common.LoadNetwork("testnet", "k8s")
1819
tmRPC, err := rpchttp.New(network.TmEndpoint, "/websocket")
1920
if err != nil {
@@ -66,11 +67,11 @@ func main() {
6667
fmt.Println(err)
6768
}
6869

69-
for i := 0; i < 1; i++ {
70-
err := chainClient.QueueBroadcastMsg(msg)
71-
if err != nil {
72-
fmt.Println(err)
73-
}
70+
err = chainClient.QueueBroadcastMsg(msg)
71+
72+
if err != nil {
73+
fmt.Println(err)
7474
}
75+
7576
time.Sleep(time.Second * 5)
7677
}

examples/chain/15_MsgWithdraw/example.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
)
1515

1616
func main() {
17+
// network := common.LoadNetwork("mainnet", "k8s")
1718
network := common.LoadNetwork("testnet", "k8s")
1819
tmRPC, err := rpchttp.New(network.TmEndpoint, "/websocket")
1920
if err != nil {
@@ -66,11 +67,11 @@ func main() {
6667
fmt.Println(err)
6768
}
6869

69-
for i := 0; i < 1; i++ {
70-
err := chainClient.QueueBroadcastMsg(msg)
71-
if err != nil {
72-
fmt.Println(err)
73-
}
70+
err = chainClient.QueueBroadcastMsg(msg)
71+
72+
if err != nil {
73+
fmt.Println(err)
7474
}
75+
7576
time.Sleep(time.Second * 5)
7677
}

examples/chain/16_MsgSubaccountTransfer/example.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
)
1515

1616
func main() {
17+
// network := common.LoadNetwork("mainnet", "k8s")
1718
network := common.LoadNetwork("testnet", "k8s")
1819
tmRPC, err := rpchttp.New(network.TmEndpoint, "/websocket")
1920
if err != nil {
@@ -67,11 +68,11 @@ func main() {
6768
fmt.Println(err)
6869
}
6970

70-
for i := 0; i < 1; i++ {
71-
err := chainClient.QueueBroadcastMsg(msg)
72-
if err != nil {
73-
fmt.Println(err)
74-
}
71+
err = chainClient.QueueBroadcastMsg(msg)
72+
73+
if err != nil {
74+
fmt.Println(err)
7575
}
76+
7677
time.Sleep(time.Second * 5)
7778
}

0 commit comments

Comments
 (0)