-
Notifications
You must be signed in to change notification settings - Fork 2
wasm-solana transaction building #109
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
lcovar
wants to merge
7
commits into
BTC-2929
Choose a base branch
from
BTC-2955
base: BTC-2929
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
8d2ef40 to
e601542
Compare
Add comprehensive Solana transaction parsing capabilities via WASM, providing types and structures compatible with BitGoJS's sdk-coin-sol. ## Rust Layer ### Transaction Deserialization (src/transaction.rs) - Deserialize legacy Solana transactions from wire format - Extract fee payer, blockhash, signatures, and account keys - Provide signable payload for signing operations ### Instruction Decoding (src/instructions/) - Decode System Program: Transfer, CreateAccount, NonceAdvance, NonceInitialize - Decode Stake Program: Initialize, Delegate, Deactivate, Withdraw, Authorize - Decode ComputeBudget: SetComputeUnitLimit, SetComputeUnitPrice - Decode SPL Token: TransferChecked via token and token-2022 programs - Decode ATA Program: CreateAssociatedTokenAccount, CloseAccount - Decode Memo Program - Unknown instruction fallback with raw data preservation ### High-Level Parser (src/parser.rs) - Combine CreateAccount + NonceInitialize into CreateNonceAccount - Combine CreateAccount + StakeInitialize + DelegateStake into StakingActivate - Detect durable nonce transactions and populate durableNonce field - Add stakingType field (NATIVE, JITO, MARINADE) to StakingActivate ### WASM Bindings (src/wasm/) - ParserNamespace::parse_transaction - returns ParsedTransaction as JsValue - TransactionNamespace - transaction inspection methods ## TypeScript Layer ### Transaction Wrapper (js/transaction.ts) - Transaction class wrapping WASM with typed methods - Access to fee payer, blockhash, signatures, instructions, account keys ### Parser Types (js/parser.ts) - Full TypeScript interfaces matching BitGoJS InstructionParams - ParsedTransaction interface with feePayer, nonce, durableNonce, instructionsData - parseTransaction() function with BigInt conversion for SetPriorityFee.fee ### Exports (js/index.ts) - Export Transaction class and parseTransaction function - Re-export all instruction parameter types ## Tests - BitGoJS compatibility tests using actual transaction fixtures - Transaction deserialization and inspection tests - Parser instruction type discrimination tests TICKET: BTC-2929
Add support for decoding SPL Stake Pool instructions used by Jito liquid staking. This enables WASM-based parsing of Jito staking transactions for parity with BitGoJS. Changes: - Add spl-stake-pool dependency for official Borsh deserialization - Add STAKE_POOL_PROGRAM_ID constant for SPoo1Ku8WFXoNDMHPsrGSTSG1Y47rzgn41SLUNakuHy - Add StakePoolDepositSol and StakePoolWithdrawStake instruction types - Add decode_stake_pool_instruction using official StakePoolInstruction enum - Add TypeScript interfaces for stake pool instructions - Add Jito transaction parsing tests using BitGoJS test fixtures Ticket: BTC-2932
Implements the core transaction building functionality using Solana SDK: - types.rs: TransactionIntent, Nonce (blockhash/durable), Instruction variants - build.rs: Transaction builder using solana-sdk 3.x types - Uses SDK instruction builders: system_ix::transfer(), advance_nonce_account(), etc. - Uses ComputeBudgetInstruction for priority fees Supported instructions: - Transfer, CreateAccount, NonceAdvance, NonceInitialize - Allocate, Assign, Memo, ComputeBudget Ticket: BTC-2955
Add support for building native staking instructions: - StakeInitialize: Initialize stake account with authorized staker/withdrawer - StakeDelegate: Delegate stake to a validator - StakeDeactivate: Deactivate a stake account - StakeWithdraw: Withdraw from a stake account - StakeAuthorize: Change stake account authorization Ticket: BTC-2955
Add support for building SPL Token instructions: - TokenTransfer: Transfer tokens using TransferChecked for safety - CreateAssociatedTokenAccount: Create ATAs with automatic address derivation - CloseAssociatedTokenAccount: Close token accounts and reclaim rent Supports both Token Program and Token-2022 via configurable program ID. Ticket: BTC-2955
Add transaction building support for SPL Stake Pool (Jito liquid staking): - StakePoolDepositSol: deposit SOL into stake pool, receive pool tokens - StakePoolWithdrawStake: withdraw stake by burning pool tokens Uses spl-stake-pool crate with BorshSerialize for proper instruction data encoding. Includes all required account metas for both operations. BTC-2955
…nd Jito
- Add TypeScript interfaces for all builder instruction types:
- Stake Program: StakeInitialize, StakeDelegate, StakeDeactivate,
StakeWithdraw, StakeAuthorize
- SPL Token: TokenTransfer, CreateAssociatedTokenAccount,
CloseAssociatedTokenAccount
- Jito Stake Pool: StakePoolDepositSol, StakePoolWithdrawStake
- Update parser types to include decimalPlaces and programId for
TokenTransferParams, and add StakeInitializeParams
- Add comprehensive TypeScript tests for all new instruction types:
- Stake Program tests (initialize, delegate, deactivate, withdraw,
full staking flow)
- SPL Token tests (transfer, create ATA, close ATA, transfer with ATA)
- Jito Stake Pool tests (deposit sol, withdraw stake, deposit with ATA)
All 73 tests passing.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1a49cef to
7e6fe43
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
No description provided.