尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
fuels-ts 地址格式转换实战:用 Address 工具类打通 B256、Contract ID、Wallet 与 Asset ID
fuels-ts 地址格式转换实战用 Address 工具类打通 B256、Contract ID、Wallet 与 Asset ID【免费下载链接】fuels-tsFuel Network Typescript SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-ts本指南聚焦 Fuel TypeScript SDKfuels-ts中的地址转换问题。Fuel Network 底层统一使用 B25664 位十六进制地址格式但日常开发中你还会遇到以 Struct 包裹的 Asset ID、EVM Address、Checksum 地址等多种变体。读完本文你将掌握如何借助Address这个类型安全的工具类在这些格式与 Sway 标准类型之间自由转换并理解其底层实现原理。为什么需要地址转换任何去中心化应用的开发都离不开地址而不同网络、不同抽象层往往强制使用不同格式的地址。在 fuels-ts 生态中主要会遇到以下几种形态B256 地址Fuel Network 交互所使用的原生格式本质是0x前缀加 64 个十六进制字符总长 66 个字符。这也是 B256 类型Sway 内建类型的表示const b256 0x9ae5b658754e096e4d681c548daf46354495a437cc61492599e33fc64dcdc30c;Hex 格式字符串不带任何业务语义的裸十六进制串同样常见。Struct 包裹类型例如 Asset ID 与 EVM Address它们在 Sway 中是以Struct形式包裹对应 TypeScript 侧形如{ bits: B256 }的对象参见 Struct 类型说明。fuels-ts 通过 Address 工具类 让这些格式之间的转换变得简单——它提供了一系列转换与比较工具方法。下文将逐一演示如何利用该类在地址格式与 Sway 标准类型之间完成互转。Address 类一切转换的核心在 Sway 中Address是对内建B256原始类型的类型安全封装而 fuels-ts 的 SDK 另有一套自己的Address抽象。其实现位于 packages/address/src/address.ts类的核心只有一个只读属性readonly b256Address: B256Address;即所有地址最终都会统一归一化并存储为小写的 B256 地址见 normalizeB256。围绕这一个属性类提供了完整的方法族源码见 packages/address/src/address.ts实例方法返回类型作用toAddress()B256Address返回b256Address属性L46-L48toB256()B256Address返回 B256 哈希地址字符串L55-L57toBytes()Uint8Array返回 B256 地址的字节数组L64-L66toHexString()B256Address等价于toB256()L73-L75toEvmAddress()EvmAddress转为 SwayEvmAddress的 Struct 形态L99-L103toAssetId()AssetId包装为 SwayAssetId的 Struct 形态L109-L113toChecksum()ChecksumAddress生成 ERC-55 风格的校验和地址L39-L41toString()/valueOf()string均返回校验和地址字符串L82-L84、L119-L121equals(other)boolean比较两个地址是否相等L128-L130构造函数的“万能输入”机制new Address(address)的构造函数接受多种输入形态并自动判别L28-L31传入一个 B256 字符串、一个 512 位公钥字符串、一个 EVM 地址字符串或一个已有的Address实例均可。其分发逻辑集中在 fromDynamicInputToB256若传入对象实现了toB256()直接取用否则按长度与正则依次判断是否为B2560x 64 位 hexisB256再判断是否为公钥0x 128 位 hex即 512 bitisPublicKey是则对其做 sha256 哈希得到 B256接着判断是否为EVM 地址0x 40 位 hex即 20 字节isEvmAddress是则通过 fromEvmAddressToB256 在头部补齐 12 字节零值得到 B256都不匹配则抛出FuelError错误码PARSE_FAILED。需要注意地址字符串在比较时会被统一转小写normalizeB256这意味着大小写差异不会影响相等性判断而若需要带校验能力的表示则应使用toChecksum()返回的 ERC-55 校验和地址。转换 Contract ID合约的id属性是一个Address实例文档参见 address-conversion.md。因此可以直接复用Address类的toAddress、toB256等方法完成转换。下面是从一个已部署合约获取其 B256 地址的完整示例代码来自 contract.tsimport type { B256Address } from fuels; import { Address, Provider, Contract } from fuels; import { LOCAL_NETWORK_URL } from ../../../../env; import { Counter } from ../../../../typegend/contracts; const provider new Provider(LOCAL_NETWORK_URL); const contractAbi Counter.abi; const contractAddress new Address( 0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f ); const contract new Contract(contractAddress, contractAbi, provider); const b256: B256Address contract.id.toAddress(); // 0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f其中contract.id的类型即为Address所以contract.id.toAddress()与contract.id.toB256()均可直接调用二者等价。这里通过Address的构造函数直接创建合约地址而非依赖 typegen 生成的常量充分体现了new Address(...)可接受原始 B256 字符串的能力。转换 Wallet Address同理钱包的address属性同样是Address类型因此可调用完全相同的方法族。下面的示例先用 B256 构造地址再创建钱包对象并取出其 B256 地址代码来自 wallet.tsimport type { B256Address, WalletLocked } from fuels; import { Address, Provider, Wallet } from fuels; import { LOCAL_NETWORK_URL } from ../../../../env; const provider new Provider(LOCAL_NETWORK_URL); const address new Address( 0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f ); const wallet: WalletLocked Wallet.fromAddress(address, provider); const b256: B256Address wallet.address.toAddress(); // 0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f这里通过Wallet.fromAddress(address, provider)把Address实例传入钱包构造器钱包的address属性保持Address类型因此wallet.address.toAddress()、wallet.address.toB256()、wallet.address.toEvmAddress()等方法都能直接使用。当你需要把一个地址作为交易收款方、查询余额等场景前都可先用这些方法统一转成需要的目标格式。转换 Asset IDAsset ID 是包裹了内层 B256 值的 Struct 类型对应 Sway 标准库定义TypeScript 表示为{ bits: string }参见 asset-id.md。下面的例子展示了如何从一个 B256 构造Address再转成AssetId代码来自 asset-id.tsimport type { AssetId, B256Address } from fuels; import { Address } from fuels; const b256: B256Address 0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f; const address: Address new Address(b256); const assetId: AssetId address.toAssetId(); // { // bits: 0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f // }可以看到toAssetId()只是把内部的b256Address包装进{ bits }结构实现见 toAssetId因此这个资产 ID 在链上与原来的 B256 字节完全一致。反过来当你的合约函数接收一个AssetId参数时也可以把assetId.bits拿出来直接构造new Address(assetId.bits)进而复用本类全部方法。转换到 EVM Address 与校验和地址除上述官方文档演示的场景外Address还提供了与跨链/校验场景强相关的两个实用方向EVM AddresstoEvmAddress()返回 SwayEvmAddressStruct{ bits: ... }。其底层 toB256AddressEvm 会先校验输入为合法 B256然后裁掉前 12 字节、再在头部补回 12 个零字节得到低位 20 字节与 EVM 地址对应的 B256。反之若你手里是标准 20 字节的 EVM 地址字符串new Address(evmAddress)会自动通过 fromEvmAddressToB256 补齐为 B256无需手动 pad。Checksum校验和地址toChecksum()遵循 ERC-55 规范——对 B256 十六进制串做 sha256 后按哈希位逐位决定原字符是否大写实现见 address.ts 的私有 toChecksum。toString()、valueOf()返回的正是这种校验和形式equals()在内部也基于校验和比较L128-L130因此它同时具备“展示带校验、比较不受大小写干扰”的双重能力。底层原理小结一次构造处处可转纵观 packages/address/src/address.ts 的实现fuels-ts 的地址转换设计可以概括为一句话所有格式在构造Address时被统一折叠为一个小写的 B256之后任何格式的输出都只由这一个事实源派生。输入归一构造函数经由 fromDynamicInputToB256 自动识别 B256 / 公钥(512) / EVM 地址 / 已有Address无法识别时抛错避免静默产生错误地址。输出派生toAddress/toB256/toHexString直接返回内部值toBytes做字节化toEvmAddress/toAssetId做 Struct 包装toChecksum/toString做 ERC-55 校验编码。这种“单一内部表示 双向可转换”的设计使你在处理合约id、钱包address、链上 Asset ID 以及跨链 EVM 地址时永远只需要一份标准化的转换心智模型。完整入口文档见 address-conversion.mdAddress 类型的整体介绍见 address.mdb256.md 与 evm-address.md 则分别给出了各目标类型在 Sway 侧的语义定义可对照阅读。【免费下载链接】fuels-tsFuel Network Typescript SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-ts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Python单元测试隔离实战:用unittest.mock剥离外部依赖

