一、密码学相关资料
Java密码学 非对称加密以及使用secp256k1进行数字签名(ECDSA),也适合Android(上)
外国程序员大佬教你做一个——“Bitcoin(比特币)”的工作库
二、第三方类库
<dependency> <groupId>com.madgag.spongycastle</groupId> <artifactId>core</artifactId> <version>1.52.0.0</version> </dependency>
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>25.0-jre</version> </dependency>
三、源码摘要说明
PeerGroup--->Peer--->Wallet(CoinSelector ,KeyChainGroup,KeyChain ,ECKey , KeyCrypter)
--->Transaction--->Block--->BlockChain
org.bitcoinj.core.NetworkParameters:
public static final int TARGET_TIMESPAN = 14 * 24 * 60 * 60; // 2 weeks per difficulty cycle, on average. public static final int TARGET_SPACING = 10 * 60; // 10 minutes per block. public static final int INTERVAL = TARGET_TIMESPAN / TARGET_SPACING; /** * The maximum number of coins to be generated */ public static final long MAX_COINS = 21000000;
createGenesis - 创世区块
org.bitcoinj.core.AbstractBitcoinNetParams:
public static final int REWARD_HALVING_INTERVAL = 210000;//奖励减半周期
isRewardHalvingPoint
isDifficultyTransitionPoint
checkDifficultyTransitions
org.bitcoinj.core.Block:
solve - 挖矿算法
checkProofOfWork - 工作量证明算法
getDifficultyTargetAsInteger - 获取区块难度目标
/** Height of the first block */ public static final int BLOCK_HEIGHT_GENESIS = 0;//The genesis block has a height of zero.
/** * <p>A utility method that calculates how much new Bitcoin would be created by the block at the given height. * The inflation of Bitcoin is predictable and drops roughly every 4 years (210,000 blocks). At the dawn of * the system it was 50 coins per block, in late 2012 it went to 25 coins per block, and so on. The size of * a coinbase transaction is inflation plus fees.</p> * * <p>The half-life is controlled by {@link org.bitcoinj.core.NetworkParameters#getSubsidyDecreaseBlockCount()}. * </p> */ public Coin getBlockInflation(int height) { return FIFTY_COINS.shiftRight(height / params.getSubsidyDecreaseBlockCount()); }
/** * Returns the work represented by this block.<p> * * Work is defined as the number of tries needed to solve a block in the * average case. Consider a difficulty target that covers 5% of all possible * hash values. Then the work of the block will be 20. As the target gets * lower, the amount of work goes up. */ public BigInteger getWork() throws VerificationException { BigInteger target = getDifficultyTargetAsInteger(); return LARGEST_HASH.divide(target.add(BigInteger.ONE)); }
org.bitcoinj.core.AbstractBlockChain:
OrphanBlock:孤块
// 将区块加入到区块链中
private boolean add(Block block, boolean tryConnecting, @Nullable List<Sha256Hash> filteredTxHashList, @Nullable Map<Sha256Hash, Transaction> filteredTxn) throws BlockStoreException, VerificationException, PrunedException { //...... // Try linking it to a place in the currently known blocks. if (storedPrev == null) { // We can't find the previous block. Probably we are still in the process of downloading the chain and a // block was solved whilst we were doing it. We put it to one side and try to connect it later when we // have more blocks. checkState(tryConnecting, "bug in tryConnectingOrphans"); log.warn("Block does not connect: {} prev {}", block.getHashAsString(), block.getPrevBlockHash()); orphanBlocks.put(block.getHash(), new OrphanBlock(block, filteredTxHashList, filteredTxn)); return false; } else { checkState(lock.isHeldByCurrentThread()); // It connects to somewhere on the chain. Not necessarily the top of the best known chain. params.checkDifficultyTransitions(storedPrev, block, blockStore); connectBlock(block, storedPrev, shouldVerifyTransactions(), filteredTxHashList, filteredTxn); } //...... }
tryConnectingOrphans - 孤块处理
org.bitcoinj.core.Peer:
processMessage - 消息处理
org.bitcoinj.wallet.Wallet:
1、变量定义
2、构造函数
3、私钥管理 - Key Management
4、序列化支持 - Serialization support
5、Inbound transaction reception and processing
6、Event listeners
7、Vending transactions and other internal state
8、Balance and balance futures
9、Creating and sending transactions
10、Reorganisations
11、Bloom filtering
12、Extensions to the wallet format
13、Fee calculation code
14、Wallet maintenance transactions