探索新大陆,Near Protocol 开发者全面指南

区块链技术的浪潮席卷全球,而构建在其中的去中心化应用(DApps)正逐渐改变我们生活的方方面面,在众多新兴的公链平台中,Near Protocol 以其高性能、用户友好和开发者体验为核心,迅速脱颖而出,成为开发者们瞩目的新大陆,本文将作为一份全面的 Near Protocol 开发指南,带你从零开始,探索如何在这片充满潜力的土地上构建你的去中心化应用。

初识 Near Protocol:为何选择 Near

在深入编码之前,理解 Near 的核心特性和优势至关重要。

  1. 高性能与可扩展性:Near 采用“分片”(Sharding)技术——称为“Nightshade”(夜影),通过将网络状态和处理能力分配到多个“分片”上,实现了高吞吐量(数千 TPS)和低交易确认时间(通常为1-3秒),能够有效支持大规模应用。
  2. 开发者友好:Near 提供了类似 Web 开发的体验,支持多种编程语言(如 Rust、AssemblyScript、JavaScript/TypeScript),并拥有清晰的智能合约框架和易于理解的 SDK。
  3. 用户友好(无 Gas 费体验):Near 引入了“账户抽象”(Account Abstraction)和“经济化”(Economicity)模型,使得普通用户无需持有原生代币(如 NEAR)即可支付交易费用,费用由“代付者”(Payer)承担,极大地降低了用户进入 Web3 的门槛。
  4. 互操作性:Near 通过“彩虹桥”(Rainbow Bridge)等技术与以太坊等其他区块链生态系统连接,实现了资产和数据的跨链互操作。
  5. 去中心化治理:Near 采用去中心化的治理模式,社区成员可以通过提案和投票参与网络未来的发展。

开发环境搭建:你的第一行 Near 代码

万事开头难,但 Near 的环境搭建力求简单明了。

  1. 安装必要工具

    • Node.js 和 npm/yarn:推荐使用 LTS 版本。
    • Near CLI:命令行工具,用于部署合约、与网络交互等。
    • Rust 工具链(如果选择 Rust 开发智能合约):rustup
    • VS Code:推荐安装官方提供的 Near 相关插件(如 near-workspace-ide)以获得更好的开发体验。
    # 安装 Near CLI
    npm install -g near-cli
  2. 创建 Near 钱包

    • 访问 Near Wallet 创建你的开发者钱包,记好你的助记词,这是你资产的钥匙。
    • 通过 Near CLI 将你的钱包与 CLI 关联:
      near login

      按照提示在浏览器中授权即可。

  3. 初始化项目

    • Near 官方提供了多种语言的模板和脚手架工具(如 create-near-app)。
    • 使用 Rust 模板创建一个新项目:
      cargo near new my-first-contract
      cd my-first-contract

智能合约开发:Near 应用的核心

智能合约是 Near DApps 的后端逻辑,负责处理业务逻辑、状态管理和交互。

  1. 选择开发语言

    • Rust:性能最高,安全性强,是 Near 官方主推的智能合约开发语言,适合对性能和安全要求极高的场景。
    • AssemblyScript:类 TypeScript 语法,学习曲线平缓,适合前端开发者快速上手,性能略低于 Rust,但通常足够。
    • JavaScript/TypeScript:通过 near-sdk-js,可以在 JavaScript 环境下编写合约,方便已有 JS 经验的开发者。
  2. 核心概念

    • 状态结构(State Struct):使用 #[near_bindgen](Rust)或类似装饰器(其他语言)标记的结构体,定义合约的状态变量。
    • 方法(Methods):合约对外暴露的函数,可以被调用,方法可以修改状态(payable 或非 payable)或只读。
    • 环境变量(Environment):通过 env:: 模块(Rust)或类似方式,可以访问调用者信息、区块信息、当前合约地址等。
    • 跨合约调用:Near 支持合约之间的相互调用,实现复杂的功能组合。
  3. 一个简单的 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 来简化与智能合约的交互。

  1. 安装 Near SDK

    npm install near-api-js
  2. 核心 SDK 功能

    • 连接钱包near-api-js 提供了便捷的方法来连接用户的钱包(如 Near Wallet, Sender Wallet)。
    • 调用合约方法
      • 只读调用(View Call)contractViewMethod,不消耗 Gas,直接返回结果。
      • 变更调用(Change Call)contract 对象的方法,会修改合约状态,需要用户签名并支付 Gas。
    • 账户操作:获取账户余额、状态等。
  3. 前端交互示例(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);

测试与部署:让你的应用上线

  1. 测试
    • 单元测试:Near 官方工具链(如 near-sdk-rust)提供了良好的测试支持,可以在本地模拟合约行为。
    • 集成测试:使用 near-workspace 等工具,可以编写测试脚本模拟多账户交互、跨合约调用等复杂场景。
    • 测试网部署:在正式部署前,务必在 Near 测试网(

本文由用户投稿上传,若侵权请提供版权资料并联系删除!