From e000efbf57fe88f1de03f063bd8d040c532df516 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 12:13:47 +0000 Subject: [PATCH 1/5] chore: release v0.1.0 --- libs/types/CHANGELOG.md | 63 ++++++++++++++++ minter/CHANGELOG.md | 163 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 226 insertions(+) diff --git a/libs/types/CHANGELOG.md b/libs/types/CHANGELOG.md index 15a61afa..98c503cf 100644 --- a/libs/types/CHANGELOG.md +++ b/libs/types/CHANGELOG.md @@ -6,3 +6,66 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] + +## [0.1.0] - 2026-10-09 + +### Added + +- Add a pool of durable nonce accounts ([#241](https://github.com/dfinity/cksol/pull/241)) +- Add deposit_sol and deposit_status endpoint skeletons ([#208](https://github.com/dfinity/cksol/pull/208)) +- Add `update_balance` endpoint for automated deposit monitoring ([#136](https://github.com/dfinity/cksol/pull/136)) +- Add `deposit_amount` to `DepositStatus::Processing` ([#45](https://github.com/dfinity/cksol/pull/45)) +- Add parameter for required cycles for `update_balance` calls ([#32](https://github.com/dfinity/cksol/pull/32)) +- DEFI-2671: add withdrawal fee ([#29](https://github.com/dfinity/cksol/pull/29)) +- Add events for deposit flow ([#26](https://github.com/dfinity/cksol/pull/26)) +- Add minimum deposit amount ([#25](https://github.com/dfinity/cksol/pull/25)) +- Add concurrent access guard to `update_balance` endpoint ([#17](https://github.com/dfinity/cksol/pull/17)) +- DEFI-2671: add minimum_withdrawal_amount parameter ([#13](https://github.com/dfinity/cksol/pull/13)) +- Add deposit flow skeleton ([#5](https://github.com/dfinity/cksol/pull/5)) + +### Changed + +- Name the withdrawal and status endpoints after the asset ([#262](https://github.com/dfinity/cksol/pull/262)) +- Validate withdrawal destinations ([#243](https://github.com/dfinity/cksol/pull/243)) +- Mint the pending deposits of credited sweeps on a timer ([#220](https://github.com/dfinity/cksol/pull/220)) +- Drop failed sweeps and quarantine sweeps with mismatching metadata ([#218](https://github.com/dfinity/cksol/pull/218)) +- Credit the deposits of a finalized sweep from the transaction metadata ([#222](https://github.com/dfinity/cksol/pull/222)) +- Sweep queued deposits to the main address on a timer ([#213](https://github.com/dfinity/cksol/pull/213)) +- Queue deposits in the state under sequence numbers ([#210](https://github.com/dfinity/cksol/pull/210)) +- Revert "add update_balance endpoint for automated deposit monitoring" ([#136](https://github.com/dfinity/cksol/pull/136)) ([#199](https://github.com/dfinity/cksol/pull/199)) +- Revert "remove owner field from UpdateBalanceArgs" ([#169](https://github.com/dfinity/cksol/pull/169)) ([#195](https://github.com/dfinity/cksol/pull/195)) +- Rename `deposit_fee` to `manual_deposit_fee` and add `automated_deposit_fee` ([#133](https://github.com/dfinity/cksol/pull/133)) +- Rename `update_balance` to `process_deposit` ([#141](https://github.com/dfinity/cksol/pull/141)) +- Improve `withdraw` function and restructure `WithdrawalRequest` ([#109](https://github.com/dfinity/cksol/pull/109)) +- Charge deposit consolidation fee in cycles during `update_balance` ([#108](https://github.com/dfinity/cksol/pull/108)) +- Handle ledger errors explicitly in mint and burn calls ([#112](https://github.com/dfinity/cksol/pull/112)) +- Rename `withdraw_sol` to `withdraw` across the codebase ([#110](https://github.com/dfinity/cksol/pull/110)) +- Track minter balance through state transitions ([#86](https://github.com/dfinity/cksol/pull/86)) +- Update withdrawal status on transaction finalization ([#76](https://github.com/dfinity/cksol/pull/76)) +- Use `DepositId` instead of `Signature` in `DepositStatus` ([#89](https://github.com/dfinity/cksol/pull/89)) +- DEFI-2671: schedule task for processing withdrawals ([#48](https://github.com/dfinity/cksol/pull/48)) +- Charge users for `update_balance` endpoint ([#28](https://github.com/dfinity/cksol/pull/28)) +- Submit consolidation transactions ([#49](https://github.com/dfinity/cksol/pull/49)) +- Retry minting when calling `update_balance` again ([#36](https://github.com/dfinity/cksol/pull/36)) +- DEFI-2671: burn funds for withdrawal ([#18](https://github.com/dfinity/cksol/pull/18)) +- Mint on valid call to `update_balance` ([#22](https://github.com/dfinity/cksol/pull/22)) +- Fetch transaction in `update_balance` endpoint ([#14](https://github.com/dfinity/cksol/pull/14)) +- DEFI-2671: withdrawal workflow endpoints skeleton ([#9](https://github.com/dfinity/cksol/pull/9)) +- `get_minter_info` endpoint and logging infrastructure ([#10](https://github.com/dfinity/cksol/pull/10)) +- Initialization and upgrade endpoints ([#7](https://github.com/dfinity/cksol/pull/7)) +- DEFI-2640: Endpoint for deriving Solana deposit address ([#3](https://github.com/dfinity/cksol/pull/3)) +- Initial cargo workspace and build pipeline ([#1](https://github.com/dfinity/cksol/pull/1)) + +### Fixed + +- Issues found while deploying to staging ([#263](https://github.com/dfinity/cksol/pull/263)) +- CBOR field index for `Burn` memo inner tuple ([#170](https://github.com/dfinity/cksol/pull/170)) +- Clean up Candid interface and standardize naming conventions ([#153](https://github.com/dfinity/cksol/pull/153)) +- Setup `PocketIc` tests ([#6](https://github.com/dfinity/cksol/pull/6)) + +### Removed + +- Remove the signature-based deposit flow ([#221](https://github.com/dfinity/cksol/pull/221)) +- Remove owner field from `UpdateBalanceArgs` ([#169](https://github.com/dfinity/cksol/pull/169)) + + diff --git a/minter/CHANGELOG.md b/minter/CHANGELOG.md index 15a61afa..94ff3cc5 100644 --- a/minter/CHANGELOG.md +++ b/minter/CHANGELOG.md @@ -6,3 +6,166 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] + +## [0.1.0] - 2026-10-09 + +### Added + +- Add release-plz release and publish workflows ([#264](https://github.com/dfinity/cksol/pull/264)) +- Add a pool of durable nonce accounts ([#241](https://github.com/dfinity/cksol/pull/241)) +- Add deposit_sol and deposit_status endpoint skeletons ([#208](https://github.com/dfinity/cksol/pull/208)) +- Add pending-signatures queue for automated deposit flow ([#175](https://github.com/dfinity/cksol/pull/175)) +- Add structured logging for key minter operations ([#152](https://github.com/dfinity/cksol/pull/152)) +- Add `add_times` helper to `TestCanisterRuntime` ([#162](https://github.com/dfinity/cksol/pull/162)) +- Add `update_balance` endpoint for automated deposit monitoring ([#136](https://github.com/dfinity/cksol/pull/136)) +- Add minter_post_upgrade_instructions_consumed and minter_balance metrics ([#127](https://github.com/dfinity/cksol/pull/127)) +- Add `InsertionOrderedMap` for state queues ([#119](https://github.com/dfinity/cksol/pull/119)) +- Add `ExpiredTransaction` event and resubmission queue ([#122](https://github.com/dfinity/cksol/pull/122)) +- Add metric that tracks the oldest incomplete withdrawal ([#114](https://github.com/dfinity/cksol/pull/114)) +- Add consolidation transactions to dashboard ([#105](https://github.com/dfinity/cksol/pull/105)) +- Add status column to deposits table and show all deposits ([#100](https://github.com/dfinity/cksol/pull/100)) +- Add withdrawals table to dashboard ([#93](https://github.com/dfinity/cksol/pull/93)) +- Add minter metrics for deposits, withdrawals, and transactions ([#90](https://github.com/dfinity/cksol/pull/90)) +- Add minted deposits table to dashboard ([#85](https://github.com/dfinity/cksol/pull/85)) +- Add `icp-cli` deployment configuration ([#79](https://github.com/dfinity/cksol/pull/79)) +- Add minter dashboard with metadata section ([#72](https://github.com/dfinity/cksol/pull/72)) +- Add `FailedTransaction` event ([#70](https://github.com/dfinity/cksol/pull/70)) +- Add `FinalizedTransaction` event ([#65](https://github.com/dfinity/cksol/pull/65)) +- Add unit tests for `consolidate_deposits` ([#58](https://github.com/dfinity/cksol/pull/58)) +- Add `ResubmittedTransaction` event ([#55](https://github.com/dfinity/cksol/pull/55)) +- Add slot to `SubmittedTransaction` event ([#54](https://github.com/dfinity/cksol/pull/54)) +- Add signers field to `SubmittedTransaction` event ([#53](https://github.com/dfinity/cksol/pull/53)) +- Add `deposit_amount` to `DepositStatus::Processing` ([#45](https://github.com/dfinity/cksol/pull/45)) +- Add events sending deposit consolidation transactions ([#38](https://github.com/dfinity/cksol/pull/38)) +- Add parameter for required cycles for `update_balance` calls ([#32](https://github.com/dfinity/cksol/pull/32)) +- Add new event types to encoding/decoding unit tests ([#33](https://github.com/dfinity/cksol/pull/33)) +- DEFI-2671: add withdrawal fee ([#29](https://github.com/dfinity/cksol/pull/29)) +- Add events for deposit flow ([#26](https://github.com/dfinity/cksol/pull/26)) +- Add minimum deposit amount ([#25](https://github.com/dfinity/cksol/pull/25)) +- Add concurrent access guard to `update_balance` endpoint ([#17](https://github.com/dfinity/cksol/pull/17)) +- Add `CanisterRuntime` trait ([#23](https://github.com/dfinity/cksol/pull/23)) +- DEFI-2671: add minimum_withdrawal_amount parameter ([#13](https://github.com/dfinity/cksol/pull/13)) +- Add deposit flow skeleton ([#5](https://github.com/dfinity/cksol/pull/5)) + +### Changed + +- Finalize withdrawals from their nonce accounts ([#260](https://github.com/dfinity/cksol/pull/260)) +- Convert get_deposit_address from query to update endpoint ([#183](https://github.com/dfinity/cksol/pull/183)) +- Name the withdrawal and status endpoints after the asset ([#262](https://github.com/dfinity/cksol/pull/262)) +- Report the age of the oldest in-flight deposit ([#237](https://github.com/dfinity/cksol/pull/237)) +- Re-broadcast in-flight withdrawal transactions ([#257](https://github.com/dfinity/cksol/pull/257)) +- Submit withdrawals as durable-nonce transactions ([#248](https://github.com/dfinity/cksol/pull/248)) +- Bind durable nonces to withdrawals and record them as submitted transactions ([#255](https://github.com/dfinity/cksol/pull/255)) +- Model submitted transactions as a MinterTransaction enum ([#252](https://github.com/dfinity/cksol/pull/252)) +- Read and verify durable nonce accounts ([#244](https://github.com/dfinity/cksol/pull/244)) +- Validate withdrawal destinations ([#243](https://github.com/dfinity/cksol/pull/243)) +- Mint the pending deposits of credited sweeps on a timer ([#220](https://github.com/dfinity/cksol/pull/220)) +- Record the minter public key in an event ([#235](https://github.com/dfinity/cksol/pull/235)) +- Drop failed sweeps and quarantine sweeps with mismatching metadata ([#218](https://github.com/dfinity/cksol/pull/218)) +- Credit the deposits of a finalized sweep from the transaction metadata ([#222](https://github.com/dfinity/cksol/pull/222)) +- Plan a sweep at submission ([#232](https://github.com/dfinity/cksol/pull/232)) +- Introduce the Deposits state with sweeps keyed by signature ([#230](https://github.com/dfinity/cksol/pull/230)) +- Sweep queued deposits to the main address on a timer ([#213](https://github.com/dfinity/cksol/pull/213)) +- Stop building CI tools from source ([#228](https://github.com/dfinity/cksol/pull/228)) +- Check the deposit address balance and charge cycles in deposit_sol ([#211](https://github.com/dfinity/cksol/pull/211)) +- Queue deposits in the state under sequence numbers ([#210](https://github.com/dfinity/cksol/pull/210)) +- Persist the block height and judge transaction expiry by it ([#214](https://github.com/dfinity/cksol/pull/214)) +- Revert "add update_balance endpoint for automated deposit monitoring" ([#136](https://github.com/dfinity/cksol/pull/136)) ([#199](https://github.com/dfinity/cksol/pull/199)) +- Revert "poll monitored addresses for deposit transactions" ([#139](https://github.com/dfinity/cksol/pull/139)) ([#198](https://github.com/dfinity/cksol/pull/198)) +- Revert "introduce InsertionOrderedSet for monitored_accounts" ([#178](https://github.com/dfinity/cksol/pull/178)) ([#197](https://github.com/dfinity/cksol/pull/197)) +- Revert "add pending-signatures queue for automated deposit flow" ([#175](https://github.com/dfinity/cksol/pull/175)) ([#196](https://github.com/dfinity/cksol/pull/196)) +- Revert "remove owner field from UpdateBalanceArgs" ([#169](https://github.com/dfinity/cksol/pull/169)) ([#195](https://github.com/dfinity/cksol/pull/195)) +- Extract shared deposit validation from manual flow ([#174](https://github.com/dfinity/cksol/pull/174)) +- Introduce `InsertionOrderedSet` for `monitored_accounts` ([#178](https://github.com/dfinity/cksol/pull/178)) +- Reject deposit transactions with a non-null `err` field ([#171](https://github.com/dfinity/cksol/pull/171)) +- Set `maxSupportedTransactionVersion=0` for getTransaction ([#166](https://github.com/dfinity/cksol/pull/166)) +- Downgrade `ic-stable-structures` to 0.6.9 ([#163](https://github.com/dfinity/cksol/pull/163)) +- Organize automatic deposit tests into submodules ([#161](https://github.com/dfinity/cksol/pull/161)) +- Poll monitored addresses for deposit transactions ([#139](https://github.com/dfinity/cksol/pull/139)) +- Canbench for replaying events in ckSOL minter ([#137](https://github.com/dfinity/cksol/pull/137)) +- Make `get_deposit_address` a query endpoint ([#138](https://github.com/dfinity/cksol/pull/138)) +- Rename `deposit_fee` to `manual_deposit_fee` and add `automated_deposit_fee` ([#133](https://github.com/dfinity/cksol/pull/133)) +- Rename `update_balance` to `process_deposit` ([#141](https://github.com/dfinity/cksol/pull/141)) +- Annotate unstable types in Candid interface ([#135](https://github.com/dfinity/cksol/pull/135)) +- Split transaction module into `rpc` and `deposit` ([#134](https://github.com/dfinity/cksol/pull/134)) +- Rename `AcceptedDeposit` to `AcceptedManualDeposit` ([#132](https://github.com/dfinity/cksol/pull/132)) +- Newest-first ordering in dashboard tables ([#121](https://github.com/dfinity/cksol/pull/121)) +- Single-round timers with rescheduling ([#97](https://github.com/dfinity/cksol/pull/97)) +- Split monitor timer into finalize and resubmit ([#120](https://github.com/dfinity/cksol/pull/120)) +- Check minter balance before processing withdrawals ([#115](https://github.com/dfinity/cksol/pull/115)) +- Use checked arithmetic for minter balance ([#113](https://github.com/dfinity/cksol/pull/113)) +- Improve `withdraw` function and restructure `WithdrawalRequest` ([#109](https://github.com/dfinity/cksol/pull/109)) +- Charge deposit consolidation fee in cycles during `update_balance` ([#108](https://github.com/dfinity/cksol/pull/108)) +- Handle ledger errors explicitly in mint and burn calls ([#112](https://github.com/dfinity/cksol/pull/112)) +- Rename `withdraw_sol` to `withdraw` across the codebase ([#110](https://github.com/dfinity/cksol/pull/110)) +- Track minter balance through state transitions ([#86](https://github.com/dfinity/cksol/pull/86)) +- Use first deposit account as fee payer in consolidation transactions ([#103](https://github.com/dfinity/cksol/pull/103)) +- Use shared test helpers in dashboard tests ([#101](https://github.com/dfinity/cksol/pull/101)) +- Extract shared unit test fixtures ([#92](https://github.com/dfinity/cksol/pull/92)) +- Update withdrawal status on transaction finalization ([#76](https://github.com/dfinity/cksol/pull/76)) +- Reproducible Docker build ([#80](https://github.com/dfinity/cksol/pull/80)) +- Submit withdrawal transactions to Solana via RPC ([#91](https://github.com/dfinity/cksol/pull/91)) +- Update `sol_rpc_client` and use new `get_recent_block` method ([#87](https://github.com/dfinity/cksol/pull/87)) +- Use `DepositId` instead of `Signature` in `DepositStatus` ([#89](https://github.com/dfinity/cksol/pull/89)) +- Batch withdrawal transactions ([#84](https://github.com/dfinity/cksol/pull/84)) +- Monitor submitted transactions for finalization ([#62](https://github.com/dfinity/cksol/pull/62)) +- Use versioned transaction messages in events ([#69](https://github.com/dfinity/cksol/pull/69)) +- Make Solana network configurable via init args ([#83](https://github.com/dfinity/cksol/pull/83)) +- Unify `SubmittedTransaction`, `ConsolidatedDeposits`, and `SentWithdrawalTransaction` events ([#67](https://github.com/dfinity/cksol/pull/67)) +- Serve basic canister metrics ([#64](https://github.com/dfinity/cksol/pull/64)) +- Use mint indices in `ConsolidatedDeposits` event ([#66](https://github.com/dfinity/cksol/pull/66)) +- DEFI-2671: schedule task for processing withdrawals ([#48](https://github.com/dfinity/cksol/pull/48)) +- Resubmit expired transactions with new blockhash ([#56](https://github.com/dfinity/cksol/pull/56)) +- Move `SchnorrSigner` to dedicated module and add to `CanisterRuntime` ([#57](https://github.com/dfinity/cksol/pull/57)) +- Charge users for `update_balance` endpoint ([#28](https://github.com/dfinity/cksol/pull/28)) +- Submit consolidation transactions ([#49](https://github.com/dfinity/cksol/pull/49)) +- Ensure minimum withdrawal above rent exemption threshold ([#46](https://github.com/dfinity/cksol/pull/46)) +- Specify `fee_payer_account` in `create_signed_transfer_transaction` ([#50](https://github.com/dfinity/cksol/pull/50)) +- Scheduled task to consolidate deposits ([#42](https://github.com/dfinity/cksol/pull/42)) +- Clean-up test runtime with stubs ([#44](https://github.com/dfinity/cksol/pull/44)) +- DEFI-2671: create a solana transaction ([#40](https://github.com/dfinity/cksol/pull/40)) +- Retry minting when calling `update_balance` again ([#36](https://github.com/dfinity/cksol/pull/36)) +- DEFI-2671: record burn event ([#30](https://github.com/dfinity/cksol/pull/30)) +- DEFI-2671: burn funds for withdrawal ([#18](https://github.com/dfinity/cksol/pull/18)) +- Mint on valid call to `update_balance` ([#22](https://github.com/dfinity/cksol/pull/22)) +- `get_events` endpoint ([#20](https://github.com/dfinity/cksol/pull/20)) +- Parse deposit transaction ([#15](https://github.com/dfinity/cksol/pull/15)) +- Fetch transaction in `update_balance` endpoint ([#14](https://github.com/dfinity/cksol/pull/14)) +- Events ([#8](https://github.com/dfinity/cksol/pull/8)) +- DEFI-2671: withdrawal workflow endpoints skeleton ([#9](https://github.com/dfinity/cksol/pull/9)) +- `get_minter_info` endpoint and logging infrastructure ([#10](https://github.com/dfinity/cksol/pull/10)) +- Initialization and upgrade endpoints ([#7](https://github.com/dfinity/cksol/pull/7)) +- DEFI-2640: Endpoint for deriving Solana deposit address ([#3](https://github.com/dfinity/cksol/pull/3)) +- Initial cargo workspace and build pipeline ([#1](https://github.com/dfinity/cksol/pull/1)) + +### Fixed + +- Issues found while deploying to staging ([#263](https://github.com/dfinity/cksol/pull/263)) +- Bind getTransaction responses to the queried signature ([#236](https://github.com/dfinity/cksol/pull/236)) +- Search the transaction history for signature statuses ([#239](https://github.com/dfinity/cksol/pull/239)) +- Derive the main address from the master key, not the account schema ([#227](https://github.com/dfinity/cksol/pull/227)) +- Tolerate concurrent first fetches of the master public key ([#226](https://github.com/dfinity/cksol/pull/226)) +- Reject deposit cycle parameters that cannot cover the RPC cost and fee ([#212](https://github.com/dfinity/cksol/pull/212)) +- Map derivation paths to signatures in the test Schnorr signer ([#217](https://github.com/dfinity/cksol/pull/217)) +- Reserve transaction fee when selecting affordable withdrawals ([#202](https://github.com/dfinity/cksol/pull/202)) +- Update `WithdrawalRequest` field names in `canbench.rs` ([#164](https://github.com/dfinity/cksol/pull/164)) +- Clean up Candid interface and standardize naming conventions ([#153](https://github.com/dfinity/cksol/pull/153)) +- Always report oldest_incomplete_withdrawal_age_seconds ([#140](https://github.com/dfinity/cksol/pull/140)) +- Move expired transaction into resubmit queue on expiry ([#126](https://github.com/dfinity/cksol/pull/126)) +- Fetch current slot before checking transaction statuses ([#124](https://github.com/dfinity/cksol/pull/124)) +- Use correct derivation path for minter address ([#99](https://github.com/dfinity/cksol/pull/99)) +- Set `response_size_estimate` only on variable-size RPC calls ([#95](https://github.com/dfinity/cksol/pull/95)) +- Update withdrawal signature on transaction resubmission ([#77](https://github.com/dfinity/cksol/pull/77)) +- DEFI-2671: non optional Accounts in create_signed_transfer_transaction ([#47](https://github.com/dfinity/cksol/pull/47)) +- `EventType::AcceptedWithdrawSolRequest` name ([#39](https://github.com/dfinity/cksol/pull/39)) +- Solana validator tests ([#16](https://github.com/dfinity/cksol/pull/16)) +- Setup `PocketIc` tests ([#6](https://github.com/dfinity/cksol/pull/6)) + +### Removed + +- Remove the transaction resubmission machinery ([#258](https://github.com/dfinity/cksol/pull/258)) +- Remove the signature-based deposit flow ([#221](https://github.com/dfinity/cksol/pull/221)) +- Remove owner field from `UpdateBalanceArgs` ([#169](https://github.com/dfinity/cksol/pull/169)) +- Remove stale TODO about charging cycles to caller ([#88](https://github.com/dfinity/cksol/pull/88)) + + From e6e97481d3414548b4b90d07fa665a7167510536 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Demay?= Date: Fri, 9 Oct 2026 12:19:35 +0000 Subject: [PATCH 2/5] docs: curate the 0.1.0 changelogs of the minter and cksol-types Co-Authored-By: Claude Opus 5.5 --- libs/types/CHANGELOG.md | 65 ++-------------- minter/CHANGELOG.md | 169 ++++------------------------------------ 2 files changed, 23 insertions(+), 211 deletions(-) diff --git a/libs/types/CHANGELOG.md b/libs/types/CHANGELOG.md index 98c503cf..bfc64e86 100644 --- a/libs/types/CHANGELOG.md +++ b/libs/types/CHANGELOG.md @@ -9,63 +9,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.1.0] - 2026-10-09 -### Added - -- Add a pool of durable nonce accounts ([#241](https://github.com/dfinity/cksol/pull/241)) -- Add deposit_sol and deposit_status endpoint skeletons ([#208](https://github.com/dfinity/cksol/pull/208)) -- Add `update_balance` endpoint for automated deposit monitoring ([#136](https://github.com/dfinity/cksol/pull/136)) -- Add `deposit_amount` to `DepositStatus::Processing` ([#45](https://github.com/dfinity/cksol/pull/45)) -- Add parameter for required cycles for `update_balance` calls ([#32](https://github.com/dfinity/cksol/pull/32)) -- DEFI-2671: add withdrawal fee ([#29](https://github.com/dfinity/cksol/pull/29)) -- Add events for deposit flow ([#26](https://github.com/dfinity/cksol/pull/26)) -- Add minimum deposit amount ([#25](https://github.com/dfinity/cksol/pull/25)) -- Add concurrent access guard to `update_balance` endpoint ([#17](https://github.com/dfinity/cksol/pull/17)) -- DEFI-2671: add minimum_withdrawal_amount parameter ([#13](https://github.com/dfinity/cksol/pull/13)) -- Add deposit flow skeleton ([#5](https://github.com/dfinity/cksol/pull/5)) - -### Changed - -- Name the withdrawal and status endpoints after the asset ([#262](https://github.com/dfinity/cksol/pull/262)) -- Validate withdrawal destinations ([#243](https://github.com/dfinity/cksol/pull/243)) -- Mint the pending deposits of credited sweeps on a timer ([#220](https://github.com/dfinity/cksol/pull/220)) -- Drop failed sweeps and quarantine sweeps with mismatching metadata ([#218](https://github.com/dfinity/cksol/pull/218)) -- Credit the deposits of a finalized sweep from the transaction metadata ([#222](https://github.com/dfinity/cksol/pull/222)) -- Sweep queued deposits to the main address on a timer ([#213](https://github.com/dfinity/cksol/pull/213)) -- Queue deposits in the state under sequence numbers ([#210](https://github.com/dfinity/cksol/pull/210)) -- Revert "add update_balance endpoint for automated deposit monitoring" ([#136](https://github.com/dfinity/cksol/pull/136)) ([#199](https://github.com/dfinity/cksol/pull/199)) -- Revert "remove owner field from UpdateBalanceArgs" ([#169](https://github.com/dfinity/cksol/pull/169)) ([#195](https://github.com/dfinity/cksol/pull/195)) -- Rename `deposit_fee` to `manual_deposit_fee` and add `automated_deposit_fee` ([#133](https://github.com/dfinity/cksol/pull/133)) -- Rename `update_balance` to `process_deposit` ([#141](https://github.com/dfinity/cksol/pull/141)) -- Improve `withdraw` function and restructure `WithdrawalRequest` ([#109](https://github.com/dfinity/cksol/pull/109)) -- Charge deposit consolidation fee in cycles during `update_balance` ([#108](https://github.com/dfinity/cksol/pull/108)) -- Handle ledger errors explicitly in mint and burn calls ([#112](https://github.com/dfinity/cksol/pull/112)) -- Rename `withdraw_sol` to `withdraw` across the codebase ([#110](https://github.com/dfinity/cksol/pull/110)) -- Track minter balance through state transitions ([#86](https://github.com/dfinity/cksol/pull/86)) -- Update withdrawal status on transaction finalization ([#76](https://github.com/dfinity/cksol/pull/76)) -- Use `DepositId` instead of `Signature` in `DepositStatus` ([#89](https://github.com/dfinity/cksol/pull/89)) -- DEFI-2671: schedule task for processing withdrawals ([#48](https://github.com/dfinity/cksol/pull/48)) -- Charge users for `update_balance` endpoint ([#28](https://github.com/dfinity/cksol/pull/28)) -- Submit consolidation transactions ([#49](https://github.com/dfinity/cksol/pull/49)) -- Retry minting when calling `update_balance` again ([#36](https://github.com/dfinity/cksol/pull/36)) -- DEFI-2671: burn funds for withdrawal ([#18](https://github.com/dfinity/cksol/pull/18)) -- Mint on valid call to `update_balance` ([#22](https://github.com/dfinity/cksol/pull/22)) -- Fetch transaction in `update_balance` endpoint ([#14](https://github.com/dfinity/cksol/pull/14)) -- DEFI-2671: withdrawal workflow endpoints skeleton ([#9](https://github.com/dfinity/cksol/pull/9)) -- `get_minter_info` endpoint and logging infrastructure ([#10](https://github.com/dfinity/cksol/pull/10)) -- Initialization and upgrade endpoints ([#7](https://github.com/dfinity/cksol/pull/7)) -- DEFI-2640: Endpoint for deriving Solana deposit address ([#3](https://github.com/dfinity/cksol/pull/3)) -- Initial cargo workspace and build pipeline ([#1](https://github.com/dfinity/cksol/pull/1)) +First release of the Candid types of the ckSOL minter's public interface. -### Fixed - -- Issues found while deploying to staging ([#263](https://github.com/dfinity/cksol/pull/263)) -- CBOR field index for `Burn` memo inner tuple ([#170](https://github.com/dfinity/cksol/pull/170)) -- Clean up Candid interface and standardize naming conventions ([#153](https://github.com/dfinity/cksol/pull/153)) -- Setup `PocketIc` tests ([#6](https://github.com/dfinity/cksol/pull/6)) - -### Removed - -- Remove the signature-based deposit flow ([#221](https://github.com/dfinity/cksol/pull/221)) -- Remove owner field from `UpdateBalanceArgs` ([#169](https://github.com/dfinity/cksol/pull/169)) +### Added +- Deposit types: `GetDepositAddressArgs`, `DepositSolArgs`, `DepositSolId`, `DepositSolStatus` and `DepositSolError`, including the `InsufficientCyclesError` returned when too few cycles are attached ([#3](https://github.com/dfinity/cksol/pull/3), [#5](https://github.com/dfinity/cksol/pull/5), [#25](https://github.com/dfinity/cksol/pull/25), [#32](https://github.com/dfinity/cksol/pull/32), [#208](https://github.com/dfinity/cksol/pull/208), [#210](https://github.com/dfinity/cksol/pull/210), [#213](https://github.com/dfinity/cksol/pull/213), [#218](https://github.com/dfinity/cksol/pull/218), [#220](https://github.com/dfinity/cksol/pull/220), [#222](https://github.com/dfinity/cksol/pull/222)) +- Withdrawal types: `WithdrawSolArgs`, `WithdrawSolOk`, `WithdrawSolError`, `WithdrawSolStatusArgs`, `WithdrawSolStatus` and `TxFinalizedStatus`, with an `InvalidDestination` error for destinations the minter cannot pay out to ([#9](https://github.com/dfinity/cksol/pull/9), [#13](https://github.com/dfinity/cksol/pull/13), [#18](https://github.com/dfinity/cksol/pull/18), [#29](https://github.com/dfinity/cksol/pull/29), [#76](https://github.com/dfinity/cksol/pull/76), [#109](https://github.com/dfinity/cksol/pull/109), [#243](https://github.com/dfinity/cksol/pull/243), [#262](https://github.com/dfinity/cksol/pull/262)) +- `MinterInfo`, returned by `get_minter_info`, with the minter's fees, minimum amounts, balance, main address and nonce accounts ([#10](https://github.com/dfinity/cksol/pull/10), [#86](https://github.com/dfinity/cksol/pull/86), [#241](https://github.com/dfinity/cksol/pull/241)) +- Ledger memo types: `Memo`, `MintMemo` and `BurnMemo`, encoded in CBOR and bounded by `MAX_SERIALIZED_MEMO_BYTES` ([#18](https://github.com/dfinity/cksol/pull/18), [#22](https://github.com/dfinity/cksol/pull/22), [#170](https://github.com/dfinity/cksol/pull/170)) +- Re-exports of `Lamport`, `Address` and `Signature`, and the `LedgerMintIndex` and `LedgerBurnIndex` aliases ([#1](https://github.com/dfinity/cksol/pull/1), [#153](https://github.com/dfinity/cksol/pull/153)) +[0.1.0]: https://github.com/dfinity/cksol/releases/tag/cksol-types-v0.1.0 diff --git a/minter/CHANGELOG.md b/minter/CHANGELOG.md index 94ff3cc5..8ec99870 100644 --- a/minter/CHANGELOG.md +++ b/minter/CHANGELOG.md @@ -9,163 +9,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.1.0] - 2026-10-09 -### Added - -- Add release-plz release and publish workflows ([#264](https://github.com/dfinity/cksol/pull/264)) -- Add a pool of durable nonce accounts ([#241](https://github.com/dfinity/cksol/pull/241)) -- Add deposit_sol and deposit_status endpoint skeletons ([#208](https://github.com/dfinity/cksol/pull/208)) -- Add pending-signatures queue for automated deposit flow ([#175](https://github.com/dfinity/cksol/pull/175)) -- Add structured logging for key minter operations ([#152](https://github.com/dfinity/cksol/pull/152)) -- Add `add_times` helper to `TestCanisterRuntime` ([#162](https://github.com/dfinity/cksol/pull/162)) -- Add `update_balance` endpoint for automated deposit monitoring ([#136](https://github.com/dfinity/cksol/pull/136)) -- Add minter_post_upgrade_instructions_consumed and minter_balance metrics ([#127](https://github.com/dfinity/cksol/pull/127)) -- Add `InsertionOrderedMap` for state queues ([#119](https://github.com/dfinity/cksol/pull/119)) -- Add `ExpiredTransaction` event and resubmission queue ([#122](https://github.com/dfinity/cksol/pull/122)) -- Add metric that tracks the oldest incomplete withdrawal ([#114](https://github.com/dfinity/cksol/pull/114)) -- Add consolidation transactions to dashboard ([#105](https://github.com/dfinity/cksol/pull/105)) -- Add status column to deposits table and show all deposits ([#100](https://github.com/dfinity/cksol/pull/100)) -- Add withdrawals table to dashboard ([#93](https://github.com/dfinity/cksol/pull/93)) -- Add minter metrics for deposits, withdrawals, and transactions ([#90](https://github.com/dfinity/cksol/pull/90)) -- Add minted deposits table to dashboard ([#85](https://github.com/dfinity/cksol/pull/85)) -- Add `icp-cli` deployment configuration ([#79](https://github.com/dfinity/cksol/pull/79)) -- Add minter dashboard with metadata section ([#72](https://github.com/dfinity/cksol/pull/72)) -- Add `FailedTransaction` event ([#70](https://github.com/dfinity/cksol/pull/70)) -- Add `FinalizedTransaction` event ([#65](https://github.com/dfinity/cksol/pull/65)) -- Add unit tests for `consolidate_deposits` ([#58](https://github.com/dfinity/cksol/pull/58)) -- Add `ResubmittedTransaction` event ([#55](https://github.com/dfinity/cksol/pull/55)) -- Add slot to `SubmittedTransaction` event ([#54](https://github.com/dfinity/cksol/pull/54)) -- Add signers field to `SubmittedTransaction` event ([#53](https://github.com/dfinity/cksol/pull/53)) -- Add `deposit_amount` to `DepositStatus::Processing` ([#45](https://github.com/dfinity/cksol/pull/45)) -- Add events sending deposit consolidation transactions ([#38](https://github.com/dfinity/cksol/pull/38)) -- Add parameter for required cycles for `update_balance` calls ([#32](https://github.com/dfinity/cksol/pull/32)) -- Add new event types to encoding/decoding unit tests ([#33](https://github.com/dfinity/cksol/pull/33)) -- DEFI-2671: add withdrawal fee ([#29](https://github.com/dfinity/cksol/pull/29)) -- Add events for deposit flow ([#26](https://github.com/dfinity/cksol/pull/26)) -- Add minimum deposit amount ([#25](https://github.com/dfinity/cksol/pull/25)) -- Add concurrent access guard to `update_balance` endpoint ([#17](https://github.com/dfinity/cksol/pull/17)) -- Add `CanisterRuntime` trait ([#23](https://github.com/dfinity/cksol/pull/23)) -- DEFI-2671: add minimum_withdrawal_amount parameter ([#13](https://github.com/dfinity/cksol/pull/13)) -- Add deposit flow skeleton ([#5](https://github.com/dfinity/cksol/pull/5)) +First release of the ckSOL minter, which mints ckSOL on the ICP ledger for SOL deposited on Solana and sends SOL back when ckSOL is burned. It is deployed on staging against Solana Devnet as ckDevnetSOL; the production minter for Solana Mainnet is not deployed yet. -### Changed +### Added -- Finalize withdrawals from their nonce accounts ([#260](https://github.com/dfinity/cksol/pull/260)) -- Convert get_deposit_address from query to update endpoint ([#183](https://github.com/dfinity/cksol/pull/183)) -- Name the withdrawal and status endpoints after the asset ([#262](https://github.com/dfinity/cksol/pull/262)) -- Report the age of the oldest in-flight deposit ([#237](https://github.com/dfinity/cksol/pull/237)) -- Re-broadcast in-flight withdrawal transactions ([#257](https://github.com/dfinity/cksol/pull/257)) -- Submit withdrawals as durable-nonce transactions ([#248](https://github.com/dfinity/cksol/pull/248)) -- Bind durable nonces to withdrawals and record them as submitted transactions ([#255](https://github.com/dfinity/cksol/pull/255)) -- Model submitted transactions as a MinterTransaction enum ([#252](https://github.com/dfinity/cksol/pull/252)) -- Read and verify durable nonce accounts ([#244](https://github.com/dfinity/cksol/pull/244)) -- Validate withdrawal destinations ([#243](https://github.com/dfinity/cksol/pull/243)) -- Mint the pending deposits of credited sweeps on a timer ([#220](https://github.com/dfinity/cksol/pull/220)) -- Record the minter public key in an event ([#235](https://github.com/dfinity/cksol/pull/235)) -- Drop failed sweeps and quarantine sweeps with mismatching metadata ([#218](https://github.com/dfinity/cksol/pull/218)) -- Credit the deposits of a finalized sweep from the transaction metadata ([#222](https://github.com/dfinity/cksol/pull/222)) -- Plan a sweep at submission ([#232](https://github.com/dfinity/cksol/pull/232)) -- Introduce the Deposits state with sweeps keyed by signature ([#230](https://github.com/dfinity/cksol/pull/230)) -- Sweep queued deposits to the main address on a timer ([#213](https://github.com/dfinity/cksol/pull/213)) -- Stop building CI tools from source ([#228](https://github.com/dfinity/cksol/pull/228)) -- Check the deposit address balance and charge cycles in deposit_sol ([#211](https://github.com/dfinity/cksol/pull/211)) -- Queue deposits in the state under sequence numbers ([#210](https://github.com/dfinity/cksol/pull/210)) -- Persist the block height and judge transaction expiry by it ([#214](https://github.com/dfinity/cksol/pull/214)) -- Revert "add update_balance endpoint for automated deposit monitoring" ([#136](https://github.com/dfinity/cksol/pull/136)) ([#199](https://github.com/dfinity/cksol/pull/199)) -- Revert "poll monitored addresses for deposit transactions" ([#139](https://github.com/dfinity/cksol/pull/139)) ([#198](https://github.com/dfinity/cksol/pull/198)) -- Revert "introduce InsertionOrderedSet for monitored_accounts" ([#178](https://github.com/dfinity/cksol/pull/178)) ([#197](https://github.com/dfinity/cksol/pull/197)) -- Revert "add pending-signatures queue for automated deposit flow" ([#175](https://github.com/dfinity/cksol/pull/175)) ([#196](https://github.com/dfinity/cksol/pull/196)) -- Revert "remove owner field from UpdateBalanceArgs" ([#169](https://github.com/dfinity/cksol/pull/169)) ([#195](https://github.com/dfinity/cksol/pull/195)) -- Extract shared deposit validation from manual flow ([#174](https://github.com/dfinity/cksol/pull/174)) -- Introduce `InsertionOrderedSet` for `monitored_accounts` ([#178](https://github.com/dfinity/cksol/pull/178)) -- Reject deposit transactions with a non-null `err` field ([#171](https://github.com/dfinity/cksol/pull/171)) -- Set `maxSupportedTransactionVersion=0` for getTransaction ([#166](https://github.com/dfinity/cksol/pull/166)) -- Downgrade `ic-stable-structures` to 0.6.9 ([#163](https://github.com/dfinity/cksol/pull/163)) -- Organize automatic deposit tests into submodules ([#161](https://github.com/dfinity/cksol/pull/161)) -- Poll monitored addresses for deposit transactions ([#139](https://github.com/dfinity/cksol/pull/139)) -- Canbench for replaying events in ckSOL minter ([#137](https://github.com/dfinity/cksol/pull/137)) -- Make `get_deposit_address` a query endpoint ([#138](https://github.com/dfinity/cksol/pull/138)) -- Rename `deposit_fee` to `manual_deposit_fee` and add `automated_deposit_fee` ([#133](https://github.com/dfinity/cksol/pull/133)) -- Rename `update_balance` to `process_deposit` ([#141](https://github.com/dfinity/cksol/pull/141)) -- Annotate unstable types in Candid interface ([#135](https://github.com/dfinity/cksol/pull/135)) -- Split transaction module into `rpc` and `deposit` ([#134](https://github.com/dfinity/cksol/pull/134)) -- Rename `AcceptedDeposit` to `AcceptedManualDeposit` ([#132](https://github.com/dfinity/cksol/pull/132)) -- Newest-first ordering in dashboard tables ([#121](https://github.com/dfinity/cksol/pull/121)) -- Single-round timers with rescheduling ([#97](https://github.com/dfinity/cksol/pull/97)) -- Split monitor timer into finalize and resubmit ([#120](https://github.com/dfinity/cksol/pull/120)) -- Check minter balance before processing withdrawals ([#115](https://github.com/dfinity/cksol/pull/115)) -- Use checked arithmetic for minter balance ([#113](https://github.com/dfinity/cksol/pull/113)) -- Improve `withdraw` function and restructure `WithdrawalRequest` ([#109](https://github.com/dfinity/cksol/pull/109)) -- Charge deposit consolidation fee in cycles during `update_balance` ([#108](https://github.com/dfinity/cksol/pull/108)) -- Handle ledger errors explicitly in mint and burn calls ([#112](https://github.com/dfinity/cksol/pull/112)) -- Rename `withdraw_sol` to `withdraw` across the codebase ([#110](https://github.com/dfinity/cksol/pull/110)) -- Track minter balance through state transitions ([#86](https://github.com/dfinity/cksol/pull/86)) -- Use first deposit account as fee payer in consolidation transactions ([#103](https://github.com/dfinity/cksol/pull/103)) -- Use shared test helpers in dashboard tests ([#101](https://github.com/dfinity/cksol/pull/101)) -- Extract shared unit test fixtures ([#92](https://github.com/dfinity/cksol/pull/92)) -- Update withdrawal status on transaction finalization ([#76](https://github.com/dfinity/cksol/pull/76)) -- Reproducible Docker build ([#80](https://github.com/dfinity/cksol/pull/80)) -- Submit withdrawal transactions to Solana via RPC ([#91](https://github.com/dfinity/cksol/pull/91)) -- Update `sol_rpc_client` and use new `get_recent_block` method ([#87](https://github.com/dfinity/cksol/pull/87)) -- Use `DepositId` instead of `Signature` in `DepositStatus` ([#89](https://github.com/dfinity/cksol/pull/89)) -- Batch withdrawal transactions ([#84](https://github.com/dfinity/cksol/pull/84)) -- Monitor submitted transactions for finalization ([#62](https://github.com/dfinity/cksol/pull/62)) -- Use versioned transaction messages in events ([#69](https://github.com/dfinity/cksol/pull/69)) -- Make Solana network configurable via init args ([#83](https://github.com/dfinity/cksol/pull/83)) -- Unify `SubmittedTransaction`, `ConsolidatedDeposits`, and `SentWithdrawalTransaction` events ([#67](https://github.com/dfinity/cksol/pull/67)) -- Serve basic canister metrics ([#64](https://github.com/dfinity/cksol/pull/64)) -- Use mint indices in `ConsolidatedDeposits` event ([#66](https://github.com/dfinity/cksol/pull/66)) -- DEFI-2671: schedule task for processing withdrawals ([#48](https://github.com/dfinity/cksol/pull/48)) -- Resubmit expired transactions with new blockhash ([#56](https://github.com/dfinity/cksol/pull/56)) -- Move `SchnorrSigner` to dedicated module and add to `CanisterRuntime` ([#57](https://github.com/dfinity/cksol/pull/57)) -- Charge users for `update_balance` endpoint ([#28](https://github.com/dfinity/cksol/pull/28)) -- Submit consolidation transactions ([#49](https://github.com/dfinity/cksol/pull/49)) -- Ensure minimum withdrawal above rent exemption threshold ([#46](https://github.com/dfinity/cksol/pull/46)) -- Specify `fee_payer_account` in `create_signed_transfer_transaction` ([#50](https://github.com/dfinity/cksol/pull/50)) -- Scheduled task to consolidate deposits ([#42](https://github.com/dfinity/cksol/pull/42)) -- Clean-up test runtime with stubs ([#44](https://github.com/dfinity/cksol/pull/44)) -- DEFI-2671: create a solana transaction ([#40](https://github.com/dfinity/cksol/pull/40)) -- Retry minting when calling `update_balance` again ([#36](https://github.com/dfinity/cksol/pull/36)) -- DEFI-2671: record burn event ([#30](https://github.com/dfinity/cksol/pull/30)) -- DEFI-2671: burn funds for withdrawal ([#18](https://github.com/dfinity/cksol/pull/18)) -- Mint on valid call to `update_balance` ([#22](https://github.com/dfinity/cksol/pull/22)) -- `get_events` endpoint ([#20](https://github.com/dfinity/cksol/pull/20)) -- Parse deposit transaction ([#15](https://github.com/dfinity/cksol/pull/15)) -- Fetch transaction in `update_balance` endpoint ([#14](https://github.com/dfinity/cksol/pull/14)) -- Events ([#8](https://github.com/dfinity/cksol/pull/8)) -- DEFI-2671: withdrawal workflow endpoints skeleton ([#9](https://github.com/dfinity/cksol/pull/9)) -- `get_minter_info` endpoint and logging infrastructure ([#10](https://github.com/dfinity/cksol/pull/10)) -- Initialization and upgrade endpoints ([#7](https://github.com/dfinity/cksol/pull/7)) -- DEFI-2640: Endpoint for deriving Solana deposit address ([#3](https://github.com/dfinity/cksol/pull/3)) -- Initial cargo workspace and build pipeline ([#1](https://github.com/dfinity/cksol/pull/1)) +- Deposit addresses: `get_deposit_address` derives a Solana deposit address for any ICRC-1 account, as an update call so that it can later depend on state without a breaking change. The minter's own main address is derived separately from the master key, so no account can obtain it as a deposit address ([#3](https://github.com/dfinity/cksol/pull/3), [#183](https://github.com/dfinity/cksol/pull/183), [#227](https://github.com/dfinity/cksol/pull/227)) +- Deposits: `deposit_sol` reads the finalized balance of the caller's deposit address and queues it for a sweep, charging the attached cycles for the RPC call plus the `deposit_sol_fee`. It rejects balances below `minimum_deposit_amount`, and a second call while a deposit for the same account is in flight. `deposit_sol_status` follows a deposit through `Queued`, `Swept`, `Finalized` and `Minted`, or `Dropped` and `Quarantined` on the unhappy paths ([#5](https://github.com/dfinity/cksol/pull/5), [#25](https://github.com/dfinity/cksol/pull/25), [#208](https://github.com/dfinity/cksol/pull/208), [#210](https://github.com/dfinity/cksol/pull/210), [#211](https://github.com/dfinity/cksol/pull/211), [#212](https://github.com/dfinity/cksol/pull/212)) +- Sweeps: a timer sweeps up to ten queued deposits into the main address per transaction. Once the transaction is finalized, the minter checks its outcome against the planned transfers, credits what the main address received and mints ckSOL for each deposit, with the sweep signature and deposit id in the mint memo. Sweeps that fail or expire are dropped and can be retried with `deposit_sol`; sweeps whose outcome does not match the plan are quarantined and nothing is minted ([#213](https://github.com/dfinity/cksol/pull/213), [#214](https://github.com/dfinity/cksol/pull/214), [#218](https://github.com/dfinity/cksol/pull/218), [#220](https://github.com/dfinity/cksol/pull/220), [#222](https://github.com/dfinity/cksol/pull/222), [#230](https://github.com/dfinity/cksol/pull/230), [#232](https://github.com/dfinity/cksol/pull/232)) +- Withdrawals: `withdraw_sol` burns ckSOL through an ICRC-2 approval and queues a transfer of the amount minus `withdrawal_fee`; `withdraw_sol_status` reports `Pending`, `TxSent` and `TxFinalized`. Amounts below `minimum_withdrawal_amount` are rejected, and so are destinations that could never receive the transfer or would corrupt the minter's accounting: reserved account keys such as sysvars and builtin programs, the minter's main address, and its nonce accounts ([#9](https://github.com/dfinity/cksol/pull/9), [#13](https://github.com/dfinity/cksol/pull/13), [#18](https://github.com/dfinity/cksol/pull/18), [#29](https://github.com/dfinity/cksol/pull/29), [#46](https://github.com/dfinity/cksol/pull/46), [#109](https://github.com/dfinity/cksol/pull/109), [#243](https://github.com/dfinity/cksol/pull/243), [#262](https://github.com/dfinity/cksol/pull/262)) +- Durable-nonce withdrawals: queued withdrawals are batched up to ten per transaction, each built on a durable nonce account from a pool configured through the init and upgrade arguments, so a withdrawal transaction never expires. Nonce accounts can only be added, and each is verified on read. A transaction that does not reach the chain is re-broadcast unchanged, and a withdrawal is finalized from the state of its nonce account, which unlike the transaction history stays readable indefinitely. Only withdrawals the main address can pay for, including the transaction fee, are submitted ([#84](https://github.com/dfinity/cksol/pull/84), [#115](https://github.com/dfinity/cksol/pull/115), [#202](https://github.com/dfinity/cksol/pull/202), [#241](https://github.com/dfinity/cksol/pull/241), [#244](https://github.com/dfinity/cksol/pull/244), [#248](https://github.com/dfinity/cksol/pull/248), [#252](https://github.com/dfinity/cksol/pull/252), [#255](https://github.com/dfinity/cksol/pull/255), [#257](https://github.com/dfinity/cksol/pull/257), [#258](https://github.com/dfinity/cksol/pull/258), [#260](https://github.com/dfinity/cksol/pull/260)) +- Event log: every state change is recorded as an event and replayed on upgrade, and `get_events` exposes the log. The minter's public key is recorded on first fetch, so it is available immediately after an upgrade ([#8](https://github.com/dfinity/cksol/pull/8), [#20](https://github.com/dfinity/cksol/pull/20), [#26](https://github.com/dfinity/cksol/pull/26), [#65](https://github.com/dfinity/cksol/pull/65), [#67](https://github.com/dfinity/cksol/pull/67), [#70](https://github.com/dfinity/cksol/pull/70), [#235](https://github.com/dfinity/cksol/pull/235)) +- Configuration: init and upgrade arguments for the SOL RPC canister, the ledger, the threshold key, the Solana network, fees, minimum amounts and nonce accounts, and `get_minter_info` to read them together with the minter's balance and main address ([#7](https://github.com/dfinity/cksol/pull/7), [#10](https://github.com/dfinity/cksol/pull/10), [#83](https://github.com/dfinity/cksol/pull/83), [#86](https://github.com/dfinity/cksol/pull/86)) +- Observability: structured canister logs, Prometheus metrics at `/metrics`, including the age of the oldest in-flight deposit and withdrawal for alerting, and a dashboard at `/dashboard` with the minter's metadata, minted and quarantined deposits, and withdrawals ([#10](https://github.com/dfinity/cksol/pull/10), [#64](https://github.com/dfinity/cksol/pull/64), [#72](https://github.com/dfinity/cksol/pull/72), [#90](https://github.com/dfinity/cksol/pull/90), [#114](https://github.com/dfinity/cksol/pull/114), [#127](https://github.com/dfinity/cksol/pull/127), [#140](https://github.com/dfinity/cksol/pull/140), [#152](https://github.com/dfinity/cksol/pull/152), [#237](https://github.com/dfinity/cksol/pull/237)) +- Reproducible build: the release wasm is built in Docker and its SHA-256 can be checked against the published one ([#80](https://github.com/dfinity/cksol/pull/80)) ### Fixed -- Issues found while deploying to staging ([#263](https://github.com/dfinity/cksol/pull/263)) -- Bind getTransaction responses to the queried signature ([#236](https://github.com/dfinity/cksol/pull/236)) -- Search the transaction history for signature statuses ([#239](https://github.com/dfinity/cksol/pull/239)) -- Derive the main address from the master key, not the account schema ([#227](https://github.com/dfinity/cksol/pull/227)) -- Tolerate concurrent first fetches of the master public key ([#226](https://github.com/dfinity/cksol/pull/226)) -- Reject deposit cycle parameters that cannot cover the RPC cost and fee ([#212](https://github.com/dfinity/cksol/pull/212)) -- Map derivation paths to signatures in the test Schnorr signer ([#217](https://github.com/dfinity/cksol/pull/217)) -- Reserve transaction fee when selecting affordable withdrawals ([#202](https://github.com/dfinity/cksol/pull/202)) -- Update `WithdrawalRequest` field names in `canbench.rs` ([#164](https://github.com/dfinity/cksol/pull/164)) -- Clean up Candid interface and standardize naming conventions ([#153](https://github.com/dfinity/cksol/pull/153)) -- Always report oldest_incomplete_withdrawal_age_seconds ([#140](https://github.com/dfinity/cksol/pull/140)) -- Move expired transaction into resubmit queue on expiry ([#126](https://github.com/dfinity/cksol/pull/126)) -- Fetch current slot before checking transaction statuses ([#124](https://github.com/dfinity/cksol/pull/124)) -- Use correct derivation path for minter address ([#99](https://github.com/dfinity/cksol/pull/99)) -- Set `response_size_estimate` only on variable-size RPC calls ([#95](https://github.com/dfinity/cksol/pull/95)) -- Update withdrawal signature on transaction resubmission ([#77](https://github.com/dfinity/cksol/pull/77)) -- DEFI-2671: non optional Accounts in create_signed_transfer_transaction ([#47](https://github.com/dfinity/cksol/pull/47)) -- `EventType::AcceptedWithdrawSolRequest` name ([#39](https://github.com/dfinity/cksol/pull/39)) -- Solana validator tests ([#16](https://github.com/dfinity/cksol/pull/16)) -- Setup `PocketIc` tests ([#6](https://github.com/dfinity/cksol/pull/6)) - -### Removed - -- Remove the transaction resubmission machinery ([#258](https://github.com/dfinity/cksol/pull/258)) -- Remove the signature-based deposit flow ([#221](https://github.com/dfinity/cksol/pull/221)) -- Remove owner field from `UpdateBalanceArgs` ([#169](https://github.com/dfinity/cksol/pull/169)) -- Remove stale TODO about charging cycles to caller ([#88](https://github.com/dfinity/cksol/pull/88)) - +- Trust RPC responses only for what was asked: a `getTransaction` response must contain the queried transaction, and `getSignatureStatuses` searches the transaction history, so a landed transaction is not reported as unknown once it leaves the recent status cache ([#236](https://github.com/dfinity/cksol/pull/236), [#239](https://github.com/dfinity/cksol/pull/239)) +- Tolerate concurrent first fetches of the master public key, which used to trap the second caller ([#226](https://github.com/dfinity/cksol/pull/226)) +- Fixes from a full deposit and withdrawal round trip and a deposit stress test on staging ([#263](https://github.com/dfinity/cksol/pull/263)) +[0.1.0]: https://github.com/dfinity/cksol/releases/tag/cksol_minter-v0.1.0 From 2960fa90a221e4222f2520ffab54db126889f7b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Demay?= Date: Fri, 9 Oct 2026 12:31:53 +0000 Subject: [PATCH 3/5] docs: name the ckSOL ledger in the minter changelog Co-Authored-By: Claude Opus 5.5 --- minter/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minter/CHANGELOG.md b/minter/CHANGELOG.md index 8ec99870..df39adda 100644 --- a/minter/CHANGELOG.md +++ b/minter/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.1.0] - 2026-10-09 -First release of the ckSOL minter, which mints ckSOL on the ICP ledger for SOL deposited on Solana and sends SOL back when ckSOL is burned. It is deployed on staging against Solana Devnet as ckDevnetSOL; the production minter for Solana Mainnet is not deployed yet. +First release of the ckSOL minter, which mints ckSOL on the ckSOL ledger for SOL deposited on Solana and sends SOL back when ckSOL is burned. It is deployed on staging against Solana Devnet as ckDevnetSOL; the production minter for Solana Mainnet is not deployed yet. ### Added From 6637018ffa832d6bc23fd71b9e5008c9319c88f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Demay?= Date: Fri, 9 Oct 2026 12:31:53 +0000 Subject: [PATCH 4/5] docs: drop the deployment status from the minter changelog Co-Authored-By: Claude Opus 5.5 --- minter/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minter/CHANGELOG.md b/minter/CHANGELOG.md index df39adda..afdf3d2c 100644 --- a/minter/CHANGELOG.md +++ b/minter/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.1.0] - 2026-10-09 -First release of the ckSOL minter, which mints ckSOL on the ckSOL ledger for SOL deposited on Solana and sends SOL back when ckSOL is burned. It is deployed on staging against Solana Devnet as ckDevnetSOL; the production minter for Solana Mainnet is not deployed yet. +First release of the ckSOL minter, which mints ckSOL on the ckSOL ledger for SOL deposited on Solana and sends SOL back when ckSOL is burned. It is deployed on staging against Solana Devnet as ckDevnetSOL. ### Added From 1ea12fe7e26de5da0faa8eca13eea0896399e074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Demay?= Date: Fri, 9 Oct 2026 12:31:53 +0000 Subject: [PATCH 5/5] docs: describe deposit_sol for any account, not only the caller's Co-Authored-By: Claude Opus 5.5 --- minter/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minter/CHANGELOG.md b/minter/CHANGELOG.md index afdf3d2c..cc8f242d 100644 --- a/minter/CHANGELOG.md +++ b/minter/CHANGELOG.md @@ -14,7 +14,7 @@ First release of the ckSOL minter, which mints ckSOL on the ckSOL ledger for SOL ### Added - Deposit addresses: `get_deposit_address` derives a Solana deposit address for any ICRC-1 account, as an update call so that it can later depend on state without a breaking change. The minter's own main address is derived separately from the master key, so no account can obtain it as a deposit address ([#3](https://github.com/dfinity/cksol/pull/3), [#183](https://github.com/dfinity/cksol/pull/183), [#227](https://github.com/dfinity/cksol/pull/227)) -- Deposits: `deposit_sol` reads the finalized balance of the caller's deposit address and queues it for a sweep, charging the attached cycles for the RPC call plus the `deposit_sol_fee`. It rejects balances below `minimum_deposit_amount`, and a second call while a deposit for the same account is in flight. `deposit_sol_status` follows a deposit through `Queued`, `Swept`, `Finalized` and `Minted`, or `Dropped` and `Quarantined` on the unhappy paths ([#5](https://github.com/dfinity/cksol/pull/5), [#25](https://github.com/dfinity/cksol/pull/25), [#208](https://github.com/dfinity/cksol/pull/208), [#210](https://github.com/dfinity/cksol/pull/210), [#211](https://github.com/dfinity/cksol/pull/211), [#212](https://github.com/dfinity/cksol/pull/212)) +- Deposits: `deposit_sol` reads the finalized balance of the given account's deposit address and queues it for a sweep, charging the attached cycles for the RPC call plus the `deposit_sol_fee`. It rejects balances below `minimum_deposit_amount`, and a second call while a deposit for the same account is in flight. `deposit_sol_status` follows a deposit through `Queued`, `Swept`, `Finalized` and `Minted`, or `Dropped` and `Quarantined` on the unhappy paths ([#5](https://github.com/dfinity/cksol/pull/5), [#25](https://github.com/dfinity/cksol/pull/25), [#208](https://github.com/dfinity/cksol/pull/208), [#210](https://github.com/dfinity/cksol/pull/210), [#211](https://github.com/dfinity/cksol/pull/211), [#212](https://github.com/dfinity/cksol/pull/212)) - Sweeps: a timer sweeps up to ten queued deposits into the main address per transaction. Once the transaction is finalized, the minter checks its outcome against the planned transfers, credits what the main address received and mints ckSOL for each deposit, with the sweep signature and deposit id in the mint memo. Sweeps that fail or expire are dropped and can be retried with `deposit_sol`; sweeps whose outcome does not match the plan are quarantined and nothing is minted ([#213](https://github.com/dfinity/cksol/pull/213), [#214](https://github.com/dfinity/cksol/pull/214), [#218](https://github.com/dfinity/cksol/pull/218), [#220](https://github.com/dfinity/cksol/pull/220), [#222](https://github.com/dfinity/cksol/pull/222), [#230](https://github.com/dfinity/cksol/pull/230), [#232](https://github.com/dfinity/cksol/pull/232)) - Withdrawals: `withdraw_sol` burns ckSOL through an ICRC-2 approval and queues a transfer of the amount minus `withdrawal_fee`; `withdraw_sol_status` reports `Pending`, `TxSent` and `TxFinalized`. Amounts below `minimum_withdrawal_amount` are rejected, and so are destinations that could never receive the transfer or would corrupt the minter's accounting: reserved account keys such as sysvars and builtin programs, the minter's main address, and its nonce accounts ([#9](https://github.com/dfinity/cksol/pull/9), [#13](https://github.com/dfinity/cksol/pull/13), [#18](https://github.com/dfinity/cksol/pull/18), [#29](https://github.com/dfinity/cksol/pull/29), [#46](https://github.com/dfinity/cksol/pull/46), [#109](https://github.com/dfinity/cksol/pull/109), [#243](https://github.com/dfinity/cksol/pull/243), [#262](https://github.com/dfinity/cksol/pull/262)) - Durable-nonce withdrawals: queued withdrawals are batched up to ten per transaction, each built on a durable nonce account from a pool configured through the init and upgrade arguments, so a withdrawal transaction never expires. Nonce accounts can only be added, and each is verified on read. A transaction that does not reach the chain is re-broadcast unchanged, and a withdrawal is finalized from the state of its nonce account, which unlike the transaction history stays readable indefinitely. Only withdrawals the main address can pay for, including the transaction fee, are submitted ([#84](https://github.com/dfinity/cksol/pull/84), [#115](https://github.com/dfinity/cksol/pull/115), [#202](https://github.com/dfinity/cksol/pull/202), [#241](https://github.com/dfinity/cksol/pull/241), [#244](https://github.com/dfinity/cksol/pull/244), [#248](https://github.com/dfinity/cksol/pull/248), [#252](https://github.com/dfinity/cksol/pull/252), [#255](https://github.com/dfinity/cksol/pull/255), [#257](https://github.com/dfinity/cksol/pull/257), [#258](https://github.com/dfinity/cksol/pull/258), [#260](https://github.com/dfinity/cksol/pull/260))