Go-Bot Integration
Polygolem ships a small, intentionally narrow public SDK under pkg/. The
internal/ tree is not part of the stability promise and may change between
minor releases — only depend on pkg/*.
Install
go get github.com/TrebuchetDynamics/polygolemThen import only the packages you need:
import ( "github.com/TrebuchetDynamics/polygolem/pkg/clob" "github.com/TrebuchetDynamics/polygolem/pkg/orderbook" "github.com/TrebuchetDynamics/polygolem/pkg/marketresolver" "github.com/TrebuchetDynamics/polygolem/pkg/bridge" "github.com/TrebuchetDynamics/polygolem/pkg/gamma" "github.com/TrebuchetDynamics/polygolem/pkg/pagination" "github.com/TrebuchetDynamics/polygolem/pkg/relayer" "github.com/TrebuchetDynamics/polygolem/pkg/settlement" "github.com/TrebuchetDynamics/polygolem/pkg/stream" "github.com/TrebuchetDynamics/polygolem/pkg/types" "github.com/TrebuchetDynamics/polygolem/pkg/universal")Read an order book
package main
import ( "context" "fmt"
"github.com/TrebuchetDynamics/polygolem/pkg/orderbook")
func main() { ctx := context.Background() reader := orderbook.NewReader("") // empty string = production CLOB
book, err := reader.OrderBook(ctx, "713210456792522125...") if err != nil { panic(err) } fmt.Println("best bid:", book.Bids[0].Price) fmt.Println("best ask:", book.Asks[0].Price)}Resolve a market by asset + timeframe
pkg/marketresolver is purpose-built for the go-bot strategy layer’s
“give me the active BTC 5m market right now” question:
import "github.com/TrebuchetDynamics/polygolem/pkg/marketresolver"
resolver := marketresolver.NewResolver("")
result := resolver.ResolveTokenIDs(ctx, "BTC", "5m")switch result.Status {case "available": fmt.Println("Up token:", result.UpTokenID) fmt.Println("Down token:", result.DownTokenID)case "unresolved": fmt.Println("No active 5m market right now")}Search Gamma
import ( "github.com/TrebuchetDynamics/polygolem/pkg/types" "github.com/TrebuchetDynamics/polygolem/pkg/universal")
client := universal.NewClient(universal.Config{})markets, err := client.Markets(ctx, &types.GetMarketsParams{Limit: 10})Gate live trading on settlement readiness
Before a live bot buys another market, prove the deposit wallet can also settle winning positions through the official V2 path:
import "github.com/TrebuchetDynamics/polygolem/pkg/settlement"
readiness, err := settlement.CheckReadiness(ctx, dataClient, owner, depositWallet, settlement.ReadinessOptions{ RPCURL: polygonRPCURL, RelayerConfigured: true,})if err != nil { return err}if !readiness.Ready { return fmt.Errorf("settlement not ready: %s: %s", readiness.Status, readiness.NextAction)}The check is read-only. It verifies deposit-wallet bytecode, relayer credentials supplied by the caller, Data API reachability, and CTF approvals for both V2 collateral adapters.
Pagination helper
When the upstream API uses cursors, pkg/pagination.CollectAll walks every
page concurrently:
import "github.com/TrebuchetDynamics/polygolem/pkg/pagination"
all, err := pagination.CollectAll(ctx, func(ctx context.Context, cursor string) ([]gamma.Market, string, error) { resp, err := client.MarketsKeyset(ctx, gamma.MarketsKeysetParams{Cursor: cursor}) if err != nil { return nil, "", err } return resp.Data, resp.NextCursor, nil})What the SDK does not expose
- Hidden live onboarding.
pkg/relayer.OnboardDepositWalletexposes the relayer-sponsoreddeploy -> approvesequence, but funding, CLOB balance sync, and preflight remain explicit operator steps. - Live execution gates. Those are CLI-layer concerns; embedding them would bypass the operator confirmation surface.
- Mutable global state. Every package returns its own client instance.
Reference
- Go SDK Reference — every method on every public type
docs/ARCHITECTURE.md— package boundaries and dependency direction- Architecture — high-level summary