2.2.1 • Published 4 years ago

@polymathnetwork/local-blockchain v2.2.1

Weekly downloads
30
License
ISC
Repository
github
Last release
4 years ago

local-blockchain

Creates a ganache instance with pre-deployed contracts for multi-version development and testing

Installation: npm install -g local-blockchain

Usage: local-blockchain [options]

Options:
  -V, --version                      output the version number
  -s, --seed <path>                  path to the seeding .json file
  -c, --contracts-version <version>  polymath protocol version to launch (3.0.0, 3.1.0)
  -b, --big                          use big seed data (overrides -s option)
  -r, --registry-addresses           output the Polymath Registry address for each version
  -h, --help                         output usage information

Updating the local blockchain

When there are changes to the smart contracts, the local blockchain state should be re-generated. For this, we have the deploy.sh script.

Running ./deploy.sh will create three local blockchains, for versions 3.0.0 and 3.1.0. These blockchain states are stored in blockchain-state/3.0.0 and blockchain-state/3.1.0 respectively. The corresponding artifacts are stored in artifacts/<version_number>.

Local testing

To test locally, simply run npm install -g from the project root and then you can use the local-blockchain command from the terminal. After any modifications, npm uninstall -g from the root and npm install -g again.

Options

Contracts version (-c, --contracts-version)

By default the 3.1.0 local blockchain will be loaded, but you can specify a version (3.1.0 or 3.0.0) via the -c, --contract-version option.

Examples: local-blockchain -c 3.1.0 local-blockchain --contract-version 3.0.0

Polymath registry addresses (-r, --registry-addresses)

Outputs the addresses for the deployed Polymath Registry contracts in each version. Overrides all other options

Examples: local-blockchain -r local-blockchain --registry-addresses

Big seed data (-b, --big)

Changes the default seed data to mint tokens to hundreds of wallets in order to test batch transactions. This can be done using the -b, --big option when launching the script.

Examples: local-blockchain -b local-blockchain --big

Seed JSON (-s, --seed)

You can provide a custom JSON file to seed data into the local blockchain via the -s, --seed option

Examples: local-blockchain -s ~/myCustomSeedData.json local-blockchain --seed ~/myCustomSeedData.json

The JSON file consists of a list of accounts. Each account possesses the following:

  • walletId: Number between 1 and 499, maps to addresses read from wallets.json
  • polyBalance: Amount of POLY the account has
  • daiBalance: Amount of DAI the account has
  • tokens: Array of Security Tokens owned by that account (optional)

Each Security Token in the tokens array possesses the following:

  • symbol: Token Symbol
  • name: Token Name
  • divisible: Whether the token is divisible or not
  • minted: Array of shareholders to mint to (optional)
  • stoData: Array of STO configurations (optional)

Each shareholder in the minted array possesses the following:

  • shareholderId: Shareholder wallet id
  • amount: Amount of tokens to mint to that shareholder

Each STO configuration in the stoData array possesses the following:

  • type: CappedSTO or USDTieredSTO
  • startTimeOffset: Amount of seconds from now until the start of the offering
  • endTimeOffset: Amount of seconds from now until the end of the offering
  • walletId: Id of the wallet to which the funds will be transferred
  • fundRaiseTypes: Array of currencies, ETH and POLY for both STO types, DAI for the USDTieredSTO only
  • cap: Amount of tokens to be sold, only for Capped STO
  • rate: Amount of tokens per unit of currency, only for Capped STO
  • tiers: Array of tier information, only for USDTieredSTO
  • nonAccreditedLimitUSD: Investment limit for non accredited investors, only for USDTIeredSTO
  • minimumInvestmentUSD: Minimum investment amount for all investors, only for USDTieredSTO
  • reserveWalletId: Wallet id for unsold tokens at the end of the offering, only for USDTieredSTO

Each tier in the tiers array possesses the following:

  • amount: Amount of tokens to be sold at that tier
  • price: Price of the token at that tier

Example

This is the data that gets loaded by default into the local blockchain

