在NEAR协议上创建可替代代币

  • QuickNode
  • 发布于 2025-01-30 11:13
  • 阅读 11

本文提供了关于NEAR Protocol的详细介绍和建立可替代代币智能合约的指南,包括从理论到实际操作的各个步骤。读者将学习如何使用NEAR CLI创建、部署和与NFT合约进行交互,适合具备Rust编程基础和区块链知识的开发者。

概述

NEAR Protocol 是一个层-1 区块链,采用权益证明(Proof-of-Stake,PoS)共识机制和分片架构,使其能够扩展到每秒 100,000 次以上的交易。NEAR 生态系统 还拥有多达 750 个项目(并且还在不断增加!)。

本指南将覆盖 NEAR 的基础知识,并教你如何在 NEAR 测试网中构建和部署一个可替代代币智能合约。我们还将使用 NEAR CLI 与我们创建的可替代代币进行交互。

你将进行的操作

  • 了解 NEAR Protocol
  • 构建和部署一个可替代代币(FT)合约
  • 使用 NEAR CLI 与 FT 合约进行交互

你需要的条件

  • 对区块链的基本理解和 Rust 编程技能
  • 代码编辑器(例如 VSCode)
  • 已安装 Rust
  • 已安装 Node.js 和 npm
  • 已安装 NEAR CLI
  • 设置好的 NEAR Wallet

什么是 NEAR Protocol?

除了是一个使用权益证明(PoS)共识机制的层-1 区块链,NEAR protocol 还提供了一种称为 sharding(即 NightShade 算法)的可选设计,使其能够将网络基础设施分散到多个组件中,从而允许验证者(也称为节点;计算机)仅处理网络活动的一部分。这使得 NEAR 能够扩展,实现更高的每秒交易量和更低的交易费用。

通过这种算法,NEAR Protocol 保持一条主链,同时将驱动协议所需的计算分发到不同的验证者处理的分块中。最终,各验证者完成的处理结果会被添加到主链中。将这些计算任务进行划分使得协议具有更少的故障点,因为工作是在验证者之间隔离开的。

NEAR 还提供了一个叫做 Rainbow Bridge 的桥,使 EVM 基链(例如 Polygon、Ethereum、Arbitrum)上的用户能够在 NEAR protocol 之间转移代币。这在 NEAR 主网和测试网均可用。EVM 开发者(也称为 Solidity; Vyper 开发者)还可以使用 Aurora Network 在 NEAR 上部署智能合约,Aurora 是一种图层-2 的扩展解决方案,允许开发者将 EVM 兼容的 dApp 部署到 NEAR protocol 上。

NEAR 提供的一些关键功能包括:

  • 人类可读账户(例如 vitalik.near): 这些与 EVM 基链上的 ENS 名称类似,但默认适用于 NEAR。
  • 快速且成本效益高的交易: 一般在 ~1 秒内完成交易且费用低廉(1 美分)。
  • 智能合约: 使用 Javascript、Typescript 和 Rust 编写。

在 QuickNode 上创建 NEAR 端点

要在 NEAR 上进行开发,你需要一个 API 端点与网络连接。你可以选择使用公有节点或部署和管理自己的基础设施;然而,如果你希望获得 8 倍的响应速度,可以把繁重的工作交给我们。请在 此处 注册一个免费账户。

登录后,点击 Create an endpoint 按钮,然后选择 NEAR 链和 Testnet 协议。

创建端点后,复制 HTTP 提供程序链接:

构建可替代代币合约

本节将向你展示如何使用 NEP-141NEP-145 规范创建一个可替代代币,这是 NEAR 版本的 EIP 标准,称为 NEPs(NEAR 增强提案)。

现在,让我们开始构建可替代代币合约。

导航到 near-sdk-rs 仓库,并将其克隆到本地计算机。

git clone https://github.com/near/near-sdk-rs.git

打开 VSCode 等代码编辑器,并导航到 examples/fungible-token/ft/src/lib.rs 文件。你可以在此文件中编辑有关你的可替代代币的详细信息,例如代币名称、符号、元数据等。这些详细信息位于 new_default_meta 函数中。

在我们的示例中,我们已更新元数据以反映这些详细信息:

花点时间填写你自己的可替代代币规范并保存文件。

编译可替代代币合约

现在我们的可替代代币详细信息已配置好,我们可以编译合约。在 examples/fungible-token 目录中,运行以下命令:

./build.

合约已编译完成,接下来我们将介绍如何部署可替代代币合约。

部署可替代代币合约

如果你没有 NEAR Wallet,请通过点击 Create Account 按钮创建一个,然后保留一个账户 ID。请记住,NEAR 使用人类可读的名称作为账户(与以太坊不同)。在我们的示例中,我们创建了一个名为 wentoken.testnet 的账户 ID,这将是一个唯一的 ID。在下一步中,系统会提示你存储你的助记词并确认你知道它。

要部署合约,我们需要通过 near-cli 配置我们的账户详细信息。如果你尚未安装它,请花点时间通过 npm install -g near-cli 命令进行安装。

接下来,运行以下命令以转到 NEAR Wallet 页面,在该页面你将授权 near-cli 的访问权限。

near login

