fuels-ts 中的 @fuel-ts/script 包:Script 调用流程源码解析与完整版本演进
区块链Web3【免费下载链接】fuels-tsFuel Network Typescript SDK项目地址https://gitcode.com/GitHub_Trending/fu/fuels-ts点击查看免费下载本篇以fuel-ts/script包的变更记录packages/script/CHANGELOG.md为主线结合当前仓库源码讲清这个包在 Fuel Network TypeScript SDK 中的职责边界、Script/ScriptInvocationScope/ScriptRequest三类核心 API 的调用链路、可配置常量与 Blob 部署机制并完整继承 changelog 中从 2022 年 v0.1.0 到当前 0.103.0 的全部版本里程碑。读完本文你既能照着仓库测试用例跑通一个带main参数的 Sway script也能理解每次版本升级forc、fuel-core、Provider 初始化方式、Node 支持矩阵对实际使用方的影响。包定位与项目结构fuel-ts/script是 fuels-ts 单体仓库中负责执行 Sway script 程序的库包源码位于packages/script/。从 packages/script/package.json 可以看到当前版本为0.103.0与 changelog 最新条目一致运行环境要求node: ^20.0.0 || ^22.0.0 || ^24.0.0产物同时提供 CJSdist/index.js、ESMdist/index.mjs与类型声明dist/index.d.ts。它的运行时依赖恰好是 changelog 中反复出现的那批 workspace 兄弟包这一点对理解 changelog 至关重要——绝大多数版本条目其实是这些依赖包的同步升级依赖版本策略fuel-ts/abi-coderworkspace:*fuel-ts/accountworkspace:*fuel-ts/errorsworkspace:*fuel-ts/mathworkspace:*fuel-ts/programworkspace:*fuel-ts/transactionsworkspace:*fuel-ts/utilsworkspace:*devDependencies 中只有internal/forc用于编译测试用的 Sway 工程。构建脚本也很直接pretest先执行build:forcpnpm fuels-forc build -p test/fixtures/forc-projects --releasebuild用 tsuppostbuild执行 scripts/postbuild.ts。源码文件极少、职责清晰见 packages/script/src/index.ts 的三个导出文件职责src/script.tsScript类bytecode ABI Account 的封装、setConfigurableConstants、deploysrc/script-invocation-scope.tsScriptInvocationScope构造ScriptRequest并挂载到ScriptTransactionRequestsrc/scripts.tsreturnZeroScript内置的返回零极简脚本用于纯转账交易src/types.tsAbstractScript抽象基类继承自fuel-ts/program的AbstractProgram要求实现bytes: Uint8Array核心 API从构造函数到 functions.main1. Script 类Script的构造函数接收编译产物bytecode、JSON ABI 和一个Account见 packages/script/src/script.ts#L70-L82constructor(bytecode: BytesLike, abi: JsonAbi, account: Account) { super(); this.bytes arrayify(bytecode); this.interface new Interface(abi); this.provider account.provider; // Provider 直接取自 Account this.account account; this.functions { main: (...args: TInput) new ScriptInvocationScope(this, this.interface.getFunction(main), args), }; }关键点provider不是单独传入的而是从account.provider派生的这也呼应了 changelog 0.98.0 的 breaking changemakingproviderinitializationsyncagain——Provider 与 Account 的绑定关系决定了 script 初始化时不需要额外异步操作。functions只暴露main一个入口。这与 Sway script 的语言模型一致script 没有可被外部选择的函数集入口固定为main泛型TInput/TOutput约束了参数与返回值类型。调用script.functions.main(...args)返回的是一个ScriptInvocationScope而不是立即发送交易。2. ScriptInvocationScope 与调用链packages/script/src/script-invocation-scope.ts 继承自fuel-ts/program的FunctionInvocationScope核心是两个方法protected override async updateScriptRequest() { if (!this.scriptRequest) { await this.buildScriptRequest(); } this.transactionRequest.setScript(this.scriptRequest, this.args); } private async buildScriptRequest() { const programBytes (this.program as AbstractScript).bytes; const chainInfoCache await (this.program.provider as Provider).getChain(); if (!chainInfoCache) { throw new FuelError( FuelError.CODES.CHAIN_INFO_CACHE_EMPTY, Provider chain info cache is empty. ... ); } this.scriptRequest new ScriptRequest( programBytes, (args: TArgs) this.func.encodeArguments(args), () [] as unknown as TReturn ); }可以推断出完整调用链functions.main(args)→ScriptInvocationScope→buildScriptRequest()需要provider.getChain()的缓存因此 Provider 必须先正确初始化这正是 changelog 0.58.0 要求Provider.create(url)异步初始化的原因→transactionRequest.setScript(...)ScriptTransactionRequest来自fuel-ts/account→ 基类BaseInvocationScope的call()。call()定义在 packages/program/src/functions/base-invocation-scope.ts#L503-L549它先执行fundWithRequiredCoins自动估计并填充费用输入再account.sendTransaction最终返回{ transactionId: string; waitForResult: () PromiseFunctionResultT; waitForPreConfirmation: () PromisePreConfirmationFunctionResultT; }即提交是两步式的先拿到transactionId再决定是否waitForResult。结果组装由 packages/program/src/response.ts 中的buildFunctionResult完成——它从 receipts 中提取value返回值解码、logs、groupedLogs、gasUsed与transactionId。3. ScriptRequest数据偏移与结果解码ScriptRequest位于 packages/program/src/script-request.ts承担三件事数据偏移计算getScriptDataOffsetWithScriptBytes(byteLength, maxInputs)用SCRIPT_FIXED_SIZE calculateVmTxMemory({ maxInputs }) byteLength计算 script data 在 VM 内存中的起始位置——maxInputs来自链的 consensus parameters所以这也是调用前必须拉取 chain info的底层原因。参数编码encodeScriptData(data)支持两种编码器返回形态——直接Uint8Array或{ data, script }对象后者允许编码阶段改写脚本字节。结果解码decodeCallResult会遍历 receipts 找ScriptResult与Return/ReturnData/Revertreceipt遇到Revert时抛出SCRIPT_REVERTED并由extractTxError结合 logs、receipts、dry-run status 组装出带原因的可读错误——这正是 changelog 0.13.0 起Failures now output the reason这条改进在多年后的完整形态。4. returnZeroScript内置极简脚本packages/script/src/scripts.ts 中硬编码了一个 4 字节的脚本源码注释标明其汇编语义为RET(REG_ZERO); NOOP字节为0x24000000用于 coin 转账交易。它是 SDK 内部在纯转账场景下构造 script 交易的兜底手段代码中的 TODO 注明未来应移除硬编码脚本对应上游 issue #281。可配置常量setConfigurableConstantschangelog 0.43.0 引入了 add support for configurable constants on scriptsPR #1003对应实现是Script的setConfigurableConstantspackages/script/src/script.ts#L91-L122setConfigurableConstants(configurables: { [name: string]: unknown }) { try { if (!Object.keys(this.interface.configurables).length) { throw new FuelError( FuelError.CODES.INVALID_CONFIGURABLE_CONSTANTS, The script does not have configurable constants to be set ); } Object.entries(configurables).forEach(([key, value]) { if (!this.interface.configurables[key]) { throw new FuelError( FuelError.CODES.CONFIGURABLE_NOT_FOUND, The script does not have a configurable constant named: ${key} ); } const { offset } this.interface.configurables[key]; const encoded this.interface.encodeConfigurable(key, value as InputValue); this.bytes.set(encoded, offset); // 直接把编码值写回字节码 }); } catch (err) { throw new FuelError( FuelError.CODES.INVALID_CONFIGURABLE_CONSTANTS, Error setting configurable constants: ${(Errorerr).message}. ); } return this; }实现方式是把编码后的常量值直接写进脚本字节码中 ABI 声明的 offset 位置this.bytes.set(encoded, offset)因此必须在执行前调用。packages/script/src/script.test.ts 中有两条对应的负向用例脚本没有 configurables 时抛INVALID_CONFIGURABLE_CONSTANTSThe script does not have configurable constants to be set常量名拼错时抛 does not have a configurable constant named: NOT_DEFINED。部署脚本deploy() 与 Blob 机制较新的Script提供deploy方法packages/script/src/script.ts#L133-L141底层是fuel-ts/account的deployScriptOrPredicatepackages/account/src/utils/deployScriptOrPredicate.ts。其流程为用getBytecodeId(bytecode)计算blobId把去掉 configurables 段的字节码放进BlobTransactionRequest的 witness用getPredicateScriptLoaderInstructions生成一段loader 字节码负责在运行期从 blob 加载完整脚本并同步调整 ABI 中 configurable 的 offsetadjustConfigurableOffsets先provider.getBlobs([blobId])查询链上是否已存在该 blob——已存在则直接返回 loader 实例不重复提交否则由部署方钱包出资assembleTx组装 blob 交易、sendTransaction提交并等待成功失败抛TRANSACTION_FAILED返回{ blobId, waitForResult }waitForResult解析出加载后的Script实例。fuels CLI 的部署命令直接复用了这条链路见 packages/fuels/src/cli/commands/deploy/deployScripts.ts#L31-L35const script new Script(bytecode, abi, wallet); const { bytes: loaderBytecode, interface: { jsonAbi }, } await (await script.deploy(wallet)).waitForResult();部署完成后记录的是loader 字节码 调整后的 ABI后续调用方只需持有这段 loader bytecode 即可完整脚本体留在链上 blob 中按需加载。实战实例化并运行一个 script仓库内置的端到端示例packages/script自带 Sway 测试工程 test/fixtures/forc-projects/call-test-script/src/main.swscript; struct MyStruct { arg_one: bool, arg_two: u64, } fn main(my_struct: MyStruct) - MyStruct { log(my_struct.arg_one); log(my_struct.arg_two); MyStruct { arg_one: my_struct.arg_one, arg_two: my_struct.arg_two, } }对应的测试 packages/script/src/script.test.ts#L55-L98 演示了不经过类型生成typegen、手工构造ScriptRequest的手写封装路线const abiInterface new Interface(scriptJsonAbi); scriptRequest new ScriptRequest( scriptBin, (myStruct: MyStruct) arrayify(abiInterface.functions.main.encodeArguments([myStruct])), (scriptResult) { if (scriptResult.returnReceipt.type ReceiptType.Revert) throw new Error(Reverted); if (scriptResult.returnReceipt.type ! ReceiptType.ReturnData) throw new Error(fail); const decoded abiInterface.functions.main.decodeOutput(scriptResult.returnReceipt.data); return (decoded as any)[0]; } ); const request new ScriptTransactionRequest(); request.setScript(script, data); await request.estimateAndFund(account); const response await account.sendTransaction(request); const transactionResult await response.waitForResult(); const result script.decodeCallResult(transactionResult);这条路径对应官方文档 apps/docs/src/guide/scripts/running-scripts.md 中 hand code out a solution wrapper 的写法如果你使用fuels typegen生成的类型则可以走更简洁的new FuelScript(bytecode, abi, wallet)路线见 apps/docs/src/guide/scripts/instantiating-a-script.md。使用类型生成后的典型调用packages/fuel-gauge/src/script-main-args.test.ts 覆盖了带main参数的 script 的多种形态单参 u8、双参 struct、struct 返回、txParams 校验const scriptInstance new FuelScriptBigNumberish[], BigNumberish( ScriptMainArgs.bytecode, ScriptMainArgs.abi, wallet ); const { waitForResult } await scriptInstance.functions.main(foo).call(); const { value, logs, groupedLogs } await waitForResult(); expect(value?.toString()).toEqual(bn(foo).toString()); expect(logs).toStrictEqual([u8 foo, 33]); expect(groupedLogs).toStrictEqual({ [ZeroBytes32]: [u8 foo, 33] });几个可验证的行为细节waitForResult()返回对象同时带value、logs、groupedLogs、gasUsed等字段由 packages/program/src/response.ts#L157-L168 组装Sway 侧log(...)的输出会按标签 值成对出现在logs中并归组到groupedLogs[ZeroBytes32]下txParams({ gasLimit: 10 })若低于交易需求会直接拒绝报错匹配/Gas limit 10 is lower than the required/——gas 策略TX policies在 changelog 0.70.0/0.71.0 加入PR #1437/#1624。版本演进changelog 的完整继承与解读fuel-ts/script的 changelog 覆盖2022-03-04 的 v0.1.0 到 2026 年的 0.103.0采用 Conventional Commits 约定文件尾注See Conventional Commits for commit guidelines。下面按时间正序完整列出全部版本及其要义其中只有依赖同步的补丁版本统一标注依赖同步。2022 年v0.1.0 → v0.7.0版本日期要义v0.1.02022-03-04首个版本v0.3.02022-03-04版本推进v0.4.02022-03-13版本推进v0.5.02022-03-30版本推进v0.6.02022-04-25版本推进v0.7.02022-06-02启用 UTXO 校验PR #2780.8.0 → 0.18.0工具链与数字类型奠基版本类型要义0.8.0Minor全包 bump minorPR #405新增 README#374修复 fuels 包列表#3970.9.0Patch依赖同步0.10.0Minor从 providers 包移除 transactions 再导出PR #4280.11.0Patch修复包链接到node_modules内部的问题、移除旧 Lerna 配置PR #437——monorepo 从 Lerna 迁移的印记0.12.0Patch依赖同步0.13.0Minor失败现在会输出原因PR #4560.14.0Patch依赖同步0.15.0Patch用 bn.js 重构替代原生 bigintPR #468——fuel-ts/math的bn自此贯穿 SDK0.16.0Minor修复ByteArrayCoder导入PR #5090.17.0Minor升级forc到 0.24.3#511解析 Logs 与 Log DataPR #5170.18.0Patch依赖更新#543全仓库forc fmt格式化#5350.19.0 → 0.33.0Account 化与 main 参数版本类型要义0.19.0Minor交易增加 output 变量PR #5490.20.0–0.22.1Patch依赖同步0.22.2 增加文档与示例 #6120.23.0Patch文档更新#639revert/失败时改进日志输出PR #6400.24.0–0.28.1Patch依赖同步0.24.2 调整文档更新时序 #6460.29.0Patch库导出与测试工具分离PR #709新增 scripts 文档PR #6700.30.0–0.31.0Patch依赖同步0.32.0MinorBaseWalletLocked更名Account后的全量适配PR #789——账户模型统一的节点0.33.0Minorscript 支持 main 参数PR #745——functions.main(...args)用法的确立0.34.0 → 0.58.0ABI 现代化版本类型要义0.35.0Patch调整所有包的导出字段PR #8190.36.0Minor删除fuel-ts/constants包常量迁移到各包package/configs并由fuels伞包统一导出PR #8200.37.0–0.37.1Patch依赖同步0.38.0Minor文档引擎从 Jekyll 切换到 VitePressPR #811——当前apps/docs的来历0.38.1Patch依赖同步0.39.0Minorabi-coder 重构编解码移入FunctionFragment指针类型也携带选择器/签名信息PR #8910.40.0–0.42.0Patch依赖同步0.43.0Minorscript 支持 configurable constantsPR #10030.44.0Minor全量重构包配置、支持本地安装PR #9840.45.0–0.45.xPatch依赖同步0.46.0MinorScriptTransactionRequest可用性与文档改进PR #1072forc-bin发布形态调整#1073用.d.ts declaration map 替代publishConfigs#10550.47.0Minor清除旧版 ABI 格式PR #1094改进 Vector 支持PR #10460.48.0PatchNativeAssetId更名BaseAssetId与 Rust SDK 对齐PR #11210.48.2Patch弃用 tx funding call 选项——所有交易都要求 spendable inputPR #11360.49.0–0.50.0Patch依赖同步0.51.0Minor升级fuel-core到 0.20.3PR #11120.52.0–0.57.0Minor/Patch版本推进无独立变更描述0.58.0MinorchainInfo在 Provider 初始化时拉取并缓存需改为await Provider.create(url)Predicate构造移除chainId全量改用FuelErrorPR #1181、#12300.59.0 → 0.86.0CLI、策略与节点/编译器升级版本类型要义0.63.0Patch清除 ethers v5 的arrayify改用 ethers v6 的getBytesPR #12550.64.0–0.66.0Patch版本推进0.66.1 调整包管理器配置 #14150.67.0Minor修复交易出资funding问题PR #13720.68.0Patch标准化所有 forc 工程、修复 turbo 缓存、降低pretest噪音PR #14420.69.0–0.70.1Minor/Patch版本推进0.70.0 / 0.71.0Minoru8/bool 按 small bytes 右对齐编解码新增pnpm create fuelsCLI对应packages/create-fuelsTX policies 支持PR #1437/#1565、#16240.72.0–0.72.xPatch版本推进0.73.0Patchforc升级到 0.49.2PR #17070.74.0MinorAccount 相关包重构PR #16750.75.0Patch使用内部工具替代 ethers 的arrayify/hexlify/concat/BytesLikePR #1775——摆脱 ethers 字节工具的里程碑0.76.0–0.82.0Patch/Minor版本推进0.81.0 引入 knip 依赖检查 #37743e80.83.0Minorforc0.56.0fuel-core0.24.3base asset ID 从链上获取不再硬编码0.84.0Minorfuel-core升级到 0.26.00.85.0Patch依赖同步0.86.0Minorforc升级到 0.58.0 并移除V0编码breaking0.87.0 → 0.98.0统一错误与 Provider 同步化版本类型要义0.87.0–0.93.0Patch依赖同步0.94.0Patch错误体系统一Error全面切换为FuelError751d6380.94.1–0.94.9Patch依赖同步0.94.7 修复导出类型 80df9000.95.0–0.96.0Patch依赖同步0.97.0–0.97.2Patch依赖同步0.97.1 增加noImplicitOverride编译选项 c904a98注意从 0.98.0 起fuel-ts/interfaces不再出现在依赖列表中因该包被重新分配/移除0.98.0Minorprovider初始化重新变回同步458b7cfbreaking文档优化前端应用13977dffuel-ts/interfaces包重新分配0b4c3ab清理无用依赖并更新 knip 配置68ef74d0.99.0 → 0.103.0当前版本版本要义0.99.0依赖同步16 项上游变更0.100.0–0.100.6依赖同步0.101.0–0.101.3依赖同步0.101.2支持 Node 24弃用 Node 188c19d93——与 package.json 中engines: ^20 \|\| ^22 \|\| ^24互相印证0.102.0依赖同步4 项上游变更0.103.0当前版本依赖同步014a606如何阅读这份 changelog三个可复用的规律版本号与依赖同步monorepo 用 changesets 管理account、program、abi-coder、errors、math、transactions、utils任一包变更都会驱动fuel-ts/script出 patch 版因此 Updated dependencies 条目远多于功能条目升级时建议以fuels伞包版本为准统一升级。!标记与 Minor Changes 代表 breaking change历史上真正影响使用方式的共五处0.36.0constants 包删除、0.58.0Provider 必须异步create、0.70.0/0.71.0TX policies、0.83.0/0.84.0/0.86.0节点与编译器大版本、移除 V0 编码、0.98.0Provider 初始化重新同步化。编译器/节点升级驱动了 Sway 工程兼容forc从 0.24.30.17.0→ 0.49.20.73.0→ 0.56.00.83.0→ 0.58.00.86.0fuel-core从 0.20.30.51.0→ 0.24.30.83.0→ 0.26.00.84.0。仓库内fuel-toolchain.toml如 apps/create-fuels-counter-guide/fuel-toolchain.toml与 internal/forc、internal/fuel-core 锁定了测试环境的工具链版本可据此核对本地forc build产物与 SDK 的兼容区间。环境要求与适用前提Node^20.0.0 || ^22.0.0 || ^24.0.0自 0.101.2 起不再支持 Node 18安装作为 npm 包fuel-ts/script安装日常开发通常直接安装伞包fuels并从fuels导入Scriptfuel-gauge 测试即如此如 packages/fuel-gauge/src/script-main-args.test.ts#L1-L3 的import { bn, Script as FuelScript, ZeroBytes32 } from fuels前提调用前Account必须已绑定正确初始化的Providerprovider.getChain()缓存非空否则buildScriptRequest抛CHAIN_INFO_CACHE_EMPTY只读说明本文所有路径均可在当前仓库中直接查看运行本包测试需先执行pnpm build:forc编译test/fixtures/forc-projects下的 Sway 工程。小结与延伸阅读路径fuel-ts/script包体量小但卡住了 Sway 字节码 → VM 内存布局 → 交易发送 → 结果解码 的关键路径Script负责字节码与常量注入ScriptInvocationScope负责把编码后的main参数挂进ScriptTransactionRequestScriptRequest负责偏移计算与解码最终由BaseInvocationScope.call()提交并交付waitForResult。结合 2022 年至今的 changelog 可以看到这个包的变化主要是被 Provider 生命周期0.58.0/0.98.0、ABI 与编码体系0.39.0/0.47.0、数字类型0.15.0、错误体系0.58.0/0.94.0与 Node 支持矩阵0.91.0/0.101.2这几条主线牵引的。进一步阅读建议按此顺序packages/script/src/script.ts ——Script全量实现packages/script/src/script.test.ts 与 test/fixtures/forc-projects/call-test-script/src/main.sw —— 可运行的最小闭环packages/program/src/script-request.ts 与 packages/program/src/functions/base-invocation-scope.ts —— 调用与费用组装机制packages/account/src/utils/deployScriptOrPredicate.ts —— Blob 部署原理apps/docs/src/guide/scripts/ —— 官方脚本使用指南实例化、运行、日志、可配置常量、部署。赞分享区块链Web3【免费下载链接】fuels-tsFuel Network Typescript SDK项目地址https://gitcode.com/GitHub_Trending/fu/fuels-ts点击查看免费下载相关推荐fuels-ts 交易层演进全解fuel-ts/transactions 从 v0.1 到 v0.103 的序列化变迁与源码剖析fuels ts 交易层演进全解 fuel ts/transactions 从 v0.1 到 v0.103 的序列化变迁与源码剖析 fuel ts/tra区块链Web3fuels-ts 中实例化 Sway 脚本Script从 compiled bytecode 到 ScriptRequest 的完整指南fuels ts 中实例化 Sway 脚本Script从 compiled bytecode 到 ScriptRequest 的完整指南 本指南基于 fu区块链Web3fuels-ts 纯浏览器 CDN 引入指南用 script typemodule 直连 Fuel 主网fuels ts 纯浏览器 CDN 引入指南用 script typemodule 直连 Fuel 主网 fuels ts Fuel Network区块链Web3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

