[币严区块链]BitcoinCash - BCH钱包地址生成与扫块充值监控(JAVA版)
本文的方案无需自建节点,因为BCH当前区块数据大小已经达到200G以上,BTC区块数据也已超过300G,若每个币都自建节点,对云服务器的消耗会非常大。
认识BitcoinCash(BCH)
Bitcoin Cash(BCH)是比特币的分叉币,与比特币相同,是一种基于去中心化,采用点对点网络与共识主动性,开放源代码,以区块链作为底层技术的加密货货币。比特币社区围绕扩容问题争论了三年之久,终于在2017年8月1日,比特币现金在区块高度478558执行硬分叉,按照比特币1:1分发,总量2100万,删除隔离见证、区块上限升级为8M,后升级为32M,通过链上扩容解决了旧版比特币系统中手续费高、确认慢、实用性差等问题,履行比特币作为「点对点电子现金」的承诺。
BCH的源头最早可以追溯到2008年,中本聪发表了白皮书《比特币:一种点对点的电子现金系统》,白皮书中构建了一个基于P2P网络传输的去中心化货币体系,相比于法币体系它排除了第三方信任机制的引入。随着比特币的用户群体进一步扩大,1M区块大小无法承载日益增加的交易量,比特币网络开始出现拥堵,手续费过高,交易长时间无法打包等情况。
社区中开始出现了扩容的声音,而以核心开发者Core为代表的小区块者们则是希望用过隔离见证+闪电网络的方式缓解比特币的拥堵问题。
社区矛盾逐渐无法调和,同时硬分叉的声音也愈演愈烈,最终在矿工的主导下完成了硬分叉,比特币社区自此一分为二。
至于当前正在进行的BCH ABC与 BCH SV的算力竞争,我们先不管了。本文主要介绍BCH ABC的对接方式。
认识BCH新地址
1、新的地址到底是什么样子?
它将以下面这种形式展现出来,举个例子:
bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a
2、旧的遗留地址还能用吗?
是可以用的。不过还是强烈的建议升级成为新的地址。如果您有一个当前正在使用的遗留地址,它将继续工作。但是对于大多数用户而言,应该升级成为新的地址,因为新的地址会更加安全。此外,当每个人都使用相同的格式的时候,用户体验将会得到增强。
3、我可以从旧的地址发送到新的地址吗?
可以。地址格式只是一个编码。打个比方,可以把编码看成一种包装或者是衣服。就像不管你穿什么衣服都可以随时和你的朋友聊天一样,不管是旧的地址还是新的地址,那层“衣服”下面都是原始公钥散列值(pubkeyHash)。
4、当我试着将我的比特币现金转移到新的地址中是,但是交易所或者钱包不让我这样做,这是为什么?
如果一个钱包还没有升级,那它就不支持新的地址格式。不过不用担心,这个问题是可以很容易解决的。您可以通过地址转换工具将旧的地址格式转换成新的地址格式。有好几种转换工具都可以用。推荐
https://cashaddr.bitcoincash.org/
5、从旧地址到新地址是否有一对一的“映射”?
是的,任何遗留的比特币地址格式都将转换为一个并且只有一个CashAddr格式,反之亦然。因此,任何给定地址都有两个版本(legacy和CashAddr),它们是可以互换的,因为它们对应于同一组私钥和公共密钥。
6、如果我将一个旧的地址转换成新的格式,并将这些比特币现金发送给我的朋友,但他的钱包不支持这种新格式,会发生什么情况呢?
没关系。钱仍然会出现在他的旧地址(因为地址其实是一样的,只不过编码方式不同)。
7、为什么比特币现金开发社区决定创建一个新的地址格式?
比特币现金作为一种独特的分类账本和加密货币,应该拥有独一无二的地址格式。而且使用独特的地址格式可以减少用户的错误和混淆。
8、这种特殊地址格式的好处是什么?
除了提供不同的地址格式之外,新格式不区分大小写,这使得地址更容易在人们之间编写和传达。而且它也是可扩展的,当比特币现金在未来添加更多新的功能时也不需要改变地址格式了。
如何生成BCH地址?
需要依赖的项目:https://github.com/bitcoincash-wallet/bitcoinj 分支选择 addsingedinputs
操作步骤:
一、建立Maven工程,在pom.xml中导入以下依赖:
<dependency>
<groupId>cash.bitcoinj</groupId>
<artifactId>bitcoinj-core</artifactId>
<version>0.14.5.2</version>
</dependency>
二、任意新建一个类(包含static main函数),例如:
class Test{
public static void main(String[] args){
// 获取网络参数
NetworkParameters params = MainNetParams.get();
// 新建bch.wallet钱包文件(该文件存储私钥)
final File walletFile = new File("bch.wallet");
// 该段代码每次都用新建钱包文件的方式创建钱包,首次运行可用这种方式生成bch.wallet文件
Wallet wallet = new Wallet(walletFile); // 以下代码用于已经创建过bch.wallet,读取钱包文件使用
//try {
// wallet = Wallet.loadFromFile(walletFile);
//} catch (UnreadableWalletException e) {
// e.printStackTrace();
// return MessageResult.error(500,"error:" + e.getMessage());
//}
// 新建密钥对
ECKey key = new ECKey();
// 通过网络参数获取地址
Address address = key.toAddress(params); // 打印钱包地址
System.out.println("生成的钱包地址:" + address.toBase58()); // 将密钥对导入钱包文件
wallet.importKey(key); try {
// 保存秘钥到钱包文件
wallet.saveToFile(walletFile);
} catch (IOException e) {
e.printStackTrace();
}
}
}
上述代码以最简单的方式演示了如何生成地址,具体健壮性需要编码者自己认证完善。
如何扫块监听充值?
由于我们不打算自建节点,那么如果有很多地址,就需要去检测是否有充值,这里我们使用扫块的方式,一旦发现某个收账地址属于我们,我们就发起充值提醒,或写入数据库中的用户余额表。
扫块主要是通过区块链浏览器获取,市面上有很多区块链浏览器,我们可以选择适合自己的,这里演示的使用的区块链浏览器是:
https://bch.btc.com/
API文档是:
https://bch.btc.com/api-doc
比如我们可以通过API接口:https://bch-chain.api.btc.com/v3/block/latest/tx,来获取最新区块里包含的交易:
上图是用Chrome调试工具获取到的json格式数据,这个里面我们可以看到outputs -> addresses里面就是到账的地址。
具体编码细节这里就不做延伸了,无非就是通过HttpUtli发起请求,获取json数据,然后解析json数据即可。
BIZZAN(币严) 数字货币交易所官方网址:
www.bizzan.com
币严区块链技术交流QQ群:
811249099
[币严区块链]BitcoinCash - BCH钱包地址生成与扫块充值监控(JAVA版)的更多相关文章
- [币严区块链]USDT钱包节点搭建
USDT是基于BTC发的稳定币,它是比特币的一条侧链,说简单点,就是在比特币区块数据的不可篡改性与区块唯一性的基础上,再封装了一层.具体原理可网上查资料.总之理解一点:USDT的钱包节点就是BTC的钱 ...
- [币严区块链]数字货币交易所之比特币(BTC)钱包对接 | 自建节点JSON-RPC访问
BTC钱包对接流程 一. 部署BTC钱包节点 二. 分析BTC钱包的API 三. 通过JSON-RPC访问BTC钱包API 四. 部署测试 一.部署钱包节点 交易平台对接BTC之前,要 ...
- [币严区块链]数字货币交易所之以太坊(ETH)钱包对接(四) 使用web3j对接以太坊钱包
本文给大家介绍了 Web3j Java 版本的框架的基本使用,大家可根据本文的内容进行扩展性的练习,对其他 API 的使用进行尝试. 使用web3j对接以太坊钱包 一.开发准备事项 启动 Geth 此 ...
- [币严区块链]交易所钱包系统如何实现USDT自动归集操作
本文代码应用场景: 每个用户在交易所充值时,每个人都分配了独立的USDT地址,而交易所需要将所有独立的地址中USDT汇集到一个钱包地址(一般是冷钱包),从而实现资产归集与安全保障. 注意: 理解以下代 ...
- [币严区块链]数字货币交易所之瑞波(XRP)钱包对接
对接Ripple(XRP),不需要本地部署钱包,直接访问Ripple API,本文包括访问Ripple API及如何免费获取测试的XRP. 对接流程 安装Ripple API Ripple API 接 ...
- [币严区块链]以太坊(ETH)Dapp开发入门教程之宠物商店领养游戏
阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 除此之外,你最好还了解一些HTML及JavaScript知识. 本文通过实例教大家来开发去中心化应用,应用效果如图 ...
- [币严区块链]ETH搭建节点区块数据同步的三种模式:full、fast、light
ETH 全节点Archive(归档)模式数据量增长图 上述图表可通过链接查看:https://etherscan.io/chartsync/chainarchive 通过上表,可以看到截止2019年 ...
- [币严区块链]简单易懂的以太坊(ETH)智能合约开发入门教程
以太坊(Ethereum)是一提供个智能合约(smart contract)功能的公共区块链(BlockChain)平台. 本文介绍了一个简单的以太坊智能合约的开发过程. 开发环境 在以太坊上开发应用 ...
- 许式伟看 Facebook 发币(上): 区块链, 比特币与 Libra 币
你好,我是七牛云许式伟. Facebook(脸书)于6月18日发布了其加密数字货币项目白皮书.该数字货币被命名为 Libra(天秤座),象征着平衡与公正.此前,BBC 报道说这个数字货币叫 Globa ...
随机推荐
- 低版本IE兼容 H5+CSS3 方案
[主要是针对ie6 7 8对支持和让老浏览器支持html5+css3的一些js脚本] html5shiv.js // 让IE8及耕地版本的IE识别section,article,nav等html5元 ...
- 算法与数据结构基础 - 排序(Sort)
排序基础 排序方法分两大类,一类是比较排序,快速排序(Quick Sort).归并排序(Merge Sort).插入排序(Insertion Sort).选择排序(Selection Sort).希尔 ...
- JavaWeb前端分页显示方法
在前端中我们总会遇到显示数据的问题 - 正常情况分页显示是必须的,这个时候我们不能仅仅在前端进行分页,在前端其实做起分页是很困难的,着就要求我们在后台拿数据的时候就要把分页数据准备好,在前端我们只需要 ...
- CMake入门-02-HelloWorld扩展
工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! 扩展-同一目录,多个源文件 (1) 新建 hello 目录,创建 ...
- sql server 日期近一年,同比
--近一年 ), , , ) SELECT CONVERT(VARCHAR, DATEADD(day, -DAY(GETDATE()), , ) --同比 ), , , ) SELECT CONVER ...
- net core Webapi基础工程搭建(七)——小试AOP及常规测试_Part 1
目录 前言 拦截器 异常拦截器 测试结果 身份验证拦截器 测试 小结 补充 2019-07-31 前言 一天天不知道怎么过的,但确实挺忙,事赶事不带停那种,让我感觉跟在流水线干活一样,忙活的事差不多了 ...
- Ajax前台返回JSON数据后再Controller中直接转换成类型使用,后台接收json转成实体的方法
之前写过一篇记录文章,写的是将一个比较复杂的数据结构在前台组合起来后传递到后台. 当时并不太了解@RequestBody,也并没有使用js提供的JSON.stringify()方法 所有都是自己写的, ...
- 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8)
8 Feature(特性) 8.1 固件升级过程 固件升级通过重启激活的过程是: 1. 主机发一个Firmware Image Download命令,下载固件映像版本到controller.可能有多个 ...
- python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
1. 场景描述 一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的K-means聚类算法,算法原理就不介绍了,只从代码层面 ...
- OCP培训 MySQL OCP认证实战培训【低价送OCP考证名额】
一.OCP培训 MySQL 5.7 OCP认证全套实战培训[低价送OCP考试名额] 课程目标: 风哥为满足想参加MySQL OCP考证的学员,而设计的一套比较全面OCP实战培训课程. 课程涉及MySQ ...