Skip to main content

TRANSFER, BURN, ATTESTATION_REWARD

Core value-movement transactions. Active from genesis (no fork required).

TRANSFER

Moves OMBRA from one account to another.

FieldTypeNotes
type"TRANSFER"
fromstringSender address (40 hex)
tostringRecipient address (40 hex)
amountstring (bigint)Micro-OMBRA
feestring (bigint)Micro-OMBRA paid to proposer
noncenumber
timestampnumber

Validation:

  • to is valid 40-char lowercase hex
  • state.balance(from) >= amount + fee
  • Signature valid

Effect:

  • state.balance(from) -= amount + fee
  • state.balance(to) += amount
  • state.balance(proposer) += fee
  • state.nonce(from) += 1

Example signed JSON:

{
"type": "TRANSFER",
"from": "7a8b70389a52a96aa85ca641c5ad2fb7a1e2e1ca",
"to": "abcdef0123456789abcdef0123456789abcdef01",
"amount": "1000000",
"fee": "1000",
"nonce": 5,
"timestamp": 1735389942000,
"publicKey": "...",
"hash": "...",
"signature": "..."
}

BURN

Permanently destroys OMBRA from the sender's account. Used by:

FieldTypeNotes
type"BURN"
fromstringBurner (typically block proposer)
amountstring (bigint)Micro-OMBRA to burn
reasonstring"block_energy" for PoTU, "slashing" for penalties
blockIndexnumberBlock this burn belongs to
tokensConsumednumberSum of outputTokens + thinkingTokens in block (for PoTU validation)
noncenumber
timestampnumber

Validation:

  • For reason = "block_energy": amount == max(MIN_BURN_PER_BLOCK, tokensConsumed / BURN_TOKEN_DIVISOR)
  • state.balance(from) >= amount
  • Signature valid

Effect:

  • state.balance(from) -= amount
  • state.totalBurned += amount
  • state.nonce(from) += 1

ATTESTATION_REWARD

Pays a validator for attesting to a previous block. Built by the next block's proposer.

FieldTypeNotes
type"ATTESTATION_REWARD"
fromstringProposer of the new block
validatorAddressstringValidator that attested
amountstring (bigint)Typically VALIDATOR_BASE_REWARD = 100
blockIndexnumberBlock being attested
attestationHashstringsha256 of attestation message
noncenumber
timestampnumber

Validation:

  • validatorAddress was in the active validator set for blockIndex
  • attestationHash matches a known attestation signed by validatorAddress
  • Same attestation hasn't been rewarded before

Effect:

  • state.balance(validatorAddress) += amount
  • state.attestations[attestationHash].rewarded = true
  • state.nonce(from) += 1

Next: TASK_* (tasks) →