@horizon-protocol/horizon-js

Horizon JS Library - access Horizon smart contracts from browser and Node.js


License
MIT
Install
npm install @horizon-protocol/horizon-js@3.0.11

Documentation

HorizonJs library

CircleCI npm version Discord Twitter Follow

The Horizon-JS Library provides a simple pre-packaged API to communicate with Horizon on binance smart chain. You can use it to contribute to DeFi's growing horizon asset ecosystem.

This is particularly useful for hackathon teams to quickly npm install @horizon-protocol/horizon-js and start building in just a few minutes.

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

Install via npm

npm install @horizon-protocol/horizon-js

Developer Docs

developer.synthetix.io

Example for getting the total sUSD stablecoin in circulation

const { HorizonJs } = require('@horizon-protocol/horizon-js');
const hznjs = new HorizonJs(); //uses default ContractSettings - ethers.js default provider, mainnet
(async function() {
  const totalSUSD = await hznjs.sUSD.totalSupply();
  const totalSUSDSupply = hznjs.utils.formatEther(totalSUSD);
  console.log('sUSDTotalSupply', totalSUSDSupply);
})();

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 { HorizonJs } = require('@horizon-protocol/horizon-js');
const metaMaskSigner = new HorizonJs.signers.Metamask();
const hznjs = new HorizonJs({ signer: metaMaskSigner }); //uses Metamask signer and default infura.io provider on mainnet

Example of minting stablecoin(sUSD) with private key signer

const { HorizonJs } = require('@horizon-protocol/horizon-js');
//parameters: default provider, default networkId, private key as a string
const signer = new HorizonJs.signers.PrivateKey(
  null,
  0,
  '0x0123456789012345678901234567890123456789012345678901234567890123'
);
const hznjs = new HorizonJs({ signer });

async function run() {
  const totalSupply = await hznjs.Synthetix.totalSupply();
  const snxTotalSupply = hznjs.utils.formatEther(totalSupply);
  console.log('snxTotalSupply', snxTotalSupply);

  //issue 100 synths (will throw if insufficient funds for gas)
  try {
    const txObj = await hznjs.Synthetix.issueSynths(hznjs.util.parseEther('100')); //execute transaction (requires gas)
    console.log('transaction hash', txObj.hash);
  } catch (e) {
    console.log(e);
  }
}

run();