分治算法全解析:从归并排序到动态规划优化实战

分治算法全解析:从归并排序到动态规划优化实战

1. 分治思想:先拆到底,再逐层缝合1.1 用生活场景理解分治先聊一个面试官最爱问的底层问题:为什么分治能优化时间复杂度?我习惯用一个整理书桌的类比来解释——你有一堆混杂的笔记要按日期排序,如果直接全局排序&#x…

2026/10/10 12:01:37 阅读更多 →
Mac用户狂喜:8.3GB的mxfp4量化版让Music 3在Apple Silicon上免费离线跑

Mac用户狂喜:8.3GB的mxfp4量化版让Music 3在Apple Silicon上免费离线跑

Mac用户狂喜:8.3GB的mxfp4量化版让Music 3在Apple Silicon上免费离线跑 【免费下载链接】MiniMax-Music3 项目地址: https://ai.gitcode.com/MiniMax-AI/MiniMax-Music3 当 MiniMax 开源 Music 3 时,社区的第一反应是"又一款只能在数据中心…

2026/10/10 12:01:37 阅读更多 →
WAIC 2026 刚散场,书生S2-397B 就靠“追平万亿参数“刷屏了

WAIC 2026 刚散场,书生S2-397B 就靠“追平万亿参数“刷屏了

