# 例子

接下来，让我们看一下一个示例，何时实现合约以及如何使用它。

我举的例子是一个名为 Greeter 的合约，它是 Hardhat 为我们生成的。在与Greeter交互时，我们可以选择使用它的函数，greet 函数，它将返回一个已设置的问候语，并具有 setGreeting 方法，当我们调用它时，它必须传递问候语值来设置问候语。现在当我们设置问候语时后，然后我们再次调用 greet命令，合约返回一个新的问候语。

![](https://lh4.googleusercontent.com/CteGJ75Np7JVMnp_8OihqL7pl5R1ito70w6k-35GaYwC7I4ynKXNB8aj4bmzpyxuaO6jizCquKtbmRSiY44vPd1lOC7pVMc_a-yZUM94SSPe6yOLfe9o7mc5KqzKZM8oMCmai1Kh)

我们将回到 VS code，打开文件 Greeter.sol，它将是我前面提到的示例合约。

![](https://lh4.googleusercontent.com/zdqm0bCMqbLLDUhg-KzwB45Vu7VLk4iz_j0skUVuw7d6XF0YXLSeTVnJbQxyR2H9xzh0LBqBv-rHOtzqgyvXeodF6IrBjXsfHJ7qoH5KbstBlsZcfteSiKQh_dq_x1i3jbA8SWi9)

接下来，让我们回顾一下部署这个合约的基础知识，以及如何将它部署到本地链。这里我们将向您展示位于 script 文件夹中的 sample-script.js 文件。这个文件可以用 hardhat 为我们生成。这是一个脚本，当我们运行它时，脚本将引导 Greeter 部署，请注意，第17行是我们设置对 Greeter 合约的引用的地方，第18行是我们部署这个契约的地方。进入网络，它会告诉我们，我们已经完成部署，并将部署到某个地址。在部署时，我们可以使用这个脚本：

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2FQt4WM14Kx8y2rOMOi6ft%2Fimage.png?alt=media\&token=b87f9441-90b0-4859-b459-b18535402051)

下面是一个运行脚本的例子，我们将使用 `npx hardhat run` 命令在控制台中运行它，并选择我们想要在这里运行脚本的文件夹 sample-script.js 文件。在脚本文件夹中会有 `npx hardhat run script/sample-script.js` 命令。我们需要选择要将合约部署到的网络，然后输入命令 `--network localhost`，这是我们正在运行的 Hardhat 的网络。最后，我们将得到要部署的命令 `npx run script/sample-script.js --network localhost` 并按 enter 键。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2Fubx3r5UYOCxNihQfcARm%2Fimage.png?alt=media\&token=d344f866-2d9c-4da2-8c6f-4af1ef6bde96)

现在我们已经完成了，我们将返回部署到的 Greeter 的合约地址。一旦我们获得了 Greeter 的合约地址，复制它，看看我们是否想在不编写代码的情况下跟合约交互。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2F40OwZ7rftr3jrDxVaigK%2Fimage.png?alt=media\&token=b159063e-2e55-4cbb-aff5-1677e6290908)

复制合约地址后，回到莱卡的网页，点击添加一个新的 collection。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2FN5cX3576XTrWsTQbmNxb%2Fimage.png?alt=media\&token=4b1af676-1048-40e1-a160-d34c20856fec)

接下来，单击刚刚创建的集合后面的三个点，并添加一个方法，然后单击刚刚创建的新方法。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2FivGM0mrdW9dZQhs452iC%2Fimage.png?alt=media\&token=2a23b95f-adce-4eab-b509-9f0ccabcf6ef)

让我们使用我们刚刚复制的 Greeter 的合约地址。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2F6eRCfSbrsClmr2IC9QFh%2Fimage.png?alt=media\&token=dfc47ad8-9bfe-4310-ba8c-064e13ff8648)

这里我们要调用的第一个函数是函数 greet，然后我们输入一个 greet 的方法名。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2FI10VdwmTJgZmWaNSmAvN%2Fimage.png?alt=media\&token=bdbe4951-8dbe-4fd9-8d46-ccda9f834f45)

函数 greet 不需要任何参数，但它会返回一个字符串，所以我们不放参数，只添加 return 并选择 string。这里，我们写在这里的问候函数不需要 input，我们只是让它空着，然后点击 Send。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2Fq6myNB73sEK7Zxpwhgdq%2Fimage.png?alt=media\&token=c6986cbc-4593-4d44-bb6b-69aac669cd33)

点击发送后，我们得到一个响应结果，我们可以看到名称是一个空字符串，类型为字符串，我们得到一个值 hello, Hardhat。这将表明我们已经成功地完成了对合约的调用。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2FFptaFABQczkzwJH1c29p%2Fimage.png?alt=media\&token=57a5ab4a-9e5d-4ab4-8507-012329129783)

接下来，我们将尝试另一个函数，函数 setGreeting。让我们做与函数 greet 相同的事情，但将方法重命名为 setGreeting，但 setGreeting 函数是一个我们需要触发到合约的函数，所以我们需要设置的方法类型。这个价值是 NONPAYBLE 的，这样我们就可以对合约做写入操作了。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2FG05tbkHz3O0FdzoVQ9AR%2Fimage.png?alt=media\&token=f406c85d-1971-4e30-9996-1f595cbf6abb)

通过函数 setGreeting 是一个创建交易的方法，但它是一个我们不需要支付原生代币所以这里我们选择了nonpayable。在这个函数中，我们需要参数，只需按加号添加参数，选择类型为字符串，将参数名称作为问候语，并输入值 Hola! 然后点击 Send。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2Fl7lB12KO9uXHNITN0BNo%2Fimage.png?alt=media\&token=a6b3738e-8f6d-4a72-b52f-3c2cf4456e26)

在按下发送后，会弹出一个 Metamask 让我们创建交易，然后单击确认。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2Ffyk4InXfZd56qslLgzjm%2Fimage.png?alt=media\&token=498f7677-8613-43db-bbbb-f93a678bac2b)

等待一段时间后，我们将得到结果的响应。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2F3QMRqUMdmAxvFwS7oSRl%2Fimage.png?alt=media\&token=31d4b33b-1f19-4e4a-a4ec-b98c9ca6dd54)

在这里，如果有人想观察更多细节，可以看看我们运行本地链的地方的输出信息。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2FCSB59Dd17TzxyclUoAwP%2Fimage.png?alt=media\&token=fe960b09-27a3-4241-bd63-83d977c33df9)

现在，我们已经将 “Hello hardhat”改为“Hola hardhat”，我们还可以再运行一次 greet 函数，看看结果是否真的发生了变化。

![](https://294893286-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8Jtynj3iGhq8oyNqiD4W%2Fuploads%2FGkIvAmYPESAH2gtah8iw%2Fimage.png?alt=media\&token=46f648cc-55fc-4e5d-883a-99cc61d80974)
