# Home

[![npm](https://img.shields.io/npm/v/js-conflux-sdk.svg)](https://www.npmjs.com/package/js-conflux-sdk) [![npm](https://img.shields.io/npm/dm/js-conflux-sdk.svg)](https://www.npmjs.com/package/js-conflux-sdk)

JavaScript Conflux Software Development Kit is a complete library for interacting with the [**Conflux Blockchain Core Space**](https://doc.confluxnetwork.org/docs/core/Overview) in both Node.js and browser environment.

Featured with:

* Full support of Conflux Network Core Space's JSON-RPC API
* Wallet management
* Meta-classes create JavaScript objects from any contract ABI, including ABIv2 and Human-Readable ABI
* Unit(CFX, Drip) conversion
* Common utilities:
  1. Address conversion
  2. ABI/RLP encoding/decoding
  3. Crypto utilities
  4. Type conversion
* Extensive documentation and examples

For the Conflux eSpace JS SDK, consider using one of the following robust libraries: [ethers.js](https://docs.ethers.org/v6/), [viem](https://viem.sh/), or [web3.js](https://web3js.readthedocs.io/en/v1.10.0/)

## Docs

* [js-conflux-sdk documentation](https://confluxnetwork.gitbook.io/js-conflux-sdk)
* [SDK API doc](/js-conflux-sdk/api.md)
* [Examples](https://github.com/Conflux-Chain/js-conflux-sdk/blob/v2/example/README.md)
* [Community examples](https://github.com/conflux-fans/js-sdk-example)
* [Fullnode JSONRPC API](https://doc.confluxnetwork.org/docs/core/build/json-rpc/)
* [Public RPC Provider Endpoints](https://doc.confluxnetwork.org/docs/core/conflux_rpcs)
* [Testnet faucet](https://faucet.confluxnetwork.org/)
* [Core Space Documentation](https://doc.confluxnetwork.org/docs/core/Overview)
* [FAQs](/js-conflux-sdk/faqs.md)

## Install

Install through npm

```sh
npm install js-conflux-sdk
```

## How to import

### Nodejs

Use in Node.js script

```javascript
const { Conflux } = require('js-conflux-sdk');

const conflux = new Conflux({
  url: 'https://test.confluxrpc.com',
  networkId: 1,  // Note: network is required
  logger: console, // for debug
});
```

require deep nested file/dir

```javascript
const util = require('js-conflux-sdk/src/util');
```

### Frontend

#### umd

The front-packed package is located in `js-conflux-sdk`'s dist folder.

```javascript
import { Conflux } from 'js-conflux-sdk/dist/js-conflux-sdk.umd.min.js';
```

or if your bundler supports the [`browser` field](https://docs.npmjs.com/files/package.json#browser) in `package.json`

```javascript
import { Conflux } from 'js-conflux-sdk';
```

or

```html
<script type="text/javascript" src="node_modules/js-conflux-sdk/dist/js-conflux-sdk.umd.min.js"></script>
<script type="text/javascript">
  const conflux = new window.TreeGraph.Conflux({
    url: 'https://test.confluxrpc.com',
    logger: console,
    networkId: 1,
  });
</script>
```

From `v2.0` the exported root class to browser window name changed from Conflux to `TreeGraph`

Or you can use public CDN links:

* [`jsdelivr`](https://cdn.jsdelivr.net/npm/js-conflux-sdk/dist/js-conflux-sdk.umd.min.js)

## Quick Start

After importing the package, you can use the `Conflux` class instance to interact with the Conflux network, such as querying the balance of an account, sending a transaction.

```javascript
const { Conflux, Drip } = require('js-conflux-sdk');

const conflux = new Conflux({
  url: 'https://test.confluxrpc.com',
  networkId: 1,  // Note: network is required
  logger: console, // for debug
});

const exampleAddress = 'cfxtest:aar8jzybzv0fhzreav49syxnzut8s0jt1a1pdeeuwb';

async function main() {
  const balance = await conflux.cfx.getBalance(exampleAddress);
  console.log(`Balance of ${exampleAddress} is ${Drip(balance).toCFX()} CFX`);

  const account = await conflux.wallet.addPrivateKey(process.env.PRIVATE_KEY); // prepare and set your private key as environment variable

  const txHash = await conflux.cfx.sendTransaction({
    from: account.address,
    to: exampleAddress,
    value: Drip.fromCFX(1), // send 1 CFX
  });

  console.log(`Transaction hash: ${txHash}`);

  // after the transaction is executed, you can query the receipt, and the receiver should have 1 CFX more
}

main().catch(console.error);
```

For more guides and examples, please refer to the [SDK documentation](https://confluxnetwork.gitbook.io/js-conflux-sdk).

## Address conversion performance

To gain an address conversion(hex->base32 or reverse) performance boost, you can install [`@conflux-dev/conflux-address-rust`](https://github.com/conflux-fans/conflux-address-rust-binding) in your project. Which will be used to replace the purejs version and can gain a `10-100` performance boost.

Note: @conflux-dev/conflux-address-rust required a rust environment to install.

## SDK version relation with Conflux-rust

How to know SDK's version

```js
const { Conflux } = require('js-conflux-sdk');
const conflux = new Conflux({
  url: 'https://test.confluxrpc.com',
  networkId: 1,
});
console.log(conflux.version);
// 2.0.0
```

How to know fullnode's version

```js
const clientVersion = await conflux.cfx.getClientVersion();
console.log(clientVersion);
// conflux-rust-2.0.0
```

| js-conflux-sdk | conflux-rust(node) |
| -------------- | ------------------ |
| v2.4.0+        | v2.4.0+            |
| v2.0.0+        | v2.0.0+            |
| v1.7.0+        | v1.1.5+            |
| v1.6.0+        | v1.1.3+            |
| v1.5.11+       | v1.1.1+            |

## Related Projects | Tools

* [CIP-23](https://github.com/conflux-fans/cip-23) can be used to work with Conflux signTypedData
* [hardhat-conflux](https://github.com/conflux-chain/hardhat-conflux) hardhat plugin that can be used to interact with Conflux Core Network Contracts
* [@conflux-dev/hdwallet](https://github.com/Conflux-Chain/ts-conflux-sdk/tree/main/packages/hdwallet) HD Wallet


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://confluxnetwork.gitbook.io/js-conflux-sdk/readme.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
