Releases: aleph-im/aleph-rs
Releases · aleph-im/aleph-rs
Heph v0.3.0
Features
- Server-side credit transfer support (#161): heph now processes
aleph_credit_transferPOST messages emitted byaleph credit transfer. The newhandlers/credit_transfer.rsdoes deserialize → schema validate → self-transfer reject → balance check → atomic apply (recipient upsert + sender decrement + twocredit_historyrows). The post insert and the apply share a single SQL transaction, so a failed transfer rolls back the post too. Out of scope:aleph_credit_distribution/aleph_credit_expensehandlers, FIFO consumption, expiration enforcement, and whitelist gating.
Fixes
/api/v0/price/estimatereturned zeros for everything (#180): the handler was a stub returning{cost:"0.000000", detail:[], required_tokens:0}regardless of input, so STORE on a fresh address reported zero storage cost. The handler now runs the same cost calculation as submission (factored into a sharedcompute_cost_records): per-second STORAGE for STORE, per-second EXECUTION for PROGRAM/INSTANCE (with the 25-MiB minimum andcalculate_vm_costminimums applied), zero/empty for free types (POST/AGGREGATE/FORGET). Non-inline messages fall back to the local FileStore for content. Malformed bodies, hash-mismatched inline content, and unresolvable non-inline content now return 400 instead of a silently-wrong zero estimate.- Delegated POST amend authorization always rejected (#179): the original-owner check was reading
refviaserde_json::to_value(&post.post_type)butpost_typeis just the string"amend", so.get("ref")always returnedNoneand every delegated amend failed with"amend has empty ref"regardless of the request body. Direct-ownership amends short-circuited earlier and were unaffected. The fix readspost.referencedirectly, matchinghandlers/post.rs.
Breaking changes
- New nullable columns on the
credit_historytable (message_hash,counterparty,expiration_at) plus an index onmessage_hash(#161). No migration is shipped. Existing v0.2.0 databases need to be rebuilt. heph is a local testing CCN, so this should only affect dev environments with persistent state from the previous release.
Heph v0.2.0
Features
- Authenticated file uploads (#142): The storage endpoint now accepts a signed
PendingMessageas multipart metadata. When metadata is present, the server verifies the signature, checks the file hash matches, and verifies the user's balance before storing the file. Requests are rejected with 403, 422, or 402 as appropriate. - Cursor-based pagination (#136): Messages and posts list endpoints (
/api/v0/messages.json,/api/v0/posts.json, /api/v1/posts.json) now accept a?cursor=query parameter and return next_cursor instead ofpagination_total/pagination_page. Uses keyset pagination on time + hash to avoid expensive COUNT queries. Page-based pagination still works when ?cursor= is
absent. - Credit payment for STORE messages (#130):
StoreContentnow accepts an optional payment field. hold and credit payment types are accepted; superfluid is rejected. - Auto-generated corechannel aggregate (#104): A new
CoreChannelStateingestscorechan-operationPOST messages (create-node, create-resource-node, link, unlink, drop-node, amend)
and maintains the corechannel aggregate, served via the existing aggregates API. Authorization (owner, manager) and structural constraints (1:1 address-to-CCN, max 8 CRNs) are enforced. Scores are hardcoded to 1.0 with a synthetic 500k stake per CCN — no balance/staking enforcement. - GET
/api/v0/version(#86): New health-check endpoint.
Fixes
- POST content round-trip corruption (#115): The messages.content column has been removed. Previously, content was re-serialized from item_content and stored separately, which was lossy when the PostType untagged enum misclassified messages (e.g. corechannel POSTs lost their type field). Content is now deserialized from the original item_content bytes on
access. Schema change: the content column is dropped from messages. - POST type misclassification (#104): Any POST with a ref field was being misclassified as an amend. Now type == "amend" is checked explicitly.
- STORE file size (#95):
GET /api/v0/storage/raw/{hash}now always reads the size from the file store rather than trusting the (sometimes-missing) size in the STORE message metadata. HEAD /api/v0/storage/rawContent-Length (#86): Let actix derive Content-Length from the body instead of setting it manually (actix was overriding it to 0).
Breaking changes
- messages.content column dropped: any consumer reading directly from the SQLite DB needs to deserialize from item_content instead. Existing databases will need a migration or rebuild.
- StoreContent now rejects payment.type == "superfluid" (previously accepted).
v0.9.2
What's Changed
- fix(cli): restore JSON output for authenticated file upload by @odesenfans in #147
Full Changelog: v0.9.1...v0.9.2
✅ Published to crates.io
v0.9.1
What's Changed
- feat: support authenticated file upload with signed metadata by @odesenfans in #142
- ci: support release candidate tags in workflows by @odesenfans in #144
- feat(cli): add account migration from Python CLI by @odesenfans in #143
- fix(sdk): resolve private-interfaces lint on verify_message_header by @odesenfans in #146
Full Changelog: v0.9.0...v0.9.1
✅ Published to crates.io
v0.9.0
What's Changed
- feat(cli): add image presets and rename --rootfs to --image by @odesenfans in #138
- feat(sdk): use cursor-based pagination in iterators by @odesenfans in #136
- feat(cli): add --size flag for tier-based instance sizing by @odesenfans in #139
- feat(cli): add instance price command, GPU and confidential VM support by @odesenfans in #140
Full Changelog: v0.8.4...v0.9.0
✅ Published to crates.io
v0.8.4
What's Changed
- feat(node): add --network parameter to node commands by @odesenfans in #132
- fix(node): handle missing corechannel aggregate and add --corechannel-address by @odesenfans in #133
- refactor(sdk): remove protoc build-time dependency by @odesenfans in #134
Full Changelog: v0.8.3...v0.8.4
✅ Published to crates.io
v0.8.3
What's Changed
- fix: i386 notice in apt update by @odesenfans in #129
- feat: add credit payment support for STORE messages by @odesenfans in #130
Full Changelog: v0.8.2...v0.8.3
✅ Published to crates.io
v0.8.2
What's Changed
- fix(cli): improve --help descriptions and sort commands alphabetically by @odesenfans in #126
- fix(cli): include type "amend" in post amend envelope by @odesenfans in #127
Full Changelog: v0.8.1...v0.8.2
✅ Published to crates.io
v0.8.1
What's Changed
- feat(cli): add address aliases for bookmarking external addresses by @odesenfans in #122
- feat(cli): add
authorization receivedcommand by @odesenfans in #120 - fix(ci): rename release binaries to avoid asset name collisions by @odesenfans in #123
- release: v0.8.1 by @odesenfans in #124
- fix(ci): use bash shell for release upload step on Windows by @odesenfans in #125
Full Changelog: v0.8.0...v0.8.1
✅ Published to crates.io
v0.8.0
Highlights
v0.8.0 is a major release that transforms aleph-rs from a read-only SDK into a full read-write toolkit. The SDK can now create and submit every Aleph message type, the new CLI covers the full lifecycle of accounts, files, VMs, and nodes, and heph provides a local CCN for integration testing.
New Features
Full message creation & submission (#80, #89, #91, #92)
- New typed builders — PostBuilder, AggregateBuilder, ForgetBuilder, StoreBuilder, ProgramBuilder, InstanceBuilder — provide a safe, ergonomic API for constructing every Aleph
message type. - submit_message() on AlephMessageClient handles signing, serialization, and upload in one call.
- StoreBuilder supports streaming file upload, so large files never need to be buffered in memory.
- Inline content size limit raised to 200 kB (#88).
Account system with EVM & Solana signing (#78, #100, #107, #108)
- New Account trait abstracts over EVM (secp256k1/EIP-191) and Solana (Ed25519) key pairs for message signing.
- aleph account CLI commands manage accounts with OS keychain storage (Linux secret-service, macOS Keychain, Windows Credential Manager).
- Ledger hardware wallet support: sign messages directly from a Ledger device via the Ethereum app (#107).
- aleph account balance displays ALEPH token balances (#108).
Authorization management (#102, #111)
- New authorization system (types, SDK, and CLI) allows granting and revoking signing permissions to delegate addresses.
- on_behalf_of support enables delegated message signing — sign messages on behalf of another account using a granted authorization.
Corechannel operations (#83, #87, #103, #109)
- SDK module for corechannel node operations: create, update, and amend node records.
- CLI subcommands: aleph node create, aleph node update, aleph node amend, aleph node list.
CRN VM control (#105, #106)
- SDK client and CLI commands for controlling VMs on Compute Resource Nodes: start, stop, reboot, erase, and check status.
- aleph instance create deploys new VM instances (#97).
File upload & download (#81, #92, #94, #96)
- upload_to_storage() and upload_to_ipfs() on AlephStorageClient (#81).
- aleph file upload streams a local file to Aleph storage (#94).
- aleph file download retrieves files by item hash, message hash, or content ref (#96).
heph — lightweight local CCN for testing (#84, #86, #104)
- New heph crate: an in-process mock of the Aleph CCN API, backed by a local file store. Ideal for integration tests that need deterministic, offline message creation and retrieval.
- heph-based integration tests now run in CI (#86).
- Auto-generates corechannel aggregate from posted corechan operations (#104).
Auto-paginating iterators (#93)
- messages_iter() and posts_iter() return async iterators that automatically follow pagination, eliminating manual page management.
Named CCN endpoints (#112)
- Configure well-known CCN endpoints by name (e.g. --endpoint mainnet) instead of passing full URLs.
Configurable HTTP timeouts (#114)
- AlephClientBuilder now exposes connect_timeout() and request_timeout() for fine-grained control over HTTP timeouts.
Multi-key aggregate fetch (#101)
- Fetch aggregates for multiple keys in a single request.
CLI improvements
- CLI has been restructured into per-command modules for maintainability (#99).
- Package managers: install via brew install aleph-im/tap/aleph (#118) or from the APT repository (#117).
Bug Fixes
- heph: Use item_content for API response content field (#115).
- heph: Resolve file size from FileStore when store metadata omits size (#95).
- types: Skip serializing None fields instead of emitting null (#98).
- cli: Resolve --chain argument name clash in authorization add (#110).
- cli: Use block_in_place for Ledger signing to avoid nested runtime panic (#116).
What's Changed
- deps: use memsizes crate by @odesenfans in #76
- chore: bump to memsizes 1.0 by @odesenfans in #77
- feature: do not hardcode the corechannel address by @odesenfans in #79
- feat: add Account trait with EVM and Solana signing by @odesenfans in #78
- feat: typed message builders for POST, AGGREGATE, and FORGET by @odesenfans in #80
- feat: add corechannel operations SDK module by @odesenfans in #83
- feat: add CLI commands for creating posts, aggregates, and forget messages by @odesenfans in #82
- feat: add heph, a lightweight local Aleph CCN for testing by @odesenfans in #84
- feat: add upload_to_storage and upload_to_ipfs to AlephStorageClient by @odesenfans in #81
- fix: release pipeline for heph was broken by @odesenfans in #85
- feat: add heph-based integration tests to CI by @odesenfans in #86
- feat(cli): add node subcommands for corechannel operations by @odesenfans in #87
- feat: increase inline content size limit to 200kB by @odesenfans in #88
- feat: add submit_message to AlephMessageClient for full message upload support by @odesenfans in #89
- internal: add Justfile for common development tasks by @odesenfans in #90
- feat: add auto-paginating iterators for messages and posts by @odesenfans in #93
- feat: add StoreBuilder and streaming file upload with STORE message support by @odesenfans in #92
- feat(cli): add file upload subcommand by @odesenfans in #94
- feat: add ProgramBuilder and InstanceBuilder for creating PROGRAM and INSTANCE messages by @odesenfans in #91
- fix(heph): resolve file size from FileStore when store metadata omits size by @odesenfans in #95
- feat(cli): add file download subcommand with hash, message-hash, and ref lookup by @odesenfans in #96
- feat(cli): add instance create subcommand for VM deployments by @odesenfans in #97
- fix(types): skip serializing None fields instead of emitting null by @odesenfans in #98
- refactor(cli): split main.rs into per-command modules by @odesenfans in #99
- feat(cli): add account management with OS keychain storage by @odesenfans in #100
- feat(sdk): add multi-key aggregate fetch by @odesenfans in #101
- feat: add authorization management system (types, SDK, CLI) by @odesenfans in #102
- feat: add amend action for corechan node operations by @odesenfans in #103
- feat(heph): auto-generate corechannel aggregate from corechan-operati… by @odesenfans in #104
- feat(sdk): add CRN VM control client by @odesenfans in #105
- feat(cli): add CRN VM control commands by @odesenfans in #106
- feat(cli): add node list command by @odesenfans in #109
- feat(cli): add Ledger hardware wallet support by @odesenfans in #107
- feat(cli): add account balance display and balance command by @odesenfans in #108
- fix(cli): resolve --chain argument name clash in authorization add by @odesenfans in #110
- feat: add named CCN endpoint configuration by @odesenfans in #112
- feat: add on_behalf_of support for delegated message signing by @odesenfans in #111
- feat(sdk): add configurable HTTP timeouts to AlephClient by @odesenfans in #114
- fix(cli): use block_in_place for ledger signing to avoid nested runtime panic by @odesenfans in #116
- feat(cli): add APT packaging and repository workflow by @odesenfans in #117
- fix(heph): use item_content for API response content field by @odesenfans in #115
- feat(brew): add Homebrew tap packaging and release workflow by @odesenfans in #118
- fix(ci): upload release assets sequentially to avoid parallel upload race by @odesenfans in #121
Full Changelog: v0.7.1...v0.8.0
✅ Published to crates.io