Javascript SDK of WoopChain protocol
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Ganesha Upadhyaya b7852bb9c5 updating staking datastructures 5 years ago
docs break(hdnode):remake hdnode 5 years ago
e2e chore(transformers):fix Unit 5 years ago
packages updating staking datastructures 5 years ago
scripts feat(test):add more test and remove unused function 5 years ago
typings fix(keystore):compatible with node 12 5 years ago
.babelrc [WIP] add dependencies 6 years ago
.env.example fix(contract): fix getContractAddress 5 years ago
.eslintignore [feat] update a lot 6 years ago
.gitignore [fix] remove devTestOnly 6 years ago
.prettierignore [WIP] add dependencies 6 years ago
.prettierrc feat(Provider): added a Provider to get Http and WS Provider easier 5 years ago
.travis.yml fix(travis):remove docs when build 5 years ago
.yarnrc fix(publisher):update .yarnrc to prevent npm registry problem 5 years ago
LICENSE [feat] update LICENSE 6 years ago
README.md chore(README): fix README 5 years ago
gulpfile.js adding sendTrasaction for staking and refactoring common code between Transaction and StakingTransaction to TransactionBase for code reuse 5 years ago
lerna.json v0.1.32 5 years ago
package.json fix(contract): fix getContractAddress 5 years ago
tsconfig.base.json added harmony-network and new bundler 6 years ago
tsconfig.e2e.json wip(e2e): add e2e tests 5 years ago
tsconfig.json chore(transaction):rename base.ts to transactionBase.ts, and fix build script 5 years ago
tsconfig.test.json chore(transaction):rename base.ts to transactionBase.ts, and fix build script 5 years ago
tslint.json [WIP] add dependencies 6 years ago

README.md

npm version Build Status

  1. About this SDK
  2. How to Install
    1. Enviorment requirement
    2. Install from npm/yarn
    3. Quick start
  3. Build from source files
    1. Install lerna and typescript globally
    2. Bootstrap and build
    3. Bundle
  4. Tests
    1. Unit tests
    2. e2e tests
  5. More examples

About this SDK

A Harmony's blockchain javascript library, which provides an easier way to interact with Harmony's blockchain.

This libraries contains a few packages.

  1. @harmony-js/core
  2. @harmony-js/account
  3. @harmony-js/crypto
  4. @harmony-js/network
  5. @harmony-js/utils
  6. @harmony-js/transaction
  7. @harmony-js/contract
  8. @harmony-js/staking

How to Install

This library works on both nodejs and browser. Please use it according to your use case.

Enviorment requirement

  • Nodejs: 10.0+
  • Browser: Latest Chrome and Firefox

Install from npm/yarn

Note: we added a @next tag to npm package, please use the following command to install with npm/yarn


# npm
npm install @harmony-js/core@next 

# yarn
yarn add @harmony-js/core@next

# tslib is required, we'd better install it as well
npm install tslib
yarn add tslib

Quick start

  1. You need Harmony local testnet running. instruction here:harmony-one/harmony
  2. Run this example under nodejs enviorment.
// import or require Harmony class
const { Harmony } = require('@harmony-js/core');

// import or require settings
const { ChainID, ChainType } = require('@harmony-js/utils');

// 1. initialize the Harmony instance

const harmony = new Harmony(
  // rpc url
  'http://localhost:9500',
  {
    // chainType set to Harmony
    chainType: ChainType.Harmony,
    // chainType set to HmyLocal
    chainId: ChainID.HmyLocal,
  },
);

// 2. get wallet ready
// specify the privateKey
const privateKey = '45e497bd45a9049bcb649016594489ac67b9f052a6cdf5cb74ee2427a60bf25e';
// add privateKey to wallet
const sender = harmony.wallet.addByPrivateKey(privateKey);

// 3. get sharding info
async function setSharding() {
  // Harmony is a sharded blockchain, each endpoint have sharding structure,
  // However sharding structure is different between mainnet, testnet and local testnet
  // We need to get sharding info before doing cross-shard transaction
  const res = await harmony.blockchain.getShardingStructure();
  harmony.shardingStructures(res.result);
}

// 4. get transaction payload ready

async function transfer() {
  // run set sharding first, if you want to make a cross-shard transaction
  await setSharding();

  const txn = harmony.transactions.newTx({
    //  token send to
    to: 'one166axnkjmghkf3df7xfvd0hn4dft8kemrza4cd2',
    // amount to send
    value: '10000',
    // gas limit, you can use string
    gasLimit: '210000',
    // send token from shardID
    shardID: 0,
    // send token to toShardID
    toShardID: 0,
    // gas Price, you can use Unit class, and use Gwei, then remember to use toWei(), which will be transformed to BN
    gasPrice: new harmony.utils.Unit('100').asGwei().toWei(),
  });

  // sign the transaction use wallet;

  const signedTxn = await harmony.wallet.signTransaction(txn);

  // Now you can use `Transaction.observed()` to listen events

  signedTxn
    .observed()
    .on('transactionHash', (txnHash) => {
      console.log('');
      console.log('--- hash ---');
      console.log('');
      console.log(txnHash);
      console.log('');
    })
    .on('receipt', (receipt) => {
      console.log('');
      console.log('--- receipt ---');
      console.log('');
      console.log(receipt);
      console.log('');
    })
    .on('cxReceipt', (receipt) => {
      console.log('');
      console.log('--- cxReceipt ---');
      console.log('');
      console.log(receipt);
      console.log('');
    })
    .on('error', (error) => {
      console.log('');
      console.log('--- error ---');
      console.log('');
      console.log(error);
      console.log('');
    });

  // send the txn, get [Transaction, transactionHash] as result

  const [sentTxn, txnHash] = await signedTxn.sendTransaction();

  // to confirm the result if it is already there

  const confiremdTxn = await sentTxn.confirm(txnHash);

  // if the transactino is cross-shard transaction
  if (!confiremdTxn.isCrossShard()) {
    if (confiremdTxn.isConfirmed()) {
      console.log('--- Result ---');
      console.log('');
      console.log('Normal transaction');
      console.log(`${txnHash} is confirmed`);
      console.log('');
      process.exit();
    }
  }
  if (confiremdTxn.isConfirmed() && confiremdTxn.isCxConfirmed()) {
    console.log('--- Result ---');
    console.log('');
    console.log('Cross-Shard transaction');
    console.log(`${txnHash} is confirmed`);
    console.log('');
    process.exit();
  }
}

transfer();

Build from source files

Install lerna and typescript globally

yarn global add lerna && yarn global add typescript

Bootstrap and build

yarn bootstrap

Bundle

build umd and esm version javascript for each sub-packages, which can be accessed by import or require

yarn dist

All files are exported in packages/dist folder, use **.esm.js or **.umd.js format

Tests

Unit tests

yarn test:src

e2e tests

Contantly updating now, please get back later

  1. edit .env file if you have custom setting

  2. run harmony node locally, follow this instruction : https://github.com/harmony-one/harmony)

  3. wait for 1-2 mins, and run this:

yarn build && yarn test:e2e

More examples