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

volentix-ledger

v0.2.71

Published

A javascript client library for Volentix Ledger

Downloads

26

Readme

vlabs-ledger-js

Waffle.io - Columns and their card count

standard-readme compliant MIT PRs Welcome Open Source Love

A javascript client library for Volentix Ledger

This client allows full access for Javascript applications to the contracts provided by the Volentix ledger. In summary, those are:

  • Transfer funds from one account / wallet to another
  • Get the balance of an account / wallet
  • Get a list of transactions from / to any account / wallet

The ledger is a record of the amount of funds a user holds. Before tokens are created, the record consists of entries in a database. After tokens are created, the record is a quantity of actual tokens. This javascript API conceals the differences between the two, providing a single interface for applications like Verto to obtain balance information.

Throughout this document, usage of the word "tokens" can mean either actual tokens, or a record of tokens which are owed after they are created. A user of this package sees no difference between either of these.

Some terminology:

  • Account: Accounts are defined by EOS and identified by a 1-12 character name.
  • Distribution account: The account which holds tokens to be distributed. For VTX, this is vtxdistrib
  • Trust account A specific account which holds funds in trust for a user. By holding funds, users can earn VTX without requiring them to open an EOS account (at a cost of ~$10 each). For VTX, this is vtxtrust.
  • Wallet: Users create EOS wallets (for example Verto) to uniquely identify the tokens that they are owed

Table of Contents

Install

First add the ledger client to your application:

npm add volentix-ledger

You must have access to an EOS instance with the Volentix Ledger contracts deployed. Please see that project for deployment of the contracts.

Usage

import Ledger from "volentix-ledger";

// Point to a specific instance of the Ledger
const ledger = new Ledger({
  httpEndpoint: "https://url-of-eos-node", // URL of EOS node
  chainId: "cf057bbfb72640471ff8a%90ba539c22df9f92470936cddc1ade0e2f2e7dc4f", // ID of a chain containing Volentix ledger
  keyProvider: "EOS8TJpbWeQEoaMZMZzmo4SqC7DUucEUHRQJs1x7cXLcTqRhiJ7VF" // EOS account with the ledger contracts
});

// Retrieve the balance
const balance = await ledger.retrieveBalance({
  account: "vtxtrust", // the ID of an account
  wallet: "EOS5vBqi8YSzFCeTv4weRTwBzVkGCY5PN5Hm1Gp3133m8g9MtHTbW" // the public key of an EOS wallet
});

console.log(`You have ${balance.amount} ${balance.currency}`);

Also available in the test directory is a mock-ledger.js which can be used for basic testing without needing to connect to a remote instance.

API

constructor

The constructor parameters are the same as those described in eosjs configuration.

You should pass at least these fields:

  • httpEndpoint: http or https location of a nodeosd server providing a chain API.
  • chainId: Unique ID for the blockchain you're connecting to.
  • keyProvider: The EOS account which contains the Ledger contracts.

retrieveBalance

Retrieve the balance of an account or wallet.

Example

To retrieve a user's balance held in the trust account:

const balance = await ledger.retrieveBalance({
  account: "vtxtrust", // the ID of an account
  wallet: "EOS5vBqi8YSzFCeTv4weRTwBzVkGCY5PN5Hm1Gp3133m8g9MtHTbW" // the public key of an EOS wallet
});

console.log(`You have ${balance.amount} ${balance.currency}`);

or to retrieve the balance of the entire distribution account:

const balance = await ledger.retrieveBalance({
  account: "vtxdistrib" // the ID of an account
});

console.log(`You have ${balance.amount} ${balance.currency}`);

retrieveTransactions

Retrieve all transactions associated with this account / wallet. Because we only support funds transfers at the moment, the list will only include transfers, but in the future there may be other types of transactions

  • transactions: A list of the transactions found
    • id: The ID of a transaction
    • blockNum: The block number where the transaction was recorded
    • from: Where funds were transferred from
      • account: The 1-12 character name of the EOS account to transfer funds FROM
      • wallet (optional): The owner public key of the user's wallet
    • to: Where funds were transferred to
      • account: The 1-12 character name of the EOS account to transfer funds TO
      • wallet (optional): The owner public key of the user's wallet
    • amount: The amount of funds transferred
    • currency: The currency used in this account / wallet
    • submittedAt: The date and time that the transaction was submitted, in ISO 8601 format
    • comment: Text supplied when transaction was performed

Example

To retrieve all the transactions associated with a user's wallet

const transactions = await ledger.retrieveTransactions({
  account: "vtxtrust", // the ID of an account
  wallet: "EOS5vBqi8YSzFCeTv4weRTwBzVkGCY5PN5Hm1Gp3133m8g9MtHTbW" // the public key of an EOS wallet
});

transactions.transactions.forEach(tx => {
  console.log(
    `[ID: ${tx.id}] Found ${tx.type} from ${tx.from.account} to ${
      tx.to.account
    }`
  );
  if (tx.from.wallet) console.log(`From wallet ${tx.from.wallet}`);
  if (tx.to.wallet) console.log(`To wallet ${tx.to.wallet}`);
});

recordTransfer

Add a transfer from one account / wallet to another.

Data to pass in:

  • from: The location to transfer funds from
    • account: The 1-12 character name of the EOS account to transfer funds FROM
    • wallet (optional): The owner public key of the user's wallet
  • to: The location to transfer funds from
    • account: The 1-12 character name of the EOS account to transfer funds TO
    • wallet (optional): The owner public key of the user's wallet
  • amount: The amount of funds to transfer
  • comment: (optional) Text for details about the transfer

Returns all of the given data, plus:

  • id: The unique ID of the transfer
  • currency: The currency used in this account / wallet
  • submittedAt: The date and time that the transaction was submitted, in ISO 8601 format

Example

For this example, record a transfer from the distribution account to a user's wallet held in the trust account:

const transfer = await recordTransfer({
  from: {
    account: "vtxdistrib"
  },
  to: {
    account: "vtxtrust",
    wallet: "EOS5vBqi8YSzFCeTv4weRTwBzVkGCY5PN5Hm1Gp3133m8g9MtHTb"
  },
  amount: 123.45
});

console.log(
  `Transfer of ${transfer.balance} ${transfer.currency} completed; ID: ${
    transfer.id
  }`
);

Development

Testing

Config

Create a .env file in the root directory and set these variables:

# The chain id of your running instance
CHAIN_ID=

# The EOS account which contains the Ledger contracts.
KEY_PROVIDER=

# http or https location of a nodeosd server providing a chain API.
HTTP_ENDPOINT=

http or https location of a nodeosd server providing the wallet API.
WALLET_ENDPOINT=

The test framework will read these values and pass them to the ledger client

NPM

Install the dependencies.

npm install

Run The Tests

You can run the tests with the following command.

npm run test

Maintainers

Contribute

See the contribute file!

PRs accepted.

Small note: If editing the README, please conform to the standard-readme specification.

License

MIT © 2018 Volentix Labs Inc.