Skip to content

Add fixed-point types#1560

Merged
lorisleiva merged 1 commit into
mainfrom
04-23-add_fixed-point_types
May 5, 2026
Merged

Add fixed-point types#1560
lorisleiva merged 1 commit into
mainfrom
04-23-add_fixed-point_types

Conversation

@lorisleiva
Copy link
Copy Markdown
Member

This PR is part of the stack implementing the fixed-point number types proposed in #1545. It lands the public type surface that every follow-up PR will build on.

Adds the four core types:

  • Signedness'signed' | 'unsigned'.
  • RoundingMode'floor' | 'ceil' | 'trunc' | 'round' | 'strict'. The 'round' mode breaks ties away from zero (e.g. 0.5 → 1, -0.5 → -1, -1.5 → -2), which is symmetric around zero and differs from Math.round. The 'strict' mode rejects inputs that would require rounding and throws instead.
  • BinaryFixedPoint<TSignedness, TTotalBits, TFractionalBits> — a fixed-point value whose scale is a power of 2.
  • DecimalFixedPoint<TSignedness, TTotalBits, TDecimals> — a fixed-point value whose scale is a power of 10.

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 24, 2026

⚠️ No Changeset found

Latest commit: b015176

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@bundlemon
Copy link
Copy Markdown

bundlemon Bot commented Apr 24, 2026

BundleMon

