Skip to content
JavaScript SDK Source Code for Developer
Branch: master
Clone or download
Latest commit c429f7b Feb 27, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
test Import history BTC tx Jan 21, 2019
LICENSE Initial commit Aug 28, 2018
conf.json add WETH->WETH normal transaction support Nov 1, 2018
package.json Fix typo Jan 21, 2019


GitHub License

Wanchain SDK for making crosschain transactions on the Wanchain network

Note: Currently only Ethereum and ERC20 can be used on mainnet.


Use NPM to install the library:

git clone
npm install


You need a config.js file as the following:

const config = {
    port: 8545, //wanchain api port
    useLocalNode: false, // if you like to use your local node, otherwise please set to false
    logPathPrex: '', // your logs directory prefix, if you like your logs file under current directory just leave it blank.
    loglevel: 'info', // log level, we have four levels info,debug,warn and error.
    databasePathPrex: '', // your lowdb dirctory prefix.

const SLEEPTIME = 10000; //sleep time checking for storeman event when redeem

module.exports = {

Basic Usage

Define the transaction

Start by create a new WalletCore instance with abovementioned config then initialize it.

  walletCore = new WalletCore(config);

Then define the source chain and destination chain.

  srcChain = global.crossInvoker.getSrcChainNameByContractAddr('ETH', 'ETH');
  dstChain = global.crossInvoker.getSrcChainNameByContractAddr('WAN', 'WAN');

Then define the details of the crosschain transaction. The wanchain-js-sdk crosschain methods require you to pass in this transaction object. The required values depend on chain and direction.

//define your wanchain gas parameter and your wallet password
const WAN_PARA = {
    gasPrice: '180',
    gasLimit: '470000',
    password: 'password'

//define your ethereum gas parameter and your wallet password
const ETH_PARA = {
    gasPrice: '10',
    gasLimit: '470000',
    password: 'password'

// Instance INPUT
const ethInboundInput = {
    lockInput: Object.assign({}, {
        from: ETHADDR,
        to: WANADDR,
        amount: '0.00113',
    }, ETH_PARA),
    redeemInput: WAN_PARA,
    revokeInput: ETH_PARA

Invoke the lock transaction

Firstly you need to check storeman groups which serve ETH coin transaction then invoke the transaction!

  // checking storeman groups which serve ETH  coin transaction
  storemanList = (await ccUtil.getEthSmgList()).sort((a, b) => b.inboundQuota - a.inboundQuota);
  ethInboundInput.lockInput.txFeeRatio = storemanList[0].txFeeRatio;
  ethInboundInput.lockInput.storeman = storemanList[0].ethAddress;

  // Invoke the lock transaction on Ethereum
  retLock = await global.crossInvoker.invoke(srcChain, dstChain, 'LOCK', ethInboundInput.lockInput);

There are generally several independent transactions including LOCK, REDEEM, REVOKE etc.


Cross-chain Transactions



  1. git clone
  2. npm install
  3. npm test

Next Todos

  • Add support for more of the contract methods
  • Add support for more available tokens


You can’t perform that action at this time.