Sway 语言与 Fuel 工具链源码构建全指南从零搭建 Forc 与 Sway 编译环境【免费下载链接】sway Empowering everyone to build reliable and efficient smart contracts.项目地址: https://gitcode.com/GitHub_Trending/sw/sway本篇技术指南以 Sway 语言项目Fuel 区块链原生智能合约语言的仓库 README 为核心系统讲解 Sway 的语言定位、文档体系、Rust 工具链依赖、从源码构建 ForcFuel Orchestrator的完整步骤、just自动化命令集以及 CI 校验脚本与 Docker 部署方案。读完本文你将掌握在本地从源码编译 Sway 工具链、验证构建产物、运行内置测试与基准脚本并读懂整个仓库的模块划分与常用开发命令。Sway面向 Fuel 区块链的现代智能合约语言Sway 是专为 Fuel 的定位说明Sway 深度借鉴了 Rust 的设计理念目标是把现代语言开发体验与性能带给区块链生态——这意味着类型安全、所有权/借用语义、函数式表达等 Rust 风格特性都被带到了链上合约的开发场景中。作为配套工具链的核心组件ForcFuel Orchestrator承担着与 Rust 生态中cargo类似的角色。在 forc/README.md 中明确写道Forc 为开发者提供脚手架生成、格式化、脚本运行、合约部署、合约测试等一系列命令与工具。从仓库结构看Sway 采用 Rust workspace 组织见 Cargo.toml当前版本为0.72.0主要成员包括Workspace 成员职责forcFuel Orchestrator CLI 主程序forc-pkg包管理与依赖解析manifest、source、lockfileforc-plugins/*forc-debug、forc-doc、forc-fmt、forc-lsp、forc-migrate、forc-publish、forc-tx 等插件forc-test测试执行框架sway-ast/sway-parse抽象语法树与解析器sway-core语义分析、类型系统、IR 生成与汇编生成sway-ir中间表示与优化 pass 管线sway-error/sway-types诊断错误与类型基础设施sway-lsp语言服务器编辑器支持swayfmt代码格式化器sway-lib-stdSway 标准库address、storage、vec、bytes、hash 等模块testE2E 虚拟机测试与 in-language 测试文档体系Sway Book、标准库与技术参考README 将官方文档分为三大入口对应的仓库源码分别位于 docs/book、docs/referenceSway Book用户文档覆盖安装发布版工具链、语言入门、Program 类型合约/库/脚本/谓词、基础语法、区块链开发、进阶概念、集合类型、测试调试、LSP 等。完整目录可查看 docs/book/src/SUMMARY.md其中包含basics变量、内建类型、控制流、错误处理、blockchain-development存储、纯度、原生资产、访问控制、common-collectionsVec、StorageVec、StorageMap等章节。Sway 标准库文档对应 sway-lib-std 的实现涵盖 address.sw、vec.sw、storage 等核心模块。Sway 语言技术参考对应 docs/reference/src 下的 documentation 与可编译 code 示例。README 明确指出源码构建小节面向的是编译器与工具链开发者若只想开发合约、使用 Sway 语言本身应优先阅读上述文档。从源码构建依赖准备Sway 使用 Rust 编写构建前需要完成三步环境准备。安装 Rust 工具链并切换到 stable按照 Rust 官方安装方式安装 Rust 工具链后将默认工具链切换为stablerustup default stable将 Cargo bin 目录加入 PATH若尚未配置在~/.profile末尾追加以下行然后重启 shell 会话或执行source ~/.profileexport PATH${HOME}/.cargo/bin:${PATH}这一步确保cargo、rustup等命令在任意目录可用。从仓库的 Cargo.toml 可以看到构建依赖覆盖了 clapCLI 解析、tokio异步运行时、serde序列化、mdbook文档构建、tower-lsp语言服务器等大量 crate首次cargo build会拉取并编译这些依赖耗时较长属正常现象。构建 Forc 并验证工具链克隆仓库并构建整个 Sway 工具链git clone gitgithub.com:FuelLabs/sway.git cd sway cargo build构建完成后通过运行 Forc 的帮助命令验证产物是否正常cargo run --bin forc -- --helpforc的二进制入口定义在 forc/src/main.rs它调用forc::cli::run_cli()该函数定义在 forc/src/cli/mod.rs负责初始化 tracing 日志订阅器然后分发到具体子命令。CLI 元信息名称forc、描述 Fuel Orchestrator、版本号在 forc/Cargo.toml 中声明并由 clap 派生宏生成。forc --help会列出以下内置子命令依据 forc/src/cli/mod.rs 的枚举定义子命令别名作用forc buildforc b编译当前项目forc check—类型检查不生成字节码forc new/forc init—脚手架创建 / 初始化项目forc add/forc remove—添加 / 移除依赖forc testforc t运行测试forc update—更新依赖到最新版本forc clean—清理构建产物forc completions—生成 shell 补全forc parse-bytecode—解析字节码forc plugins—列出可用插件forc template—从模板生成项目forc contract-id/forc predicate-root—计算合约 ID / 谓词根forc addr2line—字节码地址到源码行号映射forc unknown—外部子命令插件如 forc-doc、forc-lsp、forc-fmt需要说明的是forc build、forc check等核心编译功能背后由 sway-core 驱动而forc deploy、forc run、forc call等命令则由 forc 插件forc-plugins目录下独立 crate提供通过外部子命令机制被forc调用——当用户输入未内置的子命令时CLI 会查找名为forc-子命令的可执行文件并执行见 forc/src/cli/mod.rs 中的Forc::Plugin分支与 forc/src/cli/plugin.rs。全局安装 Forc若希望将forc安装为系统命令而非每次cargo run可执行cargo install --locked --debug --path ./forc类似的ci_checks.sh 展示了 forc-fmt、forc-lsp、forc-client、forc-tx、mdbook-forc-documenter 等组件的安装方式可作为安装其他工具的参考。just 命令集测试、基准与自动化的统一入口README 指出仓库内除构建之外的所有脚本与命令均通过 just 定义了完整 recipe 清单可先运行just --list查看。全部 recipe 按分组整理如下自动化组automationRecipe说明update-contract-ids自动更新仓库内测试相关的 contractId调用 test/update-contract-ids.shupdate-fuel-dependencies升级所有 Fuel 维护的依赖版本调用 update_fuel_dependencies.shbisect-forc path command借助二分脚本定位引入回归的提交见 scripts/bisect-forc构建组buildRecipe说明build-highlightjs构建 Sway 语法高亮scripts/highlightjsbuild-prism构建 Prism 语法高亮scripts/prismgenerate-sway-lib-std重新生成标准库sway-lib-std/generate.shCI 组ciRecipe说明ci-check运行 ci_checks.sh详见下文install-ci-check安装 CI 检查依赖cargo-sort、cargo-generate、cargo-udeps基准组benchmarkRecipe说明benchmark编译器基准如编译时间benchmark.shbenchmark-tests运行测试基准test/bench.sh此外 justfile 还包含一组performance组 recipeperf-e2e、perf-in-lang、perf-storage、perf-all、perf-diff等README 的just --list输出未展示全部但源码中均有定义用于收集 E2E 测试、in-language 测试与存储基准的 gas 用量与字节码体积输出 CSV 到 test/perf_out 目录并由 scripts/perf 下的脚本做对比统计。测试组testRecipe说明test-forc-fmt-check-panic测试forc fmt是否会在特定输入下 panicscripts/formatter/forc-fmt-check-panic.shrun-tests别名t运行完整本地测试套件scripts/test/run-tests.sh可传--lsp参数以包含 sway-lsp 测试CI 检查脚本本地复现仓库 CIci_checks.sh 几乎可以本地复现仓库的全部 CI 流程按序执行cargo clippy --all-features --all-targets -- -D warningsClippy 静态检查警告视为错误cargo sort -w --check与模板目录排序检查依赖声明顺序校验cargo fmt --all -- --check格式校验cargo build --locked --workspace --all-features --all-targets全 workspace 全特性构建cargo test --locked全量单元测试cargo nightly udeps --locked --all-targets检测未使用依赖需 nightly 工具链依次cargo installforc 及其插件forc-fmt、forc-lsp、forc-client、forc-tx、mdbook-forc-documenterforc build --path sway-lib-std编译标准库并运行 sway-lib-std/forbid-tests.sh禁止标准库内出现测试编译 examples 与 docs/reference/src/code 中的文档示例代码forc new test-proj脚手架验证创建新项目、链接本地标准库、构建、用 templates/sway-test-rs 模板执行cargo generate并跑cargo test运行 EVM 目标 E2E 测试、SDK harness 测试以及cargo run --locked --release --bin test -- --locked全量 E2E后者需要本地运行fuel-core节点ci_checks.sh 顶部给出了安装与启动方式。这段脚本完整串联了格式 → 静态检查 → 构建 → 单元测试 → 集成示例 → 模板验证 → E2E的链路是理解仓库质量保障体系的最佳切入点。执行just ci-check前请先通过just install-ci-check安装脚本开头注释中要求的三个工具cargo-sort、cargo-generate、cargo-udeps。Docker 化构建 Forc若不想污染本地 Rust 环境仓库提供了 deployment/Dockerfile采用两阶段构建Stage 1Build基于cargo-chef镜像先安装lld、clang、libclang-devSway 构建链路所需的链接器与 C 依赖随后用cargo chef prepare生成 recipe.jsoncargo chef cook --release -p forc单独编译依赖层以命中 Docker 缓存最后cargo build --release -p forc产出 release 版forc二进制Stage 2Run基于ubuntu:20.04精简镜像仅安装libssl-dev运行时依赖将构建产物复制为/root/forc容器入口为exec ./forc。构建命令参考docker build -f deployment/Dockerfile -t sway-forc .开始你的 Sway 之旅完成cargo build后即可用cargo run --bin forc -- new 项目名创建第一个 Sway 项目并用forc build编译、forc test运行测试。仓库中的 examples 目录提供了大量可直接研读的示范工程——例如 counter 计数器合约、wallet_smart_contract 钱包合约、storage_map 存储映射示例等每个示例均含Forc.toml清单文件可直接forc build --path编译验证。对工具链本身的深入开发建议按编译器前端sway-parse/sway-ast→ 语义分析sway-core/semantic_analysis→ IR 与优化sway-ir→ 汇编生成sway-core/asm_generation→ CLI 集成forc的链路阅读源码并以 ci_checks.sh 与 justfile 中的测试命令作为回归验证手段。若要贡献代码请遵循 Sway Book 中的《Contributing To Sway》章节指引docs/book/src/reference/contributing_to_sway.md。【免费下载链接】sway Empowering everyone to build reliable and efficient smart contracts.项目地址: https://gitcode.com/GitHub_Trending/sw/sway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
