Surf: 为 Move 合约提供 TypeScript 类型安全
什么是 Surf
Section titled “什么是 Surf”Surf 是一个基于 Aptos TypeScript SDK 和钱包适配器构建的 TypeScript 库,通过从合约 ABI(应用二进制接口)推断类型,为您的 Move 合约提供静态类型安全.它允许您在编译时而非运行时捕获类型错误.如果您尝试访问不存在的字段或提供错误的输入类型,大多数现有的 TypeScript IDE 都会自动提供警告.
-
第一步
首先,下载 Move 合约的 ABI 并将其保存到 TypeScript 文件中.本例中,我们将文件命名为
abi.ts
,存放在src/utils
文件夹中.#! /bin/bash# 替换为您合约所在的网络NETWORK=testnet# 替换为您的合约地址CONTRACT_ADDRESS=0x12345# 替换为您的模块名称,每个 .move 文件(除 move script 外)都有 module_address::module_name {}MODULE_NAME=fungible_asset_launchpad# 将 ABI 保存到 TypeScript 文件echo "export const ABI = $(curl https://fullnode.$NETWORK.aptoslabs.com/v1/accounts/$CONTRACT_ADDRESS/module/$MODULE_NAME | sed -n 's/.*"abi":\({.*}\).*}$/\1/p') as const" > abi.tsTerminal window # 替换为您合约所在的网络$NETWORK = "testnet"# 替换为您的合约地址$CONTRACT_ADDRESS = "0x1"# 替换为您的模块名称,每个 .move 文件(除 move script 外)都有 module_address::module_name {}$MODULE_NAME = "fungible_asset_launchpad"# 将 ABI 保存到 TypeScript 文件Invoke-RestMethod -Uri "https://fullnode.$NETWORK.aptoslabs.com/v1/accounts/$CONTRACT_ADDRESS/module/$MODULE_NAME" |Select-Object -ExpandProperty abi | ConvertTo-Json -Compress |Foreach-Object { "export const ABI = $_ as const" } |Out-File -FilePath "abi.ts" -
第二步
有了 ABI 后,您可以在与 Move 合约交互时,将 Surf 作为 Aptos TypeScript SDK 客户端
Aptos
的附加层使用.对于非合约相关操作,仍需使用Aptos
.import { createSurfClient } from '@thalalabs/surf';import { Aptos, AptosConfig, NETWORK } from "@aptos-labs/ts-sdk";import { ABI } from "./abi";// 首先创建 Aptos 客户端,确保网络与合约所在网络一致export const aptos = new Aptos(new AptosConfig({ network: Network.DEVNET }));// 然后使用 Aptos 客户端和 ABI 创建 SurfClientexport const surfClient = createSurfClient(aptos).useABI(ABI);// 使用 Surf 执行入口函数const result = await surfClient.entry.transfer({functionArguments: ['0x1', 1],typeArguments: ['0x1::aptos_coin::AptosCoin'],account: Account.fromPrivateKey(...),});// 使用 Surf 查询视图函数const [balance] = await surfClient.view.balance({functionArguments: ['0x1'],typeArguments: ['0x1::aptos_coin::AptosCoin'],});
- 访问 GitHub 上的 Surf
- 展示 Surf 的简单 Next.js 示例
- 使用 Surf 构建的可替代资产启动平台示例:此示例是 Aptos Learn 上 Solana 转 Aptos 指南的一部分,您可以在这里试用,并阅读完整教程这里.
Surf 由 Aptos 生态项目 Thala Labs 开发,并与 Aptos 社区共同维护.
如果您有任何反馈或问题,请在 Surf 的 GitHub 上提交 issue.