Python单元测试隔离实战:用unittest.mock剥离外部依赖

我经常在Review团队代码时看到一类测试:拉到本地一跑就绿,推到CI上却每隔几天红一次。点开日志,十有八九不是业务逻辑错了,而是测试跑着跑着撞上了真实的外部依赖——某个内网API超时、数据库连接池被占满、第三方回调延迟超过预期…

📅 2026/10/25 11:23:06
海康威视OCX控件接入实战:环境搭建、接口调用与常见问题排查

海康威视OCX控件接入实战:环境搭建、接口调用与常见问题排查

简介:海康威视OCX控件是一份面向视频监控应用开发者的 Windows 组件封装包,基于 ActiveX/OCX 技术,将海康威视摄像头、NVR 等硬件能力集成为可复用的视频预览、抓拍、录像、云台控制、对讲与声音调节等接口,适合需要快速在桌面程序…

📅 2026/10/25 11:23:07
Java异常处理实战:线上排查、最佳实践与设计模式融合

Java异常处理实战:线上排查、最佳实践与设计模式融合

Java异常处理是被讨论得最多、又最容易流于表面的知识点。我见过不少能把继承结构倒背如流的人,真到线上排查时,却连Caused by那一行都不看,直接把整个堆栈甩到群里,然后问“这啥意思”。下面要聊的内容,我不想讲八股&…

