From 2fa8e1077c16de871716031e3d87dce0399e466b Mon Sep 17 00:00:00 2001 From: Sebastien Guillemot Date: Sun, 15 Sep 2024 02:13:02 +0900 Subject: [PATCH] push some old code --- indexer/genesis/mainnet-shelley-genesis.json | 68 +++ indexer/genesis/preprod-shelley-genesis.json | 72 +++ indexer/genesis/preview-shelley-genesis.json | 68 +++ .../genesis/sanchonet-shelley-genesis.json | 56 ++ indexer/genesis/test-byron-genesis.json | 94 ++++ indexer/genesis/test-shelley-genesis.json | 116 +++++ indexer/genesis/testnet-byron-genesis.json | 481 ------------------ indexer/src/engine.rs | 8 +- indexer/src/genesis.rs | 87 +++- indexer/src/sink.rs | 2 + indexer/src/sinks/cardano.rs | 129 +++-- 11 files changed, 656 insertions(+), 525 deletions(-) create mode 100644 indexer/genesis/mainnet-shelley-genesis.json create mode 100644 indexer/genesis/preprod-shelley-genesis.json create mode 100644 indexer/genesis/preview-shelley-genesis.json create mode 100644 indexer/genesis/sanchonet-shelley-genesis.json create mode 100644 indexer/genesis/test-byron-genesis.json create mode 100644 indexer/genesis/test-shelley-genesis.json delete mode 100644 indexer/genesis/testnet-byron-genesis.json diff --git a/indexer/genesis/mainnet-shelley-genesis.json b/indexer/genesis/mainnet-shelley-genesis.json new file mode 100644 index 00000000..e8cc20dc --- /dev/null +++ b/indexer/genesis/mainnet-shelley-genesis.json @@ -0,0 +1,68 @@ +{ + "activeSlotsCoeff": 0.05, + "protocolParams": { + "protocolVersion": { + "minor": 0, + "major": 2 + }, + "decentralisationParam": 1, + "eMax": 18, + "extraEntropy": { + "tag": "NeutralNonce" + }, + "maxTxSize": 16384, + "maxBlockBodySize": 65536, + "maxBlockHeaderSize": 1100, + "minFeeA": 44, + "minFeeB": 155381, + "minUTxOValue": 1000000, + "poolDeposit": 500000000, + "minPoolCost": 340000000, + "keyDeposit": 2000000, + "nOpt": 150, + "rho": 0.003, + "tau": 0.20, + "a0": 0.3 + }, + "genDelegs": { + "ad5463153dc3d24b9ff133e46136028bdc1edbb897f5a7cf1b37950c": { + "delegate": "d9e5c76ad5ee778960804094a389f0b546b5c2b140a62f8ec43ea54d", + "vrf": "64fa87e8b29a5b7bfbd6795677e3e878c505bc4a3649485d366b50abadec92d7" + }, + "b9547b8a57656539a8d9bc42c008e38d9c8bd9c8adbb1e73ad529497": { + "delegate": "855d6fc1e54274e331e34478eeac8d060b0b90c1f9e8a2b01167c048", + "vrf": "66d5167a1f426bd1adcc8bbf4b88c280d38c148d135cb41e3f5a39f948ad7fcc" + }, + "60baee25cbc90047e83fd01e1e57dc0b06d3d0cb150d0ab40bbfead1": { + "delegate": "7f72a1826ae3b279782ab2bc582d0d2958de65bd86b2c4f82d8ba956", + "vrf": "c0546d9aa5740afd569d3c2d9c412595cd60822bb6d9a4e8ce6c43d12bd0f674" + }, + "f7b341c14cd58fca4195a9b278cce1ef402dc0e06deb77e543cd1757": { + "delegate": "69ae12f9e45c0c9122356c8e624b1fbbed6c22a2e3b4358cf0cb5011", + "vrf": "6394a632af51a32768a6f12dac3485d9c0712d0b54e3f389f355385762a478f2" + }, + "162f94554ac8c225383a2248c245659eda870eaa82d0ef25fc7dcd82": { + "delegate": "4485708022839a7b9b8b639a939c85ec0ed6999b5b6dc651b03c43f6", + "vrf": "aba81e764b71006c515986bf7b37a72fbb5554f78e6775f08e384dbd572a4b32" + }, + "2075a095b3c844a29c24317a94a643ab8e22d54a3a3a72a420260af6": { + "delegate": "6535db26347283990a252313a7903a45e3526ec25ddba381c071b25b", + "vrf": "fcaca997b8105bd860876348fc2c6e68b13607f9bbd23515cd2193b555d267af" + }, + "268cfc0b89e910ead22e0ade91493d8212f53f3e2164b2e4bef0819b": { + "delegate": "1d4f2e1fda43070d71bb22a5522f86943c7c18aeb4fa47a362c27e23", + "vrf": "63ef48bc5355f3e7973100c371d6a095251c80ceb40559f4750aa7014a6fb6db" + } + }, + "updateQuorum": 5, + "networkId": "Mainnet", + "initialFunds": {}, + "maxLovelaceSupply": 45000000000000000, + "networkMagic": 764824073, + "epochLength": 432000, + "systemStart": "2017-09-23T21:44:51Z", + "slotsPerKESPeriod": 129600, + "slotLength": 1, + "maxKESEvolutions": 62, + "securityParam": 2160 +} diff --git a/indexer/genesis/preprod-shelley-genesis.json b/indexer/genesis/preprod-shelley-genesis.json new file mode 100644 index 00000000..24862eb8 --- /dev/null +++ b/indexer/genesis/preprod-shelley-genesis.json @@ -0,0 +1,72 @@ +{ + "activeSlotsCoeff": 0.05, + "epochLength": 432000, + "genDelegs": { + "637f2e950b0fd8f8e3e811c5fbeb19e411e7a2bf37272b84b29c1a0b": { + "delegate": "aae9293510344ddd636364c2673e34e03e79e3eefa8dbaa70e326f7d", + "vrf": "227116365af2ed943f1a8b5e6557bfaa34996f1578eec667a5e2b361c51e4ce7" + }, + "8a4b77c4f534f8b8cc6f269e5ebb7ba77fa63a476e50e05e66d7051c": { + "delegate": "d15422b2e8b60e500a82a8f4ceaa98b04e55a0171d1125f6c58f8758", + "vrf": "0ada6c25d62db5e1e35d3df727635afa943b9e8a123ab83785e2281605b09ce2" + }, + "b00470cd193d67aac47c373602fccd4195aad3002c169b5570de1126": { + "delegate": "b3b539e9e7ed1b32fbf778bf2ebf0a6b9f980eac90ac86623d11881a", + "vrf": "0ff0ce9b820376e51c03b27877cd08f8ba40318f1a9f85a3db0b60dd03f71a7a" + }, + "b260ffdb6eba541fcf18601923457307647dce807851b9d19da133ab": { + "delegate": "7c64eb868b4ef566391a321c85323f41d2b95480d7ce56ad2abcb022", + "vrf": "7fb22abd39d550c9a022ec8104648a26240a9ff9c88b8b89a6e20d393c03098e" + }, + "ced1599fd821a39593e00592e5292bdc1437ae0f7af388ef5257344a": { + "delegate": "de7ca985023cf892f4de7f5f1d0a7181668884752d9ebb9e96c95059", + "vrf": "c301b7fc4d1b57fb60841bcec5e3d2db89602e5285801e522fce3790987b1124" + }, + "dd2a7d71a05bed11db61555ba4c658cb1ce06c8024193d064f2a66ae": { + "delegate": "1e113c218899ee7807f4028071d0e108fc790dade9fd1a0d0b0701ee", + "vrf": "faf2702aa4893c877c622ab22dfeaf1d0c8aab98b837fe2bf667314f0d043822" + }, + "f3b9e74f7d0f24d2314ea5dfbca94b65b2059d1ff94d97436b82d5b4": { + "delegate": "fd637b08cc379ef7b99c83b416458fcda8a01a606041779331008fb9", + "vrf": "37f2ea7c843a688159ddc2c38a2f997ab465150164a9136dca69564714b73268" + } + }, + "initialFunds": {}, + "maxKESEvolutions": 62, + "maxLovelaceSupply": 45000000000000000, + "networkId": "Testnet", + "networkMagic": 1, + "protocolParams": { + "protocolVersion": { + "minor": 0, + "major": 2 + }, + "decentralisationParam": 1, + "eMax": 18, + "extraEntropy": { + "tag": "NeutralNonce" + }, + "maxTxSize": 16384, + "maxBlockBodySize": 65536, + "maxBlockHeaderSize": 1100, + "minFeeA": 44, + "minFeeB": 155381, + "minUTxOValue": 1000000, + "poolDeposit": 500000000, + "minPoolCost": 340000000, + "keyDeposit": 2000000, + "nOpt": 150, + "rho": 0.003, + "tau": 0.20, + "a0": 0.3 + }, + "securityParam": 2160, + "slotLength": 1, + "slotsPerKESPeriod": 129600, + "staking": { + "pools": {}, + "stake": {} + }, + "systemStart": "2022-06-01T00:00:00Z", + "updateQuorum": 5 +} diff --git a/indexer/genesis/preview-shelley-genesis.json b/indexer/genesis/preview-shelley-genesis.json new file mode 100644 index 00000000..20abba3f --- /dev/null +++ b/indexer/genesis/preview-shelley-genesis.json @@ -0,0 +1,68 @@ +{ + "activeSlotsCoeff": 0.05, + "epochLength": 86400, + "genDelegs": { + "12b0f443d02861948a0fce9541916b014e8402984c7b83ad70a834ce": { + "delegate": "7c54a168c731f2f44ced620f3cca7c2bd90731cab223d5167aa994e6", + "vrf": "62d546a35e1be66a2b06e29558ef33f4222f1c466adbb59b52d800964d4e60ec" + }, + "3df542796a64e399b60c74acfbdb5afa1e114532fa36b46d6368ef3a": { + "delegate": "c44bc2f3cc7e98c0f227aa399e4035c33c0d775a0985875fff488e20", + "vrf": "4f9d334decadff6eba258b2df8ae1f02580a2628bce47ae7d957e1acd3f42a3c" + }, + "93fd5083ff20e7ab5570948831730073143bea5a5d5539852ed45889": { + "delegate": "82a02922f10105566b70366b07c758c8134fa91b3d8ae697dfa5e8e0", + "vrf": "8a57e94a9b4c65ec575f35d41edb1df399fa30fdf10775389f5d1ef670ca3f9f" + }, + "a86cab3ea72eabb2e8aafbbf4abbd2ba5bdfd04eea26a39b126a78e4": { + "delegate": "10257f6d3bae913514bdc96c9170b3166bf6838cca95736b0e418426", + "vrf": "1b54aad6b013145a0fc74bb5c2aa368ebaf3999e88637d78e09706d0cc29874a" + }, + "b799804a28885bd49c0e1b99d8b3b26de0fac17a5cf651ecf0c872f0": { + "delegate": "ebe606e22d932d51be2c1ce87e7d7e4c9a7d1f7df4a5535c29e23d22", + "vrf": "b3fc06a1f8ee69ff23185d9af453503be8b15b2652e1f9fb7c3ded6797a2d6f9" + }, + "d125812d6ab973a2c152a0525b7fd32d36ff13555a427966a9cac9b1": { + "delegate": "e302198135fb5b00bfe0b9b5623426f7cf03179ab7ba75f945d5b79b", + "vrf": "b45ca2ed95f92248fa0322ce1fc9f815a5a5aa2f21f1adc2c42c4dccfc7ba631" + }, + "ef27651990a26449a40767d5e06cdef1670a3f3ff4b951d385b51787": { + "delegate": "0e0b11e80d958732e587585d30978d683a061831d1b753878f549d05", + "vrf": "b860ec844f6cd476c4fabb4aa1ca72d5c74d82f3835aed3c9515a35b6e048719" + } + }, + "initialFunds": {}, + "maxKESEvolutions": 62, + "maxLovelaceSupply": 45000000000000000, + "networkId": "Testnet", + "networkMagic": 2, + "protocolParams": { + "protocolVersion": { + "minor": 0, + "major": 6 + }, + "decentralisationParam": 1, + "eMax": 18, + "extraEntropy": { + "tag": "NeutralNonce" + }, + "maxTxSize": 16384, + "maxBlockBodySize": 65536, + "maxBlockHeaderSize": 1100, + "minFeeA": 44, + "minFeeB": 155381, + "minUTxOValue": 1000000, + "poolDeposit": 500000000, + "minPoolCost": 340000000, + "keyDeposit": 2000000, + "nOpt": 150, + "rho": 0.003, + "tau": 0.20, + "a0": 0.3 + }, + "securityParam": 432, + "slotLength": 1, + "slotsPerKESPeriod": 129600, + "systemStart": "2022-10-25T00:00:00Z", + "updateQuorum": 5 +} diff --git a/indexer/genesis/sanchonet-shelley-genesis.json b/indexer/genesis/sanchonet-shelley-genesis.json new file mode 100644 index 00000000..54458599 --- /dev/null +++ b/indexer/genesis/sanchonet-shelley-genesis.json @@ -0,0 +1,56 @@ +{ + "activeSlotsCoeff": 5.0e-2, + "epochLength": 86400, + "genDelegs": { + "c1ad22cabb342cbb83ce3859708232f4945ccb669e9b5f932cffc0ed": { + "delegate": "405357b552c397e81f73dcb5a0da0828fe29610bd25197d86130df34", + "vrf": "458215df6c07abc66e80082caa7a189dc2f4995ad4b4b5f09481a55d8d0692d2" + }, + "c264bca994a3a5deee5a1d9b92a3d7e9d6cbdb81f2f6989bb7f7b437": { + "delegate": "d9d9d0f0e1f25c4af4d80cb2d62878b611d8b3a8e1ef548d01f246d7", + "vrf": "624f1bf3b2f978e0c95644f26228b307d7acca7fc7eb3d88fb6f107e0aa1198c" + }, + "d4bf7eb45b72dffa5ac33d5c902fe409e4e611f2e9a52fb0d09784c3": { + "delegate": "806eb0c17d9b0fe6d99acbabe7be76ef72bf9de96c5b58435e50837f", + "vrf": "57e52289207a7128c29e0b7e96a02c731a961a5944329b363bed751ad8f377ee" + } + }, + "initialFunds": {}, + "maxKESEvolutions": 62, + "maxLovelaceSupply": 45000000000000000, + "networkId": "Testnet", + "networkMagic": 4, + "protocolParams": { + "a0": 0.3, + "decentralisationParam": 1.0, + "eMax": 18, + "extraEntropy": { + "tag": "NeutralNonce" + }, + "keyDeposit": 2000000, + "maxBlockBodySize": 65536, + "maxBlockHeaderSize": 1100, + "maxTxSize": 16384, + "minFeeA": 44, + "minFeeB": 155381, + "minPoolCost": 340000000, + "minUTxOValue": 1000000, + "nOpt": 150, + "poolDeposit": 500000000, + "protocolVersion": { + "major": 6, + "minor": 0 + }, + "rho": 3.0e-3, + "tau": 0.2 + }, + "securityParam": 432, + "slotLength": 1, + "slotsPerKESPeriod": 129600, + "staking": { + "pools": {}, + "stake": {} + }, + "systemStart": "2023-06-15T00:30:00Z", + "updateQuorum": 3 +} \ No newline at end of file diff --git a/indexer/genesis/test-byron-genesis.json b/indexer/genesis/test-byron-genesis.json new file mode 100644 index 00000000..74d18498 --- /dev/null +++ b/indexer/genesis/test-byron-genesis.json @@ -0,0 +1,94 @@ +{ + "bootStakeholders": { + "05d1c10e4bf3cdd4de54712531c53be75a1609b25f396ffbbe5becf1": 1, + "3bf1193b19be416283b8c0516d2f8b80939ffccb1c9b05946f54c83a": 1, + "7bdd769bd872e8e6336c23f1e566c19a96e72137174b891fad9f4b99": 1, + "9ddc1e29c59df0ddd9347fe8b8a736d247f286414684eddc02885348": 1, + "a118c0d2737c8a77c0d982a0d299bc42614cea4e0c23614ba24a05ca": 1, + "b0b2df3c9cf4dfe2ae04409913b3c3125509acbbfa0722449570aaeb": 1, + "e0a65f21229e44c2bf6eec5b14e2775003b674ae53de18d22814346a": 1 + }, + "heavyDelegation": { + "05d1c10e4bf3cdd4de54712531c53be75a1609b25f396ffbbe5becf1": { + "omega": 0, + "issuerPk": "UFsjehyxQAIMxEL25RxqD0itM0RCdzWprVt1W+zopM5b7U9ru9AMr/zf9lAjWaFlNOpRgrrbz7r5tRbt8wUmSg==", + "delegatePk": "iwlg0jS9pn1SQyxdGiasor+1uaCflm2Vkqe/DHKKHs2EDqxcP+in7doCSnQDttN3BZkIKLNUgzKj+FAiHCCYvw==", + "cert": "633fc347138ee155d038b9d1040ee1e45cea5b1e8627046c95f7fe4ba949b0569437962568eadef9d49e22becbf30192425c008d10e03004612633dbc307340b" + }, + "3bf1193b19be416283b8c0516d2f8b80939ffccb1c9b05946f54c83a": { + "omega": 0, + "issuerPk": "pAIACMG6WCa4mz0tVoeekLXYuWkdxk/rgDuZ/x7ugh3CvEuhpGf2LRRRWilaGdraH1sCbnuMCmAHrBTbPDFmxA==", + "delegatePk": "0ajebKqP2bF1xZhi7N1avNBHe4S4Kg5S+uzGs8hRAKR1IW/7ZOp0U3AhQFuzKLD3BuSq1xV3leMWeBzKEg2slg==", + "cert": "eb5c4d76c7bfca2ab790a76f7dc4c6d9f7d0956d4af3b8c649804ef98beeb138d8916982c9142747b7a07e69f52b2c3776d64a7d74494e0f72eefaebf6bf5d07" + }, + "7bdd769bd872e8e6336c23f1e566c19a96e72137174b891fad9f4b99": { + "omega": 0, + "issuerPk": "P7JjeSPHjexNW5MsCaySrURaqV2gCgXttEe0CgfFnVZFGHaS9A4xEUrQ83VTLPjk+HV0Di19DjQ+DhS1M6Mf7A==", + "delegatePk": "jvMgwt9mVKYYjEXpxjnApoa/WoZSlVh9OZ3+sF/nSrZ5YaaWsmjIvOyTcrxzqpsTZewAez36BTnqwA0VSjFRjA==", + "cert": "9ef9f0e5ca23cd9365ec7a23f1b2d159da0d58e0242cb817c3bc946ba1c9e3629f1976f09a88370247bbc458c810d21a889e3ff6dd189ceea784bc9ab6dc9b0a" + }, + "9ddc1e29c59df0ddd9347fe8b8a736d247f286414684eddc02885348": { + "omega": 0, + "issuerPk": "Xro6BbV6hMh3RTZnst4ABhtQ2vr83YPXoLfQ8JWeunvvcuudGBQvLeqwVfGXrBWoMOOKroFV48ygfSEq2xhREA==", + "delegatePk": "mq5iXU0VvLNzPUIOBk8c0zjzhuCvBJ/NQrRVpp0orTZkg9F3uiuAG0E24NZmLl6eCiTyyAoOeNTCNbTAjyAfTA==", + "cert": "939dcfe5555ee661b9db5d817a70d5c3fa9d1d97c2ae5849696d915606b530f7e9edda5d02a01e61524a766f9c356084616ba058a3de70ea51bf29cd187a5f07" + }, + "a118c0d2737c8a77c0d982a0d299bc42614cea4e0c23614ba24a05ca": { + "omega": 0, + "issuerPk": "eqAAtu1X79MxCSa/i/RSApLGsnhDYqLJLu93f3wSzR5/M7calZS8DHFrAtJgzYbkg9nwKF1HQQ8bO/1LOJ9O4w==", + "delegatePk": "lCuzqqsPZEK5BrZbpt2/eWnKpmLZCWiSYhGj1WUy8R2OjLStw/UDT7xiV/pbEIZoncfQJN9yJqpQH8KOui0fYw==", + "cert": "b96ad354a6989df5de8d0888414843736d0a4a6626a1e595e8785a70b10a38eb4632159aabf84959983e8852fd4d390eba6c423fac8ea117913cec46353bd90e" + }, + "b0b2df3c9cf4dfe2ae04409913b3c3125509acbbfa0722449570aaeb": { + "omega": 0, + "issuerPk": "Y+Vaj0IaMeq0+oWjQr5hiEl4Ek+cWsKq7mufTO4wue2R6A6AMlqEDIV7vYsd3NZWomG5DGcwSAw2Ev1Mz26LIA==", + "delegatePk": "YYtiXfMN5TiV/ynno3cNylbC/wZtSqBaaXGQXe7O9tu33RDqH5F15Sk+reyXvxaxZ683mns+1K8DLNB7mezB6g==", + "cert": "ca38e688e759183b57d08ca6568248b91c8ddd81e56d0d31c3f3a26eca35754387c5f301ef017dafae453a93757d39a0e2d326ebe59cf31d5c1b22fc8616ac00" + }, + "e0a65f21229e44c2bf6eec5b14e2775003b674ae53de18d22814346a": { + "omega": 0, + "issuerPk": "vynbl3q/BFvwehgMzpp3NoWOuN5RwDUYCbNop0RR0jlEXomgPOrlXCwMTrwrI8Dcfzq5q1fK/1hOfv9IwDMPAA==", + "delegatePk": "1N1ppBBxvC3I5kqX9L1jeVJM4MK2ZXKAQ6Bn400+IYr4mh4zTYciCsTJTyvY8IKIBBEcT3GYW6ZlaYy7XbY5kg==", + "cert": "82b10bbea2dd80441315230354e3e4af0ac87d02c9e6424fc9432be21a6183c81555d3a1b373566aef7a8065a126d57c42629be780becc61bc1b8f3ce5b5170d" + } + }, + "startTime": 1654041600, + "nonAvvmBalances": { + "FHnt4NL7yPXhCzCHVywZLqVsvwuG3HvwmjKXQJBrXh3h2aigv6uxkePbpzRNV8q": "0", + "FHnt4NL7yPXuJGViM3KwSPwrwECD9q5vNetX3QJDYRWgiX3RHi5i5VV32dnETDK": "0", + "FHnt4NL7yPXuYUxBF33VX5dZMBDAab2kvSNLRzCskvuKNCSDknzrQvKeQhGUw5a": "30000000000000000", + "FHnt4NL7yPY8exfnuJ8ACyoU7xCN93tKXSv357UrTp1nddGbkWxJpQfrt62xYFX": "0", + "FHnt4NL7yPYFpVcAXZADrKdsqCAFvcRFYkTcqkn2guGmj8akQMiMVjhSUECvD1F": "0", + "FHnt4NL7yPYH2vP2FLEfH2pt3K6meM7fgtjRiLBidaqpP5ogPzxLNsZy68e1KdW": "0", + "FHnt4NL7yPYHrcxPtPufYYFWLhqvHGnZ5NFSz2KZpWQgSq4VLsUgWnkEmfUtd1E": "0", + "FHnt4NL7yPYJiN5Y8VsQr6LP6YgN51BHBPegNjVwKkq6AooCkbTpfZ2bqkVkfXU": "0" + }, + "blockVersionData": { + "scriptVersion": 0, + "slotDuration": "20000", + "maxBlockSize": "2000000", + "maxHeaderSize": "2000000", + "maxTxSize": "4096", + "maxProposalSize": "700", + "mpcThd": "20000000000000", + "heavyDelThd": "300000000000", + "updateVoteThd": "1000000000000", + "updateProposalThd": "100000000000000", + "updateImplicit": "10000", + "softforkRule": { + "initThd": "900000000000000", + "minThd": "600000000000000", + "thdDecrement": "50000000000000" + }, + "txFeePolicy": { + "summand": "155381000000000", + "multiplier": "43946000000" + }, + "unlockStakeEpoch": "18446744073709551615" + }, + "protocolConsts": { + "k": 2160, + "protocolMagic": 1 + }, + "avvmDistr": {} +} diff --git a/indexer/genesis/test-shelley-genesis.json b/indexer/genesis/test-shelley-genesis.json new file mode 100644 index 00000000..aa71a7f4 --- /dev/null +++ b/indexer/genesis/test-shelley-genesis.json @@ -0,0 +1,116 @@ +{ + "activeSlotsCoeff": 0.05, + "epochLength": 432000, + "genDelegs": { + "637f2e950b0fd8f8e3e811c5fbeb19e411e7a2bf37272b84b29c1a0b": { + "delegate": "aae9293510344ddd636364c2673e34e03e79e3eefa8dbaa70e326f7d", + "vrf": "227116365af2ed943f1a8b5e6557bfaa34996f1578eec667a5e2b361c51e4ce7" + }, + "8a4b77c4f534f8b8cc6f269e5ebb7ba77fa63a476e50e05e66d7051c": { + "delegate": "d15422b2e8b60e500a82a8f4ceaa98b04e55a0171d1125f6c58f8758", + "vrf": "0ada6c25d62db5e1e35d3df727635afa943b9e8a123ab83785e2281605b09ce2" + }, + "b00470cd193d67aac47c373602fccd4195aad3002c169b5570de1126": { + "delegate": "b3b539e9e7ed1b32fbf778bf2ebf0a6b9f980eac90ac86623d11881a", + "vrf": "0ff0ce9b820376e51c03b27877cd08f8ba40318f1a9f85a3db0b60dd03f71a7a" + }, + "b260ffdb6eba541fcf18601923457307647dce807851b9d19da133ab": { + "delegate": "7c64eb868b4ef566391a321c85323f41d2b95480d7ce56ad2abcb022", + "vrf": "7fb22abd39d550c9a022ec8104648a26240a9ff9c88b8b89a6e20d393c03098e" + }, + "ced1599fd821a39593e00592e5292bdc1437ae0f7af388ef5257344a": { + "delegate": "de7ca985023cf892f4de7f5f1d0a7181668884752d9ebb9e96c95059", + "vrf": "c301b7fc4d1b57fb60841bcec5e3d2db89602e5285801e522fce3790987b1124" + }, + "dd2a7d71a05bed11db61555ba4c658cb1ce06c8024193d064f2a66ae": { + "delegate": "1e113c218899ee7807f4028071d0e108fc790dade9fd1a0d0b0701ee", + "vrf": "faf2702aa4893c877c622ab22dfeaf1d0c8aab98b837fe2bf667314f0d043822" + }, + "f3b9e74f7d0f24d2314ea5dfbca94b65b2059d1ff94d97436b82d5b4": { + "delegate": "fd637b08cc379ef7b99c83b416458fcda8a01a606041779331008fb9", + "vrf": "37f2ea7c843a688159ddc2c38a2f997ab465150164a9136dca69564714b73268" + } + }, + "initialFunds": { + "007290ea8fa9433c1045a4c8473959ad608e6c03a58c7de33bdbd3ce6f295b987135610616f3c74e11c94d77b6ced5ccc93a7d719cfb135062": 300000000000, + "605276322ac7882434173dcc6441905f6737689bd309b68ad8b3614fd8": 3000000000000000, + "60a0f1aa7dca95017c11e7e373aebcf0c4568cf47ec12b94f8eb5bba8b": 3000000000000000, + "60ba957a0fff6816021b2afa7900beea68fd10f2d78fb5b64de0d2379c": 3000000000000000, + "00c8c47610a36034aac6fc58848bdae5c278d994ff502c05455e3b3ee8f8ed3a0eea0ef835ffa7bbfcde55f7fe9d2cc5d55ea62cecb42bab3c": 10000000000, + "004048ff89ca4f88e66598e620aa0c7128c2145d9a181ae9a4a81ca8e3e849af38840c5562dd382be37c9e76545c8191f9d8f6df1d20cfcee0": 10000000000, + "00ca6e1b1f320d543a24adeabc0aa4627635c7349b639f86f74bdfdd78d31b28c9619a58b3792a7394ab85deb36889c4d7b0632c8167b855d2": 10000000000, + "0007d781fe8e33883e371f9550c2f1087321fc32e06e80b65e349ccb027702d6880e86e77a0520efa37ede45002a1de43b68692e175b742e67": 10000000000, + "00627b2598dd71129167825160c564067d1d245e79cc237094815c5cb2b125e30ec2f4ce4059a069e08c3cd82cdfc9451bfb22487f8a25ceef": 10000000000, + "00c6cf7bd50f37f7e4cc161fc00f07e9b2226ba5552ccaf30d315fa0135bbc8cbd9ab5379f368fc8d3500c37a9d14074cc6ddad89e3686f0e0": 10000000000, + "005164ab186715c86378020956d892cf72f67636b78967d67cfe7360479130dc89cf7a9bc89109f939956b66f93293ade4c3920b72fd40beea": 10000000000, + "003dd38742e9848c6f12c13ddb1f9464fc0ce0bb92102768087975317e5a9f869fcd913562c9b0e0f01f77e5359ea780d37f9355f9702eff8b": 10000000000, + "0088e7e670b45cab2322b518ef7b6f66d30aec0d923dc463e467091a790f67796b9fa71224f2846cebbcf4950c11e040ee124d30f6e164bcd5": 10000000000, + "00c70b8421617802d3f23956cab1957e1d306cd4808589b41760e97927ebfd6053ba12b38288b2b6d5d4c4618d6a8ce59d50580e9c6f704af5": 10000000000, + "00c0933b8238f6f3332e48c34cf1a8e0555943b33cd4abc53aefb7d6124b7ce40dd496bdc02b34602f3a773ff7cccee873991e4c8866f3a70b": 10000000000, + "0069f7d7289de2f01cd1e0265ac5be943b41775abae0ce6b3eac0edee0ce9cadb7cdec2bded3ef8a7bbe3352869bfc1387754c9ee6b1782d9c": 10000000000, + "00709a7070005c652c27df73dbbde3319a90b127bea96aded1c5fb87a59c51dbcf90fa890174497f3f66a0dad06eb7f131e06567995e9c50a5": 10000000000, + "00fc576df3a279885a7a4d0fc500372daa1d96f26c6763542ecd2ad8551753024adea37c134edebb68dc0cfaed5a7009e8305fe1fed8d0ccd1": 10000000000, + "003346a630e6972bf38cce87219db1d63061e7cd324cad88c18e504f2990cac68e973f51256ca938683fa4ea12173d7d047d940fbb883bd0e8": 10000000000, + "0028b862d001e6a64a02b3560cbc532eab4557593477c39cc523e0b9fc527100898c11e731194171b908aad463770d6cbf7ec8871c4cb1e518": 10000000000, + "005e0e57040b06e9d71e0f28f126262838a68db0b52b4fd1b3877dda2203d5d7d4f19c5ee3a1ed51bb670779de19d40aaff2e5e9468cc05c5e": 10000000000, + "00367f65ab69b1e6715c8d5a14964214c9505ed17032266b3209a2c40dcbae9a2a881e603ff39d36e987bacfb87ee98051f222c5fe3efd350c": 10000000000, + "00c5c4ca287f3b53948b5468e5e23b1c87fe61ce52c0d9afd65d070795038751a619d463e91eaed0a774ebdb2f8e12a01a378a153bc3627323": 10000000000, + "00ef198fb7c35e1968308a0b75cfee54a46e13e86dd3354283300831d624165c357b5a0413906a0bfea8ba57587331f0836a186d632ed041b8": 10000000000 + }, + "maxKESEvolutions": 62, + "maxLovelaceSupply": 45000000000000000, + "networkId": "Testnet", + "networkMagic": 1, + "protocolParams": { + "protocolVersion": { + "minor": 0, + "major": 2 + }, + "decentralisationParam": 1, + "eMax": 18, + "extraEntropy": { + "tag": "NeutralNonce" + }, + "maxTxSize": 16384, + "maxBlockBodySize": 65536, + "maxBlockHeaderSize": 1100, + "minFeeA": 44, + "minFeeB": 155381, + "minUTxOValue": 1000000, + "poolDeposit": 500000000, + "minPoolCost": 340000000, + "keyDeposit": 2000000, + "nOpt": 150, + "rho": 0.003, + "tau": 0.20, + "a0": 0.3 + }, + "securityParam": 2160, + "slotLength": 1, + "slotsPerKESPeriod": 129600, + "staking": { + "pools": { + "7301761068762f5900bde9eb7c1c15b09840285130f5b0f53606cc57": { + "cost": 340000000, + "margin": 0, + "metadata": null, + "owners": [], + "pledge": 0, + "publicKey": "7301761068762f5900bde9eb7c1c15b09840285130f5b0f53606cc57", + "relays": [], + "rewardAccount": { + "credential": { + "key hash": "11a14edf73b08a0a27cb98b2c57eb37c780df18fcfcf6785ed5df84a" + }, + "network": "Testnet" + }, + "vrf": "c2b62ffa92ad18ffc117ea3abeb161a68885000a466f9c71db5e4731d6630061" + } + }, + "stake": { + "295b987135610616f3c74e11c94d77b6ced5ccc93a7d719cfb135062": "7301761068762f5900bde9eb7c1c15b09840285130f5b0f53606cc57" + } + }, + "systemStart": "2022-06-01T00:00:00Z", + "updateQuorum": 5 +} diff --git a/indexer/genesis/testnet-byron-genesis.json b/indexer/genesis/testnet-byron-genesis.json deleted file mode 100644 index 79fde9c2..00000000 --- a/indexer/genesis/testnet-byron-genesis.json +++ /dev/null @@ -1,481 +0,0 @@ -{ "bootStakeholders": - { "182822494f30b89a5cb9a6d845d9733a1831eb4e5ebc8faca89becc4": 1 - , "37ec19ad6c732dea93f8b39e0dcbef7d45044983d99195eb7034901c": 1 - , "3c1c3b43032f1f7a346cb8070c75474715ec8f1d301411a69def9ab2": 1 - , "6275f793595cae0761f13ecd054a0f01d0f57726ade0933e88a05749": 1 - , "9a804607ce670b2d5e60e9b4fdc54b99acf6d66837132e6bdc621ba5": 1 - , "9bfb38ba283fb3c8e552b440c17d0ef32725c39219565e9190454a57": 1 - , "e471e138c71dfff3d326b75548a1c518e694d13e85a3b0ae91df9941": 1 - } -, "heavyDelegation": - { "9bfb38ba283fb3c8e552b440c17d0ef32725c39219565e9190454a57": - { "omega": 0 - , "issuerPk": - "y1HSmrlOUNmhRNT0JlZM7HAN7k2ehXqs+R07aJN02B90KkUoGM8kicFt/Bhvbpx2t99AhFt8RQeF8C2ICXZ1dQ==" - , "delegatePk": - "fsJJ2JDQqvmoEgeWDBY64tasXnFcprltWGDlDZ8rKyodVo+qh8nMi/1DOjIkqW7F0QG0tunbAI24hX9JuuKUsg==" - , "cert": - "a304bf45b44fbccc78f54b9014a6b2d4354631ebff235aebb2e71a15bdd582be3794384c1ba713b99ef05766e92b8f438b2fc5af349f2bb16e85e3780aa84c07" - } - , "37ec19ad6c732dea93f8b39e0dcbef7d45044983d99195eb7034901c": - { "omega": 0 - , "issuerPk": - "nw+fw9f3biUiBZVS6H4G2vlAtFgaF5rsd/OQVmKkGGWv2lr820QVemFc7G/xmtOZ2bAyjcgrx/NRPUCRC3+TSg==" - , "delegatePk": - "MqlUtSHAsZUUQIllgx72g5Y33noaYWi8+EVcUEupO5yFNJi9rgYKb8mUXXIxrgjRMXq7szMGyTRl5e8RjuvHGA==" - , "cert": - "3fbff2edf71960355b30d89b946d4732c88e66dfb859bb143d2cd368b923cdf7d9bd22c4901cb47bade479a7c0eda08470cc9f3a2cb20c92b3a20974fc066900" - } - , "9a804607ce670b2d5e60e9b4fdc54b99acf6d66837132e6bdc621ba5": - { "omega": 0 - , "issuerPk": - "KedfHXp2SA8aETBEmrXZoOAUwJiFDKFSA3gq3rdWGoG7Mid0F0kSWzK3C6Y8QDIvRnao1lfZpXmghht8L0wCcg==" - , "delegatePk": - "52SwNA17NT9fdFiRAzd05L6raqFFilT/KaEyTAW7mHa1dM9ZKg+G/dH7+vvt3p4izpUiWy8RhRYpOszYygswFg==" - , "cert": - "06682af4df67b2037337187f9397bb8042e37308da1429ec9063e42480f9da60379d929f705140f05f1d014f19c668071824c0d86b616794e544d935e379c80e" - } - , "182822494f30b89a5cb9a6d845d9733a1831eb4e5ebc8faca89becc4": - { "omega": 0 - , "issuerPk": - "U6JXlR27xStIbWOjpfzqVVy5rp73La1i5znqNsI94+xYpOzGmlOVYiYF88N5OZ82wDBtl1UB9A+bWXNa0oCapg==" - , "delegatePk": - "5bwhqDYWvMz+ND7Da53EwGyQ6RPfHYoLBGAIZR9CyqlKrob7/cRYbavVR6fpLQdwLjMrzJ5911MjncgNAzxZwg==" - , "cert": - "d173106bfaab665a30e71633719754e0416927cfdadd6fbf7013590ddc9843083e18efcd08e4c7c366f4c4fff257177c87a502913f35bb1a07e45607c5d1fa0a" - } - , "e471e138c71dfff3d326b75548a1c518e694d13e85a3b0ae91df9941": - { "omega": 0 - , "issuerPk": - "HISQWQHTy1IdXEM7sTpZDNIQO0alFI++YFE6sAD5lN1BNDzTDSzDfUeaoAVWBvT/L5LcHdRzsjRgnPcOOm28gg==" - , "delegatePk": - "T011I+QeBYpsve+1U4ZU/8KlNBan9buZ9+rGmdQtXB8TdXbpwo6fFLPG4IIS8jjYbW4BrPJpf3teR9qWOSZeMQ==" - , "cert": - "018a7ee167602da08bf7d6903c37d2524ebe2a5daad83f9bf25f6011622932e72fc7c48027b9d4efaef521c911ec9eebaa38ddf88e6ae27c9bb823770fcd2600" - } - , "3c1c3b43032f1f7a346cb8070c75474715ec8f1d301411a69def9ab2": - { "omega": 0 - , "issuerPk": - "276WEVFXba36w7tXnsKxwUfACqTO4Dx+vvSVoOo4KUCqBgPahpnaCca9yjIPzWhVC6iyrHkZ570z7VjF2drNRA==" - , "delegatePk": - "c65B7KK+N/wVxVpQ1mjIZH4QvyIhcsLVir+m6TEOWWI/jyb47cHOj2mL1dyf6qMay8Nkv/b7gdND/zgm692NVQ==" - , "cert": - "b2c8e6ff8fc380c4a4c4e16f909803e786ccfbf4267e5016e24a34a843093b4d81736939500fb6fdd358d2be2b255858ea1abc35f62d381d6c62d111d1f0c80d" - } - , "6275f793595cae0761f13ecd054a0f01d0f57726ade0933e88a05749": - { "omega": 0 - , "issuerPk": - "bO9W1q+IRfMXlJvN/5I1jxOU/hG0XAKyjh1YVMD6E/jgeWRN/FBBr7D8vR9H7HzgZPN7fsXAcMeEpWGeuuKqYA==" - , "delegatePk": - "37YVphVo1oZ/RahcMiJ/JwJRgNc4qKPX/TySn2JNcjkpgBs0NkHxSAh7EX6H6WlfIV28+DD/DVigZmgsdgP2QQ==" - , "cert": - "a9c6e4abf95755084a86625a98e185de75d4d33d557284d3aa67ecff3dcfd8e77994fc8b3fc4c2762879ca0c15458ade936db0977ae10dd01291cf3241b9530e" - } - } -, "startTime": 1563999616 -, "vssCerts": - { "60214fff2df8faabc7da2dc99c07d2e3ade761b6bfe6a5a94b44c3dc": - { "vssKey": "WCECGkF8Ipu3QuaaTiSnA/wmf//wmVhFM2rIVUupnP9fdGM=" - , "expiryEpoch": 3 - , "signature": - "ff0972de56a180ae5a452680f7c6c464d07cd539804930b1d2f815b9a9bcc652c8d7adf875e4435ee116b16d194e35acfc752cc14c2e9c46bd00f74ec363a502" - , "signingKey": - "fsJJ2JDQqvmoEgeWDBY64tasXnFcprltWGDlDZ8rKyodVo+qh8nMi/1DOjIkqW7F0QG0tunbAI24hX9JuuKUsg==" - } - , "e0c9e75ffe8065e50563f9ec256c2b442a121d602c495cd305fb3cc4": - { "vssKey": "WCEDBRKTUNRUx1VFORWuoqqMSwPYKXgkeO2e+LTbc8jxm7U=" - , "expiryEpoch": 4 - , "signature": - "4d0aa42d1a15decec74c117b9b3e76178155c58ec373d2535005b4a3b0fae0ca4dd1c089b5272036f642aea27dc835e91de73d12fc25c027a8ef73991c139407" - , "signingKey": - "5bwhqDYWvMz+ND7Da53EwGyQ6RPfHYoLBGAIZR9CyqlKrob7/cRYbavVR6fpLQdwLjMrzJ5911MjncgNAzxZwg==" - } - , "fe299fde9afe6467393772f49e1f8d646d6788400c0acffdfb5eea24": - { "vssKey": "WCEDT9Z69y24Jbc4x/MlaC33mB/yaZ4ljIMNAfl9l7njWFE=" - , "expiryEpoch": 1 - , "signature": - "0efc47d2ed049a72896a4db314a3b00b31b849c753eaa2e3172337a8439a9160eba6bc164f57819df6580140fe3c7f52cec98161596c452d7ced3b0881638a09" - , "signingKey": - "MqlUtSHAsZUUQIllgx72g5Y33noaYWi8+EVcUEupO5yFNJi9rgYKb8mUXXIxrgjRMXq7szMGyTRl5e8RjuvHGA==" - } - , "837bd45aa9cdb656f538a4e46236ba9eb4c89890bc9191df096e30ba": - { "vssKey": "WCEDKi5sm8Wu7tUrjSehtCBsEMXSpX+h87zNRJcE4Mx/Nj4=" - , "expiryEpoch": 1 - , "signature": - "991e11c37f235c8c8d4aa846a564da38027f739f34ab97087ab436cce84d9297b2951455d5a8e2a562ab11db6a321c36d7498de3a1f776ad8eeb4dc5293b2b0f" - , "signingKey": - "52SwNA17NT9fdFiRAzd05L6raqFFilT/KaEyTAW7mHa1dM9ZKg+G/dH7+vvt3p4izpUiWy8RhRYpOszYygswFg==" - } - , "304889400de0859e03daea8bcf42779a14540b7c067f42f04ee1284e": - { "vssKey": "WCEDOgMx00aA40zA9oi0rN61TB6OxUcTvYq+8CyJjrObO3s=" - , "expiryEpoch": 5 - , "signature": - "10eca6d26d44eb52ed11ae633c410866bd6e01411ad64068331c7b8f92da9c8b9a7bed1772b6bf00910d322e659e23f2f867c4cf4e757cdbfbfb1fc97ba5a004" - , "signingKey": - "c65B7KK+N/wVxVpQ1mjIZH4QvyIhcsLVir+m6TEOWWI/jyb47cHOj2mL1dyf6qMay8Nkv/b7gdND/zgm692NVQ==" - } - , "73c89ad521f5786011201377e1ec8305e82aa985998f40307fa927d1": - { "vssKey": "WCEDLPG8x46r/wCR3hoHLeS+h/1Bu5x0MWXHDoJhM++fEfw=" - , "expiryEpoch": 2 - , "signature": - "98b48773afad287dbcd25915ee6b297b09d1204feb3a5793e91e438a1cce31a226f28b0c5b5ccdcde6a11f64665cbd867213cadbc57ec722c242def811f6e806" - , "signingKey": - "37YVphVo1oZ/RahcMiJ/JwJRgNc4qKPX/TySn2JNcjkpgBs0NkHxSAh7EX6H6WlfIV28+DD/DVigZmgsdgP2QQ==" - } - , "06216081b85063b2c7e33172b87663511fb7be35b23bc383881d60bc": - { "vssKey": "WCEDExIpntsz081SiKqeAg2o9W+wLy6lmD0dfp1sesQMj/E=" - , "expiryEpoch": 5 - , "signature": - "2b7fb3aab3a23d72cac699c4ef97d7f90ca4dd0b06c2413962b6430583b9814b6549806e90ecfd44da05819b655ff975797a6df23dde2aa1c625ab5079825f03" - , "signingKey": - "T011I+QeBYpsve+1U4ZU/8KlNBan9buZ9+rGmdQtXB8TdXbpwo6fFLPG4IIS8jjYbW4BrPJpf3teR9qWOSZeMQ==" - } - } -, "nonAvvmBalances": - { "2cWKMJemoBajGgvgVVziaKmUFa4LwJnAHffmuaSJBMDqethwJVQsyBsTSfFhp5jFpkVQM": - "5428571428571429" - , "37btjrVyb4KEg6anTcJ9E4EAvYtNV9xXL6LNpA15YLhgvm9zJ1D2jwme574HikZ36rKdTwaUmpEicCoL1bDw4CtH5PNcFnTRGQNaFd5ai6Wvo6CZsi": - "19999999999999" - , "37btjrVyb4KCRtni6YrG77RLPosnDqtEYoAD5xLdKYkWgnLqGa8yuXDUQd3psHrfxqaRcvNTsAW4ngUe6bzstbzSUJtwoaKbYaL8zjFAJJsZkQ42ti": - "19999999999999" - , "37btjrVyb4KGDMix4Uj5opvbMDgjZYUjeARAqTEFEbgLUH3qyju9gkBpcm2fVWgkcNgK3xFsQgWm1w8zxqvm9P6xJj9mHqLeMJPwDMUKUGPcDyUaDS": - "19999999999999" - , "37btjrVyb4KEkSeCVx985rXc38DCud2AW4LdasNmyoPLbtDGcDCyYVdf8BzxvDnzPehv4kyVBkzThjVEkSpGTv8PGQs4yRUgiCaKa7PTtBY4ohNGqR": - "19999999999999" - , "37btjrVyb4KFGS7upvgJHtmp7y7EFB67utzaHf7PM8y8U4tNkpmARNwiD7seN4NSAceHmj64KLGgh9qn1BpYF49NyWxocBHn1N533qBUYfhQar9ceu": - "19999999999999" - , "37btjrVyb4KCfir7GrvC6Y5kBNjeakZNd5po62AzQQ85SGkBB4QfXibC4fSNK5YvNeVgmPc8WbEeSUHRjoiqhJ4HDtinK2deBHSdCH6Cw8k2u92rdh": - "19999999999999" - , "37btjrVyb4KGAExHTQjLUHJBksSXGTomjgNsw8a4KepCgQYk4gxacKb84vGpPSv9Pjt3gdgMjA1nB67Pq3XyJpTDk8kLcXpJawCe6SCJf5jUowvAz8": - "19999999999999" - , "37btjrVyb4KCE1qeEoUh9b8CpcZcJ794Di14AxAELGoppJNVdB79nnuKcgRut566MdDkxTqravFaDSD9iwAvDByUHi59xocCY3ButEjmCQeLTLZXQ7": - "19999999999999" - , "37btjrVyb4KGGSGD8KgQD6qUBaSjxy5JRtsmMSHEGGAZqA29ULGwci8TcM16vBhywuBw54izQtpAqXeyUnbjh56hCgoqGZp9tHTMLLkEgLzwxVCZ4N": - "19999999999999" - , "37btjrVyb4KG5ZZfwwiQuhAGWiNJ2FhXP3oAuiq75qknCz4CZWNMVY4B9BmiHRHnWfhUbkLHUqfabCYASUk2V1qGuDw97x1gdf871aFY7Lpz3N1NvT": - "19999999999999" - , "37btjrVyb4KFtDHT2vDtMvQbLBgfH5hnpyVTTqqpPsieykukuxrDShHNccAEEj7M87UuV2GJ5pPA7YJ4JPjSokA99XaDgLmeaAumhZPHMwzg2Laspr": - "19999999999999" - , "37btjrVyb4KDHFyvvKb29RD53ebt6N8kpbL41J4VxWpiFC4FnxxybP33M9tBbdqfMXvSvyTQpv4dULXf5B838kEWXSJ24bpHtFgcbRkiHQwqWFQ5du": - "19999999999999" - , "37btjrVyb4KFh7jhHCtWxW942ceq7Xhxay8FZ7GkEBezGyFm3wJcVBGy1YYJDZ4Z7GbrFZmHLSe47zFs8Rjxk8rveoRpo1s43HXrMrhd4ijim4jJVP": - "19999999999999" - , "37btjrVyb4KFhYgC9Lr4Se7C1gL39d5WBVADyUyQZz2BfG4BZxczyW827JRQR5enyWaoj6NnA5NyKsheV6Eb7WvQtbN8D6116HTknHhEb5jh1yUU6Z": - "19999999999999" - , "37btjrVyb4KDLtM8HUJsBwergjZUj4DcMfkFmbV4bXUFGJk815o9nowX9ndPPVAeSNjAFYqJeFwTiMa9Ka8LqBnqFZgPpacyx9LrQLoXVMjvvLB7DK": - "19999999999999" - , "37btjrVyb4KDec7E64byKc4XjmmCRDaTGQYgHJTPDijZVr7NwZSP8g7ienzTLx5Z1quaQRhJqqAyV8Z2QdkzXvjTTRiVDCqps78uGp3uuth4wEJKP9": - "19999999999999" - , "37btjrVyb4KF5R1LEsaQgjWFWXwbgJ51naDEaCRG23KiAN3UtGzaT5PvUANtFBgjmcCtPLMBYMTGL4S8px4HyQMLAyF4fakYoFAJC3PkxCWMUatGWD": - "19999999999999" - , "37btjrVyb4KFB5Tmw1wsLmuv17Q6y8i6HGpVxbW8k4bevmob3DcdbH6jzrAtUrBpKgfTGgPMpLAbJcpaByGGJErkXQWFwrNMW35S79hxFvAN2GTXVQ": - "19999999999999" - , "37btjrVyb4KDEX2XToMQoi1No3YdREgZWzrf1xQPbfhbZTZnprFwDsRMiBxqUrA7p4BwjxXHDyqAccPwyX8iWWquz2CrLazJMR4s8AMz2US1D1ffJL": - "19999999999999" - , "37btjrVyb4KFTKCoqtZBdbh7LtJ9mRR1nbkX7ggP6a7AwvkSDxUN6U5GJWfuRXnL3a5x5e16uQwyjC6PoPVQ7VLdJXr8Kd3eFknLu6NDf2ey4AaJo2": - "19999999999999" - , "37btjrVyb4KCHCpiGd1J2GtVjP4KxEWP7RE6K6yxHzE97cbDgFD63fUFygbni8jKw1N37nGsT43KBvBn5w9ee8sVegr6Tg8fAr52mUkhdvTZYJV52T": - "19999999999999" - , "37btjrVyb4KGLRpX3uQfSeLovpMTcWfVZSM5RCufYvy2tyCMwrLXyHKCM9VqQh8dCQA6WcTrViaxqpvBSeKreHFL4CftfJU1z7CjHAze236NLesbL8": - "19999999999999" - , "37btjrVyb4KEdwV1MS3Pjek1HjLN2CSq3SJZGFBbZctkGLz569i9RWN15bAvCcZ8R5dgEi8iYjpmMVKioufoGv3issZQvVtzPz38pWHBViyRK2how5": - "19999999999999" - , "37btjrVyb4KD1x4cqHfGxrvBubZ8pSM8Jmw15UiHpy77eMsqpMewGND2GdvAwTBZhf4KA4uypBJnuUPbPYFovpRVJ92BUaMBHfQnAD3i15DAzD8EvL": - "19999999999999" - , "2cWKMJemoBait15xg1M73WAvWafoieg2GrcykbRk6J1QC2jMUXn7LpXf4mk5RUeu8qYeG": - "5428571428571429" - , "37btjrVyb4KC3HyNR82Bj2Sr9o6CF9o3J5hBNycGb9JwrHggTYUHfivi87akkYDv8ayepMkM4mNvxTKvoVdMHFkMnZZgrk5qobwPKM8idSnYYmvTRU": - "19999999999999" - , "37btjrVyb4KCmCLYttFEWLNQc1MRbV1NyhhssRioZ5CgkqHgYUTT1pPSr2hrfevSe8bSwLiPsLnaCbsxJQc5SWgWYEJDPWuUA1s4AotQxERNbT9ReA": - "19999999999999" - , "2cWKMJemoBahLnFCQ8wrTuZ3sMyiCeEkUZDYLNucPiVTJr8UU3BgADsKtqosDYNFXzeiw": - "5428571428571429" - , "37btjrVyb4KDHDPBVenqrh8tUTVNYX5ZGwjd4r3svqdnwWicGnMZZV1E7nBJVQsDY69co936H9onHpmA3PYSabYH4ibbULphL1CitDgArH9KknBARc": - "19999999999999" - , "37btjrVyb4KD9Z53z9qD7gTWMHr22e8jDcpCHgJFQaGQsvnNkycRehAaxLAnufNRjhLzQ57XVGJnR6mcsk6MorapLpADT77tyTaX9xfUSZyTA32ZAy": - "19999999999999" - , "37btjrVyb4KCsozLcUUHR8GyVG7erY6j9zehKTADn3e5xpRJtu1YgfJzSmAyERBHUXa5LGWY2aR2KqcssnRjwugh1bGjxc6U6ZrePJnALYTw2TR3yh": - "19999999999999" - , "37btjrVyb4KEDBSAmNtUBy6pfXesvTvtrDZQsSYcyo7SUwjLkhoSaPDCsNqMmoGbqzFQyEe9DNwK59BMudtdkzFPBpbgiEWx5SZr6vVMbpe86qsQJV": - "19999999999999" - , "37btjrVyb4KFf5NQ1DuNoAP4phRomqdEUmtFb6sWcDHkizGj56dwn54LfKrfWa6Er5sxDXYrzpWwS56PKmKaBjJtn1JqN67K3CihFXXospn8B2TDz2": - "19999999999999" - , "37btjrVyb4KBPHxFJqCekpPztGnLgbVsUA46Q8Lj2LKbFJL5Nqk5LgP2u28eBJAxkkU2r118ARdXW7fXLPQgctwK22L4N3zc6XeoDqkadGmTd4s8a1": - "19999999999999" - , "37btjrVyb4KBYe4RSCngNCgVMAeMJkRQqoJs8t6t9e9BHcNvvT6awv4CruMWH2FyiudxcGfZHmjghDvqk39iFrmCt4XE2XDuYzyo97BxwS6MngfeWp": - "19999999999999" - , "37btjrVyb4KF3MxxJBeJqCPFgHyUsSDkrDqoctSSVi9h7F4Wj9zFKcPVuVju76KYhdp7nJhy44512Wjhw7WH4sed3MMSh1HYnKUfjZXGkoZXMajaye": - "19999999999999" - , "37btjrVyb4KDsi9fc3RfExWLumjkp2YrcMjZpew19Z92kZnjPy5Xa84KY2WZw6xmjJA7AXFJCBWtrF9RFw1BjCewEqK77CVYj2s7bk9aAA7yyZARRz": - "19999999999999" - , "2cWKMJemoBaj34AMeqLspGBgX1PVc7z6VkALK3rtVd8iFgCtMUenNoHhVRnjeGfYVQJM1": - "5428571428571429" - , "37btjrVyb4KDpppzxzoaPgnstPejNxGaSZ3Vh22Qd2DWGrwfLJ2tizs33Y5Yjya1U6TXPzVX2PT5g1PXMy4jR4aWZRGZqYJk4Uw9p1h6BhEa189eiN": - "19999999999999" - , "37btjrVyb4KEXaPVoMuKpnVEKKLMFuGSvYL7YMAD529yxeK8Y1zqnbh5FQ8GMYpJwARugWmzaXdJ1gopgsxziC4e5wgjf3zkp7RH41KTJ73xLyfrFP": - "19999999999999" - , "37btjrVyb4KBrhG1yaBVY3X1ZoTCjUH7gbiA4qSFsMGgtLUBgwHiMZPiAJ3kQrRiboPV3s7eYXZD9fnd27qRb1cCEMc4oU57aPn2cYcEdAEJHrsyLB": - "19999999999999" - , "37btjrVyb4KEC4vC63KNqRBD7RX1KBwWDdPDE6oXGxP8x5aKrbVTALaq4XBdak8F47Kt9VcsQvVsKZfAit8vBtZpG2mc6VKUXCFv8pTYWwQMnABckB": - "19999999999999" - , "37btjrVyb4KFPbetkmdvqD8nLRFsUVL4HsVUYmgaZhAmBXcr78M3XoZkptjuszd2T1FNr1fGZApkZFZXikGtyhCc7jH5JYD1q8csTNSWQn4Us3nzX9": - "19999999999999" - , "37btjrVyb4KDfwNJcNMYsyEDVHWrGrNAPBwF9FGEnm5j2XFs4BeGdiSPqPtqCjWCvcRYBfY5EoDjRBhjsTrr2HjB1jw8XZ9Hy8wd9gz4KkCbMugSgf": - "19999999999999" - , "37btjrVyb4KEgvmzjLT7R9xHg1vNob6vCf999UFuG4qfTpHGZufdhbkUogSFJXtQXnCcJDHJ6xuZt92H6VgxGdhSLQ9gmWZy4zCJEVu8Nj8NashVQY": - "19999999999999" - , "37btjrVyb4KAtY8hCobTmAB36dzosSo644ZrzATKQhP1AsnM6BAVfTWwMX5BGXhigxLm5hk4beodymyjivxrH7ZY6BZjMu3AtafB5guvagxEZM7vJq": - "19999999999999" - , "37btjrVyb4KCRMJDqQ3iK4M19XhWGWpFbCoxjgeDB7ZqUhgW7jSYLEk5oVL4okVPVx5rXCgoK2ND9kAWnNU5QncJp1qvuCngRdJaLrvFwp4boE56VR": - "19999999999999" - , "37btjrVyb4KBTRHUnz17FQNFzHR8PpoGGwuNQZauAUxmvTb1o7Ragv9Zvyiv6Cb3rnrmYY1PGtVFTmom3TGg4mK5XpkRyf7PnnCG5EQM69i7MViLpU": - "19999999999999" - , "2cWKMJemoBam1WPtZrz3Fi4EMUDao74k9Xn4fhyVYLqK4o1VRzoxPFU91QBRToLbVyrjX": - "5428571428571429" - , "37btjrVyb4KBUH8nDpwtt3sSc6rJ7AkYjmnqvt1tJ4J8ZKCuqPrEuEioJJZXeD9aohveoB9zhRWru6oM5zyBcgMtkA26HLtTDKsSVwzoqugfftbiPu": - "19999999999999" - , "37btjrVyb4KCgWqZ8sJW46mQGdZS9wKW2TEQesyCoRScUxvisbdvEkfsxYLR49i6wE6uP1BBgPX9eg8cxKHPuNyKpStwf5UVmRCXD2ahotjamotMwV": - "19999999999999" - , "37btjrVyb4KCR9vZcXetWv4QdP4jPSH4msGeXs8DUBUMVYJHgD62etfv2jiD7gmLbLezCAiGTQu9JvrHd9Wfu74wguKgkX1vCUQkzcWsn4rVWsKCyt": - "19999999999999" - , "37btjrVyb4KFV3TiBqtLDN3oHQr5NrA8ouAAqasFU4ZuB9W13xgcgWsSy5fUtbNL4imCruQz19hjzBzykxGxCAarrviCUBh3sxWbvvTTHdvpyWGgXc": - "19999999999999" - , "37btjrVyb4KGM5rFFreGtZAs4PFB2Drb37uXRHebh8rCeVWFkW8De8XAbYqvfQrAqVthfJp9Qy2YzbzNhWSiUGY3D7yJkRkChyMveKCWT8qUTNEu6e": - "19999999999999" - , "2cWKMJemoBahEJS9xuB3R1ofSgtG621enmfpxfx9Unpo2K26wJPioaA4tizZrNMACNoQb": - "5428571428571429" - , "37btjrVyb4KFGV8HUDv7S5E8CSBV3pQLgGFt5HXa2jb9ofbAo3gTxcaQ4So84mHsNk9mhAybq6miH2VZU3iz7cqCd74gPMyn3zdUsrF1u2rib7HSXq": - "19999999999999" - , "37btjrVyb4KCF4JTyyC27XuFmcrn9Nxj1DmM4G5BKnf8F8F8BSpvn3PnsLRNH2RZJoajmg4yqHnwMXpUnbb7sFSuthjXv6YUenX8EWsApQUzAm77Dm": - "19999999999999" - , "37btjrVyb4KD5zMmtnD3jWpX3TSJnZJ8jMzCFQHYa3HcHNXxdAnK5A88SiWncRpJQxesMDrYgzPHk7SnFNag5teaFELV6hE9opnJpJzMGpVicDDRX4": - "19999999999999" - , "37btjrVyb4KDTABtj2RScLVCLVyFhxcURYUZNVta8CghbH5Edz32XSP79NHc28QTkKLMNUBupRnJXs4zcZt8C2fiPFGZfgSBMqMGMidWc2zo9piRb4": - "19999999999999" - , "37btjrVyb4KCGn7x5G6obn9NPNoTuv25LrBcqK9wHCm3XbrhxqycSQrbPfsDxgDp2M8pqTjCk8cVEG2fRxWrTjfG4q71MtyMo6nt8WG11kJzdQQSNL": - "19999999999999" - , "37btjrVyb4KEhnv3cCqP8jzRBbwE5v6ymPkBjTexHCcCgYJarjHHaxipJvz4aaXc5Xmp5KXxnC3SoE1oqR8sdGHobyfsAqJy7DwejZWpkkoYD7LJsS": - "19999999999999" - , "37btjrVyb4KDvKgSbCTx1gwwZFGe5DZaXyGwTYGGnJNCQ9C61XP4n1pKFQtNbYEowGeRoKHCGUvuU8Ebz2vQwN7YhcJ9bSb5oNpAoCe8UxX5KK5C3e": - "19999999999999" - , "37btjrVyb4KB6yr5YozXGqSKemHyZfsgiRQFX3VdJBKx7waoSaScNWc2dNvhNp6HSnXMxUwDtBvicXDWdpoJ7cKLWAwqEYki5azdt1qDP4sHXh8XhJ": - "19999999999999" - , "37btjrVyb4KCqRLQRj8svdZGGLQDZGdXztzeC15Vvt6uZWg23QAdfL1dMc52dpc8jqKquWNj6xjyLnLciVnRxzEq1kiq54ssmc6h7V5xK1cqqKJWBT": - "19999999999999" - , "37btjrVyb4KEW3PG2LAJNwmok2H6i149HetvT6fYrPsqPGpUkucNkA4b5TQmv896EF44UmcCAXDycfxFB7GcVefBCgk9cZffVUdX3kri3i5TEqSjKm": - "19999999999999" - , "37btjrVyb4KDdgCo1a7URfpQVFoTJEUcn4LqWpAtCeLaW7NeGMJtecsahTJM7886BjLcnhU2CboLSUojCPcab3WNTmXFDrRMHMHdmWefCAyYA7QaaL": - "19999999999999" - , "37btjrVyb4KG5vwKTPpCSQ14a7Cv4TESosSVoFVRHsw1vHj7Tpb7N4j1U5dtFcY7L3MWsH9BJqQjU9NxwaHpbHCJAhmsLi2mC2BE8k8Rj7zcjiiVhR": - "19999999999999" - , "37btjrVyb4KAr171Hd3fu65bbtKxqwktHGwY9kNanPYGXQcFKA8d9Hp1RgLrxzU1AdJCJbJDByTnHdDmtA7pm985tKK8hr5JdHPXFfSvkkYZn3kb9G": - "19999999999999" - , "37btjrVyb4KEZWqFxGYhFuLE23i92B8BiLRwwFUdnjmM24KHCNuWik5dc6MJqz7GxupgKGK5zzbYSXJyA8DQVDszyFmJuoxgzPn2GSnfBoREZ82ZdF": - "19999999999999" - , "37btjrVyb4KDB6sZamEoJWYBLoDWucRdDtRXCuQvLCoVoHPNjrywJKDz8PQg65ZtLvYvREwAK9oLzGGb6UcdAf9zwQcFaKRRHhLzCZxwTsRDVyPkSy": - "19999999999999" - , "37btjrVyb4KDJc8Af5dfJY2jcFbtkofFL6qXBxWnk2kHzCE63qAQR9Ynnk1XkfUrcnBrN7EEyvxmUDEFdNFfZHzXKhmkSQht3b6Y5rHHmuFYYoKdZz": - "19999999999999" - , "37btjrVyb4KDjPpuxBuJM1Ma5NGBqriSEAcozZMqYkWEkoJ3GgR8MAy3Zeb8q5BvtsWGEpSFQ69znPuaX4kVCcnEiEMDp91A6EL8A5YM12cpYYogLm": - "19999999999999" - , "37btjrVyb4KDmCmpc6FutA3PbQmWxcsbzZsFEdMKhHxrJVtGkmaiWd18dKmiaRA6o4Y2sAjDwjFozKzNzQg3dp8CXVSPpWgDLAXaozoRyPanW7UM8B": - "19999999999999" - , "37btjrVyb4KCLfSBFhCBdrb72YBNJkKcDCqpdxf3k7iwJTj7M3txxiq3fcam7Nyi8sLcJNSfgnUrh8C7RKEMN5wWpku7HLdZqZVuPRjeihhgXmEpCe": - "19999999999999" - , "37btjrVyb4KF3ZQhHTvVH3L7jNYoZ3XWK6SWpqZKiu9AGz6qNtxoxhAmmJpenFMA6fedYDT3Lt7cihgc1q4pE2GJXvPuknAkjvESmPxhhzkBzuiRis": - "19999999999999" - , "37btjrVyb4KF9xNLdS47pRBLB8e8bQLuvrBiGJbnHPNCbKU4wrMerJztEtYJdHayvaoUEmJ1vc3aiq9Z3UgP83Y1b4rpiyrGeYjzQhhDgB6DW8sWJm": - "19999999999999" - , "37btjrVyb4KC4LdZLvrexUgAntpySomDAPVwdMEnz1cP9pZxsxZqVYzM6zPPWAhc7byfwsLdgW8GEMTuTUagYFAKEmYgaDmYxK7cHxtWJG3hiMHxVU": - "19999999999999" - , "37btjrVyb4KFfXPG5GDEc4tLyVUSepKD9GGXZcSuP1xtLLRQnQr4wSXawT62bSJsiPzS25kdADKh94V3iDksm9nq5fhV4jixCnpNjsn7k2hSkwrAUa": - "19999999999999" - , "37btjrVyb4KC1L9MsZ8htPomWp4FV4hULeBVT6jf3GGqmDcw3k9tPn6pnfqGTWowQDvqVr7BqtQ5rcQ7gc5z41qh9vyBV7Ds83bRsndDbTAwkEUJ21": - "19999999999999" - , "37btjrVyb4KBtLs3NwnoLkyVx9ZxSoQ7mQx2ZvzanG7PGWWdMA9ksXqZxakLxdj9MAPKw7eQoZJWHxJJCsd7MeWj7ujfXtPsthGhcURT3Hste4Kr4n": - "19999999999999" - , "37btjrVyb4KCaYYFDdnbHEdBzpDPcL5iH98AGF8J5avuweDHwKChDq9mBvLKVJS6F4YTuAVDigPjMnAcuYUJ2UUbvDPePFZBhLhBrFUKeauoKC8X5z": - "19999999999999" - , "37btjrVyb4KFfnmiGpxNSGQVMfmFpAFrEAEhZwGPQDutSHnZqQXPhcXxDNcbdoKiztyQHpTA3jSmVowZCxcaJMS1k1wu8U6nXTzejgh7wYZjycamU6": - "19999999999999" - , "37btjrVyb4KCTVE8b2UitH791rYrkSrHG9u449h6JHKotuPWRsdVZQfP1jXrs4ygSxAnG1rM5mGFM6cmUqA44e9fenjbVC1QFYyn3R4CaptVZypKgW": - "19999999999999" - , "37btjrVyb4KDaKs8A6CU8Lrzxpr3WNM1kDdd4CPe66TqSP2ehHexrAuZ3ykMmhkaUZEHUEiq78ELQx5vpSFGHXFKbyGgrWa8rokqamCV8bSKiqsqVt": - "19999999999999" - , "37btjrVyb4KCdPziHrv1QgXL5zMy3KYxr7zPqoRd96iz3LNrkWbobRmPswTpRKgCQEkZcEnipiNJ5UoULAc33mbR44MchdHT5vLNYT9sPxwzpgNUWj": - "19999999999999" - , "37btjrVyb4KGAZJWCpicgRkb9ijP3Jnv6y9EYvnpMqkPdBZ2d6fdnCa9C97HUmfHLWF846AKjViPvnY7MbSM8mTM3VDx5RazBFxA7C7mZ9CyM48AW9": - "19999999999999" - , "37btjrVyb4KFfgfRyETGNXNXm6gAxNpTQSxr6bM7T6yZE1ibiZBovxG52PioVmLRnPYxs4wYddAfgTH4mbmtLFnwuZYSBh2eNsdLdc6vWb4AdJNNym": - "19999999999999" - , "37btjrVyb4KBsV28Wce4x44WsTVoXa5s4zaBKALWXxMQ2MtfVgB8LJJW34QFpvjrxKmheLtpcLyVqaeu36oB6ZcgQPppFN4oqhdueoKBEpn8dfQUVF": - "19999999999999" - , "37btjrVyb4KBEKzyCGqao8GmErVER19oBH3L8xVNCSZs8tCVd53iV5FXZAZ7bNCT67bKoasGeiYZxEoDzGBsKxb4uJxStU1e9wkaPo6BxUEErZG7LD": - "19999999999999" - , "37btjrVyb4KCi8WRzrkFiE1AVYbSiXBzMRTuTLv8DAchfg4tPaDgHRuDN6m4dq4VkA17pkWwCoa2NmvNb5sGeU1ZkjcqFuYrWPK2C5a3TLBfx64uLs": - "19999999999999" - , "37btjrVyb4KDz8QGqk9LJ9kSsSd1zKgqfTuiTKbL92b4aDSXmRPyrFZp3VPEwhMyEmwCiSkpd7KQztirmU6CGwiphhiHoXbbZjkbfiHN5Mq1y7fmJM": - "19999999999999" - , "37btjrVyb4KEcCa8yc1d8Zrne1hRtedHQQGPbkRJcvHak2ygcCndPfSqWwb2L59ERxhtqsMJLdS1fPQPs2vcJcQCvB52tCm4rGCDwUmRG51PUzjSVh": - "19999999999999" - , "37btjrVyb4KEhvykuoQZKWdNKFgTrugRUSV66yr8GCXREuaX2PfVQJeuXS4h1bNP8SeUxHAG2J6RfK35YnsZj5qkWQCWV7tVYMVokU5bw9y8CcmqPy": - "19999999999999" - , "37btjrVyb4KDsFS7rbQjZQGX6Fz53u76NF2hF9iqRhfbx8ePmjJKCsv5rZV1hhtP6DHdKwLAf5zkVH9FE51xYuCvJzNppSn1tgExVQJpuTwKmyTekT": - "19999999999999" - , "37btjrVyb4KFtfVixJcJdD27YZfXfRM5diZFj4TEazkCAhF8KyztTbe67zQpBc1RTjruHNvefdJ9Jtr7u5rebR71tGrGtKioSSGKy2hMKd6GUVFkEg": - "19999999999999" - , "2cWKMJemoBaiXc4dYCHfDyvy3LcqPebJ8zfRJsZZoHDqik2SzK9Be73YQ5W9u5jEiMPXa": - "5428571428571429" - , "37btjrVyb4KFNpxUYvzqFKsRfRYJKHjEuFfgy6rpoGq29dcMrNhbKTvqNr719U282rp9PcnFonAENkUdv2nE36wZmyNkj8JVQJL1TLu25SKjGFNzVs": - "19999999999999" - , "37btjrVyb4KFYnqsKFfMwj4S3PcCxwxutoiUubHazLfw4wJc5bfrQgpNEpRnGCS2UUfzvMWRRV2vy4wzPKE7tshLS2YEW219R6QfAenXzktMoXCmuU": - "19999999999999" - , "37btjrVyb4KEbo96SLroMfZB11rEvztPswgdqC5ESkHXc4EaFdAhsDQ24vJK23XsjTJzpPS3ZcDWiHiFVtmp5wkJrcnRcMe74s88eTy8YLvLL7EBRj": - "19999999999999" - , "37btjrVyb4KBcyGa22cYKz3Xo9UnB2kzZg4nqVX863JCAvUd54ehdg94DWwnBasCv6sUdbKdh9t4tf48oaXokeoms1HDNuegsmRjVntHBX3Z2hnrV7": - "19999999999999" - , "37btjrVyb4KDHmdZ8ewhythkmGaUzLCwME5pGtWR7nPhE9nCjLMcKstQFyKq1vTSagA2BXtiopfGwtLq2e1jhUVKsw1Z8Me6XTmLm5C9MzRYCZCd3n": - "19999999999999" - , "37btjrVyb4KBGJtifVyePJjSHTno1XNBeTcqmSqEhyUznts9KGQTsvCd9Hq6zM2w29njvmJYCtWmNkUXvayfqyv7epN1awWkKK1WUFQKJsjtevSKz7": - "19999999999999" - , "37btjrVyb4KEwqVLa1yaRPdDUctf525DovPsxoXZfqNp26eXQnmTSFwY3Q3rgPsjRfTKHKtjFpxPy6XYvjzscccsZYfXSaL9MmgrKAaeQgQhCtoXih": - "19999999999999" - , "37btjrVyb4KDxRyqtP9nWyEd7sfzdB8Xgh2egCATJAVtvxM2LhKLp1ALCE714vMCsbQZ5SwvVgiAvmieJTkae865ycwU39JN4pgt27pqEuB8uvi947": - "19999999999999" - , "37btjrVyb4KDA9F68PUv9efaoQHTvacu98Dk6Zx3784ADx4SDnwMfDt3uRfJwqBELeVuis5UEqsf9u4zAD9YC82s6YNmQu43avWDqrQq9Z4hHkEVrL": - "19999999999999" - , "37btjrVyb4KCjschbSccsYGDJo1rVBjdVrpH27iRtc5h1q4XRqpQJTma1NA9t9t8PrTsJjFE7WzNCczJHQR1RGXW1jDNEiEqNa6xctAZ4ZBtXKHVtp": - "19999999999999" - } -, "blockVersionData": - { "scriptVersion": 0 - , "slotDuration": "20000" - , "maxBlockSize": "2000000" - , "maxHeaderSize": "2000" - , "maxTxSize": "65536" - , "maxProposalSize": "70000" - , "mpcThd": "20000000000000" - , "heavyDelThd": "300000000000" - , "updateVoteThd": "1000000000000" - , "updateProposalThd": "100000000000000" - , "updateImplicit": "10000" - , "softforkRule": - { "initThd": "900000000000000" - , "minThd": "600000000000000" - , "thdDecrement": "50000000000000" - } - , "txFeePolicy": - { "summand": "155381000000000" , "multiplier": "43946000000" } - , "unlockStakeEpoch": "18446744073709551615" - } -, "protocolConsts": - { "k": 2160 - , "protocolMagic": 1097911063 - , "vssMaxTTL": 6 - , "vssMinTTL": 2 - } -, "avvmDistr": - { "CWJf8Kl8Gp-DhcWKuhNRUU9P0_CVI2LmpR1MIMxVgGQ=": "20000000000000" - , "h48-GEVDKf_0_vGKzmGOuAOhhIm2uc0OEDSNwFayV28=": "20000000000000" - , "PO1Kz9bpAowfWD8u9Ial2OkmxDiw6bK_ICDPvuHshJM=": "20000000000000" - , "mqJXwreGLRzV9a--egcVvKN4hzIcNUULsXqcPWe3YXI=": "20000000000000" - , "ENoYC3dNAtKL-lvjCTZDVhQYmfyWVtI0GNbz4QKqVdY=": "20000000000000" - , "o0O4s8YkitBZPeZLVyjn8pjtpBoncr-H9mbtAJS_KfE=": "20000000000000" - , "1XEVfDyaheIAeQICkHlwmvEuY9A7E50hA1v_E_QB3Fg=": "20000000000000" - , "OKVfmKrrzY0-10uxl9IxlYA6CFWwOU1dN-NyUI0bobU=": "20000000000000" - , "LYOSBM00cdDToqHepveoat2SN6vdPntA0nSFXRch83Q=": "20000000000000" - , "3Z-Z3rLCxLt0C3KgagBq3wOXrfm68_zh2st5Bi6Covs=": "20000000000000" - , "VTx9H6wpJNMC-H-pThklJ9uCllwqXaU0WXHcVTEFAIU=": "20000000000000" - , "beyF5mz8icvrBvM-mvQzLfbnHCmxOOg8Z7kJs7nySZs=": "20000000000000" - , "rs_VPO7SNO2YlSY2N881xHFeBnW_Sn2o4uSfuGpq9cc=": "20000000000000" - , "5RZPTI9FoSvLmiXjKYtUdkrqoMg99tIw8k4enSB1qlQ=": "20000000000000" - , "QRBLXNJdJCVDjbwPvQmg_liOcYIWfvoKf7Ns5w_RDvU=": "20000000000000" - , "YG9mVGb_MAvTSdFgOUV8JbRBxnj3sPELZxQNVup_X18=": "20000000000000" - , "7dEmv0hdv1a7imviD3q3p9pFBFMC77Byx9oinyGwdIQ=": "20000000000000" - , "H_Qs3m89FGw8QxVTUGuPjdbOPQyP8vzcD8I37BkRAXY=": "20000000000000" - , "pa6NZ1j_bs8kezg23cUQiba3UyLxLiGDQfDXMQmuPSE=": "20000000000000" - , "Qi5VCXOUdP-U-Pd--boAii_-gwMpB0IRfibzxWEN53s=": "20000000000000" - , "cLJrI380JOISi9A14PYTRmClcxPNQS3_GIZdqcXC1JQ=": "20000000000000" - , "BVY8wsqEPXPQ7DPTvnvat7GRiwxFPHC4jY1x3ZvY1PE=": "20000000000000" - , "FBlBD9ykcwuFmoogsVjRCUag9xpkwCAgbYDNazT1oY4=": "20000000000000" - , "KHwUZRYdwRs5UYIhOO9ycjucY8WvTzpkZgZ4PSbDDPI=": "20000000000000" - , "ED2RmO7Wfad2p4gxyzhr4gqlhavksgHEg1acZiKMQF4=": "20000000000000" - , "BOjqPWCmGewTKqKekH0HSgpnOEYT8g0qV4t4t6Nj7-c=": "20000000000000" - , "b-8mgbBV-r9bqufItyyPp2WLitNhBjaMAajl3GfteeE=": "20000000000000" - , "JW_kuEdd0TkJEUA35YUbf_K9C4OlpZd83iTUqrD0q0g=": "20000000000000" - , "IF7PMOFaXdwztrj1j_yx_YBafdZpb3pc5EF6y822KgI=": "20000000000000" - , "r9HNGwms9l0cMBuT8CznPoadXKbzLPceo4-vDydXUwE=": "20000000000000" - , "rM0RFpsVm738CCDdzBhrEz8Q0CLIqiBKMl5rtdFlWmA=": "20000000000000" - , "jFyHtgHVcd70V1SZ7O55mo8yvYw5KsijV6fMQEWkJaE=": "20000000000000" - , "qWmtDqvA3KZyySJLRPFPO2TiOZh3Dpv1FCJTdEilJvc=": "20000000000000" - , "5YYkqAleNp8VXGYiD7WsXvWZQwybkqAUR9xMf5lLvzs=": "20000000000000" - , "bi2YeYdi2W2r7IDYToq_N0RR1k3z4GYsRo2xddi2Y7I=": "20000000000000" - , "vENWfzLRm1wwHYWTUIOznVCXC3ISPt8J6n3gYFrwfpg=": "20000000000000" - , "G71fGc7_2IoExvY8VctjxMCd7lJsTWgvWzg__lF4qcY=": "20000000000000" - , "pFzX1lvX3LPolGCv8TQXfWAZupMZEjVlMWmT7nUV70I=": "20000000000000" - , "pE7umM4kIaTYqKOviWvgTb34xky-kpbN7VvSzhOT8wo=": "20000000000000" - , "P6J7kBAlCPD4wxAnzuzlqTBWMyqI1zVkqVWM5kKoCwg=": "20000000000000" - , "CmwjLeSIEKfLzd5ks16QoGCtYNc--wiGsgWWM4OKsco=": "20000000000000" - , "-RTrh8sxu9mOYYpcfmyod8-v1Z0nqxMunwK-_NFDzYQ=": "20000000000000" - , "EnoSKFBfSJ_l7RXMglXTSolDt6VeNRMay4soxkUmk0E=": "20000000000000" - , "VzxlTAQWmOH7ALIXviuXH2pjjYmtW77r9ypeEZlg4mc=": "20000000000000" - , "93QRpWUE-Yqthy85Y8poB_WeWdG8A_9nnq4HJiMfJQc=": "20000000000000" - , "H7YIN-FF0kUawzVnhQpCoMLuOJkLzYAtZ2xof7vhtPs=": "20000000000000" - , "a9_Q5Pzte2G7wXujwVBaAzLcMki6_UjKrxvWzayJ3gY=": "20000000000000" - , "O4h-7y-2Izq3ojxailZAbMd0VCq78-kIMv8gIcaA6cA=": "20000000000000" - , "mlzqpS0hE6s7apMGRQP4Cx5Fc380yt9gQX7XVcVrmQQ=": "20000000000000" - , "aK-WCeAwKHQE9H02zvRLRdoMPIsZWiOfKkbA6yTyMxs=": "20000000000000" - , "b3fq65eebunM4fM3AQubawjF6Mt9v9jyEXF5f3hewbo=": "20000000000000" - , "ZbZ7v6OcrjZ3vqPFVzaHOK2A5UzRYy-wm0C-ngebU_s=": "20000000000000" - , "zXza46kY7Gs5cJEoN2TUwAaXth5W7uUKQfNiaPyWDSc=": "20000000000000" - , "5q5RzTcpFFUne5AKkua3DJO1IFQEOGyb2jQvV4DmDT8=": "20000000000000" - , "5CzeQFC__uUi8TRPuWVgsUeJauYR3i1f3rvD0CrC34o=": "20000000000000" - , "KOp96-E17RXmCf0_vEOcecpTmY8W0wpbpBwFuPwFbKM=": "20000000000000" - , "EFK3F4mO823aCcko3QmFJ3Klm7glGs8a0f_f6WVIwdg=": "20000000000000" - , "e4TOcy9Qp5BQ8tXkEXaWpuHRmAVcJRfPEV3sVCOKZsQ=": "20000000000000" - , "w-2bM_wksghmtHp4ZB2ZOQ-V9Dw1ZivS7RwxgY-DsB4=": "20000000000000" - , "9pKGBzQJLoqY6vcOM_OqHRgq9KIdO3ovCBp1mBEFKek=": "20000000000000" - , "TMFEEMjP7q64-Liae7CEG0ELKtEC2e2vDuCpMItyfzU=": "20000000000000" - , "nrRREQUC1zKTpQRRNDzO-NiQh6DJahitvTk0SWLkc8g=": "20000000000000" - , "9xnVxPVNI9fdN5zGa5Fa3HcIwof5T-2lMbdLh3_Nbpk=": "20000000000000" - , "NqOaYkD2B5yTFQ1dHMY7X2LmV0Q9tZI6KYR1-dFW_z8=": "20000000000000" - , "zhXX6D5r4CDjlLLQiC87LZZL2zWUIYaXhxbcgq_Ww3w=": "20000000000000" - , "CXMg_ROxPjiJAyxUpBlUepLDhcdhMffR89izVr9vcRU=": "20000000000000" - , "vfTTtqpmg_3jQ7zWV3XhNfmtbtn32Z0fcfNc6_Cx-4E=": "20000000000000" - , "3UAwyThFcR1vKSBpktCSkJg3NpMQhL1z4l46NHpfJkY=": "20000000000000" - , "K4m8Vu1qtFRavgx0jrctVErZf6VbKDfBnigjQef6k-o=": "20000000000000" - , "rmyqI_SuwRsbR4rG1Uk6bUlSJRvo004w5SeejGQERT4=": "20000000000000" - , "oo8sxwl7TO2JP-QfW3_aQbE9zZCLBogFPnwEMPUBuYs=": "20000000000000" - , "lif3znin9EWfZBoYZ9Ta1c69eINSJNmaqkKJVpFuF2U=": "20000000000000" - , "kMAvVvgk0sEf3kHXyfb8gQ6H4gWaFBDSUwms4IFs2jo=": "20000000000000" - , "8CMex0Km9bk2J1r4FaSD_FSwlGRgh1e8C1-7fCGUAJE=": "20000000000000" - , "pUliJY_tq41pTdo5VJISdWbGGBnL_82pupm4AjZF-y0=": "20000000000000" - , "E7dg9_nI8tY9CXli9OyIHtx0FUsq0QZKLBVx9Cr8Daw=": "20000000000000" - , "cpO_GBP5qVwOCGxws6oGvgZszu7jy_LwbKZj_f2pg8o=": "20000000000000" - , "n8MZ16U_jB4Vg4BPZHGorDzVO7dC9qOfAdYhAluKD4Y=": "20000000000000" - , "hqzkwiRusxDSgY-MyqmCyTC0VxELSFdJKJVpzBGOdQM=": "20000000000000" - , "QCiQStlI-PWCbwclsM8ZvfrmP49kql7lAwJjgzZ_OvI=": "20000000000000" - , "7prDyNFRXierLX1UE26h-TSO0fmfC2lFHQoelogU3hg=": "20000000000000" - , "32mL1n7cF_xLIjWAGTC6vISGcafcJe0EgXaxaQNtrzQ=": "20000000000000" - , "H94Fk3T5fiEXPd1eGYfpwPP4_y9FVQWsi2bhIAf9hFE=": "20000000000000" - , "YLQqBDTjfVrQJcqCzgn0js4ScjJpbh3_dGRmg_wQ9WM=": "20000000000000" - , "Ctfg-00LO1JetbfqwOOIwrm56xdZSzzZRccGW52eCps=": "20000000000000" - , "GCkRs5Iqi5jyzRhF-Z5B4-EzgCRAb55pJK8a3kmrbwU=": "20000000000000" - , "975KNlfAi1B-u2Q0X0qBZpuZNLCUNnKnX-jvBzah3pE=": "20000000000000" - , "SrxXeNRxF0accD3dsKoj8ymSQeJoUVs78Llsy-4ZIO0=": "20000000000000" - , "m5zF99P2vG3cqGrG17VvRti7d2XRi3fuUHfec-jM6tQ=": "20000000000000" - , "A-w4r_kJIZpI8TqDAY-F44cR0lhZtnB25UhT0NXM6Zc=": "20000000000000" - , "7mglsAKSgUEkAyA6C5Ni-v_1xoGNPCN_cj7ctQZGZqg=": "20000000000000" - , "x3DrzZ_Yp8df2EGsGlwNAnclV2Tv3lcdqnI3Lk_0bF4=": "20000000000000" - , "GWoauU1tVb37fjs6mPrxXiBoy9HarPqyGI8zj1mc7cw=": "20000000000000" - , "op9p-7Xy9fBmzrjLbMD1jEuW1QVXTOsXSIwgaFN3sDk=": "20000000000000" - , "KC7yE_m_JSiWGVP9cpcfYTLF77taAPTgveRKEiIPg1A=": "20000000000000" - , "6V6sxoH3dMLw8vWcH0NQF2SZNPDzmtULTX4vxkeCQd4=": "20000000000000" - , "y0DLZDhvfU-M5MvdhoyxEFp811PWFfrAdIfDVhYCMzE=": "20000000000000" - , "wCHhA7PS7wdfEuMpzrOJfdGyF2uIChR2LnnAcQE3hHI=": "20000000000000" - , "s4iYnscFXdEK56b7o4ZvKpgN0YoKchpR-U9MZEqbGb8=": "20000000000000" - , "WkMPzKKtocKcbc7_fsFND1oln6gAfWJspg9REi75pMw=": "20000000000000" - } -, "ftsSeed": - "76617361206f7061736120736b6f766f726f64612047677572646120626f726f64612070726f766f6461" -} \ No newline at end of file diff --git a/indexer/src/engine.rs b/indexer/src/engine.rs index 27bb4316..d8b74fc1 100644 --- a/indexer/src/engine.rs +++ b/indexer/src/engine.rs @@ -3,6 +3,7 @@ use crate::sink::Sink; use crate::types::StoppableService; use async_trait::async_trait; use dcspark_blockchain_source::{GetNextFrom, PullFrom, Source}; +use entity::block::EraValue; use std::sync::atomic::AtomicBool; use std::sync::atomic::Ordering::SeqCst; use std::sync::Arc; @@ -44,6 +45,9 @@ impl< let mut perf_aggregator = PerfAggregator::new(); + // TODO: fetch from DB + let mut latest_era: Option = None; + while self.running.load(SeqCst) { let event_fetch_start = std::time::Instant::now(); let event = self.source.pull(&pull_from).await?; @@ -55,7 +59,9 @@ impl< }; perf_aggregator.block_fetch += event_fetch_start.elapsed(); let new_from = event.next_from().unwrap_or(pull_from); - self.sink.process(event, &mut perf_aggregator).await?; + self.sink + .process(event, &mut perf_aggregator, &mut latest_era) + .await?; pull_from = new_from; } diff --git a/indexer/src/genesis.rs b/indexer/src/genesis.rs index feb442ce..53314dda 100644 --- a/indexer/src/genesis.rs +++ b/indexer/src/genesis.rs @@ -13,10 +13,9 @@ use migration::DbErr; use tasks::utils::TaskPerfAggregator; use tasks::{execution_plan::ExecutionPlan, genesis::genesis_executor::process_genesis_block}; -pub async fn process_genesis( +pub async fn process_byron_genesis( conn: &DatabaseConnection, - network: &str, - genesis_folder: &str, + genesis_file: &str, exec_plan: Arc, ) -> anyhow::Result<()> { let task_perf_aggregator = Arc::new(Mutex::new(TaskPerfAggregator::default())); @@ -24,8 +23,7 @@ pub async fn process_genesis( tracing::info!("Parsing genesis file..."); let mut time_counter = std::time::Instant::now(); - let file = fs::File::open(format!("{}/{}-byron-genesis.json", genesis_folder, network)) - .expect("Failed to open genesis file"); + let file = fs::File::open(genesis_file).expect("Failed to open genesis file"); let genesis_file: Box = Box::new( parse_genesis_data(file).map_err(|err| anyhow!("can't parse genesis data: {:?}", err))?, ); @@ -36,9 +34,9 @@ pub async fn process_genesis( ); time_counter = std::time::Instant::now(); - tracing::info!("Inserting genesis data into database..."); + tracing::info!("Inserting Byron genesis data into database..."); conn.transaction(|txn| { - Box::pin(insert_genesis( + Box::pin(insert_byron_genesis( txn, genesis_file, exec_plan.clone(), @@ -59,7 +57,7 @@ pub async fn process_genesis( Ok(()) } -pub async fn insert_genesis( +pub async fn insert_byron_genesis( txn: &DatabaseTransaction, genesis_file: Box, exec_plan: Arc, @@ -87,3 +85,76 @@ pub async fn insert_genesis( Ok(()) } + +pub async fn process_shelley_genesis( + conn: &DatabaseConnection, + genesis_file: &str, + exec_plan: Arc, +) -> anyhow::Result<()> { + let task_perf_aggregator = Arc::new(Mutex::new(TaskPerfAggregator::default())); + + tracing::info!("Parsing genesis file..."); + let mut time_counter = std::time::Instant::now(); + + let file = fs::File::open(genesis_file).expect("Failed to open genesis file"); + let genesis_file: Box = Box::new( + parse_genesis_data(file).map_err(|err| anyhow!("can't parse genesis data: {:?}", err))?, + ); + + tracing::info!( + "Finished parsing genesis file after {:?}", + time_counter.elapsed() + ); + time_counter = std::time::Instant::now(); + + tracing::info!("Inserting Shelley genesis data into database..."); + conn.transaction(|txn| { + Box::pin(insert_shelley_genesis( + txn, + genesis_file, + exec_plan.clone(), + task_perf_aggregator.clone(), + )) + }) + .await?; + + tracing::info!( + "Finished inserting genesis data after {:?}", + time_counter.elapsed() + ); + tracing::trace!( + "Genesis task-wise time spent:\n{:#?}", + task_perf_aggregator.lock().unwrap() + ); + + Ok(()) +} + +pub async fn insert_shelley_genesis( + txn: &DatabaseTransaction, + genesis_file: Box, + exec_plan: Arc, + task_perf_aggregator: Arc>, +) -> Result<(), DbErr> { + let genesis_hash = genesis_file.genesis_prev.to_raw_bytes(); + tracing::info!( + "Starting sync based on genesis hash {}", + hex::encode(genesis_hash) + ); + + let block_global_info = BlockGlobalInfo { + era: EraValue::Shelley, + epoch: None, + epoch_slot: None, + }; + + process_genesis_block( + txn, + ("", &genesis_file, &block_global_info), + &exec_plan, + task_perf_aggregator.clone(), + ) + .await?; + + Ok(()) +} diff --git a/indexer/src/sink.rs b/indexer/src/sink.rs index aef56941..8d148b01 100644 --- a/indexer/src/sink.rs +++ b/indexer/src/sink.rs @@ -1,6 +1,7 @@ use crate::perf_aggregator::PerfAggregator; use async_trait::async_trait; use dcspark_blockchain_source::{EventObject, PullFrom}; +use entity::block::EraValue; #[async_trait] pub trait Sink { @@ -12,5 +13,6 @@ pub trait Sink { &mut self, event: Self::Event, perf_aggregator: &mut PerfAggregator, + latest_era: &mut Option, ) -> anyhow::Result<()>; } diff --git a/indexer/src/sinks/cardano.rs b/indexer/src/sinks/cardano.rs index 3088a4fe..5e881673 100644 --- a/indexer/src/sinks/cardano.rs +++ b/indexer/src/sinks/cardano.rs @@ -141,26 +141,9 @@ impl Sink for CardanoSink { if start.is_empty() { // https://github.com/txpipe/oura/blob/67b01e8739ed2927ced270e08daea74b03bcc7f7/src/sources/common.rs#L91 - let genesis_folder: &str = match dbg!(&self.network[..]) { - "mainnet" | "testnet" | "preview" | "preprod" => KNOWN_GENESIS_FOLDER, - "custom" => &self - .genesis_folder - .as_ref() - .expect("genesis_folder should be specified for custom networks")[..], - rest => { - return Err(anyhow!( - "{} is invalid. NETWORK must be either mainnet/preview/preprod/testnet or a 'custom' network", - rest - )) - } - }; - genesis::process_genesis( - &self.db, - &self.network, - genesis_folder, - self.exec_plan.clone(), - ) - .await?; + let genesis_file: String = + get_genesis_file(&self.network, &self.genesis_folder, "byron")?; + genesis::process_byron_genesis(&self.db, &genesis_file, self.exec_plan.clone()).await?; return self.get_latest_point().await; } @@ -171,6 +154,7 @@ impl Sink for CardanoSink { &mut self, event: Self::Event, perf_aggregator: &mut PerfAggregator, + latest_era: &mut Option, ) -> anyhow::Result<()> { match event { CardanoEventType::Block { @@ -222,18 +206,23 @@ impl Sink for CardanoSink { } _ => (), }; - self.db - .transaction::<_, (), DbErr>(|txn| { - Box::pin(insert_block( - cbor_hex, - epoch, - epoch_slot, - txn, - self.exec_plan.clone(), - self.task_perf_aggregator.clone(), - )) - }) - .await?; + *latest_era = Some( + self.db + .transaction::<_, EraValue, DbErr>(|txn| { + Box::pin(insert_block( + cbor_hex, + epoch, + epoch_slot, + txn, + self.exec_plan.clone(), + self.task_perf_aggregator.clone(), + *latest_era, + self.genesis_folder.clone(), + self.network.clone(), + )) + }) + .await?, + ); } CardanoEventType::RollBack { block_slot, @@ -262,12 +251,20 @@ impl Sink for CardanoSink { "Rollback destination did not exist. Maybe you're stuck on a fork?" ); } + *latest_era = None; } Some(point) => { Block::delete_many() .filter(BlockColumn::Id.gt(point.id)) .exec(&self.db) .await?; + let latest_block = Block::find() + .order_by_desc(BlockColumn::Id) + .one(&self.db) + .await? + .unwrap(); + *latest_era = + Some(EraValue::try_from(latest_block.era).expect("Unknown era")); } } @@ -304,7 +301,10 @@ async fn insert_block( txn: &DatabaseTransaction, exec_plan: Arc, task_perf_aggregator: Arc>, -) -> Result<(), DbErr> { + previous_era: Option, + custom_genesis_folder: Option, + network: String, +) -> Result { let mut perf_aggregator = PerfAggregator::new(); let block_parse_counter = std::time::Instant::now(); @@ -312,12 +312,41 @@ async fn insert_block( let block_payload = hex::decode(cbor_hex.clone()).unwrap(); let multi_block = MultiEraBlock::from_explicit_network_cbor_bytes(&block_payload).unwrap(); + let era = to_era_value(&multi_block); let block_global_info = BlockGlobalInfo { - era: to_era_value(&multi_block), + era, epoch, epoch_slot, }; + match previous_era { + None => { + let genesis_file = get_genesis_file(&network, &custom_genesis_folder, "byron"); + tasks::genesis::genesis_executor::process_genesis_block( + txn, + ("", &genesis_file, &block_global_info), + &exec_plan, + task_perf_aggregator.clone(), + ) + .await? + } + Some(prev_era) if era > prev_era => { + let genesis_file = get_genesis_file( + &network, + &custom_genesis_folder, + &format!("{:?}", era).to_lowercase(), + ); + process_genesis_block( + txn, + ("", &genesis_file, &block_global_info), + &exec_plan, + task_perf_aggregator.clone(), + ) + .await? + } + _ => {} + }; + perf_aggregator.block_parse += block_parse_counter.elapsed(); match &multi_block { @@ -341,5 +370,35 @@ async fn insert_block( } } - Ok(()) + Ok(era) +} + +fn get_genesis_folder<'a>( + network: &str, + custom_genesis_folder: &'a Option, +) -> anyhow::Result<&'a str> { + match &network[..] { + "mainnet" | "preview" | "preprod" | "sanchonet" => Ok(KNOWN_GENESIS_FOLDER), + "custom" => Ok(custom_genesis_folder + .as_ref() + .expect("genesis_folder should be specified for custom networks")), + rest => { + return Err(anyhow!( + "{} is invalid. NETWORK must be either mainnet/preview/preprod or a 'custom' network", + rest + )) + } + } +} + +fn get_genesis_file<'a>( + network: &str, + custom_genesis_folder: &'a Option, + era: &str, +) -> anyhow::Result { + let genesis_folder = get_genesis_folder(network, custom_genesis_folder)?; + Ok(format!( + "{}/{}-{}-genesis.json", + genesis_folder, network, era + )) }