cryptozombies12-NEO、zkSync

NEO Name Service

NEO 是一个强大而创新的区块链平台,正在革新去中心化应用(dApp)的构建和操作方式。

那么,是什么让 NEO 在众多区块链平台中脱颖而出呢?首先,NEO 被设计为高可扩展性,能够处理大量的交易每秒。这种可扩展性对于实际应用至关重要,确保即使在网络活动高峰期,用户体验也能保持流畅。

此外,NEO 在合规性和监管方面采取了积极的态度,使其成为企业和商界利用区块链技术的理想平台。其以合规为导向的架构促进了传统法律框架的整合,使智能合约和去中心化应用(dApp)能够与现有系统和谐共存。

NEO 还支持多种编程语言,包括广泛使用的 C#JavaPython,使其对更广泛的开发者群体更具可访问性。这种多样性使得开发者能够利用已有的技能和知识,减少学习曲线并提高生产力。

此外,NEO 拥有强大的生态系统,涵盖了各种工具、库和框架。开发者可以利用 neon-js JavaScript 库等工具,简化开发过程,轻松创建强大的 dApp。

在本课程中,我们将深入探讨 NEO Name Service(”Neo NS”),这是一个基于 Neo 区块链的分布式、开放且可扩展的命名系统。它将人类可读的名称映射到各种复杂的数据类型,如 IP 地址、域名别名、内容哈希等。

本课程分为两部分。第一部分将通过编写与 NEO Name Service 交互的 C# 智能合约,教授你 Neo 智能合约开发的一般知识。第二部分将专注于在 Node.js 中构建一个基于命令行界面的客户端。

准备好释放你的创造力吧,我们将通过动手练习和实际案例,帮助你充分发挥 Neo 区块链的全部潜力!💪🏻

第1章:类与继承

本课程的第一部分旨在提供知识和技能,使你能够有效地使用 C# 编程语言与 Neo Name Service(NNS)进行交互。

C# 是一种功能强大且多用途的编程语言,以其简洁性、强类型和广泛的框架支持而闻名。此外,C# 是在 Neo 中编写智能合约的良好选择,原因有几个:

  • 熟悉度C# 被广泛使用,并且有一个庞大的开发者社区。许多开发者已经熟悉 C# 的语法、概念和工具,这使得它更容易过渡到 Neo 的智能合约开发。
  • Neo 智能合约框架Neo 提供了一个全面的智能合约框架,专门为 C# 提供了库、抽象和工具,使 Neo 智能合约的开发更加便捷。
  • 安全性和可靠性C# 的强类型和静态分析能在编译时捕获许多潜在错误,从而减少运行时问题的风险。此外,C# 通过垃圾回收来进行内存管理,帮助避免常见的内存相关问题。
  • 生态系统与工具支持C# 受益于 .NET 生态系统的广泛支持,开发者可以利用现有的库、测试框架和开发环境来简化智能合约开发过程。

为了帮助你开始,我们已经在右侧的标签中填充了一些样板代码。以下是你需要注意的代码部分:

  • using 指令引入了 C# 程序中的命名空间,提供对这些命名空间中定义的类型和功能的访问。我们来逐行分析这些代码:

    • Neo.SmartContract.Framework - 包含与在 Neo 区块链上开发智能合约相关的类和类型,提供了专门为 Neo 智能合约开发而设计的各种功能和 API。
    • Neo.SmartContract.Framework.Attributes - 包含可以应用于 Neo 智能合约中的方法、属性或类的属性,这些属性在编译和执行合约方法时提供附加信息和行为。
    • Neo.SmartContract.Framework.Native - 包含与交互 Neo 本地合约和资产相关的类和类型,提供访问 Neo 内置合约的功能,例如 GASNEO 代币。
    • Neo.SmartContract.Framework.Services - 提供访问 Neo 区块链平台的各种服务和功能的类和类型,包括与存储、交易、执行和其他区块链特定操作相关的功能。
    • System - 提供 C# 程序中常用的基础类型、类和功能,如 ObjectStringBigInteger
    • System.ComponentModel - 包含与基于组件的编程和设计模式相关的类型和功能。包括用于数据绑定、事件处理和其他组件相关操作的属性和接口。
    • System.Numerics - 提供处理任意精度数值值的类型和操作。包括 BigInteger 类,允许操作超出内建数值类型范围的大整数值。
  • 命名空间 关键字用于声明一个命名空间,它是将相关代码元素(如类、接口和其他类型)组织并分组到一个命名范围中的一种方式。命名空间有助于防止命名冲突,并提供更好的代码组织和模块化。我们在 Neo.SmartContract 命名空间内创建了一个新的子命名空间 CryptoZombies

  • 我们定义了一组提供代码元数据或附加信息的属性。我们不会逐个解释这些属性,但 [ContractPermission] 属性需要特别注意,因为它指定了智能合约的权限。在这个例子中,通配符字符 "*" 被用于 ContractHashMethods 参数,表示合约有权限调用任何其他合约并执行任何方法。换句话说,这个属性允许合约与区块链上的其他合约进行无限制交互。

