org.sigilaris.core.application.transactions

Members list

Type members

Classlikes

final case class AccountSignature(account: Account, sig: Signature)

Account signature containing both the signing account and the signature.

Account signature containing both the signing account and the signature.

This binds a cryptographic signature to the account that produced it, enabling verification that the signature was created by a key controlled by the specified account.

Value parameters

account

the account that signed the transaction

sig

the cryptographic signature

Attributes

Example
val accountSig = AccountSignature(
 account = Account.Named(Utf8("alice")),
 sig = signature
)
Source
Model.scala
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
final case class ModuleId[Path <: Tuple]

Module identifier carrying the module-relative path.

Module identifier carrying the module-relative path.

IMPORTANT: The path is always module-relative (MName *: SubPath), never prefixed with the mount path. This ensures transactions remain portable across different deployment paths.

The path tuple identifies which module a transaction belongs to. During blueprint composition, the path is used to route transactions to the correct reducer by matching the first segment (module name).

Value parameters

path

the module-relative path tuple (e.g., ("accounts" *: EmptyTuple) or ("accounts" *: "v1" *: EmptyTuple))

Attributes

Example
// A transaction for the "accounts" module
val moduleId = ModuleId("accounts" *: EmptyTuple)
// Even when the module is mounted at ("app"), the moduleId stays ("accounts")
// The full path ("app", "accounts") is only constructed at system boundaries
Companion
object
Source
Model.scala
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
object ModuleId

Companion object for ModuleId providing construction and pattern matching.

Companion object for ModuleId providing construction and pattern matching.

Attributes

Companion
class
Source
Model.scala
Supertypes
trait Product
trait Mirror
class Object
trait Matchable
class Any
Self type
ModuleId.type
trait ModuleRoutedTx extends Tx

Transaction trait with module routing information.

Transaction trait with module routing information.

Transactions that implement this trait carry their module path, enabling proper routing in composed blueprints. The module path is used to dispatch transactions to the correct reducer.

Attributes

Example
case class AccountsTransfer(from: Address, to: Address, amount: BigInt)
   extends Tx with ModuleRoutedTx:
 val moduleId = ModuleId(("accounts" *: EmptyTuple))
 type Reads = Entry["balances", Address, Account] *: EmptyTuple
 type Writes = Entry["balances", Address, Account] *: EmptyTuple
 type Result = Unit
 type Event = TransferEvent
Source
Model.scala
Supertypes
trait Tx
class Object
trait Matchable
class Any

Companion for NetworkId providing constructors and an extension method for unwrapping.

Companion for NetworkId providing constructors and an extension method for unwrapping.

Attributes

Source
NetworkId.scala
Supertypes
class Object
trait Matchable
class Any
Self type
NetworkId.type
trait ReducerCoverage[T <: Tx]

Compile-time marker that a reducer stack handles the given transaction.

Compile-time marker that a reducer stack handles the given transaction.

Attributes

Source
Model.scala
Supertypes
class Object
trait Matchable
class Any
Known subtypes
final case class Signed[+A <: Tx](sig: AccountSignature, value: A)

Signed transaction wrapper enforcing signature requirement at type level.

Signed transaction wrapper enforcing signature requirement at type level.

All blockchain transactions must be wrapped in Signed[A] to ensure they carry a valid signature. This is enforced at compile time - attempting to submit an unsigned transaction to a blueprint will result in a type error.

The covariant type parameter (+A <: Tx) allows Signed[CreateNamedAccount] to be used where Signed[Tx & ModuleRoutedTx] is expected, enabling flexible composition while maintaining type safety.

Type parameters

A

the transaction type (covariant)

Value parameters

sig

the account signature (account + cryptographic signature)

value

the actual transaction payload

Attributes

See also

AccountSignature for signature structure

ADR-0012 for design rationale

Example
// Creating a signed transaction
val tx = CreateNamedAccount(...)
val keyPair = CryptoOps.generate()
val account = Account.Named(Utf8("alice"))
// Sign the transaction
val signedTx: Either[SigilarisFailure, Signed[CreateNamedAccount]] =
 for
   sig <- keyPair.sign(tx)
 yield Signed(AccountSignature(account, sig), tx)
// Use in blueprint (requires Signed wrapper)
module.reducer.apply(signedTx)
Source
Model.scala
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
trait Tx

Transaction trait defining read/write requirements and result types.

Transaction trait defining read/write requirements and result types.

A transaction declares:

  • Reads: tuple of table Entry types this transaction reads from
  • Writes: tuple of table Entry types this transaction writes to
  • Result: the type of result produced
  • Event: the type of events emitted

The Reads and Writes types are used for compile-time verification that a reducer has access to all required tables.

Attributes

Example
case class Transfer(from: Address, to: Address, amount: BigInt) extends Tx:
 type Reads = (Entry["accounts", Address, Account], Entry["balances", Address, BigInt])
 type Writes = Entry["balances", Address, BigInt] *: EmptyTuple
 type Result = Unit
 type Event = TransferEvent
Source
Model.scala
Supertypes
class Object
trait Matchable
class Any
Known subtypes
final case class TxEnvelope(networkId: NetworkId, createdAt: Instant, memo: Option[Utf8])

Common metadata attached to every transaction payload.

Common metadata attached to every transaction payload.

The envelope travels alongside the domain specific body so reducers can make consistent decisions about replay protection, auditing and cross-network routing without the individual transaction types having to duplicate those concerns.

Value parameters

createdAt

client supplied timestamp indicating when the transaction was authored

memo

optional free form note persisted for operational auditing

networkId

blockchain/network identifier encoded as an opaque NetworkId

Attributes

Companion
object
Source
TxEnvelope.scala
Supertypes
trait Serializable
trait Product
trait Equals
class Object
trait Matchable
class Any
Show all
object TxEnvelope

Companion for TxEnvelope providing typeclass instances.

Companion for TxEnvelope providing typeclass instances.

Attributes

Companion
class
Source
TxEnvelope.scala
Supertypes
trait Product
trait Mirror
class Object
trait Matchable
class Any
Self type
TxEnvelope.type
final class TxRegistry[Txs <: Tuple]

Transaction registry holding a tuple of transaction types.

Transaction registry holding a tuple of transaction types.

This is a compile-time marker used for type-level transaction set definitions.

Type parameters

Txs

the transaction types tuple

Attributes

Companion
object
Source
Model.scala
Supertypes
class Object
trait Matchable
class Any
object TxRegistry

Companion providing factory methods for TxRegistry.

Companion providing factory methods for TxRegistry.

Attributes

Companion
class
Source
Model.scala
Supertypes
class Object
trait Matchable
class Any
Self type
TxRegistry.type

Companion providing compile-time verification that all transactions in a tuple have reducer coverage.

Companion providing compile-time verification that all transactions in a tuple have reducer coverage.

Attributes

Source
Model.scala
Supertypes
class Object
trait Matchable
class Any
Self type

Types

opaque type NetworkId

Opaque identifier for a blockchain network.

Opaque identifier for a blockchain network.

The value is represented as a non-negative arbitrary precision integer so it can be derived from configuration files or on-chain governance decisions without lossy conversions. By modelling the identifier as an opaque type we keep the implementation details private to the transactions package while still reusing the existing org.sigilaris.core.datatype.BigNat codecs.

Prefer constructing instances through the helpers in the companion object so future validation rules can be introduced without touching call sites.

Attributes

Source
NetworkId.scala