import { maxBy, range, sortBy, flatten, uniq } from "lodash";
import PromisePool from "async-promise-pool";
import fs from "fs";
import { Contract, Provider, setMulticallAddress } from "ethers-multicall";
import Identity from "../../artifacts/contracts/Interfaces.sol/IIdentity.json";

import { ethers } from "hardhat";
import { unique } from "underscore";
import { Retrier } from "@jsier/retrier";
const allProtocolAddresses: Array<string> = [
  "0xee724540706296ebad65aea2515efe0949f97ae6",
  "0x1cb566802e61e7f661183f5d9a14645d7620cc8d",
  "0x30e1403c075db97fd9fe02b114cebea5acce38b7",
  "0x07b41192dd74172576a443c7b28ddc3dc2ce3074",
  "0x903a6ba8b5a43fbd34a511fb5cf193ce8dc8907b",
  "0x2170e9a5b72f143cdf9c2fc93fa9d6a9b67cd632",
  "0x7edb872c75e86fe53f828d65ad75b0b5862a0c2b",
  "0xd142a79bab57fed1feed4734dfe33473d707eecf",
  "0xf61e08a98b446856ee3fbd6597d3698a1a138565",
  "0xcc9b1382b0ae9d80e81ecb1863dce8685a044603",
  "0xcdc704d3dea0fcfd1cae95dfdcb7883632e171b2",
  "0x94079df920115c5296cc06ae6d8f29e077906246",
  "0x628980264f86b20bbf4181f55a35602fee6b4e6f",
  "0xd694567482c4947082217b4d537b9b31986f5672",
  "0x0000000000000000000000000000000000000000",
  "0x100b8fd10ff8dc43fda45e636b4bb1ee6088270a",
  "0x0ca09ca67b42272b83a05346545329de5b30b398",
  "0x104effcbdddae9cd4813b8a05ecd6a17babfe6d9",
  "0xca9e4d51bc496f0b661e9fa02d25e4f67dd88870",
  "0x7cba0778748960145f3e56b3285255064d86709d",
  "0x7b58a5737440bc05ca3972fdeff8ac3ba984536b",
  "0x0e79f80809180ab8fae189d4e76fc814672d9a40",
  "0xfc9f6f5e3ff7baab3fef82e66f56917d625ba38b",
  "0x8b0ec4afaee9974233c29fa52cc5d2493fb81d45",
  "0x2b5ef42bc3d1befcba20e3233dedadd2439b8ac2",
  "0x53f6bd6da1564f5b00d2069d8e0f316af859fb99",
  "0x7bc7d34376b2427498392160fda537664d940313",
  "0x621852d785870402bbd6bfcd11c5fca628bfcf15",
  "0x53954ad0a0b151a25de038dd195d564c071fc726",
  "0x8c1255c46b3a04686ea0ffd3b71d7cb391091a58",
  "0xe4f91ffffda759532ee6261b999373d6ebcae9fd",
  "0x3ba47349007b513d5f9089df6812a08c6f05ff05",
  "0x41be749e48779d7ab2917257a2f4f300eb8dd65d",
  "0xded3992c507bb15a5e23fc66ee886ab1cbff5b69",
  "0xb04fdfe99b4bd86368f40081fece14c1711a4206",
  "0x138a24c2dfd29b2db632a0c9e71e55621f5a745d",
  "0x798c114567d327e9abd80f1de45023fde44e9035",
  "0xecf014e0f88bd611c522be84b8ebefa0d3aedf1c",
  "0x9edd6aa83feb1ffa8fd732c2287798561d360ab3",
  "0x73c9d1c6fb24d2890f1a9915b45ffcc01bfbe3c0",
  "0x1067cedb2d0a968b5a07e2e4e355b03c693cb91f",
  "0x3ab7d55b63454beeea39271bd0cb78c4e8aa7afb",
  "0x3087e1e2d04b7050dd678e9acd0a81247ac531b8",
  "0xfa8a01e403285cd80efa21841afd6a6aa670b15e",
  "0x9ad8dabb3503e95cd196eb63e9bdf520cef6daeb",
  "0x1f3a55ec286335532c851f3ab280cf3c6383044b",
  "0x044d206d1144f8c9eac05177d794364857c3c9e6",
  "0x2e49961170a6fd2fdeda0a2eb2aacab95ceba21d",
  "0x8f29fcb7fc44440e7f852c78c6e5bf81e3063e1d",
  "0x495d133b938596c9984d462f007b676bdc57ecec",
  "0x0be7c592374ee0bd0ccbfc76be758a138bcaec6e",
  "0xfa8d865a962ca8456df331d78806152d3ac5b84f",
  "0xf96dadc6d71113f6500e97590760c924da1ef70e",
  "0xbce053b99e22158f8b62f4dbfbede1f936b2d4e4",
  "0x795ced99774430df8902d8699388924a213a5aa6",
  "0x12f706faafcbf8093282dba0c40ed0d4eb5caf54",
  "0x653c67be5b3739708e84b61641253822405d78d8",
  "0x9f75dacb77419b87f568d417ebc84346e134144e",
  "0xd9aa86e0ddb932bd78ab8c71c1b98f83cf610bd4",
  "0xd39021db018e2caeadb4b2e6717d31550e7918d0",
  "0x8e08d7138a35c56ddc52a6195c12ab72123967f4",
  "0xd76135e33b9ee4f1bf1d57ec18bbbc11aff30941",
  "0xa611cb08e1b6ecdee4a9db5cad045729de9ea1b1",
  "0x5925f6bf62147d2b14b85e6dcb979e3d1a81dbb1",
  "0x13973e242c75091e605844f816b9a8e211929559",
  "0xb7d068e9e4235176fa51c5971081117dfe5e7f75",
  "0xd6513d7145a208d94e508bab2e4be31f6dce5147",
  "0x57312053c36a226df13b01089218a5f9951d3f9c",
  "0xe1fe3f17c0c3c3333efc54b07b92639fb765fdcd",
  "0xace125edd5591f33653b856c6c2add4ca2bf64cd",
  "0xee0756a5394721e54a092f9aebd525dd3a2ace8d",
  "0x6a6229f0312466a3b2442aad08e205f58070ae9c",
  "0x4738c5e91c4f809da21dd0df4b5ad5f699878c1c",
  "0x49920f0bb0e099755ad61b5eb23b807ae1b5cafe",
  "0xfb5daf44cd18db7b96db3f9c6e411d65fcf4f372",
  "0x3bc91a65f53dacbd2336c04ac060741f70dcd187",
  "0x589f7ae100a7dbd80dc512208b7a0f457a041be6",
  "0x11e7716de4b5bc9a1dbc93184b27ac2134ca6e42",
  "0x4f151834efb18108080716d1467b397faa87cf66",
  "0xbd879865b649b7605c27caa6a54e0f6b9efb74b2",
  "0xeda39475415f1a2944a467aa6359cb4c1c3ed50f",
  "0x9ebe7b1b0fb6e5d4c3996e65ab3750fbbf8958aa",
  "0x67c5870b4a41d4ebef24d2456547a03f1f3e094b",
  "0xcb4a6af3b15d64e8f50b3cea54c4f481d9e434c1",
  "0x76e76e10ac308a1d54a00f9df27edce4801f288b",
  "0x1ecfd1afb601c406ff0e13c3485f2d75699b6817",
  "0x95c0d9dcea1e243ed696f34cac5e6559c3c128a3",
  "0xf6b5f7a885cbc57d739adbee76e52a70bc04d795",
  "0x098148534ac15a44cff52387ba81ed929589ecaf",
  "0xf9b357d83bdad6881feb09d909095872b93203d0",
  "0xd5d11ee582c8931f336fbcd135e98cee4db8ccb0",
  "0x5a830c994905d1853de2238f4aad3996ce8b2850",
  "0xb8006df4a7cfdb99e5115c9983340e2c79b9f5ae",
  "0x7c782d921080c36377d7ca4fed4753fedde3f3ad",
  "0x4312567e8c3d2e24eab5995fdda94242a3c438f7",
  "0xa849cfd58e44c285fd554b02331f68f97530c092",
  "0x575f38f4775f2ef4540f11bb7c8d86c02892a788",
  "0x35da90b4d19bcd0cef22bc28dacb89890df29116",
  "0x304fc1bc94328ea73ce0278542fb70709db82be2",
  "0xb1ad82163efbab0f6c5f984ac532e4160c08466e",
  "0x553510a3ace946b2d1d0a8939e0fb6195721dc42",
  "0x07e29dad9906447073829c23a18267b30614a072",
  "0xbb1d7c030d56145187a60f0dde2de9be7427cd80",
  "0xd85d794b7eb00749763e851eeae37c5d862b9fb3",
  "0x6cf223ee3c5f95cf97065de35757247e04eaaae3",
  "0x6d5e39fc226958ae60438cde72e7ac4c46e8182c",
  "0x49380979206ea1e274a93d4912ca0950de695e81",
  "0xdaf541b3a4e1764d438d13f6d6c31157fec47a5e",
  "0x01c5f99574235c5380e4ff9975df58e387d6f9c4",
  "0xd9dd31139a544df145cf10cc73e7fc1db33971fa",
  "0xb5e5d0f8c0cba267cd3d7035d6adc8eba7df7cdd",
  "0x6ce27497a64fffb5517aa4aee908b1e7eb63b9ff",
  "0xf4aae0922718116fbeb60b49bbb2a66cbfaac5e7",
  "0x4df91caa7de436b89c360deefcfdd3299cfe2ddf",
  "0x05fb7c4091274e93a5c83ecdafa38e209743e788",
  "0x6f99174a227ddb4525a179dd56d7ca59c0f6e7f1",
  "0x20da739c6ce6260574a78313fd21aa7309ea436f",
  "0x87d0dd16d3a2049c85a382f2d29c7cecf322dfbe",
  "0xcad3d4d0983e69dde63f252c537b80ba3f894aaa",
  "0x56ac8965a980bc771a0758059aa56f8ebff76f97",
  "0x754d3d30d766e4c46a50df6821542ed1581377f9",
  "0xbb3a55660f89e9c0b590d520eeca61c6b48901dd",
  "0x0f204ca327dd07b1a921a50a6a3f1088f5df0006",
  "0x1a94f7ed51d79fd505bd45ff0a3c314ae8ba118a",
  "0x57ab55c54ffc3f92544766d683645c8ed03cc543",
  "0x1ea5564a28f34107b99dc591f142537404329762",
  "0x483a044d792b2ca0373956444c7e7db36b7dbc56",
  "0xe6876231d1a5905abed03e4c613e427b0357ec0b",
  "0x5810950bf9184f286f1c33b2cf80533d2cb274af",
  "0xae64e29c78056fb221099a1ece5fb7d91ca27918",
  "0x7cc2ccda5483e721778c4040b1dbd23b3ab1b4a5",
  "0xaacbaab8571cbeceb46ba85b5981efdb8928545e",
  "0xd7ac544f8a570c4d8764c3aabcf6870cbd960d0d",
  "0x18bcdf79a724648bf34eb06701be81bd072a2384",
  "0xbdfd60f3ae73329d33ebe17d78383defd72643ad",
  "0xea12bb3917cf6ae2fde97ce4756177703426d41f",
  "0x5c16960f2eeba27b7de4f1f6e84e616c1977e070",
  "0xedbe438cd865992fdb72dd252e6055a71b02be72",
  "0x8eec64bb6807c0178f96277cce6a334b4e565e5c",
  "0x6b175474e89094c44da98b954eedeac495271d0f",
  "0x5d3a536e4d6dbd6114cc1ead35777bab948e3643",
  "0xdfcb356c9bd420263ac56d7980f409ace9050896",
  "0x2ea4aaa8351cfe63b537e81cd4a13c435b945c1d",
  "0x7d5fc799de6fb6a30161684f27320bacadbf4126",
  "0x23d8492444da663fcb2bda8ca9a0e84989d1f59e",
  "0xeecc2620fb1eac08af5923b4d1d54d4703fbb29b",
  "0xa74f8ca91ba870608a909a9685e4a984bbc068b5",
  "0x4218263062854c3953ef61699a85231b524a896a",
  "0x97429324686d39b424bc2d3228478280b46080ed",
  "0x83e28c370bb4447334cf12e4f2944e98c8865c5b",
  "0xe383e9d08e3e4f76cbb4a6953af343e7bbcc6e98",
  "0x424e48447c1230544711a96b903c79ef6eb9e14c",
  "0xa2db14c68ab35e620fea5bf07d65e9bff84c994c",
  "0x93fb057eec37abc11d955d1c09e6a0d218f35cff",
  "0x01ab5966c1d742ae0cff7f14cc0f4d85156e83d9",
  "0x57179b2a8eb019157b0c3e761cdb26c82c982a3b",
  "0xca2f09c3ccfd7ad5cb9276918bd1868f2b922ea0",
  "0xa199f0c353e25adf022378b0c208d600f39a6505",
  "0x944350ec7614146beeaf3aebff37c6c046400431",
  "0x33777d6b944a6b51fba86d9269f68ad81076d70f",
  "0x7a2088a1bfc9d81c55368ae168c2c02570cb814f",
  "0x32467b43bfa67273fc7ddda0999ee9a12f2aaa08",
  "0xb7f8bc63bbcad18155201308c8f3540b07f84f5e",
  "0x8acd85898458400f7db866d53fcff6f0d49741ff",
  "0xe082b26cef079a095147f35c9647ec97c2401b83",
  "0x0e801d84fa97b50751dbf25036d067dcf18858bf",
  "0x9d4454b023096f34b160d6b654540c56a1f81688",
  "0x8f86403a4de0bb5791fa46b8e795c547942fe4cf",
  "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512",
  "0xdc64a140aa3e981100a9beca4e685f962f0cf6c9",
  "0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0",
  "0x4ed7c70f96b99c776995fb64377f0d4ab3b0e1c1",
  "0x67d269191c92caf3cd7723f116c85e6e9bf55933",
  "0xa85233c63b9ee964add6f2cffe00fd84eb32338f",
  "0x95401dc811bb5740090279ba06cfa8fcf6113778",
  "0xf5059a5d33d5853360d16c683c16e67980206f36",
  "0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9",
  "0x2a810409872afc346f9b5b26571fd6ec42ea4849",
  "0xb9beecd1a582768711de1ee7b0a1d582d9d72a6c",
  "0x8a93d247134d91e0de6f96547cb0204e5be8e5d8",
  "0x40918ba7f132e0acba2ce4de4c4baf9bd2d7d849",
  "0xf32d39ff9f6aa7a7a64d7a4f00a54826ef791a55",
  "0xd6e1afe5ca8d00a2efc01b89997abe2de47fdfaf",
  "0x99dbe4aea58e518c50a1c04ae9b48c9f6354612f",
  "0x8198f5d8f8cffe8f9c413d98a0a55aeb8ab9fbb7",
  "0x07882ae1ecb7429a84f1d53048d35c4bb2056877",
  "0x202cce504e04bed6fc0521238ddf04bc9e8e15ab",
  "0xa5b0631c5b393d4bf30d2974df121ea7e8b0e934",
  "0xb3da2f710c7356e4f6540752488e88e48fd00cdd",
  "0x625a692e96605c988192cd59563e5eb2f1e33c87",
  "0x5067457698fd6fa1c6964e416b3f42713513b3dd",
  "0x36b58f5c1969b7b6591d752ea6f5486d069010ab",
  "0xd8a5a9b31c3c0232e196d518e89fd8bf83acad43",
  "0x51a1ceb83b83f1985a81c295d1ff28afef186e02",
  "0xdc11f7e700a4c898ae5caddb1082cffa76512add",
  "0x5feaebfb4439f3516c74939a9d04e95afe82c4ae",
  "0x976fcd02f7c4773dd89c309fbf55d5923b4c98a1",
  "0x19ceccd6942ad38562ee10bafd44776ceb67e923",
  "0xfcdb4564c18a9134002b9771816092c9693622e3",
  "0x32eece76c2c2e8758584a83ee2f522d4788fea0f",
  "0x6c2d83262ff84cbadb3e416d527403135d757892",
  "0xa6e99a4ed7498b3cddcbb61a6a607a4925faa1b7",
  "0x5302e909d1e93e30f05b5d6eea766363d14f9892",
  "0x0ed64d01d0b4b655e410ef1441dd677b695639e7",
  "0x94d333510d985495de7d96a711be3b45f658aadf",
  "0xd7c1b2b630df30c0bfd480757b232cf1eb87dd8f",
  "0xde2bd2ffea002b8e84adea96e5976af664115e2c",
  "0x4bf010f1b9beda5450a8dd702ed602a104ff65ee",
  "0x02b0b4efd909240fcb2eb5fae060dc60d112e3a4",
  "0x2b0d36facd61b71cc05ab8f3d2355ec3631c0dd5",
  "0xfd2b51bb11b7345ba592f70a685652e18cd83946",
  "0xef0c1e6f98e433d81ae3e6611944bc06e533a47b",
  "0xbd289d4d9e174052c665e963473753bb399989be",
  "0xe0fdf6e09c4ac5aa5a8952ac32b16446ee0d0b79",
  "0xbe4fe98c9c4c0a8f3681c34c94ce2e462da5fc89",
  "0xaeec5af38c034d2f983da5948646617eee3a3372",
  "0x139f5dd0d48b9bdbf9d12e7a2a2fdc42577746ad",
  "0x15ac42377d9ed4168dff9126daf188f20b23e54d",
  "0xba5b519b80d044038159b980d1c8657d53ed08a8",
  "0xd30dacce904ebacc642ab6dd3415e6fc7b7b2e10",
  "0xbc371c5c98d40de18382e3e0eeb58805d76d3d50",
  "0x97336539bf2ab85ed83e63f294af113a7a110cd3",
  "0x19afea8633db478a5d7a8910dc2adc982c576045",
  "0x2e34a18cedf2485fba4e19495f29245a07869039",
  "0xe58501733711b966f9c1d81b29557674c11bd840",
  "0x7c8f7f618c2f84c656aeb51d652848ce76990db7",
  "0x7330bbdd9fc99cc82be0078fb643c1ddbf9be03f",
  "0x46183b8822bb7cbf27e10a1acc95dfb3b5f0ec79",
  "0xca95a91238a9fbe2458aac54cf00f99ecab14e0a",
  "0x2ca80e8e6fe46066d432204dfbc902328e912be6",
  "0x3778f359a108f48959562ecfe5ce677050c509d3",
  "0xfc62b61205a9df9699d0181896603e57a30aca28",
  "0xaf633cf595f0695aba029f210d364e1c4282986e",
  "0xac7671a932287a69a5e1115bede2687436ebed7e",
  "0x4f96fe3b7a6cf9725f59d353f723c1bdb64ca6aa",
  "0xf0d0eb522cfa50b716b3b1604c4f0fa6f04376ad",
  "0x61460874a7196d6a22d1ee4922473664b3e95270",
  "0xb8e03ce6bb337a1161ca6e53de568efbe5650eaf",
  "0xd222e5557395c5b62b682cbfd50567908592703d",
  "0xd7cf329519e749b5f3c220e644660c61acc24daa",
  "0x26d044e8a7bcd384fefd22e753229922d6693d0e",
  "0x56ca74cd7b31609a8ba666308f089e0d5e2d0584",
  "0x7d7200b2b049bb3d91bcbdf95ec0ee6c2b5f8b7e",
  "0x27e3b64c671a25c191535743d63bd06cb9b93e37",
  "0xdff4ce07253b2c3fa9dcec8b918f91d150ac26a4",
  "0x5e8732889f2d84c3d834223c38361b38d7d4b9bc",
  "0xb9978c071f2f64016a2f8515bc03bd25684201af",
  "0xeada76013c87c22843b907ce0110ea55c8e7e2a0",
  "0xe3e75ee6895f8b30d8ec3260daa20ec1aba6da77",
  "0x3bdeb796950301ffc9568faf89b7370f8b217321",
  "0x4db8602482576321f829baa593150393f7595439",
  "0x7ccf1011610138b484fcc921858e7971342d213c",
  "0x79beecc4b165ccf547662cb4f7c0e83b3796e5b3",
  "0xb453024495525908e6cc1e3c115f4b6b30cc56b9",
  "0x71dde7b8362724bd65d88fe29d42636a9f8f9064",
  "0x2a84f4e41c1f0e245a7278e32150ecf1a179b7b2",
  "0x09ad3430d146aa662ea8c20cbebcebc0bbb3fb0a",
  "0x187fc9fb37df0fbf75149913a97b17c968fc90d0",
  "0x184c1f83b3eb75a2dac483d4a6b9fbd59df961f8",
  "0xc1526892198796d30d33355cff9af10eed5b86a0",
  "0x14204288286823042263156146334b1a4d61227c",
  "0x4136dfd47f47792fc820e2354e9f0ce8e9c586a6",
  "0x88e111b2a42457655a34896e5b929a75e7b82f88",
  "0x0dd5e1869da5c9c7d7c49364687534bda7fb7020",
  "0x3baeeff20cb02a5b8ef413c611c015e69221663e",
  "0x30a5ba8ed4864bf3b1fa30c78ac774fa9d5c62cc",
  "0xe2c57968b52a417132511fbdcab1763d41a4f270",
  "0xd2cf3205ea36aeff3cf0e8e8701eae40aa3f6e4f",
  "0x2aee03bb8b182af876b9d008af9416d2a3df6db3",
  "0xeff1efcf1f0247f82b0d8406f32831b00bfdf729",
  "0x3419945657b6bd89dafd7f2bafc75ff46511298f",
  "0xe8c67a909d3231ddd97e4cc2c1b17a8ffa94475e",
  "0x1a521868ed7b4d8835f1f52172d38c1c3e630e92",
  "0xe1193de8716400ee5ad7b4b96cbdf0dabaf7d088",
  "0x98867484e2f0c902f64bcdedc2e289307c988214",
  "0x2aad517de8256ee6dc7ce31ae09ebb99f17f9975",
  "0x2250c5131bf9ddcbd55f9befc999d691c419ad93",
  "0x292c17365d729d367f4556f1bd17eb8434ebf6d1",
  "0x22a4720e32e3419e809731e7114042d6c3055845",
  "0x4d347bda25bef041bfcb5205deecd1a33ab46db9",
  "0x11655e9d725fc1f8d1410c03f136ac586f7161ee",
  "0xd458baec7e8864a2c9c2e1261d87a4faf77002b7",
  "0xf76d4a441e4ba86a923ce32b89aff89dbccaa075",
  "0x163b69fa3a7d3e5347a29a5a49b282c35d17c87a",
  "0x28b3bc8f2a1e5cf3bfe06d22971955a53a0f52d8",
  "0xfc32f09b85ab3134195bc237c2b69001b5c609db",
  "0x57b2c85934ef1a891ec9b9945f3fdbcf1104c302",
  "0x416b5a5e12235de6838d62fd053e7ce59e944426",
  "0x9059f66843f564f7870f7135fb039eb2034a23a3",
  "0x90de2f86dbdb2110a798326e880c83bc8779d149",
  "0x2ef9f88eeb737655ff01f9b5017f1e3399726af1",
  "0x035a59f228e776cc396a8f5e1cef989e235b0035",
  "0xc65ccb966873969179b6b0ba53d67d14bbf1204c",
  "0xbb02f06762fbc51ad222915e6855f7482a93f9cd",
  "0xbb976201b607f16dc76586db8ca5ef6c50c41c22",
  "0x180faf09add6a27554b11a131dce6f6a3ddf4cbf",
  "0xb8357f7f41125d4b24ad052c1b7288bef5c43446",
  "0x63766f0efaa46a86e9055bb46e41ff7bc64cbea2",
  "0x94a9d2532da2d9153336159907604a01c3e91c11",
  "0x0b57fd12f7a95c322ad176d23765507ce09892cb",
  "0xf6ee31185ac05c2b558ff2a561c600af3e9486dd",
  "0xc20654db7f9483f10c91dc94924dc8f04f79bfd5",
  "0x6852adb5fce1d73c08a9b3aa7ede9a03437ac2fe",
  "0x24ef01de6bae76ee73da210940a296f739d87952",
  "0xb10982193b39eda3428d6aaebbd7986f2a2baa1a",
  "0x74156a1f9736307b7ad34e3691f3a5b54a0b3eb8",
  "0x0db32f0b116773fdd78c2e1b5e6609cc502e6784",
  "0xcd8a1c3ba11cf5ecfa6267617243239504a98d90",
  "0xe528aaca8e7cd3ce503bb4a2deadfd4088229e1f",
  "0x77423ae3ce64482ef3bb601a2ea42cf30349735a",
  "0x6804db9596c651a1ca24bbb821712a8899932d76",
  "0xa36adae77b1f6f87ed60aafef9c080c38ca30d0f",
  "0x411ceb987f801cdea5a301a0ccfa4a5df37f3f7f",
  "0x1333788523bea7c7cbdd0684bd1ee75e940ff0eb",
  "0x50589243cb1d8eef751f4bab253aabef6e434c0d",
  "0x214c3c71191ab9bd868a5f408a61c540c787662f",
  "0x1fb0d426927dab092def63b73e1397b3f29e7b33",
  "0xe4feed16f54b4244c174b408ba3b5f1f19dd1e4d",
  "0xe7213b68dc25bf30bc7f1de9baead075c66979f9",
  "0x570adc5880d778ae5935f199aa590091586cdf75",
  "0x24f2d7c50357c7b1156ca85945d3a901c88651cb",
  "0xc782ee4b0d6204ff77471884bb95d2d2f8d60fe6",
  "0x4bfd12e943f25621d4fa368ca7a5c0e7f6488000",
  "0xb2377aae57f2072f52fbc38696be573af2ce5bd9",
  "0x5bbaf48c102373b55079f941c40822c96e715d62",
  "0x67d49faf26ca6a34d483b6bdfa45824eda64d509",
  "0xe9ed26a450ac15ea88b5801e5940b58f2f778b03",
  "0xe3963ef7cc3044b64842d0aae7f2bf1543d341ec",
  "0x30474ce2de03045b8d0ae76f8a30dbfc8f000cea",
  "0xadf7b0f46eb35c748438f3e215f064e01cc7f5df",
  "0x0037272a7048132b10dd8970ac964bab2fdb3f62",
  "0xe8e9b139c6477d4ead599be5f2bb9335533d14f7",
  "0x8b87065fdfe4a130108e50f74ae7f85cd20a5967",
  "0xf47e3b0a1952a81f1afc41172762cb7ce8700133",
  "0xb4059a6808af368a69d12fbbd104bb6b9c37e629",
  "0x79613d7834ad35ee8dc3f9298030eaadc2a8c250",
  "0x6397866132887b206eea19f910730443e71a8cfb",
  "0xc2e1fc63ce06c279c5de18d7119c7ca123b42c1c",
  "0x9301981f27950e6546033eadd046c86754263f2d",
  "0x89be7d874a17cd0295b2d86436a920593b5f4480",
  "0xdff3455e08ab33b1599d1c5b5a1d65de63d3fcd0",
  "0xfae6fa2097792edfd7429a282f21ec2d955279d9",
  "0xc87fab8a8cdd346079ca6177e47408ba18066104",
  "0xd50604e530ff36b2747ae8574b37b21b9f779d37",
  "0x40f42698a07b19ac431cc115a7b9cddd294d248b",
  "0x78a76ad9a5d4a1d0c9fabca20083442160840d0c",
  "0x6d728de2be4b3d7c6b50e6f3bf46ca1f64df7820",
  "0x6bc7a1310dfe3efe7401aff3c598c9d948f8b245",
  "0x1a231e22be9923ee4c453095a7a94820d930a553",
  "0xf24ef005134208ac62ad50eafd052ddb2c3e7bb5",
  "0xc60411d3bc9f36946a6de1f3890c214192255497",
  "0x24d19000790fd11e244e76fa4d86fdd92e57c144",
  "0xf22ef80a76f41424b813c9b38b3064dbfa87cf79",
  "0x9093b908b35c08f2e8deaba352d5c319952a7e55",
  "0x66fb63cb6c4e2800db9d1691b3d00361ada9de61",
  "0xf629c80bfcaa9080e229b555924d5c72b47f5c22",
  "0x27816e32270a413af676a2e3a25db93c7f565a80",
  "0x1189c2227baa8f0749e842b366b0912d29a5a04e",
  "0x7599f95677cb14d7d8834a58b3b0545a13870a56",
  "0x2e975e7711088aafb38119454ff7fb99baa9142f",
  "0x52f0584bfb6f55cc4a3e351427facba7e23a3fd4",
  "0xfcf6029bd177370c79173d48e05aaff3c5f0c0bc",
  "0x33d3712b90ade5d7363f3548650e508ad8eacfaa",
  "0xc43514e62190a6253c56c7c50dadb907e3eda666",
  "0x70f361edb97b245e8a68573637a31886a427fe2a",
  "0x83eee673ba91ff49b7e608e761e7bda93bbb5900",
  "0x763b49f901dc894f2dec1c7d19e46250b4452679",
  "0xe39236a9cf13f65db8add06bd4b834c65c523d2b",
  "0xe63402a7dc11ab4d03c477cc92209463a55a5134",
  "0x80312bad9dd71d3a159e794b7fb1b2386f82f07f",
  "0xcf624dfda707de7c7a5669a472f81dac130264c3",
  "0x86d43f93ed9ad1182981c19567f83bac1dc1513b",
  "0x18525875bd0259d3efe1c04927a027fad8ca0b86",
  "0x54469071ca82b46a2c01c09d38ca6ca4347eb21d",
  "0x1495d6f5434376981778f64c63d2e15da25b0541",
  "0x0af5ef8cdcedddd9033cef1e83b0ae54f3a793a5",
  "0x28523b680d4ffbd6e4fc95c3c12f5485f9635e00",
  "0xb6808120fb648c0bdc483ec423d933a7ebf6bb0a",
  "0x11c9dbca722770e8802f0c3d65c38768e91ac53c",
  "0x2961a6c2fe39f0ffc4f4b1d9e037cd95f4e9c993",
  "0x7912636d68e5d92708862b38698f764bf1ec297c",
  "0x240d844ada767be0ab08f9bcccb6d8a04ae370ec",
  "0xc116be98ad4574ee771553a0977fa9591d48c383",
  "0x5d007a7633d05b0ddd068b71e8448cd1fcdbd823",
  "0x05eb1c46bd539fd2a098b06d83a5bb81e5a58e63",
  "0x36de29db57062a583436ae071e141404dfe2311c",
  "0x105678e10c32a29543902067fed1bb2e5e0b3cee",
  "0xff73f4deeffe4f7e53e20d757b99d82d465c93b9",
  "0x1dfbd51e464e45a9dfe33b79222d6b3f0bedc1f0",
  "0xb3375a6f09cfff8591577d03133eeaf39ca76a84",
  "0xfd6f7a6a5c21a3f503ebae7a473639974379c351",
  "0x137dbc6fd877d802c567b74741d9b2526685718a",
  "0x86a2ee8faf9a840f7a2c64ca3d51209f9a02081d",
  "0x34b40ba116d5dec75548a9e9a8f15411461e8c70",
  "0x5971b98c0066517bae7d44021f42e50b77cfe1f9",
  "0xf380bc8b4e595deca3a55a4c98a6c4fa1c96f537",
  "0x724dbc61127e39a610be416b455deb800d51a3b2",
  "0x720472c8ce72c2a2d711333e064abd3e6bbeadd3",
  "0x4c4a2f8c81640e47606d3fd77b353e87ba015584",
  "0x2e2ed0cfd3ad2f1d34481277b3204d807ca2f8c2",
  "0x21df544947ba3e8b3c32561399e88b52dc8b2823",
  "0xce17442a9e26bcfdfab2e9028e3a655d046f1654",
  "0xe88cd74511b17f10363b557c2e9632caab353b39",
  "0x3b7bf1232414bc52e3c233d0af8524f259463034",
  "0xa6f88e890518adab4517f95c74b0af4370b7e0be",
  "0xa3b0167657e47aba3b541c1b21448b449f2ce3bc",
  "0xfe67c7f6d6a9eda3ade28d8d1bdf1b764491e823",
  "0x9bdb9d2ad7aaf2763e49aa518a3b3cc4798210c6",
  "0xfe16b3e38b6eeb8f4ea0c820cb4547ec03edfe0e",
  "0xab06522cff9ec6302a32b9db057293e80e1bc43a",
  "0x5d42ebdbba61412295d7b0302d6f50ac449ddb4f",
  "0xdde78e6202518ff4936b5302cc2891ec180e8bff",
  "0xb06c856c8eabd1d8321b687e188204c1018bc4e5",
  "0xab7b4c595d3ce8c85e16da86630f2fc223b05057",
  "0xa51c1fc2f0d1a1b8494ed1fe312d7c3a78ed91c0",
  "0x8f19e89ed457ca4a3cb0df96653d1952f465ca4a",
  "0x810d8eb0bc99faebc340eca183e0110cf0635a89",
  "0x0b92ee05abeeeedef0a0e861468a4317d6e2ac93",
  "0x0165878a594ca255338adfa4d48449f69242eb8f",
  "0x9bd03768a7dcc129555de410ff8e85528a4f88b5",
  "0x23db4a08f2272df049a4932a4cc3a6dc1002b33e",
  "0x61c36a8d610163660e21a8b7359e1cac0c9133e1",
  "0xe6e340d132b5f46d1e472debcd681b2abc16e57e",
  "0x5fbdb2315678afecb367f032d93f642f64180aa3",
  "0x4659176e962763e7c8a4ef965ecfd0fdf9f52057",
  "0xe26867ddd22f9342d9f0d566d182f2c960683971",
  "0x3a9299be789ac3730e4e4c49d6d2ad1b8bc34dff",
  "0xc2ff55b896e3c42f9e1c2f7467c51b93f1c23dfd",
  "0xf34552f1583c0b981dbb09611128c3375b47182e",
  "0xfaf457fb4a978be059506f6cd41f9b30fca753b0",
  "0x87d77a30a6819860eb8332d293810ed7b510035a",
  "0x622e1131155c6a33616fa4d97273096b047e7102",
  "0x30d37b05cf73edd8c59ce8450f093f6c06da9272",
  "0x6c35677206ae7ff1bf753877649cf57cc30d1c42",
  "0x0a8c6bb832801454f6cc21761d0a293caa003296",
  "0x3f55bd3b432edc73bbb704fa5a29cc08dc1adbeb",
  "0x12d15efc3c9661ad68209cd197d416bfd9b145f5",
  "0xfc918f32d89b7592fbda5a0fbc7eaa0c9a0d5d4a",
  "0x62305662fa7c4bc442803b940d9192dbdc92d710",
  "0x5f6f25143cd580e2e285210d7cfcb26e59cf9566",
  "0xa99ba154223052b8c5fd92b3f5df9eb08b72d5fc",
  "0xd33ba17c8a644c585089145e86e282fada6f3bfd",
  "0x02416eb83cff1f19163f21010149c3867f3261e1",
  "0xf4c34bed7dd779485692bb1857acf9c561b45010",
  "0x06eafc6749723583672fc8f4451c8ec0e59f5798",
  "0xa049894d5dcad406b7c827d6dc6a0b58ca4ae73a",
  "0xc00e94cb662c3520282e6f5717214004a7f26888",
  "0xda85fced9bd193526b7667f2ad1fd4a0f900d3a7",
  "0xec6dce387b1616a0c44ff2e4fa9e90e53cf14eb0",
  "0xdac6a0c973ba7cf3526de456affa43ab421f659f",
  "0xa150a825d425b36329d8294eef8bd0fe68f8f6e0",
  "0x98fa532dd5c3a6b66fbf370813803192de4e0abd",
  "0x78cc5ab2f0990b5fe58f95baebf8f37879534aeb",
  "0xf4411c22766947db2da39ad534a040b770b51153",
  "0x5766cf4b2fdb09d986eb1783d276013c224e28c8",
  "0x0c6c80d2061afa35e160f3799411d83bdeea0a5a",
  "0x603b8c0f110e037b51a381cbcacabb8d6c6e4543",
  "0x57ee6ceff51cb30ecb1245934a882c500fbec1e9",
  "0x6f1b4dfdd7156fc5752541ef35edf57b48e74475",
  "0x7b7246c78e2f900d17646ff0cb2ec47d6ba10754",
  "0x3ff2d8eb2573819a9ef7167d2ba6fd6d31b17f4f",
  "0x765277eebeca2e31912c9946eae1021199b39c61",
  "0xd17652350cfd2a37ba2f947c910987a3b1a1c60d",
  "0x1ae4929090258a9d5000d98cfb8a27174d345834",
  "0xb7c3e738224625289c573c54d402e9be46205546",
  "0xd253a5203817225e9768c05e5996d642fb96ba86",
  "0xbe43ecb37af7f7c4a8606e672c504be55fc6226b",
  "0x9a34822112bc73bdc941c62dcc311ca905aef2a3",
  "0x99c22e78a579e2176311c736c4c9f0b0d5a47806",
  "0xf2283840ce37dae0a06b40a9a80603977f36fa3f",
  "0xcd5e8a81b1e02c1837a674f87df327c14f4e5748",
  "0x3d0bacbdc06a28971855275d511e6249be67112d",
  "0x96b81f82a29e78c5ba9e2034ce8490fd641a24eb",
  "0x563a80a452264a9e1aa37c6fa0b46d04c3c71b24",
  "0xac132ece25217867e318ea8ff63420c90d5a74a6"
];

