zuse installer

This commit is contained in:
timlucmiptev 2020-11-26 11:38:30 +02:00 committed by ixv
parent 70d5d70689
commit 3a98672127
8 changed files with 186 additions and 85 deletions

18
PATCH.md Normal file
View File

@ -0,0 +1,18 @@
zuze patch:
```hoon
++ decompress-point
|= dat=@
^- pont
:: ~& "custom decompress point"
=+ x=(end 3 w dat)
?> =(3 (mod ^p 4))
=+ y=(exp.p (div +(^p) 4) :(sum.p (exp.p 3 x) (pro.p a x) b))
=+ s=(rsh 3 32 dat)
~| [`@ux`s `@ux`dat]
?> |(=(2 s) =(3 s))
:: check parity
::
=? y !=((sub s 2) (mod y 2))
(sub ^p y)
[x y]
```

View File

@ -100,18 +100,38 @@ Above tests w 2 outputs, total fees with 2 inputs of 27.500. Gives:
2. Inputs 0 and 3 2. Inputs 0 and 3
## Make a full TXBU ## Make a full TXBU
Provider is `~zod`, `~dopzod` is a client. Provider is `~zod`, `~dopzod` is a client. Use the xpub from PRIVATE.md to have a balance
### setup
On `~zod`: On `~zod`:
``` ```
|start %btc-provider
|start %btc-wallet-store
|start %btc-wallet-hook
:btc-provider|command [%set-credentials api-url='http://localhost:50002'] :btc-provider|command [%set-credentials api-url='http://localhost:50002']
:btc-provider|command [%whitelist-clients `(set ship)`(sy ~[~dopzod])] :btc-provider|command [%whitelist-clients `(set ship)`(sy ~[~dopzod])]
=xpubzod 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs'
:btc-wallet-hook|action [%set-provider ~zod]
:btc-wallet-store|action [%add-wallet xpubzod ~ [~ 20] [~ 6]]
``` ```
on `~dopzod`: on `~dopzod`:
``` ```
=xpubp PRIVATE.md
|start %btc-wallet-store
|start %btc-wallet-hook
:btc-wallet-hook|action [%set-provider ~zod] :btc-wallet-hook|action [%set-provider ~zod]
:btc-wallet-store|action [%add-wallet xpubp ~ [~ 20] [~ 6]]
``` ```
### request address
on `~dopzod`:
```
:btc-wallet-hook|action [%req-pay-address payee=~zod value=2.000 [~ 10]]
```
## scrys ## scrys
``` ```
.^((list @t) %gx /=btc-wallet-store=/scanned/noun) .^((list @t) %gx /=btc-wallet-store=/scanned/noun)

View File

