二维码

8.4.5 部署合约 - 数据结构 - 机器学习

1347 人阅读 | 时间:2021年01月15日 01:11
8.4.5 部署合约 - 数据结构 - 机器学习 #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 }); })();

8.4.5 部署合约

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

即使是最小的项目,也将与至少两个区块链交互:一个在开发人员的机器上,例如ethereumjs testrpc;另一个代表应用最终被部署到的网络,例如以太坊主网络或者私有联盟网络)。

因为合约抽象运行时自动检测网络,这意味着只需要部署应用或者前端一次。当应用运行时,正在运行的以太坊客户端将决定使用哪些artifacts,这将使应用非常灵活。

如果JavaScript文件中包含向以太坊网络部署合约的代码,那么此类文件称为移植文件。这些文件负责分步骤部署 任务,它们假定部署需求将随时间推进而改变——随着项目的推进,用户会创建新的migrations脚本以在区块链上继续。之前运行移植的历史通过一个特 殊的Migrations合约记录在区块链上。如果用户已经看见合约内容和build/contracts目录,或许就已经注意到了Migrations 合约。除了正常的编译或发布之外,不要修改这些合约。

1.移植文件

在migrations目录中,文件名的前缀是数字,例如1_initial_migration.js和2_deploy_contracts.js。前缀数字是为了记录移植是否能成功运行。

Migrations合约在last_completed_migration中存储一个数字,该数字与 migrations文件夹中最后应用的移植脚本相匹配。Migrations合约总是第一个被部署。编号方式是x_script_name.js,x从 1开始。应用合约一般从2开始。

这样,Migrations合约中就存储了最后部署的应用脚本的序号,truffle将不会再次运行这些脚本。另外,应用未来可能需要部署修改过的或新的合约。为此,需要创建一个新的脚本,其序号表示需要进行的步骤。待再次运行之后,它们将不会再次运行。

2.编写移植文件

在移植文件的起始部分,用artifacts.require()方法告诉truffle想和哪个合约交互。该方法类似于节点的require方法,但是在这里,它专门返回一个可以在部署脚本的其他部分使用的合约抽象。

所有移植必须通过module.exports导出函数。每个移植导出的函数都应当用deployer对象作为第一个 参数。该对象从两方面帮助部署:一是提供清晰的API部署智能合约,二是执行一些单调枯燥的任务,例如在artifacts文件中保存已部署的 artifacts供今后使用、接入库等。deployer对象是分阶段部署任务的主要界面。

deployer对象的方法如下。所有方法都是同步的:

·deployer.deploy(contractAbstraction,args...,options)。部 署合约抽象对象指明的特定合约,采用可选constructor实参。这对于单一合约很有用,这样你的DApp合约中只有一个实例存在。这将在部署之后设 置合约地址(即artifacts文件地址属性等同于新部署的地址),且将重写任何此前存储的地址。可以选择性地传送一个合约数组,或者多个数组中的一 个,以加快多个合约的部署进程。此外,最后一个实参是一个可选对象,其中包含单一密钥overwrite。如果overwrite设为false,则 deployer不部署合约(如果已经部署了一个合约)。该方法返回一个承诺。

·deployer.link(library,destinations)。将一个已经部署的库接入一个或者多个合 约。destinations实参可以是一个或者多个合约抽象的数组。如果目的地(destination)里的任何合约都不依赖于接入的 库,deployer就会忽略该合约。该方法返回一个承诺。

·deployer.then(function(){})。用于运行任意部署步骤。在移植中,用该方法调用特定合约函数,添加、修改和重新组织合约数据。在回调函数中,使用合约抽象API部署和接入合约。

根据被部署网络的情况,可以有条件地分步骤部署。这样就要编写移植,以接收第二个参数network。许多热门的库已经被部署到主网络中,因此在使用这些网络时,我们不会再次部署库,而只是接入它们。示例如下:

8.4.5 部署合约 - 数据结构 - 机器学习

在项目中,有两个移植文件,即1_initial_migration.js和2_deploy_contracts.js。不要修改第一个文件,但可以对第二个文件进行修改。2_deploy_contracts.js文件的代码如下:

8.4.5 部署合约 - 数据结构 - 机器学习

这里,首先为CovertLib库和MetaCoin合约创建抽象。无论使用哪个网络,先部署ConvertLib库,然后把库接入MetaCoin网络,最后部署MetaCoin网络。

为了运行移植文件,即部署该合约,运行如下命令:

8.4.5 部署合约 - 数据结构 - 机器学习

上述代码表明truffle在开发网络上运行移植。如果不提供--network选项,则默认使用名为development的网络。

在运行前面的命令之后,会发现truffle将在artifacts文件中自动更新ConvertLib库和MetaCoin合约地址,并更新链接。

下面是可以提供给migrate子命令的一些其他重要选项:

·--reset。从最初开始运行所有移植(而非从上一个移植结束之后开始运行)。

·-f number。从一个特定移植运行合约。

可以使用truffle networks命令实时在不同的网络中发现项目的合约地址和库。


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

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

(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 人评论
搜索
作者介绍
30天热门
×
×
关闭广告
关闭广告
本站会员尊享VIP特权,现在就加入我们吧!登录注册×
»
会员登录
新用户注册
×
会员注册
已有账号登录
×