2020-10-28 16:20:24 +03:00
|
|
|
:: wallets are compatible with BIPs 44, 49, and 84
|
|
|
|
:: m / purpose' / coin_type' / account' / change / address_index
|
2020-10-29 15:10:54 +03:00
|
|
|
:: change can be 0 or 1
|
2020-10-28 16:20:24 +03:00
|
|
|
::
|
2020-10-31 12:41:00 +03:00
|
|
|
:: TODO: explain state tracking (used maps, next unused idx)
|
|
|
|
::
|
2020-10-29 15:10:54 +03:00
|
|
|
/- *btc
|
|
|
|
/+ bip32
|
2020-10-24 19:13:36 +03:00
|
|
|
|%
|
2020-10-30 14:45:38 +03:00
|
|
|
++ max-index (dec (pow 2 32))
|
2020-10-31 14:25:32 +03:00
|
|
|
:: chyg: whether account is (non-)change. 0 or 1
|
2020-11-02 14:59:48 +03:00
|
|
|
:: idx: an address_index
|
2020-10-31 14:25:32 +03:00
|
|
|
:: nixt: next indices to generate addresses from (non-change/change)
|
2020-10-29 15:10:54 +03:00
|
|
|
:: addi: address with metadata inside a change path
|
2020-10-31 14:25:32 +03:00
|
|
|
:: wach: map for watched addresses.
|
|
|
|
:: Membership implies the address is known by outside parties or had prior activity
|
|
|
|
:: scon: indices to initially scan to in (non-)change accounts
|
2020-10-30 14:45:38 +03:00
|
|
|
:: defaults to 2^32-1 (i.e. all the addresses, ~4B)
|
2020-10-29 15:10:54 +03:00
|
|
|
:: wilt: stores xpub; copulates with thousands of indices to form addresses
|
2020-10-28 16:20:24 +03:00
|
|
|
:: walt: wallet metadata
|
|
|
|
::
|
2020-10-29 21:07:43 +03:00
|
|
|
+$ chyg $?(%0 %1)
|
2020-10-31 14:25:32 +03:00
|
|
|
+$ idx @
|
|
|
|
+$ nixt (pair idx idx)
|
|
|
|
+$ addi [=chyg =idx utxos=(set utxo)]
|
2020-10-29 15:10:54 +03:00
|
|
|
+$ wach (map address addi)
|
2020-10-31 14:25:32 +03:00
|
|
|
+$ scon $~([max-index max-index] (pair idx idx))
|
2020-10-28 16:20:24 +03:00
|
|
|
+$ wilt _bip32
|
2020-10-31 20:26:58 +03:00
|
|
|
:: todo: Set of indices; empty it out until none are left--means scanning of that batch is done
|
2020-11-02 13:37:55 +03:00
|
|
|
:: start: index this batch started scanning from
|
2020-10-31 15:38:53 +03:00
|
|
|
::
|
2020-11-02 16:12:44 +03:00
|
|
|
+$ batch [todo=(set idx) start=idx final=idx]
|
|
|
|
+$ scans (map [xpub chyg] batch)
|
2020-11-02 14:59:48 +03:00
|
|
|
::
|
|
|
|
:: %add-wallet: add wallet to state and initiate a scan
|
|
|
|
:: %scan: start a scan of the next address batch in a wallet
|
|
|
|
:: if the scan is complete, update the wallet and remove from scans
|
|
|
|
:: %watch-address: watch an address if used, remove from scans batch if not
|
|
|
|
:: %update-address: update info of an address if we're watching it
|
2020-10-31 15:38:53 +03:00
|
|
|
::
|
2020-10-31 12:41:00 +03:00
|
|
|
+$ action
|
2020-10-31 14:25:32 +03:00
|
|
|
$% [%add-wallet =xpub scan-to=(unit scon) max-gap=(unit @)]
|
2020-11-02 16:12:44 +03:00
|
|
|
[%run-scan =xpub]
|
2020-11-02 14:59:48 +03:00
|
|
|
[%watch-address =xpub =chyg =idx utxos=(set utxo) used=?]
|
2020-10-30 14:45:38 +03:00
|
|
|
[%update-address a=address utxos=(set utxo)]
|
2020-10-29 21:07:43 +03:00
|
|
|
==
|
2020-10-31 20:26:58 +03:00
|
|
|
::
|
2020-10-29 21:07:43 +03:00
|
|
|
+$ update
|
2020-10-30 14:45:38 +03:00
|
|
|
$% [%address a=address utxos=(set utxo)]
|
2020-10-24 19:13:36 +03:00
|
|
|
==
|
|
|
|
--
|