本文的方案无需自建节点,因为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版)的更多相关文章

  1. [币严区块链]USDT钱包节点搭建

    USDT是基于BTC发的稳定币,它是比特币的一条侧链,说简单点,就是在比特币区块数据的不可篡改性与区块唯一性的基础上,再封装了一层.具体原理可网上查资料.总之理解一点:USDT的钱包节点就是BTC的钱 ...

  2. [币严区块链]数字货币交易所之比特币(BTC)钱包对接 | 自建节点JSON-RPC访问

    BTC钱包对接流程 一.   部署BTC钱包节点 二.   分析BTC钱包的API 三.   通过JSON-RPC访问BTC钱包API 四.   部署测试 一.部署钱包节点 交易平台对接BTC之前,要 ...

  3. [币严区块链]数字货币交易所之以太坊(ETH)钱包对接(四) 使用web3j对接以太坊钱包

    本文给大家介绍了 Web3j Java 版本的框架的基本使用,大家可根据本文的内容进行扩展性的练习,对其他 API 的使用进行尝试. 使用web3j对接以太坊钱包 一.开发准备事项 启动 Geth 此 ...

  4. [币严区块链]交易所钱包系统如何实现USDT自动归集操作

    本文代码应用场景: 每个用户在交易所充值时,每个人都分配了独立的USDT地址,而交易所需要将所有独立的地址中USDT汇集到一个钱包地址(一般是冷钱包),从而实现资产归集与安全保障. 注意: 理解以下代 ...

  5. [币严区块链]数字货币交易所之瑞波(XRP)钱包对接

    对接Ripple(XRP),不需要本地部署钱包,直接访问Ripple API,本文包括访问Ripple API及如何免费获取测试的XRP. 对接流程 安装Ripple API Ripple API 接 ...

  6. [币严区块链]以太坊(ETH)Dapp开发入门教程之宠物商店领养游戏

    阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 除此之外,你最好还了解一些HTML及JavaScript知识. 本文通过实例教大家来开发去中心化应用,应用效果如图 ...

  7. [币严区块链]ETH搭建节点区块数据同步的三种模式:full、fast、light

    ETH  全节点Archive(归档)模式数据量增长图 上述图表可通过链接查看:https://etherscan.io/chartsync/chainarchive 通过上表,可以看到截止2019年 ...

  8. [币严区块链]简单易懂的以太坊(ETH)智能合约开发入门教程

    以太坊(Ethereum)是一提供个智能合约(smart contract)功能的公共区块链(BlockChain)平台. 本文介绍了一个简单的以太坊智能合约的开发过程. 开发环境 在以太坊上开发应用 ...

  9. 许式伟看 Facebook 发币(上): 区块链, 比特币与 Libra 币

    你好,我是七牛云许式伟. Facebook(脸书)于6月18日发布了其加密数字货币项目白皮书.该数字货币被命名为 Libra(天秤座),象征着平衡与公正.此前,BBC 报道说这个数字货币叫 Globa ...

随机推荐

  1. go 学习笔记之有意思的变量和不安分的常量

    首先希望学习 Go 语言的爱好者至少拥有其他语言的编程经验,如果是完全零基础的小白用户,本教程可能并不适合阅读或尝试阅读看看,系列笔记的目标是站在其他语言的角度学习新的语言,理解 Go 语言,进而写出 ...

  2. Python连载30-多线程之进程&线程&线程使用举例

    一.多线程 1.我们的环境 (1)xubuntu 16.04(2)anaconda(3)pycharm(4)python 3.6 2.程序:一堆代码以文本的形式存入一个文档 3.进程:程序运行的一个状 ...

  3. .netcore持续集成测试篇之Xunit结合netcore内存服务器发送post请求

    系列目录 Web项目中,很多与用户数据交互的请求都是Post请求,想必大家都用过HttpClient构造过post请求,这里并不对HttpClient做详细介绍,只介绍一些常用的功能.并结合AutoF ...

  4. volatile关键字的详解-并发编程的体现

    xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! 参 ...

  5. javaScript基础-02 javascript表达式和运算符

    一.原始表达式 原始表达式是表达式的最小单位,不再包含其他表达式,包含常量,直接量,关键字和变量. 二.对象和数组的初始化表达式 对象和数组初始化表达式实际上是一个新创建的对象和数组. 三.函数表达式 ...

  6. Selenium webdriver工作原理

    webdriver是以server-client 经典模式设计的 server端可以是任何浏览器作为remote server,职责就是处理client的请求并作出相应操作,response的具体内容 ...

  7. 力导向图(关系图) echarts的运用

    <template> <div class="demo"> <div id="grap" class="grap&quo ...

  8. Liunx软件安装之Zabbix监控软件

    Zabbix 是什么 zabbix(音同 za:bix)是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix 能监视各种网络参数,保证服务器系统的安全运营 ...

  9. 良许 | 命令的输出不会保存?居然连 tee 命令都不会用!

    很多情况下,我们需要保存程序/命令的输出到本地,常用的一种方法是重定向,这也是一种很好的方法.但有个问题,如果你想要做后续操作,比如要统计输出的行数等,重定向就有困难了. 这时候,tee 命令就派上用 ...

  10. 操作系统-IO管理疑难点

    IO管理疑难点 一.分配设备 首先根据IO请求中的物理设备名查找系统设备表(SDT),从中找出该设备的DCT(设备控制表),再根据DCT中的设备状态字段,可知该设备是否正忙.若忙,便将请求IO进程的P ...