npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@energi/web3-ext

v0.3.0

Published

Energi Cryptocurrency - Energi3 Web3 Extension

Downloads

16

Readme

Energi Web3js extension

Give web3.js features to interact with Energi's testnet or mainnet. Use whatever version of web3.js you like.

This module comes with three features:

  • web3.js extensions: web3.nrg, web3.energi and web3.masternode
  • EnergiTxCommon, to be used along with require('ethereumjs-tx').Transaction, enabling signed transaction to the Energi testnet and mainnet
  • Energi unit maps, so you can use web3.utils.toWei('1', 'nrg')

Note that Energi Unit Maps, like web3.utils.toWei('1', 'nrg'), can only be used on a web3 instance, not directly with Web3.

Networks to connect to (providers):

testnet: https://nodeapi.test.energi.network

mainnet: https://nodeapi.energi.network

Or you can launch your own node and connect on either port 39797 (mainnet) or 49797 (testnet)

How to use:

const Web3 = require('web3');
const web3Extension = require('@energi/web3-ext');

// use 'https://nodeapi.test.energi.network' to connect to the testnet
// use 'https://nodeapi.energi.network' to connect to the mainnet
const web3 = new Web3('https://nodeapi.test.energi.network');

// extend the features of web3, so that you have Energi's full public api:
web3Extension.extend(web3);

// use web3 for json-rpc requests:
const showBalance = async address => {
    let balance, balanceWei, balanceNrg;
    try {
        balance = await web3.nrg.getBalance(address);

        // balance is a BigNumber. To show, use .toString():
        balanceWei = balance.toString();
        balanceNrg = web3.utils.fromWei(balanceWei, 'nrg');
        console.log('Balance:', balanceNrg, 'NRG');
    }
    catch (err) {
        console.error(err);
    }
};

// example Energi address:
const myAddress = '0x2066640b59210bbbC84a36cA2eB64C6D2096636f';

showBalance(myAddress);

More examples

Actual masternode rewards:

const Web3 = require('web3');
const web3Extension = require('@energi/web3-ext');
const web3 = new Web3('https://nodeapi.energi.network');

// extend the features of web3, so that you have Energi's full public api:
web3Extension.extend(web3);

// use web3 for json-rpc requests:
const showRewards = async () => {
    let activeCollateral,
        payoutCycleTimeMin,
        annualMasternodeRewardsFractional,
        annualMasternodeRewardsPercent,
        energiPublishedReward,
        stats;

    const REWARDED_COLLATERAL_PER_BLOCK = 10000, // each block, 10,000 collaterized NRG get a reward
        MN_REWARD_1000_NRG = 0.914, // every payout cycle time, every 1000 NRG collateral gets 0.914 NRG rewarded
        MN_REWARD_NRG = MN_REWARD_1000_NRG / 1000,
        MIN_PER_YEAR = 365 * 1440;

    try {
        stats = await web3.masternode.stats();
        activeCollateral = stats.activeCollateral.toString();

        // activeCollateral was in Wei -> transfer to NRG:
        activeCollateral = web3.utils.fromWei(activeCollateral, 'nrg');

        payoutCycleTimeMin = Math.round(activeCollateral / REWARDED_COLLATERAL_PER_BLOCK);
        annualMasternodeRewardsFractional = (MIN_PER_YEAR / payoutCycleTimeMin) * MN_REWARD_NRG;
        annualMasternodeRewardsPercent = 100 * annualMasternodeRewardsFractional;

        // Energi publishes 10% below the actual reward, because rewards may change due to fluctiations of activeCollateral:
        energiPublishedReward = Math.round(0.9 * annualMasternodeRewardsPercent);

        console.log(energiPublishedReward);
    }
    catch (err) {
        console.error(err);
    }
};

showRewards();

Send NRG coins:

const Web3 = require('web3');
const Tx = require('ethereumjs-tx').Transaction;
const web3Extension = require('@energi/web3-ext');
const web3 = new Web3('https://nodeapi.test.energi.network');

// extend the features of web3, so that you have Energi's full public api:
web3Extension.extend(web3);

