什么是 Web3 合约方法?
查看“Web3 合约方法”这个短语,您会发现它由三个词组成。因此,了解“Web3”、“合约”和“方法”是什么很重要。然后,您将能够将它们放在一起。我们上面已经提到,Web3 是网络的新迭代。这是互联网随着区块链技术的实施而自然演变的结果。然而,这一切都始于只读的 Web1。接下来,Web2 以其读写功能出现,这仍然是当今大多数人使用的网络。然而,越来越多的开发者和用户开始看到 Web3 的强大功能,它增加了所有权的组成部分。
此外,可编程区块链是 Web3 的核心,以太坊是其中的佼佼者。这些可编程区块链使开发人员能够部署链上软件或程序。后者被称为智能合约或 Web3 合约,可自动执行各种操作。本质上,智能合约会在预定义条件最终确定时触发预定义操作。因此,Web3 合约将成为以透明和公正的方式实现未来自动化的关键。
尽管如此,方法与函数非常相似——它们是执行任务的指令集。但是,函数和方法之间的核心区别在于后者与对象相关联,而函数则不与对象相关联。此外,函数是在类之外定义的。另一方面,方法是在类内部定义的,并且是类的一部分。然而,尽管存在这些差异,您仍会经常看到“函数”和“方法”这两个词互换使用。
因此,Web3 合约方法是智能合约的一部分,可以实现与智能合约的交互。也就是说,在本文中,我们将重点介绍“调用”方法,这些方法不涉及发送交易;它们被称为只读方法。
Web3 方法如何工作?
在上一节中,我们提到了“调用”方法,但我们还有“发送”Web3 联系方法。要解释 Web3 方法的工作原理,我们需要研究这两种类型的方法。因此,我们使用“调用”来读取合约数据。这也意味着这些方法不会修改合约的存储(区块链状态)。因此,这些方法不涉及交易。本质上,它们只是读取已部署智能合约的各种存储变量。此外,“ Moralis.EvmApi.utils.runContractFunction ”就是这种类型的方法。除其他参数外,它还使用 ABI(应用程序二进制接口)。考虑到这一点,这些方法可与智能合约内的“只读”函数一起使用。
另一方面,“发送”方法与智能合约交互。它们通过执行链上交易来更改合约的存储。因此,此类方法会触发智能合约内的“写入”函数。
为了更好地理解 Web3 方法的工作原理,进一步研究智能合约会有所帮助。因此,我们鼓励您使用 Etherscan 并探索各种智能合约。例如,您可以查看“Cool Cats” NFT 示例:
进入页面后,向下滚动并选择“合同”选项卡:
查看上面的截图,你可以看到“读取合约”和“写入合约”选项。它们对应于此智能合约内的“只读”或“读取”功能和“写入”功能。此外,当你选择“写入合约”选项时,会出现“连接到 Web3”按钮。这表示你必须连接你的 Web3 钱包来确认相关交易并支付其费用。
另一方面,“阅读合约”选项下没有“连接到 Web3”按钮。但是,您确实可以看到此特定智能合约包含的所有只读 Web3 合约方法:
Web3 合约方法教程 – 如何在以太坊上运行 Web3 方法
现在您已经了解了什么是 Web3 合约方法以及如何探索智能合约以了解它们提供哪些选项,现在是时候专注于今天的教程了。因此,我们将带您完成使用本文顶部介绍的“ runContractFunction ”端点所需完成的步骤。此外,为了本教程的目的,我们将重点介绍上一节中的“ Cool Cats” NFT 智能合约。当然,您可以使用这个特定的 Moralis 端点来关注任何其他包含只读函数的 EVM 兼容智能合约。
让我们首先访问文档页面来运行合约功能:
如上图所示,要使用此 Web3 合约方法,我们需要提供所需的参数。这些包括智能合约的地址、函数名称和合约的 ABI。还有一些其他可选参数,您可以自行探索。我们简单谈谈 chain 参数。默认情况下,Moralis 的 EVM API 专注于以太坊,但您可以使用此参数专注于任何其他受支持的 EVM 兼容链。
总而言之,“ runContractFunction ”端点使您能够整合与通过“阅读合同”选项在 Etherscan 上手动探索的相同功能(如上所示)。此外,在上述文档页面的右上角,您可以选择要使用的编程语言和框架。但是,在本教程中,我们将重点介绍 NodeJS。
示例项目:在 NodeJS Dapp 中整合 Web3 合约方法
本节将教您如何创建 NodeJS dapp 并正确合并“ runContractFunction ”端点。您还将学习如何获取 Moralis Web3 API 密钥 - 这是2023 年使用最佳以太坊 API 的门户。那么,让我们打开 Visual Studio Code (VSC) 并立即开始吧。
您可以按照我们的提示创建一个“ContractFunctions”文件夹并在 VSC 中打开它。然后,使用您的终端通过输入以下命令来初始化 NodeJS 项目:
运行上述命令后,您将在文件树中看到一个“package.json”文件:
接下来,使用以下命令初始化“index.js”文件:
您将使用“index.js”脚本编写与此示例项目相关的逻辑。不过,在开始编码之前,请确保安装所有必需的依赖项:
尽管如此,也要创建“.env”文件并用“ MORALIS_KEY = ”填充它:
作为此环境变量的值,您需要输入 Moralis Web3 API 密钥,只需两个简单步骤即可获得该密钥(见下图)。但是,在访问 Moralis 管理区域之前,您需要创建免费的 Moralis 帐户。因此,如果您尚未创建帐户,请使用简介中的链接或访问 Moralis 主页并单击“免费开始”按钮。
使用 Moralis API 密钥,打开“index.js”文件。然后,导入 Moralis 并要求“.env”:
下一步是定义您要关注的 ABI。我们建议您跟随我们的脚步,使用“Cool Cats”合约。
获取智能合约的 ABI
重新访问“Cool Cats”合约的 Etherscan 页面,并选择上面提到的“阅读合约”和“写入合约”选项旁边的“代码”选项:
通过向下滚动“代码”页面,您将进入“合约 ABI”部分(见上图)。然后,使用复制图标复制此 ABI。接下来,返回 VSC 并创建一个新文件。您可以将其命名为“abi.json”,然后将复制的 ABI 粘贴到该文件中。接下来,在 Mac(或 Windows/Linux 等效版本)上按“Shift+Option+F”将内容重新排列成行。保存更改后,您可以搜索“ getPrice ”,然后找到此合约的 Web3 合约方法或函数之一:
此外,“ getPrice ”是我们在实现“ runContractFunction ”端点时将关注的第一个方法。
实现“ runContractFunction ”端点
返回到您的“index.js”文件并创建一个新的“ABI”:
接下来,您将使用 Web3 API 密钥初始化 Moralis 并创建一个异步函数。在后者中,您将使用“ runContractFunction ”端点和“Cool Cats”合约的详细信息。因此,这些是您需要添加的代码行:
有了上述代码行,您就可以使用以下命令来运行脚本:
作为响应,你应该在终端中看到“Cool Cats” NFT 的初始代币价格:
当我们还考虑到 ETH 中的价格显示有 18 位小数时,上述结果告诉您初始价格为 0.02 ETH。
如果您想了解如何将“ runContractFunction ”端点用于“ tokenURI ”函数,请使用下面的视频(从 6:36 开始)。此外,您将学习如何正确使用其各种方法,因为 Web3 合约方法使用了一个附加参数。
最后但并非最不重要的一点是,从 8:45 开始,视频将演示一个简洁的示例,说明如何将上面获得的初始价格与 Moralis 的“ getNFTLowestPrice ” NFT API 端点结合使用。当然,这只是进一步利用“ runContractFunction ”功能的无数选项之一。当将所有 Web3 合约方法与 Moralis 的以太坊 Web3 API相结合时,一切皆有可能。