Address Conversion

Icon Link地址

在与去中心化应用程序交互时,地址和不同的地址格式是常见的。此外,不同的网络可能会强制使用不同的地址格式。

Fuel 网络使用 Bech32 地址格式进行交互,下面是一个示例:

const bech32 = 'fuel1d5cfwekq78r0zq73g7eg0747etkaxxltrqx5tncm7lvg89awe3hswhqjhs';

然而,一个十六进制的 Bits256 (hex)是另一种常见的地址格式;下面是一个示例:

const bits256 = '0xbebd3baab326f895289ecbd4210cf886ce41952316441ae4cac35f00f0e882a6';

有时,这些甚至可以包装在一个 Struct 中。比如 Asset ID EVM Address

// #import { EvmAddress };
 
const address: EvmAddress = {
  bits: '0x000000000000000000000000210cf886ce41952316441ae4cac35f00f0e882a6',
};

TS-SDK 通过 Address 辅助类使得在这些地址之间进行转换变得简单,该类提供了各种转换的工具函数。

下面的 转换指南 将展示如何利用这个类来在不同的地址格式和 Sway 标准类型之间进行转换。

Icon Link地址转换

本指南演示了如何使用辅助函数来在地址格式和 Sway 标准类型之间进行转换。原生类型是字节的封装,您可以通过利用这些函数和类来在它们之间执行转换。

Icon LinkBech32b256

通过实例化一个 Address ,我们可以验证一个 Bech32 地址并将其轻松转换为 b256

// #import { Address };
 
const bech32 = 'fuel1d5cfwekq78r0zq73g7eg0747etkaxxltrqx5tncm7lvg89awe3hswhqjhs';
const addressInstance = Address.fromDynamicInput(bech32);
const b256 = addressInstance.toB256();
// 0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f

或者,如果您更喜欢直接使用工具函数进行验证和转换,您可以使用 isBech32toB256

// #import { toB256, isBech32 };
 
const bech32 = 'fuel1d5cfwekq78r0zq73g7eg0747etkaxxltrqx5tncm7lvg89awe3hswhqjhs';
 
if (isBech32(bech32)) {
  b256 = toB256(bech32);
  // 0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f
}

Icon Linkb256Bech32

类似地,我们有 Address 上的类函数和可用于 b256 验证和转换的工具:

// #import { Address };
 
const b256 = '0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f';
const addressInstance = Address.fromDynamicInput(b256);
const bech32 = addressInstance.bech32Address;
// fuel1d5cfwekq78r0zq73g7eg0747etkaxxltrqx5tncm7lvg89awe3hswhqjhs
 

并通过使用 isB256toBech32 工具:

// #import { toBech32, isB256 };
 
const b256 = '0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f';
 
if (isB256(b256)) {
  bech32 = toBech32(b256);
  // fuel1d5cfwekq78r0zq73g7eg0747etkaxxltrqx5tncm7lvg89awe3hswhqjhs
}

Icon Link转换合约 ID

合约 id 属性具有 AbstractAddress 类型。因此,可以使用 Address 类函数(如 toAddresstoB256)进行转换:

// #import { Address, Contract };
 
const address = Address.fromB256(
  '0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f'
);
 
const contract = new Contract(address, abi, provider);
 
const bech32 = contract.id.toAddress();
// fuel1d5cfwekq78r0zq73g7eg0747etkaxxltrqx5tncm7lvg89awe3hswhqjhs
 

Icon Link转换钱包地址

同样,钱包 address 属性也是 AbstractAddress 类型,因此可以使用相同的 Address 类函数进行转换:

// #import { Wallet, Address };
 
const address = Address.fromB256(
  '0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f'
);
const wallet: WalletLocked = Wallet.fromAddress(address, provider);
const walletAddress = wallet.address.toAddress();

Icon Link转换资产 ID

Asset IDs 是一个包装的 b256 值。下面的示例演示了如何从 b256 类型创建一个 Address

// #import { Address, AssetId };
 
const b256 = '0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f';
const address = Address.fromB256(b256);
const assetId: AssetId = address.toAssetId();