区块链技术开发——用JAVA创建第一个区块链(二)

来源:Galileo伽利略 作者:Galileo伽利略 2018-06-30 11:50:19

准备一个钱包

在加密货币中,在区块链作为交易时,货币所有权可以进行转移,每个参与者都有一个自己私有的地址来发送或者是收取货币。,钱包可以存储这些地址。因此钱包就是可以在区块链上进行新交易的软件。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

让我们创建一个钱包类来保存公钥和私钥:公钥和私钥究竟是起到什么作用呢,其实公钥的作用就是地址,你可以分享你的公钥给别人以此来获取付款,而你的私钥的作用是为了对交易进行签名,这样其他人就不可以花费你的金额除非它拥有你的私钥,所以对于每个人而言我们必须保护好我们的私钥,不能透露我们的私钥信息给其他人。同时在我们进行交易的时候我们也会同时发送我们的公钥由此来验证我们的签名是有效的而且没有数据被篡改。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

我们在密钥对KeyPair生成私有和公钥。我们将使用椭圆曲线加密来生成我们的密钥对KeyPair。让我们将generateKeyPair()方法添加到我们的钱包类中,并在构造函数中调用它:NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

私钥用于签署我们不想被篡改的数据。公钥用于验证签名。现在我们已经又了钱包类的大概框架,下面我们再来看一下交易类。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

交易和数字签名NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

每笔交易将携带一定以下信息:NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  1. 资金付款人的公匙信息。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  2. 资金收款人的公匙信息。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  3. 被转移资金的金额。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  4. 输入,它是对以前的交易的引用,证明发送者有资金发送。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  5. 输出,显示交易中收款方相关地址数量。(这些输出被引用为新交易的输入)NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  6. 一个加密签名,证明该交易是由地址的发送者是发送的,并且数据没有被更改。(阻止第三方机构更改发送的数量)NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

让我们创建这个新的交易类:NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

我们还应该创建空的transactioninputtransactionoutput类,不要担心我们可以在后面填写它们。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

我们的交易类还将包含生成/验证签名和验证交易的相关方法,那么签名的意图是什么?签名在我们的区块链中执行了两个非常重要的任务:第一,签名用来保证只有货币的拥有者才可以用来发送自己的货币,第二,签名用来阻止其他人试图篡改提交的交易。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

即私钥被用来签名数据,而公钥用来验证其完整性。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

从前面的代码中我们可以看到我们的签名将是一堆字符串,所以让我们创建一个方法来生成它们。首先我们在StringUtil类中创建产生签名的方法。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

让我们使用签名的方法在交易类中,增加generatesiganature() 和varifiysignature()方法:NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

签名将由矿工验证,只有签名验证成功后交易才能被添加到区块中去。当我们检查区块链的有效性时,我们也可以检查签名NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

测试钱包和签名

现在我们简单的进行一些测试,在主方法中,我们增加了一些新的变量也替换了我们之前在主方法中的一些内容。

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

我们创建了两个钱包walleta和walletb,然后打印了walleta的私钥和公钥。生成一个交易并使用walleta的私钥对其进行签名。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

打印NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

接下来我们将创建并验证输入和输出,并把交易保存到区块链中去。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

输入和输出 1:如何验证货币是你的

如果你拥有1比特币,你必须前面就得接收1比特币。比特币的账本不会在你的账户中增加一个比特币也不会从发送者那里减去一个比特币,发送者只能指向他/她之前收到过一个比特币,所以一个交易输出被创建用来显示一个比特币发送给你的地址(交易的输入指向前一个交易的输出)。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

你的钱包余额是所有未使用的交易输出的总和NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

从这一个点出发,我们会依照比特币中的说明,把所有未使用的交易输出称为UTXO。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

创建TransactionInput 类:NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么


NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

创建TransactionOutputs类:NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

交易输出类将显示从交易中发送给每一方的最终金额。这些作为新交易中的输入参考,作为证明你可以发送的金额数量。
NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

输入和输出 2:处理交易NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

区块链可能会收到很多交易,而区块链可能会非常长,因为我们必须查找并检查其输入,所以可能需要非常长的时间来处理新的交易。为了解决这个问题,我们保存了一个额外的集合称之为为使用的交易作为可用的输入,所以在主函数中增加一个集合称为UTXO。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

重点来了,我们在交易类中增加一个processTransaction方法,这个方法是把一切放在一起用来处理交易。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

通过这种方法,我们执行一些检查以确保交易有效,然后收集输入并生成输出。最重要的是,最后,我们抛弃了输入在我们的UTXO列表,这就意味着一个可以使用的交易输出必须之前一定是输入,所以输入的值必须被完全使用,所以付款人必须改变它们自身的金额状态。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么


NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

红色箭头是输出。请注意,绿色输入是对之前输出的参考NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

最后让我们修改我们的wallet类NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • 搜集余额(通过循环遍历UTXO列表来检查交易的输出是否是我的)并NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • 创建交易NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

    NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么


NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么


NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

你可以随时为钱包添加一些其他功能,例如记录您的交易历史记录。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

添加交易到区块中

现在我们已经有了一个有效的交易系统,我们需要把交易加入到我们的区块链中。我们把交易列表替换我们块中无用的数据,但是在一个单一的区块中可能存放了1000个交易,这就会导致大量的hash计算,不用担心在这里我们使用了交易的merkle root,稍后你会看到。让我们增加一个帮助方法来创建merkle rootStringUtils类中。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

StringUtils类中创建getMerkleRoot方法NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

修来Block NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

需要注意的是我们还更新了Block构造函数,因为我们不再需要传递字符串数据,并将merkle root包含在计算哈希方法中。addTransaction方法用来增加交易,只有满足条件下才可以成功的在区块中增加交易。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

