DRE:跟我学 Solidity :工厂模式

译文出自:登链翻译计划

译者:翻译小组

校对:Tiny熊

欢迎来到学习Solidity系列的另一部分。在上一篇文章,我们讨论了如何从智能合约中创建另一个智能合约。今天,我们将研究这种情况下的典型用例。

什么是工厂模式?

工厂模式的想法是拥有一个合约(工厂),该合约将承担创建其他合约的任务。在基于类的编程中,此模式的主要动机来自单一职责原则(一个类不需要知道如何创建其他类的实例),并且该模式为构造函数提供了一种抽象。

UMLdiagramforfactorymethod

图片来自Wikipedia.

数据:币印比特币储备已降至约6000枚:金色财经报道,据Cryptoslate披露,当前币印Poolin矿池的比特币储备已经减少至约6000枚,此外Cryptoslate还称近几个月来比特币矿工从铭文和BRC-20代币热潮中获得了可观收益,挖矿费用也在上涨,目前很大一部分矿工余额正在转移到加密货币交易所。[2023/6/22 21:53:00]

为什么要在Solidity中使用工厂模式?

在Solidity中,出于以下原因之一,你可能要使用工厂模式:

如果要创建同一合约的多个实例,并且正在寻找一种跟踪它们并简化管理的方法。```contractFactory{Childchildren;functioncreateChild(uintdata){Childchild=newChild(data);children

纽约总检察长命令Coin Cafe退还430万美元的欺诈性费用:金色财经报道,根据纽约总检察长办公室周四的声明,加密货币交易平台Coin Cafe将向被欺诈的投资者偿还430万美元,该声明指责该公司误导客户收取“过高且未披露”的费用。该公司于2023年1月获得纽约比特币许可证,在其网站上宣传免费的钱包存储,但它收取的费用有时完全清空了投资者的账户,调查得出结论。在与州政府达成的协议中,Coin Cafe正在偿还那些受到伤害的人,包括纽约的340名投资者。

希望获得退款的Coin Cafe客户必须在未来12个月内提出申请。根据周四的协议,该平台还非法未向司法部长注册为商品经纪商。检察长最近一直在打击违反加密货币注册的行为。[2023/5/19 15:12:29]

}contractChild{uintdata;constructor(uint_data){data=_data;}}*节省部署成本:你可以先部署工厂,之后在使用时再来部署其他合约。*提高合约安全性(请参阅本文).##如何与已部署的智能合约进行交互在深入探讨如何实现工厂模式的细节之前,我想澄清一下我们与已部署的智能合约进行交互的方式。工厂模式是用来创建子合约的,并且我们可能希望调用它们的某些函数以更好地管理这些合约。调用部署的智能合约,需要做两件事:1.合约的ABI(提供有关函数签名的信息)。如果合约在同一个项目中。你可以使用import关键字将其导入。2.部署合约的地址。举个例子:

Signature Bank与Silvergate向美国联邦住房贷款银行贷款总额超100亿美元:金色财经报道,Signature Bank 在 2022 年第四季度向当地住房贷款银行贷款近 100 亿美元,Silvergate Capital 也向住房贷款银行贷款至少 36 亿美元。美国联邦住房贷款银行是美国根据《1932 年住房贷款银行法》建立的住房金融机构。全美共有 12 家。该银行目前正在将资金注入银行系统,使银行通过政府的隐性支持获得低利率贷款。[2023/1/22 11:25:41]

contractA{addressbAddress;constructor(addressb){bAddress=b;}functioncallHello()externalviewreturns(stringmemory){Bb=B(bAddress);//转换地址为合约类型returnb

以太坊L2网络总锁仓量达到59.8亿美元:金色财经消息,L2BEAT数据显示,截至目前,以太坊Layer2上总锁仓量为59.8亿美元。近7日涨幅10.36%,其中锁仓量最高的为扩容方案Arbitrum,约28.9亿美元,占比47.12%。其次是Optimism,锁仓量18.1亿美元,占比32.43%。dYdX占据第三,锁仓量5.18亿美元,占比9.22%。[2022/8/13 12:22:43]

}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意味着什么?

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

[0:0ms0-0:645ms