Files updated (4)
Status Path Size Limits
@solana/kit production bundle
kit/dist/index.production.min.js
47.67KB (-45B -0.09%) -
fixed-points/dist/index.browser.mjs
66B (-78B -54.17%) -
fixed-points/dist/index.native.mjs
65B (-78B -54.55%) -
fixed-points/dist/index.node.mjs
63B (-78B -55.32%) -
Unchanged files (143)
Status Path Size Limits
errors/dist/index.node.mjs
20.44KB -
errors/dist/index.browser.mjs
20.42KB -
errors/dist/index.native.mjs
20.41KB -
rpc-graphql/dist/index.browser.mjs
18.82KB -
rpc-graphql/dist/index.native.mjs
18.81KB -
rpc-graphql/dist/index.node.mjs
18.81KB -
wallet-account-signer/dist/index.node.mjs
17.29KB -
wallet-account-signer/dist/index.browser.mjs
17.27KB -
wallet-account-signer/dist/index.native.mjs
17.27KB -
transaction-messages/dist/index.browser.mjs
11.32KB -
transaction-messages/dist/index.native.mjs
11.32KB -
transaction-messages/dist/index.node.mjs
11.32KB -
instruction-plans/dist/index.browser.mjs
6.58KB -
instruction-plans/dist/index.native.mjs
6.58KB -
instruction-plans/dist/index.node.mjs
6.58KB -
codecs-data-structures/dist/index.browser.mjs
5.04KB -
codecs-data-structures/dist/index.native.mjs
5.03KB -
codecs-data-structures/dist/index.node.mjs
5.03KB -
offchain-messages/dist/index.browser.mjs
4.89KB -
offchain-messages/dist/index.native.mjs
4.89KB -
offchain-messages/dist/index.node.mjs
4.89KB -
transactions/dist/index.browser.mjs
4.07KB -
transactions/dist/index.native.mjs
4.07KB -
transactions/dist/index.node.mjs
4.07KB -
kit/dist/index.browser.mjs
3.72KB -
kit/dist/index.native.mjs
3.72KB -
kit/dist/index.node.mjs
3.72KB -
codecs-core/dist/index.browser.mjs
3.62KB -
codecs-core/dist/index.native.mjs
3.62KB -
codecs-core/dist/index.node.mjs
3.62KB -
webcrypto-ed25519-polyfill/dist/index.node.mj
s
3.61KB -
webcrypto-ed25519-polyfill/dist/index.browser
.mjs
3.59KB -
webcrypto-ed25519-polyfill/dist/index.native.
mjs
3.57KB -
rpc-subscriptions/dist/index.browser.mjs
3.37KB -
rpc-subscriptions/dist/index.node.mjs
3.34KB -
rpc-subscriptions/dist/index.native.mjs
3.31KB -
signers/dist/index.browser.mjs
3.26KB -
signers/dist/index.native.mjs
3.26KB -
signers/dist/index.node.mjs
3.26KB -
rpc-transformers/dist/index.browser.mjs
3.16KB -
rpc-transformers/dist/index.native.mjs
3.16KB -
rpc-transformers/dist/index.node.mjs
3.16KB -
react/dist/index.browser.mjs
3.09KB -
react/dist/index.native.mjs
3.09KB -
react/dist/index.node.mjs
3.09KB -
keys/dist/index.node.mjs
3.06KB -
addresses/dist/index.browser.mjs
2.93KB -
addresses/dist/index.native.mjs
2.92KB -
addresses/dist/index.node.mjs
2.92KB -
keys/dist/index.browser.mjs
2.85KB -
keys/dist/index.native.mjs
2.85KB -
codecs-strings/dist/index.browser.mjs
2.55KB -
codecs-strings/dist/index.node.mjs
2.51KB -
codecs-strings/dist/index.native.mjs
2.47KB -
transaction-confirmation/dist/index.node.mjs
2.41KB -
sysvars/dist/index.browser.mjs
2.37KB -
sysvars/dist/index.native.mjs
2.37KB -
sysvars/dist/index.node.mjs
2.37KB -
transaction-confirmation/dist/index.native.mj
s
2.36KB -
transaction-confirmation/dist/index.browser.m
js
2.35KB -
rpc-subscriptions-spec/dist/index.node.mjs
2.21KB -
rpc-subscriptions-spec/dist/index.native.mjs
2.17KB -
rpc-subscriptions-spec/dist/index.browser.mjs
2.16KB -
subscribable/dist/index.node.mjs
1.97KB -
rpc/dist/index.node.mjs
1.95KB -
codecs-numbers/dist/index.browser.mjs
1.95KB -
codecs-numbers/dist/index.native.mjs
1.95KB -
codecs-numbers/dist/index.node.mjs
1.94KB -
subscribable/dist/index.native.mjs
1.92KB -
subscribable/dist/index.browser.mjs
1.91KB -
rpc-transport-http/dist/index.browser.mjs
1.91KB -
rpc-transport-http/dist/index.native.mjs
1.9KB -
rpc/dist/index.native.mjs
1.81KB -
rpc/dist/index.browser.mjs
1.8KB -
rpc-transport-http/dist/index.node.mjs
1.72KB -
rpc-types/dist/index.browser.mjs
1.53KB -
rpc-types/dist/index.native.mjs
1.53KB -
rpc-types/dist/index.node.mjs
1.53KB -
rpc-subscriptions-channel-websocket/dist/inde
x.node.mjs
1.33KB -
rpc-subscriptions-channel-websocket/dist/inde
x.native.mjs
1.27KB -
rpc-subscriptions-channel-websocket/dist/inde
x.browser.mjs
1.26KB -
program-client-core/dist/index.browser.mjs
1.21KB -
program-client-core/dist/index.native.mjs
1.21KB -
program-client-core/dist/index.node.mjs
1.21KB -
options/dist/index.browser.mjs
1.18KB -
options/dist/index.native.mjs
1.18KB -
options/dist/index.node.mjs
1.17KB -
accounts/dist/index.browser.mjs
1.17KB -
accounts/dist/index.native.mjs
1.17KB -
accounts/dist/index.node.mjs
1.16KB -
rpc-api/dist/index.browser.mjs
976B -
rpc-api/dist/index.native.mjs
975B -
rpc-api/dist/index.node.mjs
973B -
compat/dist/index.browser.mjs
969B -
compat/dist/index.native.mjs
968B -
compat/dist/index.node.mjs
966B -
rpc-spec-types/dist/index.browser.mjs
962B -
rpc-spec-types/dist/index.native.mjs
961B -
rpc-spec-types/dist/index.node.mjs
959B -
rpc-subscriptions-api/dist/index.native.mjs
870B -
rpc-subscriptions-api/dist/index.node.mjs
869B -
rpc-subscriptions-api/dist/index.browser.mjs
868B -
rpc-spec/dist/index.browser.mjs
852B -
rpc-spec/dist/index.native.mjs
851B -
rpc-spec/dist/index.node.mjs
850B -
promises/dist/index.native.mjs
841B -
promises/dist/index.node.mjs
840B -
promises/dist/index.browser.mjs
839B -
plugin-core/dist/index.browser.mjs
820B -
plugin-core/dist/index.native.mjs
819B -
plugin-core/dist/index.node.mjs
817B -
assertions/dist/index.browser.mjs
783B -
instructions/dist/index.browser.mjs
771B -
instructions/dist/index.native.mjs
770B -
instructions/dist/index.node.mjs
768B -
fast-stable-stringify/dist/index.browser.mjs
726B -
fast-stable-stringify/dist/index.native.mjs
725B -
assertions/dist/index.native.mjs
724B -
fast-stable-stringify/dist/index.node.mjs
724B -
assertions/dist/index.node.mjs
723B -
programs/dist/index.browser.mjs
329B -
programs/dist/index.native.mjs
327B -
programs/dist/index.node.mjs
325B -
fs-impl/dist/index.browser.mjs
245B -
event-target-impl/dist/index.node.mjs
230B -
functional/dist/index.browser.mjs
154B -
functional/dist/index.native.mjs
152B -
text-encoding-impl/dist/index.native.mjs
152B -
functional/dist/index.node.mjs
151B -
codecs/dist/index.browser.mjs
145B -
codecs/dist/index.native.mjs
144B -
codecs/dist/index.node.mjs
142B -
event-target-impl/dist/index.browser.mjs
133B -
ws-impl/dist/index.node.mjs
131B -
text-encoding-impl/dist/index.browser.mjs
122B -
fs-impl/dist/index.node.mjs
120B -
text-encoding-impl/dist/index.node.mjs
119B -
ws-impl/dist/index.browser.mjs
113B -
crypto-impl/dist/index.node.mjs
111B -
crypto-impl/dist/index.browser.mjs
109B -
rpc-parsed-types/dist/index.browser.mjs
66B -
rpc-parsed-types/dist/index.native.mjs
65B -
rpc-parsed-types/dist/index.node.mjs
63B -

