2020-10-30 14:45:38 +03:00
|
|
|
# btc-wallet-* Scratch Code
|
|
|
|
|
|
|
|
## xpub
|
2020-11-17 18:34:48 +03:00
|
|
|
xpub1 is from mnemonic from PRIVATE.scratch
|
2020-10-30 14:45:38 +03:00
|
|
|
```
|
2020-10-31 12:41:00 +03:00
|
|
|
=xpub1 'zpub6r8dKyWJ31XF6n69KKeEwLjVC5ruqAbiJ4QCqLsrV36Mvx9WEjUaiPNPGFLHNCCqgCdy6iZC8ZgHsm6a1AUTVBMVbKGemNcWFcwBGSjJKbD'
|
|
|
|
=xpub2 'xpub6D7yaZieZEeG617UcKXDhbsDeso6bmxSAiGWkvkASoiwcjaRtrH5HeNRnDT25s7zmxYzj6MtFe32dVqcf9YcBKKgn9THHjwn2uSjkvobK4e'
|
2020-10-30 14:45:38 +03:00
|
|
|
=bl -build-file %/lib/btc-wallet-store/hoon
|
|
|
|
```
|
|
|
|
|
|
|
|
### get address at indices
|
|
|
|
```
|
2020-11-11 15:30:22 +03:00
|
|
|
=walt1 (from-xpub:bl xpub1 ~ ~)
|
|
|
|
(~(mk-address wad:bl walt1 %0) 0)
|
|
|
|
:: gives [%bech32 'bc1q0adfj7ur750hjwufzzlfj5ytqzsnd7fz9fjuzc']
|
2020-10-30 14:45:38 +03:00
|
|
|
```
|
|
|
|
|
2020-10-31 12:41:00 +03:00
|
|
|
### update address data
|
|
|
|
```
|
2020-11-11 15:30:22 +03:00
|
|
|
=walt1 (from-xpub:bl xpub1 ~ ~)
|
|
|
|
(~(mk-address wad:bl walt1 %0) 0)
|
2020-10-31 14:25:32 +03:00
|
|
|
:: gives bc1q0adfj7ur750hjwufzzlfj5ytqzsnd7fz9fjuzc
|
2020-11-11 15:30:22 +03:00
|
|
|
=walt1 (~(watch-address wad:bl walt1 %0) [%bech32 'bc1q0adfj7ur750hjwufzzlfj5ytqzsnd7fz9fjuzc'] [%0 0 ~])
|
|
|
|
nixt.walt1
|
2020-10-31 14:25:32 +03:00
|
|
|
:: gives [p=1 q=0] (nixt updated since it was 0)
|
2020-11-11 15:30:22 +03:00
|
|
|
=walt1 (~(watch-address wad:bl walt1 %0) [%bech32 'bc1qa5jcdww8u8493zttjjf6q5wu89e6knpvmsh7x4'] [%0 2 ~])
|
|
|
|
nixt.walt1=walt1 (~(watch-address wad:bl walt1 %0) [%bech32 'bc1qa5jcdww8u8493zttjjf6q5wu89e6knpvmsh7x4'] [%0 2 ~])
|
|
|
|
nixt.walt1
|
2020-10-31 14:25:32 +03:00
|
|
|
:: gives [p=1 q=0] (no update)
|
2020-11-11 15:30:22 +03:00
|
|
|
=walt1 (~(watch-address wad:bl walt1 %0) [%bech32 'bc1qvqrdh8suyv63ntaa0d7hmcamavv8283sngh6e5'] [%0 1 ~])
|
|
|
|
nixt.walt1
|
2020-10-31 14:25:32 +03:00
|
|
|
:: gives [p=3 q=0] (skips index 2, since already a used address there)
|
2020-11-02 10:21:48 +03:00
|
|
|
|
2020-11-11 15:30:22 +03:00
|
|
|
=walt1 (~(watch-address wad:bl walt1 %0) [%bech32 'bc1qvqrdh8suyv63ntaa0d7hmcamavv8283sngh6e5'] [%0 4 ~])
|
|
|
|
:: gives error, because address is inserted at index that doesn't match it
|
2020-11-02 10:21:48 +03:00
|
|
|
```
|
|
|
|
|
|
|
|
### generate new address (for receiving payment)
|
|
|
|
```
|
2020-11-11 16:54:47 +03:00
|
|
|
=walt1 (from-xpub:bl xpub1 ~ ~)
|
|
|
|
=res ~(gen-address wad:bl walt1 %0)
|
2020-11-02 10:21:48 +03:00
|
|
|
p.res
|
2020-11-11 16:54:47 +03:00
|
|
|
nixt.q.res
|
2020-11-02 10:21:48 +03:00
|
|
|
:: gives
|
|
|
|
:: [%bech32 'bc1q0adfj7ur750hjwufzzlfj5ytqzsnd7fz9fjuzc']
|
|
|
|
:: [p=1 q=0]
|
2020-10-31 12:41:00 +03:00
|
|
|
```
|
|
|
|
|
2020-11-02 20:51:19 +03:00
|
|
|
## Scanning
|
2020-11-03 14:50:10 +03:00
|
|
|
Mnemonic
|
|
|
|
```
|
|
|
|
abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
|
|
|
|
```
|
2020-11-02 20:51:19 +03:00
|
|
|
|
|
|
|
### manual scanning of empty wallet
|
2020-11-11 16:54:47 +03:00
|
|
|
Uses `btc-wallet-hook`, with max-gap=3
|
2020-11-02 20:51:19 +03:00
|
|
|
```
|
2020-11-13 15:47:11 +03:00
|
|
|
:btc-provider|command [%set-credentials api-url='http://localhost:50002']
|
2020-11-04 18:24:00 +03:00
|
|
|
:btc-wallet-hook|action [%set-provider ~dopzod]
|
2020-11-02 20:51:19 +03:00
|
|
|
=scan-xpub 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs'
|
2020-11-13 15:47:11 +03:00
|
|
|
:btc-wallet-store|action [%add-wallet scan-xpub ~ [~ 3] [~ 6]]
|
2020-11-02 20:51:19 +03:00
|
|
|
:btc-wallet-store +dbug
|
|
|
|
:: shows scans with the xpub and {0 1 2} todos
|
2020-11-03 14:50:10 +03:00
|
|
|
|
|
|
|
:: %0 account has no used
|
2020-11-11 12:41:13 +03:00
|
|
|
=btc -build-file %/lib/btc/hoon
|
2020-11-03 14:50:10 +03:00
|
|
|
:btc-wallet-store|action [%watch-address scan-xpub %0 1 *(set utxo:btc) used=%.n]
|
|
|
|
:btc-wallet-store|action [%watch-address scan-xpub %0 2 *(set utxo:btc) used=%.n]
|
|
|
|
:btc-wallet-store|action [%watch-address scan-xpub %0 0 *(set utxo:btc) used=%.n]
|
|
|
|
:: dbug should give empty for scans: [xpub %0]
|
|
|
|
:btc-wallet-store|action [%watch-address scan-xpub %1 2 *(set utxo:btc) used=%.n]
|
|
|
|
:btc-wallet-store|action [%watch-address scan-xpub %1 0 *(set utxo:btc) used=%.n]
|
|
|
|
:btc-wallet-store|action [%watch-address scan-xpub %1 1 *(set utxo:btc) used=%.y]
|
|
|
|
:: dbug should show re-filled scans: [xpub %1]
|
2020-11-02 20:51:19 +03:00
|
|
|
```
|
|
|
|
|
2020-11-18 14:39:57 +03:00
|
|
|
### utxo selection
|
2020-11-19 14:44:12 +03:00
|
|
|
Creates dummy inputs and outputs. Builds a TX with them.
|
2020-11-18 14:39:57 +03:00
|
|
|
```
|
|
|
|
=btc -build-file %/lib/btc/hoon
|
|
|
|
=bwsl -build-file %/lib/btc-wallet-store/hoon
|
|
|
|
=u (utxo:btc [pos=0 (hash256:btc [wid=32 dat=0xc493.f6f1.4668.5f76.b44f.0c77.ca88.120c.b8bc.89f5.34fe.69b6.8288.27b9.74e6.8849]) height=3 value=0])
|
|
|
|
=val0 200.000
|
|
|
|
=val1 500.000
|
|
|
|
=val2 30
|
|
|
|
=val3 235.000
|
|
|
|
|
|
|
|
=eny1 0v3uc.iuebi.5qilc.l8d87.c1k6n.7iksq.nkobs.8s5he.raq40.9ff0b.5tj3u.kjtg7.aq59e.hatv7.oioam.mlsr4.pqqcd.cnbjn.pnpi2.1m5rt.k4scg
|
|
|
|
=eny2 0v1gt.mc4ca.lfs0m.q1dal.lqobu.mmlbd.2umnp.lj9dr.4pf4s.pvclr.dps96.4a6i8.rt6n9.krp0r.11kqu.ckqe4.1tmat.gr754.463aj.a4b41.jj7qg
|
|
|
|
=inputs ~[[u(value val0) %0 0] [u(value val1) %0 2] [u(value val2) %0 1] [u(value val3) %1 2]]
|
2020-11-19 14:44:12 +03:00
|
|
|
=outputs ~[[[%bech32 'bc1q59u5epktervh6fxqay2dlph0wxu9hjnx6v8n66'] value=200.100] [[%bech32 'bc1qlwd7mw33uea5m8r2lsnsrkc7gp2qynrxsfxpfm'] value=200.000]]
|
|
|
|
=w *walt:bwsl
|
|
|
|
=w w(bipt %bip84)
|
2020-11-19 12:11:02 +03:00
|
|
|
|
2020-11-22 15:57:25 +03:00
|
|
|
(~(single-random-draw sut:bwsl [w eny1 ~ 100 outputs]) inputs)
|
|
|
|
(~(single-random-draw sut:bwsl [w eny2 ~ 100 outputs]) inputs)
|
2020-11-18 14:39:57 +03:00
|
|
|
```
|
|
|
|
Above tests w 2 outputs, total fees with 2 inputs of 27.500. Gives:
|
|
|
|
1. 500.000 input
|
|
|
|
2. Inputs 0 and 3
|
|
|
|
|
|
|
|
|
2020-11-11 12:41:13 +03:00
|
|
|
## scrys
|
|
|
|
```
|
|
|
|
.^((list @t) %gx /=btc-wallet-store=/scanned/noun)
|
2020-11-17 18:34:48 +03:00
|
|
|
|
|
|
|
.^(@ud %gx /=btc-wallet-store=/balance/[xpub]/noun)
|
2020-11-11 12:41:13 +03:00
|
|
|
```
|
2020-11-02 10:53:04 +03:00
|
|
|
|
2020-11-11 12:41:13 +03:00
|
|
|
## Algos
|
2020-11-02 10:53:04 +03:00
|
|
|
|
2020-11-02 13:37:55 +03:00
|
|
|
### Monitor addresses
|
|
|
|
- nixt also stores next 50 addresses for each account.
|
|
|
|
- every update-address call also checks those
|
2020-10-30 14:45:38 +03:00
|
|
|
|
2020-11-02 14:59:48 +03:00
|
|
|
### make a payment
|
|
|
|
* make payment
|
|
|
|
- get address
|
|
|
|
- on-agent gets return value, construct tx
|
|
|
|
- store tx (view or other command can get it)
|
|
|
|
|
2020-10-30 14:45:38 +03:00
|
|
|
::
|
|
|
|
++ send-address-update
|
|
|
|
|= [xpub=tape =walt a=address:btc us=(set utxo)]
|
|
|
|
^- (quip card _state)
|
|
|
|
:_ state(walts (~(put by walts.state) xpub walt))
|
|
|
|
~[[%give %fact ~[/wallets] %btc-wallet-store-update !>([%address a us])]]
|
|
|
|
::
|