etoken-list
TypeScript icon, indicating that this package has built-in type declarations

1.0.4 • Public • Published

etoken-list

List all token holder addresses and balances at any specified blockchain height. This package makes queries to an SLPDB via the slpserve http gateway.

NOTE: All list results provided by this package should be double-checked between multiple SLPDB nodes because any instance of SLPDB may be out-of-sync, have an outdated version, or have a corrupted database. Be sure to know the SLPDB node instances you connecting to can be trusted and are properly maintained.

For a token this library can:

Applications can use this information to:

  • Distribute eCash rewards to token holders, pro rata
  • Airdrop existing token holders with new etokens, pro rata
  • Build a token staking rewards systems using coin age
  • Public key and user coordination in decentralized applications

By default this package connects to a public SLPDB node, but this can be overridden using Config.SetUrl("__").

Demo App

This demo app allows the user to print eToken lists to the console. User can then copy/paste list result into Electrum ABC to distribute XEC rewards.

Run the demo CLI application

$ git clone https://github.com/bytesofman/etoken-list.git
$ cd etoken-list
$ npm i
$ npm start

Install

node.js

npm i etoken-list

browser

<script src='https://unpkg.com/etoken-list'></script>

Example Usage

List of token holders

Get a list of token holder addresses and balances for a token using custom SLPDB instance:

let etokenlist = require("etoken-list");
etokenlist.Config.SetUrl("https://tokendb.kingbch.com");
const blockCutoff = 695000;
let list;

(async () => {
    list = await etokenlist.List.GetAddressListFor(
        "4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3",
        blockCutoff,
        true
    );
    console.log(list);
})();
// Result

/*
Map(14) {
  'etoken:qqwp8hdcm4pzh0szms4ws7vtg4y6v73ur5k2cwragz' => '100',
  'etoken:qzzm4vmgpqeumxeuccy4xdz05aq2yg6mh5aj2tulx5' => '100',
  'etoken:qr0w2r6hvd3rwlwj7qc520qtkzgqnt90sy0grcj2wt' => '1000',
  'etoken:qzj5zu6fgg8v2we82gh76xnrk9njcreglu4mqtxxh5' => '1000',
  'etoken:qr9dfz5ngm2xtr208fdzp4zny8tcpe4vquyuuuhark' => '888',
  'etoken:qqartrrq3npyzpcqswq2hcslstzu38mq8gmmk4d5rf' => '10',
  'etoken:qr204yfphngxthvnukyrz45u7500tf60vywwgwtned' => '80',
  'etoken:qzln9cyenps0gznst42w3r3788m0fcld55z2hc2v56' => '2',
  'etoken:qryzwruy2qkrr4jyf7l56zsu3tc7dupvjq0e92et39' => '18',
  'etoken:qphlhe78677sz227k83hrh542qeehh8el53xmvqewn' => '7',
  'etoken:qrpl4usqmv9pwk0w53cqduzc8yvc89mswccvzwnx86' => '1',
  'etoken:qr2wg056z9fxzsqcf5t2ju7ch3v66238jvfyvesmj6' => '100',
  'etoken:qqvu0ps25e4vpu00uyla5q4t32ljtuc8uym84ylx2z' => '100',
  'etoken:qz2708636snqhsxu8wnlka78h6fdp77ar5tv2tzg4r' => '996594'
}
*/

List of coins

List the individual UTXOs, coin age, etc for a specified token ID:

let etokenlist = require("etoken-list");
etokenlist.Config.SetUrl("https://tokendb.kingbch.com");
const blockCutoff = 695000;
let list;

(async () => {
    list = await etokenlist.List.GetCoinListFor(
        "4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3",
        blockCutoff
    );
    console.log(list);
})();

