区块链研究实验室 | 如何在Solidity中导入外部智能合约和库

  • 时间:
  • 浏览:67
  • 来源:区块链技术网

很多假设的知识在任何地方都没有得到很好的解释。例如将外部合约和库导入到智能合约中。

您可能很确切地知道智能合约的作用并且您的对于智能合约的使用也非常得心应手,但是实际导入它的语义是一个障碍。

在早段时间,我记得复制和粘贴库代码到我的.sol文件中作为一个良好的解决方法。

本文介绍了如何将外部智能合约或库导入到智能合约中。

从Remix开始

您进行智能合约开发的第一步很可能是使用Remix在线IDE。这是一款非常出色的编译工具,可让你快速地访问Solidity编译器,因此您可以更快上手学习该语言。

一旦你对于使用Solidity充满信心,您就会希望在桌面IDE的本地环境中进行开发。将代码放在项目目录中,在本地运行,允许快速开发,并允许使用版本控制和开放源代码。

这就是Truffle Suite的来源。

它将所有代码保存在一个地方,而不需要太多配置,而且获得基本工作的学习曲线非常浅。

下次创建包含智能合约的新项目时,请从Truffle开始。让我们开始做吧…

Node

Truffle在Node.js上运行,如果尚未安装,请转到其网站并按照安装说明进行操作。

Truffle

使用节点软件包管理器(npm)通过运行以下命令安装Truffle:

npminstall-gtruffle

文本编辑器

确保您安装了最新的文本编辑器。我正在使用VS Code。

安装完所有内容后,导航到您首选的工作空间并创建一个新目录,该目录将存放我们的Truffle项目,然后初始化一个Truffle项目:

mkdirmy-projectcdmy-project/truffleinit

在文本编辑器中打开新的项目目录。您的文件夹结构应该如图1所示。应该有三个子目录:contract/、migrations/和test/;以及一个文件:truffle-配置js.

contract/是存储Solidity智能合约代码的位置。Truffle知道在这里寻找编译和迁移到区块链的.sol文件。

migrations/是我们的迁移逻辑所在。在这里,我们可以描述部署智能合约的正确部署它们时所需的步骤。

test/是我们为智能合约编写的地方,以确保它们按预期运行。

truffle-config.js包含有关Truffle框架的网络,编译器,文件位置和其他自定义配置的信息,以了解我们所处的位置。

安装和导入

OpenZeppelin是以太坊智能合约的黄金标准可重用存储库。在此项目中,我们将安装智能合约repo作为依赖项,然后导入Ownable合约,这样我们就可以限制对某些函数的访问。

你可能以前见过或使用过类似的模式。初始化智能合约后,msg.sender地址将存储在指示合约所有者的状态变量中。使用自定义修饰符_onlyOwner,某些功能通过要求msg.sender等于所有者来限制访问。

在存储库根目录中,运行:

npminstall@openzeppelin/contracts--save

完成后,您应该会在根目录中看到一个名为node_modules的新文件夹。

在node_modules中,npm下载了OpenZeppelin/contracts存储库,其中包含OpenZeppelin必须提供的所有合约和库。

我们将使用Ownable合约,该合约从项目根目录位于@openzeppelin-solidity/contracts/access/Ownable.sol中。

在合约/文件夹中,创建一个新的Solidity文件,该文件将导入Ownable合约。我将其命名为TestContract.sol。

首先要声明Solidity编译器版本,我们使用的是0.6.0;那么我们需要使用找到的路径导入Ownable合约;最后我们需要声明合约,并且合约应来自Ownable。

图2显示了完成所有这些之后的框架智能合约。

pragmasolidity^0.6.0;import"openzeppelin-solidity/contracts/access/Ownable.sol";cont

在此合同中编写新功能时,我们可以在public,private,internal或external修饰符之后添加onlyOwner修饰符,以声明该功能仅应由所有者运行。

这是一个简单的示例:

//ThisfunctionhasnorestrictionsonwhocancallitfunctionnoRestrictions()public{...}//Thisfunctionisrestrictedonlytotheowner.Anyoneelse//whotriestocallitwillresultinarevertedtransactionfunctionrestrictedFunction()publiconlyOwner{...}

为确保智能合约在添加新的受限功能后能够编译,请运行:

trufflecompile

如果一切顺利,您可以开始将智能合约迁移到本地区块链,编写测试并部署到公共测试网!

猜你喜欢

2022十大智能合约开发工具

去年,我研究了一些顶级的智能合约开发者框架[2],今年,我们将扩展到更多。 我们将研究十类工具,然后看看每个类别中最适合智能合约/区块链/solidity/vyper/rust/web3开发者的工具(我们现在有太多 “区块链开发者”的术语)。

2022-01-15

DeFi中的关键,智能合约是什么?

智能合约(Smart Contract)是上世纪90年代由密码学家尼克·萨博提出的理念,由于当时缺乏可信的执行环境,智能合约没有被应用和发展,直到以太坊的出现,才让智能合约得以“复活”。

2022-01-04

如何部署Solidity智能合约到Solana

什么是Solana,你如何将Solidity智能合约部署到Solana?

2021-12-28

区块链红利吃饱后,这个巨头又想"征服"元宇宙?

据12月26日消息,百度与英伟达(NVIDIA)已达成协议,双方合作共建AI元宇宙。另外,在今日举行的百度AI开发者大会上,英伟达全球副总裁暨亚太区总裁 Raymond Teh将受邀出席,并发表主题演讲。

2021-12-27

2021年,区块链股权融资发生了怎么样的演变

过去一年,区块链行业融资井喷,在科技领域中独树一帜,A16z、红杉、老虎基金等等这些顶级机构在 2021 年的区块链行业肆意驰骋,在 DeFi、NFT、Metaverse 等领域扶持了一众创业项目。

2021-12-23