56星座屋
当前位置: 首页 星座百科

智能合约怎么创建合约(什么是可升级的智能合约)

时间:2023-06-13 作者: 小编 阅读量: 1 栏目名: 星座百科

通过确保事情按照预定的规则运行,智能合约强制执行秩序。没有智能合约,就没有加密代币、NFT,也没有DApps。EVM的基本规则之一是,一旦合同被部署,它就不能被改变。当然,除了使用OpenZeppelin,我们还会严重依赖Moralis。因此,我们将向您展示如何创建Moralis服务器、初始化MoralisSDK,并介绍以太坊dApp样板的初始设置。另一方面,如果您已经有一个活跃的Moralis帐户,只需登录即可。

项目源码:https://github.com/YosephKS/moralis-upgradeable-smart-contracts

精通智能合约的开发者努力将合约提升到新的水平。这其中包括修改或升级智能合约的方法。然而,"可升级的智能合约 "的概念,即使对有经验的人来说,也可能是具有挑战性的理解。因此,请记住,可升级智能合约绝对不属于 "初学者 "的范畴。然而,即使你是一个初学者,这篇文章也会非常有用。那么,什么是可升级的智能合约?跟随本指南,我们将探索可升级智能合约的基本原理,并看看它们是如何工作的。

接下来,你将首先了解什么是可升级的智能合约以及它们的功能。然后,我们会看一下transparent 代理与upgradeable 代理。此外,我们将解释如何使合约可升级,并解决这些类型的合约的主要限制。尽管如此,你将有机会承担一个实例项目。反过来,你将有机会跟随我们的带领,创建自己的NFT铸币DApp[1](去中心化的应用程序)。后者将包含一个智能合约,你将对其进行升级。因此,你将正确地学习如何与可升级的智能合约一起工作。在这一过程中,你会了解到最终的Web3[2]开发平台Moralis(又称加密货币的Firebase)。这个优秀的工具使你能够轻松覆盖所有与区块链相关的后端需求。因此,今天一定要创建你的Moralis账户[3]。

如前所述,可升级的智能合约可能很难首次理解。所以,建议先学习一些基础知识。因此,在前进之前,我们建议了解 "Web3是如何工作的?","什么是Solidity?"和 "什么是智能合约?"这些问题。

什么是可升级的智能合约?

你可能知道,智能合约是所有可编程区块链(如以太坊上)的一个重要组成部分。通过确保事情按照预定的规则运行,智能合约强制执行秩序。没有智能合约,就没有加密代币、NFT,也没有DApps。但是,什么是可升级的智能合约?嗯,首先,你需要注意,在这种情况下,"可升级 "这个词并不意味着可变异。EVM的基本规则之一是,一旦合同被部署,它就不能被改变。相反,可升级的智能合约使用特殊的代理模式。后者涉及部署代理合同和执行合同(逻辑合同)。

可升级智能合约如何工作?

看上面的示意图,你可以看到用户通过代理合同与逻辑合同进行互动。由于代理合同能够存储逻辑合同的地址,这才成为可能。然后,我们通过部署一个新的逻辑合约来整合升级。当然,我们也需要在代理合同中更新逻辑合同的相关值,以实际实现升级。

有许多代理模式可用,它们可以用来创建可升级的合约。此外,虽然也有很多类型的代理模式,但大多数代理模式都使用transparent 透明代理和UUPS(通用可升级代理标准)。幸运的是,这两种类型在OpenZeppelin也有提供,这让开发者的工作变得简单了许多。此外,这也是一个捷径,在我们进行一个例子项目时,你会了解更多。

透明代理与UUPS代理

如上所述,透明和 UUPS 代理模式是最常见的两种类型。虽然这两种类型都遵循相同的基本原则(如上所述),但它们的设计却截然不同。因此,我们需要对它们进行快速比较。以下是两种代理模式类型各自的一些主要特征:

如何使智能合约可升级?

至此,您知道什么是可升级合约,它们是如何工作的,以及两种主要的代理模式类型是什么。因此,您已准备好学习如何使合同可升级。而且,如上所述,我们不需要从头开始。相反,我们可以使用 OpenZeppelin 实现。因此,我们不需要自己构建代理模式。考虑到这一点,以下是我们必须完成的步骤以使合同可升级:

  1. 1. 首先,我们需要继承一个可初始化的合约。这是通过一行简单的代码完成的:

contract ExampleContractName is initializable {}

默认情况下,上述代码行用于透明代理模式。但是,在使用 UUPS 代理模式时,我们需要添加“UUPSUpgradable”。因此,这是在这些情况下使用的代码行:

