本文介绍了如何从头开始设置一个基本的 NEAR 项目,包括安装和配置依赖项,以及如何使用 AssemblyScript 编写智能合约、进行测试,并部署到 NEAR 区块链。文章涵盖了项目初始化、合约编写、类型配置、编译、测试以及本地和生产环境的部署步骤,并提供了与已部署合约交互的示例。
在本教程中,我们将了解如何从头开始设置一个基本的 NEAR 项目,安装和配置依赖项,并自定义项目以使其与 AssemblyScript 良好地协同工作。
我们将首先使用 NPM 初始化一个带有 package.json 文件的项目,然后设置和配置/自定义 AssemblyScript,以用于我们的 NEAR 合约开发。
先决条件:
在本节中,我们将从一个空白文件夹初始化我们的项目,并安装项目工作所需的必要依赖项。我们首先创建我们的项目文件夹,并随意命名。我将其命名为 nearfromscratch。在编辑器中打开该文件夹后,我们运行 npm init 命令,该命令将引导我们完成一些问题,如项目版本、作者等。完成项目初始化后,我们会在项目文件夹中看到 package.json 文件。以下是我们的 package.json 文件中的信息。
// package.json
{
"name": "near-singleton-concept",
"version": "1.0.0",
"description": "了解单例概念如何工作",
"scripts": {
"test": "asp"
},
"author": "Uma Victor",
"license": "ISC",
}
接下来,我们安装 SDK 库,该库用于在 AssembyScript 中构建智能合约并与 NEAR 区块链交互。
yarn add -D near-sdk-as
安装完成后,将创建一个包含所有配置的 package.json 和 yarn.lock 文件。
由于我们使用 AssemblyScript 进行构建,因此 AssemblyScript 编译器希望我们将合约文件放在根目录中的 assembly 文件夹中。让我们这样做。
mkdir assembly
我们还需要创建一个 asconfig.json 文件,这是一个配置文件,其中包含 AssemblyScript 编译器理解的不同配置。在该文件中,我们粘贴以下内容:
// asconfig.json
{
"extends": "near-sdk-as/asconfig.json"
}
我们已经设置了项目,现在是编写我们的智能合约并编译它的时候了。我们将在下一节中进行此操作。
在本节中,我们将了解使用 AssemblyScript 为 NEAR 编写智能合约的不同方法,并创建一个问候智能合约。
NEAR 上的智能合约可以使用两种编程语言编写,即 RUST 和 AssemblyScript。在本教程中,我们将使用 AssemblyScript 语言编写我们的合约。
我们可以创建 AssemblyScript NEAR 智能合约的两种方法是:
在合约接口中包含导出的函数集合
单例方法,包括创建一个类,并在该类中编写我们的智能合约方法,然后导出它。
我们将使用单例方法来创建我们的合约。首先,让我们在 assembly 文件夹中创建一个 index.ts 文件,并在其中包含:
// index.ts
import {Context, storage, logging } from "near-sdk-as";
// --- contract code goes below
/*
* This is an example of an assembly smart contract on NEAR using the singleton method
*
* 1. setGreeting: accepts a greeting, such as "howdy", and records it for the
* user (account_id) who sent the request
* 2. getGreeting: accepts an account_id and returns the greeting saved for it,
* defaulting to "Hello"
*
* Learn more about writing NEAR smart contracts with AssemblyScript:
* https://docs.near.org/docs/develop/contracts/as/intro
*
*/
@nearBindgen
export class Greeting {
private DEFAULT_MESSAGE: string = "hello world"
getGreeting(accountId: string): string | null {
// This uses raw `storage.get`, a low-level way to interact with on-chain
// storage for simple contracts.
// If you have something more complex, check out persistent collections:
// https://docs.near.org/docs/concepts/data-storage#assemblyscript-collection-types
return storage.get<string>(accountId, this.DEFAULT_MESSAGE)
}
setGreeting(message: string): void {
const accountId = Context.sender
// Use logging.log to record logs permanently to the blockchain!
logging.log(`Saving greeting "${message}" for account "${accountId}"`)
storage.set(accountId, message)
}
}
上面的问候合约是使用单例方法编写的。智能合约代码已注释,因此你可以了解正在发生的事情。你可以从他们的 官方文档 了解更多关于在 NEAR 上构建智能合约的信息。然后稍微修改一下代码,看看如何仅通过导出合约函数来编写合约接口。
让我们看看如何在下一节中为我们的问候智能合约设置类型配置并编译该合约。
在本节中,我们将了解如何为 typescript 设置类型配置,以便 assembly script 编译器可以理解。此外,我们将把我们的合约编译成 web assembly 文件。我们设置类型配置的原因是由于 AssemblyScript 语言中的某些类型 typescript 编译器无法理解。为此,我们在根目录中创建一个 tsconfig.json 文件,并粘贴以下配置
// tsconfig.json
{
"extends": "../node_modules/assemblyscript/std/assembly.json",
"include": ["./**/*.ts"]
}
现在,我们可以通过运行以下命令来编译我们的合约:
npx asb
此命令将我们的 index.ts 文件编译成 .wasm 文件,该文件现在可以部署在 NEAR 区块链上。编译后的 wasm 文件位于我们运行命令时创建的 build 文件夹中。在下一节中,我们将运行我们的测试并编译我们的合约。
在 NEAR 或任何区块链上编写智能合约时,编写测试会很有帮助,因为区块链具有不可变的特性。这就是为什么在本节中,我们将了解如何在 AssemblyScript NEAR 合约中设置测试套件。首先,让我们使用以下命令初始化一个示例测试:
npx asp --init
当我们运行该命令时,我们可以看到在我们的项目根目录中创建了一个 as-pect.config.js 文件,并且在与我们的 index.ts 文件相同的目录中也创建了一个 __test__ 文件夹。在 as-pect.config.js 中,我们通过将此配置粘贴到文件中来配置我们的测试以与 NEAR 协同工作:
module.exports = require("near-sdk-as/imports");
module.exports.include.push("**/*.unit.spec.ts");
在 __test__ 文件夹中,我们有 example.spec.ts 文件,其中包含我们合约的示例测试。我们可以清除文件的内容,然后粘贴我们编写的合约的实际测试:
import { Context, VMContext, u128 } from 'near-sdk-as'
import { getGreeting, setGreeting } from '../assembly'
const contractId = 'dev-1678918764378-92227739998274'
function createVMContext(): VMContext {
const context = new VMContext()
context.predecessor = contractId
context.signerAccountId = contractId
context.accountId = contractId
return context
}
describe('Greeting', () => {
it('should set the greeting', () => {
VMContext.setContext(createVMContext())
setGreeting('hello world')
expect(getGreeting(contractId)).toBe('hello world')
})
})
上面的代码确保我们将问候语设置为 hello world。要了解有关使用 AssemblyScript 进行单元测试的更多信息,你可以阅读 本教程 。现在,如果我们运行 npx asp 命令,我们的测试通过了,我们可以开始了。
在上一节中,我们了解了如何测试我们的合约。我们所有的测试都通过了,在本节中,我们将了解如何使用 near-cli 部署我们的合约并与合约方法交互。near-cli 是一个 node.js 命令行界面,它使用 NEAR API 来连接和与 NEAR 区块链交互。要部署我们的合约,我们需要先编译它。要编译我们的合约,我们运行以下命令:
npx asb
该命令在我们部署到 NEAR 区块链之前,将我们的 AssemblyScript 合约编译成一个 Wasm 文件。这个 wasm 文件位于我们的 build/release 文件夹中,随时可以部署到 NEAR 区块链。
在我们继续之前,我们需要安装 near-cli。
要安装,请运行:
npm install -g near-cli
注意: 确保你已安装 Node 12 或更高版本。
登录到 NEAR
现在我们已经安装了 near-cli,我们需要创建一个 testnet 帐户,以便在我们将合约部署到生产环境时可以登录。要部署到生产环境,我们首先需要通过访问 此处 创建一个 testnet 帐户。
单击“创建帐户”,按照提示操作,你将在不到一分钟的时间内创建你的 testnet accountId。
你的 accountId 标识你和你的钱包在 NEAR 区块链上的身份。你将使用你的 testnet accountId 登录到 near-cli,并将你的合约部署到其中。
我们已经创建了一个 testnet 帐户,并且已经在全局安装了 near-cli,接下来我们运行以下命令:
near login
near login 命令将我们重定向到一个浏览器窗口,我们可以在其中选择我们刚刚创建的帐户。
然后我们单击下一步。在下一页上,我们单击连接,然后我们看到一个弹出窗口,提示我们粘贴我们的 accountId:
我们单击确认,然后我们会在屏幕上看到一条消息,告诉我们我们已成功登录。在终端中,我们还可以看到我们已登录:
现在是部署我们的合约的时候了。要部署,请运行以下命令:
near dev-deploy build/release/<在这里填写你的合约名称>.wasm
该命令运行完成后,我们可以看到在我们的项目文件夹的根目录中出现了一个 neardev 文件夹,其中包含一个文本文件和一个 env 文件,以及它部署的合约开发帐户。
在上一节中,我们了解了如何在开发环境中部署我们的合约。让我们看看如何在这一节中部署到生产环境。要部署,我们需要指定我们的合约名称,即我们的 accountId,以及我们要部署的合约 wasm 文件的位置。请看下面的命令
near deploy --contractName=umamad.testnet --keyPath=./path-to/testnet/<accountId>.json --wasmFile=./build/release/<contractName>.wasm
当我们运行该命令时,我们的合约已成功部署。现在是时候通过调用我们拥有的方法与合约进行交互了。
在上一节中,我们了解了如何编译和部署我们的智能合约,而在本节中,我们将了解如何与智能合约进行交互。在我们之前编写的智能合约中,我们有两种可以与之交互的方法,它们是
getGreeting - 获取我们拥有的问候语。
setGreeting - 将问候语设置为参数。
要设置问候语,你可以运行以下命令:
near call umamad.testnet setGreeting '{"message": "hello vicky"}' --accountId umamad.testnet
上面的代码使用 message 参数调用 setGreeting 函数。当我们运行该命令时,我们在终端中得到了这个
我们已经使用新的问候语更新了我们的状态,我们可以通过单击终端中的链接在 near explorer 上查看它。现在我们想获取我们刚刚设置为状态的问候语,因此我们调用 getGreeting 方法。要获取我们设置的问候语,我们运行:
near call umamad.testnet getGreeting --accountId umamad.testnet
在我们的终端中,我们看到:
该命令将由 setGreeting 方法设置的问候语“hello vicky”返回到终端。
umamad.testnet 是为此教程创建的 testnet 帐户,因此请确保使用你之前创建的 accountId,而不是 umamad.testnet
在本节中,我们与我们在智能合约中创建的方法进行了交互,并返回了我们设置的问候语。
我们终于写完了本教程。在本教程中,我们了解了如何从头开始设置一个基本的 NEAR 项目,安装和配置依赖项以及为合约运行测试。希望你喜欢阅读本教程,并且对如何设置 NEAR 项目有了更好的了解。如果你想了解更多关于 NEAR 的信息,你可以阅读他们的 文档 。
订阅我们的 时事通讯 ,获取更多关于 Ethereum 的文章和指南。如果你有任何反馈意见,请随时通过 Twitter 与我们联系。你始终可以通过我们的 Discord 社区服务器与我们聊天,其中包含一些你将遇到的最酷的开发者 :)
- 原文链接: quicknode.com/guides/nea...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!