Insights

加密领域的多种编程语言

为什么加密技术栈使用 C++、Go、Rust、Solidity、Haskell、Move 和 WASM —— 以及波场 TRON 如何将 Java-Tron 与 Solidity 及能量/带宽模型相结合。

发布于 Netts 团队 阅读约 13 分钟

其他语言: EnglishРусскийEspañolไทยFrançaisУкраїнськаTürkçeहिंदीفارسیالعربيةHausaPortuguêsTiếng Việt한국어日本語Bahasa IndonesiaDeutschTagalog

加密领域的多种编程语言
目录
  1. 基础:核心协议的语言
  2. 不可能三角与语言哲学
  3. 逻辑层:智能合约及其术语
  4. 形式化验证,或追求完美
  5. 面向资源编程的兴起
  6. 多语言的未来:WebAssembly (WASM)
  7. TRON 网络:性能与易用性。
  8. 核心之外:完整的加密技术栈
  9. 人为因素——技能与严谨性

数字价值传输是 21 世纪最具变革性的技术转变之一。正如工业革命需要新型钢材和机械来建造摩天大楼和铺设铁路轨道一样,区块链革命也要求我们对向计算机传递信息所使用的语言进行全面的重新构想。

软件开发领域经常被比作一个设备齐全的车间,里面装满了各种不同的专业工具。熟练的工匠不会用大锤来雕刻精美的塑像,也不会用微小的凿子来拆除砖墙。每种工具都有其大放异彩的理由——它们经过精心打造和磨练,只为完美胜任某一项工作。编程语言的虚拟世界也不例外。

编程语言之所以如此之多——从被用于构建从操作系统到游戏引擎等一切事物的传统 C++,到现代的安全至上的 Rust——是因为每种语言都体现了一种哲学,并在性能、安全性和开发者生产力之间做出了权衡。“因地制宜,选用合适的工具”这一原则,在加密货币/区块链领域比在任何其他地方都更适用,也更迫切需要。

在这个领域,代码即法律,一个微小的拼写错误就可能导致价值数百万美元的资产无法访问。因此,编程语言的选择绝不仅仅是一个实现细节——它是一个根本性的架构选择,决定了从安全性和可扩展性特征,到所构建系统在未来是否具有生命力的一切。

基础:核心协议的语言

任何加密货币的核心都是其协议:即该网络运行、达成共识并提供安全保障的基本前提。

这些协议就像是数字经济中不可更改的宪法,而能够编写这些协议的语言必须既强大又高效,同时还要能对计算机资源进行精细的底层控制。难怪作为整个行业鼻祖的比特币是使用 C++ 编写的。

这种语言以极速计算、手动内存分配以及稳定的生态系统而闻名——当一个国际网络日复一日、每秒都在处理交易时,每一丝效率都至关重要。选择 C++ 是经过深思熟虑的,而非偶然。这使得中本聪能够让代码在硬件配置极低的早期节点上极速运行。它对内存的分配和释放拥有细粒度的控制,从而防止了可能导致节点崩溃并引发网络分裂的内存泄漏。这一传统一直延续至今。

为了获得直接的性能和控制力,大多数大型区块链项目仍然依赖 C++。它让早期的加密货币(如莱特币)能够简单地分叉比特币代码库,修改几个参数(如出块时间、哈希算法)即可完成,而无需重写所有逻辑。门罗币等隐私币也大量使用 C++,以支持环签名和隐身地址等操作所需的复杂加密原语。在这些场景下,速度至关重要,以确保网络在高计算负载下不会陷入停滞。

不可能三角与语言哲学

随着区块链行业的发展,开发者们在所谓的“区块链不可能三角”中苦苦挣扎——即在去中心化、安全性和可扩展性之间进行权衡——他们开始为自己筹集资金,并构建了后来被称为“基于代币的经济模型”的体系。

编程语言的选择也成为了这种权衡中的一个重要杠杆。

以太坊与单点故障(SPOF)的风险:以太坊项目意识到单点故障可能导致毁灭性的后果,因此从一开始就倡导多客户端方案,以确保去中心化的核心地位。这意味着以太坊协议不应仅仅是一个应用程序,而更像是一个可以用多种语言实现的标准。

