[币严区块链]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 ...
随机推荐
- jmh源码解析-整体架构
我理解的jmh运行架构图 生成字节码,字节码负责维护测试的状态和调用被测试的方法 默认在fork的进程中进行测试,可以配置多个fork进程,以减少误差 通过线程池,提交每个迭代的测试任务,任务执行后, ...
- Kubernetes 服务发现
目录 什么是服务发现? 环境变量 DNS 服务 Linux 中 DNS 查询原理 Kubernetes 中 DNS 查询原理 调试 DNS 服务 存根域及上游 DNS 什么是服务发现? 服务发现就是一 ...
- linux下实现并发逻辑
################shell 模拟实现并发跑数#################有时候我们知道一些程序是可以同时跑的,互不影响,为了提高效率不得不使用并发跑脚本 #1.思路一我们都知道在 ...
- 日志文件写入失败(permission denied)
用过Laravel的小伙伴一开始安装完框架后可能都遇到过daily 日志文件写入失败的问题,接下来我们就来详细说下日志文件写入失败的原因以及对应的解决方案. 在讲这个问题之前可能需要简单介绍下Linu ...
- 使用 php 内部web服务器
使用 php 内部web服务器如网站目录 d:\web\index.php1.打开命令窗口,输入下列3条命令cd d:cd d:\web\index.phpphp -S localhost:80802 ...
- 干货 | Elasticsearch、Kibana数据导出实战
1.问题引出 以下两个导出问题来自Elastic中文社区. 问题1.kibana怎么导出查询数据? 问题2:elasticsearch数据导出 就像数据库数据导出一样,elasticsearch可以么 ...
- .Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy
系统环境: Windows + .Net Framework 4.0 问题描述: C#连接FTP下载文件时,在部分电脑上有异常报错,在一部分电脑上是正常的:异常报错的信息:System.Inval ...
- WebSocket实现数据库更新前台实时显示
通过一个小实例来实现数据库更新后,推送消息给前台,让前台进行相应操作. 需求 数据库更新之后服务器推送消息给前台,让前台做操作.(数据库的数据不是由服务器写入的) 实现的话说到底都是用轮询,因为数据库 ...
- 《Effective Java第二版》总结
第1条:考虑用静态工厂方法代替构造器 通常我们会使用 构造方法 来实例化一个对象,例如: // 对象定义 public class Student{ // 姓名 private String name ...
- MySql基础架构以及SQL语句执行流程
01. mysql基础架构 SQL语句是如何执行的 学习一下mysql的基础架构,从一条sql语句是如何执行的来学习. 一般我们写一条查询语句类似下面这样: select user,password ...