contract ExampleContractName is initializable, UUPSUpgradable {}

  1. 1. 接下来,我们需要将构造函数更改为初始化程序。这意味着我们从“constructor () {}”到“function initialize() public initializer {}”。另外,请注意函数的名称不必是“initialize”。但是,“initializer {}”部分是必不可少的。
  2. 2. 然后,我们需要将所有 OpenZeppelin 合约库更改为其可升级版本。反过来,我们确保我们的可升级智能合约使用升级的库。这里有些例子:
  1. 1. 展望未来,我们需要在我们的初始化函数中调用可升级合约的“_init”函数。这是一个例子:

function initialize() initializer public {__ERC1155_init(“”);__Ownable_init();__UUPSUpgradeable_init();}

  1. 1. 最后,我们需要将“msg.sender”更改为“_msgSender()”。这将使我们能够使用用户的钱包地址而不是代理地址。
可升级智能合约的主要限制

在开始我们的示例项目之前,我们还要解决可升级智能合约的主要限制。要考虑的最重要方面是存储冲突:

查看上图,您可以看到在新的实现合约版本中,顶部(也不在旧变量中间)应该没有新变量。但是,如果将新变量放在底部,则可以避免存储冲突。

可升级的智能合约在行动——一个示例项目

如前所述,您现在将有机会使用上述关于可升级智能合约的知识。按照我们的说明,您将轻松创建 NFT 铸造 dApp。当然,除了使用 OpenZeppelin,我们还会严重依赖 Moralis。为什么?好吧,它让事情变得更简单、更快捷。当我们将 Moralis 的强大功能与最实用的以太坊 dApp 样板相结合时,尤其如此。这个终极的 Web3 样板使我们能够在几分钟内拥有功能齐全的 dApp 并运行干净的 UI。当然,这两个工具都需要初始设置。因此,让我们从那开始。因此,我们将向您展示如何创建 Moralis 服务器、初始化 Moralis SDK,并介绍以太坊 dApp 样板的初始设置。

Moralis 设置

无论您是想从头开始构建 dApp 还是使用我们的 Web3 样板,您都需要从简单的 Moralis 设置开始。要完成初始 Moralis 设置,请执行以下步骤:

  1. 1. 创建您的免费 Moralis 帐户 – 单击链接https://moralis.io/,您将进入注册页面。在那里,输入您的电子邮件,创建您的密码,然后通过单击确认链接确认帐户创建(检查您的电子邮件收件箱)。另一方面,如果您已经有一个活跃的 Moralis 帐户,只需登录即可。
  2. 2. 创建 Moralis 服务器 - 在您的 Moralis 管理区域中,转到“服务器”选项卡。接下来,单击“创建新服务器”(右上角)。然后,您将看到一个提供不同服务器类型的下拉菜单(请参见下面的屏幕截图)。确保选择最适合您需要的网络类型。在处理示例项目或测试您的 dApp 时,请关注“Testnet Server”(以太坊测试网)或“Local Devchain Server”选项。但是,一旦您想让您的 dApp 对公共用户可用,请选择“主网服务器”。

继续前进,您将看到一个弹出窗口,要求您输入服务器的名称(可以是您想要的任何名称),然后选择您的区域、网络类型和链。要最终启动您的服务器,请单击“添加实例”按钮:

  1. 1. 访问服务器详细信息 - 创建服务器后,您可以通过单击“查看详细信息”按钮访问其详细信息(服务器 URL 和应用程序 ID):

您现在应该在新窗口中看到服务器的详细信息。此外,您可以简单地复制服务器的 URL 和应用程序 ID。为了更加方便,每个细节的右侧都有复制图标:

初始化Moralis

注意:暂时跳过此步骤。您将被指示何时返回并完成它。

  1. 1. 初始化Moralis - 一旦你准备好你的编码文件,你就可以通过填充相关文件来初始化Moralis和它的SDK。当使用模板时,你可以使用".env "文件来实现这一目的。因此,只需将你的服务器的详细信息粘贴到指定位置。
以太坊样板设置

为了这个示例项目,我们将使用最终的 Web3 样板。这将显着简化和加快我们的工作。事实上,我们建议您在不需要创建独特 UI 时始终使用此样板。此外,这个样板文件在 GitHub 上是公开的(只需使用 Google 并在搜索栏中输入“以太坊样板文件”)。但是,我们决定让您访问我们完成的代码(“moralis-upgradeable-smart-contracts”[4]),让事情变得更简单。不过,为了让您进行一些实际的编码,我们建议您从我们的起始代码[5]开始,它本质上只是一个稍微调整的以太坊样板。通过克隆起始代码或完成版本,您将轻松地按照此处的代码演练进行操作。

以太坊样板设置 - 分步说明