Total files change -279B -0.05%

Final result: ✅

View report in BundleMon website ➡️


Current branch size history | Target branch size history

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 24, 2026

Documentation Preview: https://kit-docs-141tlpauj-anza-tech.vercel.app

@lorisleiva lorisleiva force-pushed the 04-23-add_fixed_points_error_codes branch from ce87d8d to f73fabb Compare April 24, 2026 16:17
@lorisleiva lorisleiva force-pushed the 04-23-add_fixed-point_types branch from 5f84e7a to 17de005 Compare April 24, 2026 16:17
@lorisleiva lorisleiva marked this pull request as ready for review April 24, 2026 16:37
@lorisleiva lorisleiva requested a review from mcintyre94 April 24, 2026 16:37
Comment thread packages/fixed-points/src/__typetests__/binary-core-typetest.ts
Comment thread packages/fixed-points/src/__typetests__/decimal-core-typetest.ts
@lorisleiva lorisleiva force-pushed the 04-23-add_fixed_points_error_codes branch from f73fabb to f35860d Compare April 29, 2026 00:30
@lorisleiva lorisleiva force-pushed the 04-23-add_fixed-point_types branch from 17de005 to 2ef4868 Compare April 29, 2026 00:30
@lorisleiva lorisleiva force-pushed the 04-23-add_fixed-point_types branch from 2ef4868 to f04b24e Compare May 4, 2026 03:59
@lorisleiva lorisleiva force-pushed the 04-23-add_fixed_points_error_codes branch 2 times, most recently from ab0548b to 6817c52 Compare May 5, 2026 11:17
@lorisleiva lorisleiva force-pushed the 04-23-add_fixed-point_types branch from f04b24e to 29d9851 Compare May 5, 2026 11:17
@lorisleiva lorisleiva force-pushed the 04-23-add_fixed_points_error_codes branch from 6817c52 to e7bf82c Compare May 5, 2026 13:51
@lorisleiva lorisleiva force-pushed the 04-23-add_fixed-point_types branch from 29d9851 to aa0861a Compare May 5, 2026 13:51
Copy link
Copy Markdown
Member Author

lorisleiva commented May 5, 2026

Merge activity

  • May 5, 8:27 PM UTC: A user started a stack merge that includes this pull request via Graphite.
  • May 5, 8:41 PM UTC: Graphite rebased this pull request as part of a merge.
  • May 5, 8:48 PM UTC: Graphite couldn't merge this PR because it was not satisfying all requirements (Failed CI: 'Build Documentation Preview').

@lorisleiva lorisleiva changed the base branch from 04-23-add_fixed_points_error_codes to graphite-base/1560 May 5, 2026 20:29
@lorisleiva lorisleiva changed the base branch from graphite-base/1560 to main May 5, 2026 20:39
This PR is part of the stack implementing the fixed-point number types proposed in #1545. It lands the public type surface that every follow-up PR will build on.

Adds the four core types:

- `Signedness` — `'signed' | 'unsigned'`.
- `RoundingMode` — `'floor' | 'ceil' | 'trunc' | 'round' | 'strict'`. The `'round'` mode breaks ties away from zero (e.g. `0.5 → 1`, `-0.5 → -1`, `-1.5 → -2`), which is symmetric around zero and differs from `Math.round`. The `'strict'` mode rejects inputs that would require rounding and throws instead.
- `BinaryFixedPoint<TSignedness, TTotalBits, TFractionalBits>` — a fixed-point value whose scale is a power of 2.
- `DecimalFixedPoint<TSignedness, TTotalBits, TDecimals>` — a fixed-point value whose scale is a power of 10.
@lorisleiva lorisleiva force-pushed the 04-23-add_fixed-point_types branch from aa0861a to b015176 Compare May 5, 2026 20:40
@lorisleiva lorisleiva merged commit 5a815a9 into main May 5, 2026
14 of 15 checks passed
@lorisleiva lorisleiva deleted the 04-23-add_fixed-point_types branch May 5, 2026 20:54
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 5, 2026

🔎💬 Inkeep AI search and chat service is syncing content for source 'Solana Kit Docs'

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.

2 participants