二维码

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

1095 人阅读 | 时间:2021年01月15日 01:12
4.2 为所有权合约创建客户端 - 数据结构 - 机器学习 #daohang ul li t,.reed .riqi,a.shangg,a.xiatt,a.shangg:hover,a.xiatt:hover,a.shang,a.xiat,a.shang:hover,a.xiat:hover,.reed-pinglun-anniu,span.now-page,#daohangs-around,#caidan-tubiao,#daohangs,#daohangs li,#btnPost{background-color:#D10B04;} .dinglanyou1 h3{border-bottom:3px solid #D10B04;} #dibuer{border-top:2px solid #D10B04;}.cebianlan .rongqi h3{border-bottom:1px solid #D10B04;} #edtSearch{border:1px solid #D10B04;} #daohang .zuo ul li{border-right:1px solid #;} #daohang ul li t a{border-top:1px solid #;border-right:1px solid #D10B04;} #daohang ul li t a:hover{border-right:1px solid #;} #daohang .you ul li a:hover,#daohang .zuo ul li a:hover,.reed-pinglun-anniu:hover{background-color:#;} a:hover,.reed h6 a:hover,#dibuer a:hover,.reed .riqiding,.cebianlan .rongqi li a:hover,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.shu a,#pinglun-liebiao ul.fubens li.depth-1 dl dd span.huifuliuyan a:hover,.reed-biaoti h6 span{color:#D10B04;} .reed .kan a{color:#0A0AF5;}.reed .kan a:hover{color:#D10101;} @media screen and (max-width:1492px){a.shang,a.xiat{background:none;} a.xiat:hover,a.shang:hover{background-color:#f9f9f9;background-image:none;text-decoration:none;}} var _hmt = _hmt || [];(function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?b19db5ba3b437a9e8698d2bc8fc64334"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?2d748c9763cfc72fb7d1ccab29f0770d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f6d451f3f1be23f3abf240c64c469c1b"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();

当前位置:首页 » 区块链精品文章 » 正文

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646201", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646162", container: s }); })();

4.2 为所有权合约创建客户端

1143 人参与  2018年09月15日 15:19  分类 : 区块链精品文章  评论

在前一章中,我们为所有权合约编写了Solidity代码;在前一章和本章中,我们学习了web3.js的有关知识和使用web3.js调用合约的方法。现在是时候为智能合约创建客户端了,这样方便用户使用。

创建一个客户端,用户从中选择一个文件,输入所有者细节,然后按下Submit按钮广播交易,用文件哈希和所有者的细 节调用合约的set方法。一旦交易被成功广播,将显示交易哈希。用户还能够选择一个文件,并从智能合约中得到所有者的细节。客户端还将实时显示最新挖出的 set交易。

我们将在前端使用sha1.js获取文件哈希,使用jQuery进行DOM操纵,并使用Bootstrap 4创建一个反应层(responsive layout)。在后端使用express.js和web3.js。我们将使用socket.io,这样不需要前端间隔相等的时间请求数据,后端就把最近 挖出的交易推到前端。

web3.js可以在前端使用,但对于应用是个安全漏洞。也就是说,我们在使用存储在geth中的账户,并把geth节点URL显示给前端,这将使存储在那些账户中的以太币面临风险。

4.2.1 项目结构

在本章的练习文件中,将发现两个目录:Final和Initial。Final包含项目的最终源代码,而Initial包含可以用于迅速创建应用的空的源代码文件和库。

为了测试Final目录,需要在其中运行npm install,并把app.js中硬编码的合约地址替换为在部署合约之后得到的合约地址。然后,使用Final目录中的node app.js命令运行该应用。

在Initial目录中,将发现一个public目录和两个文件(app.js和package.json)。package.json包含应用的后端相关内容,app.js包含应用的后端源代码。

public目录包含与前端相关的文件。在public/css中会发现bootstrap.min.css,它是 Bootstrap库;在public/html中会发现index.html,所应用的HTML代码放在这里;在public/js目录中将发现 jQuery、sha1和socket.io的JS文件。在public/js中还会发现一个main.js文件,应用的前端JS代码放在这里。

4.2.2 创建后端

先创建App后端。首先,在initial目录中运行npm install,为后端安装所需相关内容。其次,在进行后端编码之前,确保geth运行时启用rpc。如果是在私有网络上运行geth,要确保启用 mining。最后,确保账户0存在并被解锁。可以在私有网络上运行geth,这时需要启用rpc和mining,并解锁账户0:

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

编码开始前最后需要做的一件事是,使用在前一章中见到的代码部署所有权合约,并复制合约地址。现在创建一个单独的服务端,它将为浏览器提供HTML,并接收socket.io连接:

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