以下是使用我们修改后的样板文件需要完成的步骤:

  1. 1. 首先单击上面的“starter code”链接以访问 GitHub 上的代码。
  2. 2. 然后,单击“代码”按钮,然后单击“复制”图标复制地址:
  1. 1. 接下来,使用代码编辑器的终端克隆上面复制的代码地址。我们通常使用 Visual Studio Code (VSC);但是,请随意选择您的喜好。这是您需要使用的命令行:

git clone [paste the copied HTTPS address here]

  1. 1. 现在,是时候安装所有依赖项了。因此,我们使用 VSC 的终端。这些是我们需要输入的命令行:

cd moralis-upgradeable-smart-contractsyarn

注意:除了使用“yarn”,您还可以使用“npm”包管理器。

  1. 1. 然后,将“.env.example”文件重命名为“.env”。这也意味着您已准备好完成上一部分的最后一步(第四步)。因此,使用您的服务器的详细信息填充您的“.env”文件。
  2. 2. 完成上述步骤后,您就可以运行您的应用程序了。因此,只需将“”粘贴或键入 VSC 的终端:

完成上述设置后,您还需要进行简单的设置。为此,请务必从 20:25 开始观看下面的视频。

使用可升级的智能合约——Web3 应用预览和代码演练

完成上述设置后,您就可以卷起袖子创建自己的 NFT 铸币 dApp 版本了。为此,请按照以下视频教程中提供的详细说明进行操作(从 23:32 开始)。在那里,Moralis 专家将主要关注智能合约,并演示如何确保它们实际上是可升级的。此外,您还可以自己升级合同。此外,他还将向您展示如何使用 OpenZeppelin 和 Etherscan。

此外,如果您知道自己实际创建的是什么,那么创建 dApp 会简单得多,以下是我们的示例 dApp 预览:

如您所见,我们的 dApp 看起来与样板 dApp 非常相似。这也是“身份验证”按钮和“NFT”部分不需要额外工作的原因。因此,下面的视频教程主要关注“NFT Minter”部分。

这是我们在整篇文章中一直引用的视频教程:

https://youtu.be/af1i0z0jhkg

什么是可升级的智能合约?完整指南总结

到目前为止,您知道什么是可升级的智能合约以及如何创建它们。您还应该了解两种主要的代理模式类型及其主要区别。此外,可升级合约的关键限制也应该不再是陌生人。此外,我们希望您已经接受了上述示例项目。因此,您应该已经学会了如何正确设置 Moralis 以及如何使用以太坊样板加速您的 dApp 开发。有了这些强大的工具,你未来的区块链开发会简单很多。

引用链接

[1] 自己的NFT铸币DApp: https://moralis.io/how-to-mint-nfts-full-tutorial-to-minting-an-nft/?utm_source=blog&utm_medium=post&utm_campaign=What%20are%20Upgradable%20Smart%20Contracts%3F%20Full%20Guide[2] Web3: https://moralis.io/the-ultimate-guide-to-web3-what-is-web3/?utm_source=blog&utm_medium=post&utm_campaign=What%20are%20Upgradable%20Smart%20Contracts%3F%20Full%20Guide[3] 创建你的Moralis账户: https://admin.moralis.io/register?utm_source=blog&utm_medium=post&utm_campaign=What%20are%20Upgradable%20Smart%20Contracts%3F%20Full%20Guide[4] “moralis-upgradeable-smart-contracts”: https://github.com/YosephKS/moralis-upgradeable-smart-contracts[5] 起始代码: https://github.com/YosephKS/moralis-upgradeable-smart-contracts/tree/starter