我们已经实现了一个可交易的区块链。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

最后的测试NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

我们应该测试从钱包发送货币,更新区块链并进行有效性检查。但首先我们需要一种将新硬币引入混合的方法。有很多方法来创建新的硬币。在比特币区块链上,有很多方法可以创造新的比特币:矿工可以将交易包括在内,作为对每个矿工挖矿的奖励。但在这里我们只希望在创世纪区块中释放货币。就像比特币中一下,所以我们修改我们的主函数以达到下面的目的。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  1. 创世纪区块发布100个货币给walletANnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  2. 一个更新的链有效性检查,考虑到交易。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  3. 测试交易看是否一切正常。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

    NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

    NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

打印:NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

现在钱包能够安全地在您的区块链上发送金额,只要他们有金额发送。这意味着你有你自己的本地加密货币。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

可以进行交易的区块链你已经成功地创建了自己的加密货币。你的区块链:

  • 允许用户创建钱包NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • 使用椭圆曲线加密方式为钱包提供公钥和私钥NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • 通过使用数字签名算法证明所有权,确保资金转移NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  • 允许用户在区块链上进行交易NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

    NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么


关注新一代智能底层协议经济,让区块链更加美好!NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

伽利略(Galileo)基于区块链/分布式节点部署的链网体系,通过分布式众源数据交互协议、跨链交互/事务处理机制、分布式私钥控制机制(多维计算、门限密钥共享)、分布式存储、分布式社群、超级共识机制L—DPOS DBFTlstm深度学习优化共识算法)、创新激励机制,建立智能底层基础协议,构建区块链分布式自由经济协同网络。NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么



NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

官网:bc-galileo.orgNnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么


NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

 NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

微博:Galileo智能经济底层协议
NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么


NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

电报:bc-Galileo.orgNnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么


NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

  NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

推特:bc-galileo.orgNnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么


NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

    NnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

https://github.com/Galileo2018/GalileoNnyBCfans | 区块链爱好者_区块链技术_区块链开发_区块链是什么

公众号关注 bcfanscom 或搜索“区块链粉丝”,参与大咖直播和糖果空投活动

BCfans公众号

  • 比特币现金硬分叉,是技术革新还是权利之争?
    比特币现金硬分叉,是技术革新还是权利之争? 09-02 16:52

    在比特币诞生的短短不到十年的历史中,整个社区中爆发了多次的争论,不仅仅是核心开发者和矿工之间的矛盾,还包括开发者与开发...

  • LGGroup乐金钱包软件开发
    LGGroup乐金钱包软件开发 08-31 12:19

    LGGroup支付钱包系统软件开发欧生 137-6067-4940 (LGGroup支付钱包APP软件开发、LGGroup支付钱包APP系统开发、LGGroup支付钱包系统源码开发、LGGroup支...

  • 区块链跨链钱包开发,多币种钱包app开发
    区块链跨链钱包开发,多币种钱包app开发 08-31 12:19

    区块链跨链钱包开发,多币种钱包app开发  区块链钱包是最近非常火爆的一个方向,像新出的Plustoken、HOO等这些钱包app功能都是非常强大的,...

  • 基于华为云区块链服务快速部署和搭建链上应用
    基于华为云区块链服务快速部署和搭建链上应用 08-31 12:19

    华为云区块链服务的整体架构华为云区块链服务BCS是面向企业及开发者的高性能、高可用和高安全的区块链技术平台服务,可以帮助企业和开...

  • V神谈分片技术、等离子技术以及第二层解决方案
    V神谈分片技术、等离子技术以及第二层解决方案 08-31 12:19

    ​ V神,以太坊的创始人,今日在关于开发应该集中在第一层还是第二层这个问题上发表了自己的看法。他说两者之间的权衡这种将是这个......

  • 区块链交易平台开发 公开透明不可篡改
    区块链交易平台开发 公开透明不可篡改 08-30 21:32

    区块链给企业商家带来了不一样的惊喜,同时以区块链技术为基础诞生了许多的衍生系统.赢在移动区块链交易平台就是在这个基础上...

  • 区块链挖矿系统APP定制
    区块链挖矿系统APP定制 08-30 20:54

    区块链挖矿系统研发【咨询开发薇电180-2240-1717高坤】区块链挖矿系统软件定制 最近区块链行业非常热闹,币圈人,都是营销的集...

  • 区块链商城交易系统平台开发
    区块链商城交易系统平台开发 08-30 20:33

    区块链商城交易系统开发,区块链商城交易系统软件,区块链商城交易系统定制,区块链商城交易系统:138-2848-7919可微区块链给...

  • 以太坊开发者资源工具集合
    以太坊开发者资源工具集合 08-30 16:07

    image 1 开发语言、框架与工具 语言 Solidity - 官方推荐以太坊智能合约开发语言,也是目前最为主流的智能合约语言。 Bamboo - 是一种将智...

  • POWH3D区块链开发
    POWH3D区块链开发 08-30 15:15

    POWH3D区块链开发【185→94O6→0l81微电 曾生】​a,从日活的角度说,以太坊上现在dapp是啥?不是idex,也不是分叉以德,更不是以太猫,是一个...

  • 币圈资讯(8月30日)
    币圈资讯(8月30日) 08-30 14:00

    币圈区块链联盟99%币圈的人都关注了 2018.8.30 周四 区块链资讯 1.广州开发区金融局近日联合广州开发区经济和信息化局下发通知,...

  • LGGroup钱包系统开发
    LGGroup钱包系统开发 08-30 12:35

    LGGroup支付钱包系统软件开发欧生 137-6067-4940 (LGGroup支付钱包APP软件开发、LGGroup支付钱包APP系统开发、LGGroup支付钱包系统源码开发、LGGroup支...