mirror of
https://github.com/urbit/shrub.git
synced 2024-12-24 20:47:27 +03:00
99 lines
2.8 KiB
Markdown
99 lines
2.8 KiB
Markdown
# btc-wallet-* Scratch Code
|
|
|
|
## xpub
|
|
```
|
|
=xpub1 'zpub6r8dKyWJ31XF6n69KKeEwLjVC5ruqAbiJ4QCqLsrV36Mvx9WEjUaiPNPGFLHNCCqgCdy6iZC8ZgHsm6a1AUTVBMVbKGemNcWFcwBGSjJKbD'
|
|
=xpub2 'xpub6D7yaZieZEeG617UcKXDhbsDeso6bmxSAiGWkvkASoiwcjaRtrH5HeNRnDT25s7zmxYzj6MtFe32dVqcf9YcBKKgn9THHjwn2uSjkvobK4e'
|
|
=bl -build-file %/lib/btc-wallet-store/hoon
|
|
```
|
|
|
|
### add
|
|
```
|
|
:btc-wallet-store|action [%add-wallet xpub ~ ~]
|
|
```
|
|
|
|
### get address at indices
|
|
```
|
|
=walt1 (from-xpub:walt:bl xpub1 ~ ~)
|
|
(get-address:walt1 %0 0)
|
|
```
|
|
|
|
### update address data
|
|
```
|
|
=walt1 (from-xpub:walt:bl xpub1 ~ ~)
|
|
(mk-address:walt1 %0 0)
|
|
:: gives bc1q0adfj7ur750hjwufzzlfj5ytqzsnd7fz9fjuzc
|
|
=walt1 (insert-address:walt1 [%bech32 'bc1q0adfj7ur750hjwufzzlfj5ytqzsnd7fz9fjuzc'] [%0 0 ~])
|
|
nixt:walt1
|
|
:: gives [p=1 q=0] (nixt updated since it was 0)
|
|
=walt1 (insert-address:walt1 [%bech32 'bc1qa5jcdww8u8493zttjjf6q5wu89e6knpvmsh7x4'] [%0 2 ~])
|
|
nixt:walt1
|
|
:: gives [p=1 q=0] (no update)
|
|
=walt1 (insert-address:walt1 [%bech32 'bc1qvqrdh8suyv63ntaa0d7hmcamavv8283sngh6e5'] [%0 1 ~])
|
|
nixt:walt1
|
|
:: gives [p=3 q=0] (skips index 2, since already a used address there)
|
|
```
|
|
|
|
## Algos
|
|
Insert an address
|
|
1. send wallet an address that we KNOW is in the wallet
|
|
2. include the address's index
|
|
|
|
Scan addresses. (map xpub (pair list list))
|
|
outgoing wire is /scan/xpub/change/index
|
|
- keep list of whether we've heard back on an address `(list (unit used))`
|
|
- every time we get a response
|
|
- insert the address into the wallet if it's used
|
|
- check whether (lent (murn l)) == max-gap
|
|
- if it does, run lien--if any used, continue
|
|
- if none used, the wallet is scanned.
|
|
|
|
|
|
## scratch code, refactor
|
|
++ update-utxos
|
|
|= [a=address:btc us=(set utxo)]
|
|
^- (quip card _state)
|
|
=/ xpubs=(list tape)
|
|
%~ tap in
|
|
~(key by walts.state)
|
|
|- ?~ xpubs `state
|
|
=/ w=walt (~(got by walts.state) i.xpubs)
|
|
?: (~(has by wach.w) a)
|
|
%: send-address-update
|
|
i.xpubs
|
|
(update-wallet w a us)
|
|
a
|
|
us
|
|
==
|
|
$(xpubs t.xpubs)
|
|
::
|
|
++ update-wallet
|
|
|= [w=walt a=address:btc us=(set utxo)]
|
|
^- walt
|
|
=/ curr-addi=addi
|
|
(~(got by wach.w) a)
|
|
w(wach (~(put by wach.w) a curr-addi(used %.y, utxos us)))
|
|
::
|
|
++ 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])]]
|
|
::
|
|
++ add-wallet
|
|
|= [xpub=tape scan-to=(unit scon) max-gap=(unit @)]
|
|
^- (quip card _state)
|
|
?: (~(has by walts.state) xpub)
|
|
~& >>> "xpub already imported"
|
|
`state
|
|
=/ wallet=walt
|
|
:* (from-extended:bip32 xpub)
|
|
(xpub-type:btc xpub)
|
|
*wach
|
|
[0 0]
|
|
%.n
|
|
(fall scan-to *scon)
|
|
(fall max-gap max-gap.state)
|
|
==
|
|
`state(walts (~(put by walts.state) xpub wallet))
|