在与去中心化应用程序交互时,地址和不同的地址格式是常见的。此外,不同的网络可能会强制使用不同的地址格式。
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 标准类型之间进行转换。
本指南演示了如何使用辅助函数来在地址格式和 Sway 标准类型之间进行转换。原生类型是字节的封装,您可以通过利用这些函数和类来在它们之间执行转换。
Bech32
到 b256
通过实例化一个 Address
,我们可以验证一个 Bech32
地址并将其轻松转换为 b256
:
// #import { Address };
const bech32 = 'fuel1d5cfwekq78r0zq73g7eg0747etkaxxltrqx5tncm7lvg89awe3hswhqjhs';
const addressInstance = Address.fromDynamicInput(bech32);
const b256 = addressInstance.toB256();
// 0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f
或者,如果您更喜欢直接使用工具函数进行验证和转换,您可以使用 isBech32
和 toB256
:
// #import { toB256, isBech32 };
const bech32 = 'fuel1d5cfwekq78r0zq73g7eg0747etkaxxltrqx5tncm7lvg89awe3hswhqjhs';
if (isBech32(bech32)) {
b256 = toB256(bech32);
// 0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f
}
b256
到 Bech32
类似地,我们有 Address
上的类函数和可用于 b256
验证和转换的工具:
// #import { Address };
const b256 = '0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f';
const addressInstance = Address.fromDynamicInput(b256);
const bech32 = addressInstance.bech32Address;
// fuel1d5cfwekq78r0zq73g7eg0747etkaxxltrqx5tncm7lvg89awe3hswhqjhs
并通过使用 isB256
和 toBech32
工具:
// #import { toBech32, isB256 };
const b256 = '0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f';
if (isB256(b256)) {
bech32 = toBech32(b256);
// fuel1d5cfwekq78r0zq73g7eg0747etkaxxltrqx5tncm7lvg89awe3hswhqjhs
}
合约 id
属性具有 AbstractAddress
类型。因此,可以使用 Address
类函数(如 toAddress
和 toB256
)进行转换:
// #import { Address, Contract };
const address = Address.fromB256(
'0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f'
);
const contract = new Contract(address, abi, provider);
const bech32 = contract.id.toAddress();
// fuel1d5cfwekq78r0zq73g7eg0747etkaxxltrqx5tncm7lvg89awe3hswhqjhs
同样,钱包 address
属性也是 AbstractAddress
类型,因此可以使用相同的 Address
类函数进行转换:
// #import { Wallet, Address };
const address = Address.fromB256(
'0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f'
);
const wallet: WalletLocked = Wallet.fromAddress(address, provider);
const walletAddress = wallet.address.toAddress();
Asset IDs 是一个包装的 b256 值。下面的示例演示了如何从 b256
类型创建一个 Address
:
// #import { Address, AssetId };
const b256 = '0x6d309766c0f1c6f103d147b287fabecaedd31beb180d45cf1bf7d88397aecc6f';
const address = Address.fromB256(b256);
const assetId: AssetId = address.toAssetId();