fix(sdk): support bigint spending limit amounts - #195
Open
2wheeh wants to merge 1 commit into
Open
Conversation
|
@2wheeh is attempting to deploy a commit to the squads Team on Vercel. A member of the Team first needs to authorize it. |
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
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.
Summary
Fix the
spendingLimitUsepublic wrappers to accept values across the fullu64range without exposingBNor@metaplex-foundation/beettypes in the public wrapper API.The generated
SpendingLimitUseArgs.amountfield usesbeet.bignum, which is defined asnumber | BN, while the instruction, transaction, and RPC wrappers previously accepted onlynumber.JavaScript numbers cannot safely represent the full
u64range. The wrappers now acceptnumber | bigintand convert the value toBNinternally at the generated serializer boundary.Existing callers passing
numberremain backward-compatible.Changes
amountfromnumbertonumber | bigintin:instructions.spendingLimitUsetransactions.spendingLimitUserpc.spendingLimitUseamounttoBNinternally before passing it to the generated serializer.number | bigint.u64::MAX.test:typescommand for running the compile-time test.The type test is intentionally not wired into the existing SDK build or CI pipeline to keep this fix scoped to the public API issue.
Testing
Run the compile-time API test:
Build the SDK:
Run the runtime serialization test:
The runtime regression test uses u64::MAX:
It verifies that a native bigint is serialized and decoded without precision loss.
The compile-time test was also mutation-tested by temporarily changing a wrapper back to amount: number. The test failed as expected, confirming that the original type regression is detected.