Handle token deposits and withdrawals across chains, including allowance approval, vault interactions, and cross-chain operations
本技能涵盖在Orderly Network上存入和提取资产,包括代币授权、金库交互、跨链操作和内部转账。
| 链 | 链ID | USDC | USDT |
|---|---|---|---|
| Arbitrum | 42161 | ✅ | ✅ |
| Optimism |
注意:使用 GET /v1/public/chaininfo?brokerid={yourbrokerid} 动态获取支持的链
typescript
import { useChain } from @orderly.network/hooks;
function DepositForm() {
const { chains, isLoading } = useChain(USDC);
if (isLoading) return
return (
);
}
typescript
import { useDeposit } from @orderly.network/hooks;
function DepositInfo({ tokenSymbol }: { tokenSymbol: string }) {
const { symbol, address, decimals, chainId, network } = useDeposit(tokenSymbol);
if (!address) return
return (
网络:{network}
链ID:{chainId}
合约地址:{address}
小数位数:{decimals}
typescript
import { ethers } from ethers;
const ERC20_ABI = [
function approve(address spender, uint256 amount) returns (bool),
function allowance(address owner, address spender) view returns (uint256),
function balanceOf(address owner) view returns (uint256),
];
const VAULT_ABI = [
function deposit(tuple(bytes32 accountId, bytes32 brokerHash, bytes32 tokenHash, uint256 tokenAmount) input) external payable,
function getDepositFee(address account, tuple(bytes32 accountId, bytes32 brokerHash, bytes32 tokenHash, uint256 tokenAmount) input) view returns (uint256),
];
async function depositUSDC(
provider: ethers.BrowserProvider,
amount: string,
vaultAddress: string,
usdcAddress: string,
brokerId: string,
orderlyAccountId: string
) {
const signer = await provider.getSigner();
const userAddress = await signer.getAddress();
// 1. 授权代币
const usdc = new ethers.Contract(usdcAddress, ERC20_ABI, signer);
const amountWei = ethers.parseUnits(amount, 6);
const allowance = await usdc.allowance(userAddress, vaultAddress);
if (allowance < amountWei) {
console.log(正在授权USDC...);
const approveTx = await usdc.approve(vaultAddress, ethers.MaxUint256);
await approveTx.wait();
console.log(授权完成);
}
// 2. 计算哈希值
const encoder = new TextEncoder();
const brokerHash = ethers.keccak256(encoder.encode(brokerId));
const tokenHash = ethers.keccak256(encoder.encode(USDC));
// 3. 创建存款输入结构体
const depositInput = {
accountId: orderlyAccountId,
brokerHash: brokerHash,
tokenHash: tokenHash,
tokenAmount: amountWei,
};
// 4. 获取存款费用
const vault = new ethers.Contract(vaultAddress, VAULT_ABI, signer);
const depositFee = await vault.getDepositFee(userAddress, depositInput);
console.log(存款费用:, ethers.formatEther(depositFee), ETH);
// 5. 执行带费用的存款
console.log(正在存款...);
const depositTx = await vault.deposit(depositInput, { value: depositFee });
const receipt = await depositTx.wait();
console.log(存款完成:, receipt.hash);
return receipt;
}
typescript
// 获取支持的代币及其抵押因子
GET /v1/public/token
// 响应
{
success: true,
data: {
rows: [
{
token: USDC,
decimals: 6,
address: {
42161: 0xaf88d065e77c8cC2239327C5EDb3A432268e5831,
10: 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85
},
collateral_factor: 1.0
},
{
token: USDT,
decimals: 6,
address: { ... },
collateral_factor: 0.95
}
]
}
}
// 获取链信息
GET /v1/public/chaininfo?brokerid={broker_id}
// 获取金库余额(TVL)
GET /v1/public/vault_balance
每个代币都有一个抵押因子(0.0到1.0),它决定了你的存款中有多少可以算作交易抵押品:
| 代币 | 抵押因子 | $1000存款 = 抵押价值 |
|---|---|---|
| USDC | 1.0 (100%) | $1000 |
| USDT |
示例:如果你存入$1000的USDT,抵押因子为0.95,则只有$950算作保证金计算的抵押品。
typescript
import { useWithdraw } from @orderly.network/hooks;
function WithdrawForm() {
const { withdraw, isLoading } = useWithdraw();
const [amount, setAmount] = useState();
const [destination, setDestination] = useState();
const handleWithdraw = async () => {
try {
await withdraw({
symbol: USDC,
amount: 50,
address: 0x123...,
chainId: 1, // 以太坊主网
network: ethereum
});
alert(提现已发起!);
} catch (error) {
console.error(提现失败:, error);
}
};
return (
type=text
placeholder=目标地址
value={destination}
onChange={(e) => setDestination(e.target.value)}
/>
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 orderly-deposit-withdraw-1776199441 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 orderly-deposit-withdraw-1776199441 技能
skillhub install orderly-deposit-withdraw-1776199441
文件大小: 6.3 KB | 发布时间: 2026-4-15 11:10