,
    推荐阅读
  • 形成酸雨的主要气体是什么(形成酸雨的主要气体)

    以下内容大家不妨参考一二希望能帮到您!形成酸雨的主要气体是什么酸雨是指PH小于5.6的雨雪或其他形式的降水,形成的主要气体有二氧化硫、三氧化硫、硫化氢、二氧化氮。酸雨主要是人为的向大气中排放大量酸性物质所造成的。酸雨又分硝酸型酸雨和硫酸型酸雨。

  • 木棉花的花语是什么(木棉花的意义)

    接下来我们就一起去了解一下吧!珍惜眼前的幸福,珍惜身边的人给他们快乐与幸福。它的花期通常在3月或者4月份,在这一段时间盛开,而传说中四月的第十一天,是木棉花盛开的日子,所以4月11被定为木棉花的日子。

  • 炒凉皮不碎技巧(炒凉皮不碎有什么技巧)

    以下内容大家不妨参考一二希望能帮到您!炒凉皮不碎技巧炒凉皮不碎技巧:就是在做凉皮时不能炒太久,变软会失去筋度。胡萝卜切丝,蒜薹切段,葱切花,猪肉切丝,大蒜拍扁。成品凉皮一张张卷起切粗条,抖散备用。生抽,白糖,盐,鸡精,醋,胡椒粉调成汁备用。热锅倒适量食用油烧热加入大蒜,肉丝翻炒至金黄,加入胡萝卜丝和蒜薹炒熟,凉皮翻炒均匀后随即淋入调好的汁儿翻炒均匀。

  • 近几年灭绝的鱼(瞭望在长江源寻鱼)

    长江被誉为我国淡水渔业的摇篮、鱼类基因的宝库。据青海省渔业部门统计,长江流域青海段分布有土著鱼类21种。因此,严格意义上长江源的关键鱼类指的是裂腹鱼中的小头裸裂尻鱼。2019年,李伟带领团队参加长江源科考时,将小头裸裂尻鱼列为长江源鱼类研究的代表对象。2019年4月,科考小组五个人,两台车,开始了沿河寻觅之旅。“全球平均气温上升已是科学界的共识,位于青藏高原的长江源是全球气候变化的敏感区。”科考发现,江源地区

  • 鹧鸪在什么时候季节鸣叫(鹧鸪的孵化期有多长)

    鹧鸪在什么时候季节鸣叫鹧鸪一般会在繁殖季节鸣叫,繁殖期为3-6月,3-4月间开始求偶交配。求偶期间鸣叫更为频繁,常在山岩、树桩、灌木或乔木枝上鸣叫,尤以黎明和黄昏时更甚,往往是一鸟先鸣叫,其他雄鸟一起跟随,此起彼伏。鹧鸪的孵化期在21天左右,雏鸟出壳后不久即可跟随亲鸟活动。鹧鸪的繁殖期为每年的3-6月,3-4月间开始求偶交配,每窝产卵3-6枚,多时可达8枚,卵为椭圆形或梨形,颜色为淡皮黄色至黄褐色。

  • 秋天的诗词(这些都是关于秋天的诗句)

    迢迢新秋夕,亭亭月将圆《戊申岁六月中遇火》,今天小编就来说说关于秋天的诗词?《戊申岁六月中遇火》自古逢秋悲寂寥,我言秋日胜春朝。《秋词》是处红衰翠减,苒苒物华休。惟有长江水,无语东流。宋·柳永《八声甘州》落时西风时候,人共青山都瘦。《昭君怨》雨色秋来寒,风严清江爽。《酬裴侍御对雨感时见赠》秋声万户竹,寒色五陵松。唐·李颀《望秦川》秋色无远近,出门尽寒山。宋·苏轼《九日次韵王巩》

  • 广州有几种车牌(广州车牌你有吗)

    在广州的普通上班族,有房贷还想拥有一辆车,已经不容易了。但有车想让个广州牌,那更是难上加难,再加之限行,参与摇号,竞价的人是越来越多,那中标的机会更是渺茫了!截止日期是8日24时止。9月拟配置的中小客车增量指标共16313个,是这样分配的:1.以摇号方式向单位和个人配置节能车增量指标7285个,其中,单位指标100个,个人指标7185个。

  • qq注销账号有哪几个步骤(QQ将开注销帐号功能)

    1999年2月10日,一个名为OICQ、只有几百K的软件正式上线。当时,腾讯方面表示,这是QQ团队对帐号注销功能的灰度测试。网友截图出于安全考虑,也有网友表示支持有人说,QQ不推出注销服务有自己的考虑,这是为了防止用户QQ密码被他人知道后恶意注销,给用户带来无法挽回的损失。腾讯2018年第三季度财报显示,QQ智能终端月活跃账户同比增长6.9%至6.979亿。

  • 高跟鞋不合脚怎么办(穿高跟鞋不合脚怎么办)

    4、合理利用袜子,如果不喜欢垫各种鞋垫的朋友,可以穿一双船袜,再穿高跟鞋,那样既不影响穿着效果,也不影响美观,也是比较简单和实用的方法。

  • 年四旺名字打分104分 年四旺事迹

    文章目录:一、年四旺相关名字打分113二、年四旺相关名字评分115三、年四旺相关名字推荐四、年四旺相关名字大全五、其他人还看了一、年四旺相关名字打分113年灯石志明年橘纪红兵武尊道后书法孔多塞年贷款孙敬媛年立秋里蓝业珍冯景华年见朱诗词林于思冯桂年粤日林格孟昭毅年家薛邑马布鱼鲁初雪苏沫沫卜庆中年上年掌柜秦源达刘登龙严学锋国韵酒年线高成江裘梦年维泗红沙日年周王克斌王翔千毛淑红龙威信李万和年神范小慧王大