{
  "accounts": [
    {
      "walletId": 1,
      "polyBalance": 1000000,
      "daiBalance": 1000000,
      "tokens": [
        {
          "symbol": "A0T0",
          "name": "Token 1",
          "divisible": false,
          "minted": [
            {
              "shareholderId": 3,
              "amount": 1000000
            },
            {
              "shareholderId": 4,
              "amount": 2000000
            }
          ],
          "stoData": [
            {
              "type": "CappedSTO",
              "cap": 1000000,
              "rate": 10,
              "fundRaiseTypes": ["ETH"],
              "startTimeOffset": 300,
              "endTimeOffset": 86400,
              "walletId": 1
            },
            {
              "type": "USDTieredSTO",
              "tiers": [
                {
                  "amount": 1000000,
                  "price": 10
                },
                {
                  "amount": 1500000,
                  "price": 15
                }
              ],
              "nonAccreditedLimitUSD": 10000,
              "minimumInvestmentUSD": 1000,
              "walletId": 1,
              "reserveWalletId": 1,
              "fundRaiseTypes": ["ETH", "POLY"],
              "startTimeOffset": 300,
              "endTimeOffset": 86400
            }
          ]
        },
        {
          "symbol": "A0T1",
          "name": "Token 2",
          "divisible": true,
          "minted": [
            {
              "shareholderId": 5,
              "amount": 1000000
            },
            {
              "shareholderId": 6,
              "amount": 2000000
            }
          ],
          "stoData": [
            {
              "type": "USDTieredSTO",
              "tiers": [
                {
                  "amount": 1000000,
                  "price": 10
                },
                {
                  "amount": 1500000,
                  "price": 15
                }
              ],
              "fundRaiseTypes": ["ETH", "POLY", "DAI"],
              "nonAccreditedLimitUSD": 10000,
              "minimumInvestmentUSD": 1000,
              "walletId": 1,
              "reserveWalletId": 1,
              "startTimeOffset": 300,
              "endTimeOffset": 86400
            }
          ]
        }
      ]
    },
    {
      "walletId": 2,
      "polyBalance": 1000000,
      "daiBalance": 1000000,
      "tokens": [
        {
          "symbol": "A1T0",
          "name": "Token 3",
          "divisible": false,
          "minted": [
            {
              "shareholderId": 7,
              "amount": 1000000
            }
          ]
        },
        {
          "symbol": "A1T1",
          "name": "Token 4",
          "divisible": true
        }
      ]
    },
    {
      "walletId": 3,
      "polyBalance": 1000000,
      "daiBalance": 1000000
    },
    {
      "walletId": 4,
      "polyBalance": 1000000,
      "daiBalance": 1000000
    },
    {
      "walletId": 5,
      "polyBalance": 1000000,
      "daiBalance": 1000000
    },
    {
      "walletId": 6,
      "polyBalance": 1000000,
      "daiBalance": 1000000
    },
    {
      "walletId": 7,
      "polyBalance": 1000000,
      "daiBalance": 1000000
    },
    { "walletId": 8, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 9, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 10, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 11, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 12, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 13, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 14, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 15, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 16, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 17, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 18, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 19, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 20, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 21, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 22, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 23, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 24, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 25, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 26, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 27, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 28, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 29, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 30, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 31, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 32, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 33, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 34, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 35, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 36, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 37, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 38, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 39, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 40, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 41, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 42, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 43, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 44, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 45, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 46, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 47, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 48, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 49, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 50, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 51, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 52, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 53, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 54, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 55, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 56, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 57, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 58, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 59, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 60, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 61, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 62, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 63, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 64, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 65, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 66, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 67, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 68, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 69, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 70, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 71, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 72, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 73, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 74, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 75, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 76, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 77, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 78, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 79, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 80, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 81, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 82, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 83, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 84, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 85, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 86, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 87, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 88, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 89, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 90, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 91, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 92, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 93, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 94, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 95, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 96, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 97, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 98, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 99, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 100, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 101, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 102, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 103, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 104, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 105, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 106, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 107, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 108, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 109, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 110, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 111, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 112, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 113, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 114, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 115, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 116, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 117, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 118, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 119, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 120, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 121, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 122, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 123, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 124, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 125, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 126, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 127, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 128, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 129, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 130, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 131, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 132, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 133, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 134, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 135, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 136, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 137, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 138, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 139, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 140, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 141, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 142, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 143, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 144, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 145, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 146, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 147, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 148, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 149, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 150, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 151, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 152, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 153, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 154, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 155, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 156, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 157, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 158, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 159, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 160, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 161, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 162, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 163, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 164, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 165, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 166, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 167, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 168, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 169, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 170, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 171, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 172, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 173, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 174, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 175, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 176, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 177, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 178, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 179, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 180, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 181, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 182, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 183, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 184, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 185, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 186, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 187, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 188, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 189, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 190, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 191, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 192, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 193, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 194, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 195, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 196, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 197, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 198, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 199, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 200, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 201, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 202, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 203, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 204, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 205, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 206, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 207, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 208, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 209, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 210, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 211, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 212, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 213, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 214, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 215, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 216, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 217, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 218, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 219, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 220, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 221, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 222, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 223, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 224, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 225, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 226, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 227, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 228, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 229, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 230, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 231, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 232, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 233, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 234, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 235, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 236, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 237, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 238, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 239, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 240, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 241, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 242, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 243, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 244, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 245, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 246, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 247, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 248, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 249, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 250, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 251, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 252, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 253, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 254, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 255, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 256, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 257, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 258, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 259, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 260, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 261, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 262, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 263, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 264, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 265, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 266, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 267, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 268, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 269, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 270, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 271, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 272, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 273, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 274, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 275, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 276, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 277, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 278, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 279, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 280, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 281, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 282, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 283, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 284, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 285, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 286, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 287, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 288, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 289, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 290, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 291, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 292, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 293, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 294, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 295, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 296, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 297, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 298, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 299, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 300, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 301, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 302, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 303, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 304, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 305, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 306, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 307, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 308, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 309, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 310, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 311, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 312, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 313, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 314, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 315, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 316, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 317, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 318, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 319, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 320, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 321, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 322, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 323, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 324, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 325, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 326, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 327, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 328, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 329, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 330, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 331, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 332, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 333, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 334, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 335, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 336, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 337, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 338, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 339, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 340, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 341, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 342, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 343, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 344, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 345, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 346, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 347, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 348, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 349, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 350, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 351, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 352, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 353, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 354, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 355, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 356, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 357, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 358, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 359, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 360, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 361, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 362, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 363, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 364, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 365, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 366, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 367, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 368, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 369, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 370, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 371, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 372, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 373, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 374, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 375, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 376, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 377, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 378, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 379, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 380, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 381, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 382, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 383, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 384, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 385, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 386, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 387, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 388, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 389, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 390, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 391, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 392, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 393, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 394, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 395, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 396, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 397, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 398, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 399, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 400, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 401, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 402, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 403, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 404, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 405, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 406, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 407, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 408, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 409, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 410, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 411, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 412, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 413, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 414, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 415, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 416, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 417, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 418, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 419, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 420, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 421, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 422, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 423, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 424, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 425, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 426, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 427, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 428, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 429, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 430, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 431, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 432, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 433, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 434, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 435, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 436, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 437, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 438, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 439, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 440, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 441, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 442, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 443, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 444, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 445, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 446, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 447, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 448, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 449, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 450, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 451, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 452, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 453, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 454, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 455, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 456, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 457, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 458, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 459, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 460, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 461, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 462, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 463, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 464, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 465, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 466, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 467, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 468, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 469, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 470, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 471, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 472, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 473, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 474, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 475, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 476, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 477, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 478, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 479, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 480, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 481, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 482, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 483, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 484, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 485, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 486, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 487, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 488, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 489, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 490, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 491, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 492, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 493, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 494, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 495, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 496, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 497, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 498, "polyBalance": 0, "daiBalance": 0 },
    { "walletId": 499, "polyBalance": 0, "daiBalance": 0 }
  ]
}
2.2.1

4 years ago

2.2.0

4 years ago

2.1.1

4 years ago

2.1.0

5 years ago

2.0.2

5 years ago

2.0.1

5 years ago

2.0.0

5 years ago

1.2.3

5 years ago

1.2.2

5 years ago

1.1.1

5 years ago