├── App.java ├── README.md └── build.gradle /App.java: -------------------------------------------------------------------------------- 1 | package com.hubwiz.demo; 2 | 3 | import wf.bitcoin.javabitcoindrpcclient.BitcoindRpcClient.Unspent; 4 | import wf.bitcoin.javabitcoindrpcclient.BitcoinJSONRPCClient; 5 | import java.util.*; 6 | 7 | public class App{ 8 | public static void main(String[] args) throws Exception { 9 | System.out.println("hello,bitcoinj"); 10 | BitcoinJSONRPCClient client = new BitcoinJSONRPCClient("http://user:123456@127.0.0.1:18443"); 11 | 12 | double balance = client.getBalance(); 13 | System.out.format("wallet balance => %f\n",balance); 14 | 15 | double amount = 0.; 16 | List utxos = client.listUnspent(); 17 | for(Unspent utxo: utxos){ 18 | amount += utxo.amount(); 19 | } 20 | System.out.format("calculated balance => %f\n",amount); 21 | } 22 | 23 | } 24 | 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bitcoin-java 2 | 本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易、SPV节点等,是Java工程师不可多得的比特币开发学习课程。 3 | 4 | [http://xc.hubwiz.com/course/5bb35c90c02e6b6a59171df0](http://xc.hubwiz.com/course/5bb35c90c02e6b6a59171df0?affid=1111github) 5 | 6 | 课程目录如下: 7 | 8 | 1.比特币概述 9 | 10 | - 什么是比特币 11 | - 区块链结构 12 | - 去中心化机制 13 | - 课程内容 14 | 15 | 2.Hi,比特币 16 | 17 | - 比特币协议与实现 18 | - 节点软件与客户端 19 | - 身份:密钥与地址 20 | - 节点钱包 21 | - 挖矿:交易确认与激励 22 | - 比特币转账交易 23 | - 理解交易的结构 24 | - 查看交易输入与输出 25 | 26 | 3.使用PRC应用开发接口 27 | 28 | - RPC API概述 29 | - 使用curl测试RPC API 30 | - 在java中访问RPC API 31 | - 使用JSON RPC封装库 32 | - 利用UTXO计算钱包余额 33 | - 让网站支持比特币支付 34 | 35 | 4.地址的离线生成与管理 36 | 37 | - 概述 38 | - 创建私钥和公钥 39 | - 创建P2PKH地址 40 | - 身份验证逻辑 41 | - P2PKH脚本执行原理 42 | - 创建P2SH地址 43 | - 多重签名赎回脚本 44 | 45 | 5.使用分层确定性密钥 46 | 47 | - 概述 48 | - 生成主密钥 49 | - 派生子密钥 50 | - 使用扩展密钥 51 | - 使用强化派生密钥 52 | - 路径表示法 53 | 54 | 6.离线构造裸交易 55 | 56 | - 解读sendtoaddress 57 | - 裸交易的构造与广播 58 | - 理解交易费 59 | - 多重签名裸交易 60 | 61 | 7.使用SPV节点 62 | 63 | - SPV节点概述 64 | - 使用钱包应用套件 65 | - 钱包密钥与地址管理 66 | - 钱包交易池 67 | - 钱包余额算法 68 | - 交易可信度模型 69 | - 区块链库组件 70 | - 区块链组件 71 | - P2P节点组件 72 | - P2P节点管理器 73 | 74 | 75 | [http://xc.hubwiz.com/course/5bb35c90c02e6b6a59171df0](http://xc.hubwiz.com/course/5bb35c90c02e6b6a59171df0?affid=1111github) 76 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * This file was generated by the Gradle 'init' task. 3 | * 4 | * This is a general purpose Gradle build. 5 | * Learn how to create Gradle builds at https://guides.gradle.org/creating-new-gradle-builds/ 6 | */ 7 | 8 | 9 | apply plugin: 'java' 10 | 11 | sourceCompatibility = 1.8 12 | 13 | repositories { 14 | mavenCentral() 15 | } 16 | 17 | 18 | dependencies { 19 | compile 'wf.bitcoin:JavaBitcoindRpcClient:0.9.18' 20 | } 21 | 22 | sourceSets { 23 | main.java.srcDirs += '.' 24 | } 25 | 26 | apply plugin: 'application' 27 | mainClassName = "com.hubwiz.demo.App" 28 | 29 | jar { 30 | manifest.attributes "Main-Class": "com.hubwiz.demo.App" 31 | from configurations.compile.collect { zipTree it } 32 | 33 | exclude 'LICENSE.txt', 'NOTICE.txt', 'rootdoc.txt' 34 | exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA' 35 | exclude 'META-INF/NOTICE', 'META-INF/NOTICE.txt' 36 | exclude 'META-INF/LICENSE', 'META-INF/LICENSE.txt' 37 | exclude 'META-INF/DEPENDENCIES' 38 | } 39 | --------------------------------------------------------------------------------