Giter Site home page Giter Site logo

big-dipper-celo-client's Introduction

Forbole - An incentivised social ecosystem based on blockchain

When we need help, we will ask our trusted friends. If our friends cannot help, they will ask their trusted friends. This is where word-of-mouth referrals happen. By making referrals, we are not just helping the people we trust to seize opportunities, but also the people who need help to get the right solutions. The keyword of referrals is trust.

No matter it is about business or career, we rely heavily on our personal network. That is why we say "It's not what you know but who you know". For success, one's knowledge and skills are less useful and less important than one's network of personal contacts.

We are actively developing this incentivised social ecosystem. You can recommend and referral your trusted network over this platform and you will get rewards when you engage more. Please visit our website (https://www.forbole.com) for more details. If you are interested, you can start buying our early membership now.

big-dipper-celo-client's People

Contributors

dependabot[bot] avatar kwunyeung avatar monikacat avatar

Watchers

 avatar  avatar  avatar

big-dipper-celo-client's Issues

Update block details so that it also show which validators have signed

The block schema has been changed to support showing validator signed status

This is an example

query block {
  block(number: 100){
    hash
    number
    signers{
      exist
      signer
      validator{
        name
        score
        validatorGroup{
          name
          commission
        }
      }
    }
  }
}

And the output

{
  "data": {
    "block": {
      "hash": "0xa1880391ff4de20862e2673dac4551201d720211b41c84e918f12d34585815e0",
      "number": 100,
      "signers": [
        {
          "exist": false,
          "signer": "0x00D23a06830D50e1da5d3c51C172293BBB52f126",
          "validator": {
            "name": "🔱Masternode24",
            "score": 0.9999314403841,
            "validatorGroup": {
              "name": "Masternode24.de",
              "commission": 0.5
            }
          }
        },
        {
          "exist": true,
          "signer": "0x0223E40d1f93A6Fe5BEf63605992aDA10740E13B",
          "validator": {
            "name": "",
            "score": 0,
            "validatorGroup": {
              "name": "HashQuark",
              "commission": 0.5
            }
          }
        },
        {
          "exist": false,
          "signer": "0x02df14C7F5816aB7A27331dB5D8D3fe6E5a6f03f",
          "validator": {
            "name": "celvaly-0",
            "score": 0.9997003093231,
            "validatorGroup": {
              "name": "celvaly",
              "commission": 0.1
            }
          }
        },
        {
          "exist": true,
          "signer": "0x0A6641d4736767D1f2bCf2450200eF384391B441",
          "validator": {
            "name": "Tessellated Geometry",
            "score": 0.9993556121338,
            "validatorGroup": {
              "name": "Tessellated Geometry Alliance",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0x0b2a9bC0aFb37AB527E910732D091ec3725c0c40",
          "validator": {
            "name": "swiftstaking",
            "score": 0.9999181949608,
            "validatorGroup": {
              "name": "swiftstaking",
              "commission": 0
            }
          }
        },
        {
          "exist": true,
          "signer": "0x173c75C8F1BE201cE89cF426Fe12c9997D709626",
          "validator": {
            "name": "AGx1",
            "score": 0.9999314403841,
            "validatorGroup": {
              "name": "AG",
              "commission": 0.2
            }
          }
        },
        {
          "exist": true,
          "signer": "0x198958f0b860AB0E3937F468FE366AAc9EEbaD2e",
          "validator": {
            "name": "sparkpool-v1",
            "score": 0.9487285352794,
            "validatorGroup": {
              "name": "sparkpool-group",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0x273faE03D02B80477c574542d989C14950A3eA24",
          "validator": {
            "name": "Alive29x1",
            "score": 0.9922766736961,
            "validatorGroup": {
              "name": "chainvibes",
              "commission": 0.5
            }
          }
        },
        {
          "exist": false,
          "signer": "0x2E0a1C2048B41522a833A2FA4FA919A0e8B9b1d3",
          "validator": {
            "name": "wotrust1",
            "score": 0.9999314403841,
            "validatorGroup": {
              "name": "wotrust",
              "commission": 1
            }
          }
        },
        {
          "exist": true,
          "signer": "0x2Eb79345089cA6F703F3b3C4235315CbeAaD6D3C",
          "validator": {
            "name": "nonce",
            "score": 0.9933160527442,
            "validatorGroup": {
              "name": "nonce",
              "commission": 0.1
            }
          }
        },
        {
          "exist": true,
          "signer": "0x2a1BfF2452AcA1ca5FFABbD34b2744109d11E4f5",
          "validator": {
            "name": "huglester",
            "score": 0.9978808306474,
            "validatorGroup": {
              "name": "huglester",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0x2aD6D354e3aB2A196B64964a788534fdF7932e2B",
          "validator": {
            "name": "Cypher Core",
            "score": 0.9988678856422,
            "validatorGroup": {
              "name": "Cypher Core",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0x3ed95D6D4Ce36Ea7B349cD401e324316D956331a",
          "validator": {
            "name": "",
            "score": 0.9998637865309,
            "validatorGroup": {
              "name": "",
              "commission": 0.5
            }
          }
        },
        {
          "exist": true,
          "signer": "0x436d12F639A32509685080161Ff0365Fc15545f0",
          "validator": {
            "name": "🌴👦",
            "score": 0.7458134171671,
            "validatorGroup": {
              "name": "❄️❄️❄️ + 🌴👦 + Danil Ushakov = ✅🚀🌟",
              "commission": 0.3
            }
          }
        },
        {
          "exist": true,
          "signer": "0x43882141555003B3e71110f567373b59Ac4cb0BD",
          "validator": {
            "name": "",
            "score": 0.9958716235495,
            "validatorGroup": {
              "name": "",
              "commission": 0.5
            }
          }
        },
        {
          "exist": true,
          "signer": "0x464CCE7999B3D90a8F1fFaf94A71FBDeA1E65435",
          "validator": {
            "name": "BitCat",
            "score": 0.8332281830026,
            "validatorGroup": {
              "name": "BitCat",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0x482AD8050622483a16aeea36272A4D3eA000C018",
          "validator": {
            "name": "Chorus One Validator1",
            "score": 0.982532028619,
            "validatorGroup": {
              "name": "Chorus One",
              "commission": 0.075
            }
          }
        },
        {
          "exist": true,
          "signer": "0x4A03C4c2E101AC4612d89b79f61c9C5BDd51929D",
          "validator": {
            "name": "chainvibes",
            "score": 0.9999031493719,
            "validatorGroup": {
              "name": "chainvibes",
              "commission": 0.5
            }
          }
        },
        {
          "exist": true,
          "signer": "0x4CB90Ebba92141eD3021F5dC4e6C8bb642095846",
          "validator": {
            "name": "dynamic",
            "score": 0.9980182277173,
            "validatorGroup": {
              "name": "dynamic",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0x503ae8e26403BD8D41C21f73E75A3C118D2c0743",
          "validator": {
            "name": "Bi23",
            "score": 0.9903230029306,
            "validatorGroup": {
              "name": "Bi23 Labs",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0x591cB5E536aa19Fe5f26593739FE8ce717142e59",
          "validator": {
            "name": "Pretoria Validator A",
            "score": 0.9999314403841,
            "validatorGroup": {
              "name": "PretoriaResearchLab.io",
              "commission": 0.1
            }
          }
        },
        {
          "exist": true,
          "signer": "0x59F7b67e6BeAE0223DDC91Eec010b670c553E8e0",
          "validator": {
            "name": "",
            "score": 0.9993292928542,
            "validatorGroup": {
              "name": "Chainflow",
              "commission": 0.7
            }
          }
        },
        {
          "exist": true,
          "signer": "0x5b55452Bdba5971D606F47647bd383f3C3fa7285",
          "validator": {
            "name": "Nodeasy",
            "score": 0.7700976544609,
            "validatorGroup": {
              "name": "www.nodeasy.com",
              "commission": 0.5
            }
          }
        },
        {
          "exist": false,
          "signer": "0x613F809e82F7BcbbFB86f939684ac080454400fA",
          "validator": {
            "name": "TDlabs",
            "score": 0.9468775995301,
            "validatorGroup": {
              "name": "TDlabs | Staked.us",
              "commission": 0.1
            }
          }
        },
        {
          "exist": true,
          "signer": "0x63b4b616c5345e3DcC9e21dB69297e2129447f4e",
          "validator": {
            "name": "syncnode",
            "score": 0.9990808830487,
            "validatorGroup": {
              "name": "syncnode_group",
              "commission": 0
            }
          }
        },
        {
          "exist": true,
          "signer": "0x69901924E6c045A03CC163c6b8AE8AF80fA1ee80",
          "validator": {
            "name": "YYYYYYYYYYYYY1",
            "score": 0.9999314403841,
            "validatorGroup": {
              "name": "YYYYYYYYYYYYY",
              "commission": 0.5
            }
          }
        },
        {
          "exist": true,
          "signer": "0x74288dbEFa3a55986c039953b67139A466474fC4",
          "validator": {
            "name": "Projecttent 1",
            "score": 0.9567276635953,
            "validatorGroup": {
              "name": "Projecttent",
              "commission": 0.1
            }
          }
        },
        {
          "exist": true,
          "signer": "0x82f0E7879314516952f7961b15C63FC6B2734DFB",
          "validator": {
            "name": "kytzu",
            "score": 0.9990351784297,
            "validatorGroup": {
              "name": "Kytzu Group",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0x88cB5A11a6e451ede2376457E718EBBcD0799c14",
          "validator": {
            "name": "censusworks.0",
            "score": 0.9999314403841,
            "validatorGroup": {
              "name": "Censusworks",
              "commission": 1
            }
          }
        },
        {
          "exist": false,
          "signer": "0x953f2501B18a3FdCF959aA901e74D5308e4D522f",
          "validator": {
            "name": "SlavaMo",
            "score": 0.9999314403841,
            "validatorGroup": {
              "name": "SlavaMo",
              "commission": 0.999
            }
          }
        },
        {
          "exist": false,
          "signer": "0xA3ba418DBd6e2F2a0eDeBAe256F988FCC92b8E86",
          "validator": {
            "name": "Staking Fund #1",
            "score": 0.9988264896841,
            "validatorGroup": {
              "name": "Staking Fund",
              "commission": 0
            }
          }
        },
        {
          "exist": false,
          "signer": "0xA90640bF05711e5674daCF5A4368Aa6348031e01",
          "validator": {
            "name": "stakevalley01",
            "score": 0.9999314403841,
            "validatorGroup": {
              "name": "stakevalley",
              "commission": 0.99
            }
          }
        },
        {
          "exist": false,
          "signer": "0xAf35c24f9644e3743FFCba9C17980492C31D75a4",
          "validator": {
            "name": "gunray",
            "score": 0.9999314403841,
            "validatorGroup": {
              "name": "gunray",
              "commission": 0.1
            }
          }
        },
        {
          "exist": true,
          "signer": "0xBc6963fc0e2f5547bA949ed39e80b8388321104f",
          "validator": {
            "name": "",
            "score": 0.9973607777263,
            "validatorGroup": {
              "name": "",
              "commission": 0.5
            }
          }
        },
        {
          "exist": true,
          "signer": "0xC46Dc0741FF61af883E284daEA062ae7382E7091",
          "validator": {
            "name": "Easy 2 Stake",
            "score": 0.9965578410595,
            "validatorGroup": {
              "name": "Easy2Stake Group",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0xCBc1013EE337FB25a600daF2f73Bf270322F5B1e",
          "validator": {
            "name": "moonli.me",
            "score": 0.9880415863876,
            "validatorGroup": {
              "name": "moonli.me",
              "commission": 0
            }
          }
        },
        {
          "exist": false,
          "signer": "0xD375E40327b48738234f385B98056cEFc6CaD73a",
          "validator": {
            "name": "The Passive Trust - V1",
            "score": 0.9995782009897,
            "validatorGroup": {
              "name": "The Passive Trust",
              "commission": 0.4
            }
          }
        },
        {
          "exist": false,
          "signer": "0xD6d1811894bf2E0FF2b372eCfe084Be08EbF7De2",
          "validator": {
            "name": "nga_validator",
            "score": 0.9999254793007,
            "validatorGroup": {
              "name": "nga_group",
              "commission": 0.5
            }
          }
        },
        {
          "exist": false,
          "signer": "0xE87F2D4B87540D51e22a597bF747CEef8F32b29F",
          "validator": {
            "name": "blockdaemon-0",
            "score": 0.9641284528204,
            "validatorGroup": {
              "name": "Blockdaemon",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0xF027A6b28bDcA9B9F95e7158a9D3a46BA7f4589E",
          "validator": {
            "name": "NewroadNetwork",
            "score": 0.9996819240457,
            "validatorGroup": {
              "name": "The Celo Group",
              "commission": 0.08
            }
          }
        },
        {
          "exist": false,
          "signer": "0xF139e74aDEC329E715AB49a68c5548A00e40CBc2",
          "validator": {
            "name": "warfollowsme | Celomap.io",
            "score": 0.8137812363904,
            "validatorGroup": {
              "name": "Ryabina | Celomap.io",
              "commission": 0.1
            }
          }
        },
        {
          "exist": true,
          "signer": "0xFFbCF262C1d5c4392ef469BA79f2CD195d2AffDa",
          "validator": {
            "name": "Simply Staking",
            "score": 0.9993350055736,
            "validatorGroup": {
              "name": "Simply Staking",
              "commission": 0
            }
          }
        },
        {
          "exist": false,
          "signer": "0xaAf29578F2DbC2Aac1b0D906a326512A8D706335",
          "validator": {
            "name": "StakesStone",
            "score": 0.9916950813931,
            "validatorGroup": {
              "name": "StakesStoneGroup",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0xaeD733bb20921B682EB35bb89BD398F604CcD5BC",
          "validator": {
            "name": "Perfect_Stake.1",
            "score": 0.7830513380413,
            "validatorGroup": {
              "name": "Perfect Stake",
              "commission": 0.1
            }
          }
        },
        {
          "exist": false,
          "signer": "0xc328f76b1Ed2EeAcd4460b11435f4BD48BF2361d",
          "validator": {
            "name": "HappyCelo-val-1",
            "score": 0.9982182504268,
            "validatorGroup": {
              "name": "HappyCelo",
              "commission": 0
            }
          }
        },
        {
          "exist": true,
          "signer": "0xc6f916aD6E360651Bb95f8e67C1C28805745d084",
          "validator": {
            "name": "Validator.Capital1",
            "score": 0.9999210900925,
            "validatorGroup": {
              "name": "Validator.Capital",
              "commission": 0.45
            }
          }
        },
        {
          "exist": false,
          "signer": "0xcF514E382efF83752fBafeC2D836A3efef7fD039",
          "validator": {
            "name": "G&S 1 ",
            "score": 0.9999314403841,
            "validatorGroup": {
              "name": "Goods & Services",
              "commission": 0.1
            }
          }
        },
        {
          "exist": true,
          "signer": "0xd8C68eBeCb6F074ac5C4FB66a690AC0Ad38a5a3c",
          "validator": {
            "name": "DSRV - CeloWhale.com - 1",
            "score": 0.9950398978204,
            "validatorGroup": {
              "name": "DSRV CeloWhale.com",
              "commission": 0.2
            }
          }
        },
        {
          "exist": true,
          "signer": "0xe10A8Cc6c22CDc320c67BD600a1d8a0a46D7f400",
          "validator": {
            "name": "Figment Networks 1",
            "score": 0.9879512819581,
            "validatorGroup": {
              "name": "Figment Networks",
              "commission": 0
            }
          }
        },
        {
          "exist": false,
          "signer": "0xe297b2fFAeC13E2E0CA299Db0D97c1Dcad3d04bF",
          "validator": {
            "name": "Conclave-I",
            "score": 0.9999314403841,
            "validatorGroup": {
              "name": "Conclave",
              "commission": 0.4
            }
          }
        },
        {
          "exist": false,
          "signer": "0xe3b1e1647BECe359C76582550F6E210999973B50",
          "validator": {
            "name": "ChainLayer1",
            "score": 0.9996483115027,
            "validatorGroup": {
              "name": "ChainLayer",
              "commission": 0.1
            }
          }
        },
        {
          "exist": true,
          "signer": "0xe5617da4dFa6CE4912F1D39889FE2dEc2F7E66b3",
          "validator": {
            "name": "MoonletV1",
            "score": 0.9908140181608,
            "validatorGroup": {
              "name": "Moonlet.io",
              "commission": 0.1
            }
          }
        }
      ]
    }
  }
}

Functional components are being written as Class components

Some functional components are being written in a way like class components. Examples are

const AccountList = () => {

const TransactionDetails = (hash_value: String) => {

const LatestBlocks = (pagination: boolean, displayCard: boolean) => {

These are functional components and should have no methods inside. A function inside a function?

Implement search function

Users would input the following possible values to search

  • block number
  • account address
  • transaction hash
  • validator address
  • validator group address
  • contract address
  • validator name
  • validator group name

Implement ordering

Ordering needs to be implemented in resolvers for several components including Transactions, Account List, Validator Group List

Query account details

An account can be retrieved by the following query

query account{
	account(address:"0xAe1ec841923811219b98ACeB1db297AADE2F46F3") {
    balance
    totalBalance{
      lockedGold
    }
    accountSummary
    isAccount
    isSigner
    lockedGold
    attestation
  }
}

Here is the sample result

{
  "data": {
    "account": {
      "balance": 11882463899300000000,
      "totalBalance": {
        "lockedGold": 1e+22
      },
      "accountSummary": {
        "address": "0xAe1ec841923811219b98ACeB1db297AADE2F46F3",
        "name": "CLabs Validator #5 on alfajores",
        "authorizedSigners": {
          "vote": "0xAe1ec841923811219b98ACeB1db297AADE2F46F3",
          "validator": "0xAe1ec841923811219b98ACeB1db297AADE2F46F3",
          "attestation": "0xb41697131c189F5e74Cf7A065D8CaA625F26EdE5"
        },
        "metadataURL": "https://storage.googleapis.com/clabs_validator_metadata/alfajores/validator-alfajores-0xAe1ec841923811219b98ACeB1db297AADE2F46F3-metadata.json",
        "wallet": "0x0000000000000000000000000000000000000000",
        "dataEncryptionKey": "0xe5688467b94fb8c5b3bf2c2149ecf1530c2f9c16d5347b62acc1f3fd3ff1d7fa094f8194e4b517e959caf9cc4d54272f67e1612cfdd71424bbab5be467d6a42a"
      },
      "isAccount": true,
      "isSigner": false,
      "lockedGold": {
        "total": {
          "s": 1,
          "e": 22,
          "c": [
            100000000
          ]
        },
        "nonvoting": {
          "s": 1,
          "e": 22,
          "c": [
            100000000
          ]
        },
        "requirement": {
          "s": 1,
          "e": 22,
          "c": [
            100000000
          ]
        },
        "pendingWithdrawals": [],
        "pendingWithdrawalsTotal": {
          "s": 1,
          "e": 0,
          "c": [
            0
          ]
        }
      },
      "attestation": {
        "requestFees": 0,
        "expiryBlocks": 720
      }
    }
  }
}

Fix the Account List Ranking

Currently the account ranking doesn't work when pressed next page button. It always displays the ranking from number 1.

Screenshot 2020-11-17 at 10 46 33 AM

Migrate imports of Apollo Client React components

As apollo-react package is deprecated, we have to migrate the imports from apollo-react to classes in apollo-client direclty.

From the deprecation notice on apollo-react

old: @apollo/react-components --> new: @apollo/client/react/components
old: @apollo/react-hoc --> new: @apollo/client/react/hoc
old: @apollo/react-ssr --> new: @apollo/client/react/ssr
old: @apollo/react-testing --> new: @apollo/client/testing
old: @apollo/react-hooks --> new: @apollo/client

Further migration information on Apollo website.
https://www.apollographql.com/docs/react/migrating/apollo-client-3-migration/#updating-imports

This will also remove the package unmet warnings from apollo-react.

npm WARN @apollo/[email protected] requires a peer of graphql@^14.3.1 but none is installed. You must install peer dependencies yourself.
npm WARN @apollo/[email protected] requires a peer of graphql@^14.3.1 but none is installed. You must install peer dependencies yourself.
npm WARN @apollo/[email protected] requires a peer of graphql@^14.3.1 but none is installed. You must install peer dependencies yourself.
npm WARN @apollo/[email protected] requires a peer of graphql@^14.3.1 but none is installed. You must install peer dependencies yourself.
npm WARN [email protected] requires a peer of graphql@^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN [email protected] requires a peer of graphql@^14.3.1 but none is installed. You must install peer dependencies yourself.

Display the current active validator set for the current epoch

The server now provide a resolver that generate a list of current validator set with related account, validator, validator group info.

query validatorSet {
  currentValidatorSet{
    affiliation
		name
    score
    signer{
      address
      accountSummary
      attestation
    }
    validatorGroup{
      commission
      lastSlashed
      name
    }
  }
}

Example output

{
  "data": {
    "currentValidatorSet": [
      {
        "affiliation": "0x5edfCe0bad47e24E30625c275457F5b4Bb619241",
        "name": "CLabs Validator #0 on alfajores",
        "score": 0.7458134171671,
        "signer": {
          "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
          "accountSummary": {
            "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
            "name": "CLabs Validator #0 on alfajores",
            "authorizedSigners": {
              "vote": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "validator": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "attestation": "0x49d0c92ac78494050DF2e21A09C60a29E4dDB96A"
            },
            "metadataURL": "https://storage.googleapis.com/clabs_validator_metadata/alfajores/validator-alfajores-0x456f41406B32c45D59E539e4BBA3D7898c3584dA-metadata.json",
            "wallet": "0x0000000000000000000000000000000000000000",
            "dataEncryptionKey": "0xc26ee1ab32c67c8cf0418b04ed9ae118c738ced972c73edc07dc0c26f6af84258e9887af32ac85c21ec5862d6e443f97e4da7af185d175236d741715dec65457"
          },
          "attestation": {
            "requestFees": 0,
            "expiryBlocks": 720
          }
        },
        "validatorGroup": {
          "commission": 0.1,
          "lastSlashed": 0,
          "name": "cLabs(1) eyJ2ZXJzaW9uIjozLCJpZCI6IjQwYTc1MGI0LWM2YTUtNDc4ZS1hNDkyLTIyYTQwY2QwNDU1YSIsImFkZHJlc3MiOiI1ZWRmY2UwYmFkNDdlMjRlMzA2MjVjMjc1NDU3ZjViNGJiNjE5MjQxIiwiY3J5cHRvIjp7ImNpcGhlcnRleHQiOiI3NTFjMjI5MjMyZDkzNGIzOTcwZjRiZTk4ZmEwNTk0NDhhMzIxYjM3M2YwY2IwZjViYTg3ZWI3ZGRlZDRlYjY0IiwiY2lwaGVycGFyYW1zIjp7Iml2IjoiNDMzODIwMGZkMDllN2QxOGEyY2Y0OThkNGM3NzMwMTIifSwiY2lwaGVyIjoiYWVzLTEyOC1jdHIiLCJrZGYiOiJzY3J5cHQiLCJrZGZwYXJhbXMiOnsiZGtsZW4iOjMyLCJzYWx0IjoiODZkY2M3NzY3ODQxYzc3NjUzNzI3ZWJjNDlkZjhhZDc4YjY5MTJjZDljYzcxNWY0YzIzMWZhNGQxMjdiOTM2ZCIsIm4iOjgxOTIsInIiOjgsInAiOjF9LCJtYWMiOiI3ZTliZWZjZTJkZWRjM2JhMGNhYjY3ZWNiMjBjMDRlYTZlY2IyZDliYWFhN2ExYmJlNzllYjVmNGU3MGY0OTQ1In19"
        }
      },
      {
        "affiliation": "0x5edfCe0bad47e24E30625c275457F5b4Bb619241",
        "name": "CLabs Validator #0 on alfajores",
        "score": 0.7458134171671,
        "signer": {
          "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
          "accountSummary": {
            "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
            "name": "CLabs Validator #0 on alfajores",
            "authorizedSigners": {
              "vote": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "validator": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "attestation": "0x49d0c92ac78494050DF2e21A09C60a29E4dDB96A"
            },
            "metadataURL": "https://storage.googleapis.com/clabs_validator_metadata/alfajores/validator-alfajores-0x456f41406B32c45D59E539e4BBA3D7898c3584dA-metadata.json",
            "wallet": "0x0000000000000000000000000000000000000000",
            "dataEncryptionKey": "0xc26ee1ab32c67c8cf0418b04ed9ae118c738ced972c73edc07dc0c26f6af84258e9887af32ac85c21ec5862d6e443f97e4da7af185d175236d741715dec65457"
          },
          "attestation": {
            "requestFees": 0,
            "expiryBlocks": 720
          }
        },
        "validatorGroup": {
          "commission": 0.1,
          "lastSlashed": 0,
          "name": "cLabs(1) eyJ2ZXJzaW9uIjozLCJpZCI6IjQwYTc1MGI0LWM2YTUtNDc4ZS1hNDkyLTIyYTQwY2QwNDU1YSIsImFkZHJlc3MiOiI1ZWRmY2UwYmFkNDdlMjRlMzA2MjVjMjc1NDU3ZjViNGJiNjE5MjQxIiwiY3J5cHRvIjp7ImNpcGhlcnRleHQiOiI3NTFjMjI5MjMyZDkzNGIzOTcwZjRiZTk4ZmEwNTk0NDhhMzIxYjM3M2YwY2IwZjViYTg3ZWI3ZGRlZDRlYjY0IiwiY2lwaGVycGFyYW1zIjp7Iml2IjoiNDMzODIwMGZkMDllN2QxOGEyY2Y0OThkNGM3NzMwMTIifSwiY2lwaGVyIjoiYWVzLTEyOC1jdHIiLCJrZGYiOiJzY3J5cHQiLCJrZGZwYXJhbXMiOnsiZGtsZW4iOjMyLCJzYWx0IjoiODZkY2M3NzY3ODQxYzc3NjUzNzI3ZWJjNDlkZjhhZDc4YjY5MTJjZDljYzcxNWY0YzIzMWZhNGQxMjdiOTM2ZCIsIm4iOjgxOTIsInIiOjgsInAiOjF9LCJtYWMiOiI3ZTliZWZjZTJkZWRjM2JhMGNhYjY3ZWNiMjBjMDRlYTZlY2IyZDliYWFhN2ExYmJlNzllYjVmNGU3MGY0OTQ1In19"
        }
      },
      {
        "affiliation": "0x5edfCe0bad47e24E30625c275457F5b4Bb619241",
        "name": "CLabs Validator #0 on alfajores",
        "score": 0.7458134171671,
        "signer": {
          "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
          "accountSummary": {
            "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
            "name": "CLabs Validator #0 on alfajores",
            "authorizedSigners": {
              "vote": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "validator": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "attestation": "0x49d0c92ac78494050DF2e21A09C60a29E4dDB96A"
            },
            "metadataURL": "https://storage.googleapis.com/clabs_validator_metadata/alfajores/validator-alfajores-0x456f41406B32c45D59E539e4BBA3D7898c3584dA-metadata.json",
            "wallet": "0x0000000000000000000000000000000000000000",
            "dataEncryptionKey": "0xc26ee1ab32c67c8cf0418b04ed9ae118c738ced972c73edc07dc0c26f6af84258e9887af32ac85c21ec5862d6e443f97e4da7af185d175236d741715dec65457"
          },
          "attestation": {
            "requestFees": 0,
            "expiryBlocks": 720
          }
        },
        "validatorGroup": {
          "commission": 0.1,
          "lastSlashed": 0,
          "name": "cLabs(1) eyJ2ZXJzaW9uIjozLCJpZCI6IjQwYTc1MGI0LWM2YTUtNDc4ZS1hNDkyLTIyYTQwY2QwNDU1YSIsImFkZHJlc3MiOiI1ZWRmY2UwYmFkNDdlMjRlMzA2MjVjMjc1NDU3ZjViNGJiNjE5MjQxIiwiY3J5cHRvIjp7ImNpcGhlcnRleHQiOiI3NTFjMjI5MjMyZDkzNGIzOTcwZjRiZTk4ZmEwNTk0NDhhMzIxYjM3M2YwY2IwZjViYTg3ZWI3ZGRlZDRlYjY0IiwiY2lwaGVycGFyYW1zIjp7Iml2IjoiNDMzODIwMGZkMDllN2QxOGEyY2Y0OThkNGM3NzMwMTIifSwiY2lwaGVyIjoiYWVzLTEyOC1jdHIiLCJrZGYiOiJzY3J5cHQiLCJrZGZwYXJhbXMiOnsiZGtsZW4iOjMyLCJzYWx0IjoiODZkY2M3NzY3ODQxYzc3NjUzNzI3ZWJjNDlkZjhhZDc4YjY5MTJjZDljYzcxNWY0YzIzMWZhNGQxMjdiOTM2ZCIsIm4iOjgxOTIsInIiOjgsInAiOjF9LCJtYWMiOiI3ZTliZWZjZTJkZWRjM2JhMGNhYjY3ZWNiMjBjMDRlYTZlY2IyZDliYWFhN2ExYmJlNzllYjVmNGU3MGY0OTQ1In19"
        }
      },
      {
        "affiliation": "0x5edfCe0bad47e24E30625c275457F5b4Bb619241",
        "name": "CLabs Validator #0 on alfajores",
        "score": 0.7458134171671,
        "signer": {
          "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
          "accountSummary": {
            "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
            "name": "CLabs Validator #0 on alfajores",
            "authorizedSigners": {
              "vote": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "validator": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "attestation": "0x49d0c92ac78494050DF2e21A09C60a29E4dDB96A"
            },
            "metadataURL": "https://storage.googleapis.com/clabs_validator_metadata/alfajores/validator-alfajores-0x456f41406B32c45D59E539e4BBA3D7898c3584dA-metadata.json",
            "wallet": "0x0000000000000000000000000000000000000000",
            "dataEncryptionKey": "0xc26ee1ab32c67c8cf0418b04ed9ae118c738ced972c73edc07dc0c26f6af84258e9887af32ac85c21ec5862d6e443f97e4da7af185d175236d741715dec65457"
          },
          "attestation": {
            "requestFees": 0,
            "expiryBlocks": 720
          }
        },
        "validatorGroup": {
          "commission": 0.1,
          "lastSlashed": 0,
          "name": "cLabs(1) eyJ2ZXJzaW9uIjozLCJpZCI6IjQwYTc1MGI0LWM2YTUtNDc4ZS1hNDkyLTIyYTQwY2QwNDU1YSIsImFkZHJlc3MiOiI1ZWRmY2UwYmFkNDdlMjRlMzA2MjVjMjc1NDU3ZjViNGJiNjE5MjQxIiwiY3J5cHRvIjp7ImNpcGhlcnRleHQiOiI3NTFjMjI5MjMyZDkzNGIzOTcwZjRiZTk4ZmEwNTk0NDhhMzIxYjM3M2YwY2IwZjViYTg3ZWI3ZGRlZDRlYjY0IiwiY2lwaGVycGFyYW1zIjp7Iml2IjoiNDMzODIwMGZkMDllN2QxOGEyY2Y0OThkNGM3NzMwMTIifSwiY2lwaGVyIjoiYWVzLTEyOC1jdHIiLCJrZGYiOiJzY3J5cHQiLCJrZGZwYXJhbXMiOnsiZGtsZW4iOjMyLCJzYWx0IjoiODZkY2M3NzY3ODQxYzc3NjUzNzI3ZWJjNDlkZjhhZDc4YjY5MTJjZDljYzcxNWY0YzIzMWZhNGQxMjdiOTM2ZCIsIm4iOjgxOTIsInIiOjgsInAiOjF9LCJtYWMiOiI3ZTliZWZjZTJkZWRjM2JhMGNhYjY3ZWNiMjBjMDRlYTZlY2IyZDliYWFhN2ExYmJlNzllYjVmNGU3MGY0OTQ1In19"
        }
      },
      {
        "affiliation": "0x5edfCe0bad47e24E30625c275457F5b4Bb619241",
        "name": "CLabs Validator #0 on alfajores",
        "score": 0.7458134171671,
        "signer": {
          "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
          "accountSummary": {
            "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
            "name": "CLabs Validator #0 on alfajores",
            "authorizedSigners": {
              "vote": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "validator": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "attestation": "0x49d0c92ac78494050DF2e21A09C60a29E4dDB96A"
            },
            "metadataURL": "https://storage.googleapis.com/clabs_validator_metadata/alfajores/validator-alfajores-0x456f41406B32c45D59E539e4BBA3D7898c3584dA-metadata.json",
            "wallet": "0x0000000000000000000000000000000000000000",
            "dataEncryptionKey": "0xc26ee1ab32c67c8cf0418b04ed9ae118c738ced972c73edc07dc0c26f6af84258e9887af32ac85c21ec5862d6e443f97e4da7af185d175236d741715dec65457"
          },
          "attestation": {
            "requestFees": 0,
            "expiryBlocks": 720
          }
        },
        "validatorGroup": {
          "commission": 0.1,
          "lastSlashed": 0,
          "name": "cLabs(1) eyJ2ZXJzaW9uIjozLCJpZCI6IjQwYTc1MGI0LWM2YTUtNDc4ZS1hNDkyLTIyYTQwY2QwNDU1YSIsImFkZHJlc3MiOiI1ZWRmY2UwYmFkNDdlMjRlMzA2MjVjMjc1NDU3ZjViNGJiNjE5MjQxIiwiY3J5cHRvIjp7ImNpcGhlcnRleHQiOiI3NTFjMjI5MjMyZDkzNGIzOTcwZjRiZTk4ZmEwNTk0NDhhMzIxYjM3M2YwY2IwZjViYTg3ZWI3ZGRlZDRlYjY0IiwiY2lwaGVycGFyYW1zIjp7Iml2IjoiNDMzODIwMGZkMDllN2QxOGEyY2Y0OThkNGM3NzMwMTIifSwiY2lwaGVyIjoiYWVzLTEyOC1jdHIiLCJrZGYiOiJzY3J5cHQiLCJrZGZwYXJhbXMiOnsiZGtsZW4iOjMyLCJzYWx0IjoiODZkY2M3NzY3ODQxYzc3NjUzNzI3ZWJjNDlkZjhhZDc4YjY5MTJjZDljYzcxNWY0YzIzMWZhNGQxMjdiOTM2ZCIsIm4iOjgxOTIsInIiOjgsInAiOjF9LCJtYWMiOiI3ZTliZWZjZTJkZWRjM2JhMGNhYjY3ZWNiMjBjMDRlYTZlY2IyZDliYWFhN2ExYmJlNzllYjVmNGU3MGY0OTQ1In19"
        }
      },
      {
        "affiliation": "0x5edfCe0bad47e24E30625c275457F5b4Bb619241",
        "name": "CLabs Validator #0 on alfajores",
        "score": 0.7458134171671,
        "signer": {
          "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
          "accountSummary": {
            "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
            "name": "CLabs Validator #0 on alfajores",
            "authorizedSigners": {
              "vote": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "validator": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "attestation": "0x49d0c92ac78494050DF2e21A09C60a29E4dDB96A"
            },
            "metadataURL": "https://storage.googleapis.com/clabs_validator_metadata/alfajores/validator-alfajores-0x456f41406B32c45D59E539e4BBA3D7898c3584dA-metadata.json",
            "wallet": "0x0000000000000000000000000000000000000000",
            "dataEncryptionKey": "0xc26ee1ab32c67c8cf0418b04ed9ae118c738ced972c73edc07dc0c26f6af84258e9887af32ac85c21ec5862d6e443f97e4da7af185d175236d741715dec65457"
          },
          "attestation": {
            "requestFees": 0,
            "expiryBlocks": 720
          }
        },
        "validatorGroup": {
          "commission": 0.1,
          "lastSlashed": 0,
          "name": "cLabs(1) eyJ2ZXJzaW9uIjozLCJpZCI6IjQwYTc1MGI0LWM2YTUtNDc4ZS1hNDkyLTIyYTQwY2QwNDU1YSIsImFkZHJlc3MiOiI1ZWRmY2UwYmFkNDdlMjRlMzA2MjVjMjc1NDU3ZjViNGJiNjE5MjQxIiwiY3J5cHRvIjp7ImNpcGhlcnRleHQiOiI3NTFjMjI5MjMyZDkzNGIzOTcwZjRiZTk4ZmEwNTk0NDhhMzIxYjM3M2YwY2IwZjViYTg3ZWI3ZGRlZDRlYjY0IiwiY2lwaGVycGFyYW1zIjp7Iml2IjoiNDMzODIwMGZkMDllN2QxOGEyY2Y0OThkNGM3NzMwMTIifSwiY2lwaGVyIjoiYWVzLTEyOC1jdHIiLCJrZGYiOiJzY3J5cHQiLCJrZGZwYXJhbXMiOnsiZGtsZW4iOjMyLCJzYWx0IjoiODZkY2M3NzY3ODQxYzc3NjUzNzI3ZWJjNDlkZjhhZDc4YjY5MTJjZDljYzcxNWY0YzIzMWZhNGQxMjdiOTM2ZCIsIm4iOjgxOTIsInIiOjgsInAiOjF9LCJtYWMiOiI3ZTliZWZjZTJkZWRjM2JhMGNhYjY3ZWNiMjBjMDRlYTZlY2IyZDliYWFhN2ExYmJlNzllYjVmNGU3MGY0OTQ1In19"
        }
      },
      {
        "affiliation": "0x5edfCe0bad47e24E30625c275457F5b4Bb619241",
        "name": "CLabs Validator #0 on alfajores",
        "score": 0.7458134171671,
        "signer": {
          "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
          "accountSummary": {
            "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
            "name": "CLabs Validator #0 on alfajores",
            "authorizedSigners": {
              "vote": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "validator": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "attestation": "0x49d0c92ac78494050DF2e21A09C60a29E4dDB96A"
            },
            "metadataURL": "https://storage.googleapis.com/clabs_validator_metadata/alfajores/validator-alfajores-0x456f41406B32c45D59E539e4BBA3D7898c3584dA-metadata.json",
            "wallet": "0x0000000000000000000000000000000000000000",
            "dataEncryptionKey": "0xc26ee1ab32c67c8cf0418b04ed9ae118c738ced972c73edc07dc0c26f6af84258e9887af32ac85c21ec5862d6e443f97e4da7af185d175236d741715dec65457"
          },
          "attestation": {
            "requestFees": 0,
            "expiryBlocks": 720
          }
        },
        "validatorGroup": {
          "commission": 0.1,
          "lastSlashed": 0,
          "name": "cLabs(1) eyJ2ZXJzaW9uIjozLCJpZCI6IjQwYTc1MGI0LWM2YTUtNDc4ZS1hNDkyLTIyYTQwY2QwNDU1YSIsImFkZHJlc3MiOiI1ZWRmY2UwYmFkNDdlMjRlMzA2MjVjMjc1NDU3ZjViNGJiNjE5MjQxIiwiY3J5cHRvIjp7ImNpcGhlcnRleHQiOiI3NTFjMjI5MjMyZDkzNGIzOTcwZjRiZTk4ZmEwNTk0NDhhMzIxYjM3M2YwY2IwZjViYTg3ZWI3ZGRlZDRlYjY0IiwiY2lwaGVycGFyYW1zIjp7Iml2IjoiNDMzODIwMGZkMDllN2QxOGEyY2Y0OThkNGM3NzMwMTIifSwiY2lwaGVyIjoiYWVzLTEyOC1jdHIiLCJrZGYiOiJzY3J5cHQiLCJrZGZwYXJhbXMiOnsiZGtsZW4iOjMyLCJzYWx0IjoiODZkY2M3NzY3ODQxYzc3NjUzNzI3ZWJjNDlkZjhhZDc4YjY5MTJjZDljYzcxNWY0YzIzMWZhNGQxMjdiOTM2ZCIsIm4iOjgxOTIsInIiOjgsInAiOjF9LCJtYWMiOiI3ZTliZWZjZTJkZWRjM2JhMGNhYjY3ZWNiMjBjMDRlYTZlY2IyZDliYWFhN2ExYmJlNzllYjVmNGU3MGY0OTQ1In19"
        }
      },
      {
        "affiliation": "0x5edfCe0bad47e24E30625c275457F5b4Bb619241",
        "name": "CLabs Validator #0 on alfajores",
        "score": 0.7458134171671,
        "signer": {
          "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
          "accountSummary": {
            "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
            "name": "CLabs Validator #0 on alfajores",
            "authorizedSigners": {
              "vote": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "validator": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "attestation": "0x49d0c92ac78494050DF2e21A09C60a29E4dDB96A"
            },
            "metadataURL": "https://storage.googleapis.com/clabs_validator_metadata/alfajores/validator-alfajores-0x456f41406B32c45D59E539e4BBA3D7898c3584dA-metadata.json",
            "wallet": "0x0000000000000000000000000000000000000000",
            "dataEncryptionKey": "0xc26ee1ab32c67c8cf0418b04ed9ae118c738ced972c73edc07dc0c26f6af84258e9887af32ac85c21ec5862d6e443f97e4da7af185d175236d741715dec65457"
          },
          "attestation": {
            "requestFees": 0,
            "expiryBlocks": 720
          }
        },
        "validatorGroup": {
          "commission": 0.1,
          "lastSlashed": 0,
          "name": "cLabs(1) eyJ2ZXJzaW9uIjozLCJpZCI6IjQwYTc1MGI0LWM2YTUtNDc4ZS1hNDkyLTIyYTQwY2QwNDU1YSIsImFkZHJlc3MiOiI1ZWRmY2UwYmFkNDdlMjRlMzA2MjVjMjc1NDU3ZjViNGJiNjE5MjQxIiwiY3J5cHRvIjp7ImNpcGhlcnRleHQiOiI3NTFjMjI5MjMyZDkzNGIzOTcwZjRiZTk4ZmEwNTk0NDhhMzIxYjM3M2YwY2IwZjViYTg3ZWI3ZGRlZDRlYjY0IiwiY2lwaGVycGFyYW1zIjp7Iml2IjoiNDMzODIwMGZkMDllN2QxOGEyY2Y0OThkNGM3NzMwMTIifSwiY2lwaGVyIjoiYWVzLTEyOC1jdHIiLCJrZGYiOiJzY3J5cHQiLCJrZGZwYXJhbXMiOnsiZGtsZW4iOjMyLCJzYWx0IjoiODZkY2M3NzY3ODQxYzc3NjUzNzI3ZWJjNDlkZjhhZDc4YjY5MTJjZDljYzcxNWY0YzIzMWZhNGQxMjdiOTM2ZCIsIm4iOjgxOTIsInIiOjgsInAiOjF9LCJtYWMiOiI3ZTliZWZjZTJkZWRjM2JhMGNhYjY3ZWNiMjBjMDRlYTZlY2IyZDliYWFhN2ExYmJlNzllYjVmNGU3MGY0OTQ1In19"
        }
      },
      {
        "affiliation": "0x5edfCe0bad47e24E30625c275457F5b4Bb619241",
        "name": "CLabs Validator #0 on alfajores",
        "score": 0.7458134171671,
        "signer": {
          "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
          "accountSummary": {
            "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
            "name": "CLabs Validator #0 on alfajores",
            "authorizedSigners": {
              "vote": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "validator": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "attestation": "0x49d0c92ac78494050DF2e21A09C60a29E4dDB96A"
            },
            "metadataURL": "https://storage.googleapis.com/clabs_validator_metadata/alfajores/validator-alfajores-0x456f41406B32c45D59E539e4BBA3D7898c3584dA-metadata.json",
            "wallet": "0x0000000000000000000000000000000000000000",
            "dataEncryptionKey": "0xc26ee1ab32c67c8cf0418b04ed9ae118c738ced972c73edc07dc0c26f6af84258e9887af32ac85c21ec5862d6e443f97e4da7af185d175236d741715dec65457"
          },
          "attestation": {
            "requestFees": 0,
            "expiryBlocks": 720
          }
        },
        "validatorGroup": {
          "commission": 0.1,
          "lastSlashed": 0,
          "name": "cLabs(1) eyJ2ZXJzaW9uIjozLCJpZCI6IjQwYTc1MGI0LWM2YTUtNDc4ZS1hNDkyLTIyYTQwY2QwNDU1YSIsImFkZHJlc3MiOiI1ZWRmY2UwYmFkNDdlMjRlMzA2MjVjMjc1NDU3ZjViNGJiNjE5MjQxIiwiY3J5cHRvIjp7ImNpcGhlcnRleHQiOiI3NTFjMjI5MjMyZDkzNGIzOTcwZjRiZTk4ZmEwNTk0NDhhMzIxYjM3M2YwY2IwZjViYTg3ZWI3ZGRlZDRlYjY0IiwiY2lwaGVycGFyYW1zIjp7Iml2IjoiNDMzODIwMGZkMDllN2QxOGEyY2Y0OThkNGM3NzMwMTIifSwiY2lwaGVyIjoiYWVzLTEyOC1jdHIiLCJrZGYiOiJzY3J5cHQiLCJrZGZwYXJhbXMiOnsiZGtsZW4iOjMyLCJzYWx0IjoiODZkY2M3NzY3ODQxYzc3NjUzNzI3ZWJjNDlkZjhhZDc4YjY5MTJjZDljYzcxNWY0YzIzMWZhNGQxMjdiOTM2ZCIsIm4iOjgxOTIsInIiOjgsInAiOjF9LCJtYWMiOiI3ZTliZWZjZTJkZWRjM2JhMGNhYjY3ZWNiMjBjMDRlYTZlY2IyZDliYWFhN2ExYmJlNzllYjVmNGU3MGY0OTQ1In19"
        }
      },
      {
        "affiliation": "0x5edfCe0bad47e24E30625c275457F5b4Bb619241",
        "name": "CLabs Validator #0 on alfajores",
        "score": 0.7458134171671,
        "signer": {
          "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
          "accountSummary": {
            "address": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
            "name": "CLabs Validator #0 on alfajores",
            "authorizedSigners": {
              "vote": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "validator": "0x456f41406B32c45D59E539e4BBA3D7898c3584dA",
              "attestation": "0x49d0c92ac78494050DF2e21A09C60a29E4dDB96A"
            },
            "metadataURL": "https://storage.googleapis.com/clabs_validator_metadata/alfajores/validator-alfajores-0x456f41406B32c45D59E539e4BBA3D7898c3584dA-metadata.json",
            "wallet": "0x0000000000000000000000000000000000000000",
            "dataEncryptionKey": "0xc26ee1ab32c67c8cf0418b04ed9ae118c738ced972c73edc07dc0c26f6af84258e9887af32ac85c21ec5862d6e443f97e4da7af185d175236d741715dec65457"
          },
          "attestation": {
            "requestFees": 0,
            "expiryBlocks": 720
          }
        },
        "validatorGroup": {
          "commission": 0.1,
          "lastSlashed": 0,
          "name": "cLabs(1) eyJ2ZXJzaW9uIjozLCJpZCI6IjQwYTc1MGI0LWM2YTUtNDc4ZS1hNDkyLTIyYTQwY2QwNDU1YSIsImFkZHJlc3MiOiI1ZWRmY2UwYmFkNDdlMjRlMzA2MjVjMjc1NDU3ZjViNGJiNjE5MjQxIiwiY3J5cHRvIjp7ImNpcGhlcnRleHQiOiI3NTFjMjI5MjMyZDkzNGIzOTcwZjRiZTk4ZmEwNTk0NDhhMzIxYjM3M2YwY2IwZjViYTg3ZWI3ZGRlZDRlYjY0IiwiY2lwaGVycGFyYW1zIjp7Iml2IjoiNDMzODIwMGZkMDllN2QxOGEyY2Y0OThkNGM3NzMwMTIifSwiY2lwaGVyIjoiYWVzLTEyOC1jdHIiLCJrZGYiOiJzY3J5cHQiLCJrZGZwYXJhbXMiOnsiZGtsZW4iOjMyLCJzYWx0IjoiODZkY2M3NzY3ODQxYzc3NjUzNzI3ZWJjNDlkZjhhZDc4YjY5MTJjZDljYzcxNWY0YzIzMWZhNGQxMjdiOTM2ZCIsIm4iOjgxOTIsInIiOjgsInAiOjF9LCJtYWMiOiI3ZTliZWZjZTJkZWRjM2JhMGNhYjY3ZWNiMjBjMDRlYTZlY2IyZDliYWFhN2ExYmJlNzllYjVmNGU3MGY0OTQ1In19"
        }
      }
    ]
  }
}

Do not hard code the query

@MonikaCat This query only query the 500 blocks at page 10, which means it always skips the latest 4500 blocks. The latest block we can see here is 5 hours ago.

blocks(pageSize: 500, page: 10) {

This happens to the list of transactions as well.

Screenshot 2020-07-31 at 7 36 07 PM

Please provide the pageSize and page dynamically. These two arguments are for querying specific pages when you have pagination. For example, if we are going to request a list of blocks with 50 blocks per page and the user is viewing page 3, this can be queried with

{
    blocks(pageSize: 50, page: 3) {
      blocks {
        number
        miner {
          name
          affiliation
        }
        transactions {
          transactionIndex
        }
        gasUsed
        gasLimit
        timestamp
      }
    }
  }

And it will return the result with 50 blocks skipping the first 100 blocks. More precisely, on the home page, you may only want to do a query with blocks(pageSize:5) where pageSize is set to 20 and page is set to 1 by default. The same applies to all list queries. In the /blocks page (layout), as there is pagination, there should be pagination control letting the users to browse specific page similar to what have been in Kava CDP list. When a user click on a button, the variables pageSize and page will be changed and new results will be retreived.

Unify the layout on desktop

Currently the width of the pages on desktop are a bit arbitrary as the sizes are set in the top <Grid> element. The sizes in each page element should not be controlled. Instead there should be a general container which holds all the elements in the main content region.

<Layout>
    <Account address={} />
</Layout>

and the <Layout> is a component acts like a container

Layout = () => 
    <Container maxWidth={} >
        <main className={}>
            {/* some other common components */}
            {prop.children}
            {/* some other common components */}
        </main>
    </Container>

Convert duplicate contents into components

I found that some content elements have been reused quite a few times in different components. Code can be highly reduced if those content elements are created as Components. These elements are, e.g.

<>{`Error! ${error.message}`}</>
"Data currently not available"

Can't build for production

Got this error when npm run build

{path}/components/transaction/TransactionDetails.tsx(120,18):
120:18 Object is possibly 'null'.
    118 |   const handleClick = () => {
    119 |     return navigator.clipboard
  > 120 |       .writeText(document.getElementById("raw-input-form").value) != undefined ? navigator.clipboard
        |                  ^
    121 |         .writeText(document.getElementById("raw-input-form").value)
    122 |         .then(() => setOpen(true))
    123 |         .catch((err) => {


> Build error occurred

The transaction detail page can be shown in dev environment.

Migrate apollo-boost to apollo-client

apollo-boost is retired after apollo-client 3.0.

https://github.com/apollographql/apollo-client/blob/master/CHANGELOG.md#general

The existing ApolloClient inside apollo-boost gives us this warning which make the LatestTransaction component not rendering

WARNING: heuristic fragment matching going on!

The solution is to read the schema correct on the frontend and making use of InMemoryCache in ApolloClient.

https://medium.com/commutatus/whats-going-on-with-the-heuristic-fragment-matcher-in-graphql-apollo-client-e721075e92be

This is also fix #13

Link data of list of accounts

This can be done with the following query

query accounts{
  accounts(pageSize:10, page:25){
    page
    totalCounts
    hasMore
    accounts{
      address
      balance
    }
  }
}

Transaction list is not displaying on home page

There are errors in querying the GraphQL.

[GraphQL error]: Message: Cannot query field "_id" on type "ToWalletObject". Did you mean to use an inline fragment on "ToWalletAccount" or "ToWalletContract"?, Location: [object Object], Path: undefined
[GraphQL error]: Message: Cannot query field "balance" on type "ToWalletObject"., Location: [object Object], Path: undefined
[Network error]: ServerError: Response not successful: Received status code 400

It's on the frontend as well.

Error! Error: Network error: Response not successful: Received status code 400

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.