这里把运行在端口8080上的两个服务端express和socket.io合并成一个服务端。现在创建路径以用于静态文件和App主页。相关代码如下:

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

这里使用了express.static中间件,用于在公共目录中发现静态文件。

现在连接到geth节点,并获取已部署合约的引用,这样可以发送交易并监听事件。相关代码如下:

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

上述代码就是用得到的合约地址替换原有的合约地址。

现在创建广播交易和获取文件信息的路径。相关代码如下:

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

其中,“/submit”路径用于创建和广播交易。获取交易哈希之后,把它发送给客户端。然后等待挖出交易。“/getInfo”路径用于调用节点自身的合约get方法,而非创建交易。它仅仅发送回所得到的回应。

现在监听来自于合约的事件,并向所有客户端广播。相关代码如下:

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

这里需要检查一下状态是否为true,如果为true,才能向所有连接的socket.io客户端广播事件。

4.2.3 创建前端

让我们从应用的HTML开始创建前端。把下面的代码放入index.html文件:

执行过程如下:

1)显示Bootstrap的文件输入框,这样用户可以选择一个文件。

2)显示一个文本框,用户可以输入所有者的细节。

3)得到两个按钮。一个用于存储文件哈希和合约中的所有者细节,另一个用于从合约中获取文件信息。单击Submit按钮触发submit()方法,单击Get Info按钮触发getInfo()方法。

4)得到一个显示信息的报警框。

5)显示一个有序列表,以显示用户在该页面上时被挖出的合约交易。

接下来为getInfo()和submit()方法编写实现,与服务端建立socket.io连接,并从服务端监听socket.io信息。

执行过程如下:

1)定义submit()方法。在submit方法中,确保选择一个文件,且文本框不为空,然后读取文件内容作为数组 缓存,并传送数组缓存给sha1.js显示的sha1()方法,以获取数组缓存中的内容哈希。得到哈希之后,使用jQuery发出一个AJAX请求给 “/submit”路径,然后在报警框中显示交易哈希。

2)定义getInfo()方法。该方法首先确定选中一个文件,然后就像之前一样生成哈希,并发出请求到“/getInfo”端点,以得到关于那个文件的信息。

3)使用socket.io库显示的io()方法建立socket.io连接,然后等待事件连接到触发器——这表示连接已经建立。在连接建立之后,监听来自服务端的信息,并向用户显示交易细节。

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习 之所以不在以太坊区块链中存储文件,是因为存储文件很昂贵——它需要大量gas。对于本节的示例子,其实不需要存储文件,因为网络中的节点将可以看见文 件。因此,如果用户希望文件内容是秘密的,其实是做不到的。这里的应用是想证明一个文件的所有权,而不是像云服务那样存储和服务文件。

4.2.4 测试客户端

运行app.js节点,以运行应用服务端。打开浏览器,访问http://localhost:8080/ ,可以看到图4-1所示的界面。

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

图 4-1

现在选择一个文件,输入所有者姓名,单击Submit按钮,界面将变为图4-2所示的样子。

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

图 4-2

在这里可以看到显示交易哈希。现在等待,直到交易被挖出。一旦挖出,就可以在当前交易列表中看到交易,如图4-3所示。

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

图 4-3

现在再次选择同一个文件,单击Get Info按钮,界面如图4-4所示。

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

4.2 为所有权合约创建客户端 - 数据结构 - 机器学习

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=564

(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdPic":"","bdStyle":"0","bdSize":"16"},"share":{},"image":{"viewList":["qzone","tsina","tqq","renren","weixin"],"viewText":"分享到:","viewSize":"16"},"selectShare":{"bdContainerClass":null,"bdSelectMiniList":["qzone","tsina","tqq","renren","weixin"]}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
区块链是什么  

微信号:qq444848023    QQ号:444848023

加入【我是码农】QQ群:864689844(加群验证:我是码农)

<< 上一篇 下一篇 >>
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646186", container: s }); })();
(function() { var s = "_" + Math.random().toString(36).slice(2); document.write('
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646175", container: s }); })();
搜索

网站分类

标签列表

最近发表

    (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https'){ bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else{ bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!

jQuery(document).ready(function($){ /* prepend menu icon */ $('#daohangs-around').prepend('
'); /* toggle nav */ $("#caidan-tubiao").on("click", function(){ $("#daohangs").slideToggle(); $(this).toggleClass("active"); }); });

©著作权归作者所有:来自ZhiKuGroup博客作者没文化的原创作品,如需转载,请注明出处,否则将追究法律责任 来源:ZhiKuGroup博客,欢迎分享。

评论专区
  • 昵 称必填
  • 邮 箱选填
  • 网 址选填
  • 验证码
◎已有 0 人评论
搜索
作者介绍
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×