Skip to content

Releases: aleph-im/aleph-rs

Heph v0.3.0

03 May 21:48
2f9060f

Choose a tag to compare

Features

  • Server-side credit transfer support (#161): heph now processes aleph_credit_transfer POST messages emitted by aleph credit transfer. The new handlers/credit_transfer.rs does deserialize → schema validate → self-transfer reject → balance check → atomic apply (recipient upsert + sender decrement + two credit_history rows). 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_expense handlers, FIFO consumption, expiration enforcement, and whitelist gating.

Fixes

  • /api/v0/price/estimate returned 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 shared compute_cost_records): per-second STORAGE for STORE, per-second EXECUTION for PROGRAM/INSTANCE (with the 25-MiB minimum and calculate_vm_cost minimums 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 ref via serde_json::to_value(&post.post_type) but post_type is just the string "amend", so .get("ref") always returned None and 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 reads post.reference directly, matching handlers/post.rs.

Breaking changes

  • New nullable columns on the credit_history table (message_hash, counterparty, expiration_at) plus an index on message_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

28 Apr 10:19
774ed3f

Choose a tag to compare

Features

  • Authenticated file uploads (#142): The storage endpoint now accepts a signed PendingMessage as 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 of pagination_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): StoreContent now accepts an optional payment field. hold and credit payment types are accepted; superfluid is rejected.
  • Auto-generated corechannel aggregate (#104): A new CoreChannelState ingests corechan-operation POST 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/raw Content-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

21 Apr 08:10
af865a0

Choose a tag to compare

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

17 Apr 20:55
f0d8b0c

Choose a tag to compare

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

12 Apr 22:18
f7357a7

Choose a tag to compare

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

07 Apr 10:37
332ff2a

Choose a tag to compare

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

26 Mar 16:54
acf9628

Choose a tag to compare

What's Changed

Full Changelog: v0.8.2...v0.8.3


Published to crates.io

v0.8.2

24 Mar 22:31
50a9c5b

Choose a tag to compare

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

23 Mar 22:28
707cfc9

Choose a tag to compare

What's Changed

Full Changelog: v0.8.0...v0.8.1


Published to crates.io

v0.8.0

23 Mar 20:35
800fc62

Choose a tag to compare

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