
# OpenChain SDK

OpenChain SDK for browser environments.

## Installation

```bash
npm install openchain-sdk-yxl
```

## Required Peer Dependencies

The SDK requires the following peer dependencies to be installed in your project:

```bash
npm install buffer events process
```

## Usage

### 在 Vite 项目中使用

1. 安装必要的依赖：
```bash
npm install buffer events process
```

2. 配置 vite.config.js：
```javascript
import { defineConfig } from 'vite';

export default defineConfig({
  resolve: {
    alias: {
      buffer: 'buffer',
      process: 'process/browser',
      events: 'events'
    }
  },
  define: {
    'process.env': {},
    global: 'globalThis'
  }
});
```

3. 在入口文件中初始化环境：
```javascript
import { Buffer } from 'buffer';
import process from 'process';

window.Buffer = Buffer;
window.process = process;
window.global = window;
```

4. 使用SDK：
```javascript
import OpenChainSDK from 'openchain-sdk-yxl';
// 或者
import { OpenChainSDK } from 'openchain-sdk-yxl';

const sdk = new OpenChainSDK({
  host: 'your-api-host',
  chainID: 0
});
```

### 在 Create React App 中使用

1. 安装必要的依赖：
```bash
npm install buffer events process react-app-rewired
```

2. 配置 config-overrides.js：
```javascript
const webpack = require('webpack');

module.exports = function override(config) {
  config.resolve.fallback = {
    buffer: require.resolve('buffer/'),
    process: require.resolve('process/browser'),
    events: require.resolve('events/')
  };

  config.plugins.push(
    new webpack.ProvidePlugin({
      Buffer: ['buffer', 'Buffer'],
      process: 'process/browser'
    })
  );

  return config;
};
```

3. 更新 package.json 中的 scripts：
```json
{
  "scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test"
  }
}
```

4. 在入口文件中初始化环境：
```javascript
import { Buffer } from 'buffer';
import process from 'process';

window.Buffer = Buffer;
window.process = process;
window.global = window;
```

5. 使用SDK：
```javascript
import OpenChainSDK from 'openchain-sdk-yxl';
// 或者
import { OpenChainSDK } from 'openchain-sdk-yxl';

const sdk = new OpenChainSDK({
  host: 'your-api-host',
  chainID: 0
});
```

### 在 Webpack 项目中使用

1. 安装必要的依赖：
```bash
npm install buffer events process
```

2. 配置 webpack.config.js：
```javascript
const webpack = require('webpack');

module.exports = {
  resolve: {
    fallback: {
      buffer: require.resolve('buffer/'),
      process: require.resolve('process/browser'),
      events: require.resolve('events/')
    }
  },
  plugins: [
    new webpack.ProvidePlugin({
      Buffer: ['buffer', 'Buffer'],
      process: 'process/browser'
    })
  ]
};
```

3. 在入口文件中初始化环境：
```javascript
import { Buffer } from 'buffer';
import process from 'process';

window.Buffer = Buffer;
window.process = process;
window.global = window;
```

4. 使用SDK：
```javascript
import OpenChainSDK from 'openchain-sdk-yxl';
// 或者
import { OpenChainSDK } from 'openchain-sdk-yxl';

const sdk = new OpenChainSDK({
  host: 'your-api-host',
  chainID: 0
});
```

## API Examples

### Account Operations
```javascript
// Create account
const result = await sdk.account.create();
console.log(result);

// Get account info
const info = await sdk.account.getInfo('your-account-address');
console.log(info);
```

### Contract Operations
```javascript
// Deploy contract
const contractResult = await sdk.contract.createContract({
  sourceAddress: 'your-address',
  initBalance: '10',
  type: 0,
  payload: 'contract-code'
});
console.log(contractResult);

// Call contract
const callResult = await sdk.contract.call({
  contractAddress: 'contract-address',
  input: 'method-name'
});
console.log(callResult);
```

### WebSocket Usage
```javascript
import { WebSocketClient } from 'openchain-sdk-yxl';

const ws = new WebSocketClient({
  url: 'ws://your-ws-url',
  autoReconnect: true
});

ws.on('connected', () => {
  console.log('Connected to WebSocket server');
});

ws.on('transaction', (message) => {
  console.log('New transaction:', message);
});

// Subscribe to transactions
ws.subscribeTx(['your-account-address']);
```

## Browser Compatibility

The SDK requires the following browser environment support:
- Buffer (通过 buffer 包提供)
- Process (通过 process 包提供)
- Events (通过 events 包提供)

Minimum browser versions supported:
- Chrome >= 60
- Firefox >= 60
- Safari >= 12
- Edge >= 79

## TypeScript Support

The package includes TypeScript definitions. No additional @types package is required.

## License

ISC