From c04304503af5eda2afee4066feead8479d81a2f9 Mon Sep 17 00:00:00 2001 From: timlucmiptev Date: Fri, 19 Feb 2021 16:11:01 +0200 Subject: [PATCH] factor out bitcoin-utils --- lib/bip/b158.hoon | 59 ++++++++++--------- lib/{bitcoin.hoon => bitcoin-utils.hoon} | 6 +- lib/btc-provider.hoon | 36 +++++------ .../lib/{bitcoin.hoon => bitcoin-utils.hoon} | 2 +- tests/lib/btc-wallet.hoon | 29 ++++----- 5 files changed, 67 insertions(+), 65 deletions(-) rename lib/{bitcoin.hoon => bitcoin-utils.hoon} (99%) rename tests/lib/{bitcoin.hoon => bitcoin-utils.hoon} (99%) diff --git a/lib/bip/b158.hoon b/lib/bip/b158.hoon index 8b2c935ed5..a992aca1c3 100644 --- a/lib/bip/b158.hoon +++ b/lib/bip/b158.hoon @@ -1,4 +1,5 @@ -/+ *bitcoin +/- bc=bitcoin +/+ bcu=bitcoin-utils |% ++ params |% @@ -87,25 +88,25 @@ ++ str |% ++ read-bit - |= s=bits - ^- [bit=@ub rest=bits] + |= s=bits:bc + ^- [bit=@ub rest=bits:bc] ?> (gth wid.s 0) :* ?:((gth wid.s (met 0 dat.s)) 0b0 0b1) [(dec wid.s) (end [0 (dec wid.s)] dat.s)] == :: ++ read-bits - |= [n=@ s=bits] - ^- [bits rest=bits] - =| bs=bits + |= [n=@ s=bits:bc] + ^- [bits:bc rest=bits:bc] + =| bs=bits:bc |- ?: =(n 0) [bs s] =^ b s (read-bit s) $(n (dec n), bs (write-bits bs [1 b])) :: ++ write-bits - |= [s1=bits s2=bits] - ^- bits + |= [s1=bits:bc s2=bits:bc] + ^- bits:bc [(add wid.s1 wid.s2) (can 0 ~[s2 s1])] -- :: +gol: Golomb-Rice encoding/decoding @@ -118,8 +119,8 @@ :: - p: golomb-rice p param :: ++ en - |= [s=bits x=@ p=@] - ^- bits + |= [s=bits:bc x=@ p=@] + ^- bits:bc =+ q=(rsh [0 p] x) =+ unary=[+(q) (lsh [0 1] (dec (bex q)))] =+ r=[p (end [0 p] x)] @@ -127,15 +128,15 @@ (write-bits:str unary r) :: ++ de - |= [s=bits p=@] - ^- [delta=@ rest=bits] + |= [s=bits:bc p=@] + ^- [delta=@ rest=bits:bc] |^ ?> (gth wid.s 0) =^ q s (get-q s) =^ r s (read-bits:str p s) [(add dat.r (lsh [0 p] q)) s] :: ++ get-q - |= s=bits + |= s=bits:bc =| q=@ =^ first-bit s (read-bit:str s) |- @@ -170,30 +171,30 @@ -- :: ++ parse-filter - |= filter=hexb - ^- [n=@ux gcs-set=bits] - =/ n n:(de:csiz filter) + |= filter=hexb:bc + ^- [n=@ux gcs-set=bits:bc] + =/ n n:(de:csiz:bcu filter) =/ lead=@ ?:(=(1 wid.n) 1 +(wid.n)) :- dat.n - [(mul 8 (sub wid.filter lead)) `@ub`dat:(drop:byt lead filter)] + [(mul 8 (sub wid.filter lead)) `@ub`dat:(drop:byt:bcu lead filter)] :: +to-key: blockhash (little endian) to key for siphash :: ++ to-key |= blockhash=tape ^- byts - %+ take:byt 16 - %- flip:byt - (to-hexb (crip blockhash)) + %+ take:byt:bcu 16 + %- flip:byt:bcu + (to-hexb:bcu (crip blockhash)) :: +match: whether block filter matches *any* target scriptpubkeys :: - filter: full block filter, with leading N :: - k: key for siphash (end of blockhash, reversed) :: - targets: scriptpubkeys to match :: ++ match - |= [filter=hexb k=byts targets=(list byts)] + |= [filter=hexb:bc k=byts targets=(list byts)] ^- ? =/ [p=@ m=@] [p:params m:params] - =/ [n=@ux gcs-set=bits] (parse-filter filter) + =/ [n=@ux gcs-set=bits:bc] (parse-filter filter) =+ target-hs=(set-construct:hsh targets k (mul n m)) =+ last-val=0 |- @@ -214,15 +215,15 @@ :: - targets: scriptpubkeys to match :: ++ all-match - |= [filter=hexb k=byts targets=(list byts)] - ^- (set hexb) - %- ~(gas in *(set hexb)) + |= [filter=hexb:bc k=byts targets=(list byts)] + ^- (set hexb:bc) + %- ~(gas in *(set hexb:bc)) =/ [p=@ m=@] [p:params m:params] - =/ [n=@ux gcs-set=bits] (parse-filter filter) - =/ target-map=(map @ hexb) - %- ~(gas by *(map @ hexb)) + =/ [n=@ux gcs-set=bits:bc] (parse-filter filter) + =/ target-map=(map @ hexb:bc) + %- ~(gas by *(map @ hexb:bc)) %+ turn targets - |=(t=hexb [(to-range:hsh t (mul n m) k) t]) + |=(t=hexb:bc [(to-range:hsh t (mul n m) k) t]) =+ target-hs=(sort ~(tap in ~(key by target-map)) lth) =+ last-val=0 =| matches=(list @) diff --git a/lib/bitcoin.hoon b/lib/bitcoin-utils.hoon similarity index 99% rename from lib/bitcoin.hoon rename to lib/bitcoin-utils.hoon index 9f6549766c..ef6587b311 100644 --- a/lib/bitcoin.hoon +++ b/lib/bitcoin-utils.hoon @@ -1,9 +1,9 @@ -:: lib/btc.hoon +:: lib/bitcoin-utils.hoon :: Utilities for working with BTC data types and transactions :: /- sur=bitcoin -^? -=< [sur .] +:: ^? +:: =< [sur .] =, sur |% :: diff --git a/lib/btc-provider.hoon b/lib/btc-provider.hoon index 709292cf9c..8e7646ff9d 100644 --- a/lib/btc-provider.hoon +++ b/lib/btc-provider.hoon @@ -1,18 +1,18 @@ -/- sur=btc-provider, json-rpc -/+ *bitcoin +/- bp=btc-provider, json-rpc, bc=bitcoin +/+ bcu=bitcoin-utils ^? -=< [sur .] -=, sur +::=< [sur .] +::=, sur |% ++ address-to-cord - |= =address ^- cord + |= =address:bc ^- cord ?: ?=([%base58 *] address) (scot %uc +.address) +.address :: ++ address-from-cord |= addrc=@t - ^- address + ^- address:bc ?. ?| =("bc1" (scag 3 (trip addrc))) =("tb1" (scag 3 (trip addrc))) == @@ -20,7 +20,7 @@ [%bech32 addrc] :: ++ hexb-to-cord - |= =hexb ^- cord + |= =hexb:bc ^- cord (en:base16:mimes:html hexb) :: +from-epoch: time since Jan 1, 1970 in seconds. :: @@ -48,7 +48,7 @@ == :: ++ gen-request - |= [=host-info ract=action:rpc-types] + |= [=host-info:bp ract=action:rpc-types:bp] ^- request:http %+ rpc-action-to-http api-url.host-info ract @@ -58,7 +58,7 @@ |% ++ parse-result |= res=response:json-rpc - |^ ^- result:rpc-types + |^ ^- result:rpc-types:bp ~| -.res ?> ?=(%result -.res) ?+ id.res ~|([%unsupported-result id.res] !!) @@ -90,7 +90,7 @@ ++ utxo %- ot :~ ['tx_pos' ni] - ['tx_hash' (cu to-hexb so)] + ['tx_hash' (cu to-hexb:bcu so)] [%height ni] [%value ni] [%recvd (cu from-epoch ni)] @@ -98,7 +98,7 @@ ++ tx-vals %- ot :~ [%included bo] - [%txid (cu to-hexb so)] + [%txid (cu to-hexb:bcu so)] [%confs ni] [%recvd (cu from-epoch ni)] [%inputs (ar tx-val)] @@ -106,19 +106,19 @@ == ++ tx-val %- ot - :~ [%txid (cu to-hexb so)] + :~ [%txid (cu to-hexb:bcu so)] [%pos ni] [%address (cu address-from-cord so)] [%value ni] == ++ raw-tx %- ot - :~ [%txid (cu to-hexb so)] - [%rawtx (cu to-hexb so)] + :~ [%txid (cu to-hexb:bcu so)] + [%rawtx (cu to-hexb:bcu so)] == ++ broadcast-tx %- ot - :~ [%txid (cu to-hexb so)] + :~ [%txid (cu to-hexb:bcu so)] [%broadcast bo] [%included bo] == @@ -126,14 +126,14 @@ %- ot :~ [%block ni] [%fee (mu ni)] - [%blockhash (cu to-hexb so)] - [%blockfilter (cu to-hexb so)] + [%blockhash (cu to-hexb:bcu so)] + [%blockfilter (cu to-hexb:bcu so)] == -- -- :: ++ rpc-action-to-http - |= [endpoint=@t ract=action:rpc-types] + |= [endpoint=@t ract=action:rpc-types:bp] |^ ^- request:http ?- -.ract %get-address-info diff --git a/tests/lib/bitcoin.hoon b/tests/lib/bitcoin-utils.hoon similarity index 99% rename from tests/lib/bitcoin.hoon rename to tests/lib/bitcoin-utils.hoon index bcbefe7ef4..084905dc82 100644 --- a/tests/lib/bitcoin.hoon +++ b/tests/lib/bitcoin-utils.hoon @@ -1,4 +1,4 @@ -/+ *test, *bitcoin, bip32 +/+ *test, *bitcoin-utils, bip32 =, secp:crypto =+ ecc=secp256k1 |% diff --git a/tests/lib/btc-wallet.hoon b/tests/lib/btc-wallet.hoon index 31013de677..e9d087171f 100644 --- a/tests/lib/btc-wallet.hoon +++ b/tests/lib/btc-wallet.hoon @@ -1,23 +1,24 @@ -/+ *test, *btc-wallet, btc +/- bc=bitcoin +/+ *test, *btc-wallet |% +$ wallet-vector - $: =xpub:btc + $: =xpub:bc =chyg - =idx:btc - =address:btc + =idx:bc + =address:bc == +$ vector - $: =xpub:btc + $: =xpub:bc eny=@uv block=@ud feyb=sats ins=(list insel) outs=(list txo) - expect=[selected=(unit (list insel)) chng=(unit sats:btc)] + expect=[selected=(unit (list insel)) chng=(unit sats:bc)] == ++ mk-utxo - |= value=sats:btc - ^- utxo:btc + |= value=sats:bc + ^- utxo:bc :* pos=0 [wid=32 dat=0xc493.f6f1.4668.5f76.b44f.0c77.ca88.120c.b8bc.89f5.34fe.69b6.8288.27b9.74e6.8849] height=3 @@ -82,7 +83,7 @@ [[%bech32 'bc1qlwd7mw33uea5m8r2lsnsrkc7gp2qynrxsfxpfm'] 200.000 ~] == :* *(unit (list insel)) - *(unit sats:btc) + *(unit sats:bc) == == :* 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs' @@ -94,7 +95,7 @@ [[%bech32 'bc1qlwd7mw33uea5m8r2lsnsrkc7gp2qynrxsfxpfm'] 200.000 ~] == :* `~[[(mk-utxo 500.000) %0 2]] - *(unit sats:btc) + *(unit sats:bc) == == == @@ -112,7 +113,7 @@ [[%bech32 'bc1qlwd7mw33uea5m8r2lsnsrkc7gp2qynrxsfxpfm'] 204 ~] == :* `~[[(mk-utxo 500.000) %0 2]] - *(unit sats:btc) + *(unit sats:bc) == == == @@ -136,7 +137,7 @@ |= v=wallet-vector =/ w=walt (from-xpub xpub.v fprint ~ ~ ~) =/ =address (~(mk-address wad w chyg.v) idx.v) - =. w (~(update-address wad w chyg.v) address [%.n %0 0 *(set utxo:btc)]) + =. w (~(update-address wad w chyg.v) address [%.n %0 0 *(set utxo:bc)]) =/ [w2=walt c=chyg i=idx] (need (address-coords address ~[w])) ;: weld %+ expect-eq @@ -158,7 +159,7 @@ |= v=vector =/ w=walt (from-xpub xpub.v fprint ~ ~ ~) =. wach.w - %- ~(gas by *(map address:btc addi)) + %- ~(gas by *(map address:bc addi)) %+ turn ins.v |= i=insel :- (~(mk-address wad w chyg.i) idx.i) @@ -177,7 +178,7 @@ ++ insels-to-wach |= [w=walt is=(list insel)] ^- wach - %- ~(gas by *(map address:btc addi)) + %- ~(gas by *(map address:bc addi)) %+ turn is |= i=insel :- (~(mk-address wad w chyg.i) idx.i)