const sendTx = async (fromPrivateKey, fromAddress, toAddress, amountWei) => {
    let txCount,
        privateKeyBuffer,
        tx,
        rawTx,
        serializedTx,
        txResult,
        energiTxCommon;

    try {
        energiTxCommon = await web3Extension.getTxCommon(web3);

        if (fromPrivateKey.startsWith('0x')) {
            fromPrivateKey = fromPrivateKey.substr(2);
        }
        txCount = await web3.nrg.getTransactionCount(fromAddress);
        rawTx = {
            nonce: web3.utils.toHex(txCount),
            value: web3.utils.toHex(amountWei),
            gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')),
            gasLimit: web3.utils.toHex(21000),
            to: toAddress
        };
        tx = new Tx(rawTx, {common: energiTxCommon});
        privateKeyBuffer = Buffer.from(fromPrivateKey, 'hex');
        tx.sign(privateKeyBuffer);
        serializedTx = tx.serialize();

        txResult = await web3.nrg.sendSignedTransaction('0x' + serializedTx.toString('hex'));
        console.log(txResult);
    }
    catch (err) {
        console.error(err);
    }
};

const amountNrg = '1',
    amounNrgWei = web3.utils.toWei(amountNrg, 'nrg'),
    privateKeyFrom = '0x...', // use a valid NRG "from" privateKey
    addressFrom = '0x...', // use a valid NRG "from" address that belongs to the "from" privateKey above
    addressTo = '0x...'; // use a valid NRG "to" address

sendTx(privateKeyFrom, addressFrom, addressTo, amounNrgWei);

API

web3.nrg

Same API as web3.eth, see Web3.js API

web3.energi

  • web3.energi.blacklistInfo() returns the blacklist
  • web3.energi.budgetInfo() returns a list of proposals and the available balance
  • web3.energi.compensationInfo() returns a list of compensations and available balance
  • web3.energi.searchGen2Coins(gen2CoinList {Array}, showEmpty {boolean}) searches for Gen2 coin info
  • web3.energi.searchGen3DestinationByGen2Address(gen2Address {String}) searches for the Gen3 destination address for a given Gen2 address
  • web3.energi.searchRawGen2Coins(gen2RawOwnerAddressList {Array}, showEmpty {Boolean}) searches for Gen2 coin info
  • web3.energi.upgradeInfo() returns the upgrade info

web3.masternode

  • web3.masternode.collateralBalance(address {String}) finds the amount collateralized NRG of the specified address, also returns the last block on which the NRG coins were collateralized
  • web3.masternode.listMasternodes() returns a list with all announced masternodes
  • web3.masternode.masternodeInfo(masternodeOrOwnerAddress {String}) finds detailed information about a masternode
  • web3.masternode.stats() retrieves masternode statistics: active, activeCollateral {BN}, maxOfAllTimes {BN}, total, totalCollateral {BN}

Unitmaps

web3.utils.fromWei

  • web3.utils.fromWei(value, 'femtonrg')
  • web3.utils.fromWei(value, 'piconrg')
  • web3.utils.fromWei(value, 'nanonrg')
  • web3.utils.fromWei(value, 'micronrg')
  • web3.utils.fromWei(value, 'millinrg')
  • web3.utils.fromWei(value, 'nrg')
  • web3.utils.fromWei(value, 'knrg')
  • web3.utils.fromWei(value, 'mnrg')
  • web3.utils.fromWei(value, 'gnrg')
  • web3.utils.fromWei(value, 'tnrg')

web3.utils.toWei

  • web3.utils.toWei(value, 'nonrg')
  • web3.utils.toWei(value, 'femtonrg')
  • web3.utils.toWei(value, 'piconrg')
  • web3.utils.toWei(value, 'nanonrg')
  • web3.utils.toWei(value, 'micronrg')
  • web3.utils.toWei(value, 'millinrg')
  • web3.utils.toWei(value, 'nrg')
  • web3.utils.toWei(value, 'knrg')
  • web3.utils.toWei(value, 'mnrg')
  • web3.utils.toWei(value, 'gnrg')
  • web3.utils.toWei(value, 'tnrg')

LICENCE

All code is licensed under the New BSD License.

© 2020 Energi Cryptocurrency. All rights reserved.