# OpenChain Node.js SDK 使用手册

## 目录
- [简介](#简介)
- [安装与配置](#安装与配置)
- [核心功能](#核心功能)
  - [账户管理](#账户管理)
  - [合约操作](#合约操作)
  - [资产管理](#资产管理)
  - [CTP10代币](#CTP10代币)
- [错误处理](#错误处理)
- [示例代码](#示例代码)
- [API参考](#API参考)

## 简介
OpenChain Node.js SDK 是一个用于与OpenChain区块链网络交互的JavaScript开发工具包。它提供了丰富的API接口，使开发者能够方便地进行账户管理、智能合约部署与调用、资产管理等区块链相关操作。

## 安装与配置

### 安装
```bash
npm install openchain-sdk-yxl-request --save
```

### 基本配置
```javascript
const SDK = require('openchain-sdk-yxl-request');

// 初始化SDK配置
const sdk = new SDK({
    host: 'http://your-openchain-node:36002',  // OpenChain节点地址
});
```

## 核心功能

### 账户管理
账户管理模块提供了创建账户、查询账户信息、设置权限等功能。

```javascript
// 创建账户
const account = sdk.account.create();

// 查询账户信息
const accountInfo = await sdk.account.getInfo(address);

// 设置账户权限
const result = await sdk.account.setPrivilege({
    sourceAddress: address,
    masterWeight: 1,
    signers: [],
    threshold: 1
});
```

### 合约操作
支持智能合约的创建、调用和查询等操作。

```javascript
// 创建合约
const contract = await sdk.contract.create({
    sourceAddress: address,
    code: contractCode,
    initBalance: '0',
    metadata: 'contract metadata'
});

// 调用合约
const invokeResult = await sdk.contract.invokeByOP({
    sourceAddress: address,
    contractAddress: contractAddress,
    opAmount: 0,
    input: 'input params'
});
```

### 资产管理
提供资产的发行、转移等功能。

```javascript
// 发行资产
const issueResult = await sdk.token.asset.issue({
    sourceAddress: address,
    code: 'CNY',
    amount: '10000'
});

// 转移资产
const sendResult = await sdk.token.asset.send({
    sourceAddress: address,
    destAddress: toAddress,
    code: 'CNY',
    amount: '100'
});
```

### CTP10代币
支持符合CTP10标准的代币操作。

```javascript
// 发行CTP10代币
const tokenResult = await sdk.token.ctp10Token.issue({
    sourceAddress: address,
    name: 'MyToken',
    symbol: 'MT',
    decimals: 8,
    totalSupply: '1000000'
});

// 转移代币
const transferResult = await sdk.token.ctp10Token.transfer({
    sourceAddress: address,
    destAddress: toAddress,
    tokenOwner: tokenOwner,
    amount: '100'
});
```

## 错误处理
SDK使用标准的错误处理机制，建议使用try-catch进行错误捕获。

```javascript
try {
    const result = await sdk.account.getInfo(address);
} catch (error) {
    console.error('错误类型:', error.name);
    console.error('错误信息:', error.message);
}
```

## 示例代码
完整的示例代码可以参考SDK的测试用例：
- 账户操作: test/account.test.js
- 合约操作: test/contract.test.js
- 资产管理: test/asset.test.js
- CTP10代币: test/Ctp10Token.test.js

## API参考

### 主要模块
- account: 账户管理模块
- contract: 智能合约模块
- token: 资产和代币管理模块
- blockchain: 区块链信息查询模块

### 工具类
- util: 提供常用的工具函数
- crypto: 加密相关功能

### 错误类型
- customErrors: 自定义错误类型
- errors: 标准错误定义

## 注意事项
1. 在生产环境中使用时，请确保节点地址使用HTTPS协议
2. 私钥信息需要安全保管，避免泄露
3. 建议在进行重要操作时启用多重签名机制
4. 代币转移等操作前要仔细核对地址信息

## 许可证
ISC License