Sigil’s transaction model is typed. Each transaction is one of 58 variants in 15 categories. The transaction envelope carries the originator DID, the nonce, the fee, the expiry height, and the typed payload.

Envelope

{
  "from": "did:oas:sigil:agent:alice",
  "nonce": 42,
  "fee": "1000",
  "expires_at_height": 1024533,
  "tx": {
    "kind": "<TransactionKind>",
    "data": { /* kind-specific */ }
  }
}
Signing covers the JCS-canonicalised envelope under the domain separator sigil/tx/v1. See authentication.

Categories

CategoryVariantsExamples
Identity6RegisterDid, RegisterGalAnchor, RegisterMhrRoot
Currency3Transfer, BurnCurrency, MintCurrency
Staking5Delegate, Undelegate, Redelegate, ClaimRewards, RegisterValidator
Names7RegisterUsername, RegisterName, RenewName, SetNameRecords
Mail6RegisterMailbox, SetMailPolicy, RotateMailKey, CommitDelivery
Mandates4IssueMandate, DelegateMandate, RevokeMandate, ConsumeMandate
DEX5DexCreatePool, DexAddLiquidity, DexRemoveLiquidity, DexSwapExactIn, DexSwapExactOut
NFT6MintCollection, MintNft, TransferNft, BurnNft, SetRoyalty, VerifyIdentityNft
Custom tokens4CreateCustomToken, MintCustomToken, BurnCustomToken, TransferCustomToken
Compute5RegisterComputeProvider, OpenComputeJob, SubmitComputeReceipt, ChallengeComputeReceipt
Labor6LaborOpenOffer, LaborBid, LaborAwardContract, LaborMilestone, LaborDispute
Governance4SubmitProposal, Vote, Veto, ExecuteTimelocked
Treasury2DisburseFromTreasury, PublishTransparencyReport
Crucible3OpenCrucibleRun, CommitWeightRoot, CloseCrucibleRun
Vigils10RegisterVigilSubscription, EventDelivery, RegisterIngestor, SlashIngestor
Nova4RegisterParcel, TransferParcel, SetWorldRecord, CommitPresence
Some variants are shared across categories; the source of truth is node/sigil-core/src/transaction.rs::TransactionKind.

Per-transaction reference

Each transaction has a dedicated reference page under the corresponding primitive. Use the Primitives tab to navigate by feature, or query the conformance test for the exhaustive list:
cargo test -p sigil-node tx_truth_table -- --nocapture

Transaction lifecycle

  1. Build. Client constructs the envelope, fills the nonce from sigil_getAccount.
  2. Sign. Client signs the JCS-canonicalised envelope with the DID’s Ed25519 key.
  3. Submit. Client calls sigil_sendTransaction with the envelope, signature, and public key.
  4. Admit. The node verifies signature, nonce, balance, fee, and expiry before placing the transaction in the mempool.
  5. Include. The block producer selects the transaction for inclusion in a draft block.
  6. Finalise. The active set finalises the block under MACA. The transaction is final at the end of round one.
  7. Receipt. Clients fetch the receipt via sigil_getReceipt once the transaction is finalised.
The expected end-to-end latency is one block (~6 s) under nominal conditions.

Receipts

{
  "tx_hash": "0xabc...",
  "status": "Included",
  "block_height": 1024540,
  "block_hash": "0xdef...",
  "gas_used": 0,
  "events": [
    { "kind": "transfer", "from": "did:oas:sigil:agent:alice", "to": "did:oas:sigil:agent:bob", "amount": "1000000" }
  ],
  "reverted": null
}
reverted is null for successful transactions or carries a domain-specific reason for reverted ones. See errors for the reason codes.