BITGET交易所官网BITGET交易所官网

理财、金融、保险、贷款、虚拟货币
等知识简单易懂一秒就通!

以太坊智能合约的生命周期

最近在写一个募资合约时,发现自己对合约的生命周期还不是很了解,该用一个合约管理所有发起的募资,还是一个募资发起一个合约呢?因此查询了官网跟几文章,然后在testnet上测试了一下。

以物件导向来比喻

以物件导向来比喻的话,可以把一个contract 想像成一个class,contract 可以被多次部署在网路上,每个实体都会有不同的地址,这个地址以后可以用来和这个地址指定的合约实体交互。因此每个部署的合约可以想成是物件导向的物件实体,每个合约实体都有自己的状态(内部永久性的资料)。

合约的建构函数在合约部署到网路上时被呼叫,这也是唯一次被呼叫。所以,所有的初始化都应该在建构函数里,在部署时只被执行一次。在建立完合约之后,会有一个合约地址可以使用,在合约的有效期限之内可以用来和这个合约实体交互。

可以在合约内透过调用一个包括selfdestruct 的函数来销毁合约,这个函数就类似于物件导向里面解构函数destructor 的概念。

多合约

如果你的方案需要一个以上的合约来执行任务,就必需独立地部署每个合约。A合约跟B合约沟通的唯一方法就是知道B合约的地址。

如果A合约需要跟不同的B合约实体进行交互,在调用相关函数时必须传入B合约实体的地址。如果A合约只跟一个B合约实体通讯,直接在A合约建构函数里传入B合约的实体地址,让A合约存为变数即可。

讯息传送者的地址

如果A合约里的A函数, 调用B合约里的B函数,在B函数的环境里msg.sender 就是A合约的地址,如果你想在B函数里面确定交易的发起者,应该使用tx.origin。如果你从A函数里调用同样是A合约的A1函数, msg.sender 就是发起交易的地址跟tx.origin 一样。

结论

对于我现在这个募资项目来说,一个合约实体等同于一个独立的募资,显然比较合理。然后再用其他方式来管理这些合约实体,比如说一个管理类别的合约。

相关推荐
本文地址: http://www.1mt.cn/542673
文章来源: 焕焕
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。 未经允许不得转载:
分享到: 更多
以太坊智能合约的生命周期文档下载: PDF DOC TXT

BITGET交易所官网 | 理财、金融、保险、贷款、虚拟货币 等知识简单易懂一秒就通!

联系站长网站公告