Skip to content

Instantly share code, notes, and snippets.

View jnewbery's full-sized avatar
🥟

John Newbery jnewbery

🥟
View GitHub Profile
@jnewbery
jnewbery / BitcoinCoreReviewClub.md
Last active October 20, 2020 09:12
Bitcoin Core PR Review Club
@jnewbery
jnewbery / sighash.md
Created January 16, 2019 22:38
SIGHASH notes
@jnewbery
jnewbery / file_descriptors_bitcoin_core.md
Last active February 23, 2021 06:00
File Descriptors in Bitcoin Core

Overview

  • We use leveldb for multiple databases: block index, chainstate and (optionally) txindex. block index is very small, but chainstate and txindex can grow to many hundreds of files.
  • Each database has a limit on number of 'open files'. This limit includes both mmapped files (which ldb takes the fd for, opens and then closes, returning the fd) and files which ldb opens and holds the fd for. There's a default in the leveldb code here. This is the per-database max_open_files limit.

Bitcoin Core wallet design notes

The Bitcoin Core wallet consists of:

  • An in memory keystore (in /src/keystore.cpp), which contains:
    • private keys stored as mapKeys - a map from the CKeyID to the private key.
    • watchonly public keys, stored as mapWatchKeys - a map from the CKeyID to the public key.
    • scripts, stored as mapScripts - a map from the CScriptID to the secrialized script.
    • watchonly scripts, stored as setWatch - a set of serialized scripts.
  • Additional key metadata such as key birthday, hd derivation path. See CKeyMetadata in /src/wallet/walletdb.h
#!/usr/bin/env python3
"""Search for blocks where the BIP34 indicated coinbase height is > block height.
Uses Bitcoin Core's test framework."""
import time
from authproxy import AuthServiceProxy
from script import CScript
a = AuthServiceProxy("http://<user>:<password>@<ip>:<port>")