Packages
Build, sign, and submit Cardano transactions from Elixir — payments and on-chain metadata, from a mnemonic wallet, via Blockfrost. Narrow by design, verified against reference implementations.
Current section
Files
Jump to
Current section
Files
README.md
# Inkan 印鑑
**Build, sign, and submit Cardano transactions from Elixir.**
An *inkan* is the registered seal that makes a document official in Japan.
This library is that seal for the Cardano blockchain: a small, carefully
verified Elixir core for putting payments and metadata on chain — no Node
sidecar, no wallet backend, no WASM.
Built and maintained by [Inkwright, Inc.](https://inkwright.inc), which runs
its document-proof service on it in production.
## Scope — a promise, not a roadmap
Inkan deliberately does a few things and aims to do them flawlessly:
- **Keys & addresses** — BIP-39 mnemonics, CIP-1852 / BIP32-Ed25519 key
derivation, Shelley base & enterprise addresses.
- **Transactions** — build, balance, and fee a payment transaction in the
current era; attach transaction metadata (CIP-20 and friends); sign and
serialize to CBOR.
- **Providers** — a behaviour for chain access with a Blockfrost
implementation: protocol parameters, UTxOs, submission, confirmation.
Explicitly **out of scope** (today, and honestly maybe forever): Plutus
scripts, minting, staking/governance certificates, chain indexing. A narrow
library that is correct and maintained beats a sprawling one that is
neither. If the scope grows, it grows because something in production needs
it.
## Correctness
Every cryptographic and serialization component is verified against
reference implementations and published test vectors, and the test suite
replays real on-chain transactions byte for byte. See `test/` — the vectors
ship with the library.
## Status
Pre-release; the full scope above is implemented and verified (see
Correctness), through to the one-call flow:
```elixir
{:ok, wallet} = Inkan.Wallet.from_mnemonic(mnemonic, :mainnet)
config = Inkan.Provider.Blockfrost.config(blockfrost_project_id, :mainnet)
{:ok, tx_id} =
Inkan.anchor(Inkan.Provider.Blockfrost, config, wallet, 7368, %{
"doc_sha256" => sha256_hex
})
```
Remaining before 0.1.0 on hex: a live preprod rehearsal and API-stability
review. The public API may still shift until then.
## Installation
```elixir
def deps do
[
{:inkan, "~> 0.1"}
]
end
```
## License
MIT © Inkwright, Inc.