本文介绍了NEAR协议的基础知识,以及如何在NEAR测试网上构建和部署一个同质化代币(Fungible Token, FT)智能合约。文章详细讲解了NEAR协议的特性、使用Rust语言创建FT合约的步骤、编译和部署合约的方法、以及使用NEAR CLI与合约进行交互的过程。
NEAR 协议是一个 layer-1 区块链,它遵循权益证明 (PoS) 共识机制和分片架构,使其能够扩展到每秒 100,000+ 笔交易。NEAR 生态系统 还有由 750 个项目组成的多样化集合(并且还在不断增加!)。
本指南将介绍 NEAR 的基础知识,并教你如何在 NEAR 测试网上构建和部署一个同质化代币 (Fungible Token) 智能合约。我们还将使用 NEAR CLI 与我们创建的同质化代币 (Fungible Token) 进行交互。
你将要做什么
了解 NEAR 协议
构建和部署一个同质化代币 (Fungible Token) 合约
使用 NEAR CLI 与 同质化代币 (Fungible Token) 合约交互
你需要什么
除了是一个使用权益证明 (PoS) 共识机制的 layer-1 区块链之外,NEAR 协议还提供了一种称为分片(即 NightShade 算法)的替代设计,它允许将网络基础设施划分为多个组件,使验证器(又名节点;计算机)仅处理网络活动的一部分。这使 NEAR 能够扩展,从而实现更高的每秒交易量和更低的交易费用。
通过此算法,NEAR 协议维护一个主链,同时将支持该协议所需的计算分配到不同的验证器 (validators) 将处理的块中。最后,每个验证器 (validators) 完成的流程都将添加到主链中。划分这些计算任务使协议具有更少的故障点,因为工作在验证器之间是隔离的。
NEAR 还提供了一个名为 Rainbow Bridge 的桥,允许基于 EVM 的链(例如,Polygon、Ethereum、Arbitrum)上的用户将代币 (tokens) 转移到 NEAR 协议以及从 NEAR 协议转移代币 (tokens) 。这在 NEAR 主网和测试网络上都可用。EVM 开发人员(又名 Solidity;Vyper 开发人员)还可以使用 Aurora Network 在 NEAR 上部署智能合约,Aurora Network 是一种 layer-2 扩展解决方案,允许开发人员将 EVM 兼容的 dApp 部署到 NEAR 协议上。
NEAR 提供的一些主要功能包括:
要在 NEAR 上构建,你需要一个 API 端点 (endpoint) 以连接到网络。 欢迎使用公共节点或部署和管理你自己的基础设施; 但是,如果你想要快 8 倍的响应时间,你可以将繁重的工作交给我们。 在此处注册一个帐户。
登录后,单击创建端点 (Create an endpoint) 按钮,然后选择 NEAR 链和 Testnet 协议。
创建端点 (endpoint) 后,复制 HTTP 提供者 (Provider) 链接:
本节将向你展示如何使用 NEP-141 & NEP-145 规范创建一个同质化代币 (Fungible Token),这是 NEAR 版本的 EIP 标准,称为 NEPs (NEAR 增强提案 (NEAR Enhancement Proposals))。
现在,让我们继续构建同质化代币 (Fungible Token) 合约。
导航到 near-sdk-rs 存储库,并将该仓库克隆到你的本地计算机中。
git clone https://github.com/near/near-sdk-rs.git
在代码编辑器(例如 VSCode)中打开该目录,然后导航到 examples/fungible-token/ft/src/lib.rs 文件。你可以在此文件中编辑有关你的同质化代币 (Fungible Token) 的详细信息,例如代币 (token) 名称、符号、元数据等。这些详细信息包含在 new_default_meta 函数中。
在我们的示例中,我们更新了元数据以反映这些详细信息:
花点时间填写你自己的同质化代币 (Fungible Token) 规范并保存该文件。
现在我们的同质化代币 (Fungible Token) 详细信息已配置,我们可以编译合约。在 examples/fungible-token 目录中,运行以下命令:
./build.
现在合约已编译,在下一节中,我们将介绍如何部署同质化代币 (Fungible Token) 合约。
如果你没有 NEAR 钱包,请单击创建帐户 (Create Account) 按钮创建一个,然后保留一个帐户 ID. 请记住,NEAR 对帐户使用人类可读的名称(与 Ethereum 不同)。在我们的示例中,我们正在创建一个名为 wentoken.testnet 的帐户 ID,这将是一个唯一的 ID。在下一步中,系统将提示你存储你的助记词 (seed phrase) 并验证你是否知道它。
要部署合约,我们需要通过 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
你新创建的钱包地址也应该预先注资了一些 testnet NEAR 代币 (tokens)。你可以转到 NEAR 区块链浏览器 进行验证。
现在到了有趣的部分,部署合约!
在 fungible-token 目录中的终端窗口中,运行以下命令:
near deploy --wasmFile res/fungible_token.wasm --accountId YOUR_ACCOUNT_ID.testnet
请记住将 YOUR_ACCOUNT_ID 替换为你实际的帐户 ID
输出应类似于以下内容:
注意 - 你的终端窗口中的 节点 (node) 字段应显示你的 QuickNode 端点 (endpoint) URL
你可以导航到区块浏览器 URL 以查看交易!在下一节中,我们将与我们刚刚部署的同质化代币 (Fungible Token) 合约进行交互。
我们可以使用 NEAR CLI 与我们刚刚部署的同质化代币 (Fungible Token) 合约进行交互。NEAR CLI 是一种 shell 通信工具,可帮助用户在以下方面与 NEAR 进行交互:
使用你的 NEAR 帐户登录并签署交易
部署智能合约
与智能合约互动
但是在我们可以在同质化代币 (Fungible Token) 合约上调用某些方法之前,我们必须首先初始化合约。我们可以通过调用 new_default_meta 或 new 方法来做到这一点。在我们的示例中,我们调用的是 new_default_meta 方法,该方法有两个参数:合约的所有者和你想要设置的总供应量。
near call <contract_name> new_default_meta '{"owner_id":"<account_id>", "total_supply":"1000"}' --accountId <account_id>
注意 - 合约名称与你的帐户 ID 相同。 每个帐户只能有 1 个合约。如果你将合约重新部署到同一帐户上,则需要确保首先清除旧合约的状态。
要使用 NEAR CLI 与合约交互,你必须按以下格式发出请求:
near call <contract_name> <method_name> --accountId <account_id>
注意要从实际请求中删除 < >。
现在让我们通过在终端窗口中运行以下终端命令来查看同质化代币 (Fungible Token) 的元数据:
near call <contract_name> ft_metadata --accountId <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
}
现在让我们尝试将代币 (tokens) 转移到另一个地址(例如,帐户 ID)。但是,请注意,你必须首先在合约上注册收件人。你可以使用以下命令完成此操作:
near call <contract_name> storage_deposit '{"account_id":"<recipient_to_register>"}' --accountId <account_id> --amount 0.00125
有关合约存储的更多信息,请参见此处。总结:NEAR 区块链将所有数据存储在键/值对中。当你将智能合约部署到 NEAR 时,你使用一种称为存储质押 (storage staking) 的机制来支付此合约的存储费用。存储质押 (storage staking) 要求拥有智能合约的帐户根据该智能合约中存储的数据量来质押代币 (tokens),从而有效地减少合约的帐户余额。
响应应包含交易 ID、区块浏览器上交易的 URL 和收件人的已注册代币 (tokens) 数量。
接下来,我们可以使用以下命令将代币 (tokens) 转移给收件人:
near call <contract_name> ft_transfer '{"receiver_id":"<recipient_account_id>", "amount":"<token_amount>"}' --accountId <account_id> --depositYocto 1
输出应包含如下所示的事件日志 (event log):
Log [<account_id>]: EVENT_JSON:{"standard":"nep141","version":"1.0.0","event":"ft_transfer","data":[{"old_owner_id":"<account_id>","new_owner_id":"<recipient_account_id>","amount":"<transferred_amount>"}]}
你可能想知道上一个命令中的 --depositYocto 标志是什么。这是为了将代币 (tokens) 附加到你的函数调用,因为这是必需的。请注意,一个 Yocto NEAR(例如,10^-24)是一个 NEAR 的最小面额。
现在,你还可以通过调用 ft_balance_of 函数来验证收件人是否收到了代币 (tokens):
near call <contract_name> ft_balance_of '{"account_id":"<recipient_account_id"}' --accountId <account_id>
这不是对同质化代币 (Fungible Token) 合约的详尽演练,因此请务必尝试不同的想法并尝试在 NEAR 上部署其他类型的智能合约。查看下一节中的资源!
就这样!准备好在 NEAR 区块链上创建下一个大型 dApp 了吗?在 Twitter 或 Discord 上展示你的技能。我们很乐意知道你在构建什么!
如果你对此指南有任何反馈,请告诉我们!
- 原文链接: quicknode.com/guides/nea...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!