WAIC 2026 刚散场,书生S2-397B 就靠"追平万亿参数"刷屏了 【免费下载链接】Intern-S2-397B 项目地址: https://ai.gitcode.com/InternLM/Intern-S2-397B WAIC 2026 的聚光灯还落在周伯文主旨演讲里那句"AI 科学元认知时刻"上&#xff0…

2026/10/10 12:01:37 阅读更多 →

最新新闻

Iris数据集K-Means聚类实战:归一化、评估与避坑指南

Iris数据集K-Means聚类实战:归一化、评估与避坑指南

简介:本资源是一个面向机器学习初学者与数据科学入门者的K-Means聚类实践项目,聚焦经典Iris鸢尾花数据集的无监督聚类分析,帮助读者理解聚类原理、算法实现与结果评估全流程。压缩包共2个文件(1个CSV数据文件、1个Python脚本&…

2026/10/10 12:54:44 阅读更多 →
SSR与Hydration:摊开讲透的底层逻辑与性能平衡艺术

SSR与Hydration:摊开讲透的底层逻辑与性能平衡艺术

很多做前端的同学一聊到服务端渲染,第一反应都是“为了SEO”、“首屏快一点”,然后就直接往项目里怼了一个 SSR 框架。等到真正上线才发现,事情远没有想象的那么简单:页面确实更快出来了,但按钮点了半天没反应&#xf…

2026/10/10 12:54:44 阅读更多 →
去中心化AI决策机制:从信任模型到工程落地的完整拆解

去中心化AI决策机制:从信任模型到工程落地的完整拆解

1. 先看地基:去中心化系统给AI准备的决策环境聊AI决策,大家首先想到的往往是中心化场景:数据集中在一台服务器上,模型由一家公司训练和部署,用户提交请求之后,后台跑推理,最后返回结果。这个链路…

2026/10/10 12:54:44 阅读更多 →
从“无标题”到落地:项目定义、命名与章程实操指南

从“无标题”到落地:项目定义、命名与章程实操指南

项目标题写着“无标题”——这不是刻意玩梗,而是很多项目最初的真实状态。我见过不少同事,建了一个文件夹叫“新建文件夹”,代码仓库叫test123,PPT封面留着“无标题”三个字,结果项目跑了两周,所有人都开始…

2026/10/10 12:54:43 阅读更多 →
Ubuntu 22.04 安装 MySQL 8.0:从 apt 部署到远程连接与踩坑实战

Ubuntu 22.04 安装 MySQL 8.0:从 apt 部署到远程连接与踩坑实战

最近帮同事把几台测试服务器上的MySQL重新收拾了一遍,清一色都是Ubuntu 22.04。说起来“安装MySQL”这件事,在很多教程里就是两三条命令的事,自己上手才知道坑一个接一个:装完root登不进去、字符集乱码、外面连不上,甚…

2026/10/10 12:54:43 阅读更多 →
UVM编译链路全解析:从uvm_pkg.sv到仿真器自动编译的秘密

UVM编译链路全解析:从uvm_pkg.sv到仿真器自动编译的秘密

入行头两年我看公司的仿真Makefile,最让我犯嘀咕的就是第一行:vcs -sverilog -ntb_opts uvm ...。那会儿我一直没搞明白,我自己的tb文件我是认得的,UVM那一堆类库从哪来的?为什么我不写include "uvm_pkg.sv"…

2026/10/10 12:53:42 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →