From 0f04530438c58f349007cfef29b18f7ae14531d6 Mon Sep 17 00:00:00 2001 From: timlucmiptev Date: Fri, 22 Jan 2021 10:59:38 +0200 Subject: [PATCH] moon install instructions --- BTC.scratch.md | 6 ++-- MOON_INSTALL.md | 76 ++++++++++++++++++++++++++++++------------- lib/bip158.hoon | 74 +++++++++++++++++++++++++++++++++++++++++ lib/btc-provider.hoon | 4 +-- lib/btc.hoon | 14 ++++---- sur/btc.hoon | 6 ++-- 6 files changed, 144 insertions(+), 36 deletions(-) diff --git a/BTC.scratch.md b/BTC.scratch.md index 617eafb36..7e6b2c5c3 100644 --- a/BTC.scratch.md +++ b/BTC.scratch.md @@ -94,11 +94,13 @@ Use `@uc` to make the Hash-160 into a BTC P2PKH address ``` =pubkey 0x2.5086.3ad6.4a87.ae8a.2fe8.3c1a.f1a8.403c.b53f.53e4.86d8.511d.ad8a.0488.7e5b.2352 (hash-160:btc pubkey) -:: gives 0xf54a.5851.e937.2b87.810a.8e60.cdd2.e7cf.d80b.6e31 +:: gives [%20 0xf54a.5851.e937.2b87.810a.8e60.cdd2.e7cf.d80b.6e31] -`@uc`(hash-160:btc pubkey) +`@uc`dat:(hash-160:btc pubkey) :: gives 1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs ``` +0x3.724a.a081.bd67.a2bd.7dc3.a4b6.a36d.69c2.c148.483e.27bd.50dc.7ee7.27f9.dc87.b8b4 +0x3.fda0.6514.80ec.ac75.cd91.ec65.7123.9a24.c657.cc25.f0f8.def2.0554.5230.2d12.6488 ### trailing zero Need to test with this because it shows need to input num bytes diff --git a/MOON_INSTALL.md b/MOON_INSTALL.md index 81c26578e..6cd73d630 100644 --- a/MOON_INSTALL.md +++ b/MOON_INSTALL.md @@ -1,6 +1,15 @@ # Installing on a Moon Requires base hash at least: `rd3oe` +Moon keys: +``` +~sarsev-dapwel-timluc-miptev +0w2.LVGJb.ufXUR.0bn--.rQ6qF.L5Foj.lkIzX.pR~pr.BHZ7x.G~HGK.JUGoG.riHNr.g7v8o.UZ~Hl.Stsdh.uqwRc.4bJcM.Zi~-1.Q84g0.efa28.mu072.tg0g1 + +~pidlun-hadwyx-timluc-miptev +0w5fCcu.UT9HM.853Z5.2vBGL.YglSz.H9wVI.BIjZT.xOpnG.A31-6.qR29j.Fq7Gu.ZSeI4.No9n0.0HCXS.5eloq.3Be9X.GEz7Q.hgwf0.0URA4.yL01M.Dk7E1 +``` + ## Create Moon In your Urbit: ``` @@ -10,40 +19,63 @@ Copy the key and note the moon name. ## Install New `zuse.hoon` ``` -./urbit -w $MOON_NAME -G $COPIED_KEY +./urbit -w $MOON_NAME -G $COPIED_KEY -c $PIER_DIR ``` The moon will compile and apply OTAs. After that is done, run: ``` |mount % ``` -Back outside: -``` -cd $BTC_AGENTS_DIR -./install-zuse.sh $MOON_PIER -``` - -In moon: -``` -|commit %home -|reset -``` - -Install the rest of the files: +Install files: ``` ./install.sh $MOON_PIER ``` -The kernel will recompile. Then test that the new `decompress-point` is included. -The below should yield: `0x3.30d5.4fd0.dd42.0a6e.5f8d.3624.f5f3.482c.ae35.0f79.d5f0.753b.f5be.ef9c.2d91.af3c` +## End to End + +### On Moon1: ``` -=bip32 -build-file %/lib/bip32/hoon -=ecc secp256k1:secp:crypto -=xpub "zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs" -`@ux`(compress-point:ecc pub:(derive-public:(derive-public:(from-extended:bip32 xpub) 0) 0)) +=moon1 ~sarsev-dapwel-timluc-miptev +=moon2 ~pidlun-hadwyx-timluc-miptev +|commit %home + +|start %btc-provider +|start %btc-wallet-store +|start %btc-wallet-hook +:btc-provider|command [%set-credentials api-url='http://localhost:50002'] +:btc-provider|command [%whitelist-clients `(set ship)`(sy ~[moon2])] +=xpub1 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs' +:btc-wallet-hook|action [%set-provider moon1] + +=fprint [%4 0xdead.beef] +:btc-wallet-store|action [%add-wallet xpub1 fprint ~ [~ 8] [~ 6]] ``` -## Start `btc-provider` +### On Moon2: ``` -:btc-provider|command [%set-credentials api-url='http://localhost:50002'] +:: xpub from PRIVATE.md +=moon1 ~sarsev-dapwel-timluc-miptev +=moon2 ~pidlun-hadwyx-timluc-miptev +|commit %home + +|start %btc-wallet-store +|start %btc-wallet-hook +:btc-wallet-hook|action [%set-provider moon1] +=xpub2 'zpub6r8dKyWJ31XF6n69KKeEwLjVC5ruqAbiJ4QCqLsrV36Mvx9WEjUaiPNPGFLHNCCqgCdy6iZC8ZgHsm6a1AUTVBMVbKGemNcWFcwBGSjJKbD' +=fprint [%4 0xbeef.dead] +:btc-wallet-store|action [%add-wallet xpub2 fprint ~ [~ 8] [~ 6]] +``` + +### Request Address +Moon2: +``` +:btc-wallet-hook|action [%req-pay-address payee=moon1 value=2.000 [~ 30]] +:btc-wallet-hook +dbug [%state 'poym'] +``` + +## scrys +``` +.^((list @t) %gx /=btc-wallet-store=/scanned/noun) + +.^(@ud %gx /=btc-wallet-store=/balance/[xpub2]/noun) ``` diff --git a/lib/bip158.hoon b/lib/bip158.hoon index 97d5e8e91..e9a5aaa82 100644 --- a/lib/bip158.hoon +++ b/lib/bip158.hoon @@ -4,6 +4,80 @@ |% ++ p 19 -- +++ siphash + |= [k=byts m=byts] + ^- byts + |^ + ?> =(wid.k 16) + ?> (lte (met 3 dat.k) wid.k) + ?> (lte (met 3 dat.m) wid.m) + =. k (flim:sha k) + =. m (flim:sha m) + (flim:sha (fin (comp m (init dat.k)))) + :: Initialise internal state + :: + ++ init + |= k=@ + ^- [@ @ @ @] + =/ k0=@ (end [6 1] k) + =/ k1=@ (cut 6 [1 1] k) + :^ (mix k0 0x736f.6d65.7073.6575) + (mix k1 0x646f.7261.6e64.6f6d) + (mix k0 0x6c79.6765.6e65.7261) + (mix k1 0x7465.6462.7974.6573) + :: + :: Compression rounds + ++ comp + |= [m=byts v=[v0=@ v1=@ v2=@ v3=@]] + ^- [@ @ @ @] + =/ len=@ud (div wid.m 8) + =/ last=@ (lsh [3 7] (mod wid.m 256)) + =| i=@ud + =| w=@ + |- + =. w (cut 6 [i 1] dat.m) + ?: =(i len) + =. v3.v (mix v3.v (mix last w)) + =. v (rnd (rnd v)) + =. v0.v (mix v0.v (mix last w)) + v + %= $ + v =. v3.v (mix v3.v w) + =. v (rnd (rnd v)) + =. v0.v (mix v0.v w) + v + i (add i 1) + == + :: + :: Finalisation rounds + ++ fin + |= v=[v0=@ v1=@ v2=@ v3=@] + ^- byts + =. v2.v (mix v2.v 0xff) + =. v (rnd (rnd (rnd (rnd v)))) + :- 8 + :(mix v0.v v1.v v2.v v3.v) + :: + :: Sipround + ++ rnd + |= [v0=@ v1=@ v2=@ v3=@] + ^- [@ @ @ @] + =. v0 (~(sum fe 6) v0 v1) + =. v2 (~(sum fe 6) v2 v3) + =. v1 (~(rol fe 6) 0 13 v1) + =. v3 (~(rol fe 6) 0 16 v3) + =. v1 (mix v1 v0) + =. v3 (mix v3 v2) + =. v0 (~(rol fe 6) 0 32 v0) + =. v2 (~(sum fe 6) v2 v1) + =. v0 (~(sum fe 6) v0 v3) + =. v1 (~(rol fe 6) 0 17 v1) + =. v3 (~(rol fe 6) 0 21 v3) + =. v1 (mix v1 v2) + =. v3 (mix v3 v0) + =. v2 (~(rol fe 6) 0 32 v2) + [v0 v1 v2 v3] + -- :: +str: bit streams :: read is from the front :: write appends to the back diff --git a/lib/btc-provider.hoon b/lib/btc-provider.hoon index f2edbedcc..f0b78140c 100644 --- a/lib/btc-provider.hoon +++ b/lib/btc-provider.hoon @@ -6,7 +6,7 @@ |% ++ address-to-cord |= =address ^- cord - ?: ?=([%legacy *] address) + ?: ?=([%base58 *] address) (scot %uc +.address) +.address :: @@ -15,7 +15,7 @@ ?. ?| =("bc1" (scag 3 (trip addrc))) =("tb1" (scag 3 (trip addrc))) == - ~|("legacy addresses not yet supported" !!) + ~|("base58 addresses not yet supported" !!) [%bech32 addrc] :: ++ bytc-to-cord diff --git a/lib/btc.hoon b/lib/btc.hoon index e4c801c03..3c5d56aac 100644 --- a/lib/btc.hoon +++ b/lib/btc.hoon @@ -41,8 +41,8 @@ %bech32 (to-hex:bech32 address) :: TODO: implement legacy - %legacy - ~|("legacy addresess not supported to script-pubkey yet" !!) + %base58 + ~|("base58 addresess not supported to script-pubkey yet" !!) == %- cat:byt :~ 1^(add 2 wid.h) @@ -524,14 +524,14 @@ :: ++ encode-raw |= [hrp=tape data=(list @)] - ^- bech32-address + ^- bech32-a =/ combined=(list @) (weld data (checksum hrp data)) :- %bech32 %- crip (zing ~[hrp "1" (tape (murn combined value-to-charset))]) ++ decode-raw - |= b=bech32-address + |= b=bech32-a ^- (unit raw-decoded) =/ bech (cass (trip +.b)) :: to lowercase =/ pos (flop (fand "1" bech)) @@ -554,7 +554,7 @@ :: goes from a bech32 address to hex. Returns byts to preserve leading 0s :: ++ to-hex - |= b=bech32-address + |= b=bech32-a ^- bytc =/ d=(unit raw-decoded) (decode-raw b) ?~ d ~|("Invalid bech32 address" !!) @@ -571,7 +571,7 @@ :: ++ encode-pubkey |= [=network pubkey=@ux] - ^- (unit bech32-address) + ^- (unit bech32-a) ?. =(33 (met 3 pubkey)) ~|('pubkey must be a 33 byte ECC compressed public key' !!) =/ prefix (~(get by prefixes) network) @@ -581,7 +581,7 @@ [0 (convert:bit 5 (zeros-brip:bit 160 dat:(hash-160 pubkey)))] ++ encode-hash-160 |= [=network h160=byts] - ^- (unit bech32-address) + ^- (unit bech32-a) =/ prefix (~(get by prefixes) network) ?~ prefix ~ :- ~ diff --git a/sur/btc.hoon b/sur/btc.hoon index 0127a6342..e060cead3 100644 --- a/sur/btc.hoon +++ b/sur/btc.hoon @@ -3,9 +3,9 @@ |% +$ network ?(%main %testnet) +$ xpub @ta -+$ legacy-address $%([%legacy @uc]) -+$ bech32-address $%([%bech32 cord]) -+$ address ?(legacy-address bech32-address) ++$ address ?(base58-a bech32-a) ++$ base58-a $%([%base58 @uc]) ++$ bech32-a $%([%bech32 cord]) +$ fprint [%4 @ux] +$ bipt $?(%44 %49 %84) +$ chyg $?(%0 %1)