类:构建结构化和可重用的智能合约

类是一个基础的编程构造,用来定义智能合约中对象的结构、行为和功能。类作为创建对象(实例)的模板或蓝图,这些对象具有相似的特征和行为。

Neo 中,类是通过面向对象编程(OOP)原则定义的。它们封装了数据和操作这些数据的方法。类中的数据和方法的组合允许代码的组织和抽象,从而促进模块化、可重用性和可维护性。

以下示例代码创建了一个名为 HelloWorldContract 的类,它将数据(message 字段)和行为(GetMessage() 方法)封装在一个单元中:

1
2
3
4
5
6
7
8
9
public class HelloWorldContract : Framework.SmartContract
{
private static string message = "Hello, World!";

public static string GetMessage()
{
return message;
}
}

关于此示例需要注意以下几点:

  • public 关键字是访问修饰符,表示类可以从其包含的作用域之外访问。我们将在下一章详细介绍。
  • : (冒号) 表示继承,表示该类继承自 Framework.SmartContract 类。

什么是继承?

继承在 Neo 中就像是区块链上的家族关系!就像你可能继承了父亲的迷人外貌或祖母的最佳煎饼秘方一样,在 Neo 中,继承允许一个智能合约继承另一个智能合约的特征和功能。它就像是将代码超能力从一代传到下一代!想象一下,你的智能合约是一个自豪的后代,继承了一个强大的祖先的所有方法、属性,甚至是偶尔的冷笑话。这就像是家族关系,只不过是代码!

Neo 中的继承就像是区块链在说:“嘿,你应该继承你智能合约祖先的所有酷功能。”

动手实践

声明一个名为 NNSClient 的公共类,继承自 Framework.SmartContract

Neo Name Service和tron有什么区别?

Neo Name Service (Neo NS)TRON 是两个不同的区块链项目,它们分别具有不同的目标、技术栈和功能。尽管它们都支持去中心化应用(DApps),但它们的目标、架构和具体实现方式有很大的不同。以下是 Neo Name ServiceTRON 的一些主要区别:

1. 项目目标和定位

  • Neo Name Service (Neo NS):

    • Neo Name Service 是基于 Neo 区块链 的去中心化域名系统,类似于传统的 DNS(域名系统),但它是为区块链和去中心化应用(DApps)设计的。它通过将人类可读的名称映射到各种复杂的数据类型(如 IP 地址、域名别名、内容哈希等),简化了区块链地址的使用。
    • 主要目标是使区块链地址和相关资源更加易于使用和访问,为区块链应用提供 去中心化的域名解析 服务。
  • TRON:

    • TRON 是一个去中心化的区块链平台,致力于构建全球范围内自由、高效的数字内容娱乐系统,允许开发者创建去中心化应用(DApp),尤其是在 内容分发娱乐 行业。
    • TRON 的目标是提供 高可扩展性、高交易速度和低交易成本,使开发者能够创建更为灵活和高效的 DApps,尤其是在娱乐、游戏和社交应用领域。

