++po
Phonetic base
Container core for providing phonetic syllables and name generators for the
Urbit naming system. The two faces, sis
and dex
, are available to the
contained arms.
Source
~/ %po
=+ :- ^= sis :: prefix syllables
'dozmarbinwansamlitsighidfidlissogdirwacsabwissib\
/rigsoldopmodfoglidhopdardorlorhodfolrintogsilmir\
/holpaslacrovlivdalsatlibtabhanticpidtorbolfosdot\
/losdilforpilramtirwintadbicdifrocwidbisdasmidlop\
/rilnardapmolsanlocnovsitnidtipsicropwitnatpanmin\
/ritpodmottamtolsavposnapnopsomfinfonbanmorworsip\
/ronnorbotwicsocwatdolmagpicdavbidbaltimtasmallig\
/sivtagpadsaldivdactansidfabtarmonranniswolmispal\
/lasdismaprabtobrollatlonnodnavfignomnibpagsopral\
/bilhaddocridmocpacravripfaltodtiltinhapmicfanpat\
/taclabmogsimsonpinlomrictapfirhasbosbatpochactid\
/havsaplindibhosdabbitbarracparloddosbortochilmac\
/tomdigfilfasmithobharmighinradmashalraglagfadtop\
/mophabnilnosmilfopfamdatnoldinhatnacrisfotribhoc\
/nimlarfitwalrapsarnalmoslandondanladdovrivbacpol\
/laptalpitnambonrostonfodponsovnocsorlavmatmipfip'
^= dex :: suffix syllables
'zodnecbudwessevpersutletfulpensytdurwepserwylsun\
/rypsyxdyrnuphebpeglupdepdysputlughecryttyvsydnex\
/lunmeplutseppesdelsulpedtemledtulmetwenbynhexfeb\
/pyldulhetmevruttylwydtepbesdexsefwycburderneppur\
/rysrebdennutsubpetrulsynregtydsupsemwynrecmegnet\
/secmulnymtevwebsummutnyxrextebfushepbenmuswyxsym\
/selrucdecwexsyrwetdylmynmesdetbetbeltuxtugmyrpel\
/syptermebsetdutdegtexsurfeltudnuxruxrenwytnubmed\
/lytdusnebrumtynseglyxpunresredfunrevrefmectedrus\
/bexlebduxrynnumpyxrygryxfeptyrtustyclegnemfermer\
/tenlusnussyltecmexpubrymtucfyllepdebbermughuttun\
/bylsudpemdevlurdefbusbeprunmelpexdytbyttyplevmyl\
/wedducfurfexnulluclennerlexrupnedlecrydlydfenwel\
/nydhusrelrudneshesfetdesretdunlernyrsebhulryllud\
/remlysfynwerrycsugnysnyllyndyndemluxfedsedbecmun\
/lyrtesmudnytbyrsenwegfyrmurtelreptegpecnelnevfes'
|%
++ind:po
Parse suffix
Produces the byte of the right-hand syllable a
.
Accepts
a
is a @tas
.
Produces
A (unit @)
.
Source
++ ind ~/ %ind
|= a=@tas
=+ b=0
|- ^- (unit @)
?:(=(256 b) ~ ?:(=(a (tod b)) [~ b] $(b +(b))))
Examples
> (ind:po %zod)
[~ 0]
> (ind:po %foo)
~
> (ind:po %wet)
[~ 101]
++ins:po
Parse prefix
Produces the byte of the left-hand phonetic syllable a
.
Accepts
a
is a @tas
.
Produces
A (unit @)
.
Source
++ ins ~/ %ins
|= a=@tas
=+ b=0
|- ^- (unit @)
?:(=(256 b) ~ ?:(=(a (tos b)) [~ b] $(b +(b))))
Examples
> (ins:po %doz)
[~ 0]
> (ins:po %foo)
~
> (ins:po %pit)
[~ 242]
++tod:po
Fetch suffix
Produces the phonetic suffix syllable from index a
within dex
as an atom.
Accepts
a
is an atom
Produces
An atom.
Source
++ tod ~/ %tod
|=(a=@ ?>((lth a 256) (cut 3 [(mul 3 a) 3] dex)))
Examples
> `@t`(tod:po 0)
'zod'
> `@t`(tod:po 100)
'syr'
> `@t`(tod:po 255)
'fes'
> `@t`(tod:po 256)
dojo: hoon expression failed
++tos:po
Fetch prefix
Produces the phonetic prefix syllable from index a
within sis
as an atom.
Accepts
a
is an atom.
Produces
An atom.
Source
++ tos ~/ %tos
|=(a=@ ?>((lth a 256) (cut 3 [(mul 3 a) 3] sis)))
Examples
> `@t`(tos:po 0)
'doz'
> `@t`(tos:po 100)
'soc'
> `@t`(tos:po 255)
'fip'
> `@t`(tos:po 256)
dojo: hoon expression failed
++fa
base58check
Container core for base58check (e.g. bitcoin address) functions.
Source
++ fa
=+ key='123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
=/ yek=@ux ~+
=- yek:(roll (rip 3 key) -)
=+ [a=*char b=*@ yek=`@ux`(fil 3 256 0xff)]
|.
[+(b) (mix yek (lsh [3 `@u`a] (~(inv fe 3) b)))]
|%
++cha:fa
Decode base58check character
Check whether character a
is valid in base58check encoding, producing a unit
of its decoded value if it's valid, and a null unit
if it's not.
Accepts
a
is a char
.
Produces
A (unit @uF)
.
Source
++ cha |=(a=char `(unit @uF)`=+(b=(cut 3 [`@`a 1] yek) ?:(=(b 0xff) ~ `b)))
Examples
> (cha:fa 'Z')
[~ 32]
> (cha:fa 'n')
[~ 45]
> (cha:fa 'l')
~
++tok:fa
Compute base58check checksum
Compute the base58check checksum of a
.
Accepts
a
is a @ux
.
Produces
A @ux
.
Source
++ tok
|= a=@ux ^- @ux
=+ b=(pad a)
=- (~(net fe 5) (end [3 4] (shay 32 -)))
(shay (add b (met 3 a)) (lsh [3 b] (swp 3 a)))
Examples
> (tok:fa 0xdead.beef)
0x938b.8b0c
++pad:fa
base58check padding bytes
Compute the number of bytes of 0s needed to pad a
to 21 bytes, if it's less
than 21 bytes.
Accepts
a
is a @
- a value without its base58check checksum.
Produces
A @
.
Source
++ pad |=(a=@ =+(b=(met 3 a) ?:((gte b 21) 0 (sub 21 b))))
Examples
> (pad:fa 0xdead.beef)
17
++enc:fa
encode base58check
Compute and append checksum to a
.
Accepts
a
is a @ux
.
Produces
A @ux
.
Source
++ enc |=(a=@ux `@ux`(mix (lsh [3 4] a) (tok a)))
Example
> (enc:fa 0xdead.beef)
0xdead.beef.938b.8b0c
++den:fa
decode base58check
Check checksum of a
, return a unit
of a
sans the checksum if successful,
or a null unit
otherwise.
Accepts
a
is a @ux
Produces
A (unit @ux)
.
Source
++ den
|= a=@ux ^- (unit @ux)
=+ b=(rsh [3 4] a)
?. =((tok b) (end [3 4] a))
~
`b
Examples
> (den:fa 0xdead.beef.938b.8b0c)
[~ 0xdead.beef]
> (den:fa 0xdead.beef.1111.1111)
~