setMulticallAddress(122, "0x3CE6158b7278Bf6792e014FA7B4f3c6c46fe9410");
const fuseProvider = new ethers.providers.WebSocketProvider("wss://rpc.gooddollar.org");
const ethcallProvider = new Provider(fuseProvider, 122);

const GD_FUSE = "0x495d133b938596c9984d462f007b676bdc57ecec";
const IDENTITY_FUSE = "0xFa8d865A962ca8456dF331D78806152d3aC5B84F";

let gd = new ethers.Contract(
  GD_FUSE,
  [
    "event Transfer(address indexed from, address indexed to, uint amount)",
    "function balanceOf(address) view returns(uint256)"
  ],
  fuseProvider
);
const identityContract = new Contract(IDENTITY_FUSE, Identity.abi);

/**
 * in/out G$ to a specific address (here used for invites)
 */
const main = async () => {
  const curBlock = await fuseProvider.getBlockNumber();
  let p2pTxs = [];
  let uniques = [];
  const f = gd.filters.Transfer();
  const STEP_SIZE = 5000;
  const fromBlocks = range(curBlock - 6e5, curBlock, STEP_SIZE); //600k blocks roughly a month
  const pool = new PromisePool({ concurrency: 2 });
  console.log({ curBlock });
  fromBlocks.forEach(fromBlock => {
    pool.add(async () => {
      const options = { limit: 20, delay: 2000 };
      const retrier = new Retrier(options);

      const results = await retrier
        .resolve(() => gd.queryFilter(f, fromBlock, fromBlock + STEP_SIZE))
        .catch(e => console.warn("queryfilter failed:", { fromBlock }));
      if (!results) return;
      const clean = results.filter(
        _ =>
          !(
            allProtocolAddresses.includes(_.args.to.toLowerCase()) ||
            allProtocolAddresses.includes(_.args.from.toLowerCase())
          )
      );

      const checkWhitelisted = uniq(flatten(clean.map(_ => [_.args.from.toLowerCase(), _.args.to.toLowerCase()])));
      const calls = checkWhitelisted.map(d => identityContract.isWhitelisted(d));
      const result = await ethcallProvider.all(calls);
      const whitelisted = checkWhitelisted.filter((v, i) => result[i]);
      const p2p = clean.filter(
        _ => whitelisted.includes(_.args.to.toLowerCase()) || whitelisted.includes(_.args.from.toLowerCase())
      );
      p2pTxs = p2pTxs.concat(p2p);
      uniques = uniques.concat(whitelisted);
      console.log({ fromBlock }, results.length, clean.length, checkWhitelisted.length, whitelisted.length, p2p.length);
    });
  });

  await pool.all();

  uniques = uniq(uniques);
  console.log(p2pTxs.length, uniques.length);
  fs.writeFileSync("p2pTxs.json", JSON.stringify({ p2pTxs, uniques }));
};

const analyze = () => {
  const { p2pTxs } = JSON.parse(fs.readFileSync("p2pTxs.json").toString());
  let value = 0;
  console.log(p2pTxs[0]);
  p2pTxs.forEach(tx => {
    value += Number(tx.args[2].hex);
  });
  console.log(p2pTxs.length, { value });
};
analyze();
// main().catch(e => console.error("Error:", e.message));
