简介

本文件为 Code Language 的简要说明,面向 Web3 开发者与学习者,概述 Solana 与 Ethereum 两大生态中常见的合约语言及其基本用途与特点。内容以技术介绍为主,强调实际开发中的可理解性与参考价值,适合作为项目仓库或学习笔记中的快速查阅文档


Ethereum

以太坊生态的合约开发语言丰富,从高级语言到中间/低级语言都有对应工具链。下面按常见度与用途列出

Solidity

  • 定位:以太坊主流高级语言(类似 JS/Java 风格),最广泛使用的智能合约语言

  • 特点

    • 面向合约、支持继承、接口、事件、ABI 自动化
    • 丰富生态(Truffle/Hardhat/Foundry 等工具链)
  • 优点

    • 开发门槛低、资料与示例丰富、主网项目多
  • 示例

    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.0;
    
    contract Counter {
        uint256 public count;
        function inc() public { count += 1; }
    }
    

Vyper

  • 定位:以 Python 风格设计的以太坊合约语言,追求简洁与安全性(避免复杂特性)

  • 特点

    • 语法更接近 Python,但只用于合约开发(不是通用 Python)
    • 有意减少语言特性以降低易错面(例如限制继承、复杂抽象)
  • 优点

    • 更可预测、审计面更小,适合对安全性要求高的合约。
  • 示例(概念)

    
    count: public(uint256)
    
    @external
    def inc():
        self.count += 1
    

Yul

👉 Yul 使用指南

  • 定位:EVM 的中间表示(IR),Solidity 等编译器可输出 Yul,用于更精细的优化与跨 EVM 后端(例如 EVM + ewasm)。

  • 特点

    • 更低级但仍比纯汇编更结构化,适合做跨编译器优化与手写热路径
  • 用途

    • 用于高级语言无法轻易表达的低层优化,或作为编译器输出以便进一步优化
  • 示例

    {
      let x := add(1, 2)
      // ...
    }
    

Huff

👉 Huff 使用指南

  • 定位:极低级、面向 EVM 的宏化汇编语言,专注于最小化 Gas 与高度可控的字节码输出

  • 特点

    • 用于编写高度优化、极致精简的合约字节码(常见于需要极低部署/执行成本的场景或研究)
    • 语法接近汇编/宏,抽象少但灵活度高
  • 优点/用途

    • 适合对 Gas 优化要求极高的场景、实验性实现或极简合约(例如 gas-critical 工具合约)
  • 示例:

// Counter.huff

#define macro MAIN() = takes(0) returns(0) {
    // calldata[0:4] 读取函数选择器
    0x00 calldataload
    0xe0 shr               // 取前 4 字节

    // 判断是否是 increment()
    dup1
    0xd09de08a             // increment() 的 selector
    eq
    increment jumpi

    // fallback: revert
    0x00 0x00 revert

increment:
    // load storage slot 0
    0x00 sload

    // add 1
    0x01 add

    // store back to slot 0
    0x00 sstore

    // return ()
    0x00 0x00 return
}

Solana

  • 主语言Rust

    • Solana 上的智能合约称为 Program,通常用 Rust 编写并通过 LLVM 编译为 eBPF(eBPF 字节码)在 Solana 运行时执行
    • 常用框架:Anchor(高层框架,提供账户验证、序列化、宏等便捷功能)
  • 典型特征

    • 状态以显式账户(Account)数据为中心,而非 EVM 的 storage slot / trie 模型
    • 强并行执行模型,设计上强调高吞吐与低延迟
  • 优点

    • 性能与内存控制优秀;Rust 的类型/借用检查有助于减少一类内存与并发错误
    • Anchor 等框架提高开发效率与一致性
  • 示例(概念)

    // Rust + Anchor(概念示例)
    #[derive(Accounts)]
    pub struct Initialize<'info> {
        #[account(init, payer = user, space = 8 + 40)]
        pub config: Account<'info, Config>,
        #[account(mut)]
        pub user: Signer<'info>,
        pub system_program: Program<'info, System>,
    }