UNPKG

openchain-sdk-yxl-wx-request

Version:

openchain sd YxL wx request

320 lines (277 loc) 8.66 kB
# CTP10 Token CTP10 Token 是 OpenChain 上的标准代币协议,提供了完整的代币管理功能,包括发行、转移、授权等操作。 ## Token 基础信息 ### 检查 CTP10 合约 ```javascript // 检查合约是否为有效的 CTP10 Token const isValid = yield sdk.token.ctp10Token.checkValid(contractAddress); // 获取 Token 完整信息 const tokenInfo = yield sdk.token.ctp10Token.getInfo(contractAddress); // 返回结果示例 { errorCode: 0, result: { ctp: "CTP10", name: "MyToken", symbol: "MT", totalSupply: "1000000", decimals: 8, contractOwner: "did:bid:efqkw1dKHHuWtupG6k1tCu4PNfoRs7us" } } ``` ### 查询 Token 属性 ```javascript // 获取 Token 名称 const nameInfo = yield sdk.token.ctp10Token.getName(contractAddress); // 获取 Token 符号 const symbolInfo = yield sdk.token.ctp10Token.getSymbol(contractAddress); // 获取 Token 精度 const decimalsInfo = yield sdk.token.ctp10Token.getDecimals(contractAddress); // 获取 Token 总供应量 const supplyInfo = yield sdk.token.ctp10Token.getTotalSupply(contractAddress); ``` ## Token 余额和授权 ### 余额查询 ```javascript // 查询账户 Token 余额 const balanceInfo = yield sdk.token.ctp10Token.getBalance({ contractAddress: 'your-token-contract-address', // Token 合约地址 tokenOwner: 'account-address' // 要查询的账户地址 }); ``` ### 授权查询 ```javascript // 查询授权额度 const allowanceInfo = yield sdk.token.ctp10Token.allowance({ contractAddress: 'your-token-contract-address', // Token 合约地址 tokenOwner: 'owner-address', // Token 持有者地址 spender: 'spender-address' // 被授权者地址 }); ``` ## Token 操作 ### 发行 Token ```javascript // 发行 Token const issueOperation = { sourceAddress: address, // 发行方地址 name: 'MyToken', // Token 名称 symbol: 'MT', // Token 符号 totalSupply: '1000000', // 发行总量 decimals: 8, // 精度 metadata: 'token info' // 可选,Token 元数据 }; const issueResponse = yield sdk.operation.ctp10Token.issue(issueOperation); ``` ### 转移 Token ```javascript // 转移 Token const transferOperation = { sourceAddress: sourceAddress, // 发送方地址 destAddress: destAddress, // 接收方地址 amount: '100', // 转移数量 metadata: 'transfer info' // 可选,转移说明 }; const transferResponse = yield sdk.operation.ctp10Token.transfer(transferOperation); ``` ### Token 授权 ```javascript // 授权 Token const approveOperation = { sourceAddress: sourceAddress, // Token 持有者地址 spender: spenderAddress, // 被授权者地址 amount: '1000', // 授权数量 metadata: 'approve info' // 可选,授权说明 }; const approveResponse = yield sdk.operation.ctp10Token.approve(approveOperation); // 从授权账户转移 Token const transferFromOperation = { sourceAddress: sourceAddress, // 操作发起方地址 from: fromAddress, // Token 持有者地址 to: toAddress, // 接收方地址 amount: '100', // 转移数量 metadata: 'transfer info' // 可选,转移说明 }; const transferFromResponse = yield sdk.operation.ctp10Token.transferFrom(transferFromOperation); ``` ## 高级功能 ### Token 所有权管理 ```javascript // 更改 Token 所有者 const changeOwnerOperation = { sourceAddress: currentOwner, // 当前所有者地址 newOwner: newOwnerAddress, // 新所有者地址 metadata: 'change owner info' // 可选,变更说明 }; const changeOwnerResponse = yield sdk.operation.ctp10Token.changeOwner(changeOwnerOperation); ``` ### Token 分配 ```javascript // Token 分配操作 const assignOperation = { sourceAddress: ownerAddress, // Token 所有者地址 destAddress: destAddress, // 接收方地址 amount: '1000', // 分配数量 metadata: 'assign info' // 可选,分配说明 }; const assignResponse = yield sdk.operation.ctp10Token.assign(assignOperation); ``` ## 最佳实践 1. Token 发行规范 ```javascript // Token 参数验证 function validateTokenParams(params) { // 验证名称 if (!params.name || params.name.length > 1024) { throw new Error('Invalid token name'); } // 验证符号 if (!params.symbol || params.symbol.length > 1024) { throw new Error('Invalid token symbol'); } // 验证精度 if (typeof params.decimals !== 'number' || params.decimals < 0 || params.decimals > 8) { throw new Error('Invalid decimals'); } // 验证发行总量 if (!params.totalSupply || Number(params.totalSupply) <= 0) { throw new Error('Invalid total supply'); } } ``` 2. 安全转账 ```javascript // 安全的 Token 转账 async function safeTransfer(params) { // 检查余额 const balance = await sdk.token.ctp10Token.getBalance({ contractAddress: params.contractAddress, tokenOwner: params.sourceAddress }); if (Number(balance) < Number(params.amount)) { throw new Error('Insufficient balance'); } // 执行转账 try { const response = await sdk.operation.ctp10Token.transfer(params); if (response.errorCode === 0) { return { success: true, hash: response.result.hash }; } throw new Error(response.errorDesc); } catch (error) { console.error('Transfer failed:', error); throw error; } } ``` 3. 授权管理 ```javascript // 授权管理工具 const approvalManager = { // 检查授权额度 async checkAllowance(params) { const allowance = await sdk.token.ctp10Token.allowance({ contractAddress: params.contractAddress, tokenOwner: params.owner, spender: params.spender }); return allowance; }, // 增加授权额度 async increaseAllowance(params) { const currentAllowance = await this.checkAllowance(params); const newAmount = String(Number(currentAllowance) + Number(params.amount)); return await sdk.operation.ctp10Token.approve({ sourceAddress: params.owner, spender: params.spender, amount: newAmount }); }, // 减少授权额度 async decreaseAllowance(params) { const currentAllowance = await this.checkAllowance(params); const newAmount = String(Math.max(0, Number(currentAllowance) - Number(params.amount))); return await sdk.operation.ctp10Token.approve({ sourceAddress: params.owner, spender: params.spender, amount: newAmount }); } }; ``` 4. 交易监控 ```javascript // Token 交易监控 class TokenMonitor { constructor(contractAddress) { this.contractAddress = contractAddress; this.listeners = new Map(); } // 添加地址监控 async addAddressMonitor(address, callback) { const monitor = async () => { try { const balance = await sdk.token.ctp10Token.getBalance({ contractAddress: this.contractAddress, tokenOwner: address }); callback(null, balance); } catch (error) { callback(error); } }; this.listeners.set(address, setInterval(monitor, 5000)); } // 移除地址监控 removeAddressMonitor(address) { const listener = this.listeners.get(address); if (listener) { clearInterval(listener); this.listeners.delete(address); } } // 停止所有监控 stopAllMonitors() { for (const [address, listener] of this.listeners) { clearInterval(listener); } this.listeners.clear(); } } ``` 5. 批量操作优化 ```javascript // 批量转账优化 async function batchTransfer(params) { const { sourceAddress, transfers, contractAddress } = params; // 检查总转账金额 const totalAmount = transfers.reduce((sum, t) => sum + Number(t.amount), 0); const balance = await sdk.token.ctp10Token.getBalance({ contractAddress, tokenOwner: sourceAddress }); if (Number(balance) < totalAmount) { throw new Error('Insufficient balance for batch transfer'); } // 构建批量操作 const operations = transfers.map(transfer => ({ type: 'ctp10TokenTransfer', data: { sourceAddress, destAddress: transfer.to, amount: transfer.amount } })); // 执行批量转账 const response = await sdk.transaction.buildBlob({ sourceAddress, operations, gasPrice: '1000', feeLimit: String(1000000 * operations.length) }); return response; } ```