[prev in list] [next in list] [prev in thread] [next in thread]
List: bitcoin-dev
Subject: [bitcoin-dev] Wallet: A User Friendly Data Structure
From: praxeology_guy () protonmail ! com (praxeology_guy)
Date: 2017-04-24 4:29:19
Message-ID: TOc2JwQfHfQVfmhBtjeXiqhZ4T-PYw_7HNnUYAXl_MVmiLWhP1i3syNpTptvqA-ZAnyppfPAdqWFwIzbmhtyJMCpaQQHVBrZ_myYKHwnpGE= () protonmail ! com
[Download RAW message or body]
Below is a proposal for a wallet data structure that can enable a wallet to be user \
friendly.
This is a proposed partial solution to "Pruned wallet support #9409": \
https://github.com/bitcoin/bitcoin/issues/9409 It is envisioned to work with \
"Complete hybrid full block SPV mode #9483": \
https://github.com/bitcoin/bitcoin/pull/9483
The data structure implies that the wallet would/could run in a different process \
than a Bitcoin node. Furthermore, the wallet would have a set of whitelisted/trusted \
nodes, which may only be the user's nodes.
Cheers,
Praxeology Guy
The primary purpose of this data structure is to enable the creation of a responsive \
and informative open-and-go wallet. Some of my design goals include:
- Instant on. Can be put in cold storage, and years later be immediately operational.
- Scans optional/happen in background. Supports partial scans of the block height \
range.
- Functional even with only utxo set data
- Fast loading of external private keys and other watched identifiers.
- Supports wallet merging
- Supports connection with different kinds of nodes/providers of transaction evidence
- Communicates the reliability of the evidence with the user
- Supports transaction deprecation and double spending
- Can work in a different process than a Bitcoin relay node.
- Works immediately/quickly even with a node that has only prefetched headers and \
only begun validating blocks.
- Potentially allows a wallet to display unconfirmed transactions to the user even if \
it only has an SPV evidence source.
=== Wallet ===
- List: Spend Term
- List: Wallet Coin
- List: Spend Attempt
- List: Transaction Evidence
- List: Coin Scan
- List: Evidence Source
// The wallet would also need other data that existing wallets have such as \
information about deterministic keys and pre-allocated keys etc. For the wallet to \
work with SPV security, it would also need block headers.
=== Spend Term ===
- GUID
- Name (Human readable)
- Type: [private key/public key/address/out script]
- Term Value
- Creation date
- List: Wallet Coin
// A spend term is anything that can be used to identify a coin that should be \
tracked by this wallet. GUID should probably be the address or a hash of the out \
script.
=== Evidence Source ===
- GUID
- Operator Name
- Device Name
- Software Name
- Software Version
- Public Key
- Operator Trust: Self, Reliable Friend, Stranger
- Device Security: Air Gap, Single Purpose Networked, Multipurpose Networked, \
Dedicated Remote Hosted, VPS Remote Hosted
// An Evidence Source is a {operator, device, software} that fully validates blocks. \
It provides evidence of coin confirmations and spends. Maybe GUID should be a hash of \
the public key.
=== Wallet Coin ===
Required:
- Spend Term GUID
- TXID
- vout.ix
- amount
- output script
Optional:
- Wallet first discovery date
- full TX data
- List: Transaction Evidence
- List: Spend Attempt
- TXID Spent
// A wallet coin is a bitcoin txo with some extra data relevant to the wallet. A \
wallet coin's ID is {TXID, vout.ix}.
=== Spend Attempt ===
- Wallet Coins List: {TXID, vout.ix}
- TXID
- Creation date
- Relay date(s)
- Is Deprecated?
- Deprecated date
- Replace By Fee (RBF) enabled?
- List: Transaction Evidence
// deprecating a spend attempt will clear the "TXID Spent" in Wallet Coin, and set \
"Is Deprecated?" and "Deprecated date".
=== Evidence ===
Required:
- tip hash
- tip height
- date
- Evidence Source GUID
- Evidence Source Signature
=== Transaction Evidence : Evidence ===
Required:
- TXID
Optional:
- discover date
// Evidence of the creation or spend of a coin. There are different kinds of evidence \
from different sources. The kind and source impact the user's confidence in the \
validity and finality of a transaction.
=== Confirmed UTXO Set Presence : Transaction Evidence ===
Required:
- Is in UTXO set?
Optional:
- block height
- block hash
- block timestamp
- Future: utxo set snaphot merkle proof
- confirm date
// Evidence (from a trustworthy source needed) that a coin is or is not in the \
confirmed utxo set. With the future possibility of utxo set snapshot merkle proof, \
the trustworthiness of the source is not as important. This evidence type is only \
used for Wallet Coins. It is not used for Spend Attempts.
=== Confirmation : Transaction Evidence ===
Required:
- block height
- block hash
- block timestamp
- tx merkle proof
- wtx merkle proof
- is in greatest PoW chain?
Optional:
- confirm date
- 51% attack cost to double spend
- Future: Are/which reliable miners still creating blocks in the greatest PoW chain \
(network split risk)
// Evidence that a transaction was confirmed.
=== Discovery (Unconfirmed TX) : Transaction Evidence ===
Optional:
- Confirmable Evidence: tree of source input transactions that lead back to utxo \
outputs. Unconfirmed parents: discover date, size, fee.
// Evidence merely that a transaction was discovered. There is no guarantee that the \
transaction will be confirmed. Preferably the Source that is providing the wallet \
with the discovery evidence will also provide evidence that the transaction could be \
confirmed... especially if the Source is not trusted. The wallet could ask other \
Sources whether the confirmed inputs are present in the Confirmed UTXO Set.
=== Spend Term Scan : Evidence ===
- Term List: Spend Term GUID
- Target: [blocks, confirmed utxo set]
- Range Start
- Range End
// The wallet would request a scan from the Source. It would provide the spend terms, \
target, and range. The Source would respond with the range actually scanned, in \
addition to any Transaction Evidence discovered.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20170424/2cfdf37c/attachment-0001.html>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic