Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions libs/types/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,17 @@ 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
Comment thread
gregorydemay marked this conversation as resolved.

First release of the Candid types of the ckSOL minter's public interface.

### 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
24 changes: 24 additions & 0 deletions minter/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,27 @@ 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

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

- 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 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))
- 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

- 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
Loading