今天的文章包括两个主要部分:我们的 IPFS 以太坊教程和该主题背后的理论背景。我们首先将重点向您展示如何将 IPFS 与以太坊结合使用。我们将通过获取示例图像文件并使用包含上述代码的简单 NodeJS dapp 将其上传到 IPFS 来实现这一点。在此过程中,您将学习如何获取 Moralis Web3 API 密钥并使用 Moralis JS SDK。然后,我们将向您展示如何创建、编译、部署和验证简单的 IPFS 以太坊智能合约。此合约将使您能够将任何上传文件的 IPFS 哈希存储在以太坊区块链上,从而提供高水平的透明度和安全性。
至于文章的第二部分,您将有机会整理基础知识。您将了解什么是 IPFS、以太坊和智能合约。有了这些知识,您将准确(更详细地)了解什么是 IPFS 以太坊智能合约。
教程 – 如何在以太坊上使用 IPFS
本 IPFS 以太坊教程的第一阶段是关于使用简单的 NodeJS 脚本将资产上传到 IPFS。在这里,您将学习如何实现简介中的代码片段。因此,创建一个新的项目文件夹,将其命名为“ipfsUploads”,然后在 Visual Studio Code (VSC) 中打开它。在您的项目中,您需要三个项目:
“.env” 文件用于存储你的 Web3 API 密钥
您想要存储到 IPFS 的文件(例如“beanBoy.png”)
“index.js” 文件用于创建一个简单的脚本,将您的文件上传到 IPFS
如上图所示,您必须获取 Web3 API 密钥并将其粘贴到“ MORALIS_KEY ”变量下。因此,如果您尚未创建免费的 Moralis 帐户,请立即创建。您可以使用简介中的链接或访问“ developers.moralis.com ”并点击其中一个“免费开始”按钮。帐户准备就绪后,您将能够访问管理区域。从那里,您只需单击两次即可复制 Web3 API 密钥:
使用 Web3 API 密钥后,您可以使用以下命令初始化 NodeJS 项目:
上述命令将为您生成一个新的“package.json”文件:
接下来,使用以下命令安装所有必需的依赖项:
完成初始设置后,您就可以编写“index.js”脚本了。
创建脚本将文件上传到 IPFS
在顶部,您需要导入所有上面安装的依赖项:
接下来,定义一个数组,用于保存 IPFS 位置的“结束”路径和要存储的内容。对于我们的示例“beanBoy.png”文件,以下几行代码即可完成此任务:
为了真正执行上传,你的脚本还需要一个适当的功能:
查看上面的几行,您可以看到“ uploadToIpfs ”函数通过“ Moralis.start ”和您的 Web3 API 密钥初始化 Moralis。接下来,您可以从简介中了解如何正确实现“ Moralis.EvmApi.ipfs.uploadFolder ”方法。此方法采用先前创建的数组。最后,“ uploadToIpfs ”函数控制台记录结果(为您提供已上传文件的 IPFS 哈希值)。
注意:您可以通过调整数组来匹配这些文件,将上述脚本用于各种文件。
现在您的“index.js”脚本已经准备就绪,您需要使用以下命令运行它:
上述命令将执行您的代码并将您的文件上传到 IPFS。作为响应,您将在终端中看到文件的路径:
正如您在上面的屏幕截图中看到的,文件地址由一个 IPFS 哈希组成,其“结束”路径在“ fileUploads ”数组中定义。
注意:如果您决定上传多个文件,它们都会具有相同的哈希值,但“结束”路径不同。
就“https://ipfs.moralis.io:2053/ipfs/”部分而言,它只是众多公共 IPFS 网关之一。
IPFS 以太坊集成
为了本教程的目的,您不想浪费真正的 ETH。因此,我们建议专注于以太坊的测试网之一,例如 Goerli,这是我们在此选择的网络。因此,请确保您的 MetaMask 已准备好 Goerli 网络。您还需要一些 Goerli ETH 来部署我们的智能合约实例。为此,请使用可靠的Goerli 水龙头。
注意:将智能合约部署到以太坊主网的过程是相同的,但不是使用 Goerli ETH,而是使用真实的 ETH。
准备好 MetaMask 和 Goerli ETH 后,我们可以前往“ remix.ethereum.org ”,在那里您可以使用 Remix。此在线工具提供了部署智能合约的最简单方法。访问 Remix IDE 仪表板后,单击默认的“contracts”文件夹并创建一个新的“.sol”文件。您可以按照我们的提示将其命名为“ipfsContract.sol”:
IPFS 以太坊智能合约示例
与所有 Solidity 智能合约一样,确保您的合约以许可证和指令行开头:
接下来,您需要通过命名合同并使用花括号来表示其余逻辑来设置合同:
你只希望合约所有者(部署合约的地址)能够更改 IPFS 哈希。因此,你需要定义相应的变量:“ owner ”和“ ipfsHash ”:
使用“public”,您可以确保任何人都可以看到合约的所有者是谁。接下来,您需要添加合约的构造函数,这是仅在部署时运行的智能合约函数类型:
查看上面的代码行,您会发现部署时,此智能合约会将“ ipfsHash ”变量设置为“ NoHashStoredYet ”。 因此,您无需为其分配任何 IPFS 地址即可开始使用。 至于“所有者”,它将确保部署合约的地址成为其所有者。
最后,您可以添加另外两个函数,它们将执行将 IPFS 地址集成到以太坊的功能。一个函数需要能够更改“ ipfsHash ”变量。您只希望合约的所有者能够执行此功能:
第二个函数需要获取当前哈希,这使得每个人都可以查看当前的“ ipfsHash ”变量:
注意:由于上述智能合约将“ipfsHash”变量定义为公共变量,因此第二个函数是多余的。在这里,它用于教育目的,您将使用一个“写入”和一个“读取”函数。
编译、部署和验证您的 IPFS 以太坊智能合约
使用“ipfsContract.sol”脚本中的上述代码行,您就可以编译智能合约了。绿色复选标记表示这一点。因此,单击该图标并点击该选项卡上的“编译”按钮:
接下来,您可以通过“部署”选项卡部署您的智能合约:
如上图所示,“部署”按钮将提示您的 MetaMask 确认Goerli 测试网上的链上交易。单击“确认”按钮后,您的示例智能合约需要一些时间才能在 Goerli 上线。交易确认后,Remix 底部的消息将通知您:
然后,您可以点击上面的“在 etherscan 上查看”链接,它将带您进入交易页面:
要访问您的智能合约页面,请点击上面屏幕截图中所示的智能合约地址。进入智能合约页面后,您将能够验证您的合约:
在下一页上,选择您在 Remix 中使用的详细信息,然后点击“继续”:
然后,您需要将整个智能合约代码粘贴到指定字段中:
最后,勾选“我不是机器人”框并点击“验证并发布”按钮:
成功验证您的智能合约后,您可以使用 Etherscan 运行合约的功能:
如果您选择“写入合约”选项卡并连接您的 MetaMask(使用您用于部署上述合约的相同帐户),您将能够更改“ ipfsHash ”变量以匹配您的文件的哈希值:
一旦上述交易完成,您可以再次读取合约的“ fetchHash ”函数,以查看您的IPFS地址是否确实存储在您的智能合约中:
并且,如果任何其他地址(非所有者)尝试执行“ changeHash ”函数,他们将被阻止:
IPFS 以太坊指南 – 探索 IPFS 和以太坊
现在是时候介绍上述“如何将 IPFS 与以太坊结合使用”教程背后的理论了。这意味着您将了解什么是 IPFS、以太坊和智能合约。然后,我们将解决“什么是 IPFS 以太坊智能合约?”的问题。
什么是 IPFS?
星际文件系统 (IPFS) 是一种用于存储和访问内容的点对点 (P2P) 去中心化协议。它是一种开源协议,因此任何人都可以使用它来存储和访问数据、网站、文件和应用程序。总而言之,IPFS 仍然是最受欢迎的Web3 存储解决方案。它适用于广泛的用例,包括许多IPFS NFT项目。然而,值得指出的是,IPFS 在技术上不是区块链存储公司之一,因为它不采用区块链技术。
与 Web2 存储解决方案不同,IPFS 采用“基于内容的寻址”。因此,数据或内容是根据内容本身而不是内容的位置获取的。因此,在获取内容之前,您无需知道内容的位置。为了使这种寻址正常工作,IPFS 会为文件和数据分配唯一标识符或内容 ID (CID)。CID 通常称为 IPFS 哈希,对于存储在 IPFS 上的每条内容都是唯一的。
什么是以太坊?
以太坊是最受欢迎且使用最广泛的可编程区块链。它是第一个支持智能合约的区块链,并催生了山寨币/加密代币(可替代和不可替代)、DeFi 应用程序以及无数其他去中心化应用程序 (dapp)。任何拥有互联网访问权限和以太坊地址(Web3 钱包)的人都可以与此链以及在其上构建的应用程序进行交互。
与所有第一层 (L1) 区块链一样,以太坊也有自己的原生加密货币:以太币 (ETH)。后者通过权益证明 (PoS) 共识机制提供网络安全并承担交易费用。如果您想进一步探索以太坊,请访问 Moralis 博客并搜索“什么是以太坊?”或报名参加 Moralis Academy 的“以太坊基础知识”课程。
以太坊和智能合约
我们上面提到,以太坊是第一个支持智能合约的区块链网络。与当时比特币提供的选项相比,这是一个真正的游戏规则改变者。毕竟,智能合约是链上软件,当满足预定义条件时会自动执行预定义操作。因此,智能合约提供了无限的选择,可以帮助自动化和执行透明的流程。
目前最常见的是ERC-20、ERC-721、ERC-1155等专注于创建和管理Token的智能合约,然而以太坊上还有无数其他标准化和非标准化的智能合约。
什么是IPFS以太坊智能合约?
IPFS 以太坊智能合约是一种包含 IPFS 哈希并部署在以太坊网络上的智能合约。这类合约可以有各种形式。然而,由于近几年 NFT 越来越受欢迎,ERC-721 和 ERC-1155 合约目前是 IPFS 以太坊智能合约最常见的例子。当然,这只有当他们服务的项目使用 IPFS 来存储 NFT 元数据文件时才是正确的。考虑到这一点,如果你决定继续进行 Web3 合约开发,你很可能会部署各种 IPFS 以太坊智能合约。