LNPBP-31: Standard contractum lib

LNPBP: 0031
Vertical: Smart contracts
Title: Standard Contractum Libraries (SCL)
Authors: Dr Maxim Orlovsky <orlovsky@lnp-bp.org>
Comments-URI: <https://github.com/LNP-BP/LNPBPs/discussions/141>
Status: Proposal
Type: Standards Track
Created: 2022-12-23
Updated: 2023-05-10
Finalized: ~
Copyright: (0) public domain
License: CC0-1.0

Abstract

Background

Motivation

Design

Specification

Version 0.10

The specification is the actual Standard Contractum Library code:

Std.sty, semantic lib id urn:ubideco:stl:9KALDYR8Nyjq4FdMW6kYoL7vdkWnqPqNuFnmE9qHpNjZ#justice-rocket-type:

typelib Std

-- no dependencies

-- urn:ubideco:semid:55LGxTk42rZVmuXepF2FJNfP52h3QG5pBnBaY1VnnvnP#quiet-opinion-saddle
data Alpha            :: A:65 | B:66 | C:67 | D:68
                       | E:69 | F:70 | G:71 | H:72
                       | I:73 | J:74 | K:75 | L:76
                       | M:77 | N:78 | O:79 | P:80
                       | Q:81 | R:82 | S:83 | T:84
                       | U:85 | V:86 | W:87 | X:88
                       | Y:89 | Z:90 | a:97 | b:98
                       | c:99 | d:100 | e:101 | f:102
                       | g:103 | h:104 | i:105 | j:106
                       | k:107 | l:108 | m:109 | n:110
                       | o:111 | p:112 | q:113 | r:114
                       | s:115 | t:116 | u:117 | v:118
                       | w:119 | x:120 | y:121 | z:122

-- urn:ubideco:semid:43EA5YjDDUMdgMApG3xuUWGSzDXKr6U5b9gtgLwuqCc3#simon-pegasus-stop
data AlphaCaps        :: A:65 | B:66 | C:67 | D:68
                       | E:69 | F:70 | G:71 | H:72
                       | I:73 | J:74 | K:75 | L:76
                       | M:77 | N:78 | O:79 | P:80
                       | Q:81 | R:82 | S:83 | T:84
                       | U:85 | V:86 | W:87 | X:88
                       | Y:89 | Z:90

-- urn:ubideco:semid:7U5NvJNf343ZzFXsqW2DBYtTSvrb3YdL6oxYd2BaMsVr#magnet-section-latin
data AlphaCapsNum     :: zero:48 | one:49 | two:50 | three:51
                       | four:52 | five:53 | six:54 | seven:55
                       | eight:56 | nine:57 | A:65 | B:66
                       | C:67 | D:68 | E:69 | F:70
                       | G:71 | H:72 | I:73 | J:74
                       | K:75 | L:76 | M:77 | N:78
                       | O:79 | P:80 | Q:81 | R:82
                       | S:83 | T:84 | U:85 | V:86
                       | W:87 | X:88 | Y:89 | Z:90

-- urn:ubideco:semid:DZX8CtQMz2kGByNeWpSpWzor5EPoeQ1LRsSWcR13w9bH#disco-ibiza-mile
data AlphaNum         :: zero:48 | one:49 | two:50 | three:51
                       | four:52 | five:53 | six:54 | seven:55
                       | eight:56 | nine:57 | A:65 | B:66
                       | C:67 | D:68 | E:69 | F:70
                       | G:71 | H:72 | I:73 | J:74
                       | K:75 | L:76 | M:77 | N:78
                       | O:79 | P:80 | Q:81 | R:82
                       | S:83 | T:84 | U:85 | V:86
                       | W:87 | X:88 | Y:89 | Z:90
                       | a:97 | b:98 | c:99 | d:100
                       | e:101 | f:102 | g:103 | h:104
                       | i:105 | j:106 | k:107 | l:108
                       | m:109 | n:110 | o:111 | p:112
                       | q:113 | r:114 | s:115 | t:116
                       | u:117 | v:118 | w:119 | x:120
                       | y:121 | z:122