其使用最广泛的客户端——Geth——是用 Go 语言开发的。Go 是由 Google 设计的,旨在开发高性能且适用于网络连接服务器类型的软件。Go 的轻量级并发原语(称为 goroutines)使其特别适合管理成千上万个并发网络连接,而区块链节点为了向对等节点传播交易和区块,必须维持这些连接。再加上简洁的语法和优秀的标准库,Go 在性能与开发友好性之间实现了极佳的平衡,从而能够快速迭代并吸引更广泛的贡献者群体。

另一个备受瞩目的以太坊客户端(起初是 Parity,后来是 OpenEthereum)则是用 Rust 开发的。Rust 由 Mozilla 创造,秉持着不同的哲学。它极度强调内存安全,试图通过其独创的系统(所有权与借用)在编译时排除整类编程错误。

虽然 C++ 赋予了开发者手动控制内存的能力(同时也给了他们“作茧自缚”的机会),而 Go 使用垃圾回收器自动进行内存管理(伴随一定的性能损耗),但 Rust 在编译时利用了非常严格的基本规则。这意味着大量可能导致节点崩溃或被对手利用的漏洞,在有效的 Rust 代码中根本无法表达。

针对同一协议使用多种语言并非弱点,而是一种巨大的优势。 如果在以太坊的 Go 实现中发现了漏洞利用程序,网络仍可以通过不受影响的 Rust 客户端继续运行,如果没有多语言支持,这是不可能实现的。在这一层级进行构建不仅需要掌握某种语言的技巧,还需要在分布式系统、点对点网络和高级密码学领域拥有深厚且长年累积的专业知识。

逻辑层:智能合约及其术语

如果说核心协议是操作系统,那么智能合约就是运行在其上的震撼世界的应用。正是这些将协议条款直接表达为代码行的自执行代码,释放了区块链在从去中心化金融 (DeFi) 到数字身份等应用领域的全部潜力。

加密领域的多种编程语言

大多数人用于编写智能合约的语言是 Solidity。它专为在 EVM 上运行而构建,其语法刻意设计得与 JavaScript 非常相似,这不仅使得全球最大的开发者社区(JavaScript 社区)能够轻松上手,还影响了大量已用其他语言编写的代码。正是这种易用性推动了去中心化应用的初步发展以及以太坊生态系统的快速扩张。Solidity 让开发者能够从根本上以“合约”、“映射”和“事件”的角度来思考代码——所有这些抽象概念都很好地对应了金融协议的心智模型。

然而,Solidity 的历史(正如所有计算机安全史一样)也是一部充满惨痛教训的历史。 由于区块链的不可篡改性,智能合约中的漏洞也可能导致永久且严重的后果,正如 DAO 攻击事件或 Parity 多重签名钱包冻结事件所表现的那样。

这些事件提醒我们:尽管语法可能类似于 JavaScript 且易于阅读,但其底层潜伏着危险的复杂性。因此,较新的区块链尝试了不同的方法。像 Sovrin 和 Dfinity 这样的系统也转向了 Rust,依靠其编译时保证来增强其智能合约的安全性。Rust 旨在防止“数据竞态”以及高性能系统常见的其他类似数据竞态的异常行为。

形式化验证,或追求完美

在生态系统中更具学术先进性和高保障性的领域,Cardano 和 Tezos 等项目采取了截然不同的方法。Cardano 做出了一项激进且反直觉的决定,将其核心实现建立在 Haskell 之上,并将其智能合约平台 (Plutus) 作为 Haskell 的一种方言。Haskell 是一种具有深厚数学基础的纯函数式语言。

它将计算视为数学函数的求值,并消除了“副作用”——即可能无法预测的系统状态变化。这正是 Haskell 如此适合形式化验证的原因:开发者可以通过数学方式证明其代码的正确性。开发者无需仅使用少数潜在输入来测试代码,而是可以证明代码在所有可能的输入下都能正确运行。

这是一种权衡:为了给高价值金融合约提供所谓无与伦比的安全性和可靠性,它使得开发者群体变得更窄,且经验相对较少。

Tezos:Tezos 的原生语言名为 Michelson,这是一种专为形式化验证而设计的低级、基于栈的语言。因为当你管理数百万美元的资金时,你会希望对合约的行为有确切的预判。

面向资源编程的兴起

