neobytes/qa/rpc-tests
Gavin Andresen 171ca7745e estimatefee / estimatepriority RPC methods
New RPC methods: return an estimate of the fee (or priority) a
transaction needs to be likely to confirm in a given number of
blocks.

Mike Hearn created the first version of this method for estimating fees.
It works as follows:

For transactions that took 1 to N (I picked N=25) blocks to confirm,
keep N buckets with at most 100 entries in each recording the
fees-per-kilobyte paid by those transactions.

(separate buckets are kept for transactions that confirmed because
they are high-priority)

The buckets are filled as blocks are found, and are saved/restored
in a new fee_estiamtes.dat file in the data directory.

A few variations on Mike's initial scheme:

To estimate the fee needed for a transaction to confirm in X buckets,
all of the samples in all of the buckets are used and a median of
all of the data is used to make the estimate. For example, imagine
25 buckets each containing the full 100 entries. Those 2,500 samples
are sorted, and the estimate of the fee needed to confirm in the very
next block is the 50'th-highest-fee-entry in that sorted list; the
estimate of the fee needed to confirm in the next two blocks is the
150'th-highest-fee-entry, etc.

That algorithm has the nice property that estimates of how much fee
you need to pay to get confirmed in block N will always be greater
than or equal to the estimate for block N+1. It would clearly be wrong
to say "pay 11 uBTC and you'll get confirmed in 3 blocks, but pay
12 uBTC and it will take LONGER".

A single block will not contribute more than 10 entries to any one
bucket, so a single miner and a large block cannot overwhelm
the estimates.
2014-06-06 10:44:57 -04:00
..
python-bitcoinrpc Fix regression tests 2014-03-24 19:14:51 +01:00
.gitignore Python-based regression tests 2014-02-28 15:24:31 -05:00
conflictedbalance.sh Add licenses for tests and test data 2014-03-18 10:20:55 +01:00
listtransactions.py Fix regression tests 2014-03-24 19:14:51 +01:00
netutil.py Add Python test for -rpcbind and -rpcallowip 2014-05-13 07:23:23 +02:00
README.md Removed LevelDB changes 2014-05-01 12:10:06 -04:00
rpcbind_test.py Add Python test for -rpcbind and -rpcallowip 2014-05-13 07:23:23 +02:00
send.sh Add licenses for tests and test data 2014-03-18 10:20:55 +01:00
skeleton.py Fix regression tests 2014-03-24 19:14:51 +01:00
smartfees.py estimatefee / estimatepriority RPC methods 2014-06-06 10:44:57 -04:00
txnmall.sh Add licenses for tests and test data 2014-03-18 10:20:55 +01:00
util.py estimatefee / estimatepriority RPC methods 2014-06-06 10:44:57 -04:00
util.sh Add licenses for tests and test data 2014-03-18 10:20:55 +01:00
wallet.sh Add licenses for tests and test data 2014-03-18 10:20:55 +01:00
walletbackup.sh Add licenses for tests and test data 2014-03-18 10:20:55 +01:00

Regression tests of RPC interface

python-bitcoinrpc

Git subtree of https://github.com/jgarzik/python-bitcoinrpc. Changes to python-bitcoinrpc should be made upstream, and then pulled here using git subtree.

skeleton.py

Copy this to create new regression tests.

listtransactions.py

Tests for the listtransactions RPC call.

util.py

Generally useful functions.

Bash-based tests, to be ported to Python:

  • wallet.sh : Exercise wallet send/receive code.
  • walletbackup.sh : Exercise wallet backup / dump / import
  • txnmall.sh : Test proper accounting of malleable transactions
  • conflictedbalance.sh : More testing of malleable transaction handling

Notes

A 200-block -regtest blockchain and wallets for four nodes is created the first time a regression test is run and is stored in the cache/ directory. Each node has 25 mature blocks (25*50=1250 BTC) in their wallet.

After the first run, the cache/ blockchain and wallets are copied into a temporary directory and used as the initial test state.

If you get into a bad state, you should be able to recover with:

rm -rf cache
killall bitcoind