cuddle-1.1.0.0: example/cddl-files/byron.cddl
; Cardano Byron blockchain CBOR schema
block = [0, ebblock]
/ [1, mainblock]
mainblock = [ "header" : blockhead
, "body" : blockbody
, "extra" : [attributes]
]
ebblock = [ "header" : ebbhead
, "body" : [+ stakeholderid]
, extra : [attributes]
]
u8 = uint .lt 256
u16 = uint .lt 65536
u32 = uint
u64 = uint
; Basic Cardano Types
blake2b-256 = bytes .size 32
txid = blake2b-256
blockid = blake2b-256
updid = blake2b-256
hash = blake2b-256
blake2b-224 = bytes .size 28
addressid = blake2b-224
stakeholderid = blake2b-224
epochid = u64
slotid = [ epoch: epochid, slot : u64 ]
pubkey = bytes
signature = bytes
; Attributes - at the moment we do not bother deserialising these, since they
; don't contain anything
attributes = {* any => any}
; Addresses
addrdistr = [1] / [0, stakeholderid]
addrtype = &("PubKey" : 0, "Script" : 1, "Redeem" : 2) / (u64 .gt 2)
addrattr = { ? 0 : addrdistr
, ? 1 : bytes}
address = [ #6.24(bytes .cbor ([addressid, addrattr, addrtype])), u64 ]
; Transactions
txin = [0, #6.24(bytes .cbor ([txid, u32]))] / [u8 .ne 0, encoded-cbor]
txout = [address, u64]
tx = [[+ txin], [+ txout], attributes]
txproof = [u32, hash, hash]
twit = [0, #6.24(bytes .cbor ([pubkey, signature]))]
/ [1, #6.24(bytes .cbor ([[u16, bytes], [u16, bytes]]))]
/ [2, #6.24(bytes .cbor ([pubkey, signature]))]
/ [u8 .gt 2, encoded-cbor]
; Shared Seed Computation
vsspubkey = bytes ; This is encoded using the 'Binary' instance
; for Scrape.PublicKey
vsssec = bytes ; This is encoded using the 'Binary' instance
; for Scrape.Secret.
vssenc = [bytes] ; This is encoded using the 'Binary' instance
; for Scrape.EncryptedSi.
; TODO work out why this seems to be in a length 1 array
vssdec = bytes ; This is encoded using the 'Binary' instance
; for Scrape.DecryptedShare
vssproof = [bytes, bytes, bytes, [* bytes]] ; This is encoded using the
; 'Binary' instance for Scrape.Proof
ssccomm = [pubkey, [{vsspubkey => vssenc},vssproof], signature]
ssccomms = #6.258([* ssccomm])
sscopens = {stakeholderid => vsssec}
sscshares = {addressid => [addressid, [* vssdec]]}
ssccert = [vsspubkey, pubkey, epochid, signature]
ssccerts = #6.258([* ssccert])
ssc = [0, ssccomms, ssccerts]
/ [1, sscopens, ssccerts]
/ [2, sscshares, ssccerts]
/ [3, ssccerts]
sscproof = [0, hash, hash]
/ [1, hash, hash]
/ [2, hash, hash]
/ [3, hash]
; Delegation
dlg = [ epoch : epochid
, issuer : pubkey
, delegate : pubkey
, certificate : signature
]
dlgsig = [dlg, signature]
lwdlg = [ epochRange : [epochid, epochid]
, issuer : pubkey
, delegate : pubkey
, certificate : signature
]
lwdlgsig = [lwdlg, signature]
; Updates
bver = [u16, u16, u8]
txfeepol = [0, #6.24(bytes .cbor ([bigint, bigint]))]
/ [u8 .gt 0, encoded-cbor]
bvermod = [ scriptVersion : [? u16]
, slotDuration : [? bigint]
, maxBlockSize : [? bigint]
, maxHeaderSize : [? bigint]
, maxTxSize : [? bigint]
, maxProposalSize : [? bigint]
, mpcThd : [? u64]
, heavyDelThd : [? u64]
, updateVoteThd : [? u64]
, updateProposalThd : [? u64]
, updateImplicit : [? u64]
, softForkRule : [? [u64, u64, u64]]
, txFeePolicy : [? txfeepol]
, unlockStakeEpoch : [? epochid]
]
updata = [ hash, hash, hash, hash ]
upprop = [ "blockVersion" : bver
, "blockVersionMod" : bvermod
, "softwareVersion" : [ text, u32 ]
, "data" : #6.258([text, updata])
, "attributes" : attributes
, "from" : pubkey
, "signature" : signature
]
upvote = [ "voter" : pubkey
, "proposalId" : updid
, "vote" : bool
, "signature" : signature
]
up = [ "proposal" : [? upprop]
, votes : [* upvote]
]
; Blocks
difficulty = [u64]
blocksig = [0, signature]
/ [1, lwdlgsig]
/ [2, dlgsig]
blockcons = [slotid, pubkey, difficulty, blocksig]
blockheadex = [ "blockVersion" : bver
, "softwareVersion" : [ text, u32 ]
, "attributes" : attributes
, "extraProof" : hash
]
blockproof = [ "txProof" : txproof
, "sscProof" : sscproof
, "dlgProof" : hash
, "updProof" : hash
]
blockhead = [ "protocolMagic" : u32
, "prevBlock" : blockid
, "bodyProof" : blockproof
, "consensusData" : blockcons
, "extraData" : blockheadex
]
blockbody = [ "txPayload" : [* [tx, [* twit]]]
, "sscPayload" : ssc
, "dlgPayload" : [* dlg]
, "updPayload" : up
]
; Epoch Boundary Blocks
ebbcons = [ epochid, difficulty ]
ebbhead = [ "protocolMagic" : u32
, "prevBlock" : blockid
, "bodyProof" : hash
, "consensusData" : ebbcons
, "extraData" : [attributes]
]