最近,一种新的范式开始在 Move 等语言中得到体现。Move 是 Meta(原 Facebook)的一个项目,Aptos 和 Sui 的高性能区块链便源于此。Move 专为以数字资产为中心而设计。在 Solidity 中,代币不过是合约内账本中的一个条目。而在 Move 中,你可以将代币视为一种“资源”——即一种特殊的数据结构,它永远不能被复制或隐式丢弃,只能从一个存储位置移动到另一个存储位置。

该模型通过使用资源,在语言层面上避免了双重支出和代币销毁等常见错误。它将心智模型从“更新数据库”转变为“移动实物”,这更符合我们对价值的直观理解。通过这项创新,安全的智能合约将成为“默认设置”——将语言本身视为防止某些最常见金融攻击手段的护栏。

多语言的未来:WebAssembly (WASM)

多年来,EVM 一直占据着统治地位,但一个新的竞争者正在逼近:WebAssembly (WASM)。WASM 最初是为了在 Web 浏览器中运行高性能代码而构建的,现在正逐渐成为在 Polkadot、Cosmos 和 Near 等区块链上运行智能合约的标准。

这正是 WASM 的魅力所在:它是一个编译目标,而非一种源语言。

加密领域的多种编程语言

这意味着开发者现在可以使用 Rust、C++、AssemblyScript(一种类似 TypeScript 的语言),或者任何其他可以编译为 WASM 的语言来编写智能合约。这打破了专为区块链设计的语言的垄断地位,转而让开发者能够在加密领域运用他们已有的工具、库和专业知识。它勾勒出一个多语言并存的未来愿景:在这个愿景中,准入门槛已显著降低,成功更多地取决于构建出色的应用,而非学习新的语法。

TRON 网络:性能与易用性。

在庞大的区块链平台生态系统中,TRON 旨在提供高吞吐量和可扩展性,并致力于成为一个去中心化的娱乐和内容共享平台,最终在没有中心化中间商的情况下让创作者受益。TRON 的架构决策源于这些愿景,并提供了一个务实工程实践的有趣范例。

其核心客户端 Java-Tron 使用 Java 编写——几十年来,Java 一直是企业级软件领域的中流砥柱。这是一个刻意的战略选择。Java 经过了企业级的长期验证,非常稳定,并运行在极其高效的 Java 虚拟机([JVM])之上;如果说有什么软件支撑着全球网络,那么 JVM 绝对是系统软件设计的丰碑。

JVM 内置的 JIT(即时编译)优化特性,确保了 TRON 节点能够长期保持高性能运行。

这一决策还帮助 TRON 吸引了全球庞大的 Java 开发者群体,并基于旨在实现高速和高性能的委托权益证明(DPoS)共识技术,实现了其核心基础设施的快速开发。

在合约层方面,TRON 采取了另一项关键战略决策:他们使用了与以太坊 EVM 兼容的虚拟机。这意味着任何能够编写智能合约的人,无论是散户还是巨鲸(包括处于 ERC20 阶段时的我),都可以使用 Solidity 智能合约语言为 Tron 编写合约。

这种互兼容性成为了增长的主要助力,使原本在以太坊生态系统中工作的现有 dApp 和开发者能够平滑地迁移或扩展到 TRON 网络。虽然 TRON 确实能提供这些解决方案,但与其交互会涉及到一个围绕“能量”和“带宽”展开的、非常有趣且复杂的资源模型。

以太坊的“Gas”模型是一种基础模型,用户为每项操作支付 ETH。TRON 模型则不使用 Gas 收费,而是将资源分开。网络带宽消耗在交易字节(主体和数据大小)上,而 Gas 则用于处理包含智能合约逻辑所需的计算能力/时间。

虽然当用户拥有足够的冻结 TRX 时可以实现“免费”交易,但对于高交易量的应用——例如热门的去中心化游戏、高流量的交易算法,甚至是繁忙的金融服务——持续的需求周期会给运营带来巨大压力。任何耗尽能量的 dApp 都会导致操作失败,从而造成糟糕的用户体验和业务损失。

这催生了一个虽然小众但却非常重要的市场,即提供 TRON 能量租赁自动化服务的市场。大户可以“冻结”他们的 TRX 来产生能量,并将其出借给其他用户。 对于任何在 TRON 网络上开展业务的严肃企业来说,这一过程的自动化都是必不可少的。它能确保应用平稳、低成本且不间断地运行。与直接销毁 TRX 支付手续费相比,使用这些平台可以节省高达 80% 的成本。