@ -24,6 +24,7 @@
== ==
:: provider: maybe ship if provider is set :: provider: maybe ship if provider is set
:: moon-limit: how many addresses a ship and its moons can request in piym :: moon-limit: how many addresses a ship and its moons can request in piym
:: feybs: fee/byte in sats for a given ship payee
:: piym/poym-watch: listen to btc-wallet-store for address updates; update payment info :: piym/poym-watch: listen to btc-wallet-store for address updates; update payment info
:: ::
+$ state-0 +$ state-0
@ -32,6 +33,7 @@
=btc-state =btc-state
def-wallet=(unit xpub) def-wallet=(unit xpub)
moon-limit=@ud moon-limit=@ud
feybs=(map ship sats)
=pend-addr =pend-addr
=piym =piym
poym=(unit txbu:bws) poym=(unit txbu:bws)
@ -90,6 +92,7 @@
^- (quip card _this) ^- (quip card _this)
?+ -.sign (on-agent:def wire sign) ?+ -.sign (on-agent:def wire sign)
%kick %kick
~& >>> "kicked from provider {<src.bowl>}"
?~ provider `this ?~ provider `this
?: ?& ?=(%set-provider -.wire) ?: ?& ?=(%set-provider -.wire)
=(host.u.provider src.bowl) =(host.u.provider src.bowl)
@ -138,28 +141,41 @@
:: ::
%req-pay-address %req-pay-address
:: TODO: add whitelisting here instead of comet block :: TODO: add whitelisting here instead of comet block
:: can't request payment address if poym already building a tx :: overwrites any payment being built currently
:: can't pay yourself; comets can't pay (could spam requests) :: can't pay yourself; comets can't pay (could spam requests)
:: forwards poke to payee if payee isn't us :: forwards poke to payee if payee isn't us
:: wire is /payer/value/timestamp :: wire is /payer/value/timestamp
:: ::
~| "Can't pay ourselves; can't pay if poym full; no comets" ~| "Can't pay ourselves; no comets"
?< =(src.bowl payee.act) ?< =(src.bowl payee.act)
?< ?&(=(src.bowl our.bowl) ?=(^ poym)) ?< ?=(%pawn (clan:title payee.act))
?< ?=(%pawn (clan:title src.bowl)) =+ feyb=?~(feyb.act fee.btc-state u.feyb.act)
=> .(poym ~, feybs (~(put by feybs) payee.act feyb))
:_ state :_ state
?. =(payee.act our.bowl) ~[(poke-wallet-hook payee.act [%gen-pay-address value.act])]
~[(poke-wallet-hook payee.act act)] ::
%gen-pay-address
~| "Can't pay ourselves; no comets"
?< =(src.bowl our.bowl)
?< ?=(%pawn (clan:title src.bowl))
?~ def-wallet ~|("btc-wallet-hook: no def-wallet set" !!) ?~ def-wallet ~|("btc-wallet-hook: no def-wallet set" !!)
~[(poke-wallet-store [%generate-address u.def-wallet %0 `[src.bowl value.act]])] :_ state
:~ %- poke-wallet-store
[%generate-address u.def-wallet %0 `[src.bowl value.act]]
==
:: ::
%ret-pay-address %ret-pay-address
?: =(src.bowl our.bowl) ~|("Can't pay ourselves" !!)
?~ def-wallet ~|("btc-wallet-hook: no def-wallet set" !!) ?~ def-wallet ~|("btc-wallet-hook: no def-wallet set" !!)
=+ feyb=(~(gut by feybs) src.bowl fee.btc-state)
?> =(payer.act our.bowl) ?> =(payer.act our.bowl)
:_ state :_ state
:~ %- poke-wallet-store :~ %- poke-wallet-store
[%generate-txbu u.def-wallet `src.bowl fee.btc-state ~[[address.act value.act]]] [%generate-txbu u.def-wallet `src.bowl feyb ~[[address.act value.act]]]
== ==
::
%clear-poym
`state(poym ~)
:: ::
%force-retry %force-retry
[retry-pend-addr state] [retry-pend-addr state]
@ -201,7 +217,7 @@
== ==
:: ::
%raw-tx %raw-tx
?~ poym ~&(>> "btc-wallet-hook: %raw-tx: poym is empty" `state) ?~ poym `state
=. txis.u.poym (update-poym-txis txis.u.poym +.body.p.upd) =. txis.u.poym (update-poym-txis txis.u.poym +.body.p.upd)
:_ state :_ state
?:(poym-ready ~[(send-sign-tx u.poym)] ~) ?:(poym-ready ~[(send-sign-tx u.poym)] ~)
@ -217,7 +233,6 @@
?~ provider ~ ?~ provider ~
?: provider-connected ?: provider-connected
~[(get-address-info ri host.u.provider a.req)] ~[(get-address-info ri host.u.provider a.req)]
~& > "provider not connected"
~ ~
== ==
:: ::
@ -230,8 +245,8 @@
:: ::
?~ meta.upd ~&(> address.upd `state) ?~ meta.upd ~&(> address.upd `state)
=/ [payer=ship value=sats] u.meta.upd =/ [payer=ship value=sats] u.meta.upd
:- ~[(poke-wallet-hook payer [%ret-pay-address address.upd payer value])] :_ (update-piym address.upd u.meta.upd)
(update-piym address.upd u.meta.upd) ~[(poke-wallet-hook payer [%ret-pay-address address.upd payer value])]
:: ::
%generate-txbu %generate-txbu
:: txbus can potentially use the same UTXO inputs, so if another payment :: txbus can potentially use the same UTXO inputs, so if another payment

View File

@ -113,7 +113,7 @@
(update-address +.act) (update-address +.act)
:: ::
%generate-address %generate-address
=/ uw=(unit walt) (~(get by walts) xpub.act) =+ uw=(~(get by walts) xpub.act)
?~ uw ?~ uw
~|("btc-wallet-store: non-existent xpub" !!) ~|("btc-wallet-store: non-existent xpub" !!)
=/ [a=address:btc w=walt] =/ [a=address:btc w=walt]
@ -122,11 +122,11 @@
~[(send-update [%generate-address a meta.act])] ~[(send-update [%generate-address a meta.act])]
:: ::
%generate-txbu %generate-txbu
=/ uw=(unit walt) (~(get by walts) xpub.act) =+ w=(~(get by walts) xpub.act)
?~ uw ~&(>>> "btc-wallet-store: non-existent xpub" `state) ?~ w ~&(>>> "btc-wallet-store: non-existent xpub" `state)
=/ t=(unit txbu) =/ t=(unit txbu)
%~ select-utxos sut %~ select-utxos sut
[u.uw eny.bowl payee.act feyb.act txos.act] [u.w eny.bowl payee.act feyb.act txos.act]
?~ t ~&(>>> "btc-wallet-store: insufficient balance" `state) ?~ t ~&(>>> "btc-wallet-store: insufficient balance" `state)
:_ state :_ state
~[(send-update [%generate-txbu xpub.act u.t])] ~[(send-update [%generate-txbu xpub.act u.t])]

11
install-zuse.sh Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash
usage() { printf "Usage: $0 URBIT_PIER_DIRECTORY \n" 1>&2; exit 1; }
if [ $# -eq 0 ]; then
usage
exit 2
fi
PIER=$1
cp sys/zuse.hoon $PIER/
echo "zuse copied"

View File

@ -13,8 +13,8 @@
|= =^txbu |= =^txbu
^- json ^- json
%- pairs %- pairs
:~ [%inputs ~] :~ :: [%inputs [%a (turn txis.txbu txi)]]
['associatedKeysets' s+'hi'] ['associatedKeysets' [%a (turn txis.txbu |=(=txi (key key.txi)))]]
['changePath' s+'hi'] ['changePath' s+'hi']
['outputScriptHex' s+'hi'] ['outputScriptHex' s+'hi']
['lockTime' s+'hi'] ['lockTime' s+'hi']
@ -24,7 +24,26 @@
== ==
:: TODO inputs, keysets, changeppath, outputscripthex, locktime, sigHashType, segwit, initialTimestamp :: TODO inputs, keysets, changeppath, outputscripthex, locktime, sigHashType, segwit, initialTimestamp
:: , additionals ("bech32") :: , additionals ("bech32")
:: TODO: use 'pairs' at the top level ++ txi
|= =^txi ^- json
?> ?=(^ ur.txi)
:- %a
:~ s+(en:base16:mimes:html u.ur.txi)
n+pos.utxo.txi
==
++ key
|= =^key ^- json
:- %s
%^ cat 3 'm/'
%^ cat 3
?- bipt.key
%bip44 '44'
%bip49 '49'
%bip84 '84'
==
%^ cat 3 '/0\'/0\'/'
%^ cat 3 ?:(=(%0 chyg.key) '0/' '1/')
(crip ((d-co:co 0) idx.key))
-- --
:: ::
++ defaults ++ defaults
@ -143,11 +162,11 @@
:: ::
++ select-utxos ++ select-utxos
|^ ^- (unit =txbu) |^ ^- (unit =txbu)
=/ uis=(unit (list input)) =/ is=(unit (list input))
%- single-random-draw %- single-random-draw
%- zing %- zing
(turn ~(val by wach.w) to-inputs) (turn ~(val by wach.w) to-inputs)
?~(uis ~ `(inputs-to-txbu u.uis)) ?~(is ~ `(inputs-to-txbu u.is))
:: ::
++ to-inputs ++ to-inputs
|= =addi ^- (list input) |= =addi ^- (list input)

View File

@ -8,7 +8,7 @@
:: piym: incoming payments. Stores all ship moons under their planet. :: piym: incoming payments. Stores all ship moons under their planet.
:: piym-watch/poym-watch: :: piym-watch/poym-watch:
:: let us link an address back to its incoming/outgoing payment :: let us link an address back to its incoming/outgoing payment
:: checked when address updates come from btc-wallet-store :: checked when address updates come from btc-wallet-store
:: ::
+$ btc-state [blockcount=@ud fee=sats t=@da] +$ btc-state [blockcount=@ud fee=sats t=@da]
+$ pend-addr (map req-id:bp request:bws) +$ pend-addr (map req-id:bp request:bws)
@ -18,12 +18,16 @@
+$ piym (jar ship payment) +$ piym (jar ship payment)
+$ piym-watch (map address ship) +$ piym-watch (map address ship)
+$ poym-watch (map address ship) +$ poym-watch (map address ship)
:: req-pay-address: request a payment address from another ship
:: gen-pay-address: generate a payment address from our ship to another
:: ::
+$ action +$ action
$% [%set-provider provider=ship] $% [%set-provider provider=ship]
[%set-default-wallet ~] [%set-default-wallet ~]
[%req-pay-address payee=ship value=sats] [%req-pay-address payee=ship value=sats feyb=(unit sats)]
[%gen-pay-address value=sats]
[%ret-pay-address =address payer=ship value=sats] [%ret-pay-address =address payer=ship value=sats]
[%clear-poym ~]
[%force-retry ~] [%force-retry ~]
== ==
+$ request +$ request

View File

@ -367,7 +367,7 @@
++ pairs ++ pairs
%+ cook %+ cook
~(gas by *(map @t @t)) ~(gas by *(map @t @t))
%+ more (ifix [. .]:(star ace) mic) %+ most (ifix [. .]:(star ace) mic)
;~(plug token ;~(pose ;~(pfix tis value) (easy ''))) ;~(plug token ;~(pose ;~(pfix tis value) (easy '')))
:: ::
++ value ++ value
@ -378,16 +378,16 @@
::NOTE this is ptok:de-purl:html, but can't access that here ::NOTE this is ptok:de-purl:html, but can't access that here
%- plus %- plus
;~ pose ;~ pose
aln zap hax bus cen pad say tar lus aln zap hax buc cen pam soq tar lus
hep dot ket cab tec bar sig hep dot ket cab tic bar sig
== ==
:: ::
++ quoted-string :: 7230 quoted string ++ quoted-string :: 7230 quoted string
%+ cook crip %+ cook crip
%+ ifix [. .]:;~(less (jest '\\"') yel) %+ ifix [. .]:;~(less (jest '\\"') doq)
%- star %- star
;~ pose ;~ pose
;~(pfix bat ;~(pose (just '\09') ace prn)) ;~(pfix bas ;~(pose (just '\09') ace prn))
;~(pose (just '\09') ;~(less (mask "\22\5c\7f") (shim 0x20 0xff))) ;~(pose (just '\09') ;~(less (mask "\22\5c\7f") (shim 0x20 0xff)))
== ==
-- --
@ -1120,6 +1120,7 @@
{$boot lit/? p/*} :: weird %dill boot {$boot lit/? p/*} :: weird %dill boot
{$crop p/@ud} :: trim kernel state {$crop p/@ud} :: trim kernel state
$>(%crud vane-task) :: error with trace $>(%crud vane-task) :: error with trace
[%flee session=~] :: unwatch session
{$flog p/flog} :: wrapped error {$flog p/flog} :: wrapped error
{$flow p/@tas q/(list gill:gall)} :: terminal config {$flow p/@tas q/(list gill:gall)} :: terminal config
{$hail ~} :: terminal refresh {$hail ~} :: terminal refresh
@ -1134,6 +1135,7 @@
{$talk p/tank} :: {$talk p/tank} ::
{$text p/tape} :: {$text p/tape} ::
{$veer p/@ta q/path r/@t} :: install vane {$veer p/@ta q/path r/@t} :: install vane
[%view session=~] :: watch session blits
$>(%trim vane-task) :: trim state $>(%trim vane-task) :: trim state
$>(%vega vane-task) :: report upgrade $>(%vega vane-task) :: report upgrade
{$verb ~} :: verbose mode {$verb ~} :: verbose mode
@ -1157,6 +1159,7 @@
$% {$bel ~} :: make a noise $% {$bel ~} :: make a noise
{$clr ~} :: clear the screen {$clr ~} :: clear the screen
{$hop p/@ud} :: set cursor position {$hop p/@ud} :: set cursor position
[%klr p=stub] :: set styled line
{$lin p/(list @c)} :: set current line {$lin p/(list @c)} :: set current line
{$mor ~} :: newline {$mor ~} :: newline
{$sag p/path q/*} :: save to jamfile {$sag p/path q/*} :: save to jamfile
@ -4261,7 +4264,7 @@
++ decompress-point ++ decompress-point
|= dat=@ |= dat=@
^- pont ^- pont
:: ~& "custom decompress point" :: ~& "custom decompress point"
=+ x=(end 3 w dat) =+ x=(end 3 w dat)
?> =(3 (mod ^p 4)) ?> =(3 (mod ^p 4))
=+ y=(exp.p (div +(^p) 4) :(sum.p (exp.p 3 x) (pro.p a x) b)) =+ y=(exp.p (div +(^p) 4) :(sum.p (exp.p 3 x) (pro.p a x) b))
@ -5365,28 +5368,30 @@
:: :::: :: ::::
++ format ^? ++ format ^?
|% |%
:: :: ++to-wain:format :: 0 ending a line (invalid @t) is not preserved :: ++to-wain:format
++ to-wain :: atom to line list ++ to-wain :: cord to line list
~% %lore ..is ~ ~% %leer ..is ~
|= lub/@ |= txt=cord
=| tez/(list @t) ^- wain
|- ^+ tez =/ len=@ (met 3 txt)
=+ ^= wor =/ cut =+(cut -(a 3, c 1, d txt))
=+ [meg=0 i=0] =/ sub sub
|- ^- {meg/@ i/@ end/@f} =| [i=@ out=wain]
=+ gam=(cut 3 [i 1] lub) |- ^+ out
?: =(0 gam) =+ |- ^- j=@
[meg i %.y] ?: ?| =(i len)
?: =(10 gam) =(10 (cut(b i)))
[meg i %.n] ==
$(meg (cat 3 meg gam), i +(i)) i
?: end.wor $(i +(i))
(flop ^+(tez [meg.wor tez])) =. out :_ out
?: =(0 lub) (flop tez) (cut(b i, c (sub j i)))
$(lub (rsh 3 +(i.wor) lub), tez [meg.wor tez]) ?: =(j len)
(flop out)
$(i +(j))
:: :: ++of-wain:format :: :: ++of-wain:format
++ of-wain :: line list to atom ++ of-wain :: line list to cord
|= tez/(list @t) |= tez=wain ^- cord
(rap 3 (join '\0a' tez)) (rap 3 (join '\0a' tez))
:: :: ++of-wall:format :: :: ++of-wall:format
++ of-wall :: line list to tape ++ of-wall :: line list to tape
@ -5639,7 +5644,7 @@
[(rash a fel) b] [(rash a fel) b]
:: :: ++pa:dejs:format :: :: ++pa:dejs:format
++ pa :: string as path ++ pa :: string as path
(su ;~(pfix net (more net urs:ab))) (su ;~(pfix fas (more fas urs:ab)))
:: :: ++pe:dejs:format :: :: ++pe:dejs:format
++ pe :: prefix ++ pe :: prefix
|* {pre/* wit/fist} |* {pre/* wit/fist}
@ -6201,7 +6206,7 @@
:: :: ++abox:de-json:html :: :: ++abox:de-json:html
++ abox :: array ++ abox :: array
%+ stag %a %+ stag %a
(ifix [lac (wish rac)] (more (wish com) apex)) (ifix [sel (wish ser)] (more (wish com) apex))
:: :: ++apex:de-json:html :: :: ++apex:de-json:html
++ apex :: any value ++ apex :: any value
%+ knee *json |. ~+ %+ knee *json |. ~+
@ -6233,7 +6238,7 @@
=* wow `(map @t @)`(malt lip) =* wow `(map @t @)`(malt lip)
(sear ~(get by wow) low) (sear ~(get by wow) low)
=* tuf ;~(pfix (just 'u') (cook tuft qix:ab)) =* tuf ;~(pfix (just 'u') (cook tuft qix:ab))
;~(pose yel net say bas loo tuf) ;~(pose doq fas soq bas loo tuf)
== ==
:: :: ++expo:de-json:html :: :: ++expo:de-json:html
++ expo :: exponent ++ expo :: exponent
@ -6247,7 +6252,7 @@
;~(plug dot digs) ;~(plug dot digs)
:: :: ++jcha:de-json:html :: :: ++jcha:de-json:html
++ jcha :: string character ++ jcha :: string character
;~(pose ;~(less yel bas prn) esca) ;~(pose ;~(less doq bas prn) esca)
:: :: ++mayb:de-json:html :: :: ++mayb:de-json:html
++ mayb :: optional ++ mayb :: optional
|*(bus/rule ;~(pose bus (easy ~))) |*(bus/rule ;~(pose bus (easy ~)))
@ -6264,7 +6269,7 @@
== ==
:: :: ++obje:de-json:html :: :: ++obje:de-json:html
++ obje :: object list ++ obje :: object list
%+ ifix [(wish leb) (wish reb)] %+ ifix [(wish kel) (wish ker)]
(more (wish com) pear) (more (wish com) pear)
:: :: ++obox:de-json:html :: :: ++obox:de-json:html
++ obox :: object ++ obox :: object
@ -6278,7 +6283,7 @@
(cook |=(a/@ [a ~]) bus) (cook |=(a/@ [a ~]) bus)
:: :: ++stri:de-json:html :: :: ++stri:de-json:html
++ stri :: string ++ stri :: string
(cook crip (ifix [yel yel] (star jcha))) (cook crip (ifix [doq doq] (star jcha)))
:: :: ++tops:de-json:html :: :: ++tops:de-json:html
++ tops :: strict value ++ tops :: strict value
;~(pose abox obox) ;~(pose abox obox)
@ -6387,14 +6392,14 @@
;~(pfix (plus whit) name) ;~(pfix (plus whit) name)
;~ pose ;~ pose
%+ ifix %+ ifix
:_ yel :_ doq
;~(plug (ifix [. .]:(star whit) tis) yel) ;~(plug (ifix [. .]:(star whit) tis) doq)
(star ;~(less yel escp)) (star ;~(less doq escp))
:: ::
%+ ifix %+ ifix
:_ say :_ soq
;~(plug (ifix [. .]:(star whit) tis) say) ;~(plug (ifix [. .]:(star whit) tis) soq)
(star ;~(less say escp)) (star ;~(less soq escp))
:: ::
(easy ~) (easy ~)
== ==
@ -6410,7 +6415,7 @@
:: :: ++chrd:de-xml:html :: :: ++chrd:de-xml:html
++ chrd :: character data ++ chrd :: character data
%+ cook |=(a/tape ^-(mars ;/(a))) %+ cook |=(a/tape ^-(mars ;/(a)))
(plus ;~(less yel ;~(pose (just `@`10) escp))) (plus ;~(less doq ;~(pose (just `@`10) escp)))
:: :: ++comt:de-xml:html :: :: ++comt:de-xml:html
++ comt :: comments ++ comt :: comments
=- (ifix [(jest '<!--') (jest '-->')] (star -)) =- (ifix [(jest '<!--') (jest '-->')] (star -))
@ -6427,10 +6432,10 @@
;~(less (jest '?>') prn) ;~(less (jest '?>') prn)
:: :: ++escp:de-xml:html :: :: ++escp:de-xml:html
++ escp :: ++ escp ::
;~(pose ;~(less led ban pad prn) enty) ;~(pose ;~(less gal gar pam prn) enty)
:: :: ++enty:de-xml:html :: :: ++enty:de-xml:html
++ enty :: entity ++ enty :: entity
%+ ifix pad^mic %+ ifix pam^mic
;~ pose ;~ pose
=+ def=^+(ent (my:nl [%gt '>'] [%lt '<'] [%amp '&'] [%quot '"'] ~)) =+ def=^+(ent (my:nl [%gt '>'] [%lt '<'] [%amp '&'] [%quot '"'] ~))
%+ sear ~(get by (~(uni by def) ent)) %+ sear ~(get by (~(uni by def) ent))
@ -6446,7 +6451,7 @@
;~(plug ;~(plug name attr) (cold ~ (star whit))) ;~(plug ;~(plug name attr) (cold ~ (star whit)))
:: :: ++head:de-xml:html :: :: ++head:de-xml:html
++ head :: opening tag ++ head :: opening tag
(ifix [gal ban] ;~(plug name attr)) (ifix [gal gar] ;~(plug name attr))
:: :: ++many:de-xml:html :: :: ++many:de-xml:html
++ many :: contents ++ many :: contents
;~(pfix (star comt) (star ;~(sfix ;~(pose apex chrd cdat) (star comt)))) ;~(pfix (star comt) (star ;~(sfix ;~(pose apex chrd cdat) (star comt))))
@ -6461,7 +6466,7 @@
;~(pose ;~(plug ;~(sfix chx col) chx) chx) ;~(pose ;~(plug ;~(sfix chx col) chx) chx)
:: :: ++tail:de-xml:html :: :: ++tail:de-xml:html
++ tail :: closing tag ++ tail :: closing tag
(ifix [(jest '</') ban] name) (ifix [(jest '</') gar] name)
:: :: ++whit:de-xml:html :: :: ++whit:de-xml:html
++ whit :: whitespace ++ whit :: whitespace
(mask ~[' ' `@`0x9 `@`0xa]) (mask ~[' ' `@`0x9 `@`0xa])
@ -6566,8 +6571,13 @@
?^ t.rax ?^ t.rax
[p.pok [ire q.pok]]:[pok=$(rax t.rax) ire=i.rax] [p.pok [ire q.pok]]:[pok=$(rax t.rax) ire=i.rax]
=/ raf/(like term) =/ raf/(like term)
=> |=(a/@ ((sand %tas) (crip (flop (trip a))))) %- ;~ sfix
(;~(sfix (sear . sym) dot) [1^1 (flop (trip i.rax))]) %+ sear
|=(a/@ ((sand %ta) (crip (flop (trip a)))))
(cook |=(a/tape (rap 3 ^-((list @) a))) (star aln))
dot
==
[1^1 (flop (trip i.rax))]
?~ q.raf ?~ q.raf
[~ [i.rax ~]] [~ [i.rax ~]]
=+ `{ext/term {@ @} fyl/tape}`u.q.raf =+ `{ext/term {@ @} fyl/tape}`u.q.raf
@ -6576,7 +6586,7 @@
:: :: ++apat:de-purl:html :: :: ++apat:de-purl:html
++ apat :: 2396 abs_path ++ apat :: 2396 abs_path
%+ cook deft %+ cook deft
;~(pfix net (more net smeg)) ;~(pfix fas (more fas smeg))
:: :: ++aurf:de-purl:html :: :: ++aurf:de-purl:html
++ aurf :: 2396 with fragment ++ aurf :: 2396 with fragment
%+ cook |~(a/purf a) %+ cook |~(a/purf a)
@ -6597,13 +6607,13 @@
[q.a [[p.a r.a] b]] [q.a [[p.a r.a] b]]
:: ::
;~ plug ;~ plug
;~(plug htts (punt ;~(sfix urt:ab vat)) thor) ;~(plug htts (punt ;~(sfix urt:ab pat)) thor)
;~(plug ;~(pose apat (easy *pork)) yque) ;~(plug ;~(pose apat (easy *pork)) yque)
== ==
:: :: ++htts:de-purl:html :: :: ++htts:de-purl:html
++ htts :: scheme ++ htts :: scheme
%+ sear ~(get by (malt `(list (pair term ?))`[http+| https+& ~])) %+ sear ~(get by (malt `(list (pair term ?))`[http+| https+& ~]))
;~(sfix scem ;~(plug col net net)) ;~(sfix scem ;~(plug col fas fas))
:: :: ++cock:de-purl:html :: :: ++cock:de-purl:html
++ cock :: cookie ++ cock :: cookie
%+ most ;~(plug mic ace) %+ most ;~(plug mic ace)
@ -6623,10 +6633,10 @@
(cook crip (star pquo)) (cook crip (star pquo))
:: :: ++pcar:de-purl:html :: :: ++pcar:de-purl:html
++ pcar :: 2396 path char ++ pcar :: 2396 path char
;~(pose pure pesc psub col vat) ;~(pose pure pesc psub col pat)
:: :: ++pcok:de-purl:html :: :: ++pcok:de-purl:html
++ pcok :: cookie char ++ pcok :: cookie char
;~(less bas mic com yel prn) ;~(less bas mic com doq prn)
:: :: ++pesc:de-purl:html :: :: ++pesc:de-purl:html
++ pesc :: 2396 escaped ++ pesc :: 2396 escaped
;~(pfix cen mes) ;~(pfix cen mes)
@ -6635,24 +6645,24 @@
(cold ' ' (just '+')) (cold ' ' (just '+'))
:: :: ++pque:de-purl:html :: :: ++pque:de-purl:html
++ pque :: 3986 query char ++ pque :: 3986 query char
;~(pose pcar net wut) ;~(pose pcar fas wut)
:: :: ++pquo:de-purl:html :: :: ++pquo:de-purl:html
++ pquo :: normal query char ++ pquo :: normal query char
;~(pose pure pesc pold net wut col com) ;~(pose pure pesc pold fas wut col com)
:: :: ++pure:de-purl:html :: :: ++pure:de-purl:html
++ pure :: 2396 unreserved ++ pure :: 2396 unreserved
;~(pose aln hep cab dot zap sig tar say lit rit) ;~(pose aln hep cab dot zap sig tar soq pal par)
:: :: ++psub:de-purl:html :: :: ++psub:de-purl:html
++ psub :: 3986 sub-delims ++ psub :: 3986 sub-delims
;~ pose ;~ pose
zap bus pad say lit rit zap buc pam soq pal par
tar lus com mic tis tar lus com mic tis
== ==
:: :: ++ptok:de-purl:html :: :: ++ptok:de-purl:html
++ ptok :: 2616 token ++ ptok :: 2616 token
;~ pose ;~ pose
aln zap hax bus cen pad say tar lus aln zap hax buc cen pam soq tar lus
hep dot ket cab tec bar sig hep dot ket cab tic bar sig
== ==
:: :: ++scem:de-purl:html :: :: ++scem:de-purl:html
++ scem :: 2396 scheme ++ scem :: 2396 scheme
@ -6666,7 +6676,7 @@
(cook crip (plus pcok)) (cook crip (plus pcok))
:: :: ++tosk:de-purl:html :: :: ++tosk:de-purl:html
++ tosk :: 6265 quoted value ++ tosk :: 6265 quoted value
;~(pose tock (ifix [yel yel] tock)) ;~(pose tock (ifix [doq doq] tock))
:: :: ++toke:de-purl:html :: :: ++toke:de-purl:html
++ toke :: 2616 token ++ toke :: 2616 token
(cook crip (plus ptok)) (cook crip (plus ptok))
@ -6708,7 +6718,7 @@
:: proper query :: proper query
:: ::
%+ more %+ more
;~(pose pad mic) ;~(pose pam mic)
;~(plug fque ;~(pose ;~(pfix tis fquu) (easy ''))) ;~(plug fque ;~(pose ;~(pfix tis fquu) (easy '')))
:: ::
:: funky query :: funky query
@ -8212,7 +8222,7 @@
:: ::
++ function ++ function
|* [tag=@tas fun=@t rul=rule] |* [tag=@tas fun=@t rul=rule]
;~(plug (cold tag (jest fun)) (ifix [lit rit] rul)) ;~(plug (cold tag (jest fun)) (ifix [pal par] rul))
:: ::
++ shipname ++ shipname
;~(pfix sig fed:ag) ;~(pfix sig fed:ag)
@ -9177,6 +9187,10 @@
|- ^- seed:able:jael |- ^- seed:able:jael
=/ cub=acru:ames (pit:nu:crub:crypto 512 eny) =/ cub=acru:ames (pit:nu:crub:crypto 512 eny)
=/ who=ship `@`fig:ex:cub =/ who=ship `@`fig:ex:cub
:: disallow 64-bit or smaller addresses
::
?. ?=(%pawn (clan:title who))
$(eny +(eny))
?: (~(has in stars) (^sein:title who)) ?: (~(has in stars) (^sein:title who))
[who 1 sec:ex:cub ~] [who 1 sec:ex:cub ~]
$(eny +(eny)) $(eny +(eny))