-- urn:ubideco:semid:4UQSpEBq39vFqEBYDaLEMaQ6qJYGDiEFsGFYzv7U7ipA#good-trumpet-today
data AlphaNumDash     :: dash:45 | zero:48 | one:49 | two:50
                       | three:51 | four:52 | five:53 | six:54
                       | seven:55 | eight:56 | nine:57 | A:65
                       | B:66 | C:67 | D:68 | E:69
                       | F:70 | G:71 | H:72 | I:73
                       | J:74 | K:75 | L:76 | M:77
                       | N:78 | O:79 | P:80 | Q:81
                       | R:82 | S:83 | T:84 | U:85
                       | V:86 | W:87 | X:88 | Y:89
                       | Z:90 | a:97 | b:98 | c:99
                       | d:100 | e:101 | f:102 | g:103
                       | h:104 | i:105 | j:106 | k:107
                       | l:108 | m:109 | n:110 | o:111
                       | p:112 | q:113 | r:114 | s:115
                       | t:116 | u:117 | v:118 | w:119
                       | x:120 | y:121 | z:122

-- urn:ubideco:semid:8iBe2dh8beD1KUairdqCacEcxAr4h55XfUQN2PspWXjz#north-sound-salsa
data AlphaNumLodash   :: zero:48 | one:49 | two:50 | three:51
                       | four:52 | five:53 | six:54 | seven:55
                       | eight:56 | nine:57 | A:65 | B:66
                       | C:67 | D:68 | E:69 | F:70
                       | G:71 | H:72 | I:73 | J:74
                       | K:75 | L:76 | M:77 | N:78
                       | O:79 | P:80 | Q:81 | R:82
                       | S:83 | T:84 | U:85 | V:86
                       | W:87 | X:88 | Y:89 | Z:90
                       | lodash:95 | a:97 | b:98 | c:99
                       | d:100 | e:101 | f:102 | g:103
                       | h:104 | i:105 | j:106 | k:107
                       | l:108 | m:109 | n:110 | o:111
                       | p:112 | q:113 | r:114 | s:115
                       | t:116 | u:117 | v:118 | w:119
                       | x:120 | y:121 | z:122

-- urn:ubideco:semid:HmLtNhtTNv8cdSDzKcU3p1i3jcJS6TWkrRCw1vYABFJG#song-accent-mammal
data AlphaSmall       :: a:97 | b:98 | c:99 | d:100
                       | e:101 | f:102 | g:103 | h:104
                       | i:105 | j:106 | k:107 | l:108
                       | m:109 | n:110 | o:111 | p:112
                       | q:113 | r:114 | s:115 | t:116
                       | u:117 | v:118 | w:119 | x:120
                       | y:121 | z:122

-- urn:ubideco:semid:2NFrhqQqGNDA4HujyTW2pmcjtrN5sbtFfpPFXPPYcGER#aloha-lunar-felix
data Ascii            :: nul:0 | soh:1 | stx:2 | etx:3
                       | eot:4 | enq:5 | ack:6 | bel:7
                       | bs:8 | ht:9 | lf:10 | vt:11
                       | ff:12 | cr:13 | so:14 | si:15
                       | dle:16 | dc1:17 | dc2:18 | dc3:19
                       | dc4:20 | nack:21 | syn:22 | etb:23
                       | can:24 | em:25 | sub:26 | esc:27
                       | fs:28 | gs:29 | rs:30 | us:31
                       | space:32 | excl:33 | quotes:34 | hash:35
                       | dollar:36 | percent:37 | ampersand:38 | apostrophe:39
                       | bracketL:40 | bracketR:41 | asterisk:42 | plus:43
                       | comma:44 | minus:45 | dot:46 | slash:47
                       | zero:48 | one:49 | two:50 | three:51
                       | four:52 | five:53 | six:54 | seven:55
                       | eight:56 | nine:57 | colon:58 | semiColon:59
                       | less:60 | equal:61 | greater:62 | question:63
                       | at:64 | A:65 | B:66 | C:67
                       | D:68 | E:69 | F:70 | G:71
                       | H:72 | I:73 | J:74 | K:75
                       | L:76 | M:77 | N:78 | O:79
                       | P:80 | Q:81 | R:82 | S:83
                       | T:84 | U:85 | V:86 | W:87
                       | X:88 | Y:89 | Z:90 | sqBracketL:91
                       | backSlash:92 | sqBracketR:93 | caret:94 | lodash:95
                       | backtick:96 | a:97 | b:98 | c:99
                       | d:100 | e:101 | f:102 | g:103
                       | h:104 | i:105 | j:106 | k:107
                       | l:108 | m:109 | n:110 | o:111
                       | p:112 | q:113 | r:114 | s:115
                       | t:116 | u:117 | v:118 | w:119
                       | x:120 | y:121 | z:122 | cBracketL:123
                       | pipe:124 | cBracketR:125 | tilde:126 | del:127

