Skip to content

M3 #27: Rust SDK: Instruction builders for transaction construction#67

Merged
joaquinbejar merged 1 commit into
mainfrom
M3/issue-27-instruction-builders
Feb 1, 2026
Merged

M3 #27: Rust SDK: Instruction builders for transaction construction#67
joaquinbejar merged 1 commit into
mainfrom
M3/issue-27-instruction-builders

Conversation

@joaquinbejar

Copy link
Copy Markdown
Owner

Summary

Implements instruction builders that construct Solana transactions for all Matchbook operations. These builders handle account resolution, PDA derivation, and instruction serialization.

Changes

New Module: sdk/src/instructions/

File Description
mod.rs Module exports
pda.rs PDA derivation utilities
create_market.rs CreateMarketBuilder
create_open_orders.rs CreateOpenOrdersBuilder
deposit.rs DepositBuilder
withdraw.rs WithdrawBuilder
place_order.rs PlaceOrderBuilder
cancel_order.rs CancelOrderBuilder
cancel_all_orders.rs CancelAllOrdersBuilder
match_orders.rs MatchOrdersBuilder
consume_events.rs ConsumeEventsBuilder

Instruction Builders

  • CreateMarketBuilder: Create new market with all associated PDAs
  • CreateOpenOrdersBuilder: Create user's open orders account
  • DepositBuilder: Deposit base/quote tokens
  • WithdrawBuilder: Withdraw base/quote tokens
  • PlaceOrderBuilder: Place order with side, price, quantity, order type
  • CancelOrderBuilder: Cancel specific order by ID
  • CancelAllOrdersBuilder: Cancel all orders with optional side filter
  • MatchOrdersBuilder: Trigger order matching with maker accounts
  • ConsumeEventsBuilder: Process events with user accounts

PDA Derivation Utilities

  • derive_market_address: Seeds [b"market", base_mint, quote_mint]
  • derive_bids_address: Seeds [market, b"bids"]
  • derive_asks_address: Seeds [market, b"asks"]
  • derive_event_queue_address: Seeds [market, b"event_queue"]
  • derive_base_vault_address: Seeds [market, b"base_vault"]
  • derive_quote_vault_address: Seeds [market, b"quote_vault"]
  • derive_open_orders_address: Seeds [b"open_orders", market, owner]
  • MarketPdas: Derive all market PDAs at once

Builder Pattern Features

  • Fluent API with method chaining
  • Automatic PDA derivation
  • Borsh serialization for instruction data
  • Error handling for missing required fields
  • Optional fields with sensible defaults

Dependencies

  • Add solana-sdk v2.2 to workspace
  • Add borsh v1.5 to workspace

Technical Decisions

  • Builder pattern: Each instruction uses a builder with fluent API for ergonomic construction
  • Automatic PDA derivation: Builders derive all required PDAs automatically
  • Borsh serialization: Instruction data serialized with borsh matching on-chain format
  • Placeholder discriminators: Using placeholder values; actual discriminators will match on-chain program

Testing

  • 54 unit tests for instruction builders
  • PDA derivation tests
  • Builder chain tests
  • Missing field error tests
  • Account list verification tests

Checklist

  • Code follows .internalDoc/09-rust-guidelines.md
  • Documentation added for all public items
  • No warnings from cargo clippy
  • cargo fmt passes
  • All tests pass

Closes #27

- Add instructions module to SDK with builders for all operations:
  - CreateMarketBuilder: Create new market with PDAs
  - CreateOpenOrdersBuilder: Create user's open orders account
  - DepositBuilder: Deposit tokens to open orders
  - WithdrawBuilder: Withdraw tokens from open orders
  - PlaceOrderBuilder: Place order with side/price/quantity
  - CancelOrderBuilder: Cancel specific order by ID
  - CancelAllOrdersBuilder: Cancel all orders with limit
  - MatchOrdersBuilder: Trigger order matching
  - ConsumeEventsBuilder: Process events from queue
- Add PDA derivation utilities:
  - derive_market_address
  - derive_bids_address / derive_asks_address
  - derive_event_queue_address
  - derive_base_vault_address / derive_quote_vault_address
  - derive_open_orders_address
  - MarketPdas: derive all market PDAs at once
- Builder pattern features:
  - Fluent API with method chaining
  - Automatic PDA derivation
  - Borsh serialization for instruction data
  - Error handling for missing required fields
- Add solana-sdk and borsh to workspace dependencies
- 54 unit tests for instruction builders
@joaquinbejar joaquinbejar added this to the M3: Client SDKs milestone Feb 1, 2026
@joaquinbejar joaquinbejar merged commit 1c29417 into main Feb 1, 2026
5 checks passed
@joaquinbejar joaquinbejar deleted the M3/issue-27-instruction-builders branch February 2, 2026 09:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Rust SDK: Instruction builders for transaction construction

1 participant