0.1.0 — 2026-07-01 — foundation (alpha)

The cryptographic and encoding foundation, fully unit-tested offline:

  • Keccak-256 — pure Elixir (Hedera/Ethereum padding), verified against known vectors.
  • KeysHedera.PrivateKey / Hedera.PublicKey for Ed25519 and ECDSA secp256k1, with Hedera's signing conventions (Keccak-256 prehash + canonical low-S r‖s for ECDSA), 33-byte compressed public keys, sign/verify, hex round-trip.
  • IdentifiersAccountId, TopicId, Timestamp (parse / format / protobuf).
  • Protobuf — minimal proto3 wire encoder (Hedera.Proto).

Consensus Service (transactions + gRPC)

  • TransactionsHedera.Transaction encodes and signs TransactionBodySignedTransactionTransaction for consensusSubmitMessage and consensusCreateTopic.
  • gRPCHedera.Grpc (unary over HTTP/2 h2c via Mint), Hedera.Network (testnet/mainnet nodes), Hedera.Client (submit_message/3, create_topic/2).
  • Validated live: a natively-built, natively-signed HCS message submit is accepted by a Hedera testnet node (pre-check OK), confirming protobuf field numbers and signing end-to-end. (mix test --include network.)

Receipts & mirror node

Reliability

  • Address book + retryHedera.Network.testnet_nodes/0 lists multiple consensus nodes; Hedera.Client rebuilds + re-signs per target node and retries the next node on transient (BUSY) pre-checks or transport errors.

Crypto Service (HBAR transfers)

  • TransfersHedera.Transaction.crypto_transfer/1 and Hedera.Client.transfer_hbar/3 build and sign a cryptoTransfer of HBAR between accounts. Amounts are encoded as protobuf sint64 (ZigZag, via Hedera.Proto.sint64_field/2); debits are negative, credits positive, and must net to zero.
  • Validated live: a natively-built transfer is accepted by a testnet node (pre-check OK) and reaches a SUCCESS receipt, confirming the cryptoTransfer field numbers and the TransferList / AccountAmount (sint64) encoding end-to-end.

Token Service (HTS)

  • TokensHedera.Transaction gains token_create/1, token_mint/1, token_burn/1 and token_associate/1; crypto_transfer/1 now also carries :token_transfers. Hedera.Client gains create_token/2, mint_token/4, burn_token/4, associate_token/4, transfer_token/4. New Hedera.TokenId; Hedera.PublicKey.to_key_proto/1 encodes a Key message (Ed25519 in field 2, ECDSA secp256k1 in field 7); Hedera.Receipt now parses token_id and new_total_supply.
  • Multi-signature — transaction building accepts :signers (extra keys beyond the operator); the signature map carries one SignaturePair per distinct key, so e.g. a token association can be signed by both the fee-paying operator and the account being associated.
  • Validated live (full lifecycle on testnet): create a fungible token → mint supply (receipt token_id + new_total_supply) → associate a second account (multi-sig: operator ECDSA + account Ed25519) → transfer tokens to it — every step reaches a SUCCESS receipt. This confirms the tokenCreation (29) / tokenMint (37) / tokenAssociate (40) field numbers, the Key encoding, and TokenTransferList end-to-end.

Next: NFT mint/metadata, token freeze/kyc/wipe, protoc-generated messages, hex.pm release.