@cfxdevkit/contracts
v2.0.13
Published
Standard contract bindings (ERC-20/721/1155, multicall3) and a thin read/write/deploy surface for @cfxdevkit/cdk.
Readme
@cfxdevkit/contracts
Standard contract bindings (ERC-20 / 721 / 1155 / Multicall3) and a thin,
framework-native read / write / deploy surface for @cfxdevkit/cdk.
import { erc20 } from '@cfxdevkit/contracts/erc20';
import { createClient, http } from '@cfxdevkit/cdk';
import { espaceTestnet } from '@cfxdevkit/cdk/chains';
const client = createClient({ chain: espaceTestnet, transport: http() });
const symbol = await erc20.symbol({ client, address: '0xToken…' });Installation
npm install @cfxdevkit/contracts @cfxdevkit/cdkSub-paths
| Sub-path | Exports |
|----------|---------|
| . | 23 symbols |
| ./abis | 5 symbols |
| ./read | 3 symbols |
| ./write | 6 symbols |
| ./deploy | 4 symbols |
| ./erc20 | 2 symbols |
| ./bridge | 10 symbols |
| ./errors | 2 symbols |
Usage
Read calls
Use readContract for view/pure functions:
import { readContract } from '@cfxdevkit/contracts';
import { ERC20_ABI } from '@cfxdevkit/contracts/abis';
const balance = await readContract({
client,
abi: ERC20_ABI,
address: '0xToken…',
functionName: 'balanceOf',
args: ['0xUser…'],
});Write calls
Use prepareWrite to construct a transaction, then sendWrite to submit it:
import { prepareWrite, sendWrite } from '@cfxdevkit/contracts';
import { ERC20_ABI } from '@cfxdevkit/contracts/abis';
const tx = await prepareWrite({
client,
abi: ERC20_ABI,
address: '0xToken…',
functionName: 'transfer',
args: ['0xUser…', 1000n],
});
const receipt = await sendWrite({ client, tx });Deploy
Deploy contracts using deployContract:
import { deployContract } from '@cfxdevkit/contracts';
const result = await deployContract({
client,
abi: myContractAbi,
bytecode: '0x...',
args: ['arg1', 42n],
});ERC-20 helpers
Convenience wrappers for common ERC-20 functions:
import { erc20 } from '@cfxdevkit/contracts/erc20';
const symbol = await erc20.symbol({ client, address: '0xToken…' });
const decimals = await erc20.decimals({ client, address: '0xToken…' });Bridge support
Bridge contract bindings and helpers are available under ./bridge:
import { bridge } from '@cfxdevkit/contracts/bridge';
// Example: get cross-space transfer status
const status = await bridge.getTransferStatus({ client, id: '0x...' });Error handling
All errors are typed under ContractsErrorCode and extend ContractsError:
import { ContractsError } from '@cfxdevkit/contracts';
try {
await readContract(...);
} catch (err) {
if (err instanceof ContractsError) {
console.error(err.code); // e.g., 'contracts/reverted'
}
}eSpace & Core Space
Fully compatible with both eSpace and Core Space chains. Specify your target chain via client.chain.
See API.md for the full surface and STRUCTURE.md for the layout.
Tier
Tier 0 — framework — Must not runtime-import from any higher tier.
