GithubHelp home page GithubHelp logo

synthetixio / synthetix-js Goto Github PK

View Code? Open in Web Editor NEW
63.0 22.0 44.0 43.15 MB

[deprecated] Please use https://github.com/Synthetixio/js-monorepo/tree/master/packages/contracts-interface

JavaScript 100.00%
synthetix ethereum defi dapp blockchain

synthetix-js's Introduction

This library is now deprecated. Please use https://github.com/Synthetixio/js-monorepo/tree/master/packages/contracts-interface from our new monorepo.

SynthetixJs library

CircleCI npm version Discord Twitter Follow

The Synthetix-JS Library provides a simple pre-packaged API to communicate with Synthetix on ethereum. You can use it to contribute to DeFi's growing synthetic asset ecosystem.

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

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

Install via npm

npm install synthetix-js

Developer Docs

developer.synthetix.io

Example for getting the total sUSD stablecoin in circulation

const { SynthetixJs } = require('synthetix-js');
const snxjs = new SynthetixJs(); //uses default ContractSettings - ethers.js default provider, mainnet
(async function() {
  const totalSUSD = await snxjs.sUSD.totalSupply();
  const totalSUSDSupply = snxjs.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 { SynthetixJs } = require('synthetix-js');
const metaMaskSigner = new SynthetixJs.signers.Metamask();
const snxjs = new SynthetixJs({ signer: metaMaskSigner }); //uses Metamask signer and default infura.io provider on mainnet

Example of minting stablecoin(sUSD) with private key signer

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

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

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

run();

Live examples

  • Get total synth supply Get total supply
  • Get collateralized state image

Got any questions?

Join our dev community on Discord: Discord

synthetix-js's People

Contributors

0xclem avatar barrasso avatar blinkystitt avatar clementsynthetixio avatar garthtravers avatar hav-noms avatar jjgonecrypto avatar kaiynne avatar martintorok avatar oleiba avatar romanmandryk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

synthetix-js's Issues

npm test fails with VM execution error

A few tests are failing... any idea why?

  ● src/contracts/Synth › sBTC › kovan Should have correct Synthetix Proxy address

    VM execution error.

      at getResult (node_modules/ethers/providers/json-rpc-provider.js:40:21)
      at Object.<anonymous>.exports.XMLHttpRequest.request.onreadystatechange (node_modules/ethers/utils/web.js:111:30)
      at Object.<anonymous>.exports.XMLHttpRequest.dispatchEvent (node_modules/ethers/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:591:25)
      at setState (node_modules/ethers/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:610:14)
      at IncomingMessage.<anonymous> (node_modules/ethers/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:447:13)

  ● src/contracts/Synth › iBTC › kovan Should have correct Synthetix Proxy address

    VM execution error.

      at getResult (node_modules/ethers/providers/json-rpc-provider.js:40:21)
      at Object.<anonymous>.exports.XMLHttpRequest.request.onreadystatechange (node_modules/ethers/utils/web.js:111:30)
      at Object.<anonymous>.exports.XMLHttpRequest.dispatchEvent (node_modules/ethers/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:591:25)
      at setState (node_modules/ethers/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:610:14)
      at IncomingMessage.<anonymous> (node_modules/ethers/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:447:13)

demo from README.md ends with Error

From the README (I just changed the networkId to be Ropsten):

const { SynthetixJs } = require('synthetix-js');
//parameters: default provider, default networkId, private key as a string
const networkId = 3;  // Ropsten
const signer = new SynthetixJs.signers.PrivateKey(
  null,
  networkId,
  '0x0123456789012345678901234567890123456789012345678901234567890123'
);
const snxjs = new SynthetixJs({ networkId, signer });
const sUSD = snxjs.utils.toUtf8Bytes('sUSD');

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

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

run();

Execution ends with:

Error: unknown transaction override _hex
    at Contract.issueSynths (/Users/odedleiba/MyWorkspace/synthetix-playground/node_modules/synthetix-js/dist/main.node.js:11375:27)
    at ropsten_Synthetix_Synthetix.issueSynths (/Users/odedleiba/MyWorkspace/synthetix-playground/node_modules/synthetix-js/dist/main.node.js:46304:32)
    at run (/Users/odedleiba/MyWorkspace/synthetix-playground/index.js:26:45)
    at process._tickCallback (internal/process/next_tick.js:68:7)

This is because the signature of issueSynths is:

this.issueSynths = async (amount, txParams) {...}

So it seems that sUSD and snxjs.util.parseEther('100') do not apply to the parameters requirement.

`snxjs.Depot.exchangeEtherForSNX` actually exchanges for sUSD

When doing:

snxjs.Depot.exchangeEtherForSNX({value: snxjs.util.parseEther(etherValue)})

what actually happens is exchanging ether for sUSD.
I assume this is because the actual function in the contract which is called is the fallback function, which calls exchangeEtherForSynths (which exchanges for sUSD):

image

Instead - this function should eventually call the contract's fallback function which is exchangeEtherForSynthetix (which exchange for sUSD):

image

have an easy way to inject a custom provider

Currently, it seems there's no straight forward way to inject a provider when initializing SynthetixJS.

One can inject a signer, which can accept a provider in its constructor, but in order for the provider to implement the needed interface - it seems we must use either of ethers' provider classes.
The problem is that the only field exported by SynthetixJS from ethers is utils.
I suggest to also export providers from ethers, so one can easily inject its own custom provider:

const provider = new SynthetixJs.providers.InfuraProvider('ropsten', projectId);
const signer = new SynthetixJs.signers.PrivateKey(
    provider,
    networkId,  // Ropsten
    privateKey
);
const snxjs = new SynthetixJs({ networkId, signer });

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.