// Result
/*
[
  {
    txid: '5f76f67582c0968369ad2e03f3545e4c28db7f60e21b76255f5e4cfa026afdcb',
    blk: 680063,
    slpAmount: '100',
    address: 'etoken:qqwp8hdcm4pzh0szms4ws7vtg4y6v73ur5k2cwragz',
    vout: 1,
    coinAge: 14937
  },
  {
    txid: '9c3d3fe2528809c8a0fd2eb8b1030e5d8e06bafeb44d272d049081b3ba2cbbb6',
    blk: 680064,
    slpAmount: '100',
    address: 'etoken:qzzm4vmgpqeumxeuccy4xdz05aq2yg6mh5aj2tulx5',
    vout: 1,
    coinAge: 14936
  },
  {
    txid: '62854434f37f77ecc4efa168a9cb568b538c84ffdb11ad809bedae840f141b99',
    blk: 680065,
    slpAmount: '1000',
    address: 'etoken:qr0w2r6hvd3rwlwj7qc520qtkzgqnt90sy0grcj2wt',
    vout: 1,
    coinAge: 14935
  },
  {
    txid: '800bf66b46b65e0f5137a9049a0e5428a56626c030f38fc040c172857e3a9252',
    blk: 680065,
    slpAmount: '1000',
    address: 'etoken:qzj5zu6fgg8v2we82gh76xnrk9njcreglu4mqtxxh5',
    vout: 1,
    coinAge: 14935
  },
  {
    txid: '6632079a5f1a565bd173fdc9c9baac0c5646fae467e2f7e62efd2d0e849d1a65',
    blk: 680086,
    slpAmount: '888',
    address: 'etoken:qr9dfz5ngm2xtr208fdzp4zny8tcpe4vquyuuuhark',
    vout: 1,
    coinAge: 14914
  },
  {
    txid: '05f40504b5d4ca11c714043010fe9f2f8670cc94d11afd11b759a218b712c14b',
    blk: 684267,
    slpAmount: '3',
    address: 'etoken:qqartrrq3npyzpcqswq2hcslstzu38mq8gmmk4d5rf',
    vout: 2,
    coinAge: 10733
  },
  {
    txid: '2eeff69fd2338e50e1934e97dae0c841c7b4ef603e800cd06bc47da46e50a3ae',
    blk: 684293,
    slpAmount: '1',
    address: 'etoken:qqartrrq3npyzpcqswq2hcslstzu38mq8gmmk4d5rf',
    vout: 1,
    coinAge: 10707
  },
  {
    txid: '3f324d982a4cdb650631fda0d9bf8905c593e9483eed7df5d00435afa10bcf59',
    blk: 684293,
    slpAmount: '1',
    address: 'etoken:qqartrrq3npyzpcqswq2hcslstzu38mq8gmmk4d5rf',
    vout: 1,
    coinAge: 10707
  },
  ...
  ,
]
*/

List all holders of an NFT in an NFT1 Group

List the NFT holders for a specific NFT1 Group:

let etokenlist = require("etoken-list");
etokenlist.Config.SetUrl("https://tokendb.kingbch.com");
let list;

(async () => {
    list = await etoken.Nft1List.GetConfirmedNftTokenHolders(
        "<eTokenID>"
    );
    console.log(list);
})();

List linked tokens

List all tokens with a Genesis pointing to a specific Document Hash:

let etokenlist = require("etoken-list");
etokenlist.Config.SetUrl("https://tokendb.kingbch.com");
let list;

(async () => {
    list = await etoken.List.SearchForTokenIdInDocHash(
        "<DocHash>",
    );
    console.log(list);
})();

List all NFTs in an NFT1 Group (not only the current holders)

List all NFTs created for this specific NFT1 Group:

let etokenlist = require("etoken-list");
etokenlist.Config.SetUrl("https://tokendb.kingbch.com");
let list;

(async () => {
    list = await etokenlist.Nft1List.SearchForNftsInGroup(
        "<GroupID>"
    );
    console.log(list);
})();

Change Log

1.0.1

  • Readme and repo URL fixes

1.0.0 Reset

  • Converted from SLP to eCash

1.1.0

  • Added nft method "GetConfirmedNftTokenHolders"
  • Slightly modified options for "SearchForNftsInGroup"

1.0.0

  • (breaking change) Complete refactoring of all methods
  • (breaking change) Added static Config class for setting SLPDB URL
  • Complete unit test coverage

0.1.0

  • Removed support for unconfirmed transactions
  • Don't publish .ts files to npm

0.0.8

  • Allow mempool slp list queries, use block height = -1

0.0.7

  • Include Genesis balance in query.ts
  • Removed BigNumber.js dependency from demo.ts in favor of Big.js
  • NOTE: All number rounding in demo uses default of ROUND_HALF_UP

0.0.6

  • Updated gRPC deps and utilized the new getMedianTime() method

0.0.5

  • Switched to big.js from bignumber.js in deps (demo.ts still uses BigNumber.js)
  • Added MTP block selection option in demo.ts
  • Other minor updates

Package Sidebar

Install

npm i etoken-list

Weekly Downloads

168

Version

1.0.4

License

ISC

Unpacked Size

188 kB

Total Files

16

Last publish

Collaborators

  • bytesofman