译文出自:登链翻译计划
译者:翻译小组
校对:Tiny熊
欢迎来到学习Solidity系列的另一部分。在上一篇文章,我们讨论了如何从智能合约中创建另一个智能合约。今天,我们将研究这种情况下的典型用例。
什么是工厂模式?
工厂模式的想法是拥有一个合约(工厂),该合约将承担创建其他合约的任务。在基于类的编程中,此模式的主要动机来自单一职责原则(一个类不需要知道如何创建其他类的实例),并且该模式为构造函数提供了一种抽象。
UMLdiagramforfactorymethod
图片来自Wikipedia.
VanEck和21Shares暂停2个Terra ETP的交易:5月14日消息,Terra (LUNA) 和TerraUSD (UST) 的螺旋式下跌导致VanEck和21Shares暂停了两种基于Terra的ETP的交易,分别是21Shares的Terra ETP(股票代码LUNA:SW)和VanEck的Terra ETN(股票代码VLNA:GR),两家公司都表示,他们正在与LUNA和UST一起监测情况,以确定下一步行动。(EWN)[2022/5/14 3:16:19]
为什么要在Solidity中使用工厂模式?
在Solidity中,出于以下原因之一,你可能要使用工厂模式:
如果要创建同一合约的多个实例,并且正在寻找一种跟踪它们并简化管理的方法。```contractFactory{Childchildren;functioncreateChild(uintdata){Childchild=newChild(data);children
去中心化计算平台DFINITY代币ICP空投将以12个月分发:去中心化计算平台DFINITY的互联网计算机宣布此前为用户空投的ICP代币将以12个月等额的方式分发,申领者需要通过AML/KYC程序,这些代币将转账至用户的CoinList账户,第一批ICP将会在创世解锁后收到。[2021/5/10 21:44:28]
}contractChild{uintdata;constructor(uint_data){data=_data;}}*节省部署成本:你可以先部署工厂,之后在使用时再来部署其他合约。*提高合约安全性(请参阅本文).##如何与已部署的智能合约进行交互在深入探讨如何实现工厂模式的细节之前,我想澄清一下我们与已部署的智能合约进行交互的方式。工厂模式是用来创建子合约的,并且我们可能希望调用它们的某些函数以更好地管理这些合约。调用部署的智能合约,需要做两件事:1.合约的ABI(提供有关函数签名的信息)。如果合约在同一个项目中。你可以使用import关键字将其导入。2.部署合约的地址。举个例子:
韩国5大加密交易所将成立联合协商机构并制定代币共同审查标准:6月13日消息,韩国5大加密交易所(Upbit、Bithumb、Coinone、Korbit和Gopax)在今日“恢复虚拟资产市场公平和投资者保护”会议上,宣布将于下半年成立联合协商机构,以防止Luna事件再次发生,并于今年下半年启用上币等相关的共同审查标准。
在此联合协商机构中,5大加密交易所的CEO将参与交易支持、市场监控以及合规监控相关工作组。从9月起,联合协商机构将制定虚拟货币预警系统和代币下架标准,并提供白皮书、评估报告等虚拟货币信息。此外,通过应用共同制定的危机应对计划,在发生Luna危机等代币运行危机时,该机构将制定计划讨论是否允许虚拟货币的存取款及交易,以及下架代币的日期等共同应对措施。此外,如果通过引入预警系统判断流通或价格的快速波动导致市场秩序受损的风险较高,各交易所则根据共同标准发布投资者预警。(韩联社|)[2022/6/13 4:22:33]
contractA{addressbAddress;constructor(addressb){bAddress=b;}functioncallHello()externalviewreturns(stringmemory){Bb=B(bAddress);//转换地址为合约类型returnb
}contractB{stringgreeting="helloworld";functionsayHello()externalviewreturns(stringmemory){returngreeting;}}
在Remix中,首先部署合约B,然后复制其地址,并在部署时将其提供给A的构造函数。现在你可以调用`callHello()`函数,你将获得合约B的`sayHello()`函数的结果。##普通工厂模式在此模式下,我们创建具有创建子合约函数的工厂合约,并且可能还会添加其他函数来有效管理这些合约(例如,查找特定合约或禁用合约)。在create函数中,我们使用`new`关键字来部署子合约。
contractFactory{Childpublicchildren;uintdisabledCount;eventChildCreated(addresschildAddress,uintdata);functioncreateChild(uintdata)external{Childchild=newChild(data,children
functiongetChildren()externalviewreturns(Childmemory_children){_children=newChild(children
}}functiondisable(Childchild)external{children
}contractChild{uintdata;boolpublicisEnabled;uintpublicindex;constructor(uint_data,uint_index){data=_data;isEnabled=true;index=_index;}functiondisable()external{isEnabled=false;}}
```
本文来源于非小号媒体平台:
登链社区
现已在非小号资讯平台发布105篇作品,
非小号开放平台欢迎币圈作者入驻
入驻指南:
/apply_guide/
本文网址:
/news/9569964.html
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场
上一篇:
币安为何推出第三条链?这对BNB意味着什么?
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。