能量租赁的自动化将原本繁琐、重复的日常琐事转变为一种无感且后台化的操作,让开发者能够专注于代码编写,而无需时刻关注资源余额!

核心之外:完整的加密技术栈

一个 2020 年代的去中心化应用不仅仅包含其链上智能合约。它是一套在客户端运行 Web 应用的端到端技术栈。用户所看到并与之交互的部分,即所谓的前端 dApp,是使用成熟的 Web 开发语言(如 JavaScript 或 TypeScript)结合 React、Vue.js 或 Svelte 等组件化框架构建而成的。

在后端,要构建一个稳健的应用,需要大量的离链服务。这些服务可能是类似于 The Graph(使用名为 GraphQL 的查询语言)的数据索引器,使复杂的区块链数据变得易于搜索。对于检索诸如“显示该用户拥有的所有 2023 年铸造的 NFT”之类的信息,区块链是一个糟糕的数据库,因此索引器会读取链上数据并将其整理到常规数据库中。

加密领域的多种编程语言

在这一层,Go 和 Node.js 等语言非常适合通过可扩展的 API 为前端提供数据,因为它们在处理并发网络请求方面表现极其出色。Python 也是开发者的宠儿,尤其适用于脚本编写或机器学习等数据流向分析,这些分析可以利用区块链数据进行驱动。

Python 拥有庞大的数据科学库,这意味着追踪“巨鲸”动向或计算市场情绪的链上分析师拥有某种“主场优势”。

一些项目(如 Lisk)在 JavaScript 领域更进一步,开发了完整的软件开发工具包 (SDK),使开发者能够使用 JavaScript 从零开始创建自定义区块链——这为进入该领域的开发者提供了一条巨大的捷径。

这种全栈视角也传递了一个信号:加密领域的开发是多语言协作的,你需要为技术栈的每一层选择不同的工具。但对于在 TRON 网络中编写后端系统的开发者来说,拥有一种可靠的编程方式来租赁能量(Energy)不仅是为了方便,它与数据库管理和 API 路由一样,属于核心开发范畴。

人为因素——技能与严谨性

加密行业中编程语言的种类繁多,反映了一个深刻的现实:技术的优劣取决于其创造者。构建一个安全、可扩展且真正去中心化的网络是一项艰巨的任务,需要开发团队在这些领域拥有数年甚至数十年的经验。

一个项目所选择的语言——无论是性能导向的 C++、注重安全的 Rust、经过形式化验证的 Haskell,还是开发者友好的 JavaScript——都体现了团队对计算最看重的价值,以及他们希望如何更好地改变世界。

大多数项目的开源特性驱动并连接了全球最顶尖的头脑。这是一个健康的生态系统,分享即是创新,代码公开供任何人审查,同时推动整个行业共同进步。Go 客户端中的漏洞可以反馈到 Rust 客户端的设计中;Move 语言在资源模型上的进步也可以被 Solidity 编译器所采纳。

这是一个持续的过程,也是一种集体学习。

这种技术的交织以及对持续优化的不懈追求,表明了对专用工具日益增长的需求,这些工具能够驾驭特定生态系统的复杂性。随着网络变得更加专业化,其周边的工具也需要随之演进。

对于在 TRON 等前沿网络上运行的开发者和 DApp 而言,直接管理其资源(如能量 (TRX) 和带宽)往往会因为成本效率低下以及手动资源管理带来的易出错性而成为一种阻碍。如果错过续费,交易可能会失败;如果手动支付过高,则可能会造成资金浪费。

这正是专业平台介入的契机,它们屏蔽了理解和维护此类复杂性的必要性,并提供了行业蓬勃发展所需的“基础设施即服务”层。

加密领域的多种编程语言

例如,Netts Workspace 提供了全套 TRON 能量管理套件——包括智能调度、实时成本优化和委托自动化。它提供了丰富的 API 和完整的财务管理及分析仪表板——这让资源管理变得简单,使创作者和企业能够专注于构建其应用程序,而无需担心基础设施的维护。

分享 X Telegram LinkedIn Reddit

下一步