123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #!/usr/bin/env python3
- #
- # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
- # Copyright (C)2013-2021 The MMGen Project <mmgen@tuta.io>
- #
- # This program is free software: you can redistribute it and/or modify it under
- # the terms of the GNU General Public License as published by the Free Software
- # Foundation, either version 3 of the License, or (at your option) any later
- # version.
- #
- # This program is distributed in the hope that it will be useful, but WITHOUT
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- # details.
- #
- # You should have received a copy of the GNU General Public License along with
- # this program. If not, see <http://www.gnu.org/licenses/>.
- """
- mmnode-blocks-info: Display information about a block or range of blocks
- """
- from mmgen.common import *
- from mmgen.node_tools.BlocksInfo import BlocksInfo
- opts_data = {
- 'sets': [
- ('raw_miner_info', True, 'miner_info', True),
- ('summary', True, 'raw_miner_info', False),
- ('summary', True, 'miner_info', False),
- ('hashes', True, 'fields', 'block,hash'),
- ('hashes', True, 'no_summary', True),
- ],
- 'text': {
- 'desc': 'Display information about a block or range of blocks',
- 'usage': '[opts] blocknum [blocknum ...] | blocknum-blocknum[+step] | [blocknum|-nBlocks]+nBlocks[+step]',
- 'usage2': [
- '[opts] blocknum [blocknum ...]',
- '[opts] blocknum-blocknum[+step]',
- '[opts] [blocknum|-nBlocks]+nBlocks[+step]',
- ],
- 'options': """
- -h, --help Print this help message
- --, --longhelp Print help message for long options (common options)
- -D, --no-diff-stats Omit difficulty adjustment stats from summary
- -H, --hashes Display only block numbers and hashes
- -m, --miner-info Display miner info in coinbase transaction
- -M, --raw-miner-info Display miner info in uninterpreted form
- -n, --no-header Don’t print the column header
- -o, --fields= Display the specified fields (comma-separated list)
- See AVAILABLE FIELDS below. If the first character
- is '+', fields are appended to the defaults.
- -s, --summary Print the summary only
- -S, --no-summary Don’t print the summary
- """,
- 'notes': """
- If no block number is specified, the current block is assumed. The string
- 'cur' can be used in place of the current block number.
- If the requested range ends at the current chain tip, an estimate of the next
- difficulty adjustment is also displayed. The estimate is based on the average
- Block Discovery Interval from the beginning of the current 2016-block period.
- All fee fields except for 'totalfee' are in satoshis per virtual byte.
- AVAILABLE FIELDS: {f}
- EXAMPLES:
- # Display info for current block:
- {p}
- # Display info for the Genesis Block:
- {p} 0
- # Display info for the last 20 blocks:
- {p} +20
- # Display specified fields for blocks 165-190
- {p} -o block,date,size,inputs,nTx 165-190
- # Display info for 10 blocks beginning at block 600000:
- {p} 600000+10
- # Display info for every 5th block of 50-block range beginning at 1000
- # blocks from chain tip:
- {p} -- -1000+50+5
- # Display info for block 152817, adding miner field:
- {p} --miner-info 152817
- # Display specified fields for listed blocks:
- {p} -o block,date,hash 245798 170 624044
- # Display every difficulty adjustment from Genesis Block to chain tip:
- {p} -o +difficulty 0-cur+2016
- # Display roughly a block a day over the last two weeks. Note that
- # multiplication is allowed in the nBlocks spec:
- {p} +144*14+144
- This program requires a txindex-enabled daemon for correct operation.
- """.format(
- f = fmt_list(BlocksInfo.fields,fmt='bare'),
- p = g.prog_name )
- }
- }
- cmd_args = opts.init(opts_data)
- async def main():
- from mmgen.protocol import init_proto_from_opts
- proto = init_proto_from_opts()
- from mmgen.rpc import rpc_init
- m = BlocksInfo( cmd_args, opt, await rpc_init(proto) )
- if not (opt.summary or opt.no_header):
- m.print_header()
- await m.run()
- if m.last and not opt.no_summary:
- Msg('')
- await m.print_range_stats()
- if not opt.no_diff_stats:
- Msg('')
- await m.print_diff_stats()
- run_session(main())
|