跳至主要内容

合约概览

ONE SDK 通过 Engine API 层公开合约交互功能。合约模块没有专门的 React hook 或组件——你使用 useOneEngine() 获取 OneEngineClient 实例,然后直接调用其合约方法。

快速开始

import { useOneEngine } from '@one_deploy/sdk';

function ContractPage() {
const { client } = useOneEngine();

async function fetchContracts() {
const res = await client.getUserContracts();
console.log(res.data); // Contract[]
}

return <button onClick={fetchContracts}>Load My Contracts</button>;
}

在非 React 环境(Node、Edge、脚本)中,直接创建客户端:

import { OneEngineClient } from '@one_deploy/sdk';

const client = new OneEngineClient({
apiKey: process.env.ONE_API_KEY!,
projectId: process.env.ONE_PROJECT_ID!,
});

const res = await client.getUserContracts();

可用方法

方法描述
getUserContracts(options?)列出当前用户部署或交互过的所有合约。
getContractDetails(address, chainId)获取单个合约的元数据、ABI 和链上状态。
readContract(params)调用任意合约上的只读(view / pure)函数。
writeContract(params)向合约发送状态更改交易。
deployContract(params)从支持的模板或自定义字节码部署新合约。
createWebhook(params)通过 webhook 订阅合约事件。
getTransactionStatus(txHash, chainId)轮询交易确认状态。

核心类型

Contract

import type { Contract, ContractType } from '@one_deploy/sdk';

interface Contract {
address: string;
chainId: number;
name: string;
type: ContractType;
abi?: Record<string, unknown>[];
deployedAt?: string; // ISO-8601 时间戳
deployerAddress?: string;
metadata?: Record<string, unknown>;
}

ContractType

type ContractType =
| 'erc20'
| 'erc721'
| 'erc1155'
| 'custom'
| 'marketplace'
| 'staking'
| 'governance';

getUserContracts

检索与已认证用户关联的所有合约。

interface GetUserContractsOptions {
chainId?: number; // 按链筛选
type?: ContractType; // 按合约类型筛选
page?: number; // 分页(从 1 开始)
limit?: number; // 每页条数(默认 20,最大 100)
}

const res = await client.getUserContracts({
chainId: 137,
type: 'erc20',
limit: 50,
});

// res.data -> Contract[]
// res.meta -> { page: number; limit: number; total: number }

getContractDetails

获取特定合约的完整详情,包括可用时的 ABI。

const res = await client.getContractDetails(
'0x1234...abcd', // 合约地址
137, // chainId(Polygon)
);

const contract: Contract = res.data;
console.log(contract.name); // "MyToken"
console.log(contract.type); // "erc20"
console.log(contract.abi); // [...] 完整的 ABI 数组

仅提供 API -- 无 React 组件

与钱包和支付模块不同,合约模块不提供预构建的 React 组件。所有操作通过 OneEngineClient 方法执行。如需 React 友好的封装,请在自己的组件中使用 useOneEngine()

import { useOneEngine } from '@one_deploy/sdk';
import { useEffect, useState } from 'react';
import type { Contract } from '@one_deploy/sdk';

function ContractList() {
const { client } = useOneEngine();
const [contracts, setContracts] = useState<Contract[]>([]);

useEffect(() => {
client.getUserContracts().then((res) => setContracts(res.data));
}, [client]);

return (
<ul>
{contracts.map((c) => (
<li key={c.address}>
{c.name} ({c.type}) -- {c.address.slice(0, 10)}...
</li>
))}
</ul>
);
}
提示

如需完整的方法签名和响应结构,请参阅合约与 NFT API 参考

下一步