LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > 如何在Solidity中导入外部智能合约和库

如何在Solidity中导入外部智能合约和库

2020-06-06 陀螺财经 来源:火星财经

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

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

在早段时间,我记得复制和粘贴库代码到我的.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

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

本文来源:陀螺财经
原文标题:如何在Solidity中导入外部智能合约和库

—-

编译者/作者:陀螺财经

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

知识 智能合约
LOADING...
LOADING...