Newfangled Package Modernizer

    @meterio/sumer-js
    TypeScript icon, indicating that this package has built-in type declarations

    0.0.11 • Public • Published

    Sumer.js

    A JavaScript SDK for Binance Smart Chain and the Sumer Protocol. Wraps around Ethers.js. Works in the web browser and Node.js.

    Sumer.js Documentation

    This SDK is in open beta, and is constantly under development. USE AT YOUR OWN RISK.

    Binance Smart Chain Read & Write

    JSON RPC based Binance Smart Chain read and write.

    Read

    const Sumer = require('@meterio/sumer-js'); // in Node.js
    const vUsdtAddress = Sumer.util.getAddress(Sumer.vUSDT);
    
    (async function() {
    
      let supplyRatePerBlock = await Sumer.eth.read(
        vUsdtAddress,
        'function supplyRatePerBlock() returns (uint)',
        [], // [optional] parameters
        {}  // [optional] call options, provider, network, ethers.js "overrides"
      );
    
      console.log('USDT supplyRatePerBlock:', supplyRatePerBlock.toString());
    
    })().catch(console.error);

    Write

    const toAddress = '0xa0df350d2637096571F7A701CBc1C5fdE30dF76A';
    
    (async function() {
    
      const trx = await Sumer.eth.trx(
        toAddress,
        'function send() external payable',
        [],
        {
          value: Sumer._ethers.utils.parseEther('1.0'), // 1 ETH
          provider: window.ethereum, // in a web browser
        }
      );
    
      const toAddressEthBalance = await Sumer.eth.getBalance(toAddress);
    
    })().catch(console.error);

    Sumer Protocol

    Simple methods for using the Sumer protocol.

    const sumer = new Sumer(window.ethereum); // in a web browser
    
    // Ethers.js overrides are an optional 3rd parameter for `supply`
    // const trxOptions = { gasLimit: 250000, mantissa: false };
    
    (async function() {
    
      console.log('Supplying ETH to the Sumer protocol...');
      const trx = await sumer.supply(Sumer.ETH, 1);
      console.log('Ethers.js transaction object', trx);
    
    })().catch(console.error);

    Install / Import

    Web Browser

    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@meterio/sumer-js@latest/dist/browser/sumer.min.js"></script>
    
    <script type="text/javascript">
      window.Sumer; // or `Sumer`
    </script>

    Node.js

    npm install @meterio/sumer-js
    
    const Sumer = require('@meterio/sumer-js');
    
    // or, when using ES6
    
    import Sumer from '@meterio/sumer-js';

    More Code Examples

    To run, boot Ganache fork of mainnet locally

    Instance Creation

    The following are valid Binance Smart Chain providers for initialization of the SDK.

    var sumer = new Sumer(window.ethereum); // web browser
    
    var sumer = new Sumer('http://127.0.0.1:8545'); // HTTP provider
    
    var sumer = new Sumer(); // Uses Ethers.js fallback mainnet (for testing only)
    
    var sumer = new Sumer('testnet'); // Uses Ethers.js fallback (for testing only)
    
    // Init with private key (server side)
    var sumer = new Sumer('http://127.0.0.1:8545', {
      privateKey: '0x_your_private_key_', // preferably with environment variable
    });
    
    // Init with HD mnemonic (server side)
    var sumer = new Sumer('mainnet' {
      mnemonic: 'clutch captain shoe...', // preferably with environment variable
    });

    Constants and Contract Addresses

    Names of contracts, their addresses, ABIs, token decimals, and more can be found in /src/constants.ts. Addresses, for all networks, can be easily fetched using the getAddress function, combined with contract name constants.

    console.log(Sumer.BUSD, Sumer.BNB, Sumer.vSXP);
    // BUSD, BNB, vSXP
    
    const vUsdtAddress = Sumer.util.getAddress(Sumer.vUSDT);
    // Mainnet vUSDT address. Second parameter can be a network like 'testnet'.

    Mantissas

    Parameters of number values can be plain numbers or their scaled up mantissa values. There is a transaction option boolean to tell the SDK what the developer is passing.

    // 1 BUSD
    await sumer.borrow(Sumer.BUSD, '1000000000000000000', { mantissa: true });
    
    // `mantissa` defaults to false if it is not specified or if an options object is not passed
    await sumer.borrow(Sumer.BUSD, 1, { mantissa: false });

    Transaction Options

    Each method that interacts with the blockchain accepts a final optional parameter for overrides, much like Ethers.js overrides.

    // The options object itself and all options are optional
    const trxOptions = {
      mantissa,   // Boolean, parameters array arg of 1 ETH would be '1000000000000000000' (true) vs 1 (false)
      abi,        // Definition string or an ABI array from a solc build
      provider,   // JSON RPC string, Web3 object, or Ethers.js fallback network (string)
      network,    // Ethers.js fallback network provider, "provider" has precedence over "network"
      from,       // Address that the Binance Smart Chain transaction is send from
      gasPrice,   // Ethers.js override `Sumer._ethers.utils.parseUnits('10.0', 'gwei')`
      gasLimit,   // Ethers.js override - see https://docs.ethers.io/ethers.js/v5-beta/api-contract.html#overrides
      value,      // Number or string
      data,       // Number or string
      chainId,    // Number
      nonce,      // Number
      privateKey, // String, meant to be used with `Sumer.eth.trx` (server side)
      mnemonic,   // String, meant to be used with `Sumer.eth.trx` (server side)
    };

    API

    The Sumer API is accessible from Sumer.js. The corresponding services are defined in the api namespace on the class.

    • Sumer.api.account
    • Sumer.api.vToken
    • Sumer.api.marketHistory
    • Sumer.api.governance

    The governance method requires a second parameter (string) for the corresponding endpoint shown in the documentation.

    • proposals
    • voteReceipts
    • accounts

    Here is an example for using the account endpoint. The network parameter in the request body is optional and defaults to mainnet.

    const main = async () => {
      const account = await Sumer.api.account({
        "addresses": "0xB61C5971d9c0472befceFfbE662555B78284c307",
        "network": "testnet"
      });
    
      let sxpBorrowBalance = 0;
      if (Object.isExtensible(account) && account.accounts) {
        account.accounts.forEach((acc) => {
          acc.tokens.forEach((tok) => {
            if (tok.symbol === Sumer.vSXP) {
              sxpBorrowBalance = +tok.borrow_balance_underlying.value;
            }
          });
        });
      }
    
      console.log('sxpBorrowBalance', sxpBorrowBalance);
    }
    
    main().catch(console.error);

    Build for Node.js & Web Browser

    git clone git@github.com:meterio/sumer-js.git
    cd sumer-js/
    npm install
    npm run build
    

    Web Browser Build

    <!-- Local build (do `npm install` first) -->
    <script type="text/javascript" src="./dist/browser/sumer.min.js"></script>
    
    <!-- Public NPM -> jsdeliver build -->
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@meterio/sumer-js@latest/dist/browser/sumer.min.js"></script>

    Start HTTP Server

    npm install -g http-server
    http-server
    

    Then you could go to http://localhost:8080/examples/web

    Node.js Build

    // Local build (do `npm install` first)
    const Sumer = require('./dist/nodejs/index.js');
    
    // Public NPM build
    const Sumer = require('@meterio/sumer-js');

    Install

    npm i @meterio/sumer-js

    DownloadsWeekly Downloads

    169

    Version

    0.0.11

    License

    BSD-3-Clause

    Unpacked Size

    2.02 MB

    Total Files

    106

    Last publish

    Collaborators

    • avatar
    • avatar