:2026-03-09 7:36 点击:1
区块链技术的浪潮席卷全球,而构建在其中的去中心化应用(DApps)正逐渐改变我们生活的方方面面,在众多新兴的公链平台中,Near Protocol 以其高性能、用户友好和开发者体验为核心,迅速脱颖而出,成为开发者们瞩目的新大陆,本文将作为一份全面的 Near Protocol 开发指南,带你从零开始,探索如何在这片充满潜力的土地上构建你的去中心化应用。
在深入编码之前,理解 Near 的核心特性和优势至关重要。
万事开头难,但 Near 的环境搭建力求简单明了。
安装必要工具:
rustup。near-workspace-ide)以获得更好的开发体验。# 安装 Near CLI npm install -g near-cli
创建 Near 钱包:
near login
按照提示在浏览器中授权即可。
初始化项目:
create-near-app)。cargo near new my-first-contract cd my-first-contract
智能合约是 Near DApps 的后端逻辑,负责处理业务逻辑、状态管理和交互。
选择开发语言:
near-sdk-js,可以在 JavaScript 环境下编写合约,方便已有 JS 经验的开发者。核心概念:
#[near_bindgen](Rust)或类似装饰器(其他语言)标记的结构体,定义合约的状态变量。payable 或非 payable)或只读。env:: 模块(Rust)或类似方式,可以访问调用者信息、区块信息、当前合约地址等。一个简单的 Rust 合约示例:
use near_sdk::{near_bindgen, BorshStorageKey, PanicOnDefault};
#[near_bindgen]
#[derive(PanicOnDefault, BorshSerialize, BorshDeserialize)] // PanicOnDefault 提供默认实现,Borsh 序列化用于状态持久化
pub struct Greeting {
greeting: String,
}
#[near_bindgen]
impl Greeting {
#[init]
pub fn new(greeting: String) -> Self {
Self { greeting }
}
pub fn get_greeting(&self) -> String {
self.greeting.clone()
}
pub fn set_greeting(&mut self, greeting: String) {
self.greeting = greeting;
}
}
// 用于状态初始化的 Key(如果需要复杂状态)
#[derive(BorshStorageKey, BorshSerialize)]
pub enum StorageKey {
Greeting,
}
// 必须的,用于编译 wasm
#[cfg(all(test, not(target_arch = "wasm32")))]
mod tests {
use super::*;
#[test]
fn test_get_greeting() {
let greeting = Greeting::new("Hello".to_string());
assert_eq!(greeting.get_greeting(), "Hello".to_string());
}
#[test]
fn test_set_greeting() {
let mut greeting = Greeting::new("Hello".to_string());
greeting.set_greeting("Hi".to_string());
assert_eq!(greeting.get_greeting(), "Hi".to_string());
}
}
前端是用户与你的 DApps 交互的界面,Near 提供了强大的 JavaScript/TypeScript SDK 来简化与智能合约的交互。
安装 Near SDK:
npm install near-api-js
核心 SDK 功能:
near-api-js 提供了便捷的方法来连接用户的钱包(如 Near Wallet, Sender Wallet)。contractViewMethod,不消耗 Gas,直接返回结果。contract 对象的方法,会修改合约状态,需要用户签名并支付 Gas。前端交互示例(TypeScript):
import { Near, NearConfig, KeyPair, Contract, transactions, utils } from 'near-api-js';
import { parseNearAmount } from 'near-api-js/lib/utils/format';
const config: NearConfig = {
networkId: "testnet", // 或 "mainnet"
keyStore: new (require('near-api-js').keyStores).InMemoryKeyStore(),
nodeUrl: "https://rpc.testnet.near.org",
walletUrl: "https://wallet.testnet.near.org",
helperUrl: "https://helper.testnet.near.org",
explorerUrl: "https://explorer.testnet.near.org",
};
async function initNear() {
const near = new Near(config);
const account = await near.account('test-account.testnet'); // 替换为你的账户名
// 假设已部署的合约地址
const contractId = 'your-contract-account.testnet';
const contract = new Contract(account, contractId, {
viewMethods: ['get_greeting'],
changeMethods: ['set_greeting'],
});
// 调用只读方法
const greeting = await contract.get_greeting();
console.log('Current greeting:', greeting);
// 调用变更方法
await contract.set_greeting({ greeting: "Hello from Frontend!" });
console.log('Greeting updated!');
}
initNear().catch(console.error);
near-sdk-rust)提供了良好的测试支持,可以在本地模拟合约行为。near-workspace 等工具,可以编写测试脚本模拟多账户交互、跨合约调用等复杂场景。本文由用户投稿上传,若侵权请提供版权资料并联系删除!