-
Notifications
You must be signed in to change notification settings - Fork 5
Synced ltcwallet with latest btcwallet changes #2
base: master
Are you sure you want to change the base?
Synced ltcwallet with latest btcwallet changes #2
Conversation
RostyslavAntonyshyn
commented
Dec 17, 2018
- Synced ltcwallet with latest btcwallet changes
- Fixed tests;
- changed deps to ltcsuite;
- changed deps for neutrino;
TODO: support for wallet upgrades and key imports
This commit adds support for using StartTime in a rescan in neutrino. The NeutrinoClient instance can have a birthday set such that all underlying neutrino rescans are called with that start time.
This commit allows neutrino to simulate the GetBlockHeader RPC, and allows chain client code to use the call with both btcd/RPC back end and the neutrino back end.
During the time of initial block hash catch-up, it is possible to request an address be generated. This commit updates the active addresses by calling `w.activeData` after the catch-up is complete.
This commit makes sure the wallet db is closed if the call to open the wallet fails, as subsequent calls to OpenExistingWallet would fail to open the already open database.
… sending In this commit, we do away with the internal relayFee all together. Instead, we’ll pass in the fee rate when we’re crafting any transactions. This allows the caller to manually dictate their desired fee rate.
This commit adds a new method EstimateVirtualSize that calculates the worst case estimate vsize for a transaction with a given set of inputs and outputs. This method is aware of P2PKH, P2WPKH and P2SH-P2WPKH inputs, and caulculates the transaction vsize with the witness data included.
This commit adds a test for EstimateVirtualSize. Currently three test transactions are added: - 1 P2WPKH inputs + 2 P2PKH outputs - 1 P2SH-P2WPKH inputs + 2 P2PKH outputs - 1 P2WPKH inputs + 1 P2PKH output + 1 P2WPKH change output
This commit makes use of the recently added EstimateVirtualSize method to estimated the size of a transaction when calculating fees. This makes fee estimation more accurate when we are spending segwit outputs, as before we wouldn't account for the witness descount, resulting in overshooting fee estimates.
In this commit, we address an issue with the wallet where it would always request a rescan from the birthday block. This is very crucial for older wallets, as it'll potentially go through thousands of blocks. To address this, we'll now only request a rescan from our birthday if we're recovering our wallet from our seed, the birthday block was rolled back, or if we're performing our initial sync. Otherwise, we'll request a rescan from tip.
In this commit, we add a new key/value pair to the waddrmgr's sync bucket to store the verification status of the birthday block. This verification status determines whether the wallet has verified the correctness of its birthday block through its sanity check on startup.
…ock has been verified In this commit, we prevent any further sanity check attempts by the wallet if its correctness has previously been verified. We do this to ensure we don't unnecessarily attempt to find a new candidate.
…thin ImportPrivateKey In this commit, we set the verified bit to false upon setting the new birthday block to ensure its correctness as it was provided by the caller.
wallet/wallet: prevent always rescanning from birthday block
In this commit, we remove the wallet dependency from the birthdaySanityCheck function. Every interaction with the wallet is now backed by two interfaces, birthdayStore and chainConn. These interfaces will allow us to increase the test coverage of the birthdaySanityCheck as now we'll only need to mock out only the necessary functionality.
In this commit, we address an issue that would cause users to be stuck in an infinite loop by fetching the same candidate birthday block due to its height not being updated if the sanity check was attempting to fix an estimate in the future. We fix this by setting the new candidate height so that new candidate blocks can be fetched and tested.
wallet/chainntnfs: set height for new birthday block candidate
build: Update to go modules
build: use latest btcd and neutrino
build: update to latest btcd and neutrino versions
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great work! Just some minor changes required 👍
rpc/documentation/clientusage.md
Outdated
) | ||
|
||
var certificateFile = filepath.Join(btcutil.AppDataDir("btcwallet", false), "rpc.cert") | ||
var certificateFile = filepath.Join(ltcutil.AppDataDir("btcwallet", false), "rpc.cert") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ltcwallet
chain/bitcoind_conn.go
Outdated
defer c.wg.Done() | ||
defer conn.Close() | ||
|
||
log.Info("Started listening for bitcoind block notifications via ZMQ "+ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
litecoind
chain/bitcoind_conn.go
Outdated
defer c.wg.Done() | ||
defer conn.Close() | ||
|
||
log.Info("Started listening for bitcoind transaction notifications "+ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
litecoind
0x21, 0xa6, 0xc3, 0x01, 0x1d, 0xd3, 0x30, 0xd9, | ||
0xdf, 0x07, 0xb6, 0x36, 0x16, 0xc2, 0xcc, 0x1f, | ||
0x1c, 0xd0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, | ||
}), // 000000000002d01c1fccc21636b607dfd930d31d01c3a62104612a1719011250 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Woud be nice to use a LTC specific block at height 100K
chain/rpc.go
Outdated
if err != nil { | ||
return nil, err | ||
} | ||
client.Client = rpcClient | ||
return client, nil | ||
} | ||
|
||
// BackEnd returns the name of the driver. | ||
func (c *RPCClient) BackEnd() string { | ||
return "btcd" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ltcd
internal/rpchelp/helpdescs_en_US.go
Outdated
"listtransactionsresult-account": "DEPRECATED -- Unset", | ||
"listtransactionsresult-address": "Payment address for a transaction output", | ||
"listtransactionsresult-category": `The kind of transaction: "send" for sent transactions, "immature" for immature coinbase outputs, "generate" for mature coinbase outputs, or "recv" for all other received outputs. Note: A single output may be included multiple times under different categories`, | ||
"listtransactionsresult-amount": "The value of the transaction output valued in bitcoin", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
litecoin
netparams/params.go
Outdated
@@ -22,11 +22,11 @@ var MainNetParams = Params{ | |||
RPCServerPort: "8332", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
9332
netparams/params.go
Outdated
// btcd on the test network (version 4) (wire.TestNet4). | ||
var TestNet4Params = Params{ | ||
Params: &chaincfg.TestNet4Params, | ||
RPCClientPort: "19334", | ||
RPCServerPort: "18332", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
19332
@@ -26,8 +26,8 @@ func helpDescsEnUS() map[string]string { | |||
"listlockunspent": "listlockunspent\n\nReturns a JSON array of outpoints marked as locked (with lockunspent) for this wallet session.\n\nArguments:\nNone\n\nResult:\n[{\n \"txid\": \"value\", (string) The transaction hash of the referenced output\n \"vout\": n, (numeric) The output index of the referenced output\n},...]\n", | |||
"listreceivedbyaccount": "listreceivedbyaccount (minconf=1 includeempty=false includewatchonly=false)\n\nDEPRECATED -- Returns a JSON array of objects listing all accounts and the total amount received by each account.\n\nArguments:\n1. minconf (numeric, optional, default=1) Minimum number of block confirmations required before a transaction is considered\n2. includeempty (boolean, optional, default=false) Unused\n3. includewatchonly (boolean, optional, default=false) Unused\n\nResult:\n[{\n \"account\": \"value\", (string) The name of the account\n \"amount\": n.nnn, (numeric) Total amount received by payment addresses of the account valued in bitcoin\n \"confirmations\": n, (numeric) Number of block confirmations of the most recent transaction relevant to the account\n},...]\n", | |||
"listreceivedbyaddress": "listreceivedbyaddress (minconf=1 includeempty=false includewatchonly=false)\n\nReturns a JSON array of objects listing wallet payment addresses and their total received amounts.\n\nArguments:\n1. minconf (numeric, optional, default=1) Minimum number of block confirmations required before a transaction is considered\n2. includeempty (boolean, optional, default=false) Unused\n3. includewatchonly (boolean, optional, default=false) Unused\n\nResult:\n[{\n \"account\": \"value\", (string) DEPRECATED -- Unset\n \"address\": \"value\", (string) The payment address\n \"amount\": n.nnn, (numeric) Total amount received by the payment address valued in bitcoin\n \"confirmations\": n, (numeric) Number of block confirmations of the most recent transaction relevant to the address\n \"txids\": [\"value\",...], (array of string) Transaction hashes of all transactions involving this address\n \"involvesWatchonly\": true|false, (boolean) Unset\n},...]\n", | |||
"listsinceblock": "listsinceblock (\"blockhash\" targetconfirmations=1 includewatchonly=false)\n\nReturns a JSON array of objects listing details of all wallet transactions after some block.\n\nArguments:\n1. blockhash (string, optional) Hash of the parent block of the first block to consider transactions from, or unset to list all transactions\n2. targetconfirmations (numeric, optional, default=1) Minimum number of block confirmations of the last block in the result object. Must be 1 or greater. Note: The transactions array in the result object is not affected by this parameter\n3. includewatchonly (boolean, optional, default=false) Unused\n\nResult:\n{\n \"transactions\": [{ (array of object) JSON array of objects containing verbose details of the each transaction\n \"account\": \"value\", (string) DEPRECATED -- Unset\n \"address\": \"value\", (string) Payment address for a transaction output\n \"amount\": n.nnn, (numeric) The value of the transaction output valued in bitcoin\n \"blockhash\": \"value\", (string) The hash of the block this transaction is mined in, or the empty string if unmined\n \"blockindex\": n, (numeric) Unset\n \"blocktime\": n, (numeric) The Unix time of the block header this transaction is mined in, or 0 if unmined\n \"category\": \"value\", (string) The kind of transaction: \"send\" for sent transactions, \"immature\" for immature coinbase outputs, \"generate\" for mature coinbase outputs, or \"recv\" for all other received outputs. Note: A single output may be included multiple times under different categories\n \"confirmations\": n, (numeric) The number of block confirmations of the transaction\n \"fee\": n.nnn, (numeric) The total input value minus the total output value for sent transactions\n \"generated\": true|false, (boolean) Whether the transaction output is a coinbase output\n \"involveswatchonly\": true|false, (boolean) Unset\n \"time\": n, (numeric) The earliest Unix time this transaction was known to exist\n \"timereceived\": n, (numeric) The earliest Unix time this transaction was known to exist\n \"txid\": \"value\", (string) The hash of the transaction\n \"vout\": n, (numeric) The transaction output index\n \"walletconflicts\": [\"value\",...], (array of string) Unset\n \"comment\": \"value\", (string) Unset\n \"otheraccount\": \"value\", (string) Unset\n },...], \n \"lastblock\": \"value\", (string) Hash of the latest-synced block to be used in later calls to listsinceblock\n} \n", | |||
"listtransactions": "listtransactions (\"account\" count=10 from=0 includewatchonly=false)\n\nReturns a JSON array of objects containing verbose details for wallet transactions.\n\nArguments:\n1. account (string, optional) DEPRECATED -- Unused (must be unset or \"*\")\n2. count (numeric, optional, default=10) Maximum number of transactions to create results from\n3. from (numeric, optional, default=0) Number of transactions to skip before results are created\n4. includewatchonly (boolean, optional, default=false) Unused\n\nResult:\n[{\n \"account\": \"value\", (string) DEPRECATED -- Unset\n \"address\": \"value\", (string) Payment address for a transaction output\n \"amount\": n.nnn, (numeric) The value of the transaction output valued in bitcoin\n \"blockhash\": \"value\", (string) The hash of the block this transaction is mined in, or the empty string if unmined\n \"blockindex\": n, (numeric) Unset\n \"blocktime\": n, (numeric) The Unix time of the block header this transaction is mined in, or 0 if unmined\n \"category\": \"value\", (string) The kind of transaction: \"send\" for sent transactions, \"immature\" for immature coinbase outputs, \"generate\" for mature coinbase outputs, or \"recv\" for all other received outputs. Note: A single output may be included multiple times under different categories\n \"confirmations\": n, (numeric) The number of block confirmations of the transaction\n \"fee\": n.nnn, (numeric) The total input value minus the total output value for sent transactions\n \"generated\": true|false, (boolean) Whether the transaction output is a coinbase output\n \"involveswatchonly\": true|false, (boolean) Unset\n \"time\": n, (numeric) The earliest Unix time this transaction was known to exist\n \"timereceived\": n, (numeric) The earliest Unix time this transaction was known to exist\n \"txid\": \"value\", (string) The hash of the transaction\n \"vout\": n, (numeric) The transaction output index\n \"walletconflicts\": [\"value\",...], (array of string) Unset\n \"comment\": \"value\", (string) Unset\n \"otheraccount\": \"value\", (string) Unset\n},...]\n", | |||
"listsinceblock": "listsinceblock (\"blockhash\" targetconfirmations=1 includewatchonly=false)\n\nReturns a JSON array of objects listing details of all wallet transactions after some block.\n\nArguments:\n1. blockhash (string, optional) Hash of the parent block of the first block to consider transactions from, or unset to list all transactions\n2. targetconfirmations (numeric, optional, default=1) Minimum number of block confirmations of the last block in the result object. Must be 1 or greater. Note: The transactions array in the result object is not affected by this parameter\n3. includewatchonly (boolean, optional, default=false) Unused\n\nResult:\n{\n \"transactions\": [{ (array of object) JSON array of objects containing verbose details of the each transaction\n \"abandoned\": true|false, (boolean) Unset\n \"account\": \"value\", (string) DEPRECATED -- Unset\n \"address\": \"value\", (string) Payment address for a transaction output\n \"amount\": n.nnn, (numeric) The value of the transaction output valued in bitcoin\n \"bip125-replaceable\": \"value\", (string) Unset\n \"blockhash\": \"value\", (string) The hash of the block this transaction is mined in, or the empty string if unmined\n \"blockindex\": n, (numeric) Unset\n \"blocktime\": n, (numeric) The Unix time of the block header this transaction is mined in, or 0 if unmined\n \"category\": \"value\", (string) The kind of transaction: \"send\" for sent transactions, \"immature\" for immature coinbase outputs, \"generate\" for mature coinbase outputs, or \"recv\" for all other received outputs. Note: A single output may be included multiple times under different categories\n \"confirmations\": n, (numeric) The number of block confirmations of the transaction\n \"fee\": n.nnn, (numeric) The total input value minus the total output value for sent transactions\n \"generated\": true|false, (boolean) Whether the transaction output is a coinbase output\n \"involveswatchonly\": true|false, (boolean) Unset\n \"time\": n, (numeric) The earliest Unix time this transaction was known to exist\n \"timereceived\": n, (numeric) The earliest Unix time this transaction was known to exist\n \"trusted\": true|false, (boolean) Unset\n \"txid\": \"value\", (string) The hash of the transaction\n \"vout\": n, (numeric) The transaction output index\n \"walletconflicts\": [\"value\",...], (array of string) Unset\n \"comment\": \"value\", (string) Unset\n \"otheraccount\": \"value\", (string) Unset\n },...], \n \"lastblock\": \"value\", (string) Hash of the latest-synced block to be used in later calls to listsinceblock\n} \n", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
File requires cosmetic string replacement from bitcoin -> litecoin