2. 区块链架构与共识机制

  • Neo:

    • Neo 使用 dBFT(Delegated Byzantine Fault Tolerance) 共识算法,这种算法通过委托节点(代表节点)来增加共识效率。它能够处理较高的交易吞吐量,并且提供较低的交易延迟。
    • Neo 是一个 EVM(以太坊虚拟机)兼容 的平台,支持智能合约,能够通过 C#JavaPython 等多种编程语言开发智能合约。
  • TRON:

    • TRON 使用 DPoS(Delegated Proof of Stake) 共识算法,允许用户通过投票选择代表节点来进行交易验证和生产区块。这种共识机制也能够提供高吞吐量和低延迟。
    • TRON 也支持智能合约,但它专门为 TRON 虚拟机(TVM) 提供支持,支持用 SolidityJava 等语言开发合约。

3. 交易速度与费用

  • Neo:

    • Neo 设计了一个 高效、低成本的交易机制,使得它能够在不牺牲去中心化的情况下,支持更高的交易吞吐量。
    • Neo 的交易费用非常低,特别是对于智能合约的部署和调用。
  • TRON:

    • TRON高吞吐量低交易费用 著称,特别适合需要频繁交易的 DApps 和平台(如在线游戏、娱乐内容平台等)。TRON 网络声称每秒可以处理 2000+ 笔交易,这使其在需要快速交易的场景中具有优势。