最后,你将被要求授予访问权限:

点击 Next,然后点击 Connect,并验证你的账户详细信息。最后,点击 Confirm。

成功授予访问权限后,你的终端窗口将显示类似以下的登录信息:

Logged in as [ wentoken.testnet ] with public key [ ed25519:DT7SMM... ] successfully

你新创建的钱包地址还应该预先获得一些测试网 NEAR 代币。你可以前往 NEAR 区块链浏览器 进行验证。

现在进入有趣的部分,部署合约!

在可替代代币目录的终端窗口中,运行以下命令:

near deploy --wasmFile res/fungible_token.wasm --accountId YOUR_ACCOUNT_ID.testnet

请记住用你的实际账户 ID 替换 YOUR_ACCOUNT_ID

输出应该类似于以下内容:

注意 - 你的终端窗口中的 node 字段应显示你的 QuickNode 端点 URL

你可以导航到区块浏览器 URL 查看交易!在下一节中,我们将与刚刚部署的可替代代币合约进行交互。

使用 NEAR CLI 与代币合约进行交互

我们可以使用 NEAR CLI 与我们刚刚部署的可替代代币合约进行交互。NEAR CLI 是一种 Shell 通信工具,帮助用户以以下方式与 NEAR 交互:

  • 使用你的 NEAR 账户登录并签署交易
  • 部署智能合约
  • 与智能合约进行交互

但在我们能够调用可替代代币合约的某些方法之前,我们必须首先初始化合约。我们可以通过调用 new_default_metanew 方法来完成。 在我们的示例中,我们调用了 new_default_meta 方法,该方法接受两个参数:合约的所有者和你希望设置的总供应量。

near call <contract_name> new_default_meta '{"owner_id":"<account_id>", "total_supply":"1000"}' --accountId <account_id>

注意 - 合约名称与你的账户 ID 相同。 每个账户只能有一个合约。如果你将合约重新部署到同一账户上,你需要确保首先清除旧合约的状态。

使用 NEAR CLI 与合约进行交互时,必须以以下格式发送请求:

near call <contract_name> <method_name> --accountId <account_id>

注意在实际请求中删除 < >。

现在让我们通过在终端窗口中运行以下命令来查看可替代代币的元数据:

near call &lt;contract_name> ft_metadata --accountId &lt;account_id>

你应该会收到类似以下内容的响应:

{
  spec: 'ft-1.0.0',
  name: 'Teste Fungible Token',
  symbol: 'TFT',
  icon: "data:image/svg+xml,%3Csvg width='800' height='600' xmlns='http://www.w3.org/2000/svg'%3E%3Ctext xml:space='preserve' font-family='Noto Sans JP' font-size='24' y='259' x='348.5' stroke-width='0' stroke='%23000'%3E!Teste%3F%3C/text%3E%3C/svg%3E",
  reference: null,
  reference_hash: null,
  decimals: 24
}

现在我们尝试将代币转移到另一个地址(例如账户 ID)。但是,请注意你必须先在合约上注册收件人。你可以使用以下命令完成此操作:

near call &lt;contract_name> storage_deposit '{"account_id":"&lt;recipient_to_register>"}' --accountId &lt;account_id> --amount 0.00125

有关合约存储的更多信息,请参见 这里。TLDR; NEAR 区块链以键/值对的形式存储所有数据。当你将智能合约部署到 NEAR 时,你使用一种称为存储质押的机制来支付该合约的存储费用。存储质押要求拥有智能合约的账户根据存储在该智能合约中的数据量质押代币,从而有效减少合约的账户余额。

响应中应包含交易 ID、区块浏览器上的交易 URL 以及为收件人注册的代币数量。

接下来,我们可以使用以下命令将代币转移给收件人:

near call &lt;contract_name> ft_transfer '{"receiver_id":"&lt;recipient_account_id>", "amount":"&lt;token_amount>"}' --accountId &lt;account_id> --depositYocto 1

输出应包含类似以下内容的事件日志:

Log [&lt;account_id>]: EVENT_JSON:{"standard":"nep141","version":"1.0.0","event":"ft_transfer","data":[{"old_owner_id":"&lt;account_id>","new_owner_id":"&lt;recipient_account_id>","amount":"&lt;transferred_amount>"}]}

你可能会想知道前一个命令中的 --depositYocto 标志是什么。这是为了在调用函数时附加代币,因为这是必需的。请注意,一个 Yocto NEAR(例如 10^-24)是一个 NEAR 的最小面额。

现在,你还可以通过调用 ft_balance_of 函数来验证收件人是否收到了代币:

near call &lt;contract_name> ft_balance_of '{"account_id":"&lt;recipient_account_id"}' --accountId &lt;account_id>

这不是一个全面的可替代代币合约演示,所以一定要尝试不同的想法,并尝试在 NEAR 上部署其他类型的智能合约。查看下一节中的资源!

资源

最后思考

就是这样!准备好在 NEAR 区块链上创建下一个大 dApp 了吗?在 TwitterDiscord 上展示你的技能。我们期待了解你正在构建的内容!

我们 ❤️ 反馈

如果你对本指南有任何反馈,请 告诉我们!

  • 原文链接: quicknode.com/guides/oth...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。