npm package: @garizonchain/core
Description: garizon core package
Author: garizon
Latest version: 0.0.2

# @garizonchain/core

This package provides a collection of apis to interact with Garizon blockchain.

## Installation

```
npm install @garizonchain/core
```

## Usage

Create a Garizon instance connecting to testnet

```javascript
const { Garizon } = require('@garizonchain/core');
const {
  ChainID,
  ChainType,
  hexToNumber,
  numberToHex,
  fromWei,
  Units,
  Unit,
} = require('@garizonchain/utils');

const gar = new Garizon(
    'https://api.s0.b.hmny.io/',
    {
        chainType: ChainType.Garizon,
        chainId: ChainID.GarTestnet,
    },
);
```

Getting balance of account `gar103q7qe5t2505lypvltkqtddaef5tzfxwsse4z7`
```javascript
gar.blockchain
  .getBalance({ address: 'gar103q7qe5t2505lypvltkqtddaef5tzfxwsse4z7' })
  .then((response) => {
    console.log('balance in GARs: ' + fromWei(hexToNumber(response.result), Units.gar));
  });
```

Getting the latest block number
```javascript
gar.blockchain.getBlockNumber().then((response) => {
  console.log('current block number: ' + hexToNumber(response.result));
});
```

Getting the block using block hash
```javascript
gar.blockchain
  .getBlockByHash({
    blockHash: '0x08c46ae7249362a7d1f602d44c5a81f33ebdab6a7dcb6068f99610b57911aafd',
  })
  .then((response) => {
    console.log(response.result);
  });
```

Getting the block using block number
```javascript
gar.blockchain
  .getBlockByNumber({
    blockNumber: numberToHex(422635),
  })
  .then((response) => {
    console.log(response.result);
  });
```

Getting the transaction using hash
```javascript
gar.blockchain
  .getTransactionByHash({
    txnHash: '0x56c73eb993b18dc04baacec5c2e9d1292a090f6a978a4a1c461db5255fcbc831',
  })
  .then((response) => {
    console.log(response.result);
  });
```

Getting the transaction receipt
```javascript
gar.blockchain
  .getTransactionReceipt({
    txnHash: '0x56c73eb993b18dc04baacec5c2e9d1292a090f6a978a4a1c461db5255fcbc831',
  })
  .then((response) => {
    console.log(response.result);
  });
```

Getting the cross-stage transaction receipt
```javascript
gar.blockchain
  .getCxReceiptByHash({
    txnHash: '0xcd36a90ff5d5373285c2896ba7bbcd3f5324263c0cb8ecfb7cad2f5fc2fbdbda',
    stageID: 1,
  })
  .then((value) => {
    console.log(value.result);
  });
```

Getting the deployed smart contract code
```javascript
gar.blockchain
  .getCode({
    address: '0x08AE1abFE01aEA60a47663bCe0794eCCD5763c19',
    blockNumber: 'latest',
  })
  .then((response) => {
    console.log(response.result);
  });
```

Getting the transaction count of an account
```javascript
gar.blockchain
  .getTransactionCount({
    address: 'gar1pdv9lrdwl0rg5vglh4xtyrv3wjk3wsqket7zxy',
  })
  .then((response) => {
    console.log(hexToNumber(response.result));
  });
```

Getting the stage structure and details
```javascript
gar.blockchain.getStagingStructure().then((response) => {
  console.log(response.result);
});
```

Transferring funds using `sendTransaction`
```javascript
// key corresponds to gar103q7qe5t2505lypvltkqtddaef5tzfxwsse4z7, only has testnet balance
gar.wallet.addByPrivateKey('45e497bd45a9049bcb649016594489ac67b9f052a6cdf5cb74ee2427a60bf25e');

async function transfer() {
  const txn = gar.transactions.newTx({
    to: 'gar166axnkjmghkf3df7xfvd0hn4dft8kemrza4cd2',
    value: new Unit(1).asGar().toWei(),
    // gas limit, you can use string
    gasLimit: '21000',
    // send token from stageID
    stageID: 0,
    // send token to toStageID
    toStageID: 0,
    // gas Price, you can use Unit class, and use Gwei, then remember to use toWei(), which will be transformed to BN
    gasPrice: new gar.utils.Unit('1').asGwei().toWei(),
  });

  // sign the transaction use wallet;
  const signedTxn = await gar.wallet.signTransaction(txn);
  const txnHash = await gar.blockchain.sendTransaction(signedTxn);
  console.log(txnHash.result);
}

transfer();
```