📅 2026/10/6 5:57:14
MORE NEWS

更多资讯

📰

spooling假脱机输入输出模拟技术:Python实现打印队列与优先级调度

简介:这份资源是面向操作系统课程学习者与计算机专业学生的Spooling假脱机输入输出模拟技术实践包,围绕联机外围设备同时操作原理,用两个请求输出进程与一个spooling输出进程的进程模型,演示如何借助磁盘缓冲区把慢速I/O设备虚拟化…

📰

BIRT运行时4.8.0部署实战:从解压到验证的完整指南

简介:BIRT(Business Intelligence and Reporting Tools)是Eclipse基金会维护的开源报表系统,这份运行时环境包面向需要在Java Web项目中集成动态数据报表的开发者,尤其适合已具备一定Java Web基础、希望快速搭建报表服…

📰

CozyClay motion3编译器原理:浏览器内的FK/IK数学,150毫秒烤出730帧

【免费下载链接】CozyClay Open source previs software in the browser: block a scene, pose characters, author camera moves and cuts, then take the same shots to an AI video model. 项目地址: https://gitcode.com/gh_mirrors/co/CozyClay 点击查看 免费下…

📰

10天两个补丁!Home Assistant 2026.10 升级翻车实录:新卡片好看,自动化先罢工了

10天两个补丁!Home Assistant 2026.10 升级翻车实录:新卡片好看,自动化先罢工了 【免费下载链接】core :house_with_garden: Open source home automation that puts local control and privacy first. 项目地址: https://gitcode.com/GitH…

📰

只读MCP如何实时抓取任意网站?Inspo study()的SSRF防护完整指南

【免费下载链接】inspo Real websites for your coding agent to learn design from, searchable over MCP. 项目地址: https://gitcode.com/gh_mirrors/ins/inspo 点击查看 免费下载 Inspo 是一个为编码 Agent 提供"真实网站设计档案"的 MCP 服务器&…

📰

MATLAB生成与量化分析斑马图:图像伪影诊断实战

简介:本资源是一份面向雷达系统工程师与信号处理方向研究生的MATLAB实战工具包,聚焦PRF(脉冲重复频率)设计中的距离模糊与方位模糊分析问题。斑马图作为雷达参数权衡的关键可视化手段,能直观揭示不同PRF设置下模糊区域…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