-- urn:ubideco:semid:mbH4meZSjxky12xHm9pg3rw8VoGxEa6rXtt6dAMZLbt#diet-oxford-window
data AsciiPrintable   :: space:32 | excl:33 | quotes:34 | hash:35
                       | dollar:36 | percent:37 | ampersand:38 | apostrophe:39
                       | bracketL:40 | bracketR:41 | asterisk:42 | plus:43
                       | comma:44 | minus:45 | dot:46 | slash:47
                       | zero:48 | one:49 | two:50 | three:51
                       | four:52 | five:53 | six:54 | seven:55
                       | eight:56 | nine:57 | colon:58 | semiColon:59
                       | less:60 | equal:61 | greater:62 | question:63
                       | at:64 | A:65 | B:66 | C:67
                       | D:68 | E:69 | F:70 | G:71
                       | H:72 | I:73 | J:74 | K:75
                       | L:76 | M:77 | N:78 | O:79
                       | P:80 | Q:81 | R:82 | S:83
                       | T:84 | U:85 | V:86 | W:87
                       | X:88 | Y:89 | Z:90 | sqBracketL:91
                       | backSlash:92 | sqBracketR:93 | caret:94 | lodash:95
                       | backtick:96 | a:97 | b:98 | c:99
                       | d:100 | e:101 | f:102 | g:103
                       | h:104 | i:105 | j:106 | k:107
                       | l:108 | m:109 | n:110 | o:111
                       | p:112 | q:113 | r:114 | s:115
                       | t:116 | u:117 | v:118 | w:119
                       | x:120 | y:121 | z:122 | cBracketL:123
                       | pipe:124 | cBracketR:125 | tilde:126

-- urn:ubideco:semid:7ZhBHGSJm9ixmm8Z9vCX7i5Ga7j5xrW8t11nsb1Cgpnx#laser-madam-maxwell
data Bool             :: false:0 | true:1

-- urn:ubideco:semid:DfVXYs8NyS6G5QLTQMUELHWGkSoenXDw3ZFrHzG3LjMW#amanda-spider-diamond
data Dec              :: zero:48 | one:49 | two:50 | three:51
                       | four:52 | five:53 | six:54 | seven:55
                       | eight:56 | nine:57

-- urn:ubideco:semid:H5T3iaCVzmGH5BcotfpzcRNb5Z1ri27rwVrRhJ6UosU6#invest-moral-anvil
data HexDecCaps       :: zero:48 | one:49 | two:50 | three:51
                       | four:52 | five:53 | six:54 | seven:55
                       | eight:56 | nine:57 | ten:65 | eleven:66
                       | twelve:67 | thirteen:68 | fourteen:69 | fifteen:70

-- urn:ubideco:semid:CBhZBmVRHY5sgou91KEAQrxun6kQQdbCPRekEEoB5Lik#forum-sahara-email
data HexDecSmall      :: zero:48 | one:49 | two:50 | three:51
                       | four:52 | five:53 | six:54 | seven:55
                       | eight:56 | nine:57 | ten:97 | eleven:98
                       | twelve:99 | thirteen:100 | fourteen:101 | fifteen:102

-- urn:ubideco:semid:BrEhDdRPrktqBgsNbgsmUagRz9b5n5csfbmif8Y7Bcc8#east-invest-harvest
data U4               :: u4_0:0 | u4_1:1 | u4_2:2 | u4_3:3
                       | u4_4:4 | u4_5:5 | u4_6:6 | u4_7:7
                       | u4_8:8 | u4_9:9 | u4_10:10 | u4_11:11
                       | u4_12:12 | u4_13:13 | u4_14:14 | u4_15:15

-- urn:ubideco:semid:3MDHMYsJt8d1gUiyx5vGCWcNLQ7biek6UTjHg3ksW4Bf#ground-volume-singer
data U5               :: u5_0:0 | u5_1:1 | u5_2:2 | u5_3:3
                       | u5_4:4 | u5_5:5 | u5_6:6 | u5_7:7
                       | u5_8:8 | u5_9:9 | u5_10:10 | u5_11:11
                       | u5_12:12 | u5_13:13 | u5_14:14 | u5_15:15
                       | u5_16:16 | u5_17:17 | u5_18:18 | u5_19:19
                       | u5_20:20 | u5_21:21 | u5_22:22 | u5_23:23
                       | u5_24:24 | u5_25:25 | u5_26:26 | u5_27:27
                       | u5_28:28 | u5_29:29 | u5_30:30 | u5_31:31

