HavvenJs library

CircleCI

The Havven-JS Library provides a simple pre-packaged API to communicate with the Havven payment engine on ethereum. You can use it to build your own dApp that needs to work with payments using a stablecoin.

This is particularly useful for hackathon teams to quickly npm install havven-js and have stable payments integrated into their dApp in just a few minutes.

Under the hood, HavvenJs uses ethers.js library and its concept of providers and transaction signers.

The two main packages to do stable payments with are:

  • StablePayments - for transfer() and payment related functions like transfer()
  • Util - a bunch of handy utility functions for number handling and gas estimation

Some other packages for hacking with:

  • IsssuanceController - for Token swapper/exchange functions such as ETH > HAV & ETH > nUSD
  • Mintr - if you want to build a dApp for minting and burning stablecoins.

What can I build on the Havven payment engine?

Anything you can think of with programmable money. We provide the stability-as-a-service and soon fx (foreign exchange) with havvens multicurrency release.

We’ve come up with some thought starters for dApps you could create by integrating Havven’s stable payments into your projects.

  • Crypto Games - lottery, poker, fomoNUSD for kicks.
  • Crypto Ecommerce
  • Crypto Loans
  • Crypto Insurance
  • Crypto Payroll
  • Crypto Global Remittance

Install via npm

npm install havven-js

Example for getting the total nUSD stablecoin in circulation

const { HavvenJs } = require('havven-js');
const havjs = new HavvenJs(); //uses default ContractSettings - ethers.js default provider, mainnet
(async function() {
  const totalNUSD = await havjs.Nomin.totalSupply();
  const havTotalSupply = havjs.utils.formatEther(totalNUSD);
  console.log('nUSDTotalSupply', havTotalSupply);
})();

Default settings don't use any signer. That means that constants can be viewed from the contract but executing a transaction will fail. To execute transactions, set up signer.

4 signers are included in the library - Metamask (compatible with Dapp browsers), Trezor, Ledger and PrivateKey. Custom ethers.js compatible signers can be used too.

Example using a metamask signer

const { HavvenJs } = require('havven-js');
const metaMaskSigner = new HavvenJs.signers.Metamask();
const havjs = new HavvenJs({signer: metaMaskSigner}); //uses Metamask signer and default infura.io provider on mainnet

Example converting ETH to USD pegged stablecoin nUSD

Obtain test ETH from a faucet https://gitter.im/kovan-testnet/faucet

const txObj = await havjs.IssuanceController.exchangeEtherForNomins({ value: havjs.util.parseEther("0.123") });

Example of making a stablecoin payment

//Transfer stablecoins to any ethereum address, wallet or smart contract
const txObj = await havjs.StablePayments.transfer('0x5C545CA7f9D34857664FDCe6aDC22edcF1D5061f', nUSDReceived);

Example of minting stablecoin(nUSD) with private key signer

const { HavvenJs } = require('havven-js');
//parameters: default provider, default networkId, private key as a string
const signer = new HavvenJs.signers.PrivateKey(null, 0, '0x0123456789012345678901234567890123456789012345678901234567890123');
const havjs = new HavvenJs({signer});

async function run(){
  const totalSupply = await havjs.Havven.totalSupply();
  const havTotalSupply = havjs.utils.formatEther(totalSupply);
  console.log('havTotalSupply', havTotalSupply);

  //issue 100 nomins (will throw if insufficient funds for gas)
  try {
    const txObj = await havjs.Havven.issueNomins(havjs.util.parseEther("100")); //execute transaction (requires gas)
    console.log('transaction hash', txObj.hash);
  } catch (e) {
    console.log(e);
  }
}

run();

See /__tests__ folder for more examples.

More Info

To understand the Havven payments engine see more at developer.havven.io

Got any questions?

Join our dev community on Discord: https://discord.gg/S5WmKUp