欢迎来到环境100文库! | 帮助中心 分享价值,成长自我!

环境100文库

换一换
首页 环境100文库 > 资源分类 > PDF文档下载
 

用java创建你的第一个区块链.pdf

  • 资源ID:4633       资源大小:442.16KB        全文页数:9页
  • 资源格式: PDF        下载权限:游客/注册会员/VIP会员    下载费用:5碳币 【人民币5元】
快捷注册下载 游客一键下载
会员登录下载
三方登录下载: 微信开放平台登录 QQ登录   微博登录  
下载资源需要5碳币 【人民币5元】
邮箱/手机:
温馨提示:
支付成功后,系统会自动生成账号(用户名和密码都是您填写的邮箱或者手机号),方便下次登录下载和查询订单;
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,既可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

用java创建你的第一个区块链.pdf

用 java 创建你的第一个区块链(第一部分) 作者 Kass 翻译 Green 奇 本系列教程的目的,是帮助你学习怎样开发区块链技术。 在本教程中,我们将  创建你的第一个 基础“区块链” ;  实现 一个简单的 工作量 证明 ( 采矿 ) 系统 ;  惊叹于可能性; (学习本 教程之前,需要对面向对象编程有基本了解 ) 需要注意的是,本教程并没有生产 区块链 的完整功能 。相反,这是一个概念实现的证明,以帮助您理解区块链 ,为以后的教程打基础。 安装 教程中使用 Java,当然你可以使用 其他的面向对象编程语言。 开发工具是 Eclipse,同样的你可以使用其他的文本编 辑器(虽然你可能会错过很多好用的功能)。 你需要  安装 Java 和 JDK;  Eclipse(或者其他 IDE/文本编辑器)。 你还可以使用谷歌发布的 GSON 类库,实现 Java 对象和 JSON 字符串 之间的转换。这是个非常有用的类库,会在下文的点对点代码中继续使用,同样的,有其他方法能替换该类库。 在 Eclipse 中创建项目(文件 新建 ) ,命名 为 “ noobchain”。新建一个同名的类。 创建区块链 区块链即为一个 由区块组成的链表或列表。其中的每个区块都包含自己的数字签名、前一区块的数字签名和一些数据 (例如事物)。 图中的 Hash( 哈希 ) 即为数字签名 。 每个区块不仅包含前一区块的 哈希 ,还包含 自己的 哈希 ,根据前一区块的 哈希 计算得到 。如果前一区块的数据变化,则其 哈希 也会变化(因为 哈希 的计算也与区块数据有关),继而影响其后面所有区块的 哈希 。 计算和比较 哈希 可以检查区块链是否无效 。 这意味着什么呢这意味着如果 改变了区块链中的任意数据,将改变签名并 破坏区块链 。 所以首先,创建类 Block 来构造区块链 import java.util.Date; public class Block { public String hash; public String previousHash; private String data; //our data will be a simple message. private long timeStamp; //as number of milliseconds since 1/1/1970. //Block Constructor. public BlockString data,String previousHash { this.data data; this.previousHash previousHash; this.timeStamp new Date.getTime; } } 可以看到 Block 类包含 String 类型的 hash 属性,用来表示数字签名。变量 previousHash表示前一区块的 哈希 ,变量 data 表示区块数据。 接着需要一种方法来生成数字签名 有 很 多 种 密 码 学 算 法 可 供 选 择 , 然 而 SHA256 算 法 最 为 适 合 。 导 入java.security.MessageDigest 来访问 SHA256 算法。 下文中还需要使用 SHA256 算法,所以创建一个 StringUtil 类并定义一个方法以方便使用 import java.security.MessageDigest; public class StringUtil { //Applies Sha256 to a string and returns the result. public static String applySha256String { try { MessageDigest digest MessageDigest.getInstance“SHA-256“; //Applies sha256 to our , byte[] hash digest.digest.getBytes“UTF-8“; StringBuffer hexString new StringBuffer; // This will contain hash as hexidecimal for int i 0; i blockchain new ArrayList; public static void mainString[] args { //add our blocks to the blockchain ArrayList blockchain.addnew Block“Hi im the first block“, “0“; blockchain.addnew Block“Yo im the second block“,blockchain.getblockchain.size-1.hash; blockchain.addnew Block“Hey im the third block“,blockchain.getblockchain.size-1.hash; String blockchainJson new GsonBuilder.setPrettyPrinting.create.toJsonblockchain;System.out.printlnblockchainJson; } } 现在的输出看起来像我们期望的区块链了。 现在需要一种方法来验证区块链的完整性 在 NoobChain 类中创建一个 isChainValid方法,遍历链中所有区块并比较其哈希。该方法需要检查 当前 区块的 哈希值是否等于计算得到的哈希值,以及前一区块的哈希是否等于 当前区块 previousHash 变量的值。 public static Boolean isChainValid { Block currentBlock; Block previousBlock; //loop through blockchain to check hashes forint i1; i blockchain new ArrayList; public static int difficulty 5; public static void mainString[] args { //add our blocks to the blockchain ArrayList blockchain.addnew Block“Hi im the first block“, “0“; System.out.println“Trying to Mine block 1. “; blockchain.get0.mineBlockdifficulty; blockchain.addnew Block“Yo im the second block“,blockchain.getblockchain.size-1.hash; System.out.println“Trying to Mine block 2. “; blockchain.get1.mineBlockdifficulty; blockchain.addnew Block“Hey im the third block“,blockchain.getblockchain.size-1.hash; System.out.println“Trying to Mine block 3. “; blockchain.get2.mineBlockdifficulty; System.out.println“\nBlockchain is Valid “ isChainValid; String blockchainJson new GsonBuilder.setPrettyPrinting.create.toJsonblockchain; System.out.println“\nThe block chain “; System.out.printlnblockchainJson; } public static Boolean isChainValid { Block currentBlock; Block previousBlock; String hashTarget new Stringnew char[difficulty].replace\0, 0; //loop through blockchain to check hashes forint i1; i blockchain.size; i { currentBlock blockchain.geti; previousBlock blockchain.geti-1; //compare registered hash and calculated hash ifcurrentBlock.hash.equalscurrentBlock.calculateHash { System.out.println“Current Hashes not equal“; return false; } //compare previous hash and registered previous hash ifpreviousBlock.hash.equalscurrentBlock.previousHash { System.out.println“Previous Hashes not equal“; return false; } //check if hash is solved ifcurrentBlock.hash.substring 0, difficulty.equalshashTarget { System.out.println“This block hasnt been mined“; return false; } } return true; } } 运行后的结果如图 对每个区块采矿 需要 消耗一些时间 ( 大约 3 秒 ) 测试中应该选取不同的难度值来观察对采矿时间的影响。 如果有人篡改了 区块链中的数据  他们的 区块链 将 会无效。  他们 将无法创建一个更长的区块链。  你网络中 诚实的区块链将 在最长的链上 有一个时间优势。 一个被篡改的区块链将不可能 赶上一个更长且有效的 区块 链。 除非他们的计算速度比你网络中所有节点的计算速度 的总和 还要快。 大概需要一台未来的量子计算机之类的。 恭喜你,你已经完成了你的 基础区块链 你的区块链  由存储数据的 区块构成。  有一个数字签名将区块链 接起来。  需要工作量证明来验证新的区块。  可以验证 数据 是否 有效且未被篡改。 下载项目文件 https// 未完待续 附录 区块链领域常见术语 1 区块链的工作量证明 POW 一个将挖掘能力与计算能力联系起来的系统。块必须被散列,这本身就是一个简单的计算过程,但是在散列过程中增加了一个额外的变量,使其变得更加困难。当一个块被成功散列时,散列必须花费一些时间和计算量。因此,散列块被认为是工作量的证明 。 2 节点 Node 连接到区块链网络的任何计算机 3 挖掘 Mining 验证交易并将其添加到区块链的过程 4 莱特币 Litecoin 基于 Scrypt 工作量证明网络的点对点加密货币。有时被称为比特币黄金中的白银 。 5 难度 Difficulty在 POW 挖掘中,验证区块链网络中的区块是非常困难的。在比特币网络中,采矿难度调整为每隔 2016 个块进行验证,以 保持块验证时间在十分钟 。 6 私钥 Private key 一串数据,表明您可以访问特定钱包中的比特币。私钥可以被认为是一个密码 , 私钥绝不能透露给任何人,因为密钥允许你通过加密签名从你的比特币钱包里支付比特币 7 钱包 Wallet 一个包含私钥集合的文件

注意事项

本文(用java创建你的第一个区块链.pdf)为本站会员(罗比斯克)主动上传,环境100文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知环境100文库(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2017 环境100文库版权所有
国家工信部备案号:京ICP备16041442号-6

收起
展开