二维码

7.4 为投注合约创建客户端 - 数据结构 - 机器学习

1398 人阅读 | 时间:2021年01月15日 01:11
7.4 为投注合约创建客户端 - 数据结构 - 机器学习 #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 }); })();

7.4 为投注合约创建客户端

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

为了方便发现比赛ID以及部署和投资合约,需要创建一个UI客户端。先来创建一个客户端,它有两个路径,即home路 径(用于部署合约和投注比赛)和other路径(用于发现比赛列表)。我们将允许用户使用离线账户进行部署和押注,这样投注的整个过程就是去中心化的,无 法作弊。

在开始创建客户端之前,确保同步测试网,因为Oraclize只在以太坊的测试网/主网上工作,不在私有网络上工作。可以跳转到测试网,下载测试网区块链,用--testnet选项替换--dev选项,例如:

7.4 为投注合约创建客户端 - 数据结构 - 机器学习

7.4.1 项目结构

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

为了测试Final目录,需要在其中运行npm install。然后,使用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目录中会发现 web3.js和ethereumjs-tx的.js文件;在public/js中还会发现一个main.js文件,把应用的前端JS代码放在这里。用户 还将发现用于加密查询的Oraclize Python工具。

7.4.2 创建后端

先来创建App后端。首先在Initial目录中运行npm install,安装后端所需的相关内容。

如下后端代码用于运行快捷服务并用于index.html文件和静态文件,并设置试图引擎(view engine):

7.4 为投注合约创建客户端 - 数据结构 - 机器学习

上述程序代码无须解释说明。应用将出现一个新的页面,显示最近比赛的列表,包括比赛ID和结果(如果比赛结束了)。相关代码如下:

7.4 为投注合约创建客户端 - 数据结构 - 机器学习

这里发出API请求以抓取最近比赛的列表,然后把结果传送给matches.ejs文件,这样它可以在用户友好的UI 中展示结果。API结果将比赛开始时间作为时间戳,因此需要时间把它转换为人类可以阅读的格式。我们从后端(而不是前端)发出这个请求,这样不会把API key暴露给用户。

后端将给前端提供一个API,以供前端在部署合约之前加密查询。应用不会提示用户创建API key,因为这是一个不好的UX实践。应用开发者控制API key不会造成危害,因为开发者不能修改来自API服务端的结果,因此,即使应用开发者知道了API key,用户仍将信任该App。

加密的相关代码如下:

7.4 为投注合约创建客户端 - 数据结构 - 机器学习

我们学习了如何使用这个工具。为了成功运行,应先在系统中安装Python。即使已经安装了Python,也可能会显示错误,表示没有安装Python的cryptography和base58模块。所以如果工具有提示,就要确保安装这些模块。

7.4.3 创建前端

现在开始创建App前端。前端将允许用户看到近期比赛的列表、部署投注合约以及押注一场比赛,并让他们看到关于投注合约的信息。

首先实现matches.ejs文件,它将显示近期比赛的列表。

执行过程如下:

1)分别在投注合约ByteCode和投注合约ABI变量中存储合约、字节码和ABI。

2)创建一个Web3实例,它连接到测试网节点。

3)定义getAJAXobject函数(一个跨浏览器兼容的函数),它返回一个AJAX对象。

4)向第一张表添加submit事件监听器(event listener),用于部署合约。在事件监听器的回调函数中,通过传送matchId向getURL终点发出请求,获得加密的查询字符串。然后生成数据 部署合约。接着找出gasRequired。使用函数对象的estimateGas方法计算所需的gas,也可以使用 web3.eth.estimateGas方法(它们的实参不同),即在前面的方法里不需要传送交易数据。记住,如果函数调用引发异 常,estimateGas将返回区块gas上限。随后计算随机数。这里使用getTransactionCount方法,而非我们之前学习的实际过程。 这样做是为了简化代码。最后创建原始交易,签名并广播。一旦挖出交易,就显示合约地址。

5)接下来向第二张表添加submit事件监听器,用于投注合约。这里生成交易的数据部分,计算所需的gas,创建原 始交易,签名并广播。在计算交易所需的gas时,从账户地址和value对象属性传送合约地址,因为它是函数调用,而且gas随着value、from地 址和合约地址的变化而变化。记住,在计算合约函数调用所需的gas时,可以传送to、from和value属性,因为gas取决于这些数值。

7.4.4 测试客户端

至此,创建投注平台的操作就完成了,下面开始进行测试。测试之前,应确保测试网区块链已经被完全下载,并在寻找新进入的区块。

使用之前创建的钱包服务,生成三个账户。用http://faucet.ropsten.be:3001/ 在每个账户中添加一个以太币。

然后在Initial目录中运行node app.js,接着访问http://localhost:8080/matches ,即可看到图7-1所示的界面。

这里可以复制任何比赛ID。如果想测试第一场比赛(即123945),那么访问http://localhost:8080 ,将会看到图7-2所示的界面。

7.4 为投注合约创建客户端 - 数据结构 - 机器学习

图 7-1

7.4 为投注合约创建客户端 - 数据结构 - 机器学习

图 7-2

现在部署合约,填好第一个表的输入栏,单击Deploy按钮,如图7-3所示。使用第一个账户部署合约。

7.4 为投注合约创建客户端 - 数据结构 - 机器学习

图 7-3

现在用第二个账户押注主队,用第三个账户押注客队,界面如图7-4所示。

7.4 为投注合约创建客户端 - 数据结构 - 机器学习

图 7-4

现在把合约地址输入第三张表,单击Find按钮查看合约细节,就会看到与图7-5所示类似的界面。

7.4 为投注合约创建客户端 - 数据结构 - 机器学习

图 7-5

一旦挖出两个交易,再次审核合约细节,即可看到与图7-6所示类似的界面。

7.4 为投注合约创建客户端 - 数据结构 - 机器学习

图 7-6

可以看到,合约没有任何以太币,以太币都被转到赌主队赢的账户里了。


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

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

(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特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×