Skip to content

Commit 8981967

Browse files
committed
Update examples and add in helper method
1 parent bb461f8 commit 8981967

File tree

5 files changed

+64
-16
lines changed

5 files changed

+64
-16
lines changed

sdk-clients/orderbook/api.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"errors"
77
"fmt"
8+
"time"
89

910
"github.com/1inch/1inch-sdk-go/common"
1011
)
@@ -98,6 +99,39 @@ func (api *api) GetOrder(ctx context.Context, params GetOrderParams) (*GetOrderB
9899
return NormalizeGetOrderByHashResponse(getOrderByHashResponse)
99100
}
100101

102+
// GetOrderWithSignature first looks up an order by hash, then does a second request to get the signature data
103+
func (api *api) GetOrderWithSignature(ctx context.Context, params GetOrderParams) (*OrderExtendedWithSignature, error) {
104+
105+
// First lookup the order by hash (no signature on this response)
106+
order, err := api.GetOrder(ctx, params)
107+
if err != nil {
108+
return nil, err
109+
}
110+
111+
// For free accounts, this sleep is required to avoid 429 errors
112+
if params.SleepBetweenSubrequests {
113+
time.Sleep(time.Second)
114+
}
115+
116+
// Second, lookup all orders by that creator (these orders will contain the signature data)
117+
allOrdersByCreator, err := api.GetOrdersByCreatorAddress(ctx, GetOrdersByCreatorAddressParams{
118+
CreatorAddress: order.OrderMaker,
119+
})
120+
121+
// Filter through the second set of orders to find the signature
122+
for _, o := range allOrdersByCreator {
123+
if o.OrderHash == params.OrderHash {
124+
return &OrderExtendedWithSignature{
125+
GetOrderByHashResponse: order.GetOrderByHashResponse,
126+
LimitOrderDataNormalized: order.LimitOrderDataNormalized,
127+
Signature: o.Signature,
128+
}, nil
129+
}
130+
}
131+
132+
return nil, errors.New("order not found")
133+
}
134+
101135
// GetAllOrders returns all orders in the Limit Order Protocol
102136
func (api *api) GetAllOrders(ctx context.Context, params GetAllOrdersParams) ([]OrderResponse, error) {
103137
u := fmt.Sprintf("/orderbook/v3.0/%d/all", api.chainId)

sdk-clients/orderbook/examples/create_and_fill_order/main.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,19 +88,29 @@ func main() {
8888
log.Fatalf("Request completed, but order creation status was a failure: %v\n", createOrderResponse)
8989
}
9090

91+
fmt.Println("Order created! Getting order hash...")
92+
9193
// Sleep to accommodate free-tier API keys
9294
time.Sleep(time.Second)
9395

9496
ordersByCreatorResponse, err := client.GetOrdersByCreatorAddress(ctx, orderbook.GetOrdersByCreatorAddressParams{
9597
CreatorAddress: client.Wallet.Address().Hex(),
9698
})
9799

98-
fmt.Printf("Order created! \nOrder hash: %v\n", ordersByCreatorResponse[0].OrderHash)
100+
fmt.Printf("Order hash: %v\n", ordersByCreatorResponse[0].OrderHash)
101+
fmt.Println("Getting signature...")
99102

100103
// Sleep to accommodate free-tier API keys
101104
time.Sleep(time.Second)
102105

103-
fillOrderData, err := client.GetFillOrderCalldata(ordersByCreatorResponse[0], nil)
106+
orderWithSignature, err := client.GetOrderWithSignature(ctx, orderbook.GetOrderParams{
107+
OrderHash: ordersByCreatorResponse[0].OrderHash,
108+
SleepBetweenSubrequests: true,
109+
})
110+
111+
fmt.Println("Getting retrieved! Filling order...")
112+
113+
fillOrderData, err := client.GetFillOrderCalldata(orderWithSignature, nil)
104114
if err != nil {
105115
log.Fatalf("Failed to get fill order calldata: %v", err)
106116
}

sdk-clients/orderbook/examples/fill_order/main.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,11 @@ func main() {
3939
}
4040
client, err := orderbook.NewClient(config)
4141

42-
getOrderResponse, err := client.GetOrder(ctx, orderbook.GetOrderParams{
43-
OrderHash: limitOrderHash,
44-
})
42+
params := orderbook.GetOrderParams{
43+
OrderHash: limitOrderHash,
44+
SleepBetweenSubrequests: true,
45+
}
46+
getOrderResponse, err := client.GetOrderWithSignature(ctx, params)
4547

4648
takerTraits := orderbook.NewTakerTraits(orderbook.TakerTraitsParams{
4749
Extension: getOrderResponse.Data.Extension,

sdk-clients/orderbook/orderbook_types_manual.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ type GetOrdersByCreatorAddressParams struct {
3131
}
3232

3333
type GetOrderParams struct {
34-
OrderHash string
34+
OrderHash string
35+
SleepBetweenSubrequests bool // For free accounts, this should be set to true to avoid 429 errors when using the GetOrderWithSignature method
3536
}
3637

3738
type GetAllOrdersParams struct {
@@ -144,6 +145,12 @@ type GetOrderByHashResponseExtended struct {
144145
LimitOrderDataNormalized NormalizedLimitOrderData
145146
}
146147

148+
type OrderExtendedWithSignature struct {
149+
GetOrderByHashResponse
150+
LimitOrderDataNormalized NormalizedLimitOrderData
151+
Signature string
152+
}
153+
147154
type NormalizedLimitOrderData struct {
148155
Salt *big.Int
149156
MakerAsset *big.Int

sdk-clients/orderbook/web3data.go

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,10 @@ func (c *Client) GetSeriesNonce(ctx context.Context, publicAddress gethCommon.Ad
3939
return nonce, nil
4040
}
4141

42-
func (c *Client) GetFillOrderCalldata(orderResponse *OrderResponse, takerTraits *TakerTraits) ([]byte, error) {
43-
44-
orderResponseExtended, err := NormalizeOrderResponse(orderResponse)
45-
if err != nil {
46-
return nil, err
47-
}
42+
func (c *Client) GetFillOrderCalldata(order *OrderExtendedWithSignature, takerTraits *TakerTraits) ([]byte, error) {
4843

4944
var function string
50-
if orderResponseExtended.Data.Extension == "0x" {
45+
if order.Data.Extension == "0x" {
5146
function = "fillOrder"
5247
} else {
5348
if takerTraits == nil {
@@ -57,7 +52,7 @@ func (c *Client) GetFillOrderCalldata(orderResponse *OrderResponse, takerTraits
5752
function = "fillOrderArgs"
5853
}
5954

60-
compressedSignature, err := CompressSignature(orderResponseExtended.Signature[2:])
55+
compressedSignature, err := CompressSignature(order.Signature[2:])
6156
if err != nil {
6257
return nil, err
6358
}
@@ -76,13 +71,13 @@ func (c *Client) GetFillOrderCalldata(orderResponse *OrderResponse, takerTraits
7671

7772
switch function {
7873
case "fillOrder":
79-
fillOrderData, err = c.AggregationRouterV6.Pack(function, orderResponseExtended.LimitOrderDataNormalized, rCompressed, vsCompressed, orderResponseExtended.LimitOrderDataNormalized.TakingAmount, big.NewInt(0))
74+
fillOrderData, err = c.AggregationRouterV6.Pack(function, order.LimitOrderDataNormalized, rCompressed, vsCompressed, order.LimitOrderDataNormalized.TakingAmount, big.NewInt(0))
8075
if err != nil {
8176
return nil, err
8277
}
8378
case "fillOrderArgs":
8479
takerTraitsEncoded := takerTraits.Encode()
85-
fillOrderData, err = c.AggregationRouterV6.Pack(function, orderResponseExtended.LimitOrderDataNormalized, rCompressed, vsCompressed, orderResponseExtended.LimitOrderDataNormalized.TakingAmount, takerTraitsEncoded.TraitFlags, takerTraitsEncoded.Args)
80+
fillOrderData, err = c.AggregationRouterV6.Pack(function, order.LimitOrderDataNormalized, rCompressed, vsCompressed, order.LimitOrderDataNormalized.TakingAmount, takerTraitsEncoded.TraitFlags, takerTraitsEncoded.Args)
8681
if err != nil {
8782
return nil, err
8883
}

0 commit comments

Comments
 (0)