Bitcoin.sty, semantic lib id urn:ubideco:stl:6GgF7biXPVNcus2FfQj2pQuRzau11rXApMQLfCZhojgi#money-pardon-parody:

typelib Bitcoin

-- no dependencies

-- urn:ubideco:semid:4dDWWU4afiPN3q4AgCMuFRFhL4UDta2u5SrqrBzPvjby#tokyo-inch-program
data LockTime         :: U32

-- urn:ubideco:semid:FWt2MSo8A4nsYgYbuBqMRNLiKgtzvLBgUn774iKzTcuf#pocket-pegasus-frank
data Outpoint         :: txid Txid, vout Vout

-- urn:ubideco:semid:BEBz6h7AGjYSDRCxVHnjYkkkxzBsjN3EvyNiD4ZrzmRL#pyramid-spray-star
data Sats             :: U64

-- urn:ubideco:semid:3Y4AgjkFbDusgo3YqRDWv9BznDeAJEUDEPeEq1mpSkAR#maestro-source-jackson
data ScriptBytes      :: [Byte ^ ..0xffffffff]

-- urn:ubideco:semid:2ZAYpWKB2BQxeXXjpQDpYGZ7eXFM9qQxN9TcdTiQqeB8#bingo-maestro-silk
data ScriptPubkey     :: ScriptBytes

-- urn:ubideco:semid:5HtymNhYBhjqPkLLw9QVWZ62cLm57cZxgQTDUBBXtmL#rhino-time-rodent
data SeqNo            :: U32

-- urn:ubideco:semid:2gTMqAC393rBSGtBhDn8sJq3F3HtDosbqKDQTw9bHFyT#prelude-analyze-think
data SigScript        :: ScriptBytes

-- urn:ubideco:semid:DynChojW1sfr8VjSoZbmReHhZoU8u9KCiuwijgEGdToe#milk-gloria-prize
data Tx               :: version TxVer
                       , inputs [TxIn ^ ..0xffffffff]
                       , outputs [TxOut ^ ..0xffffffff]
                       , lockTime LockTime

-- urn:ubideco:semid:9Nf4Vvt3im8tFQSGzPWKfjfhsrkB8bf2XsLWfzywiFSv#antenna-crater-planet
data TxIn             :: prevOutput Outpoint
                       , sigScript SigScript
                       , sequence SeqNo
                       , witness Witness

-- urn:ubideco:semid:HutVbeKmYYrNun96Pi4T7YfYww7SeWxRFPZGDiZwoGZV#design-jacket-spirit
data TxOut            :: value Sats, scriptPubkey ScriptPubkey

-- urn:ubideco:semid:CLhr1zatQBSkCz9SiVrNoKB5igCZfF3hqRizfrviM6NR#english-natasha-virus
data TxVer            :: I32

-- urn:ubideco:semid:C1GfCrG7AXu2sFhRBspd7KpJK2YgyTkVy6pty5rZynRs#cowboy-diego-betty
data Txid             :: [Byte ^ 32]

-- urn:ubideco:semid:3HHRtSJW5fnGkdVW1EVDH7B97Y79WhwvKyyfsaBkuQkk#chrome-robin-gallop
data Vout             :: U32

-- urn:ubideco:semid:8mjN2CZj3Nhn2HjnKqTmEcN5vmyb3UJK8HSFW1uE3W2p#warning-saddle-period
data Witness          :: [[Byte ^ ..0xffffffff] ^ ..0xffffffff]

CommitVerify.sty, semantic lib id urn:ubideco:stl:ZtHaBzu9ojbDahaGKEXe5v9DfSDxLERbLkEB23R6Q6V#rhino-cover-frog

typelib CommitVerify

import urn:ubideco:stl:9KALDYR8Nyjq4FdMW6kYoL7vdkWnqPqNuFnmE9qHpNjZ#justice-rocket-type as Std
-- Imports:
-- U5 := urn:ubideco:semid:3MDHMYsJt8d1gUiyx5vGCWcNLQ7biek6UTjHg3ksW4Bf#ground-volume-singer