4. 智能合约支持

  • Neo:

    • Neo 支持多个编程语言(包括 C#JavaPython),使得更多的开发者能够快速上手并构建智能合约。
    • Neo 提供的 智能合约框架 对开发者非常友好,提供了多种工具来简化合约开发和部署。
  • TRON:

    • TRON 主要通过 TRON 虚拟机(TVM) 来运行智能合约,支持的编程语言主要是 Solidity(与以太坊相似),以及部分支持 Java。
    • TRON 提供了强大的开发工具和支持生态系统,帮助开发者构建去中心化应用。

5. 去中心化域名系统(Neo NS 与 TRON)

  • Neo Name Service (Neo NS):

    • Neo NS 是 Neo 区块链上专门为去中心化应用设计的域名系统。它允许用户为自己的账户、智能合约或其他资源设置可读的名称,便于在区块链上引用和访问。
    • Neo NS 通过映射人类可读的名称到地址(例如,IP 地址、内容哈希等),为区块链应用提供了类似于传统互联网中的 DNS(域名系统)的功能。
  • TRON:

    • TRON 本身并没有专门的去中心化域名服务(DNS)系统像 Neo NS 那样,但它支持用户在 TRON 生态系统 中开发和使用 DApp,支持通过智能合约实现去中心化的资源管理和服务。

6. 生态系统与应用场景

  • Neo:

    • Neo 的生态系统非常注重 企业级应用合规性,它被许多企业和政府项目采用,提供了一个更加合规的区块链平台。Neo 适合金融、资产管理、身份认证等多个领域的应用。
    • Neo去中心化金融(DeFi)数字资产管理 等领域也有广泛的应用。
  • TRON:

    • TRON 更注重 娱乐和内容创作,特别是在 去中心化内容分发平台(如视频流、社交媒体、游戏等)方面有显著优势。TRON 的目标是通过提供低交易费用和高吞吐量来支持这些领域的大规模应用。
    • TRON 特别适合应用于 游戏、社交媒体娱乐平台,例如,像 BitTorrent 这样的去中心化文件共享平台也已经加入 TRON 网络。

总结

  • Neo Name Service (Neo NS) 主要是一个去中心化的域名系统,专为 Neo 区块链设计,用于映射可读名称到各种复杂的数据类型,并支持多个编程语言。
  • TRON 是一个高效、低成本的区块链平台,专注于去中心化应用,特别是在娱乐和内容分发领域,并通过 TRON 虚拟机(TVM)支持智能合约。

两者虽然都是区块链平台,但在目标、架构、智能合约语言和应用场景上有所不同。Neo 强调企业级应用和合规性,而 TRON 更侧重于内容创作和娱乐行业的去中心化应用。

Neo 支持多个编程语言(包括 C#、Java 和 Python),使得更多的开发者能够快速上手并构建智能合约。那我学solidity干什么?c#和python我都会啊

如果你已经熟悉 C#Python,而 Neo 支持这些语言用于智能合约开发,那么你可能会问,为什么还要学习 Solidity,特别是当你已经能用 C#Python 开发智能合约时?

这里有几个原因可以帮助你理解 Solidity 学习的价值,以及在不同区块链平台上的作用:

1. Solidity 是以太坊的标准智能合约语言

  • Solidity以太坊 和其他与 EVM(以太坊虚拟机)兼容 的区块链平台(如 Binance Smart ChainAvalanche 等)上开发智能合约的标准语言。以太坊是目前 智能合约去中心化应用(DApp) 开发中最广泛使用的平台之一,许多区块链项目和 DApp 都基于以太坊生态系统。
  • 由于 Solidity 是以太坊生态系统的核心语言,学习 Solidity 可以让你在 以太坊 及其兼容平台上构建智能合约,扩大你的开发能力和职业发展前景。

2. Solidity 在去中心化金融(DeFi)和其他 DApp 领域的广泛应用

  • Solidity 被大量用于 去中心化金融(DeFi)NFT 等热门领域。以太坊是 DeFiNFT 的主力平台,几乎所有的大型 DeFi 协议(如 UniswapAaveCompound)和 NFT 项目(如 CryptoPunksBored Ape Yacht Club)都基于 Solidity以太坊
  • 如果你对 DeFiNFT 开发感兴趣,掌握 Solidity 是非常必要的,它是这些技术的核心。

3. 多平台开发的灵活性

  • 学习 Solidity 能让你具备 跨平台开发 的能力。虽然 Neo 提供了 C#Python 的支持,允许你使用这些语言开发智能合约,但如果你想开发 去中心化应用(DApp) 并希望能够跨多个区块链平台(如 EthereumBinance Smart ChainAvalanche 等)进行开发,那么掌握 Solidity 就变得非常有用。
  • SolidityEVM 兼容链 中的核心语言,而这些链(如 以太坊PolygonFantomArbitrum 等)占据了整个区块链生态系统的大部分市场份额。

4. 学习 Solidity 能增强你的职业竞争力

  • Solidity 是区块链领域中最受欢迎和需求最大的技能之一。许多 区块链公司去中心化应用 开发团队需要 Solidity 开发者,因此掌握 Solidity 使你具备了进入这一行业的强大竞争力。
  • 在求职市场上,能够在多个平台上进行智能合约开发(如 NeoEthereum 等)会使你具备更多的就业机会。

5. Neo 与 Ethereum 的不同目标和架构

  • 虽然 Neo 确实支持 C#Python,并为这些语言提供了强大的框架支持,但 NeoEthereum 在目标和生态系统上有不同的定位。
  • Neo 强调企业级应用,特别是在 合规性数字资产管理 方面,而 Ethereum 更加注重 去中心化金融NFT智能合约的灵活性
  • Solidity 在以太坊生态中有着独特的地位,并且大多数创新的 DeFi 协议NFT 市场 都是在 Ethereum 上进行开发的。如果你想要在这些领域有更多的机会,学习 Solidity 是一个明智的选择。

6. 语言的生态系统和工具支持

  • Solidity 拥有非常丰富的生态系统和开发工具支持。例如,TruffleHardhat 等框架帮助开发者编写、测试和部署智能合约。此外,许多前端库(如 Web3.jsethers.js)以及钱包(如 MetaMask)也都围绕 Solidity 进行开发,提供了无缝的集成体验。
  • 如果你想利用这些工具来加速开发过程,学习 Solidity 是必不可少的。

7. C# 和 Python 与 Solidity 的互补性

  • 你并不需要放弃 C#Python。相反,学习 Solidity 可以与你现有的技能互补。你可以利用 C#Python 开发 Neo 上的智能合约,而 Solidity 则可以让你在以太坊及其他 EVM 兼容链 上开发智能合约。
  • 如果你熟悉 C#Python,可以通过与 Solidity 一起使用这些语言来提升你的跨平台开发能力,拓展你的开发范围。

结论

虽然 Neo 支持 C#Python 开发智能合约,但学习 Solidity 依然是非常重要的,因为它是 以太坊EVM 兼容区块链平台 上的核心语言。通过学习 Solidity,你可以在 DeFiNFT去中心化应用 的开发领域拥有更多的机会,并在跨平台开发和就业市场中占据优势。

如果你已经熟悉 C#Python,那么学习 Solidity 会是你技能的有力补充,使你能够在 多个区块链平台 上进行开发,并为将来可能遇到的 去中心化金融(DeFi)NFT 领域的需求做好准备。

答案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using Neo.SmartContract.Framework;
using Neo.SmartContract.Framework.Attributes;
using Neo.SmartContract.Framework.Native;
using Neo.SmartContract.Framework.Services;
using System;
using System.ComponentModel;
using System.Numerics;

namespace Neo.SmartContract.CryptoZombies
{
[DisplayName("TestNNS")]
[ManifestExtra("Author", "CryptoZombies")]
[ManifestExtra("Email", "hello@cryptozombies.io")]
[ManifestExtra("Description", "This is a a client for invoking NNS")]
[ContractPermission("*", "*")]

public class NNSClient : Framework.SmartContract
{
}
}

有必要学NEO吗?

NEO 是一个强大而创新的区块链平台,正在革新去中心化应用(dApp)的构建和操作方式。我如果做solidity开发,有必要学这个吗。注意我香港高才通只有2年时间找工作,非必要不学。我的时间有限

NEO 确实是一个强大且创新的区块链平台,特别是在 去中心化应用(DApp) 方面有着显著的优势。但如果你主要专注于 Solidity 开发,而且你的时间有限,是否学习 NEO 取决于几个因素,尤其是你希望从事的职业方向和市场需求。

1. Solidity 开发与 NEO 的差异

  • Solidity 是以太坊及其兼容链的主要智能合约语言,广泛应用于 去中心化金融(DeFi)NFT 等领域。如果你专注于 Solidity,你将更多地涉及到以太坊生态系统中的应用,这个生态系统有着广泛的市场需求,尤其是在 DeFiNFT 等热门领域。
  • NEO 作为一个区块链平台,支持多种编程语言(如 C#JavaPython),而它的智能合约开发通常不使用 Solidity,而是 C# 等语言。虽然 Neo Name Service (Neo NS)Neo 区块链在一些应用中有它的优势,但它的应用和市场份额相对较小,尤其是在 DeFiNFT 等主流区块链应用领域。

2. 香港市场的需求

  • 在香港的区块链市场,Solidity 开发 仍然是最受欢迎和最有需求的技能之一。香港作为亚洲的金融中心,很多金融科技公司和区块链初创企业都在使用以太坊及其兼容链开发 DeFi 和其他去中心化应用。Solidity 开发者在香港的就业机会相对较多,尤其是在 去中心化金融(DeFi)NFT 和其他区块链相关领域。
  • NEO 作为一个 企业级平台,在某些特定领域(如企业级应用、身份验证等)可能有应用场景,但其市场需求和就业机会相较于 Solidity以太坊生态系统 要小一些。

3. NEO 学习的必要性

  • 如果你的主要目标是 Solidity 开发,并且你计划在 DeFiNFT 或其他以太坊相关的区块链领域工作,学习 NEO 并不是一个必要的步骤。你的时间有限,专注于 Solidity以太坊生态系统 将更有效率,并且可以为你在香港的区块链市场提供更多的就业机会。
  • 然而,如果你对 Neo Name Service (Neo NS)企业级应用 开发感兴趣,并且想探索其他区块链平台,那么学习 Neo 是有价值的,但这并不影响你学习 Solidity以太坊 的基础。

4. 考虑时间有限的情况下

  • 既然你提到时间有限,而且你的目标是 尽快找到工作,那么学习 Solidity以太坊 是最有效的选择。通过专注于 Solidity,你可以在 DeFiNFT去中心化应用(DApp) 等领域获得更多机会,而这些领域在区块链行业中仍然是需求最强烈的。

总结:

  • 如果你的目标是找到一份区块链开发的工作,特别是在香港这样的市场,并且你主要对 Solidity 开发 感兴趣,那么 学习 NEO 并不是必须的。专注于 Solidity以太坊 生态系统将使你在有限的时间内提升自己在区块链领域的竞争力。
  • NEO 在一些特定的企业应用和去中心化领域可能有市场,但相对来说,它的需求和市场份额较小,特别是与 Solidity以太坊 相比。

如果你的时间有限,专注于 Solidity 开发以太坊生态系统 是更明智的选择,尤其是在香港这样的市场,需求大且前景广阔。

有必要学zkSync吗?

要成为一名 Solidity 开发者,学习 zkSync 并不是必需的,但它可能会对你未来的技能提升和工作机会产生影响,特别是如果你有意从事 去中心化金融(DeFi) 或其他需要高吞吐量和低交易费用的区块链应用。

为什么 zkSync 可能有用?

zkSync 是一个基于 零知识卷积(ZK-rollups) 的二层扩展解决方案,它与 以太坊 兼容,能够显著提高交易速度,减少费用,同时保持以太坊的安全性。以下是你为什么可能想要了解 zkSync 的几个原因:

  1. 提升交易效率:

    • zkSync 通过 ZK-rollup 技术将大量的交易数据处理和计算从主链转移到链外,从而提高交易吞吐量,减少交易费用。如果你从事 DeFiNFT 项目开发,使用 zkSync 进行高效的交易处理可能是一个很好的选择。
  2. 零知识证明和扩展性:

    • zkSync 利用 零知识证明(zkp)技术,这是一个在区块链开发中日益重要的领域。理解和使用这些技术可以帮助你在开发更复杂的区块链应用时具备竞争优势,特别是在需要隐私保护和高扩展性的应用场景下。
  3. 与以太坊兼容:

    • zkSync以太坊兼容 的,这意味着如果你已经熟悉 Solidity以太坊,那么迁移到 zkSync 开发会更加容易。你可以利用现有的工具和生态系统(如 TruffleHardhat 等)来部署和交互智能合约。
  4. 去中心化金融(DeFi)和区块链应用的需求:

    • 目前,越来越多的 DeFi 项目和 NFT 平台使用 zkSync 作为扩展解决方案,以应对以太坊主网的交易成本和速度瓶颈。了解 zkSync 可能会让你在这些项目中更具市场竞争力。

是否必须学习 zkSync?

对于大多数 Solidity 开发者 来说,学习 zkSync 并不是必须的,尤其是如果你的目标是专注于 以太坊主网 或其他 EVM 兼容链(如 PolygonBinance Smart Chain)上的开发。Solidity以太坊EVM 兼容区块链 的核心开发语言,而大多数去中心化应用和智能合约开发者仍然专注于这些平台。

如果你的目标是专注于 Solidity 开发,那么你应该将主要精力放在以下几个方面:

  • 熟悉 Solidity 语言的语法和特性。
  • 了解 以太坊智能合约 的生命周期、部署和交互。
  • 学习如何优化合约,减少 gas 费用
  • 熟悉 Web3.jsethers.js 等库,用于前端与智能合约的交互。

在什么情况下需要学习 zkSync?

  • 如果你正在考虑开发 去中心化金融(DeFi)NFT 应用,且对 交易吞吐量低交易费用 有较高要求,了解 zkSync 会对你有帮助。
  • 如果你希望深入研究 零知识证明(zkp) 技术,或者希望参与扩展解决方案的开发,学习 zkSync 是非常有价值的。
  • 如果你已经熟悉 Solidity 并且希望拓展开发技能到 以太坊二层扩展(如 zkSyncOptimism),那么学习 zkSync 将为你打开一个新的技术领域。

总结:

  • 学习 zkSync 不是成为 Solidity 开发者的必备技能,但它可以帮助你在 DeFi 和其他需要高效扩展的应用领域中提高竞争力。
  • 如果你希望专注于 Solidity 开发以太坊生态系统,可以优先集中精力在 Solidity以太坊主网 的开发上。
  • 如果你有时间和兴趣,学习 zkSync 将使你对 区块链扩展解决方案零知识证明 等技术有更深的理解,为你提供更多的开发机会,尤其是在未来的 去中心化应用 开发中。

在有限的时间内,Solidity 是一个强大的起点,而 zkSync 可以作为一个有趣的拓展领域,等你在区块链开发的基础上进一步发展时再深入学习。

第1章:准备工作

以太坊和zkSync都使用一种名为JSON-RPC的语言,这种语言对人类不可读。幸运的是,它们提供了库来隐藏所有复杂的细节,因此你只需要了解一些JavaScript。

☞ 如果你对JavaScript不熟悉,可以先去其他地方学习一下教程,然后再开始这节课。

初始化你的Node.js项目

每个Node.js项目必须至少包含一个package.json文件,通常位于项目的根目录。这个文件标识了项目并列出了项目所依赖的包,从而使你的构建具有可重现性。

你可以使用文本编辑器手动创建package.json文件,但最快的方式是运行npm init命令并加上-y标志,如下所示:

1
npm init -y

那么,-y标志是什么意思呢?

-y标志表示你希望接受npm根据当前目录提取的信息自动建议的所有默认值。

安装依赖
我们假设你已经在电脑上安装了npm和node,现在我们要让你安装ethers和zksync。

使用npm安装包的语法如下:

1
npm install <package-name>

进行测试

你首先要做的事情是初始化你的新项目并接受所有默认设置。如果你不记得怎么做,查看上面的示例。首先,尝试自己完成,避免查看答案。

现在,让我们使用npm install命令安装ethers和zksync。

注意:指定要安装的包的顺序应该不影响结果,但由于我们的命令行解释器相当基础,除非你先指定ethers,否则它不会认为答案是正确的。

第2章:让我们了解zkSync

现在你已经初始化了一个新的Node.js项目并安装了所需的依赖项,接下来让我们深入了解zkSync的工作原理。

zkSync使用了一种叫做zk-SNARKs的技术,zk-SNARK代表的是“零知识简洁非交互式知识证明”。

如果这听起来让你一头雾水,你并不孤单。继续阅读,我们将为你解释这意味着什么。

零知识证明

不深入细节的讲解,零知识证明允许Alice(被称为证明者)向Bob(被称为验证者)证明她知道某件事情是正确的,但不透露任何其他信息。

例如,通过zk-SNARK,Bob知道Alice的账户余额超过0.5 ETH,但Bob无法从Alice提供的证明中获取任何其他信息。

掌握了这一知识后,让我们更深入地了解zkSync是如何工作的。

zkSync依赖于一个部署在以太坊网络上的智能合约来保存所有资产,而大部分计算工作都在链下进行。每次你签署交易时,协议会将交易提交给操作员,操作员将多个交易(可能是成千上万的交易)打包成一个区块,并计算以下内容:

  • 加密承诺(根哈希)
  • 加密证明(SNARK)
  • 状态变化(∆),代表每笔交易的一小段数据

所有这些信息会被发送到运行在以太坊网络上的智能合约。这使得有兴趣的方可以在任何给定时刻重建状态。

SNARK验证比逐一验证每笔交易便宜得多,而将状态存储在链下也比将其存储在EVM中便宜得多。

这大大提高了可扩展性并节省了交易成本。

☞ 本课的范围不包括深入探讨zk-SNARK是如何工作的。如果你完成了这篇课程,可以去阅读《Why and How zk-SNARK Works》系列文章,进一步了解。

创建提供者

在你与zkSync进行交互之前,你需要创建一个叫做提供者(provider)的东西。提供者像一个桥梁,使得JavaScript函数调用能够与zkSync兼容。其优点是,你不需要理解它是如何在底层运作的就可以使用它。

实践

在本课中,你将创建两个Node.JS应用程序——alice.jsbob.js,大部分逻辑将由这两个应用共享。你如何确保不会重复编写相同的代码呢?为避免这种情况,你应该创建一个单独的文件来存放所有这些通用逻辑。我们已经为你创建了一个名为utils.js的JavaScript文件框架。接下来,让我们填充它。

在右侧标签中,创建一个异步函数,命名为getZkSyncProvider。它接收两个参数:

  • zksync:指向zkSync JavaScript模块的对象。
  • networkName:指定应用程序连接的网络名称的字符串。

现在不用担心这些变量,我们稍后会讲解它们。

函数的第一行应该使用let关键字声明一个名为zkSyncProvider的变量。

接下来,你的函数应该创建一个新的提供者。但是,创建新提供者的代码可能会失败并抛出错误。为了防止应用程序崩溃并打印堆栈跟踪,你必须将所有内容包装在try/catch语句中,如下所示:

1
2
3
4
5
try {
// 初始化提供者
} catch (error) {
// 显示错误消息
}

try块中,你的函数应该通过await zksync.getDefaultProvider来设置zkSyncProvider。这个函数接受一个参数——networkName

catch块中,粘贴以下两行代码:

1
2
console.log('Unable to connect to zkSync.')
console.log(error)

记住,这些代码只会在try块中抛出异常时执行!

现在,让我们写下函数的最后一行。在try/catch块之外,只需返回zkSyncProvider

什么是zkSync?

zkSync 是一个为 Ethereum(以太坊) 设计的“Layer‑2 扩容解决方案”(Layer‑2 scaling solution)。它的目的是让以太坊网络更快、更便宜、更高效,同时保持安全性与去中心化。(cryptopolitan.com)


✅ zkSync 的关键特性

  • 采用 “零知识汇总”(zk‑rollups / ZK‑Rollup)技术
    zkSync 会把很多笔交易打包(roll up)在链下处理,然后生成一个加密“有效性证明”(zero‑knowledge proof, ZKP),最后只将这个证明提交到以太坊主链(Layer 1)。因此,以太坊主网不需要逐笔验证所有交易,只需验证这个证明即可。(DappRadar)
  • 更高吞吐量 + 更低交易费
    因为链下批量处理交易,并只提交小量数据到主网,zkSync 可以显著提高交易速度/吞吐量(相比直接在主网交易) — 同时大幅降低 Gas 费或手续费。(Binance)
  • 继承以太坊的安全性和去中心化
    虽然交易在链下处理,但最终状态的“确认”(finality)仍锚定在以太坊主链上,也就是说你依然享有以太坊层面的安全保障。(nansen.ai)
  • 对 Ethereum 智能合约 / dApp 的兼容性
    zkSync 通常与以太坊虚拟机(EVM)兼容,使得现有为以太坊开发的去中心化应用(dApp)可以较容易地迁移或同时支持 zkSync。(Binance)

🧠 为什么存在 zkSync?它解决了什么问题

以太坊主网(Layer 1)虽然安全、去中心化,但在网络拥堵的时候交易费(Gas)很高、交易确认慢、吞吐量有限。对于想要大量、小额、快速交易的应用场景(如支付、DeFi、小额转账、NFT、游戏等),成本与速度成为瓶颈。

zkSync 通过 “链下批量 + 零知识证明 + 链上最终确认” 的方式,解决了可扩展性和高费用的问题,让以太坊更适合大规模、日常的使用。

因此,zkSync 被很多项目和用户视为推动以太坊「主流化」—— 让区块链不仅仅适合大额交易、投机或存储资产,也适合高频、轻量、普通用途 —— 的关键基础设施。(cryptopolitan.com)


🌐 zkSync 当前状态 & 生态

  • zkSync 的主网解决方案版本中,有一个子项目/网络叫 zkSync Era —— 它是 zkSync 的主要网络之一。(blog.gtokentool.com)
  • 截至 2025 年,zkSync 的生态系统非常活跃,已经成为以太坊 Layer‑2 中资金规模较大、采用较多的方案之一。(jb51.net)
  • 它不仅用于简单的代币交易,也被用于 DeFi(去中心化金融)、资产代币化、跨链桥接、以及其他智能合约/dApp 场景 — 成为一个完整的扩展生态。(jb51.net)

🆚 zkSync 与其他扩容方案的比较

与一些使用其他技术的 Layer‑2 方案相比(例如“乐观汇总 / Optimistic Rollups”),zkSync 的优势在于:

  • 交易确认速度更快 — 因为验证通过加密证明即时完成,无需等待质疑期(optimistic rollup 通常有延迟窗口以防欺诈)(Binance)
  • 安全性更高 — 零知识证明方式本质上比“假设有效 + 后验质疑”的方式更确定、安全。(Binance)
  • 对开发者更友好 — EVM 兼容让以太坊上的智能合约容易迁移/兼容。(Binance)

不过,不同方案都有自己的权衡:例如某些其他方案可能在灵活性或跨链互操作性方面有优势 — 选择哪一种方案,取决于应用场景与需求。


如果你愿意,我可以 画图 给你看 zkSync 与以太坊主链、以太坊传统交易、Optimistic Rollup 等方案之间 结构与流程差异 —— 这样更直观,也更便于理解。你要这样吗?