-- urn:ubideco:semid:F8mU5NPc8Z5CMnkSFGdF5UxrPsdcBS6B5DCyP5kJPgWc#ventura-equal-think
data Commitment       :: [Byte ^ 32]

-- urn:ubideco:semid:qp6pMjMCcukxxZdkM2PtfNWfJjXKoVHXtXSBCsYjQwY#transit-bogart-nissan
data MerkleBlock      :: depth Std.U5 {- urn:ubideco:semid:3MDHMYsJt8d1gUiyx5vGCWcNLQ7biek6UTjHg3ksW4Bf#ground-volume-singer -}
                       , cofactor U16
                       , crossSection [TreeNode ^ ..0xffffffff]
                       , entropy U64?

-- urn:ubideco:semid:6kxYeCatpncbA9UiTdsFbxbxJdU56x6MdmTRkEeGAv6R#iceberg-rocket-velvet
data MerkleNode       :: [Byte ^ 32]

-- urn:ubideco:semid:9FbrjZLnMDfbrN9gEbWij5HNkxqAVaZBkoW2UvKdYw4B#canyon-exhibit-ravioli
data MerkleProof      :: pos U32
                       , cofactor U16
                       , path [MerkleNode ^ ..0x20]

-- urn:ubideco:semid:57jCv2LWrdn89GzuSYaH17f21N3su76uM2tEaG1dwwoT#russian-wedding-florida
data MerkleTree       :: depth Std.U5 {- urn:ubideco:semid:3MDHMYsJt8d1gUiyx5vGCWcNLQ7biek6UTjHg3ksW4Bf#ground-volume-singer -}
                       , entropy U64
                       , cofactor U16
                       , messages {ProtocolId -> ^ ..0xffffff Message}
                       , map {U32 -> ^ ..0xffffff ProtocolId, Message}

-- urn:ubideco:semid:4ajqScXjJ6wQ5af2zgBFzzP7k1qzD6DXXU28taQidCcA#shampoo-bishop-morgan
data Message          :: [Byte ^ 32]

-- urn:ubideco:semid:4GenVCt5Xq6xtnJDjT98FehgCS8rTmwEzbjwGkaUVjHz#gamma-banjo-corona
data ProtocolId       :: [Byte ^ 32]

-- urn:ubideco:semid:D7Q2eTnYyjN6gMZnZYrMG6gmRwmtnxyGLeqBbki8DFLv#greek-decimal-quiz
data TreeNode         :: concealedNode (depth Std.U5 {- urn:ubideco:semid:3MDHMYsJt8d1gUiyx5vGCWcNLQ7biek6UTjHg3ksW4Bf#ground-volume-singer -}, hash MerkleNode)
                       | commitmentLeaf (protocolId ProtocolId, message Message)

RGBContract.sty, semantic lib id urn:ubideco:stl:6vbr9ZrtsD9aBjo5qRQ36QEZPVucqvRRjKCPqE8yPeJr#choice-little-boxer:

typelib RGBContract

import urn:ubideco:stl:6GgF7biXPVNcus2FfQj2pQuRzau11rXApMQLfCZhojgi#money-pardon-parody as Bitcoin
-- Imports:
-- Vout := urn:ubideco:semid:3HHRtSJW5fnGkdVW1EVDH7B97Y79WhwvKyyfsaBkuQkk#chrome-robin-gallop
-- Txid := urn:ubideco:semid:C1GfCrG7AXu2sFhRBspd7KpJK2YgyTkVy6pty5rZynRs#cowboy-diego-betty
-- Outpoint := urn:ubideco:semid:GeFZHi1RYCrrcH1LG4Fo2SWW5M6KLJ8yvoGkFjRWZaA9#dinner-yoga-danube

import urn:ubideco:stl:9KALDYR8Nyjq4FdMW6kYoL7vdkWnqPqNuFnmE9qHpNjZ#justice-rocket-type as Std
-- Imports:
-- AsciiPrintable := urn:ubideco:semid:mbH4meZSjxky12xHm9pg3rw8VoGxEa6rXtt6dAMZLbt#diet-oxford-window
-- AlphaCapsNum := urn:ubideco:semid:7U5NvJNf343ZzFXsqW2DBYtTSvrb3YdL6oxYd2BaMsVr#magnet-section-latin



-- urn:ubideco:semid:AC2a15L721Fw1YSudEvyX7vr8XjPVn4bPUrRhmZS4oJj#burma-picasso-granite
data Amount           :: U64

-- urn:ubideco:semid:Ep3efqbERhgbus3JbSaKn3Lm9gWtya9xoGYbAjoQhXaB#heavy-public-hostel
data AssetNaming      :: ticker Ticker
                       , name Name
                       , details Details?

-- urn:ubideco:semid:9t5kYLUwTpWjwh9eHB1NU3obZnj3qeTZzpZdcfYiqAV4#flame-unicorn-fruit
data Attachment       :: type MediaType, digest [Byte ^ 32]

-- urn:ubideco:semid:HtN246bWqDBKMgUJf7cKxERW9B2ostpVYPnAG2LVCKCX#gabriel-fiber-oregano
data BurnMeta         :: burnProofs {ProofOfReserves}

-- urn:ubideco:semid:tZLspSCzoPWcsyhL3Q9Tks45bGupxp9VRtvLzQfsBYS#symbol-medical-marion
data ContractData     :: terms RicardianContract, media Attachment?

-- urn:ubideco:semid:5Fb7RNdm2jWi7wndRaaU8Lwx76exafTvgQqt9owU9JwM#network-kayak-adam
data Details          :: [Unicode ^ 1..0xff]

-- urn:ubideco:semid:3p1E6oqjmmGPMHh6H4G3BrQU3iuwr7XRmmytiixPp1oh#elvis-alex-letter
data DivisibleAssetSpec :: naming AssetNaming, precision Precision

-- urn:ubideco:semid:5r9sYFUJy7Kd9FEZ1pe5v4BUPiy1Bg344pNPsENbb7X#alcohol-moral-needle
data IssueMeta        :: reserves {ProofOfReserves}

-- urn:ubideco:semid:Bn87eabCqLDccdn1qvtnaxtDrofnw1mBexxR8tSjkN7z#memphis-bicycle-roof
data MediaRegName     :: [MimeChar ^ 1..0x40]

-- urn:ubideco:semid:AUJnh2sR5dxk1TQRtXr7vYVTorbG4Tiy4LY14eQp9yV2#robert-decide-dispute
data MediaType        :: type MediaRegName
                       , subtype MediaRegName?
                       , charset MediaRegName?

-- urn:ubideco:semid:56Qs8Zfm2GAgewu9s7ffVb9xX6QiJhoDskxMhBoz723U#golf-antonio-courage
data MimeChar         :: excl:33 | hash:35 | dollar:36 | amp:38
                       | plus:43 | dash:45 | dot:46 | zero:48
                       | one:49 | two:50 | three:51 | four:52
                       | five:53 | six:54 | seven:55 | eight:56
                       | nine:57 | caret:94 | lodash:95 | a:97
                       | b:98 | c:99 | d:100 | e:101
                       | f:102 | g:103 | h:104 | i:105
                       | j:106 | k:107 | l:108 | m:109
                       | n:110 | o:111 | p:112 | q:113
                       | r:114 | s:115 | t:116 | u:117
                       | v:118 | w:119 | x:120 | y:121
                       | z:122

-- urn:ubideco:semid:6PbMuf2YBk8Ff4J15AZ1MBW8XbcAUsprYiF7QjusVrz7#crystal-visitor-tribune
data Name             :: [Std.AsciiPrintable {- urn:ubideco:semid:mbH4meZSjxky12xHm9pg3rw8VoGxEa6rXtt6dAMZLbt#diet-oxford-window -} ^ 1..0x28]

-- urn:ubideco:semid:7G6FJPNejRtmGZP4NPXXHTTozzH4cwdrwrdkB3gziMa1#union-drum-public
data Precision        :: indivisible:0 | deci:1 | centi:2 | milli:3
                       | deciMilli:4 | centiMilli:5 | micro:6 | deciMicro:7
                       | centiMicro:8 | nano:9 | deciNano:10 | centiNano:11
                       | pico:12 | deciPico:13 | centiPico:14 | femto:15
                       | deciFemto:16 | centiFemto:17 | atto:18

-- urn:ubideco:semid:zrXMtzeLgFy1NQd46y3CNb549tnukiuMEGJvqxRkyDW#liquid-owner-london
data ProofOfReserves  :: utxo Bitcoin.Outpoint {- urn:ubideco:semid:GeFZHi1RYCrrcH1LG4Fo2SWW5M6KLJ8yvoGkFjRWZaA9#dinner-yoga-danube -}, proof [Byte]

-- urn:ubideco:semid:2fnqF5VfphtEoAWWEXwqyAZwny3YhkbB5TAh4VpA5JxQ#bundle-turbo-verona
data RicardianContract :: [Unicode]

-- urn:ubideco:semid:9dzjKz1d9KyoGnEg6WFSAKnWMaCpg1Lh7p66cmFXbH9e#mike-atlas-store
data Ticker           :: [Std.AlphaCapsNum {- urn:ubideco:semid:7U5NvJNf343ZzFXsqW2DBYtTSvrb3YdL6oxYd2BaMsVr#magnet-section-latin -} ^ 1..0x8]

-- urn:ubideco:semid:7eMrzgjRCf7EFcBBf6evAE75NTerkJ7tBdJAKqNfVGVs#suzuki-castle-saint
data Timestamp        :: I64

Work in progress for the next version

collections.con:

mod Collections

fn sum col, el :: col -> el
    sum [Num], Num :=
        | [s:xs] -> s + sum xs
        | [s:] -> s

fn count col, c :: col -> c
    count [Any ^ ..0xFF], U8 :=
        | [s:xs] -> 1 + count xs
        | [s:] -> 1
        | [] -> 0
    count [Any ^ ..0xFFFF], U16 :=
        | [s:xs] -> 1 + count xs
        | [s:] -> 1
        | [] -> 0

bp.con:

mod BP

data Height :: U32
data Timestamp :: I64
data Difficulty: U32

data Seal :: txid Txid?, vout U16
data Assignment t :: (Seal, t)

data TxStatus :: unknown | mempool | height Height
data LockTime :: height Height | blocks U32

-- Public key variants
data FullPubkey :: 04, x [U8 ^ 32], y [U8 ^ 32]
data PubkeyParity :: even=02 | odd=03
data CompressedPubkey :: parity PubkeyParity, x [U8 ^ 32]
data Pubkey :: uncompressed FullPubkey | compressed CompressedPubkey
data XonlyPubkey :: [U8 ^ 32]

-- Hash types

-- Scripts
data Script :: [Instruction]
data WitnessProgram :: [Byte]

data SegwitVer :: segwit=0 | taproot=0x51 |
    ver2=0x52 | ver3=0x53 | ver4=0x54 | ver5=0x55 | ver6=0x56 | ver7=0x57 |
    ver8=0x58 | ver9=0x59 | ver10=0x5A | ver11=0x5B | ver12=0x5C | ver13=0x5D |
    ver14=0x5E | ver15=0x5F | ver16=0x60
data FutureSegwitVer ::
    ver2=0x52 | ver3=0x53 | ver4=0x54 | ver5=0x55 | ver6=0x56 | ver7=0x57 |
    ver8=0x58 | ver9=0x59 | ver10=0x5A | ver11=0x5B | ver12=0x5C | ver13=0x5D |
    ver14=0x5E | ver15=0x5F | ver16=0x60

data ScriptPubkey ::
    bare Script |
    pk Pubkey |
    pkh PubkeyHash |
    sh ScriptHash |
    wpkh WPubkeyHash |
    wsh WScriptHash |
    swInvalid WitnessProgram |
    tr XonlyPubkey |
    trFuture WitnessProgram |
    swFuture (FutureSegwitVer, WitnessProgram)

--
-- Queries about specific transaction
-- (signature Txid | Outpoint -> _)
--

@internal
fn txStatus :: Txid -> TxStatus

@internal
fn txAmount :: Txid -> Sats

@internal
fn txLockTime :: Txid -> LockTime

@internal
fn txFee :: Txid -> Sats

@internal -- implementation provided by RGB core
fn txScriptPubkey :: Outpoint -> ScriptPubkey

@internal
fn txotAmount :: Outpoint -> Sats

--
-- Queries about blockchain state
--

@internal
fn heightTimestamp :: Height -> Timestamp

@internal
fn heightDifficulty :: Height -> Difficulty

@internal
fn currentHeight -> Height

Compatibility

Rationale

Reference implementation

Acknowledgements

References

This document is licensed under the Creative Commons CC0 1.0 Universal license.

Last updated