From ce01a48c8237ea216a6c261d96d8d0fbf83d5033 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 18 Sep 2023 16:29:35 -0400 Subject: [PATCH 001/112] Create contracts for Lynx testnet deployment which only mocks RootApplication. Create deployment script for Lynx testnet. --- contracts/contracts/testnet/LynxSet.sol | 48 +++++++++++++++++++++++++ scripts/testnet/deploy_lynx.py | 48 +++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 contracts/contracts/testnet/LynxSet.sol create mode 100644 scripts/testnet/deploy_lynx.py diff --git a/contracts/contracts/testnet/LynxSet.sol b/contracts/contracts/testnet/LynxSet.sol new file mode 100644 index 00000000..aaa30bc4 --- /dev/null +++ b/contracts/contracts/testnet/LynxSet.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +import "../coordination/ITACoRootToChild.sol"; +import "../coordination/ITACoChildToRoot.sol"; +import "../coordination/TACoChildApplication.sol"; + +contract LynxRootApplication is Ownable, ITACoChildToRoot { + ITACoRootToChild public childApplication; + + function setChildApplication(ITACoRootToChild _childApplication) external onlyOwner { + childApplication = _childApplication; + } + + function updateOperator(address _stakingProvider, address _operator) external onlyOwner { + childApplication.updateOperator(_stakingProvider, _operator); + } + + function updateAuthorization(address _stakingProvider, uint96 _amount) external onlyOwner { + childApplication.updateAuthorization(_stakingProvider, _amount); + } + + // solhint-disable-next-line no-empty-blocks + function confirmOperatorAddress(address _operator) external override {} +} + +contract LynxTACoChildApplication is TACoChildApplication, Ownable { + constructor(ITACoChildToRoot _rootApplication) TACoChildApplication(_rootApplication) {} + + function setCoordinator(address _coordinator) external onlyOwner { + require(_coordinator != address(0), "Coordinator must be specified"); + require( + address(Coordinator(_coordinator).application()) == address(this), + "Invalid coordinator" + ); + coordinator = _coordinator; + } +} + +contract LynxRitualToken is ERC20("LynxRitualToken", "LRT") { + constructor(uint256 _totalSupplyOfTokens) { + _mint(msg.sender, _totalSupplyOfTokens); + } +} diff --git a/scripts/testnet/deploy_lynx.py b/scripts/testnet/deploy_lynx.py new file mode 100644 index 00000000..540cc852 --- /dev/null +++ b/scripts/testnet/deploy_lynx.py @@ -0,0 +1,48 @@ +#!/usr/bin/python3 +from ape import project +from ape.cli import get_user_selected_account +from web3 import Web3 + +PUBLISH = True + + +def main(account_id=None): + deployer = get_user_selected_account() + + # Lynx TACo Root Application + taco_app = project.LynxRootApplication.deploy( + sender=deployer, + publish=PUBLISH, + ) + + # Lynx TACo Child Application + taco_child_app = project.LynxTACoChildApplication.deploy( + taco_app.address, + sender=deployer, + publish=PUBLISH, + ) + + taco_app.setChildApplication( + taco_child_app.address, + sender=deployer, + publish=PUBLISH, + ) + + # Lynx Ritual Token + ritual_token = project.LynxRitualToken.deploy( + Web3.to_wei(10_000_000, "ether"), sender=deployer, publish=PUBLISH + ) + + # Lynx Coordinator + coordinator = project.Coordinator.deploy( + taco_child_app.address, + 3600, # 1hr + 4, + deployer.address, + ritual_token.address, + 1, # 1 Wei per second + sender=deployer, + publish=PUBLISH, + ) + + taco_child_app.setCoordinator(coordinator.address, sender=deployer) From e3788e5fc07c02a5e956b6d90f768ed10ccd51f1 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 18 Sep 2023 23:03:39 +0200 Subject: [PATCH 002/112] Use deployer semantics for lynx contract depoyment script. --- scripts/testnet/deploy_lynx.py | 65 ++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 18 deletions(-) diff --git a/scripts/testnet/deploy_lynx.py b/scripts/testnet/deploy_lynx.py index 540cc852..a4fb6267 100644 --- a/scripts/testnet/deploy_lynx.py +++ b/scripts/testnet/deploy_lynx.py @@ -1,24 +1,45 @@ #!/usr/bin/python3 +import os + from ape import project from ape.cli import get_user_selected_account from web3 import Web3 -PUBLISH = True +PUBLISH = False + + +def main(): + """ + This script deploys the Lynx TACo Root Application, + Lynx TACo Child Application, Lynx Ritual Token, and Lynx Coordinator. + usage: `ape run testnet deploy_lynx --network ethereum:goerli:https://goerli.infura.io/v3/` + + September 18, 2023, Deployment: + 'LynxRootApplication' deployed to: 0x39F1061d68540F7eb57545C4C731E0945c167016 + 'LynxTACoChildApplication' deployed to: 0x892a548592bA66dc3860F75d76cDDb488a838c35 + 'Coordinator' deployed to: 0x18566d4590be23e4cb0a8476C80C22096C8c3418 + """ + + try: + import ape_etherscan # noqa: F401 + except ImportError: + raise ImportError("Please install the ape-etherscan plugin to use this script.") + if not os.environ.get("ETHERSCAN_API_KEY"): + raise ValueError("ETHERSCAN_API_KEY is not set.") -def main(account_id=None): deployer = get_user_selected_account() # Lynx TACo Root Application - taco_app = project.LynxRootApplication.deploy( - sender=deployer, - publish=PUBLISH, + taco_app = deployer.deploy( + project.LynxRootApplication, + publish=PUBLISH ) # Lynx TACo Child Application - taco_child_app = project.LynxTACoChildApplication.deploy( + taco_child_app = deployer.deploy( + project.LynxTACoChildApplication, taco_app.address, - sender=deployer, publish=PUBLISH, ) @@ -29,20 +50,28 @@ def main(account_id=None): ) # Lynx Ritual Token - ritual_token = project.LynxRitualToken.deploy( - Web3.to_wei(10_000_000, "ether"), sender=deployer, publish=PUBLISH + ritual_token = deployer.deploy( + project.LynxRitualToken, + Web3.to_wei( + 10_000_000, + "ether" + ), + publish=PUBLISH ) # Lynx Coordinator - coordinator = project.Coordinator.deploy( - taco_child_app.address, - 3600, # 1hr - 4, - deployer.address, - ritual_token.address, - 1, # 1 Wei per second - sender=deployer, + coordinator = deployer.deploy( + project.Coordinator, # coordinator + taco_child_app.address, # root_app + 3600, # timeout (seconds) + 4, # max_dkg_size + deployer.address, # admin + ritual_token.address, # currency + 1, # fee_rate (wei per second) publish=PUBLISH, ) - taco_child_app.setCoordinator(coordinator.address, sender=deployer) + taco_child_app.setCoordinator( + coordinator.address, + sender=deployer + ) From 6f5e137acd8578c59d8c96210a6aa1cdea9299f6 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 18 Sep 2023 23:24:27 +0200 Subject: [PATCH 003/112] log mumbai deployment --- scripts/testnet/deploy_lynx.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/scripts/testnet/deploy_lynx.py b/scripts/testnet/deploy_lynx.py index a4fb6267..1989b288 100644 --- a/scripts/testnet/deploy_lynx.py +++ b/scripts/testnet/deploy_lynx.py @@ -13,12 +13,19 @@ def main(): This script deploys the Lynx TACo Root Application, Lynx TACo Child Application, Lynx Ritual Token, and Lynx Coordinator. - usage: `ape run testnet deploy_lynx --network ethereum:goerli:https://goerli.infura.io/v3/` - - September 18, 2023, Deployment: + September 18, 2023, Goerli Deployment: + ape run testnet deploy_lynx --network ethereum:goerli:https://goerli.infura.io/v3/ 'LynxRootApplication' deployed to: 0x39F1061d68540F7eb57545C4C731E0945c167016 'LynxTACoChildApplication' deployed to: 0x892a548592bA66dc3860F75d76cDDb488a838c35 'Coordinator' deployed to: 0x18566d4590be23e4cb0a8476C80C22096C8c3418 + + September 18, 2023, Mumbai Deployment: + ape run testnet deploy_lynx --network polygon:mumbai:https://polygon-mumbai.infura.io/v3/ + 'LynxRootApplication' deployed to: 0xb6400F55857716A3Ff863e6bE867F01F23C71793 + 'LynxTACoChildApplication' deployed to: 0x3593f90b19F148FCbe7B00201f854d8839F33F86 + 'Coordinator' deployed to: 0x4077ad1CFA834aEd68765dB0Cf3d14701a970a9a + + """ try: From e4c1beda8f573cc4aca444a1b1d739b1f0b72e1c Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 19 Sep 2023 12:48:59 -0400 Subject: [PATCH 004/112] Add ape dependencies to Pipfile for consistent environment. Relock dependencies. --- Pipfile | 3 +- Pipfile.lock | 5061 ++++++++++++++++++++++++---------------------- requirements.txt | 145 +- 3 files changed, 2665 insertions(+), 2544 deletions(-) diff --git a/Pipfile b/Pipfile index 631715be..00bafb00 100644 --- a/Pipfile +++ b/Pipfile @@ -8,8 +8,9 @@ black = "*" coincurve = "*" cryptography = "*" eth-ape = "*" -# TODO eventually change to official release, issue #82, once fix is available ape-solidity = ">=0.6.5" +ape-etherscan = "*" +ape-polygon = "*" flake8 = "*" isort = "*" nucypher-core = "*" diff --git a/Pipfile.lock b/Pipfile.lock index c9756caf..31733ab1 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,2474 +1,2591 @@ { - "_meta": { - "hash": { - "sha256": "e5826275029525e26bcf320fa0449db492c6990d806bbe1f080d814f1817bbb5" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "aiohttp": { - "hashes": [ - "sha256:03543dcf98a6619254b409be2d22b51f21ec66272be4ebda7b04e6412e4b2e14", - "sha256:03baa76b730e4e15a45f81dfe29a8d910314143414e528737f8589ec60cf7391", - "sha256:0a63f03189a6fa7c900226e3ef5ba4d3bd047e18f445e69adbd65af433add5a2", - "sha256:10c8cefcff98fd9168cdd86c4da8b84baaa90bf2da2269c6161984e6737bf23e", - "sha256:147ae376f14b55f4f3c2b118b95be50a369b89b38a971e80a17c3fd623f280c9", - "sha256:176a64b24c0935869d5bbc4c96e82f89f643bcdf08ec947701b9dbb3c956b7dd", - "sha256:17b79c2963db82086229012cff93ea55196ed31f6493bb1ccd2c62f1724324e4", - "sha256:1a45865451439eb320784918617ba54b7a377e3501fb70402ab84d38c2cd891b", - "sha256:1b3ea7edd2d24538959c1c1abf97c744d879d4e541d38305f9bd7d9b10c9ec41", - "sha256:22f6eab15b6db242499a16de87939a342f5a950ad0abaf1532038e2ce7d31567", - "sha256:3032dcb1c35bc330134a5b8a5d4f68c1a87252dfc6e1262c65a7e30e62298275", - "sha256:33587f26dcee66efb2fff3c177547bd0449ab7edf1b73a7f5dea1e38609a0c54", - "sha256:34ce9f93a4a68d1272d26030655dd1b58ff727b3ed2a33d80ec433561b03d67a", - "sha256:3a80464982d41b1fbfe3154e440ba4904b71c1a53e9cd584098cd41efdb188ef", - "sha256:3b90467ebc3d9fa5b0f9b6489dfb2c304a1db7b9946fa92aa76a831b9d587e99", - "sha256:3d89efa095ca7d442a6d0cbc755f9e08190ba40069b235c9886a8763b03785da", - "sha256:3d8ef1a630519a26d6760bc695842579cb09e373c5f227a21b67dc3eb16cfea4", - "sha256:3f43255086fe25e36fd5ed8f2ee47477408a73ef00e804cb2b5cba4bf2ac7f5e", - "sha256:40653609b3bf50611356e6b6554e3a331f6879fa7116f3959b20e3528783e699", - "sha256:41a86a69bb63bb2fc3dc9ad5ea9f10f1c9c8e282b471931be0268ddd09430b04", - "sha256:493f5bc2f8307286b7799c6d899d388bbaa7dfa6c4caf4f97ef7521b9cb13719", - "sha256:4a6cadebe132e90cefa77e45f2d2f1a4b2ce5c6b1bfc1656c1ddafcfe4ba8131", - "sha256:4c745b109057e7e5f1848c689ee4fb3a016c8d4d92da52b312f8a509f83aa05e", - "sha256:4d347a172f866cd1d93126d9b239fcbe682acb39b48ee0873c73c933dd23bd0f", - "sha256:4dac314662f4e2aa5009977b652d9b8db7121b46c38f2073bfeed9f4049732cd", - "sha256:4ddaae3f3d32fc2cb4c53fab020b69a05c8ab1f02e0e59665c6f7a0d3a5be54f", - "sha256:5393fb786a9e23e4799fec788e7e735de18052f83682ce2dfcabaf1c00c2c08e", - "sha256:59f029a5f6e2d679296db7bee982bb3d20c088e52a2977e3175faf31d6fb75d1", - "sha256:5a7bdf9e57126dc345b683c3632e8ba317c31d2a41acd5800c10640387d193ed", - "sha256:5b3f2e06a512e94722886c0827bee9807c86a9f698fac6b3aee841fab49bbfb4", - "sha256:5ce45967538fb747370308d3145aa68a074bdecb4f3a300869590f725ced69c1", - "sha256:5e14f25765a578a0a634d5f0cd1e2c3f53964553a00347998dfdf96b8137f777", - "sha256:618c901dd3aad4ace71dfa0f5e82e88b46ef57e3239fc7027773cb6d4ed53531", - "sha256:652b1bff4f15f6287550b4670546a2947f2a4575b6c6dff7760eafb22eacbf0b", - "sha256:6c08e8ed6fa3d477e501ec9db169bfac8140e830aa372d77e4a43084d8dd91ab", - "sha256:6ddb2a2026c3f6a68c3998a6c47ab6795e4127315d2e35a09997da21865757f8", - "sha256:6e601588f2b502c93c30cd5a45bfc665faaf37bbe835b7cfd461753068232074", - "sha256:6e74dd54f7239fcffe07913ff8b964e28b712f09846e20de78676ce2a3dc0bfc", - "sha256:7235604476a76ef249bd64cb8274ed24ccf6995c4a8b51a237005ee7a57e8643", - "sha256:7ab43061a0c81198d88f39aaf90dae9a7744620978f7ef3e3708339b8ed2ef01", - "sha256:7c7837fe8037e96b6dd5cfcf47263c1620a9d332a87ec06a6ca4564e56bd0f36", - "sha256:80575ba9377c5171407a06d0196b2310b679dc752d02a1fcaa2bc20b235dbf24", - "sha256:80a37fe8f7c1e6ce8f2d9c411676e4bc633a8462844e38f46156d07a7d401654", - "sha256:8189c56eb0ddbb95bfadb8f60ea1b22fcfa659396ea36f6adcc521213cd7b44d", - "sha256:854f422ac44af92bfe172d8e73229c270dc09b96535e8a548f99c84f82dde241", - "sha256:880e15bb6dad90549b43f796b391cfffd7af373f4646784795e20d92606b7a51", - "sha256:8b631e26df63e52f7cce0cce6507b7a7f1bc9b0c501fcde69742130b32e8782f", - "sha256:8c29c77cc57e40f84acef9bfb904373a4e89a4e8b74e71aa8075c021ec9078c2", - "sha256:91f6d540163f90bbaef9387e65f18f73ffd7c79f5225ac3d3f61df7b0d01ad15", - "sha256:92c0cea74a2a81c4c76b62ea1cac163ecb20fb3ba3a75c909b9fa71b4ad493cf", - "sha256:9bcb89336efa095ea21b30f9e686763f2be4478f1b0a616969551982c4ee4c3b", - "sha256:a1f4689c9a1462f3df0a1f7e797791cd6b124ddbee2b570d34e7f38ade0e2c71", - "sha256:a3fec6a4cb5551721cdd70473eb009d90935b4063acc5f40905d40ecfea23e05", - "sha256:a5d794d1ae64e7753e405ba58e08fcfa73e3fad93ef9b7e31112ef3c9a0efb52", - "sha256:a86d42d7cba1cec432d47ab13b6637bee393a10f664c425ea7b305d1301ca1a3", - "sha256:adfbc22e87365a6e564c804c58fc44ff7727deea782d175c33602737b7feadb6", - "sha256:aeb29c84bb53a84b1a81c6c09d24cf33bb8432cc5c39979021cc0f98c1292a1a", - "sha256:aede4df4eeb926c8fa70de46c340a1bc2c6079e1c40ccf7b0eae1313ffd33519", - "sha256:b744c33b6f14ca26b7544e8d8aadff6b765a80ad6164fb1a430bbadd593dfb1a", - "sha256:b7a00a9ed8d6e725b55ef98b1b35c88013245f35f68b1b12c5cd4100dddac333", - "sha256:bb96fa6b56bb536c42d6a4a87dfca570ff8e52de2d63cabebfd6fb67049c34b6", - "sha256:bbcf1a76cf6f6dacf2c7f4d2ebd411438c275faa1dc0c68e46eb84eebd05dd7d", - "sha256:bca5f24726e2919de94f047739d0a4fc01372801a3672708260546aa2601bf57", - "sha256:bf2e1a9162c1e441bf805a1fd166e249d574ca04e03b34f97e2928769e91ab5c", - "sha256:c4eb3b82ca349cf6fadcdc7abcc8b3a50ab74a62e9113ab7a8ebc268aad35bb9", - "sha256:c6cc15d58053c76eacac5fa9152d7d84b8d67b3fde92709195cb984cfb3475ea", - "sha256:c6cd05ea06daca6ad6a4ca3ba7fe7dc5b5de063ff4daec6170ec0f9979f6c332", - "sha256:c844fd628851c0bc309f3c801b3a3d58ce430b2ce5b359cd918a5a76d0b20cb5", - "sha256:c9cb1565a7ad52e096a6988e2ee0397f72fe056dadf75d17fa6b5aebaea05622", - "sha256:cab9401de3ea52b4b4c6971db5fb5c999bd4260898af972bf23de1c6b5dd9d71", - "sha256:cd468460eefef601ece4428d3cf4562459157c0f6523db89365202c31b6daebb", - "sha256:d1e6a862b76f34395a985b3cd39a0d949ca80a70b6ebdea37d3ab39ceea6698a", - "sha256:d1f9282c5f2b5e241034a009779e7b2a1aa045f667ff521e7948ea9b56e0c5ff", - "sha256:d265f09a75a79a788237d7f9054f929ced2e69eb0bb79de3798c468d8a90f945", - "sha256:db3fc6120bce9f446d13b1b834ea5b15341ca9ff3f335e4a951a6ead31105480", - "sha256:dbf3a08a06b3f433013c143ebd72c15cac33d2914b8ea4bea7ac2c23578815d6", - "sha256:de04b491d0e5007ee1b63a309956eaed959a49f5bb4e84b26c8f5d49de140fa9", - "sha256:e4b09863aae0dc965c3ef36500d891a3ff495a2ea9ae9171e4519963c12ceefd", - "sha256:e595432ac259af2d4630008bf638873d69346372d38255774c0e286951e8b79f", - "sha256:e75b89ac3bd27d2d043b234aa7b734c38ba1b0e43f07787130a0ecac1e12228a", - "sha256:ea9eb976ffdd79d0e893869cfe179a8f60f152d42cb64622fca418cd9b18dc2a", - "sha256:eafb3e874816ebe2a92f5e155f17260034c8c341dad1df25672fb710627c6949", - "sha256:ee3c36df21b5714d49fc4580247947aa64bcbe2939d1b77b4c8dcb8f6c9faecc", - "sha256:f352b62b45dff37b55ddd7b9c0c8672c4dd2eb9c0f9c11d395075a84e2c40f75", - "sha256:fabb87dd8850ef0f7fe2b366d44b77d7e6fa2ea87861ab3844da99291e81e60f", - "sha256:fe11310ae1e4cd560035598c3f29d86cef39a83d244c7466f95c27ae04850f10", - "sha256:fe7ba4a51f33ab275515f66b0a236bcde4fb5561498fe8f898d4e549b2e4509f" - ], - "markers": "python_version >= '3.6'", - "version": "==3.8.4" - }, - "aiosignal": { - "hashes": [ - "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc", - "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17" - ], - "markers": "python_version >= '3.7'", - "version": "==1.3.1" - }, - "ape-solidity": { - "hashes": [ - "sha256:015f895bf338e921b632b40d18279e5969e85972125ae468f4ada00d900a2bf7", - "sha256:904f7f22d2f2dd5c3351c847072294115df47e38ce4939f680aff4ae86249fad" - ], - "index": "pypi", - "version": "==0.6.5" - }, - "appnope": { - "hashes": [ - "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", - "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" - ], - "markers": "sys_platform == 'darwin'", - "version": "==0.1.3" - }, - "asn1crypto": { - "hashes": [ - "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c", - "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67" - ], - "version": "==1.5.1" - }, - "asttokens": { - "hashes": [ - "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3", - "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c" - ], - "version": "==2.2.1" - }, - "async-timeout": { - "hashes": [ - "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15", - "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c" - ], - "markers": "python_version >= '3.6'", - "version": "==4.0.2" - }, - "attrs": { - "hashes": [ - "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", - "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" - ], - "markers": "python_version >= '3.7'", - "version": "==23.1.0" - }, - "backcall": { - "hashes": [ - "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", - "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" - ], - "version": "==0.2.0" - }, - "base58": { - "hashes": [ - "sha256:1e42993c0628ed4f898c03b522b26af78fb05115732549b21a028bc4633d19ab", - "sha256:6aa0553e477478993588303c54659d15e3c17ae062508c854a8b752d07c716bd", - "sha256:9a793c599979c497800eb414c852b80866f28daaed5494703fc129592cc83e60" - ], - "version": "==1.0.3" - }, - "bitarray": { - "hashes": [ - "sha256:00a6fc4355bd4e6ead54d05187dc4ea39f0af439b336ae113f0194673ed730ae", - "sha256:00e93f70cbcbeabd1e79accf1b6f5b2424cd40556e7877f618549523d0031c98", - "sha256:01f8d02c3eae82c98d4259777cb2f042a0b3989d7dceeb37c643cb94b91d5a42", - "sha256:029c724bf38c6616b90b1c423b846b63f8d607ed5a23d270e3862696d88a5392", - "sha256:057f9c53a34e42deed6e8813a82b9c85924f4728be28e3b9b65144569ac5a387", - "sha256:088e6e9ea7f0eaf8b672679a68096dbc0a7a7b7a4ed567860f7362e1588370a6", - "sha256:0b84fd9dbf999cbca1090a7703aa1404cd01af4035c6ba3adf69d41280611fb6", - "sha256:0d1f49cc51919d6fa0f7eebd073d2c620b80079aa537d084a7fafb46a35c7a4d", - "sha256:0fe747a134f7f5bc0877eee58090ae7e7f23628eeb459f681ade65719c3f246a", - "sha256:102db74ee82ec5774aba01481e73eedaebd27ba167344a81d3b42e6fbf9ffb77", - "sha256:1048a29b3d72b1821a3ae9e8d64e71ed96c53a1a36b1da6db02091a424a8f795", - "sha256:10dc358fe29d7a4c5be78ab2fb5aa50cb8066babd23e0b5589eb68e26afe58d8", - "sha256:122cd70ee0de2cc9d94da8b8ebcb7dca12b9f4d3beefb94c11e110e1d87503bb", - "sha256:1289f408a8b5c87cdb4fd7975d4021c6e61209ccb956d0411e72bf43c7f78463", - "sha256:1362e9fb78ca72aa52ec1f1fbd62872801302001b0156ed2a1e707850cd30ffd", - "sha256:1502660ab489b1f18c3493c766252cd5d24bc1cbf4bdf3594e0a30de142ed453", - "sha256:16345146b61e93ca20679c83537ccf7245f78b17035f5b1a436fd2b75da04c5e", - "sha256:16cb00911584a6e9ca0f42c305714898120dc6bfbbec90dacedeed4690331a47", - "sha256:1af9b720a048c69e999094e2310138b7cfca5471a9d2c1dbe4b53dd10e516720", - "sha256:1e1553933f4533040491f4e4499bcbbfcee42c4056f56d7e18010e779daab33d", - "sha256:23b7bada6d6b62cba08f4a1b8a95da2d8592aae1db3c167dcb52abcba0a7bef5", - "sha256:27524bc92fdeb464a5057a4677a35f482cf30be2e920bd1d11c46de533cafda6", - "sha256:2c1b2c91bf991b5c641faee78dd5a751dff6155ec51c7a6c7f922dc85431898e", - "sha256:2cdf5700537e5aa4ec9f4a0b498b8d5b03b9859d503e01ea17a6a134a838aa30", - "sha256:302149aaff75939beb8af7f32ac9bf922480033a24fb54f4ebc0c9dc175247c4", - "sha256:305e6f7441c007f296644ba3899c0306ce9fd7a482dbbc06b6e7b7bd6e0ddabc", - "sha256:31e60d8341c3189aa156ca8cb2f6370b29d79cf132e3d091714b0a5a9097eb69", - "sha256:3cf37431de779b29e5c0d8e36868f77f6df53c3c19c20e8404137e257dc80040", - "sha256:3fb6a952796d16c3a309d866eef56a8f4e5591d112c22446e67d33ecb096b44b", - "sha256:433f91c8ab8338662aaa86b0677e6c15c35f8f7b65d4c43d7d1647a8198bc0b0", - "sha256:4abe2f829f6f2d330bccf1bcde2192264ab9a15d6d00e507265f46dc66557014", - "sha256:4b2d150a81a981537801ac7d4f4f5d082c48343612a21f4e2c4cd2e887973bd5", - "sha256:4b84230624d15868e407ba8b66df54fc69ee6a9e9cb6d51eb264b8f2614596f1", - "sha256:50d5e2c026b3e3d145f64c457338ea99edcbdd302fdcbd96418251ac51a98a59", - "sha256:5df10eb9b794932b0cf806f412d1c6d04fb7655ca7ae5caf6354b9edc380a5f7", - "sha256:699b0134e87c0c4e3b224d879d218c4385a06e6b72df73b4c9c9d549155fb837", - "sha256:6d19c34a2121eccfeb642d4ad71163bd3342a8f3a99e6724fe824bdfbc0a5b65", - "sha256:72fd7f6f940bc42914c86700591ccfd1daeff0e414cefcbd7843117df2fac4e9", - "sha256:748847e58c45a37f23db1f53a6dc16ae32aa80ee504653d79336830de1a79ed7", - "sha256:757a08bf0aed5a650a399f8c66bcba00c210bce34408b6d7b09b4837bee8f4da", - "sha256:7659bdfe7716b14a39007e31e957fa64d7f0d9e40a1dbd024bd81b972d76bffb", - "sha256:76bbbb9ceebb9cbb2b14369b3681fecab226792b339f612e79f6575ca31fed45", - "sha256:7776c070943f45cd8303543a6625cf82f2e000ef9c885d52d7828be099e52f42", - "sha256:78378d8dacbe1f4f263347f42ec0a41cc2097cd671c6ac30a65a838284a5e141", - "sha256:7a8995737fae8de03b31ed83acf4f4326a55b217022009d18be19ff87fc9010e", - "sha256:7d571056115bbdc18f199a9ee4c2a1b5884f5e63a3c05fe43d2fc7fc67320515", - "sha256:7f6540b45b2230442f7a0614745131e0a6f28251f5d33ac19d0ed61d80db7153", - "sha256:8591ad5768860ad186dc94fd58b2932604a7639b57eefbbff2b4865af3407691", - "sha256:860edf8533223d82bd6201894bcaf540f828f49075f363390eecf04b12fb94cb", - "sha256:86e9c48ffeddb0f943e87ab65e1e95dccc9b44ef3761af3bf9642973ab7646d2", - "sha256:87851a82bdf849e3c40ff6d8af5f734634e17f52a8f7f7e74486c2f8ce717578", - "sha256:87897ec0e4876c9f2c1ae313519de0ed2ad8041a4d2210a083f9b4a239add2e3", - "sha256:888df211aafe5fad41c0792a686d95c8ba37345d5037f437aa3c09608f9c3b56", - "sha256:8ab6770833976448a9a973bc0df63adedc4c30de4774cec5a9928fc496423ebb", - "sha256:8abd23f94cdcce971d932a5f0a066d40fbc61901fd087aa70d32cccd1793bd20", - "sha256:8b2f31a4cc28aef27355ab896e4b4cc2da2204b2b7adb674d8be7fefa0c93868", - "sha256:8b8fd92c8026e4ba6874e94f538890e35bef2a3a18ea54e3663c578b7916ade1", - "sha256:8becbb9649fd29ee577f9f0405ce2fba5cf9fa2c290c9b044bc235c04473f213", - "sha256:91f43f6b6c9129a56d3e2dccb8b88ffce0e4f4893dd9d69d285676bdf5b9ca14", - "sha256:979d42e0b2c3113526f9716a461e08671788a23ce7e3b5cd090ce3e6a6762641", - "sha256:980f6564218f853a9341fb045446539d4153338926ed2fb222e86dc9b2ae9b8f", - "sha256:99c9345c417a9cff98f9f6e59b0350dcc10c2e0e1ea66acf7946de1cd60541fa", - "sha256:9a544f99c24b6f658907eb9edf290a9c54f4106738b2ab84cd19dc6013cc3abf", - "sha256:9ee181cc00aaba38d9812f4df4e7d828105b6dde3b068cd2c43f1d8f395e0046", - "sha256:a1d439c98e65ab8e5fbcc2b242a16e7a3f076974bff78185ff42ba2d4c220032", - "sha256:a5fc2512bdf5289a1412c936c65d17881d2b46edb0036c63a8d5605dc8d398a3", - "sha256:a69c99274aee2ffdc7f1cfd34044ccb7155790d6f5217d677ea46a6ddead6dd2", - "sha256:b43d56c7c96f5a055f4051be426496db2a616840645d0ab3733d5ceacb2f701b", - "sha256:b508e1bba4ec68fd0ef28505e2dad2f56de7df710c8334c97036705a562cb908", - "sha256:b5df624ee8a4098c3b1149f4817f2a4a0121c4920e1c114af324bc52d6659e2b", - "sha256:bd7f4b2df89bf4e298756c0be0be67fb84d6aa49bda60d46805d43f0e643abd5", - "sha256:c3956ae54285ab30d802756144887e30e013f81c9f03e5ffff9daa46d8ca0154", - "sha256:c531532c21bc1063e65957a1a85a2d13601ec21801f70821c89d9339b16ebc78", - "sha256:cb1d60ed709989e34e7158d97fdb077a2f2dfc505998a84161a70f81a6101172", - "sha256:cb46c3a4002c8322dd0e1b4b53f8a647dcb0f199f5c7a1fc03d3880c3eabbd2c", - "sha256:cb9a8ee23416bd0cfd457118978bc2f6f02c20b95336db486887f670bf92c2b7", - "sha256:d089b1d0b157c9a484f8f7475eecea813d0dc3818adc5bf352903da14fe88fc3", - "sha256:d3b5abb73c45d40d27f9795dac9d6eb1515729c13f93dd67df2be07be6549990", - "sha256:d63f20299441e32171f08fc62f7ea7e401cc12a96f67a36ab2d76439ecfcb118", - "sha256:da1570f301abdfda68f4fdb40c4d3f09af4bb6e4550b4fa5395db0d142b680bc", - "sha256:e2a0313657e6656efca2148cfc91c50fdafca6f811b6c7d0906e6ba57134e560", - "sha256:e4b7fdb9772e087174f446655bbc497a1600b5758f279c6d44fcf344c13d5c8a", - "sha256:ea33ed09157e032f0a7a2627ef87f156e9927697f59b55961439d34bf45af23a", - "sha256:f64abe9301b918d2c352e42198cea0196f3639bc1ad23a4a9d8ae97f66068901", - "sha256:f71256a32609b036adad932e1228b66a6b4e2cae6be397e588ddc0babd9a78b9", - "sha256:fb3f003dee96dbf24a6df71443557f249b17b20083c189995302b14eb01530bf", - "sha256:fe80c23409efb41b86efb5e45f334420a9b5b7828f5b3d08b5ff28f03a024d9e" - ], - "version": "==2.7.3" - }, - "black": { - "hashes": [ - "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5", - "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915", - "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326", - "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940", - "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b", - "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30", - "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c", - "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c", - "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab", - "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27", - "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2", - "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961", - "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9", - "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb", - "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70", - "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331", - "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2", - "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266", - "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d", - "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6", - "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b", - "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925", - "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8", - "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4", - "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3" - ], - "index": "pypi", - "version": "==23.3.0" - }, - "cached-property": { - "hashes": [ - "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130", - "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0" - ], - "version": "==1.5.2" - }, - "cachetools": { - "hashes": [ - "sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14", - "sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4" - ], - "markers": "python_version ~= '3.7'", - "version": "==5.3.0" - }, - "certifi": { - "hashes": [ - "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", - "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" - ], - "markers": "python_version >= '3.6'", - "version": "==2023.5.7" - }, - "cffi": { - "hashes": [ - "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", - "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", - "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", - "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", - "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", - "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", - "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", - "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", - "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", - "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", - "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", - "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", - "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", - "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", - "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", - "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", - "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", - "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", - "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", - "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", - "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", - "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", - "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", - "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", - "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", - "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", - "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", - "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", - "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", - "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", - "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", - "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", - "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", - "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", - "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", - "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", - "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", - "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", - "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", - "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", - "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", - "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", - "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", - "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", - "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", - "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", - "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", - "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", - "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", - "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", - "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", - "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", - "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", - "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", - "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", - "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", - "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", - "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", - "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", - "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", - "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", - "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", - "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", - "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" - ], - "version": "==1.15.1" - }, - "cfgv": { - "hashes": [ - "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426", - "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736" - ], - "markers": "python_full_version >= '3.6.1'", - "version": "==3.3.1" - }, - "chardet": { - "hashes": [ - "sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5", - "sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9" - ], - "markers": "python_version >= '3.7'", - "version": "==5.1.0" - }, - "charset-normalizer": { - "hashes": [ - "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", - "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", - "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", - "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", - "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", - "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", - "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", - "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", - "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", - "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", - "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", - "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", - "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", - "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", - "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", - "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", - "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", - "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", - "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", - "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", - "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", - "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", - "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", - "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", - "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", - "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", - "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", - "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", - "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", - "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", - "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", - "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", - "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", - "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", - "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", - "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", - "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", - "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", - "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", - "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", - "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", - "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", - "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", - "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", - "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", - "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", - "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", - "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", - "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", - "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", - "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", - "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", - "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", - "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", - "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", - "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", - "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", - "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", - "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", - "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", - "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", - "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", - "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", - "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", - "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", - "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", - "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", - "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", - "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", - "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", - "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", - "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", - "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", - "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", - "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.1.0" - }, - "click": { - "hashes": [ - "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", - "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" - ], - "markers": "python_version >= '3.7'", - "version": "==8.1.3" - }, - "coincurve": { - "hashes": [ - "sha256:07e3c37cfadac6896668a130ea46296a3dfdeea0160fd66a51e377ad00795269", - "sha256:0b1a42eba91b9e4f833309e94bc6a270b1700cb4567d4809ef91f00968b57925", - "sha256:0b31ab366fadff16ecfdde96ffc07e70fee83850f88bd1f985a8b4977a68bbfb", - "sha256:116bf1b60a6e72e23c6b153d7c79f0e565d82973d917a3cecf655ffb29263163", - "sha256:14700463009c7d799a746929728223aa53ff1ece394ea408516d98d637434883", - "sha256:1bce17d7475cee9db2c2fa7af07eaab582732b378acf6dcaee417de1df2d8661", - "sha256:23b9ced9cce32dabb4bc15fa6449252fa51efddf0268481973e4c3772a5a68c6", - "sha256:257c6171cd0301c119ef41360f0d0c2fb5cc288717b33d3bd5482a4c9ae04551", - "sha256:286969b6f789bbd9d744d28350a3630c1cb3ee045263469a28892f70a4a6654a", - "sha256:2d2c20d108580bce5efedb980688031462168f4de2446de95898b48a249127a2", - "sha256:2d95103ed43df855121cd925869ae2589360a8d94fcd61b236958deacfb9a359", - "sha256:33678f6b43edbeab6605584c725305f4f814239780c53eba0f8e4bc4a52b1d1a", - "sha256:3caf58877bcf41eb4c1be7a2d54317f0b31541d99ba248dae28821b19c52a0db", - "sha256:412a06b7d1b8229f25318f05e76310298da5ad55d73851eabac7ddfdcdc5bff4", - "sha256:4ab662b67454fea7f0a5ae855ba6ad9410bcaebe68b97f4dade7b5944dec3a11", - "sha256:599b1b3cf097cae920d97f31a5b8e8aff185ca8fa5d8a785b2edf7b199fb9731", - "sha256:6a0c0c1e492ef08efe99d25a23d535e2bff667bbef43d71a6f8893ae811b3d81", - "sha256:704d1abf2e78def33988368592233a8ec9b98bfc45dfa2ec9e898adfad46e5ad", - "sha256:73e464e0ace77c686fdc54590e5592905b6802f9fc20a0c023f0b1585669d6a3", - "sha256:779da694dea1b1d09e16b00e079f6a1195290ce9568f39c95cddf35f1f49ec49", - "sha256:7844f01904e32317a00696a27fd771860e53a2fa62e5c66eace9337d2742c9e6", - "sha256:7f1142252e870f091b2c2c21cc1fadfdd29af23d02e99f29add0f14d1ba94b4c", - "sha256:8290903d4629f27f9f3cdeec72ffa97536c5a6ed5ba7e3413b2707991c650fbe", - "sha256:83379dd70291480df2052554851bfd17444c003aef7c4bb02d96d73eec69fe28", - "sha256:8964e680c622a2b5eea940abdf51c77c1bd3d4fde2a04cec2420bf91981b198a", - "sha256:908467330cd3047c71105a08394c4f3e7dce76e4371b030ba8b0ef863013e3ca", - "sha256:a7b31efe56b3f6434828ad5f6ecde4a95747bb69b59032746482eebb8f3456a4", - "sha256:abeb4c1d78e1a81a3f1c99a406cd858669582ada2d976e876ef694f57dec95ca", - "sha256:ba9eaddd50a2ce0d891af7cee11c2e048d1f0f44bf87db00a5c4b1eee7e3391b", - "sha256:c60690bd7704d8563968d2dded33eb514875a52b5964f085409965ad041b2555", - "sha256:c86626afe417a09d8e80e56780efcae3ae516203b23b5ade84813916e1c94fc1", - "sha256:cd11d2ca5b7e989c5ce1af217a2ad78c19c21afca786f198d1b1a408d6f408dc", - "sha256:d05641cf31d68514c47cb54105d20acbae79fc3ee3942454eaaf411babb3f880", - "sha256:d53e2a268142924c24e9b786b3e6c3603fae54bb8211560036b0e9ce6a9f2dbc", - "sha256:e009f06287507158f16c82cc313c0f3bfd0e9ec1e82d1a4d5fa1c5b6c0060f69", - "sha256:e3abb7f65e2b5fb66a15e374faeaafe6700fdb83fb66d1873ddff91c395a3b74", - "sha256:eba563f7f70c10323227d1890072172bd84df6f814c9a6b012033b214426b6cf", - "sha256:f3e5f2a2d774050b3ea8bf2167f2d598fde58d7690779931516714d98b65d884", - "sha256:f40646d5f29ac9026f8cc1b368bc9ab68710fad055b64fbec020f9bbfc99b242", - "sha256:f44b9ba588b34795d1b4074f9a9fa372adef3fde58300bf32f40a69e8cd72a23", - "sha256:f8bcb9c40fd730cf377fa448f1304355d6497fb3d00b7b0a69a10dfcc14a6d28", - "sha256:fceca9d6ecaa1e8f891675e4f4ff530d54e41c648fc6e8a816835ffa640fa899" - ], - "index": "pypi", - "version": "==18.0.0" - }, - "colorama": { - "hashes": [ - "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", - "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", - "version": "==0.4.6" - }, - "commonmark": { - "hashes": [ - "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60", - "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9" - ], - "version": "==0.9.1" - }, - "cryptography": { - "hashes": [ - "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440", - "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288", - "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b", - "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958", - "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b", - "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d", - "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a", - "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404", - "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b", - "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e", - "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2", - "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c", - "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b", - "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9", - "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b", - "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636", - "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99", - "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e", - "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9" - ], - "index": "pypi", - "version": "==40.0.2" - }, - "cytoolz": { - "hashes": [ - "sha256:02975e2b1e61e47e9afa311f4c1783d155136fad37c54a1cebfe991c5a0798a1", - "sha256:03ab22c9aeb1535f8647d23b6520b0c3d41aaa18d04ef42b352dde1931f2e2b1", - "sha256:061387aa39b9c1576c25d0c59142513c09e77a2a07bd5d6211a43c7a758b6f45", - "sha256:06d38a40fe153f23cda0e823413fe9d9ebee89dd461827285316eff929fb121e", - "sha256:0d474dacbafbdbb44c7de986bbf71ff56ae62df0d52ab3b6fa966784dc88737a", - "sha256:117871f036926e42d3abcee587eafa9dc7383f1064ac53a806d33e76604de311", - "sha256:14f4dbc3f0ec8f6fc68865489af21dcf042ff007d2737c27bfd73296f15db544", - "sha256:1a1eae39656a1685e8b3f433eecfd72015ce5c1d7519e9c8f9402153c68331bb", - "sha256:1b6761791973b1e839b8309d5853b40eeb413368e31beaf5f2b6ed44c6fc7cf0", - "sha256:1be368623e46ad3c1ce807e7a436acb119c26001507b31f92ceb21b86e08c386", - "sha256:1c29dd04e282ddfd45b457e3551075beec9128aa9271245e58ce924bf6e055f8", - "sha256:23c3f57c48eb939d2986eba4aeaeedf930ebf94d58c91a42d4e0fc45ed5427dc", - "sha256:25ff13c468c06da9ef26651dc389e7e8bb7af548f8c1dfb96305f57f18d398a8", - "sha256:2a48940ff0449ffcf690310bf9228bb57885f7571406ed2fe05c98e299987195", - "sha256:2b245b824f4705aef0e4a03fafef3ad6cb59ef43cc564cdbf683ee28dfc11ad5", - "sha256:2ec296f01c29c809698eaf677211b6255691295c2b35caab2131e1e7eaadfbac", - "sha256:2eed428b5e68c28abf2c71195e799850e040d67a27c05f7785319c611665b86a", - "sha256:2f32452e833f0605b871626e6c61b71b0cba24233aad0e04accc3240497d4995", - "sha256:3032c0ba42dee5836d6b57a72a569b65df2c29e8ed266cb900d569003cf933a9", - "sha256:30936ae8fa68b6a1ac8ad6c4bacb5a8a00d51bc6c89f9614a1557b0105d09f8a", - "sha256:31131b54a0c72efc0eb432dc66df546c6a54f2a7d396c9a34cf65ac1c26b1df8", - "sha256:35fae4eaa0eaf9072a5fe2d244a79e65baae4e5ddbe9cc629c5037af800213a2", - "sha256:37320669c364f7d370392af33cc1034b4563da66c22cd3261e3530f4d30dbe4b", - "sha256:37c53f456a1c84566a7d911eec57c4c6280b915ab0600e7671582793cc2769fe", - "sha256:3c9a16a5b4f54d5c0a131f56b0ca65998a9a74958b5b36840c280edba4f8b907", - "sha256:3cb95d23defb2322cddf70efb4af6dac191d95edaa343e8c1f58f1afa4f92ecd", - "sha256:3d6d0b0075731832343eb88229cea4bf39e96f3fc7acbc449aadbdfec2842703", - "sha256:421b224dc4157a0d66625acb5798cf50858cfa06a5232d39a8bd6cf1fa88aca3", - "sha256:4284120c978fb7039901bf6e66832cb3e82ac1b2a107512e735bdb04fd5533ed", - "sha256:42c9e5cd2a48a257b1f2402334b48122501f249b8dcf77082f569f2680f185eb", - "sha256:4534cbfad73cdb1a6dad495530d4186d57d73089c01e9cb0558caab50e46cb3b", - "sha256:48bc2f30d1b2646d675bb8e7778ab59379bf9edc59fe06fb0e7f85ba1271bf44", - "sha256:49911cb533c96d275e31e7eaeb0742ac3f7afe386a1d8c40937814d75039a0f7", - "sha256:499af2aff04f65b4c23de1df08e1d1484a93b23ddaaa0163e44b5070b68356eb", - "sha256:4a0055943074c6c85b77fcc3f42f7c54010a3478daa2ed9d6243d0411c84a4d3", - "sha256:4d700e011156ff112966c6d77faaae125fcaf538f4cec2b9ce8957de82858f0f", - "sha256:50db41e875e36aec11881b8b12bc69c6f4836b7dd9e88a9e5bbf26c2cb3ba6cd", - "sha256:5158ae6d8dd112d003f677039a3613ca7d2592bfe35d7accf23684edb961fc26", - "sha256:56e1ebf6eb4438b8c45cbe7e7b22fc65df0c9efa97a70d3bf2f51e08b19756a5", - "sha256:59641eb1f41cb688b3cb2f98c9003c493a5024325f76b5c02333d08dd972127c", - "sha256:5af43ca7026ead3dd08b261e4f7163cd2cf3ceaa74fa5a81f7b7ea5d445e41d6", - "sha256:5c59bb4ca88e1c69931468bf21f91c8f64d8bf1999eb163b7a2df336f60c304a", - "sha256:633f19d1990b1cf9c67dce9c28bf8b5a18e42785d15548607a100e1236384d5d", - "sha256:6716855f9c669c9e25a185d88e0f169839bf8553d16496796325acd114607c11", - "sha256:6805b007af3557ee6c20dab491b6e55a8177f5b6845d9e6c653374d540366ba7", - "sha256:695dd8231e4f1bfb9a2363775a6e4e56ad9d2058058f817203a49614f4bfe33b", - "sha256:6fa7009c843667868aa8bdb3d68e5ef3d6356dd418b17ed5ca4e1340e82483a5", - "sha256:794cce219bbcb2f36ca220f27d5afd64eaa854e04901bd6f240be156a578b607", - "sha256:7b60caf0fa5f1b49f1062f7dc0f66c7b23e2736bad50fa8296bfb845995e3051", - "sha256:7e903df991f0957e2b271a37bb25d28e0d260c52825ae67507d15ca55a935961", - "sha256:7eb9e6fa8a82c3d2f519f7d3942898a97792e3895569e9501b9431048289b82f", - "sha256:816c2038008ebf50d81171ddfae377f1af9e71d504ec609469dcb0906bfcf2ae", - "sha256:849f461bffa1e7700ccfcb5186df29cd4cdcc9efdb7199cb8b5681dc37045d72", - "sha256:8506d1863f30d26f577c4ed59d2cfd03d2f39569f9cbaa02a764a9de73d312d5", - "sha256:867bebe6be30ee36a836f9b835790762a74f46be8cc339ea57b68dcecdbc1133", - "sha256:97a24c0d0806fcf9a6e75fc18aeb95adc37eb0baf6451f10a2de23ffd815329d", - "sha256:980e7eb7205e01816a92f3290cfc80507957e64656b9271a0dfebb85fe3718c0", - "sha256:9bae431a5985cdb2014be09d37206c288e0d063940cf9539e9769bd2ec26b220", - "sha256:9bebe58f7a160db7838eb70990c704db4bdc2d58bd364290fd69be0587be8bac", - "sha256:9e324a94856d88ecf10f34c102d0ded67d7c3cf644153d77e34a29720ce6aa47", - "sha256:a6e63fc67b23830947b51e0a488992e3c904fce825ead565f3904dcf621d05f7", - "sha256:a72440305f634604827f96810e4469877b89f5c060d6852267650a49b0e3768c", - "sha256:a734511144309ea6e105406633affb74e303a3df07d8a3954f9b01946e27ecb1", - "sha256:a816bff6bf424753e1ac2441902ceaf37ae6718b745a53f6aa1a60c617fb4f5f", - "sha256:a8a7a325b8fe885a6dd91093616c703134f2dacbd869bc519970df3849c2a15b", - "sha256:aa61e3da751a2dfe95aeca603f3ef510071a136ba9905f61ae6cb5d0696271ad", - "sha256:ac5895d5f78dbd8646fe37266655ba4995f9cfec38a86595282fee69e41787da", - "sha256:ac6784cc43aec51a86cf9058a2a343084f8cf46a9281bea5762bfa608127c53b", - "sha256:b1bd8017ef0da935a20106272c5f5ff6b1114add1ccb09cfed1ff7ec5cc01c6d", - "sha256:b2ac288f27a2689d9e39f4cf4df5437a8eb038eaae515169586c77f9f8fb343a", - "sha256:b30cd083ef8af4ba66d9fe5cc75c653ede3f2655f97a032db1a14cc8a006719c", - "sha256:b46ebc463bb45f278a2b94e630061c26e10077cb68d4c93583d8f4199699a5ef", - "sha256:b575393dd431b8e211de35bd593d831dac870172b16e2b7934f3566b8fc89377", - "sha256:b6569f6038133909cd658dbdcc6fc955f791dc47a7f5b55d2066f742253dcbfe", - "sha256:b8b8f88251b84b3877254cdd59c86a1dc6b2b39a03c6c9c067d344ef879562e0", - "sha256:b8eceaa12b7f152b046b67cb053ec2b5b00f73593983de69bc5e63a8aca4a7a8", - "sha256:ba74c239fc6cb6e962eabc420967c7565f3f363b776c89b3df5234caecf1f463", - "sha256:be5a454a95797343d0fb1ed02caecae73a023b1393c112951c84f17ec9f4076c", - "sha256:bef934bd3e024d512c6c0ad1c66eb173f61d9ccb4dbca8d75f727a5604f7c2f6", - "sha256:c1964dcb5f250fd13fac210944b20810d61ef4094a17fbbe502ab7a7eaeeace7", - "sha256:c34e69be4429633fc614febe3127fa03aa418a1abb9252f29d9ba5b3394573a5", - "sha256:c576bd63495150385b8d05eaae775387f378be2fd9805d3ffb4d17c87271fbad", - "sha256:cb8b10405960a8e6801a4702af98ea640130ec6ecfc1208195762de3f5503ba9", - "sha256:cc3645cf6b9246cb8e179db2803e4f0d148211d2a2cf22d5c9b5219111cd91a0", - "sha256:cd35c0be4c46274129dd1678bb911dd4e93d23968b26f4e39cd55bc7cb3b1bac", - "sha256:d540e9c34a61b53b6a374ea108794a48388178f7889d772e364cdbd6df37774c", - "sha256:d72415b0110f7958dd3a5ee98a70166f47bd42ede85e3535669c794d06f57406", - "sha256:dbae37d48ef5a0ab90cfaf2b9312d96f034b1c828208a9cbe25377a1b19ba129", - "sha256:e1c5434db53f3a94a37ad8aedb231901e001995d899af6ed1165f3d27fa04a6a", - "sha256:e75e287787e6adafed9d8c3d3e7647c0b5eb460221f9f92d7dfe48b45ba77c0d", - "sha256:e797c4afb1b7962d3205b1959e1051f7e6bfbba29da44042a9efc2391f1feb38", - "sha256:efd1b2da3ee577fcfa723a214f73186aef9674dd5b28242d90443c7a82722b0f", - "sha256:f5b43ce952a5a31441556c55f5f5f5a8e62c28581a0ff2a2c31c04ef992d73bd", - "sha256:f7194a22a4a24f3561cb6ad1cca9c9b2f2cf34cc8d4bce6d6a24c80960323fa8", - "sha256:f8101ab6de5aa0b26a2b5032bc488d430010c91863e701812d65836b03a12f61", - "sha256:fc33909397481c90de3cec831bfb88d97e220dc91939d996920202f184b4648e", - "sha256:fcc378fa97f02fbcef090b3611305425d72bd1c0afdd13ef4a82dc67d40638b6", - "sha256:ff478682e8ee6dbaa37201bb71bf4a6eee744006ab000e8f5cea05066fc7c845" - ], - "markers": "implementation_name == 'cpython'", - "version": "==0.12.1" - }, - "dataclassy": { - "hashes": [ - "sha256:ad6622cb91e644d13f68768558983fbc22c90a8ff7e355638485d18b9baf1198", - "sha256:bcb030d3d700cf9b1597042bbc8375b92773e6f68f65675a7071862c0ddb87f5" - ], - "markers": "python_version >= '3.6'", - "version": "==0.11.1" - }, - "decorator": { - "hashes": [ - "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", - "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" - ], - "markers": "python_version >= '3.5'", - "version": "==5.1.1" - }, - "deprecated": { - "hashes": [ - "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d", - "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.2.13" - }, - "distlib": { - "hashes": [ - "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46", - "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e" - ], - "version": "==0.3.6" - }, - "eip712": { - "hashes": [ - "sha256:3997dace7e581b66a84d106a10baac47a3f6c94095d79c7d0971ca0ede1926ad", - "sha256:c984c577358d1c7e5d4e52802bf4bd0432e965ba7326448998f95fcc1b6d5269" - ], - "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.2.1" - }, - "eth-abi": { - "hashes": [ - "sha256:6949baba61a2c453f0719309ca145e8876a1cbae7ba377c991e67240c13ec7fc", - "sha256:79d258669f3505319e53638d644a75e1c816db552a1ab1927c3063763cc41031" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==4.0.0" - }, - "eth-account": { - "hashes": [ - "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b", - "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca" - ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==0.8.0" - }, - "eth-ape": { - "hashes": [ - "sha256:afc51a1b8511d0af64400b8846923d5839af56b77ee8867021aa9750bbaaa8ba", - "sha256:f186855fcc3ae2adc35c39734046fcbebbcf7f043fc5bdca1848c8a795784e3c" - ], - "index": "pypi", - "version": "==0.6.9" - }, - "eth-bloom": { - "hashes": [ - "sha256:73576828dff7566b9216403e0898966912f370bae5734241dd3f50ce5664a825", - "sha256:cc86ab9670577996f7fcb8445b7a164ecd211ac91d9c4c2b5a47678623419927" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.0.0" - }, - "eth-hash": { - "extras": [ - "pycryptodome" - ], - "hashes": [ - "sha256:4d992e885f3ae3901abbe98bd776ba62d0f6335f98c6e9fc60a39b9d114dfb5a", - "sha256:9805075f653e114a31a99678e93b257fb4082337696f4eff7b4371fe65158409" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==0.5.1" - }, - "eth-keyfile": { - "hashes": [ - "sha256:471be6e5386fce7b22556b3d4bde5558dbce46d2674f00848027cb0a20abdc8c", - "sha256:609773a1ad5956944a33348413cad366ec6986c53357a806528c8f61c4961560" - ], - "version": "==0.6.1" - }, - "eth-keys": { - "hashes": [ - "sha256:7d18887483bc9b8a3fdd8e32ddcb30044b9f08fcb24a380d93b6eee3a5bb3216", - "sha256:e07915ffb91277803a28a379418bdd1fad1f390c38ad9353a0f189789a440d5d" - ], - "version": "==0.4.0" - }, - "eth-rlp": { - "hashes": [ - "sha256:e88e949a533def85c69fa94224618bbbd6de00061f4cff645c44621dab11cf33", - "sha256:f3263b548df718855d9a8dbd754473f383c0efc82914b0b849572ce3e06e71a6" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==0.3.0" - }, - "eth-tester": { - "extras": [ - "py-evm" - ], - "hashes": [ - "sha256:9cf8742896e26c53e03a79ca6c3a008bf64527f042659bcad306d87fbf2fa79a", - "sha256:d7db78d21bb33bc645d6172dd5ad259eab52399f2b62d4e9fcab075baf8a6877" - ], - "version": "==0.9.0b1" - }, - "eth-typing": { - "hashes": [ - "sha256:323111b3b76c8ceaff01619367aa52806f0264ca0ec1a70d4b9a42e44360f554", - "sha256:e9535e9d524d4c7a0cbd3d9832093cc5001a3e31869e72645674d24c6376d196" - ], - "markers": "python_full_version >= '3.7.2' and python_version < '4'", - "version": "==3.3.0" - }, - "eth-utils": { - "hashes": [ - "sha256:63901e54ec9e4ac16ae0a0d28e1dc48b968c20184d22f2727e5f3ca24b6250bc", - "sha256:fcb4c3c1b32947ba92970963f9aaf40da73b04ea1034964ff8c0e70595127138" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.1.0" - }, - "ethpm-types": { - "hashes": [ - "sha256:7f5637ab33e9c9895732354f632cee595cfc4ce3362bc95e9ac8a7a37cce1e9e", - "sha256:a27ceed908a24dfb5b01da51b01d90acb6f742468996f049c91b6b7c4a8c4fb2" - ], - "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.5.1" - }, - "evm-trace": { - "hashes": [ - "sha256:afb47b727e4322ede8fbf266a0b4cb4e0fc2a29d6a166b27a46244669b1613c0", - "sha256:ddd82bcfebc5ec6eff636b38eef6411fe45acf5319f0e20446b27d9db4650934" - ], - "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.1.0a20" - }, - "exceptiongroup": { - "hashes": [ - "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e", - "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785" - ], - "markers": "python_version < '3.11'", - "version": "==1.1.1" - }, - "executing": { - "hashes": [ - "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc", - "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107" - ], - "version": "==1.2.0" - }, - "filelock": { - "hashes": [ - "sha256:ad98852315c2ab702aeb628412cbf7e95b7ce8c3bf9565670b4eaecf1db370a9", - "sha256:fc03ae43288c013d2ea83c8597001b1129db351aad9c57fe2409327916b8e718" - ], - "markers": "python_version >= '3.7'", - "version": "==3.12.0" - }, - "flake8": { - "hashes": [ - "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7", - "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181" - ], - "index": "pypi", - "version": "==6.0.0" - }, - "frozenlist": { - "hashes": [ - "sha256:008a054b75d77c995ea26629ab3a0c0d7281341f2fa7e1e85fa6153ae29ae99c", - "sha256:02c9ac843e3390826a265e331105efeab489ffaf4dd86384595ee8ce6d35ae7f", - "sha256:034a5c08d36649591be1cbb10e09da9f531034acfe29275fc5454a3b101ce41a", - "sha256:05cdb16d09a0832eedf770cb7bd1fe57d8cf4eaf5aced29c4e41e3f20b30a784", - "sha256:0693c609e9742c66ba4870bcee1ad5ff35462d5ffec18710b4ac89337ff16e27", - "sha256:0771aed7f596c7d73444c847a1c16288937ef988dc04fb9f7be4b2aa91db609d", - "sha256:0af2e7c87d35b38732e810befb9d797a99279cbb85374d42ea61c1e9d23094b3", - "sha256:14143ae966a6229350021384870458e4777d1eae4c28d1a7aa47f24d030e6678", - "sha256:180c00c66bde6146a860cbb81b54ee0df350d2daf13ca85b275123bbf85de18a", - "sha256:1841e200fdafc3d51f974d9d377c079a0694a8f06de2e67b48150328d66d5483", - "sha256:23d16d9f477bb55b6154654e0e74557040575d9d19fe78a161bd33d7d76808e8", - "sha256:2b07ae0c1edaa0a36339ec6cce700f51b14a3fc6545fdd32930d2c83917332cf", - "sha256:2c926450857408e42f0bbc295e84395722ce74bae69a3b2aa2a65fe22cb14b99", - "sha256:2e24900aa13212e75e5b366cb9065e78bbf3893d4baab6052d1aca10d46d944c", - "sha256:303e04d422e9b911a09ad499b0368dc551e8c3cd15293c99160c7f1f07b59a48", - "sha256:352bd4c8c72d508778cf05ab491f6ef36149f4d0cb3c56b1b4302852255d05d5", - "sha256:3843f84a6c465a36559161e6c59dce2f2ac10943040c2fd021cfb70d58c4ad56", - "sha256:394c9c242113bfb4b9aa36e2b80a05ffa163a30691c7b5a29eba82e937895d5e", - "sha256:3bbdf44855ed8f0fbcd102ef05ec3012d6a4fd7c7562403f76ce6a52aeffb2b1", - "sha256:40de71985e9042ca00b7953c4f41eabc3dc514a2d1ff534027f091bc74416401", - "sha256:41fe21dc74ad3a779c3d73a2786bdf622ea81234bdd4faf90b8b03cad0c2c0b4", - "sha256:47df36a9fe24054b950bbc2db630d508cca3aa27ed0566c0baf661225e52c18e", - "sha256:4ea42116ceb6bb16dbb7d526e242cb6747b08b7710d9782aa3d6732bd8d27649", - "sha256:58bcc55721e8a90b88332d6cd441261ebb22342e238296bb330968952fbb3a6a", - "sha256:5c11e43016b9024240212d2a65043b70ed8dfd3b52678a1271972702d990ac6d", - "sha256:5cf820485f1b4c91e0417ea0afd41ce5cf5965011b3c22c400f6d144296ccbc0", - "sha256:5d8860749e813a6f65bad8285a0520607c9500caa23fea6ee407e63debcdbef6", - "sha256:6327eb8e419f7d9c38f333cde41b9ae348bec26d840927332f17e887a8dcb70d", - "sha256:65a5e4d3aa679610ac6e3569e865425b23b372277f89b5ef06cf2cdaf1ebf22b", - "sha256:66080ec69883597e4d026f2f71a231a1ee9887835902dbe6b6467d5a89216cf6", - "sha256:783263a4eaad7c49983fe4b2e7b53fa9770c136c270d2d4bbb6d2192bf4d9caf", - "sha256:7f44e24fa70f6fbc74aeec3e971f60a14dde85da364aa87f15d1be94ae75aeef", - "sha256:7fdfc24dcfce5b48109867c13b4cb15e4660e7bd7661741a391f821f23dfdca7", - "sha256:810860bb4bdce7557bc0febb84bbd88198b9dbc2022d8eebe5b3590b2ad6c842", - "sha256:841ea19b43d438a80b4de62ac6ab21cfe6827bb8a9dc62b896acc88eaf9cecba", - "sha256:84610c1502b2461255b4c9b7d5e9c48052601a8957cd0aea6ec7a7a1e1fb9420", - "sha256:899c5e1928eec13fd6f6d8dc51be23f0d09c5281e40d9cf4273d188d9feeaf9b", - "sha256:8bae29d60768bfa8fb92244b74502b18fae55a80eac13c88eb0b496d4268fd2d", - "sha256:8df3de3a9ab8325f94f646609a66cbeeede263910c5c0de0101079ad541af332", - "sha256:8fa3c6e3305aa1146b59a09b32b2e04074945ffcfb2f0931836d103a2c38f936", - "sha256:924620eef691990dfb56dc4709f280f40baee568c794b5c1885800c3ecc69816", - "sha256:9309869032abb23d196cb4e4db574232abe8b8be1339026f489eeb34a4acfd91", - "sha256:9545a33965d0d377b0bc823dcabf26980e77f1b6a7caa368a365a9497fb09420", - "sha256:9ac5995f2b408017b0be26d4a1d7c61bce106ff3d9e3324374d66b5964325448", - "sha256:9bbbcedd75acdfecf2159663b87f1bb5cfc80e7cd99f7ddd9d66eb98b14a8411", - "sha256:a4ae8135b11652b08a8baf07631d3ebfe65a4c87909dbef5fa0cdde440444ee4", - "sha256:a6394d7dadd3cfe3f4b3b186e54d5d8504d44f2d58dcc89d693698e8b7132b32", - "sha256:a97b4fe50b5890d36300820abd305694cb865ddb7885049587a5678215782a6b", - "sha256:ae4dc05c465a08a866b7a1baf360747078b362e6a6dbeb0c57f234db0ef88ae0", - "sha256:b1c63e8d377d039ac769cd0926558bb7068a1f7abb0f003e3717ee003ad85530", - "sha256:b1e2c1185858d7e10ff045c496bbf90ae752c28b365fef2c09cf0fa309291669", - "sha256:b4395e2f8d83fbe0c627b2b696acce67868793d7d9750e90e39592b3626691b7", - "sha256:b756072364347cb6aa5b60f9bc18e94b2f79632de3b0190253ad770c5df17db1", - "sha256:ba64dc2b3b7b158c6660d49cdb1d872d1d0bf4e42043ad8d5006099479a194e5", - "sha256:bed331fe18f58d844d39ceb398b77d6ac0b010d571cba8267c2e7165806b00ce", - "sha256:c188512b43542b1e91cadc3c6c915a82a5eb95929134faf7fd109f14f9892ce4", - "sha256:c21b9aa40e08e4f63a2f92ff3748e6b6c84d717d033c7b3438dd3123ee18f70e", - "sha256:ca713d4af15bae6e5d79b15c10c8522859a9a89d3b361a50b817c98c2fb402a2", - "sha256:cd4210baef299717db0a600d7a3cac81d46ef0e007f88c9335db79f8979c0d3d", - "sha256:cfe33efc9cb900a4c46f91a5ceba26d6df370ffddd9ca386eb1d4f0ad97b9ea9", - "sha256:d5cd3ab21acbdb414bb6c31958d7b06b85eeb40f66463c264a9b343a4e238642", - "sha256:dfbac4c2dfcc082fcf8d942d1e49b6aa0766c19d3358bd86e2000bf0fa4a9cf0", - "sha256:e235688f42b36be2b6b06fc37ac2126a73b75fb8d6bc66dd632aa35286238703", - "sha256:eb82dbba47a8318e75f679690190c10a5e1f447fbf9df41cbc4c3afd726d88cb", - "sha256:ebb86518203e12e96af765ee89034a1dbb0c3c65052d1b0c19bbbd6af8a145e1", - "sha256:ee78feb9d293c323b59a6f2dd441b63339a30edf35abcb51187d2fc26e696d13", - "sha256:eedab4c310c0299961ac285591acd53dc6723a1ebd90a57207c71f6e0c2153ab", - "sha256:efa568b885bca461f7c7b9e032655c0c143d305bf01c30caf6db2854a4532b38", - "sha256:efce6ae830831ab6a22b9b4091d411698145cb9b8fc869e1397ccf4b4b6455cb", - "sha256:f163d2fd041c630fed01bc48d28c3ed4a3b003c00acd396900e11ee5316b56bb", - "sha256:f20380df709d91525e4bee04746ba612a4df0972c1b8f8e1e8af997e678c7b81", - "sha256:f30f1928162e189091cf4d9da2eac617bfe78ef907a761614ff577ef4edfb3c8", - "sha256:f470c92737afa7d4c3aacc001e335062d582053d4dbe73cda126f2d7031068dd", - "sha256:ff8bf625fe85e119553b5383ba0fb6aa3d0ec2ae980295aaefa552374926b3f4" - ], - "markers": "python_version >= '3.7'", - "version": "==1.3.3" - }, - "hexbytes": { - "hashes": [ - "sha256:21c3a5bd00a383097f0369c387174e79839d75c4ccc3a7edda315c9644f4458a", - "sha256:afeebfb800f5f15a3ca5bab52e49eabcb4b6dac06ec8ff01a94fdb890c6c0712" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==0.3.0" - }, - "identify": { - "hashes": [ - "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4", - "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d" - ], - "markers": "python_version >= '3.7'", - "version": "==2.5.24" - }, - "idna": { - "hashes": [ - "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", - "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" - ], - "markers": "python_version >= '3.5'", - "version": "==3.4" - }, - "ijson": { - "hashes": [ - "sha256:00594ed3ef2218fee8c652d9e7f862fb39f8251b67c6379ef12f7e044bf6bbf3", - "sha256:03dfd4c8ed19e704d04b0ad4f34f598dc569fd3f73089f80eed698e7f6069233", - "sha256:09fe3a53e00c59de33b825ba8d6d39f544a7d7180983cd3d6bd2c3794ae35442", - "sha256:0eb838b4e4360e65c00aa13c78b35afc2477759d423b602b60335af5bed3de5b", - "sha256:11bb84a53c37e227e733c6dffad2037391cf0b3474bff78596dc4373b02008a0", - "sha256:11dfd64633fe1382c4237477ac3836f682ca17e25e0d0799e84737795b0611df", - "sha256:1302dc6490da7d44c3a76a5f0b87d8bec9f918454c6d6e6bf4ed922e47da58bb", - "sha256:13f2939db983327dd0492f6c1c0e77be3f2cbf9b620c92c7547d1d2cd6ef0486", - "sha256:158494bfe89ccb32618d0e53b471364080ceb975462ec464d9f9f37d9832b653", - "sha256:183841b8d033ca95457f61fb0719185dc7f51a616070bdf1dcaf03473bed05b2", - "sha256:1a75cfb34217b41136b714985be645f12269e4345da35d7b48aabd317c82fd10", - "sha256:1d64ffaab1d006a4fa9584a4c723e95cc9609bf6c3365478e250cd0bffaaadf3", - "sha256:25919b444426f58dcc62f763d1c6be6297f309da85ecab55f51da6ca86fc9fdf", - "sha256:26b57838e712b8852c40ec6d74c6de8bb226446440e1af1354c077a6f81b9142", - "sha256:27409ba44cfd006901971063d37699f72e092b5efaa1586288b5067d80c6b5bd", - "sha256:2d50b2ad9c6c51ca160aa60de7f4dacd1357c38d0e503f51aed95c1c1945ff53", - "sha256:2f204f6d4cedeb28326c230a0b046968b5263c234c65a5b18cee22865800fff7", - "sha256:2f9d449f86f8971c24609e319811f7f3b6b734f0218c4a0e799debe19300d15b", - "sha256:3b21b1ecd20ed2f918f6f99cdfa68284a416c0f015ffa64b68fa933df1b24d40", - "sha256:3ccc4d4b947549f9c431651c02b95ef571412c78f88ded198612a41d5c5701a0", - "sha256:41e955e173f77f54337fecaaa58a35c464b75e232b1f939b282497134a4d4f0e", - "sha256:424232c2bf3e8181f1b572db92c179c2376b57eba9fc8931453fba975f48cb80", - "sha256:434e57e7ec5c334ccb0e67bb4d9e60c264dcb2a3843713dbeb12cb19fe42a668", - "sha256:47a56e3628c227081a2aa58569cbf2af378bad8af648aa904080e87cd6644cfb", - "sha256:4d4e143908f47307042c9678803d27706e0e2099d0a6c1988c6cae1da07760bf", - "sha256:4e7c4fdc7d24747c8cc7d528c145afda4de23210bf4054bd98cd63bf07e4882d", - "sha256:51c1db80d7791fb761ad9a6c70f521acd2c4b0e5afa2fe0d813beb2140d16c37", - "sha256:5242cb2313ba3ece307b426efa56424ac13cc291c36f292b501d412a98ad0703", - "sha256:535665a77408b6bea56eb828806fae125846dff2e2e0ed4cb2e0a8e36244d753", - "sha256:535a59d61b9aef6fc2a3d01564c1151e38e5a44b92cd6583cb4e8ccf0f58043f", - "sha256:53f1a13eb99ab514c562869513172135d4b55a914b344e6518ba09ad3ef1e503", - "sha256:5418066666b25b05f2b8ae2698408daa0afa68f07b0b217f2ab24465b7e9cbd9", - "sha256:56500dac8f52989ef7c0075257a8b471cbea8ef77f1044822742b3cbf2246e8b", - "sha256:5809752045ef74c26adf159ed03df7fb7e7a8d656992fd7562663ed47d6d39d9", - "sha256:5c93ae4d49d8cf8accfedc8a8e7815851f56ceb6e399b0c186754a68fed22844", - "sha256:5d365df54d18076f1d5f2ffb1eef2ac7f0d067789838f13d393b5586fbb77b02", - "sha256:6def9ac8d73b76cb02e9e9837763f27f71e5e67ec0afae5f1f4cf8f61c39b1ac", - "sha256:6ee9537e8a8aa15dd2d0912737aeb6265e781e74f7f7cad8165048fcb5f39230", - "sha256:6eed1ddd3147de49226db4f213851cf7860493a7b6c7bd5e62516941c007094c", - "sha256:6fd55f7a46429de95383fc0d0158c1bfb798e976d59d52830337343c2d9bda5c", - "sha256:775444a3b647350158d0b3c6c39c88b4a0995643a076cb104bf25042c9aedcf8", - "sha256:79b94662c2e9d366ab362c2c5858097eae0da100dea0dfd340db09ab28c8d5e8", - "sha256:7e0d1713a9074a7677eb8e43f424b731589d1c689d4676e2f57a5ce59d089e89", - "sha256:80a5bd7e9923cab200701f67ad2372104328b99ddf249dbbe8834102c852d316", - "sha256:830de03f391f7e72b8587bb178c22d534da31153e9ee4234d54ef82cde5ace5e", - "sha256:84eed88177f6c243c52b280cb094f751de600d98d2221e0dec331920894889ec", - "sha256:8f20072376e338af0e51ccecb02335b4e242d55a9218a640f545be7fc64cca99", - "sha256:93aaec00cbde65c192f15c21f3ee44d2ab0c11eb1a35020b5c4c2676f7fe01d0", - "sha256:9829a17f6f78d7f4d0aeff28c126926a1e5f86828ebb60d6a0acfa0d08457f9f", - "sha256:986a0347fe19e5117a5241276b72add570839e5bcdc7a6dac4b538c5928eeff5", - "sha256:992e9e68003df32e2aa0f31eb82c0a94f21286203ab2f2b2c666410e17b59d2f", - "sha256:9ecbf85a6d73fc72f6534c38f7d92ed15d212e29e0dbe9810a465d61c8a66d23", - "sha256:a340413a9bf307fafd99254a4dd4ac6c567b91a205bf896dde18888315fd7fcd", - "sha256:a4465c90b25ca7903410fabe4145e7b45493295cc3b84ec1216653fbe9021276", - "sha256:a7698bc480df76073067017f73ba4139dbaae20f7a6c9a0c7855b9c5e9a62124", - "sha256:a8af68fe579f6f0b9a8b3f033d10caacfed6a4b89b8c7a1d9478a8f5d8aba4a1", - "sha256:a8c84dff2d60ae06d5280ec87cd63050bbd74a90c02bfc7c390c803cfc8ac8fc", - "sha256:b3456cd5b16ec9db3ef23dd27f37bf5a14f765e8272e9af3e3de9ee9a4cba867", - "sha256:b3bdd2e12d9b9a18713dd6f3c5ef3734fdab25b79b177054ba9e35ecc746cb6e", - "sha256:b3c6cf18b61b94db9590f86af0dd60edbccb36e151643152b8688066f677fbc9", - "sha256:b3e8d46c1004afcf2bf513a8fb575ee2ec3d8009a2668566b5926a2dcf7f1a45", - "sha256:bced6cd5b09d4d002dda9f37292dd58d26eb1c4d0d179b820d3708d776300bb4", - "sha256:bed8dcb7dbfdb98e647ad47676045e0891f610d38095dcfdae468e1e1efb2766", - "sha256:c85892d68895ba7a0b16a0e6b7d9f9a0e30e86f2b1e0f6986243473ba8735432", - "sha256:c8646eb81eec559d7d8b1e51a5087299d06ecab3bc7da54c01f7df94350df135", - "sha256:cd0450e76b9c629b7f86e7d5b91b7cc9c281dd719630160a992b19a856f7bdbd", - "sha256:ce4be2beece2629bd24bcab147741d1532bd5ed40fb52f2b4fcde5c5bf606df0", - "sha256:d3e255ef05b434f20fc9d4b18ea15733d1038bec3e4960d772b06216fa79e82d", - "sha256:dcec67fc15e5978ad286e8cc2a3f9347076e28e0e01673b5ace18c73da64e3ff", - "sha256:e97e6e07851cefe7baa41f1ebf5c0899d2d00d94bfef59825752e4c784bebbe8", - "sha256:eb167ee21d9c413d6b0ab65ec12f3e7ea0122879da8b3569fa1063526f9f03a8", - "sha256:efee1e9b4f691e1086730f3010e31c55625bc2e0f7db292a38a2cdf2774c2e13", - "sha256:f349bee14d0a4a72ba41e1b1cce52af324ebf704f5066c09e3dd04cfa6f545f0", - "sha256:f470f3d750e00df86e03254fdcb422d2f726f4fb3a0d8eeee35e81343985e58a", - "sha256:f6464242f7895268d3086d7829ef031b05c77870dad1e13e51ef79d0a9cfe029", - "sha256:f6785ba0f65eb64b1ce3b7fcfec101085faf98f4e77b234f14287fd4138ffb25", - "sha256:fd218b338ac68213c997d4c88437c0e726f16d301616bf837e1468901934042c", - "sha256:fe7f414edd69dd9199b0dfffa0ada22f23d8009e10fe2a719e0993b7dcc2e6e2" - ], - "version": "==3.2.0.post0" - }, - "importlib-metadata": { - "hashes": [ - "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed", - "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705" - ], - "markers": "python_version >= '3.7'", - "version": "==6.6.0" - }, - "importlib-resources": { - "hashes": [ - "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6", - "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a" - ], - "markers": "python_version < '3.9'", - "version": "==5.12.0" - }, - "iniconfig": { - "hashes": [ - "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", - "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" - ], - "markers": "python_version >= '3.7'", - "version": "==2.0.0" - }, - "ipython": { - "hashes": [ - "sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea", - "sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc" - ], - "markers": "python_version >= '3.8'", - "version": "==8.12.2" - }, - "isort": { - "hashes": [ - "sha256:0ec8b74806e80fec33e6e7ba89d35e17b3eb1c4c74316ea44cf877cc26e8b118", - "sha256:cde11e804641edbe1b6b95d56582eb541f27eebc77864c6015545944bb0e9c76" - ], - "index": "pypi", - "version": "==6.0.0b2" - }, - "jedi": { - "hashes": [ - "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e", - "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612" - ], - "markers": "python_version >= '3.6'", - "version": "==0.18.2" - }, - "jsonschema": { - "hashes": [ - "sha256:112d303b0291095108013e712d4038d85f11dfc6b0141430932fce7c33d221b8", - "sha256:e8a9b0e9245d8e9c57e2281f30f1d11e0326abb919aa6866997a016487fcaef8" - ], - "markers": "python_version >= '3.8'", - "version": "==4.18.0a7" - }, - "jsonschema-specifications": { - "hashes": [ - "sha256:2914352153a22053662886c096a4d905a41e771f28baa52c86d135b359dc64ed", - "sha256:ca4c182adb268045fb70e6c09eb818ff4f9d27e762725b0f257cfdd318dffca9" - ], - "markers": "python_version >= '3.8'", - "version": "==2023.5.1" - }, - "lazyasd": { - "hashes": [ - "sha256:a3196f05cff27f952ad05767e5735fd564b4ea4e89b23f5ea1887229c3db145b" - ], - "version": "==0.1.4" - }, - "lru-dict": { - "hashes": [ - "sha256:075b9dd46d7022b675419bc6e3631748ae184bc8af195d20365a98b4f3bb2914", - "sha256:0972d669e9e207617e06416166718b073a49bf449abbd23940d9545c0847a4d9", - "sha256:0f83cd70a6d32f9018d471be609f3af73058f700691657db4a3d3dd78d3f96dd", - "sha256:10fe823ff90b655f0b6ba124e2b576ecda8c61b8ead76b456db67831942d22f2", - "sha256:163079dbda54c3e6422b23da39fb3ecc561035d65e8496ff1950cbdb376018e1", - "sha256:1fe16ade5fd0a57e9a335f69b8055aaa6fb278fbfa250458e4f6b8255115578f", - "sha256:262a4e622010ceb960a6a5222ed011090e50954d45070fd369c0fa4d2ed7d9a9", - "sha256:2f340b61f3cdfee71f66da7dbfd9a5ea2db6974502ccff2065cdb76619840dca", - "sha256:348167f110494cfafae70c066470a6f4e4d43523933edf16ccdb8947f3b5fae0", - "sha256:3b1692755fef288b67af5cd8a973eb331d1f44cb02cbdc13660040809c2bfec6", - "sha256:3ca497cb25f19f24171f9172805f3ff135b911aeb91960bd4af8e230421ccb51", - "sha256:3d003a864899c29b0379e412709a6e516cbd6a72ee10b09d0b33226343617412", - "sha256:3fef595c4f573141d54a38bda9221b9ee3cbe0acc73d67304a1a6d5972eb2a02", - "sha256:484ac524e4615f06dc72ffbfd83f26e073c9ec256de5413634fbd024c010a8bc", - "sha256:55aeda6b6789b2d030066b4f5f6fc3596560ba2a69028f35f3682a795701b5b1", - "sha256:5a592363c93d6fc6472d5affe2819e1c7590746aecb464774a4f67e09fbefdfc", - "sha256:5b09dbe47bc4b4d45ffe56067aff190bc3c0049575da6e52127e114236e0a6a7", - "sha256:6e2a7aa9e36626fb48fdc341c7e3685a31a7b50ea4918677ea436271ad0d904d", - "sha256:70364e3cbef536adab8762b4835e18f5ca8e3fddd8bd0ec9258c42bbebd0ee77", - "sha256:720f5728e537f11a311e8b720793a224e985d20e6b7c3d34a891a391865af1a2", - "sha256:7284bdbc5579bbdc3fc8f869ed4c169f403835566ab0f84567cdbfdd05241847", - "sha256:7be1b66926277993cecdc174c15a20c8ce785c1f8b39aa560714a513eef06473", - "sha256:86d32a4498b74a75340497890a260d37bf1560ad2683969393032977dd36b088", - "sha256:878bc8ef4073e5cfb953dfc1cf4585db41e8b814c0106abde34d00ee0d0b3115", - "sha256:881104711900af45967c2e5ce3e62291dd57d5b2a224d58b7c9f60bf4ad41b8c", - "sha256:8c50ab9edaa5da5838426816a2b7bcde9d576b4fc50e6a8c062073dbc4969d78", - "sha256:8f6561f9cd5a452cb84905c6a87aa944fdfdc0f41cc057d03b71f9b29b2cc4bd", - "sha256:93336911544ebc0e466272043adab9fb9f6e9dcba6024b639c32553a3790e089", - "sha256:9447214e4857e16d14158794ef01e4501d8fad07d298d03308d9f90512df02fa", - "sha256:97c24ffc55de6013075979f440acd174e88819f30387074639fb7d7178ca253e", - "sha256:99f6cfb3e28490357a0805b409caf693e46c61f8dbb789c51355adb693c568d3", - "sha256:9be6c4039ef328676b868acea619cd100e3de1a35b3be211cf0eaf9775563b65", - "sha256:9d70257246b8207e8ef3d8b18457089f5ff0dfb087bd36eb33bce6584f2e0b3a", - "sha256:a777d48319d293b1b6a933d606c0e4899690a139b4c81173451913bbcab6f44f", - "sha256:add762163f4af7f4173fafa4092eb7c7f023cf139ef6d2015cfea867e1440d82", - "sha256:b6f64005ede008b7a866be8f3f6274dbf74e656e15e4004e9d99ad65efb01809", - "sha256:beb089c46bd95243d1ac5b2bd13627317b08bf40dd8dc16d4b7ee7ecb3cf65ca", - "sha256:c07163c9dcbb2eca377f366b1331f46302fd8b6b72ab4d603087feca00044bb0", - "sha256:c2fe692332c2f1d81fd27457db4b35143801475bfc2e57173a2403588dd82a42", - "sha256:ca8f89361e0e7aad0bf93ae03a31502e96280faeb7fb92267f4998fb230d36b2", - "sha256:d2ed4151445c3f30423c2698f72197d64b27b1cd61d8d56702ffe235584e47c2", - "sha256:db20597c4e67b4095b376ce2e83930c560f4ce481e8d05737885307ed02ba7c1", - "sha256:de972c7f4bc7b6002acff2a8de984c55fbd7f2289dba659cfd90f7a0f5d8f5d1", - "sha256:f1df1da204a9f0b5eb8393a46070f1d984fa8559435ee790d7f8f5602038fc00", - "sha256:f4d0a6d733a23865019b1c97ed6fb1fdb739be923192abf4dbb644f697a26a69", - "sha256:f874e9c2209dada1a080545331aa1277ec060a13f61684a8642788bf44b2325f", - "sha256:f877f53249c3e49bbd7612f9083127290bede6c7d6501513567ab1bf9c581381", - "sha256:f9d5815c0e85922cd0fb8344ca8b1c7cf020bf9fc45e670d34d51932c91fd7ec" - ], - "version": "==1.1.8" - }, - "matplotlib-inline": { - "hashes": [ - "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", - "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" - ], - "markers": "python_version >= '3.5'", - "version": "==0.1.6" - }, - "mccabe": { - "hashes": [ - "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", - "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e" - ], - "markers": "python_version >= '3.6'", - "version": "==0.7.0" - }, - "morphys": { - "hashes": [ - "sha256:76d6dbaa4d65f597e59d332c81da786d83e4669387b9b2a750cfec74e7beec20" - ], - "version": "==1.0" - }, - "msgspec": { - "hashes": [ - "sha256:09aad00f25fc8f37bd118554a46c448f028bbf67fb048cd3f09671f634c5315c", - "sha256:0af2ae0f398ffe1b88fd1540d64bd23b490434d632305700aa7e54d90e5fb618", - "sha256:0c0c4706ee200b61b510f76f505e03730abc6fbdd4336f6fdc99538798df7ddc", - "sha256:1016f241013f5569716bb7ae28897bc2f7d72ea1f0120673afa8ceb9823f9fd6", - "sha256:154a790227c32ab66671df48af991b288a97456cc488d21b1eea63f390eae617", - "sha256:18a3870c6348dee8a2f315a7c95219707123550e4fa648b7a2ec9f327e96e46c", - "sha256:1d8104ee7b6babba778c9b73771964189ab0bf95f3fe513e26425f9b4ff58d10", - "sha256:1d8c6ef247ca5178f161288a46654b88849975e4c24adff9ad7c778f77b0f2e1", - "sha256:217fa8a0eba122401c3fae3d07e1444556447ba3b9d65fc6647421b35430f2e2", - "sha256:2c67ed9bec9da6fc42255f6351fc423447ee535f0c9834b678bb1e049ab37e69", - "sha256:3df96499ec70b714896d9941ae0bd8d1ff267abb39f85f9984e6e7d4e5176863", - "sha256:46e275ad73531b0a8d8c4b36c2f1fd7c286b89545b806e10da8443c8f4b258ca", - "sha256:50ebfe068e6330afcb32bbc6863984175b99c1988a7ede5e8f6f898f5270e815", - "sha256:51b11b0da147348500c54a7be4f804d63accce9c74410e15e994f6ec69177bdc", - "sha256:5f01e7388de0bb2d30ac5dfdce9a63f8643d1bc9657e24efb1f7e2ffdf70732b", - "sha256:5fc1971fb06ba4a282a7dd5c7dab95d53c7785203d1f9100a0b8ade041605714", - "sha256:6652d4152091266150ba238ba674db59a2349c0b3548401c9881f3702d6ee6fc", - "sha256:7afb2719019c8e304c7abc6c30d3f0516f43ace563a0b223805de19ae500cbab", - "sha256:80d753014680dfdf4a8f8a133f6e6a64e4a8f16f1722652512277a360ee9e66c", - "sha256:8d288240680f3e0153a735f411a22ae16e47498d501b4dfa0434a1f888173b26", - "sha256:9074e743f538297a30ee043b5cd31c6fcd4d99a1995f619c01137d83ec0e5963", - "sha256:9e95dec734d2b8efaf8c9a3bbb6e162336c9b3ffc58a2b34001c05a0f6e8e581", - "sha256:a515af7c8b25e7f38475f91d7b733c711d128dbe7febb9fa3621d8386893cae6", - "sha256:ba8744d0f51f5a169c28545e98087c10039d7ee93c92f97209f7ec69a926470a", - "sha256:cd1ae653ad3e3914dafa11156243e92a594e2c916a19dbbcf72102a1bef812c2", - "sha256:d365daaa42e8a42691046d0eead11ffc26ff1e72b0eb291488ddd2cd5e642513", - "sha256:d4edb271657402cb31935d573b176f088fa2b77abf5aa8c4e2dceaf113bf5970", - "sha256:e0b6ef1a716f9232ca9d9934ef06bd0fd3dc2ace5df7b96fa7971d1d72ec15cc", - "sha256:ef239496d2d75d94ac89a54016e92c94d7486d19a4ab9dca7f11f8a837cccdb3" - ], - "markers": "python_version >= '3.8'", - "version": "==0.15.1" - }, - "multidict": { - "hashes": [ - "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9", - "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8", - "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03", - "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710", - "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161", - "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664", - "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569", - "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067", - "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313", - "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706", - "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2", - "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636", - "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49", - "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93", - "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603", - "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0", - "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60", - "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4", - "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e", - "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1", - "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60", - "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951", - "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc", - "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe", - "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95", - "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d", - "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8", - "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed", - "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2", - "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775", - "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87", - "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c", - "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2", - "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98", - "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3", - "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe", - "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78", - "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660", - "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176", - "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e", - "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988", - "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c", - "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c", - "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0", - "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449", - "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f", - "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde", - "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5", - "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d", - "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac", - "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a", - "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9", - "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca", - "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11", - "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35", - "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063", - "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b", - "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982", - "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258", - "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1", - "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52", - "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480", - "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7", - "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461", - "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d", - "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc", - "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779", - "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a", - "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547", - "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0", - "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171", - "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf", - "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d", - "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba" - ], - "markers": "python_version >= '3.7'", - "version": "==6.0.4" - }, - "mypy-extensions": { - "hashes": [ - "sha256:c8b707883a96efe9b4bb3aaf0dcc07e7e217d7d8368eec4db4049ee9e142f4fd" - ], - "markers": "python_version >= '2.7'", - "version": "==0.4.4" - }, - "nodeenv": { - "hashes": [ - "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2", - "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", - "version": "==1.8.0" - }, - "nucypher-core": { - "hashes": [ - "sha256:28489ded2fd94fc1ac541c199624d7206ce83a9a275c40c913390977e3c18e08", - "sha256:2f85aebf29435f8359f6092cbfb7b0f754623e473107c7e2dd8a7c7c3881b2a4", - "sha256:37dade4937218fd47e7d8f3f8eabc41516f99b75b9fd09671bf4b74834fbdd2f", - "sha256:3bb1f181e5e176de74efc4cc8efa462383c8754433750fcb0a69d91b6c2e8460", - "sha256:6358879b2660602a5e1ab860d7853f0c04173392825bbec2beaec5f25040e382", - "sha256:689f9a3d996de90fd2758cd83ce75b60e5c1cfbaf3b45d36b05122eadaad962e", - "sha256:6c5bb09e1f609363edd4147a45f6d535cc29a317407ba209c9608308c27d5890", - "sha256:85411e3a33ee7c6680d88d14e221df122b2ae8c3d8a9dd388107fd4f9393431e", - "sha256:8a21482a84a7932707b9c74e3c34372559d50eb9a31f3bbd99d43bf5d3deb7c5", - "sha256:986e247a6023a859f7ad5712d8256adf385191817a45b04ea04e35d083fec02f", - "sha256:ac241d959c2f721a73ba60d0fc66ff813061baef6c6b928d199e2ed7fbcb6d26", - "sha256:be86a5d179e6873fd3e1c8917423853182cfd2b34ba54d0909494fb027a6836b", - "sha256:c7605e7a9a6dbb9577f80c59eedff576519aa5716dff4c9667a27fc116dc642e", - "sha256:caa5afb7459ccca0fe22e200204f3324373c08a68a0f7bd8f278bb628c5844b7", - "sha256:eab9c077d0c6479e56ad61e49096d1ccea22dd36d99789e19b162c7e7fd0aa39", - "sha256:f74faf208aecf1edcc83640ed2696a75315de5088fec51650c3e38d13f041587" - ], - "index": "pypi", - "version": "==0.8.0" - }, - "numpy": { - "hashes": [ - "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187", - "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812", - "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7", - "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4", - "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6", - "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0", - "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4", - "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570", - "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4", - "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f", - "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80", - "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289", - "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385", - "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078", - "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c", - "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463", - "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3", - "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950", - "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155", - "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7", - "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c", - "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096", - "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17", - "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf", - "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4", - "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02", - "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c", - "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b" - ], - "markers": "python_version < '3.10'", - "version": "==1.24.3" - }, - "packaging": { - "hashes": [ - "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", - "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" - ], - "markers": "python_version >= '3.7'", - "version": "==23.1" - }, - "pandas": { - "hashes": [ - "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813", - "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792", - "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406", - "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373", - "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328", - "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996", - "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf", - "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6", - "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7", - "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc", - "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1", - "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23", - "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a", - "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51", - "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572", - "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31", - "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5", - "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a", - "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003", - "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d", - "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354", - "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee", - "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa", - "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0", - "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9", - "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae", - "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc" - ], - "markers": "python_version >= '3.8'", - "version": "==1.5.3" - }, - "parsimonious": { - "hashes": [ - "sha256:b2ad1ae63a2f65bd78f5e0a8ac510a98f3607a43f1db2a8d46636a5d9e4a30c1" - ], - "version": "==0.9.0" - }, - "parso": { - "hashes": [ - "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", - "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" - ], - "markers": "python_version >= '3.6'", - "version": "==0.8.3" - }, - "pathspec": { - "hashes": [ - "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687", - "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293" - ], - "markers": "python_version >= '3.7'", - "version": "==0.11.1" - }, - "pexpect": { - "hashes": [ - "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", - "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" - ], - "markers": "sys_platform != 'win32'", - "version": "==4.8.0" - }, - "pickleshare": { - "hashes": [ - "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", - "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" - ], - "version": "==0.7.5" - }, - "pkgutil-resolve-name": { - "hashes": [ - "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", - "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" - ], - "markers": "python_version < '3.9'", - "version": "==1.3.10" - }, - "platformdirs": { - "hashes": [ - "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f", - "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5" - ], - "markers": "python_version >= '3.7'", - "version": "==3.5.1" - }, - "pluggy": { - "hashes": [ - "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", - "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" - ], - "markers": "python_version >= '3.6'", - "version": "==1.0.0" - }, - "pre-commit": { - "hashes": [ - "sha256:66e37bec2d882de1f17f88075047ef8962581f83c234ac08da21a0c58953d1f0", - "sha256:8056bc52181efadf4aac792b1f4f255dfd2fb5a350ded7335d251a68561e8cb6" - ], - "index": "pypi", - "version": "==3.3.2" - }, - "prompt-toolkit": { - "hashes": [ - "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b", - "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.0.38" - }, - "protobuf": { - "hashes": [ - "sha256:2036a3a1e7fc27f973fa0a7888dce712393af644f4695385f117886abc792e39", - "sha256:32e78beda26d7a101fecf15d7a4a792278a0d26a31bc327ff05564a9d68ab8ee", - "sha256:346990f634272caac1f09efbcfbbacb23098b1f606d172534c6fa2d9758bb436", - "sha256:3b8905eafe4439076e1f58e9d1fa327025fd2777cf90f14083092ae47f77b0aa", - "sha256:3ce113b3f3362493bddc9069c2163a38f240a9ed685ff83e7bcb756b05e1deb0", - "sha256:410bcc0a5b279f634d3e16082ce221dfef7c3392fac723500e2e64d1806dd2be", - "sha256:5b9cd6097e6acae48a68cb29b56bc79339be84eca65b486910bb1e7a30e2b7c1", - "sha256:65f0ac96ef67d7dd09b19a46aad81a851b6f85f89725577f16de38f2d68ad477", - "sha256:91fac0753c3c4951fbb98a93271c43cc7cf3b93cf67747b3e600bb1e5cc14d61", - "sha256:95789b569418a3e32a53f43d7763be3d490a831e9c08042539462b6d972c2d7e", - "sha256:ac50be82491369a9ec3710565777e4da87c6d2e20404e0abb1f3a8f10ffd20f0", - "sha256:decf119d54e820f298ee6d89c72d6b289ea240c32c521f00433f9dc420595f38", - "sha256:f9510cac91e764e86acd74e2b7f7bc5e6127a7f3fb646d7c8033cfb84fd1176a" - ], - "markers": "python_version >= '3.7'", - "version": "==4.23.1" - }, - "ptyprocess": { - "hashes": [ - "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", - "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" - ], - "version": "==0.7.0" - }, - "pure-eval": { - "hashes": [ - "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", - "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" - ], - "version": "==0.2.2" - }, - "py-cid": { - "hashes": [ - "sha256:22f432cc6fb68d12a9c35dbdc92c95484fc49e31dfcb9e0efb0082233c5394e3", - "sha256:7c48a6ee0bc50fd114d4b24849cd689a31d3ad5bdf8fa073bf68f846fd58c5da" - ], - "version": "==0.3.0" - }, - "py-ecc": { - "hashes": [ - "sha256:3fc8a79e38975e05dc443d25783fd69212a1ca854cc0efef071301a8f7d6ce1d", - "sha256:54e8aa4c30374fa62d582c599a99f352c153f2971352171318bd6910a643be0b" - ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==6.0.0" - }, - "py-evm": { - "hashes": [ - "sha256:5d23d441a5afe8543e0a90966c61bcce8c6d9d1c9303a536f85d237a264b8e4d", - "sha256:844f1858f9c92633a862de8b466313174fb4d5a67c6e62d3cad3be34587ebddc" - ], - "version": "==0.7.0a2" - }, - "py-geth": { - "hashes": [ - "sha256:584ba92f227249c65f102f5734e48fc80e48702889e16623d5db2b43ba69a11c", - "sha256:9faca7562912fd1d43ac829b5f19f2055cd94ea49c4532b50699d74d7b8a1782" - ], - "markers": "python_version >= '3'", - "version": "==3.12.0" - }, - "py-multibase": { - "hashes": [ - "sha256:2677c1fafcc0ae15ddb9c7f444c5becc2530b3889124fd4fa2959ddfefb8c15b", - "sha256:d28a20efcbb61eec28f55827a0bf329c7cea80fffd933aecaea6ae8431267fe4" - ], - "version": "==1.0.3" - }, - "py-multicodec": { - "hashes": [ - "sha256:55b6bb53088a63e56c434cb11b29795e8805652bac43d50a8f2a9bcf5ca84e1f", - "sha256:83021ffe8c0e272d19b5b86bc5b39efa67c8e9f4735ce6cafdbc1ace767ec647" - ], - "version": "==0.2.1" - }, - "py-multihash": { - "hashes": [ - "sha256:a0602c99093587dfbf1634e2e8c7726de39374b0d68587a36093b4c237af6969", - "sha256:f0ade4de820afdc4b4aaa40464ec86c9da5cae3a4578cda2daab4b0eb7e5b18d" - ], - "version": "==0.2.3" - }, - "py-solc-x": { - "hashes": [ - "sha256:8f5caa4f54e227fc301e2e4c8aa868e869c2bc0c6636aa9e8115f8414bb891f9", - "sha256:d8b0bd2b04f47cff6e92181739d9e94e41b2d62f056900761c797fa5babc76b6" - ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==1.1.1" - }, - "pycodestyle": { - "hashes": [ - "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053", - "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610" - ], - "markers": "python_version >= '3.6'", - "version": "==2.10.0" - }, - "pycparser": { - "hashes": [ - "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", - "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" - ], - "version": "==2.21" - }, - "pycryptodome": { - "hashes": [ - "sha256:01489bbdf709d993f3058e2996f8f40fee3f0ea4d995002e5968965fa2fe89fb", - "sha256:10da29526a2a927c7d64b8f34592f461d92ae55fc97981aab5bbcde8cb465bb6", - "sha256:12600268763e6fec3cefe4c2dcdf79bde08d0b6dc1813887e789e495cb9f3403", - "sha256:157c9b5ba5e21b375f052ca78152dd309a09ed04703fd3721dce3ff8ecced148", - "sha256:16bfd98dbe472c263ed2821284118d899c76968db1a6665ade0c46805e6b29a4", - "sha256:363dd6f21f848301c2dcdeb3c8ae5f0dee2286a5e952a0f04954b82076f23825", - "sha256:3811e31e1ac3069988f7a1c9ee7331b942e605dfc0f27330a9ea5997e965efb2", - "sha256:422c89fd8df8a3bee09fb8d52aaa1e996120eafa565437392b781abec2a56e14", - "sha256:4604816adebd4faf8810782f137f8426bf45fee97d8427fa8e1e49ea78a52e2c", - "sha256:4944defabe2ace4803f99543445c27dd1edbe86d7d4edb87b256476a91e9ffa4", - "sha256:51eae079ddb9c5f10376b4131be9589a6554f6fd84f7f655180937f611cd99a2", - "sha256:53aee6be8b9b6da25ccd9028caf17dcdce3604f2c7862f5167777b707fbfb6cb", - "sha256:62a1e8847fabb5213ccde38915563140a5b338f0d0a0d363f996b51e4a6165cf", - "sha256:6f4b967bb11baea9128ec88c3d02f55a3e338361f5e4934f5240afcb667fdaec", - "sha256:78d863476e6bad2a592645072cc489bb90320972115d8995bcfbee2f8b209918", - "sha256:795bd1e4258a2c689c0b1f13ce9684fa0dd4c0e08680dcf597cf9516ed6bc0f3", - "sha256:7a3d22c8ee63de22336679e021c7f2386f7fc465477d59675caa0e5706387944", - "sha256:83c75952dcf4a4cebaa850fa257d7a860644c70a7cd54262c237c9f2be26f76e", - "sha256:928078c530da78ff08e10eb6cada6e0dff386bf3d9fa9871b4bbc9fbc1efe024", - "sha256:957b221d062d5752716923d14e0926f47670e95fead9d240fa4d4862214b9b2f", - "sha256:9ad6f09f670c466aac94a40798e0e8d1ef2aa04589c29faa5b9b97566611d1d1", - "sha256:9c8eda4f260072f7dbe42f473906c659dcbadd5ae6159dfb49af4da1293ae380", - "sha256:b1d9701d10303eec8d0bd33fa54d44e67b8be74ab449052a8372f12a66f93fb9", - "sha256:b6a610f8bfe67eab980d6236fdc73bfcdae23c9ed5548192bb2d530e8a92780e", - "sha256:c9adee653fc882d98956e33ca2c1fb582e23a8af7ac82fee75bd6113c55a0413", - "sha256:cb1be4d5af7f355e7d41d36d8eec156ef1382a88638e8032215c215b82a4b8ec", - "sha256:d1497a8cd4728db0e0da3c304856cb37c0c4e3d0b36fcbabcc1600f18504fc54", - "sha256:d20082bdac9218649f6abe0b885927be25a917e29ae0502eaf2b53f1233ce0c2", - "sha256:e8ad74044e5f5d2456c11ed4cfd3e34b8d4898c0cb201c4038fe41458a82ea27", - "sha256:f022a4fd2a5263a5c483a2bb165f9cb27f2be06f2f477113783efe3fe2ad887b", - "sha256:f21efb8438971aa16924790e1c3dba3a33164eb4000106a55baaed522c261acf", - "sha256:fc0a73f4db1e31d4a6d71b672a48f3af458f548059aa05e83022d5f61aac9c08" - ], - "version": "==3.18.0" - }, - "pydantic": { - "hashes": [ - "sha256:052d8654cb65174d6f9490cc9b9a200083a82cf5c3c5d3985db765757eb3b375", - "sha256:0c6fafa0965b539d7aab0a673a046466d23b86e4b0e8019d25fd53f4df62c277", - "sha256:1243d28e9b05003a89d72e7915fdb26ffd1d39bdd39b00b7dbe4afae4b557f9d", - "sha256:12f7b0bf8553e310e530e9f3a2f5734c68699f42218bf3568ef49cd9b0e44df4", - "sha256:1410275520dfa70effadf4c21811d755e7ef9bb1f1d077a21958153a92c8d9ca", - "sha256:16f8c3e33af1e9bb16c7a91fc7d5fa9fe27298e9f299cff6cb744d89d573d62c", - "sha256:17aef11cc1b997f9d574b91909fed40761e13fac438d72b81f902226a69dac01", - "sha256:191ba419b605f897ede9892f6c56fb182f40a15d309ef0142212200a10af4c18", - "sha256:1952526ba40b220b912cdc43c1c32bcf4a58e3f192fa313ee665916b26befb68", - "sha256:1ced8375969673929809d7f36ad322934c35de4af3b5e5b09ec967c21f9f7887", - "sha256:2e4148e635994d57d834be1182a44bdb07dd867fa3c2d1b37002000646cc5459", - "sha256:34d327c81e68a1ecb52fe9c8d50c8a9b3e90d3c8ad991bfc8f953fb477d42fb4", - "sha256:35db5301b82e8661fa9c505c800d0990bc14e9f36f98932bb1d248c0ac5cada5", - "sha256:3e59417ba8a17265e632af99cc5f35ec309de5980c440c255ab1ca3ae96a3e0e", - "sha256:42aa0c4b5c3025483240a25b09f3c09a189481ddda2ea3a831a9d25f444e03c1", - "sha256:666bdf6066bf6dbc107b30d034615d2627e2121506c555f73f90b54a463d1f33", - "sha256:66a703d1983c675a6e0fed8953b0971c44dba48a929a2000a493c3772eb61a5a", - "sha256:6a82d6cda82258efca32b40040228ecf43a548671cb174a1e81477195ed3ed56", - "sha256:6f2e754d5566f050954727c77f094e01793bcb5725b663bf628fa6743a5a9108", - "sha256:7456eb22ed9aaa24ff3e7b4757da20d9e5ce2a81018c1b3ebd81a0b88a18f3b2", - "sha256:7b1f6cb446470b7ddf86c2e57cd119a24959af2b01e552f60705910663af09a4", - "sha256:7d5b8641c24886d764a74ec541d2fc2c7fb19f6da2a4001e6d580ba4a38f7878", - "sha256:84d80219c3f8d4cad44575e18404099c76851bc924ce5ab1c4c8bb5e2a2227d0", - "sha256:88f195f582851e8db960b4a94c3e3ad25692c1c1539e2552f3df7a9e972ef60e", - "sha256:93e6bcfccbd831894a6a434b0aeb1947f9e70b7468f274154d03d71fabb1d7c6", - "sha256:93e766b4a8226e0708ef243e843105bf124e21331694367f95f4e3b4a92bbb3f", - "sha256:ab523c31e22943713d80d8d342d23b6f6ac4b792a1e54064a8d0cf78fd64e800", - "sha256:bb14388ec45a7a0dc429e87def6396f9e73c8c77818c927b6a60706603d5f2ea", - "sha256:c0ab53b609c11dfc0c060d94335993cc2b95b2150e25583bec37a49b2d6c6c3f", - "sha256:c33b60054b2136aef8cf190cd4c52a3daa20b2263917c49adad20eaf381e823b", - "sha256:ceb6a23bf1ba4b837d0cfe378329ad3f351b5897c8d4914ce95b85fba96da5a1", - "sha256:d532bf00f381bd6bc62cabc7d1372096b75a33bc197a312b03f5838b4fb84edd", - "sha256:df7800cb1984d8f6e249351139667a8c50a379009271ee6236138a22a0c0f319", - "sha256:e82d4566fcd527eae8b244fa952d99f2ca3172b7e97add0b43e2d97ee77f81ab", - "sha256:f90c1e29f447557e9e26afb1c4dbf8768a10cc676e3781b6a577841ade126b85", - "sha256:f9613fadad06b4f3bc5db2653ce2f22e0de84a7c6c293909b48f6ed37b83c61f" - ], - "markers": "python_version >= '3.7'", - "version": "==1.10.8" - }, - "pyethash": { - "hashes": [ - "sha256:ff66319ce26b9d77df1f610942634dac9742e216f2c27b051c0a2c2dec9c2818" - ], - "version": "==0.1.27" - }, - "pyflakes": { - "hashes": [ - "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf", - "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd" - ], - "markers": "python_version >= '3.6'", - "version": "==3.0.1" - }, - "pygithub": { - "hashes": [ - "sha256:1e6b1b7afe31f75151fb81f7ab6b984a7188a852bdb123dbb9ae90023c3ce60f", - "sha256:f435884af617c6debaa76cbc355372d1027445a56fbc39972a3b9ed4968badc8" - ], - "markers": "python_version >= '3.7'", - "version": "==1.58.2" - }, - "pygments": { - "hashes": [ - "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c", - "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1" - ], - "markers": "python_version >= '3.7'", - "version": "==2.15.1" - }, - "pyjwt": { - "extras": [ - "crypto" - ], - "hashes": [ - "sha256:ba2b425b15ad5ef12f200dc67dd56af4e26de2331f965c5439994dad075876e1", - "sha256:bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074" - ], - "markers": "python_version >= '3.7'", - "version": "==2.7.0" - }, - "pynacl": { - "hashes": [ - "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", - "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", - "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", - "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", - "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", - "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", - "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", - "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", - "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", - "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543" - ], - "markers": "python_version >= '3.6'", - "version": "==1.5.0" - }, - "pyproject-api": { - "hashes": [ - "sha256:435f46547a9ff22cf4208ee274fca3e2869aeb062a4834adfc99a4dd64af3cf9", - "sha256:4698a3777c2e0f6b624f8a4599131e2a25376d90fe8d146d7ac74c67c6f97c43" - ], - "markers": "python_version >= '3.7'", - "version": "==1.5.1" - }, - "pysha3": { - "hashes": [ - "sha256:0060a66be16665d90c432f55a0ba1f6480590cfb7d2ad389e688a399183474f0", - "sha256:11a2ba7a2e1d9669d0052fc8fb30f5661caed5512586ecbeeaf6bf9478ab5c48", - "sha256:386998ee83e313b6911327174e088021f9f2061cbfa1651b97629b761e9ef5c4", - "sha256:41be70b06c8775a9e4d4eeb52f2f6a3f356f17539a54eac61f43a29e42fd453d", - "sha256:4416f16b0f1605c25f627966f76873e432971824778b369bd9ce1bb63d6566d9", - "sha256:571a246308a7b63f15f5aa9651f99cf30f2a6acba18eddf28f1510935968b603", - "sha256:59111c08b8f34495575d12e5f2ce3bafb98bea470bc81e70c8b6df99aef0dd2f", - "sha256:5ec8da7c5c70a53b5fa99094af3ba8d343955b212bc346a0d25f6ff75853999f", - "sha256:684cb01d87ed6ff466c135f1c83e7e4042d0fc668fa20619f581e6add1d38d77", - "sha256:68c3a60a39f9179b263d29e221c1bd6e01353178b14323c39cc70593c30f21c5", - "sha256:6e6a84efb7856f5d760ee55cd2b446972cb7b835676065f6c4f694913ea8f8d9", - "sha256:827b308dc025efe9b6b7bae36c2e09ed0118a81f792d888548188e97b9bf9a3d", - "sha256:93abd775dac570cb9951c4e423bcb2bc6303a9d1dc0dc2b7afa2dd401d195b24", - "sha256:9c778fa8b161dc9348dc5cc361e94d54aa5ff18413788f4641f6600d4893a608", - "sha256:9fdd28884c5d0b4edfed269b12badfa07f1c89dbc5c9c66dd279833894a9896b", - "sha256:c7c2adcc43836223680ebdf91f1d3373543dc32747c182c8ca2e02d1b69ce030", - "sha256:c93a2676e6588abcfaecb73eb14485c81c63b94fca2000a811a7b4fb5937b8e8", - "sha256:cd5c961b603bd2e6c2b5ef9976f3238a561c58569945d4165efb9b9383b050ef", - "sha256:f9046d59b3e72aa84f6dae83a040bd1184ebd7fef4e822d38186a8158c89e3cf", - "sha256:fd7e66999060d079e9c0e8893e78d8017dad4f59721f6fe0be6307cd32127a07", - "sha256:fe988e73f2ce6d947220624f04d467faf05f1bbdbc64b0a201296bb3af92739e" - ], - "version": "==1.0.2" - }, - "pytest": { - "hashes": [ - "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362", - "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3" - ], - "markers": "python_version >= '3.7'", - "version": "==7.3.1" - }, - "python-baseconv": { - "hashes": [ - "sha256:0539f8bd0464013b05ad62e0a1673f0ac9086c76b43ebf9f833053527cd9931b" - ], - "version": "==1.2.2" - }, - "python-dateutil": { - "hashes": [ - "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", - "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==2.8.2" - }, - "pytz": { - "hashes": [ - "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", - "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" - ], - "version": "==2023.3" - }, - "pyyaml": { - "hashes": [ - "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", - "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", - "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", - "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", - "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", - "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", - "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", - "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", - "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", - "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", - "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", - "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", - "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782", - "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", - "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", - "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", - "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", - "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", - "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1", - "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", - "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", - "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", - "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", - "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", - "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", - "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d", - "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", - "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", - "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7", - "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", - "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", - "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", - "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358", - "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", - "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", - "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", - "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", - "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f", - "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", - "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" - ], - "markers": "python_version >= '3.6'", - "version": "==6.0" - }, - "referencing": { - "hashes": [ - "sha256:2502c83c224ec5a7e4a43031e6423b339284924c00ef69eb0044c61f74f37062", - "sha256:59c5608900564b192b8e3b3d66b976e85d6eb46108e1ef57ad8ec982f564ea30" - ], - "markers": "python_version >= '3.8'", - "version": "==0.28.3" - }, - "regex": { - "hashes": [ - "sha256:02f4541550459c08fdd6f97aa4e24c6f1932eec780d58a2faa2068253df7d6ff", - "sha256:0a69cf0c00c4d4a929c6c7717fd918414cab0d6132a49a6d8fc3ded1988ed2ea", - "sha256:0bbd5dcb19603ab8d2781fac60114fb89aee8494f4505ae7ad141a3314abb1f9", - "sha256:10250a093741ec7bf74bcd2039e697f519b028518f605ff2aa7ac1e9c9f97423", - "sha256:10374c84ee58c44575b667310d5bbfa89fb2e64e52349720a0182c0017512f6c", - "sha256:1189fbbb21e2c117fda5303653b61905aeeeea23de4a94d400b0487eb16d2d60", - "sha256:1307aa4daa1cbb23823d8238e1f61292fd07e4e5d8d38a6efff00b67a7cdb764", - "sha256:144b5b017646b5a9392a5554a1e5db0000ae637be4971c9747566775fc96e1b2", - "sha256:171c52e320fe29260da550d81c6b99f6f8402450dc7777ef5ced2e848f3b6f8f", - "sha256:18196c16a584619c7c1d843497c069955d7629ad4a3fdee240eb347f4a2c9dbe", - "sha256:18f05d14f14a812fe9723f13afafefe6b74ca042d99f8884e62dbd34dcccf3e2", - "sha256:1ecf3dcff71f0c0fe3e555201cbe749fa66aae8d18f80d2cc4de8e66df37390a", - "sha256:21e90a288e6ba4bf44c25c6a946cb9b0f00b73044d74308b5e0afd190338297c", - "sha256:23d86ad2121b3c4fc78c58f95e19173790e22ac05996df69b84e12da5816cb17", - "sha256:256f7f4c6ba145f62f7a441a003c94b8b1af78cee2cccacfc1e835f93bc09426", - "sha256:290fd35219486dfbc00b0de72f455ecdd63e59b528991a6aec9fdfc0ce85672e", - "sha256:2e9c4f778514a560a9c9aa8e5538bee759b55f6c1dcd35613ad72523fd9175b8", - "sha256:338994d3d4ca4cf12f09822e025731a5bdd3a37aaa571fa52659e85ca793fb67", - "sha256:33d430a23b661629661f1fe8395be2004006bc792bb9fc7c53911d661b69dd7e", - "sha256:385992d5ecf1a93cb85adff2f73e0402dd9ac29b71b7006d342cc920816e6f32", - "sha256:3d45864693351c15531f7e76f545ec35000d50848daa833cead96edae1665559", - "sha256:40005cbd383438aecf715a7b47fe1e3dcbc889a36461ed416bdec07e0ef1db66", - "sha256:4035d6945cb961c90c3e1c1ca2feb526175bcfed44dfb1cc77db4fdced060d3e", - "sha256:445d6f4fc3bd9fc2bf0416164454f90acab8858cd5a041403d7a11e3356980e8", - "sha256:48c9ec56579d4ba1c88f42302194b8ae2350265cb60c64b7b9a88dcb7fbde309", - "sha256:4a5059bd585e9e9504ef9c07e4bc15b0a621ba20504388875d66b8b30a5c4d18", - "sha256:4a6e4b0e0531223f53bad07ddf733af490ba2b8367f62342b92b39b29f72735a", - "sha256:4b870b6f632fc74941cadc2a0f3064ed8409e6f8ee226cdfd2a85ae50473aa94", - "sha256:50fd2d9b36938d4dcecbd684777dd12a407add4f9f934f235c66372e630772b0", - "sha256:53e22e4460f0245b468ee645156a4f84d0fc35a12d9ba79bd7d79bdcd2f9629d", - "sha256:586a011f77f8a2da4b888774174cd266e69e917a67ba072c7fc0e91878178a80", - "sha256:59597cd6315d3439ed4b074febe84a439c33928dd34396941b4d377692eca810", - "sha256:59e4b729eae1a0919f9e4c0fc635fbcc9db59c74ad98d684f4877be3d2607dd6", - "sha256:5a0f874ee8c0bc820e649c900243c6d1e6dc435b81da1492046716f14f1a2a96", - "sha256:5ac2b7d341dc1bd102be849d6dd33b09701223a851105b2754339e390be0627a", - "sha256:5e3f4468b8c6fd2fd33c218bbd0a1559e6a6fcf185af8bb0cc43f3b5bfb7d636", - "sha256:6164d4e2a82f9ebd7752a06bd6c504791bedc6418c0196cd0a23afb7f3e12b2d", - "sha256:6893544e06bae009916a5658ce7207e26ed17385149f35a3125f5259951f1bbe", - "sha256:690a17db524ee6ac4a27efc5406530dd90e7a7a69d8360235323d0e5dafb8f5b", - "sha256:6b8d0c153f07a953636b9cdb3011b733cadd4178123ef728ccc4d5969e67f3c2", - "sha256:72a28979cc667e5f82ef433db009184e7ac277844eea0f7f4d254b789517941d", - "sha256:72aa4746993a28c841e05889f3f1b1e5d14df8d3daa157d6001a34c98102b393", - "sha256:732176f5427e72fa2325b05c58ad0b45af341c459910d766f814b0584ac1f9ac", - "sha256:7918a1b83dd70dc04ab5ed24c78ae833ae8ea228cef84e08597c408286edc926", - "sha256:7923470d6056a9590247ff729c05e8e0f06bbd4efa6569c916943cb2d9b68b91", - "sha256:7d76a8a1fc9da08296462a18f16620ba73bcbf5909e42383b253ef34d9d5141e", - "sha256:811040d7f3dd9c55eb0d8b00b5dcb7fd9ae1761c454f444fd9f37fe5ec57143a", - "sha256:821a88b878b6589c5068f4cc2cfeb2c64e343a196bc9d7ac68ea8c2a776acd46", - "sha256:84397d3f750d153ebd7f958efaa92b45fea170200e2df5e0e1fd4d85b7e3f58a", - "sha256:844671c9c1150fcdac46d43198364034b961bd520f2c4fdaabfc7c7d7138a2dd", - "sha256:890a09cb0a62198bff92eda98b2b507305dd3abf974778bae3287f98b48907d3", - "sha256:8f08276466fedb9e36e5193a96cb944928301152879ec20c2d723d1031cd4ddd", - "sha256:8f5e06df94fff8c4c85f98c6487f6636848e1dc85ce17ab7d1931df4a081f657", - "sha256:921473a93bcea4d00295799ab929522fc650e85c6b9f27ae1e6bb32a790ea7d3", - "sha256:941b3f1b2392f0bcd6abf1bc7a322787d6db4e7457be6d1ffd3a693426a755f2", - "sha256:9b320677521aabf666cdd6e99baee4fb5ac3996349c3b7f8e7c4eee1c00dfe3a", - "sha256:9c3efee9bb53cbe7b285760c81f28ac80dc15fa48b5fe7e58b52752e642553f1", - "sha256:9fda3e50abad8d0f48df621cf75adc73c63f7243cbe0e3b2171392b445401550", - "sha256:a4c5da39bca4f7979eefcbb36efea04471cd68db2d38fcbb4ee2c6d440699833", - "sha256:a56c18f21ac98209da9c54ae3ebb3b6f6e772038681d6cb43b8d53da3b09ee81", - "sha256:a623564d810e7a953ff1357f7799c14bc9beeab699aacc8b7ab7822da1e952b8", - "sha256:a8906669b03c63266b6a7693d1f487b02647beb12adea20f8840c1a087e2dfb5", - "sha256:a99757ad7fe5c8a2bb44829fc57ced11253e10f462233c1255fe03888e06bc19", - "sha256:aa7d032c1d84726aa9edeb6accf079b4caa87151ca9fabacef31fa028186c66d", - "sha256:aad5524c2aedaf9aa14ef1bc9327f8abd915699dea457d339bebbe2f0d218f86", - "sha256:afb1c70ec1e594a547f38ad6bf5e3d60304ce7539e677c1429eebab115bce56e", - "sha256:b6365703e8cf1644b82104cdd05270d1a9f043119a168d66c55684b1b557d008", - "sha256:b8b942d8b3ce765dbc3b1dad0a944712a89b5de290ce8f72681e22b3c55f3cc8", - "sha256:ba73a14e9c8f9ac409863543cde3290dba39098fc261f717dc337ea72d3ebad2", - "sha256:bd7b68fd2e79d59d86dcbc1ccd6e2ca09c505343445daaa4e07f43c8a9cc34da", - "sha256:bd966475e963122ee0a7118ec9024388c602d12ac72860f6eea119a3928be053", - "sha256:c2ce65bdeaf0a386bb3b533a28de3994e8e13b464ac15e1e67e4603dd88787fa", - "sha256:c64d5abe91a3dfe5ff250c6bb267ef00dbc01501518225b45a5f9def458f31fb", - "sha256:c8c143a65ce3ca42e54d8e6fcaf465b6b672ed1c6c90022794a802fb93105d22", - "sha256:cd46f30e758629c3ee91713529cfbe107ac50d27110fdcc326a42ce2acf4dafc", - "sha256:ced02e3bd55e16e89c08bbc8128cff0884d96e7f7a5633d3dc366b6d95fcd1d6", - "sha256:cf123225945aa58b3057d0fba67e8061c62d14cc8a4202630f8057df70189051", - "sha256:d19e57f888b00cd04fc38f5e18d0efbd91ccba2d45039453ab2236e6eec48d4d", - "sha256:d1cbe6b5be3b9b698d8cc4ee4dee7e017ad655e83361cd0ea8e653d65e469468", - "sha256:db09e6c18977a33fea26fe67b7a842f706c67cf8bda1450974d0ae0dd63570df", - "sha256:de2f780c3242ea114dd01f84848655356af4dd561501896c751d7b885ea6d3a1", - "sha256:e2205a81f815b5bb17e46e74cc946c575b484e5f0acfcb805fb252d67e22938d", - "sha256:e645c757183ee0e13f0bbe56508598e2d9cd42b8abc6c0599d53b0d0b8dd1479", - "sha256:f2910502f718828cecc8beff004917dcf577fc5f8f5dd40ffb1ea7612124547b", - "sha256:f764e4dfafa288e2eba21231f455d209f4709436baeebb05bdecfb5d8ddc3d35", - "sha256:f83fe9e10f9d0b6cf580564d4d23845b9d692e4c91bd8be57733958e4c602956", - "sha256:fb2b495dd94b02de8215625948132cc2ea360ae84fe6634cd19b6567709c8ae2", - "sha256:fee0016cc35a8a91e8cc9312ab26a6fe638d484131a7afa79e1ce6165328a135" - ], - "markers": "python_version >= '3.6'", - "version": "==2023.5.5" - }, - "requests": { - "hashes": [ - "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", - "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" - ], - "markers": "python_version >= '3.7'", - "version": "==2.31.0" - }, - "rich": { - "hashes": [ - "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e", - "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0" - ], - "markers": "python_full_version >= '3.6.3' and python_full_version < '4.0.0'", - "version": "==12.6.0" - }, - "rlp": { - "hashes": [ - "sha256:63b0465d2948cd9f01de449d7adfb92d207c1aef3982f20310f8009be4a507e8", - "sha256:d2a963225b3f26795c5b52310e0871df9824af56823d739511583ef459895a7d" - ], - "version": "==3.0.0" - }, - "rpds-py": { - "hashes": [ - "sha256:014828cd68b4cdee84ab66adaf5bfe1f137656a7a588c31fdca04ba0768ef62d", - "sha256:025b8101dbf39d77cf41ac3c737e4c713e0b2728a516443b382e66b9d492ff98", - "sha256:038249d2bbaf91aa65c4108a40ee076f657654261b1a246ab99726710bfb77de", - "sha256:0bcb162f5549408125ec986bfed1a66f2036ac2910d3fb0a6afda0f97bc6ea15", - "sha256:1b6db70c2ab847229fa9cff3a5eb641c33ab3f981ee8b99d326a7deb8989e4ce", - "sha256:2a5c672b1cd382973bf414518ddc9d743d06bcee751fa65256d84ba412192b0b", - "sha256:311a57cc972481bd220af28cf4309141c680a356b2359f163daac030d0c2318d", - "sha256:33a2a15b641bc17bc6574f9600976374a085ff81ac8dddd4bde6c451e9e9e58d", - "sha256:34007442d36980c4aab3f4044c1fd05a736c8ae09d47b8a42112deab5d6b5a10", - "sha256:453e62d679d8de32c5e00ba27f8c8c45a456e5d6db6fa6f67fdd3e12f1658833", - "sha256:5eda3aba0cd291de9d4bb138db45814bac24bc4c07e0f38b0544374b6104c488", - "sha256:68e8f2cedc65198248a14d716125016fd0816f63f216a82c2209a0686d5447cf", - "sha256:6d1d4078d60ca47f0eb6bdddbf79f00a72d41ee3148aba1dcf9b980f73a8d26e", - "sha256:858604fe5d7eb50e91b1096bcbcb421f2cb3101454244afda92b4d768d0cb4ce", - "sha256:98b54a47e670093b8bf7d1a0222d0af26dac19314a0e79ac478e447357396a2d", - "sha256:c38d17af73aa03686d701686628e37c114a459650233c0d5f0492dad3a76e3e0", - "sha256:c7bd3a381c4a5fe7e0fc4dff554bd1ce2b0be12ba0193c176c291b7dc1e8bea0", - "sha256:cbdc8ab6108b8bb260ee68fb2de83fb1c481d3a77355156049a8a49ea47eacf6", - "sha256:cc6ff891c3814d8cd92549cb385353a922518d433aaf1d2d0d99e98e59915370", - "sha256:d940b5644f14e49b1c6e7902b9ec8a0c7584109fbf380fa18115831a641927c8", - "sha256:e16c02923726307d960e908b61d4d833939f322877d2957c001fca23b644914e", - "sha256:f53f65cf56bb60355681431d04bc04dbe709452dd85eebf537035dc145bd36c9", - "sha256:f8391420714e84ae9f4c6d4e4d52eb4209ca8d66abfbe4b2ba4892221be1c6f5" - ], - "markers": "python_version >= '3.8'", - "version": "==0.7.1" - }, - "semantic-version": { - "hashes": [ - "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", - "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177" - ], - "markers": "python_version >= '2.7'", - "version": "==2.10.0" - }, - "setuptools": { - "hashes": [ - "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f", - "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102" - ], - "markers": "python_version >= '3.7'", - "version": "==67.8.0" - }, - "six": { - "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.16.0" - }, - "sortedcontainers": { - "hashes": [ - "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", - "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" - ], - "version": "==2.4.0" - }, - "sqlalchemy": { - "hashes": [ - "sha256:1a0754c2d9f0c7982bec0a31138e495ed1f6b8435d7e677c45be60ec18370acf", - "sha256:1d6320a1d175447dce63618ec997a53836de48ed3b44bbe952f0b4b399b19941", - "sha256:1e885dacb167077df15af2f9ccdacbd7f5dd0d538a6d74b94074f2cefc7bb589", - "sha256:201a99f922ac8c780b3929128fbd9df901418877c70e160e19adb05665e51c31", - "sha256:21c89044fc48a25c2184eba332edeffbbf9367913bb065cd31538235d828f06f", - "sha256:256b2b9660e51ad7055a9835b12717416cf7288afcf465107413917b6bb2316f", - "sha256:2e940a8659ef870ae10e0d9e2a6d5aaddf0ff6e91f7d0d7732afc9e8c4be9bbc", - "sha256:3fb5d09f1d51480f711b69fe28ad42e4f8b08600a85ab2473baee669e1257800", - "sha256:435f6807fa6a0597d84741470f19db204a7d34625ea121abd63e8d95f673f0c4", - "sha256:4670ce853cb25f72115a1bbe366ae13cf3f28fc5c87222df14f8d3d55d51816e", - "sha256:4a75fdb9a84072521bb2ebd31eefe1165d4dccea3039dda701a864f4b5daa17f", - "sha256:4d61731a35eddb0f667774fe15e5a4831e444d066081d1e809e1b8a0e3f97cae", - "sha256:51b19887c96d405599880da6a7cbdf8545a7e78ec5683e46a43bac8885e32d0f", - "sha256:536c86ec81ca89291d533ff41a3a05f9e4e88e01906dcee0751fc7082f3e8d6c", - "sha256:55ec62ddc0200b4fee94d11abbec7aa25948d5d21cb8df8807f4bdd3c51ba44b", - "sha256:5cc48a7fda2b5c5b8860494d6c575db3a101a68416492105fed6591dc8a2728a", - "sha256:670ecf74ee2e70b917028a06446ad26ff9b1195e84b09c3139c215123d57dc30", - "sha256:6a3f8020e013e9b3b7941dcf20b0fc8f7429daaf7158760846731cbd8caa5e45", - "sha256:6b42913a0259267e9ee335da0c36498077799e59c5e332d506e72b4f32de781d", - "sha256:6f5784dfb2d45c19cde03c45c04a54bf47428610106197ed6e6fa79f33bc63d3", - "sha256:6f80a9c9a9af0e4bd5080cc0955ce70274c28e9b931ad7e0fb07021afcd32af6", - "sha256:78303719c6f72af97814b0072ad18bee72e70adca8d95cf8fecd59c5e1ddb040", - "sha256:788d1772fb8dcd12091ca82809eef504ce0f2c423e45284bc351b872966ff554", - "sha256:79bfe728219239bdc493950ea4a4d15b02138ecb304771f9024d0d6f5f4e3706", - "sha256:810199d1c5b43603a9e815ae9487aef3ab1ade7ed9c0c485e12519358929fbfe", - "sha256:88ab245ed2c96265441ed2818977be28c840cfa5204ba167425d6c26eb67b7e7", - "sha256:933d30273861fe61f014ce2a7e3c364915f5efe9ed250ec1066ca6ea5942c0bd", - "sha256:994a75b197662e0608b6a76935d7c345f7fd874eac0b7093d561033db61b0e8c", - "sha256:9b31ebde27575b3b0708673ec14f0c305c4564d995b545148ab7ac0f4d9b847a", - "sha256:9d810b4aacd5ef4e293aa4ea01f19fca53999e9edcfc4a8ef1146238b30bdc28", - "sha256:ae1d8deb391ab39cc8f0d5844e588a115ae3717e607d91482023917f920f777f", - "sha256:bc5c2b0da46c26c5f73f700834f871d0723e1e882641932468d56833bab09775", - "sha256:cea7c4a3dfc2ca61f88a2b1ddd6b0bfbd116c9b1a361b3b66fd826034b833142", - "sha256:d14282bf5b4de87f922db3c70858953fd081ef4f05dba6cca3dd705daffe1cc9", - "sha256:d6b17cb86908e7f88be14007d6afe7d2ab11966e373044137f96a6a4d83eb21c", - "sha256:da7381a883aee20b7d2ffda17d909b38134b6a625920e65239a1c681881df800", - "sha256:db269f67ed17b07e80aaa8fba1f650c0d84aa0bdd9d5352e4ac38d5bf47ac568", - "sha256:df25052b92bd514357a9b370d74f240db890ea79aaa428fb893520e10ee5bc18", - "sha256:e17fdcb8971e77c439113642ca8861f9465e21fc693bd3916654ceef3ac26883", - "sha256:f6fd3c88ea4b170d13527e93be1945e69facd917661d3725a63470eb683fbffe", - "sha256:f7f994a53c0e6b44a2966fd6bfc53e37d34b7dca34e75b6be295de6db598255e" - ], - "markers": "python_version >= '3.7'", - "version": "==2.0.15" - }, - "stack-data": { - "hashes": [ - "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815", - "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8" - ], - "version": "==0.6.2" - }, - "tomli": { - "hashes": [ - "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", - "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" - ], - "markers": "python_version < '3.11'", - "version": "==2.0.1" - }, - "toolz": { - "hashes": [ - "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f", - "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194" - ], - "markers": "python_version >= '3.5'", - "version": "==0.12.0" - }, - "tox": { - "hashes": [ - "sha256:5a2eac5fb816779dfdf5cb00fecbc27eb0524e4626626bb1de84747b24cacc56", - "sha256:d25a2e6cb261adc489604fafd76cd689efeadfa79709965e965668d6d3f63046" - ], - "index": "pypi", - "version": "==4.5.1" - }, - "tqdm": { - "hashes": [ - "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5", - "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671" - ], - "markers": "python_version >= '3.7'", - "version": "==4.65.0" - }, - "traitlets": { - "hashes": [ - "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8", - "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9" - ], - "markers": "python_version >= '3.7'", - "version": "==5.9.0" - }, - "trie": { - "hashes": [ - "sha256:0729a159ddef4bfa4c05478017b93a7a1af4e65e8a7b7628676bad13199ffe39", - "sha256:e3f3691e1d48006b466c9b4cd0ee586c32e0f54d13b2497f263688188c77b0fe" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.1.0" - }, - "typing-extensions": { - "hashes": [ - "sha256:6ad00b63f849b7dcc313b70b6b304ed67b2b2963b3098a33efe18056b1a9a223", - "sha256:ff6b238610c747e44c268aa4bb23c8c735d665a63726df3f9431ce707f2aa768" - ], - "markers": "python_version < '3.10'", - "version": "==4.6.0" - }, - "urllib3": { - "hashes": [ - "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc", - "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e" - ], - "markers": "python_version >= '3.7'", - "version": "==2.0.2" - }, - "varint": { - "hashes": [ - "sha256:a6ecc02377ac5ee9d65a6a8ad45c9ff1dac8ccee19400a5950fb51d594214ca5" - ], - "version": "==1.0.2" - }, - "virtualenv": { - "hashes": [ - "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e", - "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924" - ], - "markers": "python_version >= '3.7'", - "version": "==20.23.0" - }, - "watchdog": { - "hashes": [ - "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190", - "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43", - "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d", - "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256", - "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd", - "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96", - "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5", - "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad", - "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42", - "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225", - "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb", - "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc", - "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79", - "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf", - "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44", - "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc", - "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131", - "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c", - "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565", - "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab", - "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed", - "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16", - "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf", - "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375", - "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697", - "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906", - "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b", - "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f" - ], - "markers": "python_version >= '3.6'", - "version": "==2.3.1" - }, - "wcwidth": { - "hashes": [ - "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", - "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" - ], - "version": "==0.2.6" - }, - "web3": { - "extras": [ - "tester" - ], - "hashes": [ - "sha256:b9fcc2372e7cac27d96621c169be40174eccbb93346bba2ab45ad791140d47fe", - "sha256:c86889b9c0b8f9f5ce5f5f0bb9f9bfc551cf775aeaf903964ddf28d303b85c62" - ], - "markers": "python_full_version >= '3.7.2'", - "version": "==6.4.0" - }, - "websockets": { - "hashes": [ - "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd", - "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f", - "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998", - "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82", - "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788", - "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa", - "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f", - "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4", - "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7", - "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f", - "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd", - "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69", - "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb", - "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b", - "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016", - "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac", - "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4", - "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb", - "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99", - "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e", - "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54", - "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf", - "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007", - "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3", - "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6", - "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86", - "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1", - "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61", - "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11", - "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8", - "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f", - "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931", - "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526", - "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016", - "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae", - "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd", - "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b", - "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311", - "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af", - "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152", - "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288", - "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de", - "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97", - "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d", - "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d", - "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca", - "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0", - "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9", - "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b", - "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e", - "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128", - "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d", - "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c", - "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5", - "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6", - "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b", - "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b", - "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280", - "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c", - "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c", - "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f", - "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20", - "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8", - "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb", - "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602", - "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf", - "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0", - "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74", - "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0", - "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564" - ], - "markers": "python_version >= '3.7'", - "version": "==11.0.3" - }, - "wrapt": { - "hashes": [ - "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", - "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", - "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", - "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", - "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", - "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", - "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", - "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", - "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", - "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", - "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", - "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", - "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", - "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", - "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", - "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", - "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", - "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", - "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", - "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", - "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", - "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", - "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", - "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", - "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", - "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", - "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", - "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", - "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", - "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", - "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", - "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", - "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", - "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", - "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", - "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", - "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", - "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", - "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", - "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", - "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", - "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", - "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", - "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", - "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", - "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", - "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", - "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", - "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", - "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", - "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", - "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", - "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", - "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", - "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", - "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", - "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", - "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", - "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", - "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", - "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", - "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", - "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", - "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", - "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", - "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", - "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", - "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", - "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", - "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", - "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", - "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", - "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", - "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", - "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.15.0" - }, - "yarl": { - "hashes": [ - "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571", - "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3", - "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3", - "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c", - "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7", - "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04", - "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191", - "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea", - "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4", - "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4", - "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095", - "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e", - "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74", - "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef", - "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33", - "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde", - "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45", - "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf", - "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b", - "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac", - "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0", - "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528", - "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716", - "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb", - "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18", - "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72", - "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6", - "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582", - "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5", - "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368", - "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc", - "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9", - "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be", - "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a", - "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80", - "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8", - "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6", - "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417", - "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574", - "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59", - "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608", - "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82", - "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1", - "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3", - "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d", - "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8", - "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc", - "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac", - "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8", - "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955", - "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0", - "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367", - "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb", - "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a", - "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623", - "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2", - "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6", - "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7", - "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4", - "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051", - "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938", - "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8", - "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9", - "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3", - "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5", - "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9", - "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333", - "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185", - "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3", - "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560", - "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b", - "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7", - "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78", - "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7" - ], - "markers": "python_version >= '3.7'", - "version": "==1.9.2" - }, - "zipp": { - "hashes": [ - "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b", - "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556" - ], - "markers": "python_version >= '3.7'", - "version": "==3.15.0" - } - }, - "develop": {} + "_meta": { + "hash": { + "sha256": "0e8d8efb70c5f9a20421971c09c829df1c43237c2dde27347b4d72f74830a2de" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "aiohttp": { + "hashes": [ + "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67", + "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c", + "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda", + "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755", + "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d", + "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5", + "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548", + "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690", + "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84", + "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4", + "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a", + "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a", + "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9", + "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef", + "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b", + "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a", + "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d", + "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945", + "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634", + "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7", + "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691", + "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802", + "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c", + "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0", + "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8", + "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82", + "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a", + "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975", + "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b", + "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d", + "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3", + "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7", + "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e", + "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5", + "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649", + "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff", + "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e", + "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c", + "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22", + "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df", + "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e", + "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780", + "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905", + "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51", + "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543", + "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6", + "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873", + "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f", + "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35", + "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938", + "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b", + "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d", + "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8", + "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c", + "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af", + "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42", + "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3", + "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc", + "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8", + "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410", + "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c", + "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825", + "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9", + "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53", + "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a", + "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc", + "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8", + "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c", + "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a", + "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b", + "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd", + "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14", + "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2", + "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c", + "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9", + "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692", + "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1", + "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa", + "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a", + "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de", + "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91", + "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761", + "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd", + "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced", + "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28", + "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8", + "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824" + ], + "markers": "python_version >= '3.6'", + "version": "==3.8.5" + }, + "aiosignal": { + "hashes": [ + "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc", + "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17" + ], + "markers": "python_version >= '3.7'", + "version": "==1.3.1" + }, + "ape-etherscan": { + "hashes": [ + "sha256:398e5f7a1eed82c683498bf432060127b1aa3683566d63e770a13ae79b7af71b", + "sha256:df6b6ac7f56aed956340c0d783192ba4b4510888defb0e5f4667cc367661c72b" + ], + "index": "pypi", + "version": "==0.6.10" + }, + "ape-polygon": { + "hashes": [ + "sha256:1d1faacdeb3ffef3e49070bb4dc9da3a52ef6478338cccbfbb44016ab81d837b", + "sha256:5f606ba9b2834765b0d9516d7b6dcd59a4c73026d1e56162e35247561a1feee4" + ], + "index": "pypi", + "version": "==0.6.5" + }, + "ape-solidity": { + "hashes": [ + "sha256:c923809f4f3542e86b18cbeb325b08800461b4af38366a8950d26afc15431e35", + "sha256:ccd58558fad2a0003d1e0c026b8bfb5e35ec1600aa06ba2c2260daa5c64a2299" + ], + "index": "pypi", + "version": "==0.6.9" + }, + "appnope": { + "hashes": [ + "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", + "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" + ], + "markers": "sys_platform == 'darwin'", + "version": "==0.1.3" + }, + "asn1crypto": { + "hashes": [ + "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c", + "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67" + ], + "version": "==1.5.1" + }, + "asttokens": { + "hashes": [ + "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e", + "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69" + ], + "version": "==2.4.0" + }, + "async-timeout": { + "hashes": [ + "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", + "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028" + ], + "markers": "python_version >= '3.7'", + "version": "==4.0.3" + }, + "attrs": { + "hashes": [ + "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", + "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + ], + "markers": "python_version >= '3.7'", + "version": "==23.1.0" + }, + "backcall": { + "hashes": [ + "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", + "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" + ], + "version": "==0.2.0" + }, + "base58": { + "hashes": [ + "sha256:1e42993c0628ed4f898c03b522b26af78fb05115732549b21a028bc4633d19ab", + "sha256:6aa0553e477478993588303c54659d15e3c17ae062508c854a8b752d07c716bd", + "sha256:9a793c599979c497800eb414c852b80866f28daaed5494703fc129592cc83e60" + ], + "version": "==1.0.3" + }, + "bitarray": { + "hashes": [ + "sha256:00ff372dfaced7dd6cc2dffd052fafc118053cf81a442992b9a23367479d77d7", + "sha256:0cc066c7290151600b8872865708d2d00fb785c5db8a0df20d70d518e02f172b", + "sha256:0de1bc5f971aba46de88a4eb0dbb5779e30bbd7514f4dcbff743c209e0c02667", + "sha256:1414582b3b7516d2282433f0914dd9846389b051b2aea592ae7cc165806c24ac", + "sha256:17c32ba584e8fb9322419390e0e248769ed7d59de3ffa7432562a4c0ec4f1f82", + "sha256:18530ed3ddd71e9ff95440afce531efc3df7a3e0657f1c201c2c3cb41dd65869", + "sha256:1a0d27aad02d8abcb1d3b7d85f463877c4937e71adf9b6adb9367f2cdad91a52", + "sha256:1e859c664500d57526fe07140889a3b58dca54ff3b16ac6dc6d534a65c933084", + "sha256:214c05a7642040f6174e29f3e099549d3c40ac44616405081bf230dcafb38767", + "sha256:28dee92edd0d21655e56e1870c22468d0dabe557df18aa69f6d06b1543614180", + "sha256:29e19cb80a69f6d1a64097bfbe1766c418e1a785d901b583ef0328ea10a30399", + "sha256:2aa2267eb6d2b88ef7d139e79a6daaa84cd54d241b9797478f10dcb95a9cd620", + "sha256:2ab81c74a1805fe74330859b38e70d7525cdd80953461b59c06660046afaffcf", + "sha256:2b0f754a5791635b8239abdcc0258378111b8ee7a8eb3e2bbc24bcc48a0f0b08", + "sha256:2b977c39e3734e73540a2e3a71501c2c6261c70c6ce59d427bb7c4ecf6331c7e", + "sha256:2d38ceca90ed538706e3f111513073590f723f90659a7af0b992b29776a6e816", + "sha256:2d3f28a80f2e6bb96e9360a4baf3fbacb696b5aba06a14c18a15488d4b6f398f", + "sha256:2dc064a63445366f6b26eaf77230d326b9463e903ba59d6ff5efde0c5ec1ea0e", + "sha256:3024ab4c4906c3681408ca17c35833237d18813ebb9f24ae9f9e3157a4a66939", + "sha256:3243e4b8279ff2fe4c6e7869f0e6930c17799ee9f8d07317f68d44a66b46281e", + "sha256:3994f7dc48d21af40c0d69fca57d8040b02953f4c7c3652c2341d8947e9cbedf", + "sha256:3b999fb66980f885961d197d97d7ff5a13b7ab524ccf45ccb4704f4b82ce02e3", + "sha256:3bb5f2954dd897b0bac13b5449e5c977534595b688120c8af054657a08b01f46", + "sha256:443726af4bd60515e4e41ea36c5dbadb29a59bc799bcbf431011d1c6fd4363e3", + "sha256:4677477a406f2a9e064920463f69172b865e4d69117e1f2160064d3f5912b0bd", + "sha256:46fdd27c8fa4186d8b290bf74a28cbd91b94127b1b6a35c265a002e394fa9324", + "sha256:4a637bcd199c1366c65b98f18884f0d0b87403f04676b21e4635831660d722a7", + "sha256:4ce2ef9291a193a0e0cd5e23970bf3b682cc8b95220561d05b775b8d616d665f", + "sha256:542358b178b025dcc95e7fb83389e9954f701c41d312cbb66bdd763cbe5414b5", + "sha256:55020d6fb9b72bd3606969f5431386c592ed3666133bd475af945aa0fa9e84ec", + "sha256:57aeab27120a8a50917845bb81b0976e33d4759f2156b01359e2b43d445f5127", + "sha256:5934e3a623a1d485e1dcfc1990246e3c32c6fc6e7f0fd894750800d35fdb5794", + "sha256:5b0493ab66c6b8e17e9fde74c646b39ee09c236cf28a787cb8cbd3a83c05bff7", + "sha256:5f6175c1cf07dadad3213d60075704cf2e2f1232975cfd4ac8328c24a05e8f78", + "sha256:6033303431a7c85a535b3f1b0ec28abc2ebc2167c263f244993b56ccb87cae6b", + "sha256:62ac31059a3c510ef64ed93d930581b262fd4592e6d95ede79fca91e8d3d3ef6", + "sha256:63fa75e87ad8c57d5722cc87902ca148ef8bbbba12b5c5b3c3730a1bc9ac2886", + "sha256:67e8fb18df51e649adbc81359e1db0f202d72708fba61b06f5ac8db47c08d107", + "sha256:69ab51d551d50e4d6ca35abc95c9d04b33ad28418019bb5481ab09bdbc0df15c", + "sha256:6be965028785413a6163dd55a639b898b22f67f9b6ed554081c23e94a602031e", + "sha256:6c26a923080bc211cab8f5a5e242e3657b32951fec8980db0616e9239aade482", + "sha256:6df04efdba4e1bf9d93a1735e42005f8fcf812caf40c03934d9322412d563499", + "sha256:6ea51ba4204d086d5b76e84c31d2acbb355ed1b075ded54eb9b7070b0b95415d", + "sha256:741c3a2c0997c8f8878edfc65a4a8f7aa72eede337c9bc0b7bd8a45cf6e70dbc", + "sha256:74cd1725d08325b6669e6e9a5d09cec29e7c41f7d58e082286af5387414d046d", + "sha256:75104c3076676708c1ac2484ebf5c26464fb3850312de33a5b5bf61bfa7dbec5", + "sha256:797de3465f5f6c6be9a412b4e99eb6e8cdb86b83b6756655c4d83a65d0b9a376", + "sha256:7b29d4bf3d3da1847f2be9e30105bf51caaf5922e94dc827653e250ed33f4e8a", + "sha256:7c17dd8fb146c2c680bf1cb28b358f9e52a14076e44141c5442148863ee95d7d", + "sha256:81e83ed7e0b1c09c5a33b97712da89e7a21fd3e5598eff3975c39540f5619792", + "sha256:82bfb6ab9b1b5451a5483c9a2ae2a8f83799d7503b384b54f6ab56ea74abb305", + "sha256:8367768ab797105eb97dfbd4577fcde281618de4d8d3b16ad62c477bb065f347", + "sha256:843af12991161b358b6379a8dc5f6636798f3dacdae182d30995b6a2df3b263e", + "sha256:848af80518d0ed2aee782018588c7c88805f51b01271935df5b256c8d81c726e", + "sha256:861850d6a58e7b6a7096d0b0efed9c6d993a6ab8b9d01e781df1f4d80cc00efa", + "sha256:8c361201e1c3ee6d6b2266f8b7a645389880bccab1b29e22e7a6b7b6e7831ad5", + "sha256:904719fb7304d4115228b63c178f0cc725ad3b73e285c4b328e45a99a8e3fad6", + "sha256:9061c0a50216f24c97fb2325de84200e5ad5555f25c854ddcb3ceb6f12136055", + "sha256:9186cf8135ca170cd907d8c4df408a87747570d192d89ec4ff23805611c702a0", + "sha256:9336300fd0acf07ede92e424930176dc4b43ef1b298489e93ba9a1695e8ea752", + "sha256:9aad7b4670f090734b272c072c9db375c63bd503512be9a9393e657dcacfc7e2", + "sha256:9b65d487451e0e287565c8436cf4da45260f958f911299f6122a20d7ec76525c", + "sha256:9d5df3d6358425c9dfb6bdbd4f576563ec4173d24693a9042d05aadcb23c0b98", + "sha256:9d6a9c72354327c7aa9890ff87904cbe86830cb1fb58c39750a0afac8df5e051", + "sha256:9fed8aba8d1b09cf641b50f1e6dd079c31677106ea4b63ec29f4c49adfabd63f", + "sha256:a04d4851e83730f03c4a6aac568c7d8b42f78f0f9cc8231d6db66192b030ce1e", + "sha256:a0f6d705860f59721d7282496a4d29b5fd78690e1c1473503832c983e762b01b", + "sha256:aa08a9b03888c768b9b2383949a942804d50d8164683b39fe62f0bfbfd9b4204", + "sha256:ad440c17ef2ff42e94286186b5bcf82bf87c4026f91822675239102ebe1f7035", + "sha256:ae32ac7217e83646b9f64d7090bf7b737afaa569665621f110a05d9738ca841a", + "sha256:b2015a9dd718393e814ff7b9e80c58190eb1cef7980f86a97a33e8440e158ce2", + "sha256:b2560475c5a1ff96fcab01fae7cf6b9a6da590f02659556b7fccc7991e401884", + "sha256:b65a04b2e029b0694b52d60786732afd15b1ec6517de61a36afbb7808a2ffac1", + "sha256:b67733a240a96f09b7597af97ac4d60c59140cfcfd180f11a7221863b82f023a", + "sha256:b8d6e5ff385fea25caf26fd58b43f087deb763dcaddd18d3df2895235cf1b484", + "sha256:bc03bb358ae3917247d257207c79162e666d407ac473718d1b95316dac94162b", + "sha256:bf80804014e3736515b84044c2be0e70080616b4ceddd4e38d85f3167aeb8165", + "sha256:c2426dc7a0d92d8254def20ab7a231626397ce5b6fb3d4f44be74cc1370a60c3", + "sha256:c54b0af16be45de534af9d77e8a180126cd059f72db8b6550f62dda233868942", + "sha256:c5582dd7d906e6f9ec1704f99d56d812f7d395d28c02262bc8b50834d51250c3", + "sha256:c9efcee311d9ba0c619743060585af9a9b81496e97b945843d5e954c67722a75", + "sha256:cbe54685cf6b17b3e15faf6c4b76773bc1c484bc447020737d2550a9dde5f6e6", + "sha256:cf38871ed4cd89df9db7c70f729b948fa3e2848a07c69f78e4ddfbe4f23db63c", + "sha256:d175e16419a52d54c0ac44c93309ba76dc2cfd33ee9d20624f1a5eb86b8e162e", + "sha256:d2f13b7d0694ce2024c82fc595e6ccc3918e7f069747c3de41b1ce72a9a1e346", + "sha256:d32ccd2c0d906eae103ef84015f0545a395052b0b6eb0e02e9023ca0132557f6", + "sha256:d34790a919f165b6f537935280ef5224957d9ce8ab11d339f5e6d0319a683ccc", + "sha256:dc7acffee09822b334d1b46cd384e969804abdf18f892c82c05c2328066cd2ae", + "sha256:dd76bbf5a4b2ab84b8ffa229f5648e80038ba76bf8d7acc5de9dd06031b38117", + "sha256:df9d8a9a46c46950f306394705512553c552b633f8bf3c11359c4204289f11e3", + "sha256:e48c45ea7944225bcee026c457a70eaea61db3659d9603f07fc8a643ab7e633b", + "sha256:e4cd81ffd2d58ef68c22c825aff89f4a47bd721e2ada0a3a96793169f370ae21", + "sha256:e68ceef35a88625d16169550768fcc8d3894913e363c24ecbf6b8c07eb02c8f3", + "sha256:e7f7231ef349e8f4955d9b39561f4683a418a73443cfce797a4eddbee1ba9664", + "sha256:e88a706f92ad1e0e1e66f6811d10b6155d5f18f0de9356ee899a7966a4e41992", + "sha256:ea71e0a50060f96ad0821e0ac785e91e44807f8b69555970979d81934961d5bd", + "sha256:ee772c20dcb56b03d666a4e4383d0b5b942b0ccc27815e42fe0737b34cba2082", + "sha256:f0af01e1f61fe627f63648c0c6f52de8eac56710a2ef1dbce4851d867084cc7e", + "sha256:f30cdce22af3dc7c73e70af391bfd87c4574cc40c74d651919e20efc26e014b5", + "sha256:f3128234bde3629ab301a501950587e847d30031a9cbf04d95f35cbf44469a9e", + "sha256:f7d2ec2174d503cbb092f8353527842633c530b4e03b9922411640ac9c018a19", + "sha256:f9a66745682e175e143a180524a63e692acb2b8c86941073f6dd4ee906e69608" + ], + "version": "==2.8.1" + }, + "black": { + "hashes": [ + "sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f", + "sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7", + "sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100", + "sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573", + "sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d", + "sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f", + "sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9", + "sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300", + "sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948", + "sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325", + "sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9", + "sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71", + "sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186", + "sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f", + "sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe", + "sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855", + "sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80", + "sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393", + "sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c", + "sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204", + "sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377", + "sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301" + ], + "index": "pypi", + "version": "==23.9.1" + }, + "cached-property": { + "hashes": [ + "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130", + "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0" + ], + "version": "==1.5.2" + }, + "cachetools": { + "hashes": [ + "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590", + "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b" + ], + "markers": "python_version >= '3.7'", + "version": "==5.3.1" + }, + "certifi": { + "hashes": [ + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" + ], + "markers": "python_version >= '3.6'", + "version": "==2023.7.22" + }, + "cffi": { + "hashes": [ + "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", + "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", + "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", + "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", + "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", + "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", + "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", + "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", + "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", + "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", + "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", + "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", + "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", + "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", + "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", + "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", + "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", + "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", + "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", + "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", + "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", + "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", + "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", + "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", + "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", + "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", + "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", + "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", + "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", + "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", + "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", + "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", + "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", + "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", + "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", + "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", + "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", + "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", + "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", + "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", + "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", + "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", + "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", + "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", + "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", + "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", + "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", + "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", + "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", + "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", + "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", + "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", + "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", + "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", + "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", + "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", + "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", + "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", + "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", + "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", + "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", + "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", + "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", + "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" + ], + "version": "==1.15.1" + }, + "cfgv": { + "hashes": [ + "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", + "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560" + ], + "markers": "python_version >= '3.8'", + "version": "==3.4.0" + }, + "chardet": { + "hashes": [ + "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", + "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970" + ], + "markers": "python_version >= '3.7'", + "version": "==5.2.0" + }, + "charset-normalizer": { + "hashes": [ + "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96", + "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c", + "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710", + "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706", + "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020", + "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252", + "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad", + "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329", + "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a", + "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f", + "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6", + "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4", + "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a", + "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46", + "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2", + "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23", + "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace", + "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd", + "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982", + "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10", + "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2", + "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea", + "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09", + "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5", + "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149", + "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489", + "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9", + "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80", + "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592", + "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3", + "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6", + "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed", + "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c", + "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200", + "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a", + "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e", + "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d", + "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6", + "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623", + "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669", + "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3", + "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa", + "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9", + "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2", + "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f", + "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1", + "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4", + "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a", + "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8", + "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3", + "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029", + "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f", + "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959", + "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22", + "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7", + "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952", + "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346", + "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e", + "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d", + "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299", + "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd", + "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a", + "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3", + "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037", + "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94", + "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c", + "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858", + "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a", + "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449", + "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c", + "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918", + "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1", + "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c", + "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", + "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.2.0" + }, + "click": { + "hashes": [ + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.7" + }, + "coincurve": { + "hashes": [ + "sha256:07e3c37cfadac6896668a130ea46296a3dfdeea0160fd66a51e377ad00795269", + "sha256:0b1a42eba91b9e4f833309e94bc6a270b1700cb4567d4809ef91f00968b57925", + "sha256:0b31ab366fadff16ecfdde96ffc07e70fee83850f88bd1f985a8b4977a68bbfb", + "sha256:116bf1b60a6e72e23c6b153d7c79f0e565d82973d917a3cecf655ffb29263163", + "sha256:14700463009c7d799a746929728223aa53ff1ece394ea408516d98d637434883", + "sha256:1bce17d7475cee9db2c2fa7af07eaab582732b378acf6dcaee417de1df2d8661", + "sha256:23b9ced9cce32dabb4bc15fa6449252fa51efddf0268481973e4c3772a5a68c6", + "sha256:257c6171cd0301c119ef41360f0d0c2fb5cc288717b33d3bd5482a4c9ae04551", + "sha256:286969b6f789bbd9d744d28350a3630c1cb3ee045263469a28892f70a4a6654a", + "sha256:2d2c20d108580bce5efedb980688031462168f4de2446de95898b48a249127a2", + "sha256:2d95103ed43df855121cd925869ae2589360a8d94fcd61b236958deacfb9a359", + "sha256:33678f6b43edbeab6605584c725305f4f814239780c53eba0f8e4bc4a52b1d1a", + "sha256:3caf58877bcf41eb4c1be7a2d54317f0b31541d99ba248dae28821b19c52a0db", + "sha256:412a06b7d1b8229f25318f05e76310298da5ad55d73851eabac7ddfdcdc5bff4", + "sha256:4ab662b67454fea7f0a5ae855ba6ad9410bcaebe68b97f4dade7b5944dec3a11", + "sha256:599b1b3cf097cae920d97f31a5b8e8aff185ca8fa5d8a785b2edf7b199fb9731", + "sha256:6a0c0c1e492ef08efe99d25a23d535e2bff667bbef43d71a6f8893ae811b3d81", + "sha256:704d1abf2e78def33988368592233a8ec9b98bfc45dfa2ec9e898adfad46e5ad", + "sha256:73e464e0ace77c686fdc54590e5592905b6802f9fc20a0c023f0b1585669d6a3", + "sha256:779da694dea1b1d09e16b00e079f6a1195290ce9568f39c95cddf35f1f49ec49", + "sha256:7844f01904e32317a00696a27fd771860e53a2fa62e5c66eace9337d2742c9e6", + "sha256:7f1142252e870f091b2c2c21cc1fadfdd29af23d02e99f29add0f14d1ba94b4c", + "sha256:8290903d4629f27f9f3cdeec72ffa97536c5a6ed5ba7e3413b2707991c650fbe", + "sha256:83379dd70291480df2052554851bfd17444c003aef7c4bb02d96d73eec69fe28", + "sha256:8964e680c622a2b5eea940abdf51c77c1bd3d4fde2a04cec2420bf91981b198a", + "sha256:908467330cd3047c71105a08394c4f3e7dce76e4371b030ba8b0ef863013e3ca", + "sha256:a7b31efe56b3f6434828ad5f6ecde4a95747bb69b59032746482eebb8f3456a4", + "sha256:abeb4c1d78e1a81a3f1c99a406cd858669582ada2d976e876ef694f57dec95ca", + "sha256:ba9eaddd50a2ce0d891af7cee11c2e048d1f0f44bf87db00a5c4b1eee7e3391b", + "sha256:c60690bd7704d8563968d2dded33eb514875a52b5964f085409965ad041b2555", + "sha256:c86626afe417a09d8e80e56780efcae3ae516203b23b5ade84813916e1c94fc1", + "sha256:cd11d2ca5b7e989c5ce1af217a2ad78c19c21afca786f198d1b1a408d6f408dc", + "sha256:d05641cf31d68514c47cb54105d20acbae79fc3ee3942454eaaf411babb3f880", + "sha256:d53e2a268142924c24e9b786b3e6c3603fae54bb8211560036b0e9ce6a9f2dbc", + "sha256:e009f06287507158f16c82cc313c0f3bfd0e9ec1e82d1a4d5fa1c5b6c0060f69", + "sha256:e3abb7f65e2b5fb66a15e374faeaafe6700fdb83fb66d1873ddff91c395a3b74", + "sha256:eba563f7f70c10323227d1890072172bd84df6f814c9a6b012033b214426b6cf", + "sha256:f3e5f2a2d774050b3ea8bf2167f2d598fde58d7690779931516714d98b65d884", + "sha256:f40646d5f29ac9026f8cc1b368bc9ab68710fad055b64fbec020f9bbfc99b242", + "sha256:f44b9ba588b34795d1b4074f9a9fa372adef3fde58300bf32f40a69e8cd72a23", + "sha256:f8bcb9c40fd730cf377fa448f1304355d6497fb3d00b7b0a69a10dfcc14a6d28", + "sha256:fceca9d6ecaa1e8f891675e4f4ff530d54e41c648fc6e8a816835ffa640fa899" + ], + "index": "pypi", + "version": "==18.0.0" + }, + "colorama": { + "hashes": [ + "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", + "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==0.4.6" + }, + "commonmark": { + "hashes": [ + "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60", + "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9" + ], + "version": "==0.9.1" + }, + "cryptography": { + "hashes": [ + "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306", + "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84", + "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47", + "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d", + "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116", + "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207", + "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81", + "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087", + "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd", + "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507", + "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858", + "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae", + "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34", + "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906", + "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd", + "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922", + "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7", + "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4", + "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574", + "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1", + "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c", + "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e", + "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de" + ], + "index": "pypi", + "version": "==41.0.3" + }, + "cytoolz": { + "hashes": [ + "sha256:00547da587f124b32b072ce52dd5e4b37cf199fedcea902e33c67548523e4678", + "sha256:0295289c4510efa41174850e75bc9188f82b72b1b54d0ea57d1781729c2924d5", + "sha256:03b58f843f09e73414e82e57f7e8d88f087eaabf8f276b866a40661161da6c51", + "sha256:0568d4da0a9ee9f9f5ab318f6501557f1cfe26d18c96c8e0dac7332ae04c6717", + "sha256:08a0e03f287e45eb694998bb55ac1643372199c659affa8319dfbbdec7f7fb3c", + "sha256:0a9d12436fd64937bd2c9609605f527af7f1a8db6e6637639b44121c0fe715d6", + "sha256:101b5bd32badfc8b1f9c7be04ba3ae04fb47f9c8736590666ce9449bff76e0b1", + "sha256:14108cafb140dd68fdda610c2bbc6a37bf052cd48cfebf487ed44145f7a2b67f", + "sha256:18580d060fa637ff01541640ecde6de832a248df02b8fb57e6dd578f189d62c7", + "sha256:18a0f838677f9510aef0330c0096778dd6406d21d4ff9504bf79d85235a18460", + "sha256:1ce324d1b413636ea5ee929f79637821f13c9e55e9588f38228947294944d2ed", + "sha256:246368e983eaee9851b15d7755f82030eab4aa82098d2a34f6bef9c689d33fcc", + "sha256:24c0d71e9ac91f4466b1bd280f7de43aa4d94682daaf34d85d867a9b479b87cc", + "sha256:275d53fd769df2102d6c9fc98e553bd8a9a38926f54d6b20cf29f0dd00bf3b75", + "sha256:294d24edc747ef4e1b28e54365f713becb844e7898113fafbe3e9165dc44aeea", + "sha256:2fb740482794a72e2e5fec58e4d9b00dcd5a60a8cef68431ff12f2ba0e0d9a7e", + "sha256:31d4b0455d72d914645f803d917daf4f314d115c70de0578d3820deb8b101f66", + "sha256:388f840fd911d61a96e9e595eaf003f9dc39e847c9060b8e623ab29e556f009b", + "sha256:3e993804e6b04113d61fdb9541b6df2f096ec265a506dad7437517470919c90f", + "sha256:4180b2785d1278e6abb36a72ac97c92432db53fa2df00ee943d2c15a33627d31", + "sha256:4416ee86a87180b6a28e7483102c92debc077bec59c67eda8cc63fc52a218ac0", + "sha256:45c7b4eac7571707269ebc2893facdf87e359cd5c7cfbfa9e6bd8b33fb1079c5", + "sha256:460c05238fbfe6d848141669d17a751a46c923f9f0c9fd8a3a462ab737623a44", + "sha256:478051e5ef8278b2429864c8d148efcebdc2be948a61c9a44757cd8c816c98f5", + "sha256:481e3129a76ea01adcc0e7097ccb8dbddab1cfc40b6f0e32c670153512957c0f", + "sha256:48425107fbb1af3f0f2410c004f16be10ffc9374358e5600b57fa543f46f8def", + "sha256:4a7d8b869ded171f6cdf584fc2fc6ae03b30a0e1e37a9daf213a59857a62ed90", + "sha256:4bff49986c9bae127928a2f9fd6313146a342bfae8292f63e562f872bd01b871", + "sha256:51d3495235af09f21aa92a7cdd51504bda640b108b6be834448b774f52852c09", + "sha256:5556acde785a61d4cf8b8534ae109b023cbd2f9df65ee2afbe070be47c410f8c", + "sha256:55e94124af9c8fbb1df54195cc092688fdad0765641b738970b6f1d5ea72e776", + "sha256:5616d386dfbfba7c39e9418ba668c734f6ceaacc0130877e8a100cad11e6838b", + "sha256:57233e1600560ceb719bed759dc78393edd541b9a3e7fefc3079abd83c26a6ea", + "sha256:593e89e2518eaf81e96edcc9ef2c5fca666e8fc922b03d5cb7a7b8964dbee336", + "sha256:5998f81bf6a2b28a802521efe14d9fc119f74b64e87b62ad1b0e7c3d8366d0c7", + "sha256:5e4e612b7ecc9596e7c859cd9e0cd085e6d0c576b4f0d917299595eb56bf9c05", + "sha256:5fef7b602ccf8a3c77ab483479ccd7a952a8c5bb1c263156671ba7aaa24d1035", + "sha256:63b31345e20afda2ae30dba246955517a4264464d75e071fc2fa641e88c763ec", + "sha256:663911786dcde3e4a5d88215c722c531c7548903dc07d418418c0d1c768072c0", + "sha256:673d6e9e3aa86949343b46ac2b7be266c36e07ce77fa1d40f349e6987a814d6e", + "sha256:68ae7091cc73a752f0b938f15bb193de80ca5edf5ae2ea6360d93d3e9228357b", + "sha256:698da4fa1f7baeea0607738cb1f9877ed1ba50342b29891b0223221679d6f729", + "sha256:6a93644d7996fd696ab7f1f466cd75d718d0a00d5c8118b9fe8c64231dc1f85e", + "sha256:6c8d0dff4865da54ae825d43e1721925721b19f3b9aca8e730c2ce73dee2c630", + "sha256:732d08228fa8d366fec284f7032cc868d28a99fa81fc71e3adf7ecedbcf33a0f", + "sha256:735147aa41b8eeb104da186864b55e2a6623c758000081d19c93d759cd9523e3", + "sha256:7a92aab8dd1d427ac9bc7480cfd3481dbab0ef024558f2f5a47de672d8a5ffaa", + "sha256:7d352d4de060604e605abdc5c8a5d0429d5f156cb9866609065d3003454d4cea", + "sha256:81074edf3c74bc9bd250d223408a5df0ff745d1f7a462597536cd26b9390e2d6", + "sha256:81e6a9a8fda78a2f4901d2915b25bf620f372997ca1f20a14f7cefef5ad6f6f4", + "sha256:843500cd3e4884b92fd4037912bc42d5f047108d2c986d36352e880196d465b0", + "sha256:89247ac220031a4f9f689688bcee42b38fd770d4cce294e5d914afc53b630abe", + "sha256:8bb624dbaef4661f5e3625c1e39ad98ecceef281d1380e2774d8084ad0810275", + "sha256:9007bb1290c79402be6b84bcf9e7a622a073859d61fcee146dc7bc47afe328f3", + "sha256:9070ae35c410d644e6df98a8f69f3ed2807e657d0df2a26b2643127cbf6944a5", + "sha256:908c13f305d34322e11b796de358edaeea47dd2d115c33ca22909c5e8fb036fd", + "sha256:9480b4b327be83c4d29cb88bcace761b11f5e30198ffe2287889455c6819e934", + "sha256:960d85ebaa974ecea4e71fa56d098378fa51fd670ee744614cbb95bf95e28fc7", + "sha256:96796594c770bc6587376e74ddc7d9c982d68f47116bb69d90873db5e0ea88b6", + "sha256:97cf514a9f3426228d8daf880f56488330e4b2948a6d183a106921217850d9eb", + "sha256:997b7e0960072f6bb445402da162f964ea67387b9f18bda2361edcc026e13597", + "sha256:9b28787eaf2174e68f0acb3c66f9c6b98bdfeb0930c0d0b08e1941c7aedc8d27", + "sha256:9bf51354e15520715f068853e6ab8190e77139940e8b8b633bdb587956a08fb0", + "sha256:9e5075e30be626ef0f9bedf7a15f55ed4d7209e832bc314fdc232dbd61dcbf44", + "sha256:a08b4346350660799d81d4016e748bcb134a9083301d41f9618f64a6077f89f2", + "sha256:a67f75cc51a2dc7229a8ac84291e4d61dc5abfc8940befcf37a2836d95873340", + "sha256:a973f5286758f76824ecf19ae1999f6697371a9121c8f163295d181d19a819d7", + "sha256:ab911033e5937fc221a2c165acce7f66ae5ac9d3e54bec56f3c9c197a96be574", + "sha256:ad92e37be0b106fdbc575a3a669b43b364a5ef334495c9764de4c2d7541f7a99", + "sha256:ad9ea4a50d2948738351790047d45f2b1a023facc01bf0361988109b177e8b2f", + "sha256:b029bdd5a8b6c9a7c0e8fdbe4fc25ffaa2e09b77f6f3462314696e3a20511829", + "sha256:b41a85b9b9a2530b72b0d3d10e383fc3c2647ae88169d557d5e216f881860318", + "sha256:baf020f4b708f800b353259cd7575e335a79f1ac912d9dda55b2aa0bf3616e42", + "sha256:c08094b9e5d1b6dfb0845a0253cc2655ca64ce70d15162dfdb102e28c8993493", + "sha256:c26805b6c8dc8565ed91045c44040bf6c0fe5cb5b390c78cd1d9400d08a6cd39", + "sha256:c6ee222671eed5c5b16a5ad2aea07f0a715b8b199ee534834bc1dd2798f1ade7", + "sha256:c820608e7077416f766b148d75e158e454881961881b657cff808529d261dd24", + "sha256:cb081b2b02bf4405c804de1ece6f904916838ab0e057f1446e4ac12fac827960", + "sha256:cbe038bb78d599b5a29d09c438905defaa615a522bc7e12f8016823179439497", + "sha256:cd461e402e24929d866f05061d2f8337e3a8456e75e21b72c125abff2477c7f7", + "sha256:cde6dbb788a4cbc4a80a72aa96386ba4c2b17bdfff3ace0709799adbe16d6476", + "sha256:ce7889dc3701826d519ede93cdff11940fb5567dbdc165dce0e78047eece02b7", + "sha256:d0086ba8d41d73647b13087a3ca9c020f6bfec338335037e8f5172b4c7c8dce5", + "sha256:d29988bde28a90a00367edcf92afa1a2f7ecf43ea3ae383291b7da6d380ccc25", + "sha256:d494befe648c13c98c0f3d56d05489c839c9228a32f58e9777305deb6c2c1cee", + "sha256:df4e32badb2ccf1773e1e74020b7e3b8caf9e92f842c6be7d14888ecdefc2c6c", + "sha256:e6de6a4bdfaee382c2de2a3580b3ae76fce6105da202bbd835e5efbeae6a9c6e", + "sha256:f039c5373f7b314b151432c73219216857b19ab9cb834f0eb5d880f74fc7851c", + "sha256:f6e86ac2b45a95f75c6f744147483e0fc9697ce7dfe1726083324c236f873f8b", + "sha256:f9c690b359f503f18bf1c46a6456370e4f6f3fc4320b8774ae69c4f85ecc6c94", + "sha256:fa436abd4ac9ca71859baf5794614e6ec8fa27362f0162baedcc059048da55f7", + "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", + "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" + ], + "markers": "implementation_name == 'cpython'", + "version": "==0.12.2" + }, + "dataclassy": { + "hashes": [ + "sha256:ad6622cb91e644d13f68768558983fbc22c90a8ff7e355638485d18b9baf1198", + "sha256:bcb030d3d700cf9b1597042bbc8375b92773e6f68f65675a7071862c0ddb87f5" + ], + "markers": "python_version >= '3.6'", + "version": "==0.11.1" + }, + "decorator": { + "hashes": [ + "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", + "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" + ], + "markers": "python_version >= '3.5'", + "version": "==5.1.1" + }, + "deprecated": { + "hashes": [ + "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c", + "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.2.14" + }, + "distlib": { + "hashes": [ + "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057", + "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8" + ], + "version": "==0.3.7" + }, + "eip712": { + "hashes": [ + "sha256:3997dace7e581b66a84d106a10baac47a3f6c94095d79c7d0971ca0ede1926ad", + "sha256:c984c577358d1c7e5d4e52802bf4bd0432e965ba7326448998f95fcc1b6d5269" + ], + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.2.1" + }, + "eth-abi": { + "hashes": [ + "sha256:60d88788d53725794cdb07c0f0bb0df2a31a6e1ad19644313fe6117ac24eeeb0", + "sha256:abd83410a5326145bf178675c276de0ed154f6dc695dcad1beafaa44d97f44ae" + ], + "markers": "python_full_version >= '3.7.2' and python_version < '4'", + "version": "==4.2.1" + }, + "eth-account": { + "hashes": [ + "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b", + "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca" + ], + "markers": "python_version >= '3.6' and python_version < '4'", + "version": "==0.8.0" + }, + "eth-ape": { + "hashes": [ + "sha256:78001209dfdf8c7973c649b8cbba73d3399cd649aeee4223d0b29078ae997201", + "sha256:f6c5137a10edcc2a37a8f8736882e412b2fb3b326d00d8128538e73dc031f89b" + ], + "index": "pypi", + "version": "==0.6.19" + }, + "eth-bloom": { + "hashes": [ + "sha256:73576828dff7566b9216403e0898966912f370bae5734241dd3f50ce5664a825", + "sha256:cc86ab9670577996f7fcb8445b7a164ecd211ac91d9c4c2b5a47678623419927" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.0.0" + }, + "eth-hash": { + "extras": ["pycryptodome"], + "hashes": [ + "sha256:1b5f10eca7765cc385e1430eefc5ced6e2e463bb18d1365510e2e539c1a6fe4e", + "sha256:251f62f6579a1e247561679d78df37548bd5f59908da0b159982bf8293ad32f0" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==0.5.2" + }, + "eth-keyfile": { + "hashes": [ + "sha256:471be6e5386fce7b22556b3d4bde5558dbce46d2674f00848027cb0a20abdc8c", + "sha256:609773a1ad5956944a33348413cad366ec6986c53357a806528c8f61c4961560" + ], + "version": "==0.6.1" + }, + "eth-keys": { + "hashes": [ + "sha256:7d18887483bc9b8a3fdd8e32ddcb30044b9f08fcb24a380d93b6eee3a5bb3216", + "sha256:e07915ffb91277803a28a379418bdd1fad1f390c38ad9353a0f189789a440d5d" + ], + "version": "==0.4.0" + }, + "eth-rlp": { + "hashes": [ + "sha256:e88e949a533def85c69fa94224618bbbd6de00061f4cff645c44621dab11cf33", + "sha256:f3263b548df718855d9a8dbd754473f383c0efc82914b0b849572ce3e06e71a6" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==0.3.0" + }, + "eth-tester": { + "extras": ["py-evm"], + "hashes": [ + "sha256:0e4367d99ae242efdb8c1d18ed99d1ff3f03149abb0a4c2427bc6d333ebef13b", + "sha256:b9cbc93d0b17a6e8acbb52294dad214ee223cf88209fa5be66ead353937d274c" + ], + "version": "==0.9.1b1" + }, + "eth-typing": { + "hashes": [ + "sha256:347d50713dd58ab50063b228d8271624ab2de3071bfa32d467b05f0ea31ab4c5", + "sha256:7f49610469811ee97ac43eaf6baa294778ce74042d41e61ecf22e5ebe385590f" + ], + "markers": "python_full_version >= '3.7.2' and python_version < '4'", + "version": "==3.4.0" + }, + "eth-utils": { + "hashes": [ + "sha256:60fc999c1b4ae011ab600b01a3eb5375156f3bc46e7cd1a83ca9e6e14bb9b13c", + "sha256:f79a95f86dd991344697c763db40271dbe43fbbcd5776f49b0c4fb7b645ee1c4" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.2.1" + }, + "ethpm-types": { + "hashes": [ + "sha256:4d8e7aaf69f605055f0c3681eaa03bab2dbc201a72d2493ef41db9aa3fcaa1ff", + "sha256:edc64fec898349338a83d36120452467c6e64399ed0541524bbcadb736035756" + ], + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.5.6" + }, + "evm-trace": { + "hashes": [ + "sha256:0bc0cee185807b8e950d3d3009e5e8680e252054e11611694d632416c8b9d96a", + "sha256:34fbdfdef480066602d8dd8334fd72c6c7dab3d272c1371b7842bc2199918124" + ], + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.1.0a24" + }, + "exceptiongroup": { + "hashes": [ + "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", + "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" + ], + "markers": "python_version < '3.11'", + "version": "==1.1.3" + }, + "executing": { + "hashes": [ + "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc", + "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107" + ], + "version": "==1.2.0" + }, + "filelock": { + "hashes": [ + "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4", + "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd" + ], + "markers": "python_version >= '3.8'", + "version": "==3.12.4" + }, + "flake8": { + "hashes": [ + "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23", + "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5" + ], + "index": "pypi", + "version": "==6.1.0" + }, + "frozenlist": { + "hashes": [ + "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6", + "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01", + "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251", + "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9", + "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b", + "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87", + "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf", + "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f", + "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0", + "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2", + "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b", + "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc", + "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c", + "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467", + "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9", + "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1", + "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a", + "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79", + "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167", + "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300", + "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf", + "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea", + "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2", + "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab", + "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3", + "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb", + "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087", + "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc", + "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8", + "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62", + "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f", + "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326", + "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c", + "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431", + "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963", + "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7", + "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef", + "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3", + "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956", + "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781", + "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472", + "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc", + "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839", + "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672", + "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3", + "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503", + "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d", + "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8", + "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b", + "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc", + "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f", + "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559", + "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b", + "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95", + "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb", + "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963", + "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919", + "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f", + "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3", + "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1", + "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e" + ], + "markers": "python_version >= '3.8'", + "version": "==1.4.0" + }, + "hexbytes": { + "hashes": [ + "sha256:383595ad75026cf00abd570f44b368c6cdac0c6becfae5c39ff88829877f8a59", + "sha256:a3fe35c6831ee8fafd048c4c086b986075fc14fd46258fa24ecb8d65745f9a9d" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==0.3.1" + }, + "identify": { + "hashes": [ + "sha256:24437fbf6f4d3fe6efd0eb9d67e24dd9106db99af5ceb27996a5f7895f24bf1b", + "sha256:d43d52b86b15918c137e3a74fff5224f60385cd0e9c38e99d07c257f02f151a5" + ], + "markers": "python_version >= '3.8'", + "version": "==2.5.29" + }, + "idna": { + "hashes": [ + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + ], + "markers": "python_version >= '3.5'", + "version": "==3.4" + }, + "ijson": { + "hashes": [ + "sha256:06f9707da06a19b01013f8c65bf67db523662a9b4a4ff027e946e66c261f17f0", + "sha256:0974444c1f416e19de1e9f567a4560890095e71e81623c509feff642114c1e53", + "sha256:0a4ae076bf97b0430e4e16c9cb635a6b773904aec45ed8dcbc9b17211b8569ba", + "sha256:0b9d1141cfd1e6d6643aa0b4876730d0d28371815ce846d2e4e84a2d4f471cf3", + "sha256:0e0243d166d11a2a47c17c7e885debf3b19ed136be2af1f5d1c34212850236ac", + "sha256:10294e9bf89cb713da05bc4790bdff616610432db561964827074898e174f917", + "sha256:1844c5b57da21466f255a0aeddf89049e730d7f3dfc4d750f0e65c36e6a61a7c", + "sha256:211124cff9d9d139dd0dfced356f1472860352c055d2481459038b8205d7d742", + "sha256:2a80c0bb1053055d1599e44dc1396f713e8b3407000e6390add72d49633ff3bb", + "sha256:2cc04fc0a22bb945cd179f614845c8b5106c0b3939ee0d84ce67c7a61ac1a936", + "sha256:2ec3e5ff2515f1c40ef6a94983158e172f004cd643b9e4b5302017139b6c96e4", + "sha256:35194e0b8a2bda12b4096e2e792efa5d4801a0abb950c48ade351d479cd22ba5", + "sha256:396338a655fb9af4ac59dd09c189885b51fa0eefc84d35408662031023c110d1", + "sha256:39f551a6fbeed4433c85269c7c8778e2aaea2501d7ebcb65b38f556030642c17", + "sha256:3b14d322fec0de7af16f3ef920bf282f0dd747200b69e0b9628117f381b7775b", + "sha256:3c0d526ccb335c3c13063c273637d8611f32970603dfb182177b232d01f14c23", + "sha256:3dcc33ee56f92a77f48776014ddb47af67c33dda361e84371153c4f1ed4434e1", + "sha256:4252e48c95cd8ceefc2caade310559ab61c37d82dfa045928ed05328eb5b5f65", + "sha256:455d7d3b7a6aacfb8ab1ebcaf697eedf5be66e044eac32508fccdc633d995f0e", + "sha256:46bafb1b9959872a1f946f8dd9c6f1a30a970fc05b7bfae8579da3f1f988e598", + "sha256:4a3a6a2fbbe7550ffe52d151cf76065e6b89cfb3e9d0463e49a7e322a25d0426", + "sha256:4b2ec8c2a3f1742cbd5f36b65e192028e541b5fd8c7fd97c1fc0ca6c427c704a", + "sha256:4fc35d569eff3afa76bfecf533f818ecb9390105be257f3f83c03204661ace70", + "sha256:545a30b3659df2a3481593d30d60491d1594bc8005f99600e1bba647bb44cbb5", + "sha256:644f4f03349ff2731fd515afd1c91b9e439e90c9f8c28292251834154edbffca", + "sha256:674e585361c702fad050ab4c153fd168dc30f5980ef42b64400bc84d194e662d", + "sha256:6a4db2f7fb9acfb855c9ae1aae602e4648dd1f88804a0d5cfb78c3639bcf156c", + "sha256:6bd3e7e91d031f1e8cea7ce53f704ab74e61e505e8072467e092172422728b22", + "sha256:6c32c18a934c1dc8917455b0ce478fd7a26c50c364bd52c5a4fb0fc6bb516af7", + "sha256:6f662dc44362a53af3084d3765bb01cd7b4734d1f484a6095cad4cb0cbfe5374", + "sha256:713a919e0220ac44dab12b5fed74f9130f3480e55e90f9d80f58de129ea24f83", + "sha256:7596b42f38c3dcf9d434dddd50f46aeb28e96f891444c2b4b1266304a19a2c09", + "sha256:7851a341429b12d4527ca507097c959659baf5106c7074d15c17c387719ffbcd", + "sha256:7b8064a85ec1b0beda7dd028e887f7112670d574db606f68006c72dd0bb0e0e2", + "sha256:7ce4c70c23521179d6da842bb9bc2e36bb9fad1e0187e35423ff0f282890c9ca", + "sha256:7dc357da4b4ebd8903e77dbcc3ce0555ee29ebe0747c3c7f56adda423df8ec89", + "sha256:81815b4184b85ce124bfc4c446d5f5e5e643fc119771c5916f035220ada29974", + "sha256:85afdb3f3a5d0011584d4fa8e6dccc5936be51c27e84cd2882fe904ca3bd04c5", + "sha256:86b3c91fdcb8ffb30556c9669930f02b7642de58ca2987845b04f0d7fe46d9a8", + "sha256:904f77dd3d87736ff668884fe5197a184748eb0c3e302ded61706501d0327465", + "sha256:916acdc5e504f8b66c3e287ada5d4b39a3275fc1f2013c4b05d1ab9933671a6c", + "sha256:923131f5153c70936e8bd2dd9dcfcff43c67a3d1c789e9c96724747423c173eb", + "sha256:92dc4d48e9f6a271292d6079e9fcdce33c83d1acf11e6e12696fb05c5889fe74", + "sha256:96190d59f015b5a2af388a98446e411f58ecc6a93934e036daa75f75d02386a0", + "sha256:9680e37a10fedb3eab24a4a7e749d8a73f26f1a4c901430e7aa81b5da15f7307", + "sha256:98c6799925a5d1988da4cd68879b8eeab52c6e029acc45e03abb7921a4715c4b", + "sha256:9c2a12dcdb6fa28f333bf10b3a0f80ec70bc45280d8435be7e19696fab2bc706", + "sha256:9e0a27db6454edd6013d40a956d008361aac5bff375a9c04ab11fc8c214250b5", + "sha256:a4d7fe3629de3ecb088bff6dfe25f77be3e8261ed53d5e244717e266f8544305", + "sha256:a729b0c8fb935481afe3cf7e0dadd0da3a69cc7f145dbab8502e2f1e01d85a7c", + "sha256:ab4db9fee0138b60e31b3c02fff8a4c28d7b152040553b6a91b60354aebd4b02", + "sha256:b49fd5fe1cd9c1c8caf6c59f82b08117dd6bea2ec45b641594e25948f48f4169", + "sha256:b4eb2304573c9fdf448d3fa4a4fdcb727b93002b5c5c56c14a5ffbbc39f64ae4", + "sha256:ba33c764afa9ecef62801ba7ac0319268a7526f50f7601370d9f8f04e77fc02b", + "sha256:bcc51c84bb220ac330122468fe526a7777faa6464e3b04c15b476761beea424f", + "sha256:be8495f7c13fa1f622a2c6b64e79ac63965b89caf664cc4e701c335c652d15f2", + "sha256:c1a4b8eb69b6d7b4e94170aa991efad75ba156b05f0de2a6cd84f991def12ff9", + "sha256:c63f3d57dbbac56cead05b12b81e8e1e259f14ce7f233a8cbe7fa0996733b628", + "sha256:ccd6be56335cbb845f3d3021b1766299c056c70c4c9165fb2fbe2d62258bae3f", + "sha256:cfced0a6ec85916eb8c8e22415b7267ae118eaff2a860c42d2cc1261711d0d31", + "sha256:d052417fd7ce2221114f8d3b58f05a83c1a2b6b99cafe0b86ac9ed5e2fc889df", + "sha256:d1053fb5f0b010ee76ca515e6af36b50d26c1728ad46be12f1f147a835341083", + "sha256:d31e0d771d82def80cd4663a66de277c3b44ba82cd48f630526b52f74663c639", + "sha256:d34e049992d8a46922f96483e96b32ac4c9cffd01a5c33a928e70a283710cd58", + "sha256:d6ea7c7e3ec44742e867c72fd750c6a1e35b112f88a917615332c4476e718d40", + "sha256:db2d6341f9cb538253e7fe23311d59252f124f47165221d3c06a7ed667ecd595", + "sha256:db3bf1b42191b5cc9b6441552fdcb3b583594cb6b19e90d1578b7cbcf80d0fae", + "sha256:e641814793a037175f7ec1b717ebb68f26d89d82cfd66f36e588f32d7e488d5f", + "sha256:e84d27d1acb60d9102728d06b9650e5b7e5cb0631bd6e3dfadba8fb6a80d6c2f", + "sha256:e9fd906f0c38e9f0bfd5365e1bed98d649f506721f76bb1a9baa5d7374f26f19", + "sha256:eaac293853f1342a8d2a45ac1f723c860f700860e7743fb97f7b76356df883a8", + "sha256:eeb286639649fb6bed37997a5e30eefcacddac79476d24128348ec890b2a0ccb", + "sha256:f05ed49f434ce396ddcf99e9fd98245328e99f991283850c309f5e3182211a79", + "sha256:f4bc87e69d1997c6a55fff5ee2af878720801ff6ab1fb3b7f94adda050651e37", + "sha256:f8d54b624629f9903005c58d9321a036c72f5c212701bbb93d1a520ecd15e370", + "sha256:fa8b98be298efbb2588f883f9953113d8a0023ab39abe77fe734b71b46b1220a", + "sha256:fbac4e9609a1086bbad075beb2ceec486a3b138604e12d2059a33ce2cba93051", + "sha256:fd12e42b9cb9c0166559a3ffa276b4f9fc9d5b4c304e5a13668642d34b48b634" + ], + "version": "==3.2.3" + }, + "importlib-metadata": { + "hashes": [ + "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", + "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" + ], + "markers": "python_version >= '3.8'", + "version": "==6.8.0" + }, + "importlib-resources": { + "hashes": [ + "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf", + "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4" + ], + "markers": "python_version < '3.9'", + "version": "==6.0.1" + }, + "iniconfig": { + "hashes": [ + "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", + "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.0" + }, + "ipython": { + "hashes": [ + "sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea", + "sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc" + ], + "markers": "python_version >= '3.8'", + "version": "==8.12.2" + }, + "isort": { + "hashes": [ + "sha256:0ec8b74806e80fec33e6e7ba89d35e17b3eb1c4c74316ea44cf877cc26e8b118", + "sha256:cde11e804641edbe1b6b95d56582eb541f27eebc77864c6015545944bb0e9c76" + ], + "index": "pypi", + "version": "==6.0.0b2" + }, + "jedi": { + "hashes": [ + "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4", + "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e" + ], + "markers": "python_version >= '3.6'", + "version": "==0.19.0" + }, + "jsonschema": { + "hashes": [ + "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb", + "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f" + ], + "markers": "python_version >= '3.8'", + "version": "==4.19.0" + }, + "jsonschema-specifications": { + "hashes": [ + "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1", + "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" + ], + "markers": "python_version >= '3.8'", + "version": "==2023.7.1" + }, + "lazyasd": { + "hashes": ["sha256:a3196f05cff27f952ad05767e5735fd564b4ea4e89b23f5ea1887229c3db145b"], + "version": "==0.1.4" + }, + "lru-dict": { + "hashes": [ + "sha256:00f6e8a3fc91481b40395316a14c94daa0f0a5de62e7e01a7d589f8d29224052", + "sha256:020b93870f8c7195774cbd94f033b96c14f51c57537969965c3af300331724fe", + "sha256:05fb8744f91f58479cbe07ed80ada6696ec7df21ea1740891d4107a8dd99a970", + "sha256:086ce993414f0b28530ded7e004c77dc57c5748fa6da488602aa6e7f79e6210e", + "sha256:0c316dfa3897fabaa1fe08aae89352a3b109e5f88b25529bc01e98ac029bf878", + "sha256:0facf49b053bf4926d92d8d5a46fe07eecd2af0441add0182c7432d53d6da667", + "sha256:1171ad3bff32aa8086778be4a3bdff595cc2692e78685bcce9cb06b96b22dcc2", + "sha256:1184d91cfebd5d1e659d47f17a60185bbf621635ca56dcdc46c6a1745d25df5c", + "sha256:13c56782f19d68ddf4d8db0170041192859616514c706b126d0df2ec72a11bd7", + "sha256:18ee88ada65bd2ffd483023be0fa1c0a6a051ef666d1cd89e921dcce134149f2", + "sha256:203b3e78d03d88f491fa134f85a42919020686b6e6f2d09759b2f5517260c651", + "sha256:20f5f411f7751ad9a2c02e80287cedf69ae032edd321fe696e310d32dd30a1f8", + "sha256:21b3090928c7b6cec509e755cc3ab742154b33660a9b433923bd12c37c448e3e", + "sha256:22147367b296be31cc858bf167c448af02435cac44806b228c9be8117f1bfce4", + "sha256:231d7608f029dda42f9610e5723614a35b1fff035a8060cf7d2be19f1711ace8", + "sha256:25f9e0bc2fe8f41c2711ccefd2871f8a5f50a39e6293b68c3dec576112937aad", + "sha256:287c2115a59c1c9ed0d5d8ae7671e594b1206c36ea9df2fca6b17b86c468ff99", + "sha256:291d13f85224551913a78fe695cde04cbca9dcb1d84c540167c443eb913603c9", + "sha256:312b6b2a30188586fe71358f0f33e4bac882d33f5e5019b26f084363f42f986f", + "sha256:34a3091abeb95e707f381a8b5b7dc8e4ee016316c659c49b726857b0d6d1bd7a", + "sha256:35a142a7d1a4fd5d5799cc4f8ab2fff50a598d8cee1d1c611f50722b3e27874f", + "sha256:3838e33710935da2ade1dd404a8b936d571e29268a70ff4ca5ba758abb3850df", + "sha256:5345bf50e127bd2767e9fd42393635bbc0146eac01f6baf6ef12c332d1a6a329", + "sha256:5919dd04446bc1ee8d6ecda2187deeebfff5903538ae71083e069bc678599446", + "sha256:59f3df78e94e07959f17764e7fa7ca6b54e9296953d2626a112eab08e1beb2db", + "sha256:5b172fce0a0ffc0fa6d282c14256d5a68b5db1e64719c2915e69084c4b6bf555", + "sha256:5c6acbd097b15bead4de8e83e8a1030bb4d8257723669097eac643a301a952f0", + "sha256:5d90a70c53b0566084447c3ef9374cc5a9be886e867b36f89495f211baabd322", + "sha256:604d07c7604b20b3130405d137cae61579578b0e8377daae4125098feebcb970", + "sha256:6b7a031e47421d4b7aa626b8c91c180a9f037f89e5d0a71c4bb7afcf4036c774", + "sha256:6da5b8099766c4da3bf1ed6e7d7f5eff1681aff6b5987d1258a13bd2ed54f0c9", + "sha256:712e71b64da181e1c0a2eaa76cd860265980cd15cb0e0498602b8aa35d5db9f8", + "sha256:71da89e134747e20ed5b8ad5b4ee93fc5b31022c2b71e8176e73c5a44699061b", + "sha256:756230c22257597b7557eaef7f90484c489e9ba78e5bb6ab5a5bcfb6b03cb075", + "sha256:7d3336e901acec897bcd318c42c2b93d5f1d038e67688f497045fc6bad2c0be7", + "sha256:7e51fa6a203fa91d415f3b2900e5748ec8e06ad75777c98cc3aeb3983ca416d7", + "sha256:877801a20f05c467126b55338a4e9fa30e2a141eb7b0b740794571b7d619ee11", + "sha256:87bbad3f5c3de8897b8c1263a9af73bbb6469fb90e7b57225dad89b8ef62cd8d", + "sha256:8bda3a9afd241ee0181661decaae25e5336ce513ac268ab57da737eacaa7871f", + "sha256:8dafc481d2defb381f19b22cc51837e8a42631e98e34b9e0892245cc96593deb", + "sha256:91d577a11b84387013815b1ad0bb6e604558d646003b44c92b3ddf886ad0f879", + "sha256:981ef3edc82da38d39eb60eae225b88a538d47b90cce2e5808846fd2cf64384b", + "sha256:987b73a06bcf5a95d7dc296241c6b1f9bc6cda42586948c9dabf386dc2bef1cd", + "sha256:9e4c85aa8844bdca3c8abac3b7f78da1531c74e9f8b3e4890c6e6d86a5a3f6c0", + "sha256:a3ea7571b6bf2090a85ff037e6593bbafe1a8598d5c3b4560eb56187bcccb4dc", + "sha256:a87bdc291718bbdf9ea4be12ae7af26cbf0706fa62c2ac332748e3116c5510a7", + "sha256:aaecd7085212d0aa4cd855f38b9d61803d6509731138bf798a9594745953245b", + "sha256:ae301c282a499dc1968dd633cfef8771dd84228ae9d40002a3ea990e4ff0c469", + "sha256:afdadd73304c9befaed02eb42f5f09fdc16288de0a08b32b8080f0f0f6350aa6", + "sha256:b20b7c9beb481e92e07368ebfaa363ed7ef61e65ffe6e0edbdbaceb33e134124", + "sha256:b30122e098c80e36d0117810d46459a46313421ce3298709170b687dc1240b02", + "sha256:b55753ee23028ba8644fd22e50de7b8f85fa60b562a0fafaad788701d6131ff8", + "sha256:b5ccfd2291c93746a286c87c3f895165b697399969d24c54804ec3ec559d4e43", + "sha256:b6613daa851745dd22b860651de930275be9d3e9373283a2164992abacb75b62", + "sha256:b710f0f4d7ec4f9fa89dfde7002f80bcd77de8024017e70706b0911ea086e2ef", + "sha256:b9ec7a4a0d6b8297102aa56758434fb1fca276a82ed7362e37817407185c3abb", + "sha256:bb12f19cdf9c4f2d9aa259562e19b188ff34afab28dd9509ff32a3f1c2c29326", + "sha256:bd2cd1b998ea4c8c1dad829fc4fa88aeed4dee555b5e03c132fc618e6123f168", + "sha256:c4da599af36618881748b5db457d937955bb2b4800db891647d46767d636c408", + "sha256:c53b12b89bd7a6c79f0536ff0d0a84fdf4ab5f6252d94b24b9b753bd9ada2ddf", + "sha256:c9617583173a29048e11397f165501edc5ae223504a404b2532a212a71ecc9ed", + "sha256:cd46c94966f631a81ffe33eee928db58e9fbee15baba5923d284aeadc0e0fa76", + "sha256:cd6806313606559e6c7adfa0dbeb30fc5ab625f00958c3d93f84831e7a32b71e", + "sha256:d0dd4cd58220351233002f910e35cc01d30337696b55c6578f71318b137770f9", + "sha256:d0f7ec902a0097ac39f1922c89be9eaccf00eb87751e28915320b4f72912d057", + "sha256:d5bb41bc74b321789803d45b124fc2145c1b3353b4ad43296d9d1d242574969b", + "sha256:d7ab0c10c4fa99dc9e26b04e6b62ac32d2bcaea3aad9b81ec8ce9a7aa32b7b1b", + "sha256:de24b47159e07833aeab517d9cb1c3c5c2d6445cc378b1c2f1d8d15fb4841d63", + "sha256:de906e5486b5c053d15b7731583c25e3c9147c288ac8152a6d1f9bccdec72641", + "sha256:df25a426446197488a6702954dcc1de511deee20c9db730499a2aa83fddf0df1", + "sha256:e25b2e90a032dc248213af7f3f3e975e1934b204f3b16aeeaeaff27a3b65e128", + "sha256:e707d93bae8f0a14e6df1ae8b0f076532b35f00e691995f33132d806a88e5c18", + "sha256:ea2ac3f7a7a2f32f194c84d82a034e66780057fd908b421becd2f173504d040e", + "sha256:ead83ac59a29d6439ddff46e205ce32f8b7f71a6bd8062347f77e232825e3d0a", + "sha256:edad398d5d402c43d2adada390dd83c74e46e020945ff4df801166047013617e", + "sha256:f010cfad3ab10676e44dc72a813c968cd586f37b466d27cde73d1f7f1ba158c2", + "sha256:f404dcc8172da1f28da9b1f0087009578e608a4899b96d244925c4f463201f2a", + "sha256:f54908bf91280a9b8fa6a8c8f3c2f65850ce6acae2852bbe292391628ebca42f", + "sha256:f5d5a5f976b39af73324f2b793862859902ccb9542621856d51a5993064f25e4", + "sha256:f9484016e6765bd295708cccc9def49f708ce07ac003808f69efa386633affb9", + "sha256:fbf36c5a220a85187cacc1fcb7dd87070e04b5fc28df7a43f6842f7c8224a388", + "sha256:fc42882b554a86e564e0b662da47b8a4b32fa966920bd165e27bb8079a323bc1" + ], + "version": "==1.2.0" + }, + "matplotlib-inline": { + "hashes": [ + "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", + "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" + ], + "markers": "python_version >= '3.5'", + "version": "==0.1.6" + }, + "mccabe": { + "hashes": [ + "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", + "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e" + ], + "markers": "python_version >= '3.6'", + "version": "==0.7.0" + }, + "morphys": { + "hashes": ["sha256:76d6dbaa4d65f597e59d332c81da786d83e4669387b9b2a750cfec74e7beec20"], + "version": "==1.0" + }, + "msgspec": { + "hashes": [ + "sha256:1535855b0db1bee4e5c79384010861de2a23391b45095785e84ec9489abc56cd", + "sha256:23e65efaef864bf66a4ddfae9c2200c40ce1a50411f454de1757f3651e5762cd", + "sha256:25f7e3adaf1ca5d80455057576785069475b1d941eb877dbd0ae738cc5d1fefa", + "sha256:2ad4f4704045a0fb1b5226769d9cdc00a4a69adec2e6770064f3db73bb91bbf9", + "sha256:35420ae8afaa90498733541c0d8b2a73c70548a8a4d86da11201ed6df557e98f", + "sha256:358c2b908f1ed63419ccc5f185150c0caa3fc49599f4582504637cbfd5ff6242", + "sha256:3996bf1fc252658a7e028a0c263d28ac4dc48476e35f6fd8ebaf461a39459825", + "sha256:3bfc55d5ca60b3aa2c2287191aa9e943c54eb0aef16d4babb92fddcc047093b1", + "sha256:3f71c33efda990ecddc878ea2bb37f22e941d4264ded83e1b2309f86d335cde7", + "sha256:4c1ee8b9667fde3b5d7e0e0b555a8b70e2fa7bf2e02e9e8673af262c82c7b691", + "sha256:595f14f628825d9d79eeea6e08514144a3d516eb014f0c6191f91899c83a6836", + "sha256:70fa7f008008e2c823ecc1a143258bb2820ac76010cf6003091fa3832b6334c9", + "sha256:78a593bc0db95416d633b28cff00af0465f04590d53ff1a80a33d7e2728820ad", + "sha256:7b065995f3a41e4c8274a86e1ee84ac432969918373c777de239ef14f9537d80", + "sha256:80e57102469ee0d2186c72d42fa9460981ccd4252bdb997bf04ef2af0818984f", + "sha256:84cc7932f78aeec6ef014cca4bb4ecea8469bc05f13c9eacdfa27baa785e54b9", + "sha256:84fcf74b6371494aa536bf438ef96b08ce8f6e40483a01ed305535a40113136b", + "sha256:a75c4efa7565048f81e709a366e14b9dc10752b3fb5ea1f3c8de5abfca3db3c2", + "sha256:abcb92ffbca77bcfbedd5b29b68629628948982aafb994658e7abfad6e15913c", + "sha256:ade3959577bff46c7d9476962d2d7aa086b2820f3da03ee000e9be4958404829", + "sha256:b56cc7b9956daefb309447bbbb2581c84e5d5e3b89d573b1d5a25647522d2e43", + "sha256:b90a44550f19ee0b8c37dbca75f96473299275001af2a00273d736b7347ead6d", + "sha256:b9b3ed82f71816cddf0a9cdaae30a1d1addf8fe56ec09e7368db93ce43b29a81", + "sha256:baaba2411003f2e7a4328b5a58eba9efeb4c5e6a27e8ffd2adaccdc8feb0a805", + "sha256:c79ac853409b0000727f4c3e5fb32fe38122ad94b9e074f992fa9ea7f00eb498", + "sha256:ccaddb764b5abe457c0eded4a252f5fbeb8b04a946b46a06a7e6ca299c35dcb1", + "sha256:d127bf90f29f1211520f1baa897b10f2a9c05b8648ce7dc89dfc9ca45599be53", + "sha256:e03ff009f3a2e1fe883703f98098d12aea6b30934707b404fd994e9ea1c1bfa7", + "sha256:eb80befd343f3b378c8abad0367154703c74bde02fc62cbcf1a0e6b5fa779459" + ], + "markers": "python_version >= '3.8'", + "version": "==0.18.2" + }, + "multidict": { + "hashes": [ + "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9", + "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8", + "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03", + "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710", + "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161", + "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664", + "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569", + "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067", + "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313", + "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706", + "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2", + "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636", + "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49", + "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93", + "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603", + "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0", + "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60", + "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4", + "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e", + "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1", + "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60", + "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951", + "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc", + "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe", + "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95", + "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d", + "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8", + "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed", + "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2", + "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775", + "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87", + "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c", + "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2", + "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98", + "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3", + "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe", + "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78", + "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660", + "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176", + "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e", + "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988", + "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c", + "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c", + "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0", + "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449", + "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f", + "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde", + "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5", + "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d", + "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac", + "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a", + "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9", + "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca", + "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11", + "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35", + "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063", + "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b", + "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982", + "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258", + "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1", + "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52", + "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480", + "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7", + "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461", + "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d", + "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc", + "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779", + "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a", + "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547", + "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0", + "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171", + "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf", + "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d", + "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba" + ], + "markers": "python_version >= '3.7'", + "version": "==6.0.4" + }, + "mypy-extensions": { + "hashes": [ + "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", + "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" + ], + "markers": "python_version >= '3.5'", + "version": "==1.0.0" + }, + "nodeenv": { + "hashes": [ + "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2", + "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==1.8.0" + }, + "nucypher-core": { + "hashes": [ + "sha256:09c754a7450d2ba3a46bf2c73ac35a0e8fe73c0c2fdbc2dab47ebea47d90b909", + "sha256:0b3d44fdc4acfd31cf6e46fdf8acb9ea278823b2d72336f5c9e7732b37ac6f30", + "sha256:0b8449ab2524628b1d4c095fc4ff5e46c699f0acd62a099ba6d411e72704c94c", + "sha256:0fe7eab174fc658f8391f1834aa193fb10acf1a55a1c613d0f09493e8d0d9f17", + "sha256:1f70477f41bc10e19f6280258530dabecb453b1230f641601ea12f5e4c9cac67", + "sha256:1fc6f39de2e90e36695c2674a170047dc9abfc083e9177b3304bd74ec21727d2", + "sha256:57c1c6d96570221ec8c30f8b00d89496f9d68cdf11b0574bdae7defd3cc1c975", + "sha256:74fcf712399aeb0d242c1d332a7f7a34d4ff70d9262c0537eb769ff973c2170e", + "sha256:75d5b86ab0fe51b00036cab25d6d4699fa3171aa8a8418d4027fdc2388f84c43", + "sha256:a3a69e37fdf6a42b5d0be58b28d70e2fb614320d032a2fe99aa3aa29643f9494", + "sha256:b9c82bd7593d2deac41c8f7b2833193eb6e6cab0208261313121646fcd275629", + "sha256:de48dae67ff01ffe020e8887432daa8a1072797559e11cb34d56b3012b6f4520", + "sha256:e22038db52190d88b6dd8cbcd76980d2f2d62a630baac46677f9ad6743b3b689", + "sha256:f2d44c28e4724f1c5ff6e566bbe1ab731bd57458bd219072aa146bd43a4e78d6", + "sha256:fadd7ac4009d74b2bdf2b678015ff6e315827517de21d0684fd31b9259a08fbc", + "sha256:fcb97049f8719d30fd155fe3f862410cb5edb3afd76ff0ae1ff60d76d0b5a3f8" + ], + "index": "pypi", + "version": "==0.13.0" + }, + "numpy": { + "hashes": [ + "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f", + "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61", + "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7", + "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400", + "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef", + "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2", + "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d", + "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc", + "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835", + "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706", + "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5", + "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4", + "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6", + "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463", + "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a", + "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f", + "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e", + "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e", + "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694", + "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8", + "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64", + "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d", + "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc", + "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254", + "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2", + "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1", + "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810", + "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9" + ], + "markers": "python_version < '3.10'", + "version": "==1.24.4" + }, + "packaging": { + "hashes": [ + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" + ], + "markers": "python_version >= '3.7'", + "version": "==23.1" + }, + "pandas": { + "hashes": [ + "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813", + "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792", + "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406", + "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373", + "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328", + "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996", + "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf", + "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6", + "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7", + "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc", + "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1", + "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23", + "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a", + "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51", + "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572", + "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31", + "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5", + "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a", + "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003", + "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d", + "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354", + "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee", + "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa", + "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0", + "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9", + "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae", + "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc" + ], + "markers": "python_version >= '3.8'", + "version": "==1.5.3" + }, + "parsimonious": { + "hashes": ["sha256:b2ad1ae63a2f65bd78f5e0a8ac510a98f3607a43f1db2a8d46636a5d9e4a30c1"], + "version": "==0.9.0" + }, + "parso": { + "hashes": [ + "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", + "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" + ], + "markers": "python_version >= '3.6'", + "version": "==0.8.3" + }, + "pathspec": { + "hashes": [ + "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20", + "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3" + ], + "markers": "python_version >= '3.7'", + "version": "==0.11.2" + }, + "pexpect": { + "hashes": [ + "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", + "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" + ], + "markers": "sys_platform != 'win32'", + "version": "==4.8.0" + }, + "pickleshare": { + "hashes": [ + "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", + "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" + ], + "version": "==0.7.5" + }, + "pkgutil-resolve-name": { + "hashes": [ + "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", + "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" + ], + "markers": "python_version < '3.9'", + "version": "==1.3.10" + }, + "platformdirs": { + "hashes": [ + "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d", + "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d" + ], + "markers": "python_version >= '3.7'", + "version": "==3.10.0" + }, + "pluggy": { + "hashes": [ + "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12", + "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7" + ], + "markers": "python_version >= '3.8'", + "version": "==1.3.0" + }, + "pre-commit": { + "hashes": [ + "sha256:6bbd5129a64cad4c0dfaeeb12cd8f7ea7e15b77028d985341478c8af3c759522", + "sha256:96d529a951f8b677f730a7212442027e8ba53f9b04d217c4c67dc56c393ad945" + ], + "index": "pypi", + "version": "==3.4.0" + }, + "prompt-toolkit": { + "hashes": [ + "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", + "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.0.39" + }, + "protobuf": { + "hashes": [ + "sha256:067f750169bc644da2e1ef18c785e85071b7c296f14ac53e0900e605da588719", + "sha256:12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d", + "sha256:1b182c7181a2891e8f7f3a1b5242e4ec54d1f42582485a896e4de81aa17540c2", + "sha256:20651f11b6adc70c0f29efbe8f4a94a74caf61b6200472a9aea6e19898f9fcf4", + "sha256:2da777d34b4f4f7613cdf85c70eb9a90b1fbef9d36ae4a0ccfe014b0b07906f1", + "sha256:3d42e9e4796a811478c783ef63dc85b5a104b44aaaca85d4864d5b886e4b05e3", + "sha256:6e514e8af0045be2b56e56ae1bb14f43ce7ffa0f68b1c793670ccbe2c4fc7d2b", + "sha256:b0271a701e6782880d65a308ba42bc43874dabd1a0a0f41f72d2dac3b57f8e76", + "sha256:ba53c2f04798a326774f0e53b9c759eaef4f6a568ea7072ec6629851c8435959", + "sha256:e29d79c913f17a60cf17c626f1041e5288e9885c8579832580209de8b75f2a52", + "sha256:f631bb982c5478e0c1c70eab383af74a84be66945ebf5dd6b06fc90079668d0b", + "sha256:f6ccbcf027761a2978c1406070c3788f6de4a4b2cc20800cc03d52df716ad675", + "sha256:f6f8dc65625dadaad0c8545319c2e2f0424fede988368893ca3844261342c11a" + ], + "markers": "python_version >= '3.7'", + "version": "==4.24.3" + }, + "ptyprocess": { + "hashes": [ + "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", + "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" + ], + "version": "==0.7.0" + }, + "pure-eval": { + "hashes": [ + "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", + "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" + ], + "version": "==0.2.2" + }, + "py-cid": { + "hashes": [ + "sha256:22f432cc6fb68d12a9c35dbdc92c95484fc49e31dfcb9e0efb0082233c5394e3", + "sha256:7c48a6ee0bc50fd114d4b24849cd689a31d3ad5bdf8fa073bf68f846fd58c5da" + ], + "version": "==0.3.0" + }, + "py-ecc": { + "hashes": [ + "sha256:3fc8a79e38975e05dc443d25783fd69212a1ca854cc0efef071301a8f7d6ce1d", + "sha256:54e8aa4c30374fa62d582c599a99f352c153f2971352171318bd6910a643be0b" + ], + "markers": "python_version >= '3.6' and python_version < '4'", + "version": "==6.0.0" + }, + "py-evm": { + "hashes": [ + "sha256:1bf7b293faa70c03727358ae3e5cb0abf7282391461d9b52b82decd6ed18c2f7", + "sha256:d40b6ac950485111dc7ad7bd29e3f61e00d5f81dc919e8c2b3afca30f228dc05" + ], + "version": "==0.7.0a4" + }, + "py-geth": { + "hashes": [ + "sha256:1eb9c1d05b51133a6961889ec508cdcb19d24d32888704c4e034cae86a3accad", + "sha256:f3563e2de8e78599cb9c69ee5bf3bded858ac6cf59891a04177f2353c425fdb7" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==3.13.0" + }, + "py-multibase": { + "hashes": [ + "sha256:2677c1fafcc0ae15ddb9c7f444c5becc2530b3889124fd4fa2959ddfefb8c15b", + "sha256:d28a20efcbb61eec28f55827a0bf329c7cea80fffd933aecaea6ae8431267fe4" + ], + "version": "==1.0.3" + }, + "py-multicodec": { + "hashes": [ + "sha256:55b6bb53088a63e56c434cb11b29795e8805652bac43d50a8f2a9bcf5ca84e1f", + "sha256:83021ffe8c0e272d19b5b86bc5b39efa67c8e9f4735ce6cafdbc1ace767ec647" + ], + "version": "==0.2.1" + }, + "py-multihash": { + "hashes": [ + "sha256:a0602c99093587dfbf1634e2e8c7726de39374b0d68587a36093b4c237af6969", + "sha256:f0ade4de820afdc4b4aaa40464ec86c9da5cae3a4578cda2daab4b0eb7e5b18d" + ], + "version": "==0.2.3" + }, + "py-solc-x": { + "hashes": [ + "sha256:8f5caa4f54e227fc301e2e4c8aa868e869c2bc0c6636aa9e8115f8414bb891f9", + "sha256:d8b0bd2b04f47cff6e92181739d9e94e41b2d62f056900761c797fa5babc76b6" + ], + "markers": "python_version >= '3.6' and python_version < '4'", + "version": "==1.1.1" + }, + "pycodestyle": { + "hashes": [ + "sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0", + "sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8" + ], + "markers": "python_version >= '3.8'", + "version": "==2.11.0" + }, + "pycparser": { + "hashes": [ + "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", + "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + ], + "version": "==2.21" + }, + "pycryptodome": { + "hashes": [ + "sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6", + "sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810", + "sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a", + "sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db", + "sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33", + "sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5", + "sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551", + "sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa", + "sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4", + "sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405", + "sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc", + "sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997", + "sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb", + "sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e", + "sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9", + "sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f", + "sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e", + "sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34", + "sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631", + "sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c", + "sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde", + "sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7", + "sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa", + "sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0", + "sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea", + "sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e", + "sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400", + "sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270", + "sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f", + "sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1", + "sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434", + "sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49" + ], + "version": "==3.19.0" + }, + "pydantic": { + "hashes": [ + "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303", + "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe", + "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47", + "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494", + "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33", + "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86", + "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d", + "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c", + "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a", + "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565", + "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb", + "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62", + "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62", + "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0", + "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523", + "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d", + "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405", + "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f", + "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b", + "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718", + "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed", + "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb", + "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5", + "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc", + "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942", + "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe", + "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246", + "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350", + "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303", + "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09", + "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33", + "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8", + "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a", + "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1", + "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6", + "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d" + ], + "markers": "python_version >= '3.7'", + "version": "==1.10.12" + }, + "pyethash": { + "hashes": ["sha256:ff66319ce26b9d77df1f610942634dac9742e216f2c27b051c0a2c2dec9c2818"], + "version": "==0.1.27" + }, + "pyflakes": { + "hashes": [ + "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774", + "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc" + ], + "markers": "python_version >= '3.8'", + "version": "==3.1.0" + }, + "pygithub": { + "hashes": [ + "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9", + "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217" + ], + "markers": "python_version >= '3.7'", + "version": "==1.59.1" + }, + "pygments": { + "hashes": [ + "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", + "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" + ], + "markers": "python_version >= '3.7'", + "version": "==2.16.1" + }, + "pyjwt": { + "extras": ["crypto"], + "hashes": [ + "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de", + "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320" + ], + "markers": "python_version >= '3.7'", + "version": "==2.8.0" + }, + "pynacl": { + "hashes": [ + "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", + "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", + "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", + "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", + "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", + "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", + "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", + "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", + "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", + "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543" + ], + "markers": "python_version >= '3.6'", + "version": "==1.5.0" + }, + "pyproject-api": { + "hashes": [ + "sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538", + "sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675" + ], + "markers": "python_version >= '3.8'", + "version": "==1.6.1" + }, + "pysha3": { + "hashes": [ + "sha256:0060a66be16665d90c432f55a0ba1f6480590cfb7d2ad389e688a399183474f0", + "sha256:11a2ba7a2e1d9669d0052fc8fb30f5661caed5512586ecbeeaf6bf9478ab5c48", + "sha256:386998ee83e313b6911327174e088021f9f2061cbfa1651b97629b761e9ef5c4", + "sha256:41be70b06c8775a9e4d4eeb52f2f6a3f356f17539a54eac61f43a29e42fd453d", + "sha256:4416f16b0f1605c25f627966f76873e432971824778b369bd9ce1bb63d6566d9", + "sha256:571a246308a7b63f15f5aa9651f99cf30f2a6acba18eddf28f1510935968b603", + "sha256:59111c08b8f34495575d12e5f2ce3bafb98bea470bc81e70c8b6df99aef0dd2f", + "sha256:5ec8da7c5c70a53b5fa99094af3ba8d343955b212bc346a0d25f6ff75853999f", + "sha256:684cb01d87ed6ff466c135f1c83e7e4042d0fc668fa20619f581e6add1d38d77", + "sha256:68c3a60a39f9179b263d29e221c1bd6e01353178b14323c39cc70593c30f21c5", + "sha256:6e6a84efb7856f5d760ee55cd2b446972cb7b835676065f6c4f694913ea8f8d9", + "sha256:827b308dc025efe9b6b7bae36c2e09ed0118a81f792d888548188e97b9bf9a3d", + "sha256:93abd775dac570cb9951c4e423bcb2bc6303a9d1dc0dc2b7afa2dd401d195b24", + "sha256:9c778fa8b161dc9348dc5cc361e94d54aa5ff18413788f4641f6600d4893a608", + "sha256:9fdd28884c5d0b4edfed269b12badfa07f1c89dbc5c9c66dd279833894a9896b", + "sha256:c7c2adcc43836223680ebdf91f1d3373543dc32747c182c8ca2e02d1b69ce030", + "sha256:c93a2676e6588abcfaecb73eb14485c81c63b94fca2000a811a7b4fb5937b8e8", + "sha256:cd5c961b603bd2e6c2b5ef9976f3238a561c58569945d4165efb9b9383b050ef", + "sha256:f9046d59b3e72aa84f6dae83a040bd1184ebd7fef4e822d38186a8158c89e3cf", + "sha256:fd7e66999060d079e9c0e8893e78d8017dad4f59721f6fe0be6307cd32127a07", + "sha256:fe988e73f2ce6d947220624f04d467faf05f1bbdbc64b0a201296bb3af92739e" + ], + "version": "==1.0.2" + }, + "pytest": { + "hashes": [ + "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002", + "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069" + ], + "markers": "python_version >= '3.7'", + "version": "==7.4.2" + }, + "python-baseconv": { + "hashes": ["sha256:0539f8bd0464013b05ad62e0a1673f0ac9086c76b43ebf9f833053527cd9931b"], + "version": "==1.2.2" + }, + "python-dateutil": { + "hashes": [ + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==2.8.2" + }, + "pytz": { + "hashes": [ + "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b", + "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7" + ], + "version": "==2023.3.post1" + }, + "pyunormalize": { + "hashes": ["sha256:e63fdba0d85ea04579dde2fc29a072dba773dcae600b04faf6cc90714c8b1302"], + "markers": "python_version >= '3.6'", + "version": "==15.0.0" + }, + "pyyaml": { + "hashes": [ + "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", + "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", + "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", + "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", + "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", + "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", + "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", + "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", + "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", + "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", + "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", + "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", + "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", + "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", + "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", + "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", + "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", + "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", + "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", + "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", + "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", + "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", + "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", + "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", + "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", + "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", + "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", + "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", + "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", + "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", + "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", + "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", + "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", + "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", + "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", + "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", + "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", + "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", + "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", + "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", + "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", + "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", + "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", + "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", + "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", + "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", + "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", + "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", + "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", + "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" + ], + "markers": "python_version >= '3.6'", + "version": "==6.0.1" + }, + "referencing": { + "hashes": [ + "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf", + "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" + ], + "markers": "python_version >= '3.8'", + "version": "==0.30.2" + }, + "regex": { + "hashes": [ + "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf", + "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46", + "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18", + "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7", + "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7", + "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9", + "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559", + "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71", + "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280", + "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898", + "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684", + "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3", + "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9", + "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8", + "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca", + "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c", + "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c", + "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab", + "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd", + "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56", + "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586", + "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7", + "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103", + "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac", + "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177", + "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109", + "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033", + "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb", + "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61", + "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800", + "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb", + "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8", + "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570", + "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34", + "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e", + "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4", + "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb", + "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7", + "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208", + "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc", + "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb", + "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3", + "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504", + "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb", + "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57", + "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b", + "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601", + "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116", + "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8", + "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6", + "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6", + "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93", + "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09", + "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a", + "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921", + "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a", + "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495", + "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6", + "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7", + "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236", + "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235", + "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470", + "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b", + "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5", + "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61", + "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c", + "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db", + "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be", + "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96", + "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a", + "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2", + "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63", + "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef", + "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739", + "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e", + "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217", + "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90", + "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4", + "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8", + "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3", + "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357", + "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4", + "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b", + "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882", + "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a", + "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675", + "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf", + "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e" + ], + "markers": "python_version >= '3.6'", + "version": "==2023.8.8" + }, + "requests": { + "hashes": [ + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" + ], + "markers": "python_version >= '3.7'", + "version": "==2.31.0" + }, + "rich": { + "hashes": [ + "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e", + "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0" + ], + "markers": "python_full_version >= '3.6.3' and python_full_version < '4.0.0'", + "version": "==12.6.0" + }, + "rlp": { + "hashes": [ + "sha256:63b0465d2948cd9f01de449d7adfb92d207c1aef3982f20310f8009be4a507e8", + "sha256:d2a963225b3f26795c5b52310e0871df9824af56823d739511583ef459895a7d" + ], + "version": "==3.0.0" + }, + "rpds-py": { + "hashes": [ + "sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9", + "sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637", + "sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5", + "sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9", + "sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c", + "sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957", + "sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6", + "sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154", + "sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8", + "sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569", + "sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2", + "sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c", + "sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453", + "sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1", + "sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7", + "sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b", + "sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9", + "sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496", + "sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3", + "sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b", + "sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6", + "sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da", + "sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842", + "sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd", + "sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294", + "sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71", + "sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093", + "sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e", + "sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c", + "sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e", + "sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b", + "sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97", + "sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac", + "sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf", + "sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a", + "sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc", + "sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0", + "sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623", + "sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6", + "sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8", + "sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b", + "sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d", + "sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff", + "sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb", + "sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08", + "sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33", + "sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5", + "sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a", + "sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a", + "sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762", + "sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860", + "sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73", + "sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a", + "sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065", + "sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c", + "sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c", + "sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec", + "sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515", + "sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72", + "sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd", + "sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec", + "sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12", + "sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1", + "sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557", + "sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25", + "sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff", + "sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8", + "sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9", + "sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d", + "sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a", + "sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e", + "sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c", + "sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0", + "sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48", + "sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e", + "sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314", + "sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717", + "sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95", + "sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8", + "sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57", + "sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33", + "sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1", + "sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f", + "sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f", + "sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9", + "sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599", + "sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41", + "sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391", + "sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475", + "sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882", + "sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740", + "sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f", + "sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee", + "sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836", + "sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c", + "sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a", + "sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb" + ], + "markers": "python_version >= '3.8'", + "version": "==0.10.3" + }, + "semantic-version": { + "hashes": [ + "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", + "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177" + ], + "markers": "python_version >= '2.7'", + "version": "==2.10.0" + }, + "setuptools": { + "hashes": [ + "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", + "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" + ], + "markers": "python_version >= '3.8'", + "version": "==68.2.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.16.0" + }, + "sortedcontainers": { + "hashes": [ + "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", + "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" + ], + "version": "==2.4.0" + }, + "sqlalchemy": { + "hashes": [ + "sha256:014794b60d2021cc8ae0f91d4d0331fe92691ae5467a00841f7130fe877b678e", + "sha256:0268256a34806e5d1c8f7ee93277d7ea8cc8ae391f487213139018b6805aeaf6", + "sha256:05b971ab1ac2994a14c56b35eaaa91f86ba080e9ad481b20d99d77f381bb6258", + "sha256:141675dae56522126986fa4ca713739d00ed3a6f08f3c2eb92c39c6dfec463ce", + "sha256:1e7dc99b23e33c71d720c4ae37ebb095bebebbd31a24b7d99dfc4753d2803ede", + "sha256:2e617727fe4091cedb3e4409b39368f424934c7faa78171749f704b49b4bb4ce", + "sha256:3cf229704074bce31f7f47d12883afee3b0a02bb233a0ba45ddbfe542939cca4", + "sha256:3eb7c03fe1cd3255811cd4e74db1ab8dca22074d50cd8937edf4ef62d758cdf4", + "sha256:3f7d57a7e140efe69ce2d7b057c3f9a595f98d0bbdfc23fd055efdfbaa46e3a5", + "sha256:419b1276b55925b5ac9b4c7044e999f1787c69761a3c9756dec6e5c225ceca01", + "sha256:44ac5c89b6896f4740e7091f4a0ff2e62881da80c239dd9408f84f75a293dae9", + "sha256:4615623a490e46be85fbaa6335f35cf80e61df0783240afe7d4f544778c315a9", + "sha256:50a69067af86ec7f11a8e50ba85544657b1477aabf64fa447fd3736b5a0a4f67", + "sha256:513fd5b6513d37e985eb5b7ed89da5fd9e72354e3523980ef00d439bc549c9e9", + "sha256:6ff3dc2f60dbf82c9e599c2915db1526d65415be323464f84de8db3e361ba5b9", + "sha256:73c079e21d10ff2be54a4699f55865d4b275fd6c8bd5d90c5b1ef78ae0197301", + "sha256:7614f1eab4336df7dd6bee05bc974f2b02c38d3d0c78060c5faa4cd1ca2af3b8", + "sha256:785e2f2c1cb50d0a44e2cdeea5fd36b5bf2d79c481c10f3a88a8be4cfa2c4615", + "sha256:7ca38746eac23dd7c20bec9278d2058c7ad662b2f1576e4c3dbfcd7c00cc48fa", + "sha256:7f0c4ee579acfe6c994637527c386d1c22eb60bc1c1d36d940d8477e482095d4", + "sha256:87bf91ebf15258c4701d71dcdd9c4ba39521fb6a37379ea68088ce8cd869b446", + "sha256:89e274604abb1a7fd5c14867a412c9d49c08ccf6ce3e1e04fffc068b5b6499d4", + "sha256:8c323813963b2503e54d0944813cd479c10c636e3ee223bcbd7bd478bf53c178", + "sha256:a95aa0672e3065d43c8aa80080cdd5cc40fe92dc873749e6c1cf23914c4b83af", + "sha256:af520a730d523eab77d754f5cf44cc7dd7ad2d54907adeb3233177eeb22f271b", + "sha256:b19ae41ef26c01a987e49e37c77b9ad060c59f94d3b3efdfdbf4f3daaca7b5fe", + "sha256:b4eae01faee9f2b17f08885e3f047153ae0416648f8e8c8bd9bc677c5ce64be9", + "sha256:b69f1f754d92eb1cc6b50938359dead36b96a1dcf11a8670bff65fd9b21a4b09", + "sha256:b977bfce15afa53d9cf6a632482d7968477625f030d86a109f7bdfe8ce3c064a", + "sha256:bf8eebccc66829010f06fbd2b80095d7872991bfe8415098b9fe47deaaa58063", + "sha256:c111cd40910ffcb615b33605fc8f8e22146aeb7933d06569ac90f219818345ef", + "sha256:c2d494b6a2a2d05fb99f01b84cc9af9f5f93bf3e1e5dbdafe4bed0c2823584c1", + "sha256:c9cba4e7369de663611ce7460a34be48e999e0bbb1feb9130070f0685e9a6b66", + "sha256:cca720d05389ab1a5877ff05af96551e58ba65e8dc65582d849ac83ddde3e231", + "sha256:ccb99c3138c9bde118b51a289d90096a3791658da9aea1754667302ed6564f6e", + "sha256:d59cb9e20d79686aa473e0302e4a82882d7118744d30bb1dfb62d3c47141b3ec", + "sha256:e36339a68126ffb708dc6d1948161cea2a9e85d7d7b0c54f6999853d70d44430", + "sha256:ea7da25ee458d8f404b93eb073116156fd7d8c2a776d8311534851f28277b4ce", + "sha256:f9fefd6298433b6e9188252f3bff53b9ff0443c8fde27298b8a2b19f6617eeb9", + "sha256:fb87f763b5d04a82ae84ccff25554ffd903baafba6698e18ebaf32561f2fe4aa", + "sha256:fc6b15465fabccc94bf7e38777d665b6a4f95efd1725049d6184b3a39fd54880" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.21" + }, + "stack-data": { + "hashes": [ + "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815", + "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8" + ], + "version": "==0.6.2" + }, + "tomli": { + "hashes": [ + "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", + "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" + ], + "markers": "python_version < '3.11'", + "version": "==2.0.1" + }, + "toolz": { + "hashes": [ + "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f", + "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194" + ], + "markers": "python_version >= '3.5'", + "version": "==0.12.0" + }, + "tox": { + "hashes": [ + "sha256:5039f68276461fae6a9452a3b2c7295798f00a0e92edcd9a3b78ba1a73577951", + "sha256:599af5e5bb0cad0148ac1558a0b66f8fff219ef88363483b8d92a81e4246f28f" + ], + "index": "pypi", + "version": "==4.11.3" + }, + "tqdm": { + "hashes": [ + "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386", + "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7" + ], + "markers": "python_version >= '3.7'", + "version": "==4.66.1" + }, + "traitlets": { + "hashes": [ + "sha256:417745a96681fbb358e723d5346a547521f36e9bd0d50ba7ab368fff5d67aa54", + "sha256:f584ea209240466e66e91f3c81aa7d004ba4cf794990b0c775938a1544217cd1" + ], + "markers": "python_version >= '3.8'", + "version": "==5.10.0" + }, + "trie": { + "hashes": [ + "sha256:1c7fa6f4a3088e083764cf4e32a07a69c672fcf15ad922e03f51158d64a855cf", + "sha256:c1a5fc17b37a75008a4517e4f297ad8026dce777eb0eed63ee6335c66d7437b7" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.1.1" + }, + "typing-extensions": { + "hashes": [ + "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", + "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" + ], + "markers": "python_version < '3.11'", + "version": "==4.8.0" + }, + "urllib3": { + "hashes": [ + "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11", + "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.4" + }, + "varint": { + "hashes": ["sha256:a6ecc02377ac5ee9d65a6a8ad45c9ff1dac8ccee19400a5950fb51d594214ca5"], + "version": "==1.0.2" + }, + "virtualenv": { + "hashes": [ + "sha256:b80039f280f4919c77b30f1c23294ae357c4c8701042086e3fc005963e4e537b", + "sha256:e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752" + ], + "markers": "python_version >= '3.7'", + "version": "==20.24.5" + }, + "watchdog": { + "hashes": [ + "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a", + "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100", + "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8", + "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc", + "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae", + "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41", + "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0", + "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f", + "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c", + "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9", + "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3", + "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709", + "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83", + "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759", + "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9", + "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3", + "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7", + "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f", + "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346", + "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674", + "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397", + "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96", + "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d", + "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a", + "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64", + "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44", + "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33" + ], + "markers": "python_version >= '3.7'", + "version": "==3.0.0" + }, + "wcwidth": { + "hashes": [ + "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", + "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" + ], + "version": "==0.2.6" + }, + "web3": { + "extras": ["tester"], + "hashes": [ + "sha256:3bc95043ee9fc6ee0b13a4766d4975b9f7cae069db136430a3799ed18743e608", + "sha256:cb454d0180e63ba1d83143dccf7c623581ba58e222edb006f48252d8a7b948e0" + ], + "markers": "python_full_version >= '3.7.2'", + "version": "==6.9.0" + }, + "websockets": { + "hashes": [ + "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd", + "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f", + "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998", + "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82", + "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788", + "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa", + "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f", + "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4", + "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7", + "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f", + "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd", + "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69", + "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb", + "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b", + "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016", + "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac", + "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4", + "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb", + "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99", + "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e", + "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54", + "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf", + "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007", + "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3", + "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6", + "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86", + "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1", + "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61", + "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11", + "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8", + "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f", + "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931", + "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526", + "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016", + "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae", + "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd", + "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b", + "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311", + "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af", + "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152", + "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288", + "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de", + "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97", + "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d", + "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d", + "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca", + "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0", + "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9", + "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b", + "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e", + "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128", + "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d", + "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c", + "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5", + "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6", + "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b", + "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b", + "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280", + "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c", + "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c", + "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f", + "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20", + "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8", + "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb", + "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602", + "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf", + "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0", + "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74", + "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0", + "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564" + ], + "markers": "python_version >= '3.7'", + "version": "==11.0.3" + }, + "wrapt": { + "hashes": [ + "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", + "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", + "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", + "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", + "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", + "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", + "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", + "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", + "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", + "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", + "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", + "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", + "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", + "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", + "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", + "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", + "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", + "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", + "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", + "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", + "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", + "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", + "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", + "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", + "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", + "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", + "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", + "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", + "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", + "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", + "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", + "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", + "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", + "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", + "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", + "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", + "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", + "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", + "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", + "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", + "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", + "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", + "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", + "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", + "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", + "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", + "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", + "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", + "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", + "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", + "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", + "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", + "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", + "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", + "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", + "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", + "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", + "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", + "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", + "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", + "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", + "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", + "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", + "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", + "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", + "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", + "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", + "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", + "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", + "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", + "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", + "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", + "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", + "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", + "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.15.0" + }, + "yarl": { + "hashes": [ + "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571", + "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3", + "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3", + "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c", + "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7", + "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04", + "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191", + "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea", + "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4", + "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4", + "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095", + "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e", + "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74", + "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef", + "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33", + "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde", + "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45", + "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf", + "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b", + "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac", + "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0", + "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528", + "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716", + "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb", + "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18", + "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72", + "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6", + "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582", + "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5", + "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368", + "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc", + "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9", + "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be", + "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a", + "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80", + "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8", + "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6", + "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417", + "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574", + "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59", + "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608", + "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82", + "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1", + "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3", + "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d", + "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8", + "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc", + "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac", + "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8", + "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955", + "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0", + "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367", + "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb", + "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a", + "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623", + "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2", + "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6", + "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7", + "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4", + "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051", + "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938", + "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8", + "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9", + "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3", + "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5", + "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9", + "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333", + "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185", + "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3", + "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560", + "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b", + "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7", + "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78", + "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7" + ], + "markers": "python_version >= '3.7'", + "version": "==1.9.2" + }, + "zipp": { + "hashes": [ + "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", + "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + ], + "markers": "python_version >= '3.8'", + "version": "==3.17.0" + } + }, + "develop": {} } diff --git a/requirements.txt b/requirements.txt index 29f15ef8..5917a1bf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,141 +1,144 @@ -i https://pypi.org/simple -aiohttp==3.8.4 ; python_version >= '3.6' +aiohttp==3.8.5 ; python_version >= '3.6' aiosignal==1.3.1 ; python_version >= '3.7' -ape-solidity==0.6.8 +ape-etherscan==0.6.10 +ape-polygon==0.6.5 +ape-solidity==0.6.9 appnope==0.1.3 ; sys_platform == 'darwin' asn1crypto==1.5.1 -asttokens==2.2.1 -async-timeout==4.0.2 ; python_version >= '3.6' +asttokens==2.4.0 +async-timeout==4.0.3 ; python_version >= '3.7' attrs==23.1.0 ; python_version >= '3.7' backcall==0.2.0 base58==1.0.3 -bitarray==2.7.3 -black==23.3.0 +bitarray==2.8.1 +black==23.9.1 cached-property==1.5.2 -cachetools==5.3.0 ; python_version ~= '3.7' -certifi==2023.5.7 ; python_version >= '3.6' +cachetools==5.3.1 ; python_version >= '3.7' +certifi==2023.7.22 ; python_version >= '3.6' cffi==1.15.1 -cfgv==3.3.1 ; python_full_version >= '3.6.1' -chardet==5.1.0 ; python_version >= '3.7' -charset-normalizer==3.1.0 ; python_full_version >= '3.7.0' -click==8.1.6 ; python_version >= '3.7' +cfgv==3.4.0 ; python_version >= '3.8' +chardet==5.2.0 ; python_version >= '3.7' +charset-normalizer==3.2.0 ; python_full_version >= '3.7.0' +click==8.1.7 ; python_version >= '3.7' coincurve==18.0.0 colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' commonmark==0.9.1 -cryptography==40.0.2 -cytoolz==0.12.1 ; implementation_name == 'cpython' +cryptography==41.0.3 +cytoolz==0.12.2 ; implementation_name == 'cpython' dataclassy==0.11.1 ; python_version >= '3.6' decorator==5.1.1 ; python_version >= '3.5' -deprecated==1.2.13 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -distlib==0.3.6 +deprecated==1.2.14 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' +distlib==0.3.7 eip712==0.2.1 ; python_version >= '3.8' and python_version < '4' -eth-abi==4.1.0 ; python_version >= '3.7' and python_version < '4' +eth-abi==4.2.1 ; python_full_version >= '3.7.2' and python_version < '4' eth-account==0.8.0 ; python_version >= '3.6' and python_version < '4' eth-ape==0.6.19 eth-bloom==2.0.0 ; python_version >= '3.7' and python_version < '4' -eth-hash[pycryptodome]==0.5.1 ; python_version >= '3.7' and python_version < '4' +eth-hash[pycryptodome]==0.5.2 ; python_version >= '3.7' and python_version < '4' eth-keyfile==0.6.1 eth-keys==0.4.0 eth-rlp==0.3.0 ; python_version >= '3.7' and python_version < '4' eth-tester[py-evm]==0.9.1b1 eth-typing==3.4.0 ; python_full_version >= '3.7.2' and python_version < '4' -eth-utils==2.2.0 ; python_version >= '3.7' and python_version < '4' -ethpm-types==0.5.4 ; python_version >= '3.8' and python_version < '4' -evm-trace==0.1.0a23 ; python_version >= '3.8' and python_version < '4' -exceptiongroup==1.1.1 ; python_version < '3.11' +eth-utils==2.2.1 ; python_version >= '3.7' and python_version < '4' +ethpm-types==0.5.6 ; python_version >= '3.8' and python_version < '4' +evm-trace==0.1.0a24 ; python_version >= '3.8' and python_version < '4' +exceptiongroup==1.1.3 ; python_version < '3.11' executing==1.2.0 -filelock==3.12.0 ; python_version >= '3.7' -flake8==6.0.0 -frozenlist==1.3.3 ; python_version >= '3.7' -hexbytes==0.3.0 ; python_version >= '3.7' and python_version < '4' -identify==2.5.24 ; python_version >= '3.7' +filelock==3.12.4 ; python_version >= '3.8' +flake8==6.1.0 +frozenlist==1.4.0 ; python_version >= '3.8' +hexbytes==0.3.1 ; python_version >= '3.7' and python_version < '4' +identify==2.5.29 ; python_version >= '3.8' idna==3.4 ; python_version >= '3.5' -ijson==3.2.0.post0 -importlib-metadata==6.6.0 ; python_version >= '3.7' -importlib-resources==5.12.0 ; python_version < '3.9' +ijson==3.2.3 +importlib-metadata==6.8.0 ; python_version >= '3.8' +importlib-resources==6.0.1 ; python_version < '3.9' iniconfig==2.0.0 ; python_version >= '3.7' ipython==8.12.2 ; python_version >= '3.8' isort==6.0.0b2 -jedi==0.18.2 ; python_version >= '3.6' -jsonschema==4.18.0a7 ; python_version >= '3.8' -jsonschema-specifications==2023.5.1 ; python_version >= '3.8' +jedi==0.19.0 ; python_version >= '3.6' +jsonschema==4.19.0 ; python_version >= '3.8' +jsonschema-specifications==2023.7.1 ; python_version >= '3.8' lazyasd==0.1.4 -lru-dict==1.1.8 +lru-dict==1.2.0 matplotlib-inline==0.1.6 ; python_version >= '3.5' mccabe==0.7.0 ; python_version >= '3.6' morphys==1.0 -msgspec==0.15.1 ; python_version >= '3.8' +msgspec==0.18.2 ; python_version >= '3.8' multidict==6.0.4 ; python_version >= '3.7' -mypy-extensions==1.0.0 ; python_version >= '2.7' +mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' -nucypher-core==0.8.0 -numpy==1.24.3 ; python_version < '3.10' +nucypher-core==0.13.0 +numpy==1.24.4 ; python_version < '3.10' packaging==23.1 ; python_version >= '3.7' pandas==1.5.3 ; python_version >= '3.8' parsimonious==0.9.0 parso==0.8.3 ; python_version >= '3.6' -pathspec==0.11.1 ; python_version >= '3.7' +pathspec==0.11.2 ; python_version >= '3.7' pexpect==4.8.0 ; sys_platform != 'win32' pickleshare==0.7.5 pkgutil-resolve-name==1.3.10 ; python_version < '3.9' -platformdirs==3.5.1 ; python_version >= '3.7' -pluggy==1.3.0 ; python_version >= '3.6' -pre-commit==3.3.2 -prompt-toolkit==3.0.38 ; python_full_version >= '3.7.0' -protobuf==4.23.1 ; python_version >= '3.7' +platformdirs==3.10.0 ; python_version >= '3.7' +pluggy==1.3.0 ; python_version >= '3.8' +pre-commit==3.4.0 +prompt-toolkit==3.0.39 ; python_full_version >= '3.7.0' +protobuf==4.24.3 ; python_version >= '3.7' ptyprocess==0.7.0 pure-eval==0.2.2 py-cid==0.3.0 py-ecc==6.0.0 ; python_version >= '3.6' and python_version < '4' py-evm==0.7.0a4 -py-geth==3.13.0 ; python_version >= '3' +py-geth==3.13.0 ; python_version >= '3.7' and python_version < '4' py-multibase==1.0.3 py-multicodec==0.2.1 py-multihash==0.2.3 py-solc-x==1.1.1 ; python_version >= '3.6' and python_version < '4' -pycodestyle==2.10.0 ; python_version >= '3.6' +pycodestyle==2.11.0 ; python_version >= '3.8' pycparser==2.21 -pycryptodome==3.18.0 -pydantic==1.10.8 ; python_version >= '3.7' +pycryptodome==3.19.0 +pydantic==1.10.12 ; python_version >= '3.7' pyethash==0.1.27 -pyflakes==3.0.1 ; python_version >= '3.6' -pygithub==1.59.0 ; python_version >= '3.7' -pygments==2.15.1 ; python_version >= '3.7' -pyjwt[crypto]==2.7.0 ; python_version >= '3.7' +pyflakes==3.1.0 ; python_version >= '3.8' +pygithub==1.59.1 ; python_version >= '3.7' +pygments==2.16.1 ; python_version >= '3.7' +pyjwt[crypto]==2.8.0 ; python_version >= '3.7' pynacl==1.5.0 ; python_version >= '3.6' -pyproject-api==1.5.1 ; python_version >= '3.7' +pyproject-api==1.6.1 ; python_version >= '3.8' pysha3==1.0.2 -pytest==7.3.1 ; python_version >= '3.7' +pytest==7.4.2 ; python_version >= '3.7' python-baseconv==1.2.2 python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' -pytz==2023.3 -pyyaml==6.0 ; python_version >= '3.6' -referencing==0.28.3 ; python_version >= '3.8' -regex==2023.5.5 ; python_version >= '3.6' +pytz==2023.3.post1 +pyunormalize==15.0.0 ; python_version >= '3.6' +pyyaml==6.0.1 ; python_version >= '3.6' +referencing==0.30.2 ; python_version >= '3.8' +regex==2023.8.8 ; python_version >= '3.6' requests==2.31.0 ; python_version >= '3.7' rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 -rpds-py==0.7.1 ; python_version >= '3.8' +rpds-py==0.10.3 ; python_version >= '3.8' semantic-version==2.10.0 ; python_version >= '2.7' -setuptools==67.8.0 ; python_version >= '3.7' +setuptools==68.2.2 ; python_version >= '3.8' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' sortedcontainers==2.4.0 -sqlalchemy==2.0.15 ; python_version >= '3.7' +sqlalchemy==2.0.21 ; python_version >= '3.7' stack-data==0.6.2 tomli==2.0.1 ; python_version < '3.11' toolz==0.12.0 ; python_version >= '3.5' -tox==4.5.1 -tqdm==4.65.0 ; python_version >= '3.7' -traitlets==5.9.0 ; python_version >= '3.7' -trie==2.1.0 ; python_version >= '3.7' and python_version < '4' -typing-extensions==4.5.0 ; python_version < '3.10' -urllib3==2.0.2 ; python_version >= '3.7' +tox==4.11.3 +tqdm==4.66.1 ; python_version >= '3.7' +traitlets==5.10.0 ; python_version >= '3.8' +trie==2.1.1 ; python_version >= '3.7' and python_version < '4' +typing-extensions==4.8.0 ; python_version < '3.11' +urllib3==2.0.4 ; python_version >= '3.7' varint==1.0.2 -virtualenv==20.23.0 ; python_version >= '3.7' -watchdog==3.0.0 ; python_version >= '3.6' +virtualenv==20.24.5 ; python_version >= '3.7' +watchdog==3.0.0 ; python_version >= '3.7' wcwidth==0.2.6 -web3[tester]==6.7.0 ; python_full_version >= '3.7.2' +web3[tester]==6.9.0 ; python_full_version >= '3.7.2' websockets==11.0.3 ; python_version >= '3.7' wrapt==1.15.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' yarl==1.9.2 ; python_version >= '3.7' -zipp==3.15.0 ; python_version >= '3.7' +zipp==3.17.0 ; python_version >= '3.8' From a52550c186a83ce6167b44843eb37058c8370b24 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 19 Sep 2023 12:51:52 -0400 Subject: [PATCH 005/112] Generate registry from ape deployments. Derive json configuration file to provide constructor params to contracts for deployment scripts. --- scripts/testnet/lynx_config.json | 17 +++++++++++++ tox.ini | 8 +++--- utils/__init__.py | 0 utils/deployment.py | 42 ++++++++++++++++++++++++++++++++ utils/registry.py | 30 +++++++++++++++++++++++ 5 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 scripts/testnet/lynx_config.json create mode 100644 utils/__init__.py create mode 100644 utils/deployment.py create mode 100644 utils/registry.py diff --git a/scripts/testnet/lynx_config.json b/scripts/testnet/lynx_config.json new file mode 100644 index 00000000..4667892c --- /dev/null +++ b/scripts/testnet/lynx_config.json @@ -0,0 +1,17 @@ +{ + "LynxRootApplication": {}, + "LynxTACoChildApplication": { + "_rootApplication": "$LynxRootApplication" + }, + "LynxRitualToken": { + "_totalSupplyOfTokens": 10000000000000000000000000 + }, + "Coordinator": { + "_application": "$LynxTACoChildApplication", + "_timeout": 3600, + "_maxDkgSize": 4, + "_admin": "0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600", + "_currency": "$LynxRitualToken", + "_feeRatePerSecond": 1 + } +} diff --git a/tox.ini b/tox.ini index e327d594..e5c8881e 100644 --- a/tox.ini +++ b/tox.ini @@ -13,14 +13,14 @@ passenv = GITHUB_TOKEN WEB3_INFURA_PROJECT_ID deps = -r{toxinidir}/requirements.txt -basepython=python3 +basepython=python3` [testenv:lint] extras=linter commands = - black --check {toxinidir}/scripts {toxinidir}/tests - flake8 {toxinidir}/scripts {toxinidir}/tests - isort --check-only --diff --recursive {toxinidir}/scripts {toxinidir}/tests + black --check {toxinidir}/scripts {toxinidir}/tests {toxinidir}/utils + flake8 {toxinidir}/scripts {toxinidir}/tests {toxinidir}/utils + isort --check-only --diff --recursive {toxinidir}/scripts {toxinidir}/tests {toxinidir}/utils [testenv:tests] commands = diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/utils/deployment.py b/utils/deployment.py new file mode 100644 index 00000000..13581846 --- /dev/null +++ b/utils/deployment.py @@ -0,0 +1,42 @@ +import json +import typing +from collections import OrderedDict +from pathlib import Path +from typing import Any, List + +VARIABLE_PREFIX = "$" + + +class DeploymentConfigError(ValueError): + pass + + +def read_deployment_config(config_filepath: Path) -> typing.OrderedDict[str, Any]: + with open(config_filepath, "r") as config_file: + config = json.load(config_file) + return OrderedDict(config) + + +def is_variable(param: Any): + return isinstance(param, str) and param.startswith(VARIABLE_PREFIX) + + +def _validate_param(param: Any, contracts: List[str]): + if not is_variable(param): + return + + variable = param.strip(VARIABLE_PREFIX) + if variable not in contracts: + raise DeploymentConfigError(f"Variable {param} is not resolvable") + + +def validate_deployment_config(config: typing.OrderedDict[str, Any]): + available_contracts = list(config.keys()) + + for contract, parameters in config.items(): + for name, value in parameters.items(): + if isinstance(value, list): + for param in value: + _validate_param(param, available_contracts) + else: + _validate_param(value, available_contracts) diff --git a/utils/registry.py b/utils/registry.py new file mode 100644 index 00000000..6a3e171a --- /dev/null +++ b/utils/registry.py @@ -0,0 +1,30 @@ +import json +from pathlib import Path +from typing import List + +from ape.contracts import ContractInstance +from eth_utils import to_checksum_address + + +def registry_from_ape_deployments( + deployments: List[ContractInstance], + output_filepath: Path, +): + """Creates a registry from ape deployments.""" + registry_data = list() + + for contract_instance in deployments: + abi_json_list = [] + for entry in contract_instance.contract_type.abi: + abi_json_list.append(entry.dict()) + + entry = [ + contract_instance.contract_type.name, + "v0.0.0", # TODO: get version from contract + to_checksum_address(contract_instance.address), + abi_json_list, + ] + registry_data.append(entry) + + with open(output_filepath, "w") as registry_file: + registry_file.write(json.dumps(registry_data)) From 6e9cd69e114b554ca1f0d06ea3617749294992f6 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 19 Sep 2023 12:57:25 -0400 Subject: [PATCH 006/112] Generate registry from lynx deployment and output to a file. --- scripts/testnet/deploy_lynx.py | 50 ++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/scripts/testnet/deploy_lynx.py b/scripts/testnet/deploy_lynx.py index 1989b288..9c3a0a05 100644 --- a/scripts/testnet/deploy_lynx.py +++ b/scripts/testnet/deploy_lynx.py @@ -1,12 +1,20 @@ #!/usr/bin/python3 import os +from pathlib import Path +import utils from ape import project from ape.cli import get_user_selected_account +from utils.registry import registry_from_ape_deployments from web3 import Web3 PUBLISH = False +# TODO cleanup; uniqueness, existence etc. +DEPLOYMENT_REGISTRY_FILEPATH = ( + Path(utils.__file__).parent / "artifacts" / "lynx_testnet_registry.json" +) + def main(): """ @@ -14,13 +22,13 @@ def main(): Lynx TACo Child Application, Lynx Ritual Token, and Lynx Coordinator. September 18, 2023, Goerli Deployment: - ape run testnet deploy_lynx --network ethereum:goerli:https://goerli.infura.io/v3/ + ape run testnet deploy_lynx --network ethereum:goerli: 'LynxRootApplication' deployed to: 0x39F1061d68540F7eb57545C4C731E0945c167016 'LynxTACoChildApplication' deployed to: 0x892a548592bA66dc3860F75d76cDDb488a838c35 'Coordinator' deployed to: 0x18566d4590be23e4cb0a8476C80C22096C8c3418 September 18, 2023, Mumbai Deployment: - ape run testnet deploy_lynx --network polygon:mumbai:https://polygon-mumbai.infura.io/v3/ + ape run testnet deploy_lynx --network polygon:mumbai: 'LynxRootApplication' deployed to: 0xb6400F55857716A3Ff863e6bE867F01F23C71793 'LynxTACoChildApplication' deployed to: 0x3593f90b19F148FCbe7B00201f854d8839F33F86 'Coordinator' deployed to: 0x4077ad1CFA834aEd68765dB0Cf3d14701a970a9a @@ -38,47 +46,43 @@ def main(): deployer = get_user_selected_account() # Lynx TACo Root Application - taco_app = deployer.deploy( - project.LynxRootApplication, - publish=PUBLISH - ) + LynxRootApplication = deployer.deploy(project.LynxRootApplication, publish=PUBLISH) # Lynx TACo Child Application - taco_child_app = deployer.deploy( + LynxTACoChildApplication = deployer.deploy( project.LynxTACoChildApplication, - taco_app.address, + LynxRootApplication.address, publish=PUBLISH, ) - taco_app.setChildApplication( - taco_child_app.address, + LynxRootApplication.setChildApplication( + LynxTACoChildApplication.address, sender=deployer, publish=PUBLISH, ) # Lynx Ritual Token - ritual_token = deployer.deploy( - project.LynxRitualToken, - Web3.to_wei( - 10_000_000, - "ether" - ), - publish=PUBLISH + LynxRitualToken = deployer.deploy( + project.LynxRitualToken, Web3.to_wei(10_000_000, "ether"), publish=PUBLISH ) # Lynx Coordinator - coordinator = deployer.deploy( + Coordinator = deployer.deploy( project.Coordinator, # coordinator - taco_child_app.address, # root_app + LynxTACoChildApplication.address, # root_app 3600, # timeout (seconds) 4, # max_dkg_size deployer.address, # admin - ritual_token.address, # currency + LynxRitualToken.address, # currency 1, # fee_rate (wei per second) publish=PUBLISH, ) - taco_child_app.setCoordinator( - coordinator.address, - sender=deployer + LynxTACoChildApplication.setCoordinator(Coordinator.address, sender=deployer) + + # list deployments + deployments = [LynxRootApplication, LynxTACoChildApplication, LynxRitualToken, Coordinator] + + registry_from_ape_deployments( + deployments=deployments, output_filepath=DEPLOYMENT_REGISTRY_FILEPATH ) From bc094a3726e281c8412ae6914527e67fec8aae90 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 19 Sep 2023 13:36:01 -0400 Subject: [PATCH 007/112] Process deployment configuration file with contract variables in it. Co-authored-by: Kieran Prasch --- utils/deployment.py | 54 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/utils/deployment.py b/utils/deployment.py index 13581846..4aa98a82 100644 --- a/utils/deployment.py +++ b/utils/deployment.py @@ -4,6 +4,8 @@ from pathlib import Path from typing import Any, List +from ape.contracts.base import ContractContainer + VARIABLE_PREFIX = "$" @@ -11,12 +13,6 @@ class DeploymentConfigError(ValueError): pass -def read_deployment_config(config_filepath: Path) -> typing.OrderedDict[str, Any]: - with open(config_filepath, "r") as config_file: - config = json.load(config_file) - return OrderedDict(config) - - def is_variable(param: Any): return isinstance(param, str) and param.startswith(VARIABLE_PREFIX) @@ -40,3 +36,49 @@ def validate_deployment_config(config: typing.OrderedDict[str, Any]): _validate_param(param, available_contracts) else: _validate_param(value, available_contracts) + + +class ConstructorParams: + def __init__(self, constructor_values: OrderedDict): + self.params = constructor_values + + def _resolve(self, value: Any, context: typing.Dict[str, Any]) -> Any: + if not is_variable(value): + return value + + variable = value.strip(VARIABLE_PREFIX) + contract_instance = context[variable] + return contract_instance.address + + def get_params( + self, container: ContractContainer, context: typing.Dict[str, Any], interactive: bool = True + ) -> List[Any]: + contract_name = container.contract_type.name + contract_parameters = self.params[contract_name] + resolved_params = OrderedDict() + for name, value in contract_parameters: + if isinstance(value, list): + param_value_list = [] + for item in value: + param_value_list.append(self._resolve(item, context)) + resolved_params[name] = param_value_list + else: + resolved_params[name] = self._resolve(value, context) + + if interactive: + print(f"Resolved constructor parameters for {contract_name}") + for name, resolved_value in resolved_params: + print(f"\t{name}={resolved_value}") + answer = input("Continue Y/N? ") + if answer.lower().strip() == "n": + print("Aborting deployment!") + exit(-1) + + return list(resolved_params.values()) + + @classmethod + def from_file(cls, config_filepath: Path) -> "ConstructorParams": + with open(config_filepath, "r") as config_file: + config = OrderedDict(json.load(config_file)) + + return cls(config) From fdb4b086ad00a34ad0b6342a1540d6d6400922d4 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 19 Sep 2023 21:37:39 +0200 Subject: [PATCH 008/112] Further extracts helper functionality for deployment utils --- utils/deployment.py | 101 +++++++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 38 deletions(-) diff --git a/utils/deployment.py b/utils/deployment.py index 4aa98a82..10468547 100644 --- a/utils/deployment.py +++ b/utils/deployment.py @@ -13,22 +13,50 @@ class DeploymentConfigError(ValueError): pass -def is_variable(param: Any): +def is_variable(param: Any) -> bool: return isinstance(param, str) and param.startswith(VARIABLE_PREFIX) -def _validate_param(param: Any, contracts: List[str]): +def _resolve_param(value: Any, context: typing.Dict[str, Any]) -> Any: + if not is_variable(value): + return value + variable = value.strip(VARIABLE_PREFIX) + contract_instance = context[variable] + return contract_instance.address + + +def _resolve_parameters( + parameters: OrderedDict, + context: typing.Dict[str, Any] +) -> OrderedDict: + resolved_params = OrderedDict() + for name, value in parameters.items(): + if isinstance(value, list): + param_value_list = list() + for item in value: + param = _resolve_param(item, context) + param_value_list.append(param) + resolved_params[name] = param_value_list + else: + resolved_params[name] = _resolve_param(value, context) + return resolved_params + + +def _validate_param( + param: Any, + contracts: List[str] +) -> None: if not is_variable(param): return - variable = param.strip(VARIABLE_PREFIX) if variable not in contracts: raise DeploymentConfigError(f"Variable {param} is not resolvable") -def validate_deployment_config(config: typing.OrderedDict[str, Any]): +def validate_deployment_config( + config: typing.OrderedDict[str, Any] +) -> None: available_contracts = list(config.keys()) - for contract, parameters in config.items(): for name, value in parameters.items(): if isinstance(value, list): @@ -38,47 +66,44 @@ def validate_deployment_config(config: typing.OrderedDict[str, Any]): _validate_param(value, available_contracts) +def _confirm_resolution( + resolved_params: OrderedDict, + contract_name: str +) -> None: + print(f"Resolved constructor parameters for {contract_name}") + for name, resolved_value in resolved_params: + print(f"\t{name}={resolved_value}") + answer = input("Continue Y/N? ") + if answer.lower().strip() == "n": + print("Aborting deployment!") + exit(-1) + + class ConstructorParams: def __init__(self, constructor_values: OrderedDict): self.params = constructor_values - def _resolve(self, value: Any, context: typing.Dict[str, Any]) -> Any: - if not is_variable(value): - return value - - variable = value.strip(VARIABLE_PREFIX) - contract_instance = context[variable] - return contract_instance.address + @classmethod + def from_file(cls, config_filepath: Path) -> "ConstructorParams": + with open(config_filepath, "r") as config_file: + config = OrderedDict(json.load(config_file)) + return cls(config) def get_params( - self, container: ContractContainer, context: typing.Dict[str, Any], interactive: bool = True + self, + container: ContractContainer, + context: typing.Dict[str, Any], + interactive: bool = True ) -> List[Any]: contract_name = container.contract_type.name contract_parameters = self.params[contract_name] - resolved_params = OrderedDict() - for name, value in contract_parameters: - if isinstance(value, list): - param_value_list = [] - for item in value: - param_value_list.append(self._resolve(item, context)) - resolved_params[name] = param_value_list - else: - resolved_params[name] = self._resolve(value, context) - + resolved_params = _resolve_parameters( + contract_parameters, + context, + ) if interactive: - print(f"Resolved constructor parameters for {contract_name}") - for name, resolved_value in resolved_params: - print(f"\t{name}={resolved_value}") - answer = input("Continue Y/N? ") - if answer.lower().strip() == "n": - print("Aborting deployment!") - exit(-1) - + _confirm_resolution( + resolved_params, + contract_name + ) return list(resolved_params.values()) - - @classmethod - def from_file(cls, config_filepath: Path) -> "ConstructorParams": - with open(config_filepath, "r") as config_file: - config = OrderedDict(json.load(config_file)) - - return cls(config) From 88d80cb5d758113913a79015bfe3f29d0f6a04d1 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 19 Sep 2023 21:38:46 +0200 Subject: [PATCH 009/112] intermediate commit for constructor parms usage in lynx script --- scripts/testnet/deploy_lynx.py | 62 +++++++++++++++------------------- 1 file changed, 27 insertions(+), 35 deletions(-) diff --git a/scripts/testnet/deploy_lynx.py b/scripts/testnet/deploy_lynx.py index 9c3a0a05..bd6891ea 100644 --- a/scripts/testnet/deploy_lynx.py +++ b/scripts/testnet/deploy_lynx.py @@ -1,19 +1,16 @@ #!/usr/bin/python3 -import os from pathlib import Path -import utils from ape import project from ape.cli import get_user_selected_account + +from utils.deployment import ConstructorParams from utils.registry import registry_from_ape_deployments -from web3 import Web3 +from utils.misc import check_etherscan_plugin PUBLISH = False - -# TODO cleanup; uniqueness, existence etc. -DEPLOYMENT_REGISTRY_FILEPATH = ( - Path(utils.__file__).parent / "artifacts" / "lynx_testnet_registry.json" -) +CONSTRUCTOR_PARAMS_FILEPATH = Path('') +DEPLOYMENT_REGISTRY_FILEPATH = Path("lynx_testnet_registry.json") # TODO: move to artifacts and make unique def main(): @@ -32,26 +29,19 @@ def main(): 'LynxRootApplication' deployed to: 0xb6400F55857716A3Ff863e6bE867F01F23C71793 'LynxTACoChildApplication' deployed to: 0x3593f90b19F148FCbe7B00201f854d8839F33F86 'Coordinator' deployed to: 0x4077ad1CFA834aEd68765dB0Cf3d14701a970a9a - - """ - try: - import ape_etherscan # noqa: F401 - except ImportError: - raise ImportError("Please install the ape-etherscan plugin to use this script.") - if not os.environ.get("ETHERSCAN_API_KEY"): - raise ValueError("ETHERSCAN_API_KEY is not set.") - + check_etherscan_plugin() deployer = get_user_selected_account() + config = ConstructorParams.from_file(CONSTRUCTOR_PARAMS_FILEPATH) - # Lynx TACo Root Application - LynxRootApplication = deployer.deploy(project.LynxRootApplication, publish=PUBLISH) + LynxRootApplication = deployer.deploy( + *config.get_params(project.LynxRootApplication, locals()), + publish=PUBLISH + ) - # Lynx TACo Child Application LynxTACoChildApplication = deployer.deploy( - project.LynxTACoChildApplication, - LynxRootApplication.address, + *config.get_params(project.LynxRootApplication, locals()), publish=PUBLISH, ) @@ -61,28 +51,30 @@ def main(): publish=PUBLISH, ) - # Lynx Ritual Token LynxRitualToken = deployer.deploy( - project.LynxRitualToken, Web3.to_wei(10_000_000, "ether"), publish=PUBLISH + *config.get_params(project.LynxRitualToken, locals()), + publish=PUBLISH ) # Lynx Coordinator Coordinator = deployer.deploy( - project.Coordinator, # coordinator - LynxTACoChildApplication.address, # root_app - 3600, # timeout (seconds) - 4, # max_dkg_size - deployer.address, # admin - LynxRitualToken.address, # currency - 1, # fee_rate (wei per second) + *config.get_params(project.Coordinator, locals()), publish=PUBLISH, ) - LynxTACoChildApplication.setCoordinator(Coordinator.address, sender=deployer) + LynxTACoChildApplication.setCoordinator( + Coordinator.address, + sender=deployer + ) - # list deployments - deployments = [LynxRootApplication, LynxTACoChildApplication, LynxRitualToken, Coordinator] + deployments = [ + LynxRootApplication, + LynxTACoChildApplication, + LynxRitualToken, + Coordinator + ] registry_from_ape_deployments( - deployments=deployments, output_filepath=DEPLOYMENT_REGISTRY_FILEPATH + deployments=deployments, + output_filepath=DEPLOYMENT_REGISTRY_FILEPATH ) From 9eab25133ddf105b3b8a738e41a5a849e0bca6d6 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 19 Sep 2023 16:21:01 -0400 Subject: [PATCH 010/112] Move deployment/registry python modules to scripts folder. Fix parameters to deploy() command to include ContractContainer value. Add check_etherscan_plugin to utils Rename ConstructorParams to DeploymentConfig; get_params to get_constructor_params. --- scripts/{testnet => configs}/lynx_config.json | 0 scripts/{testnet => }/deploy_lynx.py | 46 ++++++++--------- {utils => scripts}/deployment.py | 49 +++++++------------ {utils => scripts}/registry.py | 0 scripts/utils.py | 11 +++++ utils/__init__.py | 0 6 files changed, 51 insertions(+), 55 deletions(-) rename scripts/{testnet => configs}/lynx_config.json (100%) rename scripts/{testnet => }/deploy_lynx.py (55%) rename {utils => scripts}/deployment.py (67%) rename {utils => scripts}/registry.py (100%) delete mode 100644 utils/__init__.py diff --git a/scripts/testnet/lynx_config.json b/scripts/configs/lynx_config.json similarity index 100% rename from scripts/testnet/lynx_config.json rename to scripts/configs/lynx_config.json diff --git a/scripts/testnet/deploy_lynx.py b/scripts/deploy_lynx.py similarity index 55% rename from scripts/testnet/deploy_lynx.py rename to scripts/deploy_lynx.py index bd6891ea..743335a9 100644 --- a/scripts/testnet/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -3,14 +3,15 @@ from ape import project from ape.cli import get_user_selected_account - -from utils.deployment import ConstructorParams -from utils.registry import registry_from_ape_deployments -from utils.misc import check_etherscan_plugin +from scripts.deployment import DeploymentConfig +from scripts.registry import registry_from_ape_deployments +from scripts.utils import check_etherscan_plugin PUBLISH = False -CONSTRUCTOR_PARAMS_FILEPATH = Path('') -DEPLOYMENT_REGISTRY_FILEPATH = Path("lynx_testnet_registry.json") # TODO: move to artifacts and make unique +DEPLOYMENT_CONFIG_FILEPATH = Path(__file__).parent / "configs" / "lynx_config.json" +DEPLOYMENT_REGISTRY_FILEPATH = ( + Path(__file__).parent.parent / "artifacts" / "lynx_testnet_registry.json" +) # TODO: make unique def main(): @@ -33,15 +34,17 @@ def main(): check_etherscan_plugin() deployer = get_user_selected_account() - config = ConstructorParams.from_file(CONSTRUCTOR_PARAMS_FILEPATH) + config = DeploymentConfig.from_file(DEPLOYMENT_CONFIG_FILEPATH) LynxRootApplication = deployer.deploy( - *config.get_params(project.LynxRootApplication, locals()), - publish=PUBLISH + project.LynxRootApplication, # TODO should the container be returned by call below? + *config.get_constructor_params(project.LynxRootApplication, locals()), + publish=PUBLISH, ) LynxTACoChildApplication = deployer.deploy( - *config.get_params(project.LynxRootApplication, locals()), + project.LynxTACoChildApplication, + *config.get_constructor_params(project.LynxTACoChildApplication, locals()), publish=PUBLISH, ) @@ -52,29 +55,22 @@ def main(): ) LynxRitualToken = deployer.deploy( - *config.get_params(project.LynxRitualToken, locals()), - publish=PUBLISH + project.LynxRitualToken, + *config.get_constructor_params(project.LynxRitualToken, locals()), + publish=PUBLISH, ) # Lynx Coordinator Coordinator = deployer.deploy( - *config.get_params(project.Coordinator, locals()), + project.Coordinator, + *config.get_constructor_params(project.Coordinator, locals()), publish=PUBLISH, ) - LynxTACoChildApplication.setCoordinator( - Coordinator.address, - sender=deployer - ) + LynxTACoChildApplication.setCoordinator(Coordinator.address, sender=deployer) - deployments = [ - LynxRootApplication, - LynxTACoChildApplication, - LynxRitualToken, - Coordinator - ] + deployments = [LynxRootApplication, LynxTACoChildApplication, LynxRitualToken, Coordinator] registry_from_ape_deployments( - deployments=deployments, - output_filepath=DEPLOYMENT_REGISTRY_FILEPATH + deployments=deployments, output_filepath=DEPLOYMENT_REGISTRY_FILEPATH ) diff --git a/utils/deployment.py b/scripts/deployment.py similarity index 67% rename from utils/deployment.py rename to scripts/deployment.py index 10468547..272a0ad8 100644 --- a/utils/deployment.py +++ b/scripts/deployment.py @@ -25,10 +25,7 @@ def _resolve_param(value: Any, context: typing.Dict[str, Any]) -> Any: return contract_instance.address -def _resolve_parameters( - parameters: OrderedDict, - context: typing.Dict[str, Any] -) -> OrderedDict: +def _resolve_parameters(parameters: OrderedDict, context: typing.Dict[str, Any]) -> OrderedDict: resolved_params = OrderedDict() for name, value in parameters.items(): if isinstance(value, list): @@ -42,10 +39,7 @@ def _resolve_parameters( return resolved_params -def _validate_param( - param: Any, - contracts: List[str] -) -> None: +def _validate_param(param: Any, contracts: List[str]) -> None: if not is_variable(param): return variable = param.strip(VARIABLE_PREFIX) @@ -53,9 +47,7 @@ def _validate_param( raise DeploymentConfigError(f"Variable {param} is not resolvable") -def validate_deployment_config( - config: typing.OrderedDict[str, Any] -) -> None: +def validate_deployment_config(config: typing.OrderedDict[str, Any]) -> None: available_contracts = list(config.keys()) for contract, parameters in config.items(): for name, value in parameters.items(): @@ -66,12 +58,14 @@ def validate_deployment_config( _validate_param(value, available_contracts) -def _confirm_resolution( - resolved_params: OrderedDict, - contract_name: str -) -> None: +def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> None: + if len(resolved_params) == 0: + # Nothing really to confirm + print(f"(i) No constructor parameters for {contract_name}; proceeding") + return + print(f"Resolved constructor parameters for {contract_name}") - for name, resolved_value in resolved_params: + for name, resolved_value in resolved_params.items(): print(f"\t{name}={resolved_value}") answer = input("Continue Y/N? ") if answer.lower().strip() == "n": @@ -79,31 +73,26 @@ def _confirm_resolution( exit(-1) -class ConstructorParams: - def __init__(self, constructor_values: OrderedDict): - self.params = constructor_values +class DeploymentConfig: + def __init__(self, contracts_configuration: OrderedDict): + validate_deployment_config(contracts_configuration) + self.contracts_configuration = contracts_configuration @classmethod - def from_file(cls, config_filepath: Path) -> "ConstructorParams": + def from_file(cls, config_filepath: Path) -> "DeploymentConfig": with open(config_filepath, "r") as config_file: config = OrderedDict(json.load(config_file)) return cls(config) - def get_params( - self, - container: ContractContainer, - context: typing.Dict[str, Any], - interactive: bool = True + def get_constructor_params( + self, container: ContractContainer, context: typing.Dict[str, Any], interactive: bool = True ) -> List[Any]: contract_name = container.contract_type.name - contract_parameters = self.params[contract_name] + contract_parameters = self.contracts_configuration[contract_name] resolved_params = _resolve_parameters( contract_parameters, context, ) if interactive: - _confirm_resolution( - resolved_params, - contract_name - ) + _confirm_resolution(resolved_params, contract_name) return list(resolved_params.values()) diff --git a/utils/registry.py b/scripts/registry.py similarity index 100% rename from utils/registry.py rename to scripts/registry.py diff --git a/scripts/utils.py b/scripts/utils.py index ff54f1e5..6263f053 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -1,3 +1,5 @@ +import os + from ape import accounts, config, networks, project from web3 import Web3 @@ -40,3 +42,12 @@ def get_account(id): return accounts.test_accounts[0] else: return None + + +def check_etherscan_plugin(): + try: + import ape_etherscan # noqa: F401 + except ImportError: + raise ImportError("Please install the ape-etherscan plugin to use this script.") + if not os.environ.get("ETHERSCAN_API_KEY"): + raise ValueError("ETHERSCAN_API_KEY is not set.") diff --git a/utils/__init__.py b/utils/__init__.py deleted file mode 100644 index e69de29b..00000000 From 5ebb1acfbb54fced92229ceaeed8e15e5a8e88fb Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 19 Sep 2023 16:52:57 -0400 Subject: [PATCH 011/112] Change get_constructor_params to instead by get_deployment_params and use contract container as first entry so that it isn't repeated in the deployment script. --- scripts/deploy_lynx.py | 12 ++++-------- scripts/deployment.py | 5 +++-- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 743335a9..dcc92329 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -37,14 +37,12 @@ def main(): config = DeploymentConfig.from_file(DEPLOYMENT_CONFIG_FILEPATH) LynxRootApplication = deployer.deploy( - project.LynxRootApplication, # TODO should the container be returned by call below? - *config.get_constructor_params(project.LynxRootApplication, locals()), + *config.get_deployment_params(project.LynxRootApplication, locals()), publish=PUBLISH, ) LynxTACoChildApplication = deployer.deploy( - project.LynxTACoChildApplication, - *config.get_constructor_params(project.LynxTACoChildApplication, locals()), + *config.get_deployment_params(project.LynxTACoChildApplication, locals()), publish=PUBLISH, ) @@ -55,15 +53,13 @@ def main(): ) LynxRitualToken = deployer.deploy( - project.LynxRitualToken, - *config.get_constructor_params(project.LynxRitualToken, locals()), + *config.get_deployment_params(project.LynxRitualToken, locals()), publish=PUBLISH, ) # Lynx Coordinator Coordinator = deployer.deploy( - project.Coordinator, - *config.get_constructor_params(project.Coordinator, locals()), + *config.get_deployment_params(project.Coordinator, locals()), publish=PUBLISH, ) diff --git a/scripts/deployment.py b/scripts/deployment.py index 272a0ad8..f1c9e940 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -84,7 +84,7 @@ def from_file(cls, config_filepath: Path) -> "DeploymentConfig": config = OrderedDict(json.load(config_file)) return cls(config) - def get_constructor_params( + def get_deployment_params( self, container: ContractContainer, context: typing.Dict[str, Any], interactive: bool = True ) -> List[Any]: contract_name = container.contract_type.name @@ -95,4 +95,5 @@ def get_constructor_params( ) if interactive: _confirm_resolution(resolved_params, contract_name) - return list(resolved_params.values()) + + return [container, *resolved_params.values()] From 0e81248bb06f94256e82252a2a6ee35c81f37cf2 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 19 Sep 2023 23:10:44 +0200 Subject: [PATCH 012/112] makes `ConstructorParameters` instances callable; assorted renaming and reorg of constructor parameter utilities --- scripts/deploy_lynx.py | 31 +++++++++------- scripts/deployment.py | 36 +++++++++++++------ .../lynx-alpha-13.json} | 0 3 files changed, 43 insertions(+), 24 deletions(-) rename scripts/{configs/lynx_config.json => params/lynx-alpha-13.json} (100%) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index dcc92329..4e83bc06 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -2,13 +2,12 @@ from pathlib import Path from ape import project -from ape.cli import get_user_selected_account -from scripts.deployment import DeploymentConfig + +from scripts.deployment import prepare_deployment from scripts.registry import registry_from_ape_deployments -from scripts.utils import check_etherscan_plugin PUBLISH = False -DEPLOYMENT_CONFIG_FILEPATH = Path(__file__).parent / "configs" / "lynx_config.json" +DEPLOYMENT_CONFIG_FILEPATH = Path(__file__).parent / "params" / "lynx-alpha-13.json" DEPLOYMENT_REGISTRY_FILEPATH = ( Path(__file__).parent.parent / "artifacts" / "lynx_testnet_registry.json" ) # TODO: make unique @@ -32,17 +31,17 @@ def main(): 'Coordinator' deployed to: 0x4077ad1CFA834aEd68765dB0Cf3d14701a970a9a """ - check_etherscan_plugin() - deployer = get_user_selected_account() - config = DeploymentConfig.from_file(DEPLOYMENT_CONFIG_FILEPATH) + deployer, params = prepare_deployment( + params_filepath=DEPLOYMENT_CONFIG_FILEPATH + ) LynxRootApplication = deployer.deploy( - *config.get_deployment_params(project.LynxRootApplication, locals()), + *params(project.LynxRootApplication, locals()), publish=PUBLISH, ) LynxTACoChildApplication = deployer.deploy( - *config.get_deployment_params(project.LynxTACoChildApplication, locals()), + *params(project.LynxTACoChildApplication, locals()), publish=PUBLISH, ) @@ -53,20 +52,26 @@ def main(): ) LynxRitualToken = deployer.deploy( - *config.get_deployment_params(project.LynxRitualToken, locals()), + *params(project.LynxRitualToken, locals()), publish=PUBLISH, ) # Lynx Coordinator Coordinator = deployer.deploy( - *config.get_deployment_params(project.Coordinator, locals()), + *params(project.Coordinator, locals()), publish=PUBLISH, ) LynxTACoChildApplication.setCoordinator(Coordinator.address, sender=deployer) - deployments = [LynxRootApplication, LynxTACoChildApplication, LynxRitualToken, Coordinator] + deployments = [ + LynxRootApplication, + LynxTACoChildApplication, + LynxRitualToken, + Coordinator + ] registry_from_ape_deployments( - deployments=deployments, output_filepath=DEPLOYMENT_REGISTRY_FILEPATH + deployments=deployments, + output_filepath=DEPLOYMENT_REGISTRY_FILEPATH ) diff --git a/scripts/deployment.py b/scripts/deployment.py index f1c9e940..ddb6035b 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -4,21 +4,28 @@ from pathlib import Path from typing import Any, List +from ape.api import AccountAPI +from ape.cli import get_user_selected_account from ape.contracts.base import ContractContainer +from scripts.utils import check_etherscan_plugin + VARIABLE_PREFIX = "$" -class DeploymentConfigError(ValueError): - pass +def prepare_deployment(params_filepath: Path) -> typing.Tuple[AccountAPI, 'ConstructorParameters']: + check_etherscan_plugin() + deployer = get_user_selected_account() + params = ConstructorParameters.from_file(params_filepath) + return deployer, params -def is_variable(param: Any) -> bool: +def _is_variable(param: Any) -> bool: return isinstance(param, str) and param.startswith(VARIABLE_PREFIX) def _resolve_param(value: Any, context: typing.Dict[str, Any]) -> Any: - if not is_variable(value): + if not _is_variable(value): return value variable = value.strip(VARIABLE_PREFIX) contract_instance = context[variable] @@ -40,11 +47,11 @@ def _resolve_parameters(parameters: OrderedDict, context: typing.Dict[str, Any]) def _validate_param(param: Any, contracts: List[str]) -> None: - if not is_variable(param): + if not _is_variable(param): return variable = param.strip(VARIABLE_PREFIX) if variable not in contracts: - raise DeploymentConfigError(f"Variable {param} is not resolvable") + raise ConstructorParameters.Invalid(f"Variable {param} is not resolvable") def validate_deployment_config(config: typing.OrderedDict[str, Any]) -> None: @@ -64,27 +71,34 @@ def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> Non print(f"(i) No constructor parameters for {contract_name}; proceeding") return - print(f"Resolved constructor parameters for {contract_name}") + print(f"Constructor parameters for {contract_name}") for name, resolved_value in resolved_params.items(): print(f"\t{name}={resolved_value}") - answer = input("Continue Y/N? ") + answer = input("Deploy Y/N? ") if answer.lower().strip() == "n": print("Aborting deployment!") exit(-1) -class DeploymentConfig: +class ConstructorParameters: + + class Invalid(Exception): + """raised when the constructor parameters are invalid""" + def __init__(self, contracts_configuration: OrderedDict): validate_deployment_config(contracts_configuration) self.contracts_configuration = contracts_configuration + def __call__(self, *args, **kwargs): + return self.__resolve_constructor_parameters(*args, **kwargs) + @classmethod - def from_file(cls, config_filepath: Path) -> "DeploymentConfig": + def from_file(cls, config_filepath: Path) -> "ConstructorParameters": with open(config_filepath, "r") as config_file: config = OrderedDict(json.load(config_file)) return cls(config) - def get_deployment_params( + def __resolve_constructor_parameters( self, container: ContractContainer, context: typing.Dict[str, Any], interactive: bool = True ) -> List[Any]: contract_name = container.contract_type.name diff --git a/scripts/configs/lynx_config.json b/scripts/params/lynx-alpha-13.json similarity index 100% rename from scripts/configs/lynx_config.json rename to scripts/params/lynx-alpha-13.json From faed0e5a0410bf3a121e4e3930f48291debe5b5b Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 19 Sep 2023 23:28:26 +0200 Subject: [PATCH 013/112] ConstructorParameters.__call__ -> .get --- scripts/deploy_lynx.py | 8 ++++---- scripts/deployment.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 4e83bc06..dcbaec4c 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -36,12 +36,12 @@ def main(): ) LynxRootApplication = deployer.deploy( - *params(project.LynxRootApplication, locals()), + *params.get(project.LynxRootApplication, locals()), publish=PUBLISH, ) LynxTACoChildApplication = deployer.deploy( - *params(project.LynxTACoChildApplication, locals()), + *params.get(project.LynxTACoChildApplication, locals()), publish=PUBLISH, ) @@ -52,13 +52,13 @@ def main(): ) LynxRitualToken = deployer.deploy( - *params(project.LynxRitualToken, locals()), + *params.get(project.LynxRitualToken, locals()), publish=PUBLISH, ) # Lynx Coordinator Coordinator = deployer.deploy( - *params(project.Coordinator, locals()), + *params.get(project.Coordinator, locals()), publish=PUBLISH, ) diff --git a/scripts/deployment.py b/scripts/deployment.py index ddb6035b..8de3a9b6 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -89,7 +89,7 @@ def __init__(self, contracts_configuration: OrderedDict): validate_deployment_config(contracts_configuration) self.contracts_configuration = contracts_configuration - def __call__(self, *args, **kwargs): + def get(self, *args, **kwargs): return self.__resolve_constructor_parameters(*args, **kwargs) @classmethod From 740642c6118b91f40ed9c2fc9af9d9bd56c86cc6 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 19 Sep 2023 20:16:37 -0400 Subject: [PATCH 014/112] Rename work: ConstructorParameters -> DeploymentParameters which takes constructor_parameters. --- scripts/deployment.py | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/scripts/deployment.py b/scripts/deployment.py index 8de3a9b6..ef371e4b 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -7,16 +7,15 @@ from ape.api import AccountAPI from ape.cli import get_user_selected_account from ape.contracts.base import ContractContainer - from scripts.utils import check_etherscan_plugin VARIABLE_PREFIX = "$" -def prepare_deployment(params_filepath: Path) -> typing.Tuple[AccountAPI, 'ConstructorParameters']: +def prepare_deployment(params_filepath: Path) -> typing.Tuple[AccountAPI, "DeploymentParameters"]: check_etherscan_plugin() deployer = get_user_selected_account() - params = ConstructorParameters.from_file(params_filepath) + params = DeploymentParameters.from_file(params_filepath) return deployer, params @@ -32,7 +31,9 @@ def _resolve_param(value: Any, context: typing.Dict[str, Any]) -> Any: return contract_instance.address -def _resolve_parameters(parameters: OrderedDict, context: typing.Dict[str, Any]) -> OrderedDict: +def _resolve_constructor_parameters( + parameters: OrderedDict, context: typing.Dict[str, Any] +) -> OrderedDict: resolved_params = OrderedDict() for name, value in parameters.items(): if isinstance(value, list): @@ -46,12 +47,12 @@ def _resolve_parameters(parameters: OrderedDict, context: typing.Dict[str, Any]) return resolved_params -def _validate_param(param: Any, contracts: List[str]) -> None: +def _validate_constructor_param(param: Any, contracts: List[str]) -> None: if not _is_variable(param): return variable = param.strip(VARIABLE_PREFIX) if variable not in contracts: - raise ConstructorParameters.Invalid(f"Variable {param} is not resolvable") + raise DeploymentParameters.Invalid(f"Variable {param} is not resolvable") def validate_deployment_config(config: typing.OrderedDict[str, Any]) -> None: @@ -60,9 +61,9 @@ def validate_deployment_config(config: typing.OrderedDict[str, Any]) -> None: for name, value in parameters.items(): if isinstance(value, list): for param in value: - _validate_param(param, available_contracts) + _validate_constructor_param(param, available_contracts) else: - _validate_param(value, available_contracts) + _validate_constructor_param(value, available_contracts) def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> None: @@ -80,30 +81,29 @@ def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> Non exit(-1) -class ConstructorParameters: - +class DeploymentParameters: class Invalid(Exception): """raised when the constructor parameters are invalid""" - def __init__(self, contracts_configuration: OrderedDict): - validate_deployment_config(contracts_configuration) - self.contracts_configuration = contracts_configuration + def __init__(self, constructor_parameters: OrderedDict): + validate_deployment_config(constructor_parameters) + self.constructor_parameters = constructor_parameters def get(self, *args, **kwargs): - return self.__resolve_constructor_parameters(*args, **kwargs) + return self.__resolve_deployment_parameters(*args, **kwargs) @classmethod - def from_file(cls, config_filepath: Path) -> "ConstructorParameters": + def from_file(cls, config_filepath: Path) -> "DeploymentParameters": with open(config_filepath, "r") as config_file: config = OrderedDict(json.load(config_file)) return cls(config) - def __resolve_constructor_parameters( + def __resolve_deployment_parameters( self, container: ContractContainer, context: typing.Dict[str, Any], interactive: bool = True ) -> List[Any]: contract_name = container.contract_type.name - contract_parameters = self.contracts_configuration[contract_name] - resolved_params = _resolve_parameters( + contract_parameters = self.constructor_parameters[contract_name] + resolved_params = _resolve_constructor_parameters( contract_parameters, context, ) From ae49437392eb94425df52c28854bdbb5353b74fb Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 19 Sep 2023 20:52:16 -0400 Subject: [PATCH 015/112] Name contract registry output to reflect current lynx alpha-13 version. --- scripts/deploy_lynx.py | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index dcbaec4c..e49a3810 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -2,14 +2,13 @@ from pathlib import Path from ape import project - from scripts.deployment import prepare_deployment from scripts.registry import registry_from_ape_deployments PUBLISH = False DEPLOYMENT_CONFIG_FILEPATH = Path(__file__).parent / "params" / "lynx-alpha-13.json" DEPLOYMENT_REGISTRY_FILEPATH = ( - Path(__file__).parent.parent / "artifacts" / "lynx_testnet_registry.json" + Path(__file__).parent.parent / "artifacts" / "lynx_alpha-13_registry.json" ) # TODO: make unique @@ -31,9 +30,7 @@ def main(): 'Coordinator' deployed to: 0x4077ad1CFA834aEd68765dB0Cf3d14701a970a9a """ - deployer, params = prepare_deployment( - params_filepath=DEPLOYMENT_CONFIG_FILEPATH - ) + deployer, params = prepare_deployment(params_filepath=DEPLOYMENT_CONFIG_FILEPATH) LynxRootApplication = deployer.deploy( *params.get(project.LynxRootApplication, locals()), @@ -64,14 +61,8 @@ def main(): LynxTACoChildApplication.setCoordinator(Coordinator.address, sender=deployer) - deployments = [ - LynxRootApplication, - LynxTACoChildApplication, - LynxRitualToken, - Coordinator - ] + deployments = [LynxRootApplication, LynxTACoChildApplication, LynxRitualToken, Coordinator] registry_from_ape_deployments( - deployments=deployments, - output_filepath=DEPLOYMENT_REGISTRY_FILEPATH + deployments=deployments, output_filepath=DEPLOYMENT_REGISTRY_FILEPATH ) From dfa87fe60af746403f273a1643c3ffd728bee3e4 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 19 Sep 2023 20:53:22 -0400 Subject: [PATCH 016/112] Remove TODO. --- scripts/deploy_lynx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index e49a3810..6c77dfe9 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -9,7 +9,7 @@ DEPLOYMENT_CONFIG_FILEPATH = Path(__file__).parent / "params" / "lynx-alpha-13.json" DEPLOYMENT_REGISTRY_FILEPATH = ( Path(__file__).parent.parent / "artifacts" / "lynx_alpha-13_registry.json" -) # TODO: make unique +) def main(): From d80c4d3598f2189e8186ea357c88129586055fd5 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 19 Sep 2023 21:04:36 -0400 Subject: [PATCH 017/112] Attempt to separate DeploymentParameters from ConstructorParameters. --- scripts/deployment.py | 71 ++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/scripts/deployment.py b/scripts/deployment.py index ef371e4b..8ad11ad7 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -15,8 +15,11 @@ def prepare_deployment(params_filepath: Path) -> typing.Tuple[AccountAPI, "DeploymentParameters"]: check_etherscan_plugin() deployer = get_user_selected_account() - params = DeploymentParameters.from_file(params_filepath) - return deployer, params + + constructor_parameters = ConstructorParameters.from_file(params_filepath) + deployment_parameters = DeploymentParameters(constructor_parameters) + + return deployer, deployment_parameters def _is_variable(param: Any) -> bool: @@ -31,31 +34,15 @@ def _resolve_param(value: Any, context: typing.Dict[str, Any]) -> Any: return contract_instance.address -def _resolve_constructor_parameters( - parameters: OrderedDict, context: typing.Dict[str, Any] -) -> OrderedDict: - resolved_params = OrderedDict() - for name, value in parameters.items(): - if isinstance(value, list): - param_value_list = list() - for item in value: - param = _resolve_param(item, context) - param_value_list.append(param) - resolved_params[name] = param_value_list - else: - resolved_params[name] = _resolve_param(value, context) - return resolved_params - - def _validate_constructor_param(param: Any, contracts: List[str]) -> None: if not _is_variable(param): return variable = param.strip(VARIABLE_PREFIX) if variable not in contracts: - raise DeploymentParameters.Invalid(f"Variable {param} is not resolvable") + raise ConstructorParameters.Invalid(f"Variable {param} is not resolvable") -def validate_deployment_config(config: typing.OrderedDict[str, Any]) -> None: +def validate_constructor_parameters(config: typing.OrderedDict[str, Any]) -> None: available_contracts = list(config.keys()) for contract, parameters in config.items(): for name, value in parameters.items(): @@ -81,32 +68,46 @@ def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> Non exit(-1) -class DeploymentParameters: +class ConstructorParameters: class Invalid(Exception): - """raised when the constructor parameters are invalid""" + """Raised when the constructor parameters are invalid""" + + def __init__(self, parameters: OrderedDict): + validate_constructor_parameters(parameters) + self.parameters = parameters + + @classmethod + def from_file(cls, params_filepath: Path) -> "ConstructorParameters": + with open(params_filepath, "r") as params_file: + config = OrderedDict(json.load(params_file)) + return cls(config) - def __init__(self, constructor_parameters: OrderedDict): - validate_deployment_config(constructor_parameters) + def resolve(self, contract_name: str, context: typing.Dict[str, Any]) -> OrderedDict: + resolved_params = OrderedDict() + for name, value in self.parameters[contract_name].items(): + if isinstance(value, list): + param_value_list = list() + for item in value: + param = _resolve_param(item, context) + param_value_list.append(param) + resolved_params[name] = param_value_list + else: + resolved_params[name] = _resolve_param(value, context) + return resolved_params + + +class DeploymentParameters: + def __init__(self, constructor_parameters: ConstructorParameters): self.constructor_parameters = constructor_parameters def get(self, *args, **kwargs): return self.__resolve_deployment_parameters(*args, **kwargs) - @classmethod - def from_file(cls, config_filepath: Path) -> "DeploymentParameters": - with open(config_filepath, "r") as config_file: - config = OrderedDict(json.load(config_file)) - return cls(config) - def __resolve_deployment_parameters( self, container: ContractContainer, context: typing.Dict[str, Any], interactive: bool = True ) -> List[Any]: contract_name = container.contract_type.name - contract_parameters = self.constructor_parameters[contract_name] - resolved_params = _resolve_constructor_parameters( - contract_parameters, - context, - ) + resolved_params = self.constructor_parameters.resolve(contract_name, context) if interactive: _confirm_resolution(resolved_params, contract_name) From ea252bf15021797c37aa95e19f4292d97d2dd930 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 20 Sep 2023 08:13:24 -0400 Subject: [PATCH 018/112] Remove publish option when executing setChildApplication during lynx deployment. --- scripts/deploy_lynx.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 6c77dfe9..1592d3d9 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -45,7 +45,6 @@ def main(): LynxRootApplication.setChildApplication( LynxTACoChildApplication.address, sender=deployer, - publish=PUBLISH, ) LynxRitualToken = deployer.deploy( From f35d14ddd5e8ff7ce80ff40fadedc3645e978e98 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 20 Sep 2023 08:19:26 -0400 Subject: [PATCH 019/112] Allow publish to be specified during call to prepare_deployment. The kwargs can now be obtained from ApeDeploymentParameters (formerly DeploymentParameters) --- scripts/deploy_lynx.py | 18 +++++++----------- scripts/deployment.py | 14 ++++++++++---- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 1592d3d9..777e3753 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -30,16 +30,16 @@ def main(): 'Coordinator' deployed to: 0x4077ad1CFA834aEd68765dB0Cf3d14701a970a9a """ - deployer, params = prepare_deployment(params_filepath=DEPLOYMENT_CONFIG_FILEPATH) + deployer, params = prepare_deployment( + params_filepath=DEPLOYMENT_CONFIG_FILEPATH, publish=PUBLISH + ) LynxRootApplication = deployer.deploy( - *params.get(project.LynxRootApplication, locals()), - publish=PUBLISH, + *params.get(project.LynxRootApplication, locals()), **params.get_kwargs() ) LynxTACoChildApplication = deployer.deploy( - *params.get(project.LynxTACoChildApplication, locals()), - publish=PUBLISH, + *params.get(project.LynxTACoChildApplication, locals()), **params.get_kwargs() ) LynxRootApplication.setChildApplication( @@ -48,15 +48,11 @@ def main(): ) LynxRitualToken = deployer.deploy( - *params.get(project.LynxRitualToken, locals()), - publish=PUBLISH, + *params.get(project.LynxRitualToken, locals()), **params.get_kwargs() ) # Lynx Coordinator - Coordinator = deployer.deploy( - *params.get(project.Coordinator, locals()), - publish=PUBLISH, - ) + Coordinator = deployer.deploy(*params.get(project.Coordinator, locals()), **params.get_kwargs()) LynxTACoChildApplication.setCoordinator(Coordinator.address, sender=deployer) diff --git a/scripts/deployment.py b/scripts/deployment.py index 8ad11ad7..3362411e 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -12,12 +12,14 @@ VARIABLE_PREFIX = "$" -def prepare_deployment(params_filepath: Path) -> typing.Tuple[AccountAPI, "DeploymentParameters"]: +def prepare_deployment( + params_filepath: Path, publish: bool +) -> typing.Tuple[AccountAPI, "ApeDeploymentParameters"]: check_etherscan_plugin() deployer = get_user_selected_account() constructor_parameters = ConstructorParameters.from_file(params_filepath) - deployment_parameters = DeploymentParameters(constructor_parameters) + deployment_parameters = ApeDeploymentParameters(constructor_parameters, publish) return deployer, deployment_parameters @@ -96,9 +98,13 @@ def resolve(self, contract_name: str, context: typing.Dict[str, Any]) -> Ordered return resolved_params -class DeploymentParameters: - def __init__(self, constructor_parameters: ConstructorParameters): +class ApeDeploymentParameters: + def __init__(self, constructor_parameters: ConstructorParameters, publish: bool): self.constructor_parameters = constructor_parameters + self.publish = publish + + def get_kwargs(self): + return {"publish": self.publish} def get(self, *args, **kwargs): return self.__resolve_deployment_parameters(*args, **kwargs) From 8399b1d4a50b924260d0cddb99256d20f0757079 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 16:59:39 +0200 Subject: [PATCH 020/112] Code and style optimization; Use pure helper functions that do not require state, ensure named return values, more type hints, and inline commentary. --- scripts/deployment.py | 77 +++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/scripts/deployment.py b/scripts/deployment.py index 3362411e..2c72e2a3 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -15,30 +15,49 @@ def prepare_deployment( params_filepath: Path, publish: bool ) -> typing.Tuple[AccountAPI, "ApeDeploymentParameters"]: + + # pre-deployment checks check_etherscan_plugin() - deployer = get_user_selected_account() + deployer_account = get_user_selected_account() + # load deployment parameters constructor_parameters = ConstructorParameters.from_file(params_filepath) deployment_parameters = ApeDeploymentParameters(constructor_parameters, publish) - return deployer, deployment_parameters + return deployer_account, deployment_parameters def _is_variable(param: Any) -> bool: - return isinstance(param, str) and param.startswith(VARIABLE_PREFIX) + result = isinstance(param, str) and param.startswith(VARIABLE_PREFIX) + return result def _resolve_param(value: Any, context: typing.Dict[str, Any]) -> Any: if not _is_variable(value): - return value + return value # literally a value variable = value.strip(VARIABLE_PREFIX) contract_instance = context[variable] return contract_instance.address +def _resolve_list(value: List[Any], context: typing.Dict[str, Any]) -> List[Any]: + params = [_resolve_param(v, context) for v in value] + return params + + +def _resolve_parameters(parameters: OrderedDict, context: typing.Dict[str, Any]) -> OrderedDict: + resolved_params = OrderedDict() + for name, value in parameters.items(): + if isinstance(value, list): + resolved_params[name] = _resolve_list(value, context) + else: + resolved_params[name] = _resolve_param(value, context) + return resolved_params + + def _validate_constructor_param(param: Any, contracts: List[str]) -> None: if not _is_variable(param): - return + return # literally a value variable = param.strip(VARIABLE_PREFIX) if variable not in contracts: raise ConstructorParameters.Invalid(f"Variable {param} is not resolvable") @@ -55,19 +74,23 @@ def validate_constructor_parameters(config: typing.OrderedDict[str, Any]) -> Non _validate_constructor_param(value, available_contracts) +def _confirm_deployment(contract_name: str) -> None: + answer = input(f"Deploy {contract_name} Y/N? ") + if answer.lower().strip() == "n": + print("Aborting deployment!") + exit(-1) + + def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> None: if len(resolved_params) == 0: - # Nothing really to confirm - print(f"(i) No constructor parameters for {contract_name}; proceeding") + print(f"(i) No constructor parameters for {contract_name}") + _confirm_deployment(contract_name) return print(f"Constructor parameters for {contract_name}") for name, resolved_value in resolved_params.items(): print(f"\t{name}={resolved_value}") - answer = input("Deploy Y/N? ") - if answer.lower().strip() == "n": - print("Aborting deployment!") - exit(-1) + _confirm_deployment(contract_name) class ConstructorParameters: @@ -79,23 +102,14 @@ def __init__(self, parameters: OrderedDict): self.parameters = parameters @classmethod - def from_file(cls, params_filepath: Path) -> "ConstructorParameters": - with open(params_filepath, "r") as params_file: + def from_file(cls, filepath: Path) -> "ConstructorParameters": + with open(filepath, "r") as params_file: config = OrderedDict(json.load(params_file)) return cls(config) def resolve(self, contract_name: str, context: typing.Dict[str, Any]) -> OrderedDict: - resolved_params = OrderedDict() - for name, value in self.parameters[contract_name].items(): - if isinstance(value, list): - param_value_list = list() - for item in value: - param = _resolve_param(item, context) - param_value_list.append(param) - resolved_params[name] = param_value_list - else: - resolved_params[name] = _resolve_param(value, context) - return resolved_params + result = _resolve_parameters(self.parameters[contract_name], context) + return result class ApeDeploymentParameters: @@ -103,18 +117,17 @@ def __init__(self, constructor_parameters: ConstructorParameters, publish: bool) self.constructor_parameters = constructor_parameters self.publish = publish - def get_kwargs(self): + def get_kwargs(self) -> typing.Dict[str, Any]: return {"publish": self.publish} - def get(self, *args, **kwargs): + def get(self, *args, **kwargs) -> List[Any]: return self.__resolve_deployment_parameters(*args, **kwargs) def __resolve_deployment_parameters( - self, container: ContractContainer, context: typing.Dict[str, Any], interactive: bool = True + self, container: ContractContainer, context: typing.Dict[str, Any] ) -> List[Any]: contract_name = container.contract_type.name - resolved_params = self.constructor_parameters.resolve(contract_name, context) - if interactive: - _confirm_resolution(resolved_params, contract_name) - - return [container, *resolved_params.values()] + resolved_constructor_params = self.constructor_parameters.resolve(contract_name, context) + _confirm_resolution(resolved_constructor_params, contract_name) + deployment_params = [container, *resolved_constructor_params.values()] + return deployment_params From 81018f46d2253c7f1e3df6c6382a4b1fed57306e Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 18:10:08 +0200 Subject: [PATCH 021/112] relocates constructor parameter JSON files and deployment artifacts to /deployments --- .../artifacts/lynx-alpha-13-registry.json | 2179 +++++++++++++++++ .../lynx-alpha-13-params.json | 0 scripts/deploy_lynx.py | 9 +- scripts/utils.py | 4 + 4 files changed, 2187 insertions(+), 5 deletions(-) create mode 100644 deployments/artifacts/lynx-alpha-13-registry.json rename scripts/params/lynx-alpha-13.json => deployments/constructor_params/lynx-alpha-13-params.json (100%) diff --git a/deployments/artifacts/lynx-alpha-13-registry.json b/deployments/artifacts/lynx-alpha-13-registry.json new file mode 100644 index 00000000..2a621ae0 --- /dev/null +++ b/deployments/artifacts/lynx-alpha-13-registry.json @@ -0,0 +1,2179 @@ +[ + [ + "TACoApplication", + "v0.0.0", + "0x8507A58140b13eFDaae4a94b9bAcaED116f05728", + [ + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "childApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setChildApplication", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_childApplication", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "TACoChildApplication", + "v0.0.0", + "0xDBA4D9F7245FD081fDfC3cD2593754Bc7e805E7e", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_rootApplication", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "event", + "name": "AuthorizationUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "internalType": "uint8", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "authorizedStake", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "coordinator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "initialize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "rootApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "function", + "name": "setCoordinator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "stakingProviderFromOperator", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "stakingProviderInfo", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "operatorConfirmed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "authorized", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "LynxRitualToken", + "v0.0.0", + "0x8779eD9CA1140AE6106A8Febb4A9B6e26A54f0FC", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_totalSupplyOfTokens", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "spender", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "to", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "allowance", + "stateMutability": "view", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "approve", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "balanceOf", + "stateMutability": "view", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "decimals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ] + }, + { + "type": "function", + "name": "decreaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "subtractedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "increaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "addedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "name", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "symbol", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "totalSupply", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "transfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "transferFrom", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + } + ] + ], + [ + "Coordinator", + "v0.0.0", + "0xb949b6513e5A4B24D4668bc62B7dd9a8F4dd3333", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_application", + "type": "address", + "internalType": "contract ITACoChildApplication" + }, + { + "name": "_timeout", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_maxDkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + }, + { + "name": "_currency", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "_feeRatePerSecond", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "AggregationPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "aggregatedTranscriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeScheduled", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48", + "indexed": false + }, + { + "name": "effectSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferScheduled", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "acceptSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EndRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "successful", + "type": "bool", + "internalType": "bool", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MaxDkgSizeChanged", + "inputs": [ + { + "name": "oldSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + }, + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParticipantPublicKeySet", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "participant", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "newAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartAggregationRound", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "authority", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "participants", + "type": "address[]", + "internalType": "address[]", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TimeoutChanged", + "inputs": [ + { + "name": "oldTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + }, + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TranscriptPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "transcriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "INITIATOR_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "TREASURY_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "acceptDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "application", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildApplication" + } + ] + }, + { + "type": "function", + "name": "beginDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cancelDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "changeDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cohortFingerprint", + "stateMutability": "pure", + "inputs": [ + { + "name": "nodes", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "currency", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ] + }, + { + "type": "function", + "name": "defaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelayIncreaseWait", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "feeRatePerSecond", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getAuthority", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "getParticipantFromProvider", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant" + } + ] + }, + { + "type": "function", + "name": "getParticipants", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant[]" + } + ] + }, + { + "type": "function", + "name": "getProviderPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + }, + { + "name": "_ritualId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ] + }, + { + "type": "function", + "name": "getPublicKeyFromRitualId", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ] + }, + { + "type": "function", + "name": "getRitualIdFromPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ], + "outputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "getRitualInitiationCost", + "stateMutability": "view", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getRitualState", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum Coordinator.RitualState" + } + ] + }, + { + "type": "function", + "name": "getRoleAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "getThresholdForRitualSize", + "stateMutability": "pure", + "inputs": [ + { + "name": "size", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "grantRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "hasRole", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "initiateRitual", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "isEncryptionAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "evidence", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "ciphertextHeader", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isInitiationPublic", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isProviderPublicKeySet", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isRitualFinalized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "makeInitiationPublic", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "maxDkgSize", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "numberOfRituals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingFees", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "postAggregation", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "postTranscript", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "processPendingFee", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "renounceRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "revokeRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "rituals", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "initiator", + "type": "address", + "internalType": "address" + }, + { + "name": "initTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "endTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "totalTranscripts", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "totalAggregations", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "dkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "threshold", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "aggregationMismatch", + "type": "bool", + "internalType": "bool" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "function", + "name": "rollbackDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setMaxDkgSize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setProviderPublicKey", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setReimbursementPool", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "contract IReimbursementPool" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setRitualAuthority", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setTimeout", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "supportsInterface", + "stateMutability": "view", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "timeout", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "totalPendingFees", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "withdrawTokens", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [] + } + ] + ] +] \ No newline at end of file diff --git a/scripts/params/lynx-alpha-13.json b/deployments/constructor_params/lynx-alpha-13-params.json similarity index 100% rename from scripts/params/lynx-alpha-13.json rename to deployments/constructor_params/lynx-alpha-13-params.json diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 777e3753..46055613 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -1,15 +1,14 @@ #!/usr/bin/python3 -from pathlib import Path from ape import project + from scripts.deployment import prepare_deployment from scripts.registry import registry_from_ape_deployments +from scripts.utils import ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR PUBLISH = False -DEPLOYMENT_CONFIG_FILEPATH = Path(__file__).parent / "params" / "lynx-alpha-13.json" -DEPLOYMENT_REGISTRY_FILEPATH = ( - Path(__file__).parent.parent / "artifacts" / "lynx_alpha-13_registry.json" -) +CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx-alpha-13-params.json" +REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx-alpha-13-registry.json" def main(): diff --git a/scripts/utils.py b/scripts/utils.py index 6263f053..de78a28c 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -8,6 +8,10 @@ CURRENT_NETWORK = networks.network.name DEPLOYMENTS_CONFIG = config.get_config("deployments")["ethereum"][CURRENT_NETWORK][0] +PROJECT_ROOT = Path(__file__).parent.parent +CONSTRUCTOR_PARAMS_DIR = PROJECT_ROOT / "deployments" / "constructor_params" +ARTIFACTS_DIR = PROJECT_ROOT / "deployments" / "artifacts" + def deploy_mocks(deployer): """This function should deploy nucypher_token and t_staking and return the From c8314025a6b4c7522af96708b18a10e22403a34e Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 18:14:42 +0200 Subject: [PATCH 022/112] Include an eager registry output filepath check to prevent unintentional artifact destruction --- scripts/deploy_lynx.py | 4 +++- scripts/deployment.py | 11 +++++++++-- scripts/utils.py | 14 +++++++++++++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 46055613..5e34c355 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -30,7 +30,9 @@ def main(): """ deployer, params = prepare_deployment( - params_filepath=DEPLOYMENT_CONFIG_FILEPATH, publish=PUBLISH + params_filepath=CONSTRUCTOR_PARAMS_FILEPATH, + registry_filepath=REGISTRY_FILEPATH, + publish=PUBLISH ) LynxRootApplication = deployer.deploy( diff --git a/scripts/deployment.py b/scripts/deployment.py index 2c72e2a3..8065bb52 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -7,16 +7,23 @@ from ape.api import AccountAPI from ape.cli import get_user_selected_account from ape.contracts.base import ContractContainer -from scripts.utils import check_etherscan_plugin +from scripts.utils import check_etherscan_plugin, check_registry_filepath VARIABLE_PREFIX = "$" def prepare_deployment( - params_filepath: Path, publish: bool + params_filepath: Path, + registry_filepath: Path, + publish: bool ) -> typing.Tuple[AccountAPI, "ApeDeploymentParameters"]: + """ + Prepares the deployment by loading the deployment parameters + and checking the pre-deployment conditions. + """ # pre-deployment checks + check_registry_filepath(registry_filepath=registry_filepath) check_etherscan_plugin() deployer_account = get_user_selected_account() diff --git a/scripts/utils.py b/scripts/utils.py index de78a28c..d7f08ba8 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -48,7 +48,19 @@ def get_account(id): return None -def check_etherscan_plugin(): +def check_registry_filepath(registry_filepath: Path) -> None: + """ + Checks that the registry_filepath does not exist, + and that its parent directory does exist. + """ + if registry_filepath.exists(): + raise FileExistsError(f"Registry file already exists at {registry_filepath}") + if not registry_filepath.parent.exists(): + raise FileNotFoundError(f"Parent directory of {registry_filepath} does not exist.") + + +def check_etherscan_plugin() -> None: + """Checks that the ape-etherscan plugin is installed and that the ETHERSCAN_API_KEY is set.""" try: import ape_etherscan # noqa: F401 except ImportError: From c07d970214158d2cd0c53d3bab3191e8f2e325fd Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 18:15:59 +0200 Subject: [PATCH 023/112] Facility for contract registry name 'remapping'; Code optimization for registry.py --- scripts/deploy_lynx.py | 12 +++++- scripts/registry.py | 83 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 78 insertions(+), 17 deletions(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 5e34c355..a7895ce4 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -59,6 +59,14 @@ def main(): deployments = [LynxRootApplication, LynxTACoChildApplication, LynxRitualToken, Coordinator] - registry_from_ape_deployments( - deployments=deployments, output_filepath=DEPLOYMENT_REGISTRY_FILEPATH + registry_names = { + LynxRootApplication.contract_type.name: "TACoApplication", + LynxTACoChildApplication.contract_type.name: "TACoChildApplication", + } + + output_filepath = registry_from_ape_deployments( + deployments=deployments, + registry_names=registry_names, + output_filepath=REGISTRY_FILEPATH ) + print(f"(i) Registry written to {output_filepath}!") diff --git a/scripts/registry.py b/scripts/registry.py index 6a3e171a..8a02cd59 100644 --- a/scripts/registry.py +++ b/scripts/registry.py @@ -1,30 +1,83 @@ import json from pathlib import Path -from typing import List +from typing import List, Optional, Dict from ape.contracts import ContractInstance from eth_utils import to_checksum_address +def _get_abi(contract_instance: ContractInstance) -> List[dict]: + """Returns the ABI of a contract instance.""" + contract_abi = [] + for entry in contract_instance.contract_type.abi: + contract_abi.append(entry.dict()) + return contract_abi + + +def _get_name( + contract_instance: ContractInstance, + registry_names: Dict[ContractInstance, str] +) -> str: + """ + Returns the optionally remapped registry name of a contract instance. + If the contract instance is not remapped, the real contract name is returned. + """ + real_contract_name = contract_instance.contract_type.name + contract_name = registry_names.get( + real_contract_name, # look up name in registry_names + real_contract_name # default to the real contract name + ) + return contract_name + + +def _get_entry( + contract_instance: ContractInstance, + registry_names: Dict[ContractInstance, str] +) -> List[str]: + contract_abi = _get_abi(contract_instance) + contract_name = _get_name( + contract_instance=contract_instance, + registry_names=registry_names + ) + entry = [ + contract_name, + "v0.0.0", # TODO: remove version from registry + to_checksum_address(contract_instance.address), + contract_abi, + ] + return entry + + +def _write_registry( + data: List[List[str]], + filepath: Path +) -> Path: + with open(filepath, "w") as registry_file: + json_data = json.dumps(data) + registry_file.write(json_data) + return filepath + + def registry_from_ape_deployments( deployments: List[ContractInstance], output_filepath: Path, -): - """Creates a registry from ape deployments.""" + registry_names: Optional[Dict[str, str]] = None, +) -> Path: + """Creates a nucypher-style contract registry from ape deployments API.""" + + registry_names = registry_names or dict() registry_data = list() for contract_instance in deployments: - abi_json_list = [] - for entry in contract_instance.contract_type.abi: - abi_json_list.append(entry.dict()) - - entry = [ - contract_instance.contract_type.name, - "v0.0.0", # TODO: get version from contract - to_checksum_address(contract_instance.address), - abi_json_list, - ] + entry = _get_entry( + contract_instance=contract_instance, + registry_names=registry_names + ) registry_data.append(entry) - with open(output_filepath, "w") as registry_file: - registry_file.write(json.dumps(registry_data)) + output_filepath = _write_registry( + data=registry_data, + filepath=output_filepath + ) + + return output_filepath From cfa0e7e566606876481340bddb838466bf2ffac5 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 18:16:27 +0200 Subject: [PATCH 024/112] Assorted docstrings and code style cleanup --- scripts/deployment.py | 62 ++++++++++++++++++++++++++++++++++--------- scripts/utils.py | 7 ++--- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/scripts/deployment.py b/scripts/deployment.py index 8065bb52..52d15f7b 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -35,11 +35,16 @@ def prepare_deployment( def _is_variable(param: Any) -> bool: + """Returns True if the param is a variable.""" result = isinstance(param, str) and param.startswith(VARIABLE_PREFIX) return result -def _resolve_param(value: Any, context: typing.Dict[str, Any]) -> Any: +def _resolve_param( + value: Any, + context: typing.Dict[str, Any] +) -> Any: + """Resolves a single parameter value.""" if not _is_variable(value): return value # literally a value variable = value.strip(VARIABLE_PREFIX) @@ -47,12 +52,20 @@ def _resolve_param(value: Any, context: typing.Dict[str, Any]) -> Any: return contract_instance.address -def _resolve_list(value: List[Any], context: typing.Dict[str, Any]) -> List[Any]: +def _resolve_list( + value: List[Any], + context: typing.Dict[str, Any] +) -> List[Any]: + """Resolves a list of parameter values.""" params = [_resolve_param(v, context) for v in value] return params -def _resolve_parameters(parameters: OrderedDict, context: typing.Dict[str, Any]) -> OrderedDict: +def _resolve_parameters( + parameters: OrderedDict, + context: typing.Dict[str, Any] +) -> OrderedDict: + """Resolves a dictionary of parameter values for a single contract""" resolved_params = OrderedDict() for name, value in parameters.items(): if isinstance(value, list): @@ -62,7 +75,11 @@ def _resolve_parameters(parameters: OrderedDict, context: typing.Dict[str, Any]) return resolved_params -def _validate_constructor_param(param: Any, contracts: List[str]) -> None: +def _validate_constructor_param( + param: Any, + contracts: List[str] +) -> None: + """Validates a single constructor parameter.""" if not _is_variable(param): return # literally a value variable = param.strip(VARIABLE_PREFIX) @@ -70,25 +87,41 @@ def _validate_constructor_param(param: Any, contracts: List[str]) -> None: raise ConstructorParameters.Invalid(f"Variable {param} is not resolvable") -def validate_constructor_parameters(config: typing.OrderedDict[str, Any]) -> None: +def _validate_constructor_param_list( + params: List[Any], + contracts: List[str] +) -> None: + """Validates a list of constructor parameters.""" + for param in params: + _validate_constructor_param(param, contracts) + + +def validate_constructor_parameters( + config: typing.OrderedDict[str, Any] +) -> None: + """Validates the constructor parameters for all contracts in a single config.""" available_contracts = list(config.keys()) for contract, parameters in config.items(): for name, value in parameters.items(): if isinstance(value, list): - for param in value: - _validate_constructor_param(param, available_contracts) + _validate_constructor_param_list(value, available_contracts) else: _validate_constructor_param(value, available_contracts) def _confirm_deployment(contract_name: str) -> None: + """Asks the user to confirm the deployment of a single contract.""" answer = input(f"Deploy {contract_name} Y/N? ") if answer.lower().strip() == "n": print("Aborting deployment!") exit(-1) -def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> None: +def _confirm_resolution( + resolved_params: OrderedDict, + contract_name: str +) -> None: + """Asks the user to confirm the resolved constructor parameters for a single contract.""" if len(resolved_params) == 0: print(f"(i) No constructor parameters for {contract_name}") _confirm_deployment(contract_name) @@ -101,6 +134,8 @@ def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> Non class ConstructorParameters: + """Represents the constructor parameters for a set of contracts.""" + class Invalid(Exception): """Raised when the constructor parameters are invalid""" @@ -110,29 +145,32 @@ def __init__(self, parameters: OrderedDict): @classmethod def from_file(cls, filepath: Path) -> "ConstructorParameters": + """Loads the constructor parameters from a JSON file.""" with open(filepath, "r") as params_file: config = OrderedDict(json.load(params_file)) return cls(config) def resolve(self, contract_name: str, context: typing.Dict[str, Any]) -> OrderedDict: + """Resolves the constructor parameters for a single contract.""" result = _resolve_parameters(self.parameters[contract_name], context) return result class ApeDeploymentParameters: + """Represents ape deployment parameters for a set of contracts.""" + def __init__(self, constructor_parameters: ConstructorParameters, publish: bool): self.constructor_parameters = constructor_parameters self.publish = publish def get_kwargs(self) -> typing.Dict[str, Any]: + """Returns the deployment kwargs.""" return {"publish": self.publish} - def get(self, *args, **kwargs) -> List[Any]: - return self.__resolve_deployment_parameters(*args, **kwargs) - - def __resolve_deployment_parameters( + def get( self, container: ContractContainer, context: typing.Dict[str, Any] ) -> List[Any]: + """Resolves the deployment parameters for a single contract.""" contract_name = container.contract_type.name resolved_constructor_params = self.constructor_parameters.resolve(contract_name, context) _confirm_resolution(resolved_constructor_params, contract_name) diff --git a/scripts/utils.py b/scripts/utils.py index d7f08ba8..6cb721a4 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -1,4 +1,5 @@ import os +from pathlib import Path from ape import accounts, config, networks, project from web3 import Web3 @@ -35,12 +36,12 @@ def deploy_mocks(deployer): ) -def get_account(id): +def get_account(_id): if CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS: - if id is None: + if _id is None: raise ValueError("Must specify account id when deploying to production networks") else: - return accounts.load(id) + return accounts.load(_id) elif CURRENT_NETWORK in LOCAL_BLOCKCHAIN_ENVIRONMENTS: return accounts.test_accounts[0] From 4c4cd0049c39150fa23f250ccbb93bd34abd49b1 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 18:18:22 +0200 Subject: [PATCH 025/112] Eager validation of ETHERSCAN_API_KEY length --- scripts/utils.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/utils.py b/scripts/utils.py index 6cb721a4..47da98c0 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -12,6 +12,7 @@ PROJECT_ROOT = Path(__file__).parent.parent CONSTRUCTOR_PARAMS_DIR = PROJECT_ROOT / "deployments" / "constructor_params" ARTIFACTS_DIR = PROJECT_ROOT / "deployments" / "artifacts" +ETHERSCAN_API_KEY_ENVVAR = "ETHERSCAN_API_KEY" def deploy_mocks(deployer): @@ -66,5 +67,8 @@ def check_etherscan_plugin() -> None: import ape_etherscan # noqa: F401 except ImportError: raise ImportError("Please install the ape-etherscan plugin to use this script.") - if not os.environ.get("ETHERSCAN_API_KEY"): - raise ValueError("ETHERSCAN_API_KEY is not set.") + api_key = os.environ.get(ETHERSCAN_API_KEY_ENVVAR) + if not api_key: + raise ValueError(f"{ETHERSCAN_API_KEY_ENVVAR} is not set.") + if not len(api_key) == 34: + raise ValueError(f"{ETHERSCAN_API_KEY_ENVVAR} is not valid.") From 733ea8984f66f4309e6ec770689db25f8234b4de Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 18:23:38 +0200 Subject: [PATCH 026/112] relocates constants to constants.py --- .../artifacts/lynx-alpha-13-registry.json | 2179 ----------------- scripts/constants.py | 12 + scripts/deploy_coordinator.py | 2 +- scripts/deploy_coordinator_with_fee_model.py | 2 +- scripts/deploy_flat_rate_fee_model.py | 2 +- scripts/deploy_lynx.py | 2 +- scripts/deploy_nucypher_token.py | 3 +- scripts/deploy_staking_escrow.py | 4 +- scripts/deploy_taco_application.py | 4 +- scripts/deploy_testnet_threshold_staking.py | 3 +- scripts/utils.py | 16 +- 11 files changed, 28 insertions(+), 2201 deletions(-) delete mode 100644 deployments/artifacts/lynx-alpha-13-registry.json create mode 100644 scripts/constants.py diff --git a/deployments/artifacts/lynx-alpha-13-registry.json b/deployments/artifacts/lynx-alpha-13-registry.json deleted file mode 100644 index 2a621ae0..00000000 --- a/deployments/artifacts/lynx-alpha-13-registry.json +++ /dev/null @@ -1,2179 +0,0 @@ -[ - [ - "TACoApplication", - "v0.0.0", - "0x8507A58140b13eFDaae4a94b9bAcaED116f05728", - [ - { - "type": "event", - "name": "OperatorConfirmed", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "newOwner", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "childApplication", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoRootToChild" - } - ] - }, - { - "type": "function", - "name": "confirmOperatorAddress", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "renounceOwnership", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setChildApplication", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_childApplication", - "type": "address", - "internalType": "contract ITACoRootToChild" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "transferOwnership", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateAuthorization", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "_amount", - "type": "uint96", - "internalType": "uint96" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateOperator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - } - ] - ], - [ - "TACoChildApplication", - "v0.0.0", - "0xDBA4D9F7245FD081fDfC3cD2593754Bc7e805E7e", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_rootApplication", - "type": "address", - "internalType": "contract ITACoChildToRoot" - } - ] - }, - { - "type": "event", - "name": "AuthorizationUpdated", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "amount", - "type": "uint96", - "internalType": "uint96", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint8", - "internalType": "uint8", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OperatorConfirmed", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OperatorUpdated", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "newOwner", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "authorizedStake", - "stateMutability": "view", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint96", - "internalType": "uint96" - } - ] - }, - { - "type": "function", - "name": "confirmOperatorAddress", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "coordinator", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "initialize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "renounceOwnership", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "rootApplication", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoChildToRoot" - } - ] - }, - { - "type": "function", - "name": "setCoordinator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "stakingProviderFromOperator", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "stakingProviderInfo", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "operator", - "type": "address", - "internalType": "address" - }, - { - "name": "operatorConfirmed", - "type": "bool", - "internalType": "bool" - }, - { - "name": "authorized", - "type": "uint96", - "internalType": "uint96" - } - ] - }, - { - "type": "function", - "name": "transferOwnership", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateAuthorization", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint96", - "internalType": "uint96" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateOperator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - } - ] - ], - [ - "LynxRitualToken", - "v0.0.0", - "0x8779eD9CA1140AE6106A8Febb4A9B6e26A54f0FC", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_totalSupplyOfTokens", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "spender", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "to", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "allowance", - "stateMutability": "view", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "approve", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "balanceOf", - "stateMutability": "view", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "decimals", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - } - ] - }, - { - "type": "function", - "name": "decreaseAllowance", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "subtractedValue", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "increaseAllowance", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "addedValue", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "name", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "function", - "name": "symbol", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "function", - "name": "totalSupply", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "transfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "transferFrom", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - } - ] - ], - [ - "Coordinator", - "v0.0.0", - "0xb949b6513e5A4B24D4668bc62B7dd9a8F4dd3333", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_application", - "type": "address", - "internalType": "contract ITACoChildApplication" - }, - { - "name": "_timeout", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "_maxDkgSize", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "_admin", - "type": "address", - "internalType": "address" - }, - { - "name": "_currency", - "type": "address", - "internalType": "contract IERC20" - }, - { - "name": "_feeRatePerSecond", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "event", - "name": "AggregationPosted", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "node", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "aggregatedTranscriptDigest", - "type": "bytes32", - "internalType": "bytes32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeScheduled", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48", - "indexed": false - }, - { - "name": "effectSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferScheduled", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "acceptSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EndRitual", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "successful", - "type": "bool", - "internalType": "bool", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MaxDkgSizeChanged", - "inputs": [ - { - "name": "oldSize", - "type": "uint16", - "internalType": "uint16", - "indexed": false - }, - { - "name": "newSize", - "type": "uint16", - "internalType": "uint16", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ParticipantPublicKeySet", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "participant", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "newAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StartAggregationRound", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StartRitual", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "authority", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "participants", - "type": "address[]", - "internalType": "address[]", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TimeoutChanged", - "inputs": [ - { - "name": "oldTimeout", - "type": "uint32", - "internalType": "uint32", - "indexed": false - }, - { - "name": "newTimeout", - "type": "uint32", - "internalType": "uint32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TranscriptPosted", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "node", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "transcriptDigest", - "type": "bytes32", - "internalType": "bytes32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "INITIATOR_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "TREASURY_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "acceptDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "application", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoChildApplication" - } - ] - }, - { - "type": "function", - "name": "beginDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cancelDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "changeDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cohortFingerprint", - "stateMutability": "pure", - "inputs": [ - { - "name": "nodes", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "currency", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IERC20" - } - ] - }, - { - "type": "function", - "name": "defaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelayIncreaseWait", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "feeRatePerSecond", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "getAuthority", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "getParticipantFromProvider", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "provider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "components": [ - { - "name": "provider", - "type": "address", - "internalType": "address" - }, - { - "name": "aggregated", - "type": "bool", - "internalType": "bool" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "internalType": "struct Coordinator.Participant" - } - ] - }, - { - "type": "function", - "name": "getParticipants", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "components": [ - { - "name": "provider", - "type": "address", - "internalType": "address" - }, - { - "name": "aggregated", - "type": "bool", - "internalType": "bool" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "internalType": "struct Coordinator.Participant[]" - } - ] - }, - { - "type": "function", - "name": "getProviderPublicKey", - "stateMutability": "view", - "inputs": [ - { - "name": "_provider", - "type": "address", - "internalType": "address" - }, - { - "name": "_ritualId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point" - } - ] - }, - { - "type": "function", - "name": "getPublicKeyFromRitualId", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - } - ] - }, - { - "type": "function", - "name": "getRitualIdFromPublicKey", - "stateMutability": "view", - "inputs": [ - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - } - ], - "outputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "getRitualInitiationCost", - "stateMutability": "view", - "inputs": [ - { - "name": "providers", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "duration", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "getRitualState", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "enum Coordinator.RitualState" - } - ] - }, - { - "type": "function", - "name": "getRoleAdmin", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "getThresholdForRitualSize", - "stateMutability": "pure", - "inputs": [ - { - "name": "size", - "type": "uint16", - "internalType": "uint16" - } - ], - "outputs": [ - { - "name": "", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "type": "function", - "name": "grantRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "hasRole", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "initiateRitual", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "providers", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - }, - { - "name": "duration", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "accessController", - "type": "address", - "internalType": "contract IEncryptionAuthorizer" - } - ], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "isEncryptionAuthorized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "evidence", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "ciphertextHeader", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isInitiationPublic", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isProviderPublicKeySet", - "stateMutability": "view", - "inputs": [ - { - "name": "_provider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isRitualFinalized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "makeInitiationPublic", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "maxDkgSize", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "type": "function", - "name": "numberOfRituals", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingFees", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "postAggregation", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "aggregatedTranscript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "postTranscript", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "processPendingFee", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "renounceRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "revokeRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "rituals", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "initiator", - "type": "address", - "internalType": "address" - }, - { - "name": "initTimestamp", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "endTimestamp", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "totalTranscripts", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "totalAggregations", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - }, - { - "name": "dkgSize", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "threshold", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "aggregationMismatch", - "type": "bool", - "internalType": "bool" - }, - { - "name": "accessController", - "type": "address", - "internalType": "contract IEncryptionAuthorizer" - }, - { - "name": "publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - }, - { - "name": "aggregatedTranscript", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "function", - "name": "rollbackDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setMaxDkgSize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newSize", - "type": "uint16", - "internalType": "uint16" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setProviderPublicKey", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setReimbursementPool", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "pool", - "type": "address", - "internalType": "contract IReimbursementPool" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setRitualAuthority", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setTimeout", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newTimeout", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "supportsInterface", - "stateMutability": "view", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "timeout", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "totalPendingFees", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "withdrawTokens", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "contract IERC20" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [] - } - ] - ] -] \ No newline at end of file diff --git a/scripts/constants.py b/scripts/constants.py new file mode 100644 index 00000000..286fb086 --- /dev/null +++ b/scripts/constants.py @@ -0,0 +1,12 @@ +from pathlib import Path + +from ape import networks, config + +LOCAL_BLOCKCHAIN_ENVIRONMENTS = ["local"] +PRODUCTION_ENVIRONMENTS = ["mainnet", "polygon-main"] +CURRENT_NETWORK = networks.network.name +DEPLOYMENTS_CONFIG = config.get_config("deployments")["ethereum"][CURRENT_NETWORK][0] +PROJECT_ROOT = Path(__file__).parent.parent +CONSTRUCTOR_PARAMS_DIR = PROJECT_ROOT / "deployments" / "constructor_params" +ARTIFACTS_DIR = PROJECT_ROOT / "deployments" / "artifacts" +ETHERSCAN_API_KEY_ENVVAR = "ETHERSCAN_API_KEY" diff --git a/scripts/deploy_coordinator.py b/scripts/deploy_coordinator.py index 991ce18a..55472f2a 100644 --- a/scripts/deploy_coordinator.py +++ b/scripts/deploy_coordinator.py @@ -1,7 +1,7 @@ #!/usr/bin/python3 from ape import project from ape.cli import get_user_selected_account -from scripts.utils import DEPLOYMENTS_CONFIG +from scripts.constants import DEPLOYMENTS_CONFIG def main(account_id=None): diff --git a/scripts/deploy_coordinator_with_fee_model.py b/scripts/deploy_coordinator_with_fee_model.py index 08a26f45..ac0d568e 100644 --- a/scripts/deploy_coordinator_with_fee_model.py +++ b/scripts/deploy_coordinator_with_fee_model.py @@ -35,7 +35,7 @@ def cli(network, account, currency, rate, timeout, admin, max_size, verify): # TODO: Move this to a common deployment utilities module # Validate Etherscan verification parameters. # This import fails if called before the click network options are evaluated - from scripts.utils import LOCAL_BLOCKCHAIN_ENVIRONMENTS + from scripts.constants import LOCAL_BLOCKCHAIN_ENVIRONMENTS is_public_deployment = network_name not in LOCAL_BLOCKCHAIN_ENVIRONMENTS if not is_public_deployment: diff --git a/scripts/deploy_flat_rate_fee_model.py b/scripts/deploy_flat_rate_fee_model.py index 8c4a43c3..9ebc3b1f 100644 --- a/scripts/deploy_flat_rate_fee_model.py +++ b/scripts/deploy_flat_rate_fee_model.py @@ -31,7 +31,7 @@ def cli(network, account, currency, rate, verify): # TODO: Move this to a common deployment utilities module # Validate Etherscan verification parameters. # This import fails if called before the click network options are evaluated - from scripts.utils import LOCAL_BLOCKCHAIN_ENVIRONMENTS + from scripts.constants import LOCAL_BLOCKCHAIN_ENVIRONMENTS is_public_deployment = network_name not in LOCAL_BLOCKCHAIN_ENVIRONMENTS if not is_public_deployment: diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index a7895ce4..8a0bc049 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -4,7 +4,7 @@ from scripts.deployment import prepare_deployment from scripts.registry import registry_from_ape_deployments -from scripts.utils import ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR +from scripts.constants import CONSTRUCTOR_PARAMS_DIR, ARTIFACTS_DIR PUBLISH = False CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx-alpha-13-params.json" diff --git a/scripts/deploy_nucypher_token.py b/scripts/deploy_nucypher_token.py index ce7879b7..53b02c9c 100644 --- a/scripts/deploy_nucypher_token.py +++ b/scripts/deploy_nucypher_token.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 from ape import project -from scripts.utils import DEPLOYMENTS_CONFIG, get_account +from scripts.utils import get_account +from scripts.constants import DEPLOYMENTS_CONFIG def main(account_id=None): diff --git a/scripts/deploy_staking_escrow.py b/scripts/deploy_staking_escrow.py index ef9f3841..c543488d 100644 --- a/scripts/deploy_staking_escrow.py +++ b/scripts/deploy_staking_escrow.py @@ -1,12 +1,10 @@ #!/usr/bin/python3 from ape import project from scripts.utils import ( - CURRENT_NETWORK, - DEPLOYMENTS_CONFIG, - LOCAL_BLOCKCHAIN_ENVIRONMENTS, deploy_mocks, get_account, ) +from scripts.constants import LOCAL_BLOCKCHAIN_ENVIRONMENTS, CURRENT_NETWORK, DEPLOYMENTS_CONFIG def main(account_id=None): diff --git a/scripts/deploy_taco_application.py b/scripts/deploy_taco_application.py index 2e88816b..c62dfbb2 100644 --- a/scripts/deploy_taco_application.py +++ b/scripts/deploy_taco_application.py @@ -1,12 +1,10 @@ #!/usr/bin/python3 from ape import project from scripts.utils import ( - CURRENT_NETWORK, - DEPLOYMENTS_CONFIG, - LOCAL_BLOCKCHAIN_ENVIRONMENTS, deploy_mocks, get_account, ) +from scripts.constants import LOCAL_BLOCKCHAIN_ENVIRONMENTS, CURRENT_NETWORK, DEPLOYMENTS_CONFIG def main(account_id=None): diff --git a/scripts/deploy_testnet_threshold_staking.py b/scripts/deploy_testnet_threshold_staking.py index fdb46292..f6f0d3cc 100644 --- a/scripts/deploy_testnet_threshold_staking.py +++ b/scripts/deploy_testnet_threshold_staking.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 from ape import project -from scripts.utils import DEPLOYMENTS_CONFIG, get_account +from scripts.utils import get_account +from scripts.constants import DEPLOYMENTS_CONFIG def main(account_id=None): diff --git a/scripts/utils.py b/scripts/utils.py index 47da98c0..dddf5bb9 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -1,18 +1,14 @@ import os from pathlib import Path -from ape import accounts, config, networks, project +from ape import accounts, project from web3 import Web3 -LOCAL_BLOCKCHAIN_ENVIRONMENTS = ["local"] -PRODUCTION_ENVIRONMENTS = ["mainnet", "polygon-main"] -CURRENT_NETWORK = networks.network.name -DEPLOYMENTS_CONFIG = config.get_config("deployments")["ethereum"][CURRENT_NETWORK][0] - -PROJECT_ROOT = Path(__file__).parent.parent -CONSTRUCTOR_PARAMS_DIR = PROJECT_ROOT / "deployments" / "constructor_params" -ARTIFACTS_DIR = PROJECT_ROOT / "deployments" / "artifacts" -ETHERSCAN_API_KEY_ENVVAR = "ETHERSCAN_API_KEY" +from scripts.constants import ( + LOCAL_BLOCKCHAIN_ENVIRONMENTS, + CURRENT_NETWORK, + ETHERSCAN_API_KEY_ENVVAR +) def deploy_mocks(deployer): From 74a8f6f844d8dbfe71978517743825943b3bcf10 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 18:24:27 +0200 Subject: [PATCH 027/112] track deployments/artifacts --- .../lynx-alpha-13-registry-test.json | 2179 +++++++++++++++++ 1 file changed, 2179 insertions(+) create mode 100644 deployments/artifacts/lynx-alpha-13-registry-test.json diff --git a/deployments/artifacts/lynx-alpha-13-registry-test.json b/deployments/artifacts/lynx-alpha-13-registry-test.json new file mode 100644 index 00000000..33bf51ca --- /dev/null +++ b/deployments/artifacts/lynx-alpha-13-registry-test.json @@ -0,0 +1,2179 @@ +[ + [ + "TACoApplication", + "v0.0.0", + "0x274b028b03A250cA03644E6c578D81f019eE1323", + [ + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "childApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setChildApplication", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_childApplication", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "TACoChildApplication", + "v0.0.0", + "0xBcF7FFFD8B256Ec51a36782a52D0c34f6474D951", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_rootApplication", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "event", + "name": "AuthorizationUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "internalType": "uint8", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "authorizedStake", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "coordinator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "initialize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "rootApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "function", + "name": "setCoordinator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "stakingProviderFromOperator", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "stakingProviderInfo", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "operatorConfirmed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "authorized", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "LynxRitualToken", + "v0.0.0", + "0x4B3E65104805A303c274f078127D5a7E9F9b47b2", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_totalSupplyOfTokens", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "spender", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "to", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "allowance", + "stateMutability": "view", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "approve", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "balanceOf", + "stateMutability": "view", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "decimals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ] + }, + { + "type": "function", + "name": "decreaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "subtractedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "increaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "addedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "name", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "symbol", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "totalSupply", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "transfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "transferFrom", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + } + ] + ], + [ + "Coordinator", + "v0.0.0", + "0x6Af9BB9Cf7307AC439cc7E37859bdD844874ebc1", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_application", + "type": "address", + "internalType": "contract ITACoChildApplication" + }, + { + "name": "_timeout", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_maxDkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + }, + { + "name": "_currency", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "_feeRatePerSecond", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "AggregationPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "aggregatedTranscriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeScheduled", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48", + "indexed": false + }, + { + "name": "effectSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferScheduled", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "acceptSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EndRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "successful", + "type": "bool", + "internalType": "bool", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MaxDkgSizeChanged", + "inputs": [ + { + "name": "oldSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + }, + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParticipantPublicKeySet", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "participant", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "newAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartAggregationRound", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "authority", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "participants", + "type": "address[]", + "internalType": "address[]", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TimeoutChanged", + "inputs": [ + { + "name": "oldTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + }, + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TranscriptPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "transcriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "INITIATOR_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "TREASURY_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "acceptDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "application", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildApplication" + } + ] + }, + { + "type": "function", + "name": "beginDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cancelDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "changeDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cohortFingerprint", + "stateMutability": "pure", + "inputs": [ + { + "name": "nodes", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "currency", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ] + }, + { + "type": "function", + "name": "defaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelayIncreaseWait", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "feeRatePerSecond", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getAuthority", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "getParticipantFromProvider", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant" + } + ] + }, + { + "type": "function", + "name": "getParticipants", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant[]" + } + ] + }, + { + "type": "function", + "name": "getProviderPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + }, + { + "name": "_ritualId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ] + }, + { + "type": "function", + "name": "getPublicKeyFromRitualId", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ] + }, + { + "type": "function", + "name": "getRitualIdFromPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ], + "outputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "getRitualInitiationCost", + "stateMutability": "view", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getRitualState", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum Coordinator.RitualState" + } + ] + }, + { + "type": "function", + "name": "getRoleAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "getThresholdForRitualSize", + "stateMutability": "pure", + "inputs": [ + { + "name": "size", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "grantRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "hasRole", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "initiateRitual", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "isEncryptionAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "evidence", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "ciphertextHeader", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isInitiationPublic", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isProviderPublicKeySet", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isRitualFinalized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "makeInitiationPublic", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "maxDkgSize", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "numberOfRituals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingFees", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "postAggregation", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "postTranscript", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "processPendingFee", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "renounceRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "revokeRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "rituals", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "initiator", + "type": "address", + "internalType": "address" + }, + { + "name": "initTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "endTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "totalTranscripts", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "totalAggregations", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "dkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "threshold", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "aggregationMismatch", + "type": "bool", + "internalType": "bool" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "function", + "name": "rollbackDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setMaxDkgSize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setProviderPublicKey", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setReimbursementPool", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "contract IReimbursementPool" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setRitualAuthority", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setTimeout", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "supportsInterface", + "stateMutability": "view", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "timeout", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "totalPendingFees", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "withdrawTokens", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [] + } + ] + ] +] \ No newline at end of file From 115f33df81fef53a254f22301f5ef38b698551ba Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 18:52:29 +0200 Subject: [PATCH 028/112] just-in-time constructor parameter name and length ABI validation --- scripts/deployment.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/scripts/deployment.py b/scripts/deployment.py index 52d15f7b..2dbe0d1f 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -133,6 +133,27 @@ def _confirm_resolution( _confirm_deployment(contract_name) +def _validate_constructor_abi( + contract_name: str, + abi_inputs: List[Any], + resolved_params: OrderedDict +) -> None: + """Validates the constructor parameters against the constructor ABI.""" + if len(resolved_params) != len(abi_inputs): + raise ConstructorParameters.Invalid( + f"Constructor parameters length for {contract_name} does not match the ABI" + ) + if abi_inputs: + codex = enumerate(zip(abi_inputs, resolved_params.items()), start=0) + for position, (abi_input, resolved_input) in codex: + name, value = resolved_input + if abi_input.name != name: + raise ConstructorParameters.Invalid( + f"Constructor parameter name '{name}' does not match the " + f"ABI name '{abi_input.name}' at position {position}" + ) + + class ConstructorParameters: """Represents the constructor parameters for a set of contracts.""" @@ -171,8 +192,14 @@ def get( self, container: ContractContainer, context: typing.Dict[str, Any] ) -> List[Any]: """Resolves the deployment parameters for a single contract.""" + contract_name = container.contract_type.name resolved_constructor_params = self.constructor_parameters.resolve(contract_name, context) + _validate_constructor_abi( + contract_name=contract_name, + abi_inputs=container.constructor.abi.inputs, + resolved_params=resolved_constructor_params + ) _confirm_resolution(resolved_constructor_params, contract_name) deployment_params = [container, *resolved_constructor_params.values()] return deployment_params From effda85fcfc3f9a92a458b9ca10f8aa87efcdf4c Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 19:56:56 +0200 Subject: [PATCH 029/112] perform abi input name and position validation eagerly --- scripts/deployment.py | 65 ++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/scripts/deployment.py b/scripts/deployment.py index 2dbe0d1f..fd884318 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -4,9 +4,11 @@ from pathlib import Path from typing import Any, List +from ape import project from ape.api import AccountAPI from ape.cli import get_user_selected_account from ape.contracts.base import ContractContainer + from scripts.utils import check_etherscan_plugin, check_registry_filepath VARIABLE_PREFIX = "$" @@ -25,12 +27,14 @@ def prepare_deployment( # pre-deployment checks check_registry_filepath(registry_filepath=registry_filepath) check_etherscan_plugin() - deployer_account = get_user_selected_account() - # load deployment parameters + # load (and implicitly validate) deployment parameters constructor_parameters = ConstructorParameters.from_file(params_filepath) deployment_parameters = ApeDeploymentParameters(constructor_parameters, publish) + # do this last so that the user can see any failed + # pre-deployment checks or validation errors. + deployer_account = get_user_selected_account() return deployer_account, deployment_parameters @@ -96,6 +100,30 @@ def _validate_constructor_param_list( _validate_constructor_param(param, contracts) +def _validate_constructor_abi_inputs( + contract_name: str, + abi_inputs: List[Any], + parameters: OrderedDict +) -> None: + """Validates the constructor parameters against the constructor ABI.""" + if len(parameters) != len(abi_inputs): + raise ConstructorParameters.Invalid( + f"Constructor parameters length mismatch - " + f"{contract_name} ABI requires {len(abi_inputs)}, Got {len(parameters)}." + ) + if not abi_inputs: + return # no constructor parameters + + codex = enumerate(zip(abi_inputs, parameters.items()), start=0) + for position, (abi_input, resolved_input) in codex: + name, value = resolved_input + if abi_input.name != name: + raise ConstructorParameters.Invalid( + f"Constructor parameter name '{name}' does not match the " + f"ABI name '{abi_input.name}' at position {position}" + ) + + def validate_constructor_parameters( config: typing.OrderedDict[str, Any] ) -> None: @@ -107,6 +135,12 @@ def validate_constructor_parameters( _validate_constructor_param_list(value, available_contracts) else: _validate_constructor_param(value, available_contracts) + contract_container = getattr(project, contract) + _validate_constructor_abi_inputs( + contract_name=contract, + abi_inputs=contract_container.constructor.abi.inputs, + parameters=parameters + ) def _confirm_deployment(contract_name: str) -> None: @@ -133,27 +167,6 @@ def _confirm_resolution( _confirm_deployment(contract_name) -def _validate_constructor_abi( - contract_name: str, - abi_inputs: List[Any], - resolved_params: OrderedDict -) -> None: - """Validates the constructor parameters against the constructor ABI.""" - if len(resolved_params) != len(abi_inputs): - raise ConstructorParameters.Invalid( - f"Constructor parameters length for {contract_name} does not match the ABI" - ) - if abi_inputs: - codex = enumerate(zip(abi_inputs, resolved_params.items()), start=0) - for position, (abi_input, resolved_input) in codex: - name, value = resolved_input - if abi_input.name != name: - raise ConstructorParameters.Invalid( - f"Constructor parameter name '{name}' does not match the " - f"ABI name '{abi_input.name}' at position {position}" - ) - - class ConstructorParameters: """Represents the constructor parameters for a set of contracts.""" @@ -192,14 +205,8 @@ def get( self, container: ContractContainer, context: typing.Dict[str, Any] ) -> List[Any]: """Resolves the deployment parameters for a single contract.""" - contract_name = container.contract_type.name resolved_constructor_params = self.constructor_parameters.resolve(contract_name, context) - _validate_constructor_abi( - contract_name=contract_name, - abi_inputs=container.constructor.abi.inputs, - resolved_params=resolved_constructor_params - ) _confirm_resolution(resolved_constructor_params, contract_name) deployment_params = [container, *resolved_constructor_params.values()] return deployment_params From 5081b402520588869734f5763f55596cb9f9198e Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 21 Sep 2023 14:58:02 -0400 Subject: [PATCH 030/112] Only check for etherscan plugin for non-local deployments. --- scripts/utils.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/scripts/utils.py b/scripts/utils.py index dddf5bb9..37a5d65b 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -2,13 +2,12 @@ from pathlib import Path from ape import accounts, project -from web3 import Web3 - from scripts.constants import ( - LOCAL_BLOCKCHAIN_ENVIRONMENTS, CURRENT_NETWORK, - ETHERSCAN_API_KEY_ENVVAR + ETHERSCAN_API_KEY_ENVVAR, + LOCAL_BLOCKCHAIN_ENVIRONMENTS, ) +from web3 import Web3 def deploy_mocks(deployer): @@ -59,10 +58,15 @@ def check_registry_filepath(registry_filepath: Path) -> None: def check_etherscan_plugin() -> None: """Checks that the ape-etherscan plugin is installed and that the ETHERSCAN_API_KEY is set.""" + if CURRENT_NETWORK in LOCAL_BLOCKCHAIN_ENVIRONMENTS: + # unnecessary for local deployment + return + try: import ape_etherscan # noqa: F401 except ImportError: raise ImportError("Please install the ape-etherscan plugin to use this script.") + api_key = os.environ.get(ETHERSCAN_API_KEY_ENVVAR) if not api_key: raise ValueError(f"{ETHERSCAN_API_KEY_ENVVAR} is not set.") From fb996f2024c2dd6638814293c7c2192e4da6ff31 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 21 Sep 2023 15:02:47 -0400 Subject: [PATCH 031/112] Add validation of ABI types for constructor param values. --- scripts/constants.py | 4 +++- scripts/deployment.py | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/scripts/constants.py b/scripts/constants.py index 286fb086..72961e0c 100644 --- a/scripts/constants.py +++ b/scripts/constants.py @@ -1,6 +1,6 @@ from pathlib import Path -from ape import networks, config +from ape import config, networks LOCAL_BLOCKCHAIN_ENVIRONMENTS = ["local"] PRODUCTION_ENVIRONMENTS = ["mainnet", "polygon-main"] @@ -10,3 +10,5 @@ CONSTRUCTOR_PARAMS_DIR = PROJECT_ROOT / "deployments" / "constructor_params" ARTIFACTS_DIR = PROJECT_ROOT / "deployments" / "artifacts" ETHERSCAN_API_KEY_ENVVAR = "ETHERSCAN_API_KEY" + +NULL_ADDRESS = "0x" + "0" * 40 diff --git a/scripts/deployment.py b/scripts/deployment.py index fd884318..b65aabfb 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -8,8 +8,9 @@ from ape.api import AccountAPI from ape.cli import get_user_selected_account from ape.contracts.base import ContractContainer - +from scripts.constants import NULL_ADDRESS from scripts.utils import check_etherscan_plugin, check_registry_filepath +from web3.auto.gethdev import w3 VARIABLE_PREFIX = "$" @@ -117,10 +118,21 @@ def _validate_constructor_abi_inputs( codex = enumerate(zip(abi_inputs, parameters.items()), start=0) for position, (abi_input, resolved_input) in codex: name, value = resolved_input + # validate name if abi_input.name != name: raise ConstructorParameters.Invalid( - f"Constructor parameter name '{name}' does not match the " - f"ABI name '{abi_input.name}' at position {position}" + f"Constructor parameter name '{name}' at position {position} does not match the expected ABI name '{abi_input.name}'" + ) + + # validate value type + value_to_validate = value + if _is_variable(value): + # at the moment only contract addresses are variables + # won't know address until deployment; use a placeholder + value_to_validate = NULL_ADDRESS + if not w3.is_encodable(abi_input.type, value_to_validate): + raise ConstructorParameters.Invalid( + f"Constructor param name '{name}' at position {position} has a value '{value}' whose type does not match expected ABI type '{abi_input.type}'" ) From 7639c684ef054fcb99af9d3ecad008f301d92422 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 21 Sep 2023 15:04:58 -0400 Subject: [PATCH 032/112] Code style cleanup. --- scripts/deployment.py | 54 ++++++++++++------------------------------- 1 file changed, 15 insertions(+), 39 deletions(-) diff --git a/scripts/deployment.py b/scripts/deployment.py index b65aabfb..8364dec2 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -16,9 +16,7 @@ def prepare_deployment( - params_filepath: Path, - registry_filepath: Path, - publish: bool + params_filepath: Path, registry_filepath: Path, publish: bool ) -> typing.Tuple[AccountAPI, "ApeDeploymentParameters"]: """ Prepares the deployment by loading the deployment parameters @@ -45,10 +43,7 @@ def _is_variable(param: Any) -> bool: return result -def _resolve_param( - value: Any, - context: typing.Dict[str, Any] -) -> Any: +def _resolve_param(value: Any, context: typing.Dict[str, Any]) -> Any: """Resolves a single parameter value.""" if not _is_variable(value): return value # literally a value @@ -57,19 +52,13 @@ def _resolve_param( return contract_instance.address -def _resolve_list( - value: List[Any], - context: typing.Dict[str, Any] -) -> List[Any]: +def _resolve_list(value: List[Any], context: typing.Dict[str, Any]) -> List[Any]: """Resolves a list of parameter values.""" params = [_resolve_param(v, context) for v in value] return params -def _resolve_parameters( - parameters: OrderedDict, - context: typing.Dict[str, Any] -) -> OrderedDict: +def _resolve_parameters(parameters: OrderedDict, context: typing.Dict[str, Any]) -> OrderedDict: """Resolves a dictionary of parameter values for a single contract""" resolved_params = OrderedDict() for name, value in parameters.items(): @@ -80,10 +69,7 @@ def _resolve_parameters( return resolved_params -def _validate_constructor_param( - param: Any, - contracts: List[str] -) -> None: +def _validate_constructor_param(param: Any, contracts: List[str]) -> None: """Validates a single constructor parameter.""" if not _is_variable(param): return # literally a value @@ -92,19 +78,14 @@ def _validate_constructor_param( raise ConstructorParameters.Invalid(f"Variable {param} is not resolvable") -def _validate_constructor_param_list( - params: List[Any], - contracts: List[str] -) -> None: +def _validate_constructor_param_list(params: List[Any], contracts: List[str]) -> None: """Validates a list of constructor parameters.""" for param in params: _validate_constructor_param(param, contracts) def _validate_constructor_abi_inputs( - contract_name: str, - abi_inputs: List[Any], - parameters: OrderedDict + contract_name: str, abi_inputs: List[Any], parameters: OrderedDict ) -> None: """Validates the constructor parameters against the constructor ABI.""" if len(parameters) != len(abi_inputs): @@ -121,7 +102,8 @@ def _validate_constructor_abi_inputs( # validate name if abi_input.name != name: raise ConstructorParameters.Invalid( - f"Constructor parameter name '{name}' at position {position} does not match the expected ABI name '{abi_input.name}'" + f"Constructor parameter name '{name}' at position {position} does not " + f"match the expected ABI name '{abi_input.name}'" ) # validate value type @@ -132,13 +114,12 @@ def _validate_constructor_abi_inputs( value_to_validate = NULL_ADDRESS if not w3.is_encodable(abi_input.type, value_to_validate): raise ConstructorParameters.Invalid( - f"Constructor param name '{name}' at position {position} has a value '{value}' whose type does not match expected ABI type '{abi_input.type}'" + f"Constructor param name '{name}' at position {position} has a value '{value}' " + f"whose type does not match expected ABI type '{abi_input.type}'" ) -def validate_constructor_parameters( - config: typing.OrderedDict[str, Any] -) -> None: +def validate_constructor_parameters(config: typing.OrderedDict[str, Any]) -> None: """Validates the constructor parameters for all contracts in a single config.""" available_contracts = list(config.keys()) for contract, parameters in config.items(): @@ -151,7 +132,7 @@ def validate_constructor_parameters( _validate_constructor_abi_inputs( contract_name=contract, abi_inputs=contract_container.constructor.abi.inputs, - parameters=parameters + parameters=parameters, ) @@ -163,10 +144,7 @@ def _confirm_deployment(contract_name: str) -> None: exit(-1) -def _confirm_resolution( - resolved_params: OrderedDict, - contract_name: str -) -> None: +def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> None: """Asks the user to confirm the resolved constructor parameters for a single contract.""" if len(resolved_params) == 0: print(f"(i) No constructor parameters for {contract_name}") @@ -213,9 +191,7 @@ def get_kwargs(self) -> typing.Dict[str, Any]: """Returns the deployment kwargs.""" return {"publish": self.publish} - def get( - self, container: ContractContainer, context: typing.Dict[str, Any] - ) -> List[Any]: + def get(self, container: ContractContainer, context: typing.Dict[str, Any]) -> List[Any]: """Resolves the deployment parameters for a single contract.""" contract_name = container.contract_type.name resolved_constructor_params = self.constructor_parameters.resolve(contract_name, context) From 70c5f1aba4b9ee054776bdfd8c87f0278b6d6a57 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 21 Sep 2023 15:28:55 -0400 Subject: [PATCH 033/112] Handle lists of variables when validating abi type. --- scripts/deployment.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/scripts/deployment.py b/scripts/deployment.py index 8364dec2..f05278fb 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -1,6 +1,6 @@ import json import typing -from collections import OrderedDict +from collections import OrderedDict, defaultdict from pathlib import Path from typing import Any, List @@ -111,7 +111,11 @@ def _validate_constructor_abi_inputs( if _is_variable(value): # at the moment only contract addresses are variables # won't know address until deployment; use a placeholder - value_to_validate = NULL_ADDRESS + context = defaultdict(PlacehodlerContractInstance) + if isinstance(value, list): + value_to_validate = _resolve_list(value, context) + else: + value_to_validate = _resolve_param(value, context) if not w3.is_encodable(abi_input.type, value_to_validate): raise ConstructorParameters.Invalid( f"Constructor param name '{name}' at position {position} has a value '{value}' " @@ -157,6 +161,10 @@ def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> Non _confirm_deployment(contract_name) +class PlacehodlerContractInstance(typing.NamedTuple): + address: str = NULL_ADDRESS + + class ConstructorParameters: """Represents the constructor parameters for a set of contracts.""" From ee5f5e3ba731e9636b3349fb850d2b6abaaae8cf Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 21:17:32 +0200 Subject: [PATCH 034/112] Require the ape-infura plugin to execute scripts (prepares for deeper integration) --- scripts/constants.py | 2 +- scripts/deployment.py | 10 ++++++++-- scripts/utils.py | 17 ++++++++++++++++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/scripts/constants.py b/scripts/constants.py index 72961e0c..24a596d8 100644 --- a/scripts/constants.py +++ b/scripts/constants.py @@ -10,5 +10,5 @@ CONSTRUCTOR_PARAMS_DIR = PROJECT_ROOT / "deployments" / "constructor_params" ARTIFACTS_DIR = PROJECT_ROOT / "deployments" / "artifacts" ETHERSCAN_API_KEY_ENVVAR = "ETHERSCAN_API_KEY" - +WEB3_INFURA_API_KEY_ENVVAR = "WEB3_INFURA_API_KEY" NULL_ADDRESS = "0x" + "0" * 40 diff --git a/scripts/deployment.py b/scripts/deployment.py index f05278fb..9099f432 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -8,10 +8,15 @@ from ape.api import AccountAPI from ape.cli import get_user_selected_account from ape.contracts.base import ContractContainer -from scripts.constants import NULL_ADDRESS -from scripts.utils import check_etherscan_plugin, check_registry_filepath from web3.auto.gethdev import w3 +from scripts.constants import NULL_ADDRESS +from scripts.utils import ( + check_etherscan_plugin, + check_registry_filepath, + check_infura_plugin +) + VARIABLE_PREFIX = "$" @@ -26,6 +31,7 @@ def prepare_deployment( # pre-deployment checks check_registry_filepath(registry_filepath=registry_filepath) check_etherscan_plugin() + check_infura_plugin() # load (and implicitly validate) deployment parameters constructor_parameters = ConstructorParameters.from_file(params_filepath) diff --git a/scripts/utils.py b/scripts/utils.py index 37a5d65b..3f54d615 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -2,12 +2,14 @@ from pathlib import Path from ape import accounts, project +from web3 import Web3 + from scripts.constants import ( CURRENT_NETWORK, ETHERSCAN_API_KEY_ENVVAR, LOCAL_BLOCKCHAIN_ENVIRONMENTS, + WEB3_INFURA_API_KEY_ENVVAR ) -from web3 import Web3 def deploy_mocks(deployer): @@ -72,3 +74,16 @@ def check_etherscan_plugin() -> None: raise ValueError(f"{ETHERSCAN_API_KEY_ENVVAR} is not set.") if not len(api_key) == 34: raise ValueError(f"{ETHERSCAN_API_KEY_ENVVAR} is not valid.") + + +def check_infura_plugin() -> None: + """Checks that the ape-infura plugin is installed.""" + try: + import ape_infura # noqa: F401 + except ImportError: + raise ImportError("Please install the ape-infura plugin to use this script.") + api_key = os.environ.get(WEB3_INFURA_API_KEY_ENVVAR) + if not api_key: + raise ValueError(f"{WEB3_INFURA_API_KEY_ENVVAR} is not set.") + if not len(api_key) == 32: + raise ValueError(f"{WEB3_INFURA_API_KEY_ENVVAR} is not valid.") From 442709a196899127352d704e6daa27f096a27d52 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 22:50:33 +0200 Subject: [PATCH 035/112] Includes GlobalAllowList in lynx deployment script --- deployments/constructor_params/lynx-alpha-13-params.json | 4 ++++ scripts/deploy_lynx.py | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/deployments/constructor_params/lynx-alpha-13-params.json b/deployments/constructor_params/lynx-alpha-13-params.json index 4667892c..973a7ad5 100644 --- a/deployments/constructor_params/lynx-alpha-13-params.json +++ b/deployments/constructor_params/lynx-alpha-13-params.json @@ -13,5 +13,9 @@ "_admin": "0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600", "_currency": "$LynxRitualToken", "_feeRatePerSecond": 1 + }, + "GlobalAllowList": { + "_coordinator": "$Coordinator", + "_admin": "0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600" } } diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 8a0bc049..ea1c582c 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -57,7 +57,11 @@ def main(): LynxTACoChildApplication.setCoordinator(Coordinator.address, sender=deployer) - deployments = [LynxRootApplication, LynxTACoChildApplication, LynxRitualToken, Coordinator] + GlobalAllowList = deployer.deploy( + *params.get(project.GlobalAllowList, locals()), **params.get_kwargs() + ) + + deployments = [LynxRootApplication, LynxTACoChildApplication, LynxRitualToken, Coordinator, GlobalAllowList] registry_names = { LynxRootApplication.contract_type.name: "TACoApplication", From 0023a649c53c4507ef121896dfdb1f248bb9cb33 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Thu, 21 Sep 2023 23:01:57 +0200 Subject: [PATCH 036/112] skip infura plugin check during local development --- scripts/utils.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/utils.py b/scripts/utils.py index 3f54d615..c19b075f 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -78,6 +78,10 @@ def check_etherscan_plugin() -> None: def check_infura_plugin() -> None: """Checks that the ape-infura plugin is installed.""" + if CURRENT_NETWORK in LOCAL_BLOCKCHAIN_ENVIRONMENTS: + # unnecessary for local deployment + return + try: import ape_infura # noqa: F401 except ImportError: From 0a9d66b22e2451d89fefdf5f081a8413e3f19f89 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 21 Sep 2023 20:02:08 -0400 Subject: [PATCH 037/112] Add code to merge two nucypher-style registries into one. --- scripts/registry.py | 95 +++++++++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 29 deletions(-) diff --git a/scripts/registry.py b/scripts/registry.py index 8a02cd59..fd2136b1 100644 --- a/scripts/registry.py +++ b/scripts/registry.py @@ -1,12 +1,23 @@ import json from pathlib import Path -from typing import List, Optional, Dict +from typing import Dict, List, NamedTuple, Optional from ape.contracts import ContractInstance +from eth_typing import ChecksumAddress from eth_utils import to_checksum_address +from scripts.utils import check_registry_filepath -def _get_abi(contract_instance: ContractInstance) -> List[dict]: +class RegistryEntry(NamedTuple): + """Represents a single entry in a nucypher-style contract registry.""" + + contract_name: str + contract_version: str # TODO: remove version from registry + contract_address: ChecksumAddress + contract_abi: List[Dict] + + +def _get_abi(contract_instance: ContractInstance) -> List[Dict]: """Returns the ABI of a contract instance.""" contract_abi = [] for entry in contract_instance.contract_type.abi: @@ -15,8 +26,7 @@ def _get_abi(contract_instance: ContractInstance) -> List[dict]: def _get_name( - contract_instance: ContractInstance, - registry_names: Dict[ContractInstance, str] + contract_instance: ContractInstance, registry_names: Dict[ContractInstance, str] ) -> str: """ Returns the optionally remapped registry name of a contract instance. @@ -25,33 +35,39 @@ def _get_name( real_contract_name = contract_instance.contract_type.name contract_name = registry_names.get( real_contract_name, # look up name in registry_names - real_contract_name # default to the real contract name + real_contract_name, # default to the real contract name ) return contract_name def _get_entry( - contract_instance: ContractInstance, - registry_names: Dict[ContractInstance, str] -) -> List[str]: + contract_instance: ContractInstance, registry_names: Dict[ContractInstance, str] +) -> RegistryEntry: contract_abi = _get_abi(contract_instance) - contract_name = _get_name( - contract_instance=contract_instance, - registry_names=registry_names + contract_name = _get_name(contract_instance=contract_instance, registry_names=registry_names) + entry = RegistryEntry( + contract_name=contract_name, + contract_version="v0.0.0", + contract_address=to_checksum_address(contract_instance.address), + contract_abi=contract_abi, ) - entry = [ - contract_name, - "v0.0.0", # TODO: remove version from registry - to_checksum_address(contract_instance.address), - contract_abi, - ] return entry -def _write_registry( - data: List[List[str]], - filepath: Path -) -> Path: +def _read_registry(filepath: Path) -> List[RegistryEntry]: + with open(filepath, "r") as registry_file: + json_data = json.load(registry_file) + + registry_entries = list() + # convert to registry entry + for json_entry in json_data: + registry_entry = RegistryEntry(*json_entry) + registry_entries.append(registry_entry) + + return registry_entries + + +def _write_registry(data: List[RegistryEntry], filepath: Path) -> Path: with open(filepath, "w") as registry_file: json_data = json.dumps(data) registry_file.write(json_data) @@ -69,15 +85,36 @@ def registry_from_ape_deployments( registry_data = list() for contract_instance in deployments: - entry = _get_entry( - contract_instance=contract_instance, - registry_names=registry_names - ) + entry = _get_entry(contract_instance=contract_instance, registry_names=registry_names) registry_data.append(entry) - output_filepath = _write_registry( - data=registry_data, - filepath=output_filepath - ) + output_filepath = _write_registry(data=registry_data, filepath=output_filepath) + + return output_filepath + + +def merge_registries( + registry_1_filepath: Path, + registry_2_filepath: Path, + output_filepath: Path, +) -> Path: + """Merges two nucypher-style contract registries created from ape deployments API.""" + check_registry_filepath(registry_filepath=output_filepath) + + registry_1_entries = _read_registry(registry_1_filepath) + registry_2_entries = _read_registry(registry_2_filepath) + + # handle case of conflicting contract names + registry_1_contract_names = {entry.contract_name for entry in registry_1_entries} + registry_2_contract_names = {entry.contract_name for entry in registry_2_entries} + + common_contracts = registry_1_contract_names.intersection(registry_2_contract_names) + if len(common_contracts) > 0: + print(f"Provided registries have conflicting contracts: {common_contracts}") + print("Aborting merge!") + exit(-1) + + combined_entries = [*registry_1_entries, *registry_2_entries] + _write_registry(data=combined_entries, filepath=output_filepath) return output_filepath From ee531ec8abc2c5ddcd47693e8f3edf81ec065bf5 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Thu, 21 Sep 2023 21:17:58 -0400 Subject: [PATCH 038/112] Spread out deployment output using newlines. --- scripts/deployment.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/scripts/deployment.py b/scripts/deployment.py index 9099f432..3a782b78 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -8,14 +8,9 @@ from ape.api import AccountAPI from ape.cli import get_user_selected_account from ape.contracts.base import ContractContainer -from web3.auto.gethdev import w3 - from scripts.constants import NULL_ADDRESS -from scripts.utils import ( - check_etherscan_plugin, - check_registry_filepath, - check_infura_plugin -) +from scripts.utils import check_etherscan_plugin, check_infura_plugin, check_registry_filepath +from web3.auto.gethdev import w3 VARIABLE_PREFIX = "$" @@ -157,11 +152,11 @@ def _confirm_deployment(contract_name: str) -> None: def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> None: """Asks the user to confirm the resolved constructor parameters for a single contract.""" if len(resolved_params) == 0: - print(f"(i) No constructor parameters for {contract_name}") + print(f"\n(i) No constructor parameters for {contract_name}") _confirm_deployment(contract_name) return - print(f"Constructor parameters for {contract_name}") + print(f"\nConstructor parameters for {contract_name}") for name, resolved_value in resolved_params.items(): print(f"\t{name}={resolved_value}") _confirm_deployment(contract_name) From 3d75c81b34ae9d805f26abaa990f7e7fee656371 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Fri, 22 Sep 2023 14:38:30 +0200 Subject: [PATCH 039/112] Removes the need for locals() context by accessing deployments via ape contract containers --- scripts/deploy_lynx.py | 42 +++++++++++++++++++++++-------------- scripts/deployment.py | 47 ++++++++++++++++++++++-------------------- 2 files changed, 51 insertions(+), 38 deletions(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index ea1c582c..907420d1 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -35,37 +35,47 @@ def main(): publish=PUBLISH ) - LynxRootApplication = deployer.deploy( - *params.get(project.LynxRootApplication, locals()), **params.get_kwargs() + root_application = deployer.deploy( + *params.get(project.LynxRootApplication), **params.get_kwargs() ) - LynxTACoChildApplication = deployer.deploy( - *params.get(project.LynxTACoChildApplication, locals()), **params.get_kwargs() + child_application = deployer.deploy( + *params.get(project.LynxTACoChildApplication), **params.get_kwargs() ) - LynxRootApplication.setChildApplication( - LynxTACoChildApplication.address, + root_application.setChildApplication( + child_application.address, sender=deployer, ) - LynxRitualToken = deployer.deploy( - *params.get(project.LynxRitualToken, locals()), **params.get_kwargs() + ritual_token = deployer.deploy( + *params.get(project.LynxRitualToken), **params.get_kwargs() ) - # Lynx Coordinator - Coordinator = deployer.deploy(*params.get(project.Coordinator, locals()), **params.get_kwargs()) + coordinator = deployer.deploy( + *params.get(project.Coordinator), **params.get_kwargs() + ) - LynxTACoChildApplication.setCoordinator(Coordinator.address, sender=deployer) + child_application.setCoordinator( + coordinator.address, + sender=deployer + ) - GlobalAllowList = deployer.deploy( - *params.get(project.GlobalAllowList, locals()), **params.get_kwargs() + global_allow_list = deployer.deploy( + *params.get(project.GlobalAllowList), **params.get_kwargs() ) - deployments = [LynxRootApplication, LynxTACoChildApplication, LynxRitualToken, Coordinator, GlobalAllowList] + deployments = [ + root_application, + child_application, + ritual_token, + coordinator, + global_allow_list + ] registry_names = { - LynxRootApplication.contract_type.name: "TACoApplication", - LynxTACoChildApplication.contract_type.name: "TACoChildApplication", + root_application.contract_type.name: "TACoApplication", + child_application.contract_type.name: "TACoChildApplication", } output_filepath = registry_from_ape_deployments( diff --git a/scripts/deployment.py b/scripts/deployment.py index 3a782b78..b6d0f576 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -1,6 +1,6 @@ import json import typing -from collections import OrderedDict, defaultdict +from collections import OrderedDict from pathlib import Path from typing import Any, List @@ -8,9 +8,10 @@ from ape.api import AccountAPI from ape.cli import get_user_selected_account from ape.contracts.base import ContractContainer +from web3.auto.gethdev import w3 + from scripts.constants import NULL_ADDRESS from scripts.utils import check_etherscan_plugin, check_infura_plugin, check_registry_filepath -from web3.auto.gethdev import w3 VARIABLE_PREFIX = "$" @@ -44,29 +45,38 @@ def _is_variable(param: Any) -> bool: return result -def _resolve_param(value: Any, context: typing.Dict[str, Any]) -> Any: +def _resolve_param(value: Any) -> Any: """Resolves a single parameter value.""" if not _is_variable(value): return value # literally a value variable = value.strip(VARIABLE_PREFIX) - contract_instance = context[variable] + contract_container = getattr(project, variable) + contract_instances = contract_container.deployments + if not contract_instances: + return NULL_ADDRESS + if len(contract_instances) != 1: + raise ConstructorParameters.Invalid( + f"Variable {value} is ambiguous - " + f"expected exactly one contract instance, got {len(contract_instances)}" + ) + contract_instance = contract_instances[0] return contract_instance.address -def _resolve_list(value: List[Any], context: typing.Dict[str, Any]) -> List[Any]: +def _resolve_list(value: List[Any]) -> List[Any]: """Resolves a list of parameter values.""" - params = [_resolve_param(v, context) for v in value] + params = [_resolve_param(v) for v in value] return params -def _resolve_parameters(parameters: OrderedDict, context: typing.Dict[str, Any]) -> OrderedDict: +def _resolve_parameters(parameters: OrderedDict) -> OrderedDict: """Resolves a dictionary of parameter values for a single contract""" resolved_params = OrderedDict() for name, value in parameters.items(): if isinstance(value, list): - resolved_params[name] = _resolve_list(value, context) + resolved_params[name] = _resolve_list(value) else: - resolved_params[name] = _resolve_param(value, context) + resolved_params[name] = _resolve_param(value) return resolved_params @@ -110,13 +120,10 @@ def _validate_constructor_abi_inputs( # validate value type value_to_validate = value if _is_variable(value): - # at the moment only contract addresses are variables - # won't know address until deployment; use a placeholder - context = defaultdict(PlacehodlerContractInstance) if isinstance(value, list): - value_to_validate = _resolve_list(value, context) + value_to_validate = _resolve_list(value) else: - value_to_validate = _resolve_param(value, context) + value_to_validate = _resolve_param(value) if not w3.is_encodable(abi_input.type, value_to_validate): raise ConstructorParameters.Invalid( f"Constructor param name '{name}' at position {position} has a value '{value}' " @@ -162,10 +169,6 @@ def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> Non _confirm_deployment(contract_name) -class PlacehodlerContractInstance(typing.NamedTuple): - address: str = NULL_ADDRESS - - class ConstructorParameters: """Represents the constructor parameters for a set of contracts.""" @@ -183,9 +186,9 @@ def from_file(cls, filepath: Path) -> "ConstructorParameters": config = OrderedDict(json.load(params_file)) return cls(config) - def resolve(self, contract_name: str, context: typing.Dict[str, Any]) -> OrderedDict: + def resolve(self, contract_name: str) -> OrderedDict: """Resolves the constructor parameters for a single contract.""" - result = _resolve_parameters(self.parameters[contract_name], context) + result = _resolve_parameters(self.parameters[contract_name]) return result @@ -200,10 +203,10 @@ def get_kwargs(self) -> typing.Dict[str, Any]: """Returns the deployment kwargs.""" return {"publish": self.publish} - def get(self, container: ContractContainer, context: typing.Dict[str, Any]) -> List[Any]: + def get(self, container: ContractContainer) -> List[Any]: """Resolves the deployment parameters for a single contract.""" contract_name = container.contract_type.name - resolved_constructor_params = self.constructor_parameters.resolve(contract_name, context) + resolved_constructor_params = self.constructor_parameters.resolve(contract_name) _confirm_resolution(resolved_constructor_params, contract_name) deployment_params = [container, *resolved_constructor_params.values()] return deployment_params From 924c81f8b3dcc62eb5ef50a19916b9f828121262 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 22 Sep 2023 12:04:37 -0400 Subject: [PATCH 040/112] Indent json when writing registry file. --- scripts/registry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/registry.py b/scripts/registry.py index fd2136b1..ed5de103 100644 --- a/scripts/registry.py +++ b/scripts/registry.py @@ -69,7 +69,7 @@ def _read_registry(filepath: Path) -> List[RegistryEntry]: def _write_registry(data: List[RegistryEntry], filepath: Path) -> Path: with open(filepath, "w") as registry_file: - json_data = json.dumps(data) + json_data = json.dumps(data, indent=4) registry_file.write(json_data) return filepath From 34c10faf2c3282d6f156bdd3433f710dea577c47 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 22 Sep 2023 12:05:51 -0400 Subject: [PATCH 041/112] Allow merge conflict resolution options when merging two contract registries. --- scripts/registry.py | 93 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 81 insertions(+), 12 deletions(-) diff --git a/scripts/registry.py b/scripts/registry.py index ed5de103..5f0ec30d 100644 --- a/scripts/registry.py +++ b/scripts/registry.py @@ -1,4 +1,5 @@ import json +from enum import Enum from pathlib import Path from typing import Dict, List, NamedTuple, Optional @@ -74,6 +75,40 @@ def _write_registry(data: List[RegistryEntry], filepath: Path) -> Path: return filepath +class ConflictResolution(Enum): + USE_1 = 1 + USE_2 = 2 + + +def _select_conflict_resolution( + registry_1_entry, registry_1_filepath, registry_2_entry, registry_2_filepath +) -> ConflictResolution: + print(f"\n! Conflict detected for {registry_1_entry.contract_name}:") + print( + f"[1]: {registry_1_entry.contract_name} at {registry_1_entry.contract_address} " + f"for {registry_1_filepath}" + ) + print( + f"[2]: {registry_2_entry.contract_name} at {registry_2_entry.contract_address} " + f"for {registry_2_filepath}" + ) + print("[A]: Abort merge") + + valid_str_answers = [ + str(ConflictResolution.USE_1.value), + str(ConflictResolution.USE_2.value), + "A", + ] + answer = None + while answer not in valid_str_answers: + answer = input(f"Merge resolution, {valid_str_answers}? ") + + if answer == "A": + print("Merge Aborted!") + exit(-1) + return ConflictResolution(int(answer)) + + def registry_from_ape_deployments( deployments: List[ContractInstance], output_filepath: Path, @@ -97,6 +132,7 @@ def merge_registries( registry_1_filepath: Path, registry_2_filepath: Path, output_filepath: Path, + deprecated_contracts: Optional[List[str]] = None, ) -> Path: """Merges two nucypher-style contract registries created from ape deployments API.""" check_registry_filepath(registry_filepath=output_filepath) @@ -104,17 +140,50 @@ def merge_registries( registry_1_entries = _read_registry(registry_1_filepath) registry_2_entries = _read_registry(registry_2_filepath) - # handle case of conflicting contract names - registry_1_contract_names = {entry.contract_name for entry in registry_1_entries} - registry_2_contract_names = {entry.contract_name for entry in registry_2_entries} - - common_contracts = registry_1_contract_names.intersection(registry_2_contract_names) - if len(common_contracts) > 0: - print(f"Provided registries have conflicting contracts: {common_contracts}") - print("Aborting merge!") - exit(-1) - - combined_entries = [*registry_1_entries, *registry_2_entries] - _write_registry(data=combined_entries, filepath=output_filepath) + deprecated_contracts = [] if deprecated_contracts is None else deprecated_contracts + + # obtain dictionary of contract name -> registry entry + # exclude any deprecated contracts + registry_1_contracts_dict = { + entry.contract_name: entry + for entry in registry_1_entries + if entry.contract_name not in deprecated_contracts + } + registry_2_contracts_dict = { + entry.contract_name: entry + for entry in registry_2_entries + if entry.contract_name not in deprecated_contracts + } + + merged_entries = [] + + # registry 1 entries + registry_1_contract_names = list(registry_1_contracts_dict.keys()) + for contract_name in registry_1_contract_names: + registry_1_entry = registry_1_contracts_dict[contract_name] + if contract_name in registry_2_contracts_dict: + # conflict found + registry_2_entry = registry_2_contracts_dict[contract_name] + result = _select_conflict_resolution( + registry_1_entry, registry_1_filepath, registry_2_entry, registry_2_filepath + ) + if result == ConflictResolution.USE_1: + merged_entries.append(registry_1_entry) + else: + # USE_2 + merged_entries.append(registry_2_entry) + + # ensure registry_2 entry not repeated + # either usurped by registry_entry_1 OR already added to combined list + del registry_2_contracts_dict[contract_name] + continue + + merged_entries.append(registry_1_entry) + + # registry 2 entries + merged_entries.extend(registry_2_contracts_dict.values()) + + _write_registry(data=merged_entries, filepath=output_filepath) + print(f"Merged registry output to {output_filepath}") return output_filepath From 80b3de1573e42091b3261f9e7f4c0ef82fe46346 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Fri, 22 Sep 2023 19:20:00 +0200 Subject: [PATCH 042/112] lynx-alpha-13-mumbai-registry.json --- .../artifacts/lynx-alpha-13-registry.json | 2706 +++++++++++++++++ 1 file changed, 2706 insertions(+) create mode 100644 deployments/artifacts/lynx-alpha-13-registry.json diff --git a/deployments/artifacts/lynx-alpha-13-registry.json b/deployments/artifacts/lynx-alpha-13-registry.json new file mode 100644 index 00000000..14441931 --- /dev/null +++ b/deployments/artifacts/lynx-alpha-13-registry.json @@ -0,0 +1,2706 @@ +[ + [ + "TACoApplication", + "v0.0.0", + "0xe9e6C183fadD057b8972E12471B212288b1ca6E6", + [ + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "childApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setChildApplication", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_childApplication", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "TACoChildApplication", + "v0.0.0", + "0x099a6128710F7e30Ed8740644F40EE6d3e6673D1", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_rootApplication", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "event", + "name": "AuthorizationUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "internalType": "uint8", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "authorizedStake", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "coordinator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "initialize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "rootApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "function", + "name": "setCoordinator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "stakingProviderFromOperator", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "stakingProviderInfo", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "operatorConfirmed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "authorized", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "LynxRitualToken", + "v0.0.0", + "0x871EbA00295fF9c329dbCF2Cd329cd89FD926192", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_totalSupplyOfTokens", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "spender", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "to", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "allowance", + "stateMutability": "view", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "approve", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "balanceOf", + "stateMutability": "view", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "decimals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ] + }, + { + "type": "function", + "name": "decreaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "subtractedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "increaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "addedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "name", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "symbol", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "totalSupply", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "transfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "transferFrom", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + } + ] + ], + [ + "Coordinator", + "v0.0.0", + "0x7c8EA2d03fA65088fA85B889da365035555e4394", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_application", + "type": "address", + "internalType": "contract ITACoChildApplication" + }, + { + "name": "_timeout", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_maxDkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + }, + { + "name": "_currency", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "_feeRatePerSecond", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "AggregationPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "aggregatedTranscriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeScheduled", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48", + "indexed": false + }, + { + "name": "effectSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferScheduled", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "acceptSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EndRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "successful", + "type": "bool", + "internalType": "bool", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MaxDkgSizeChanged", + "inputs": [ + { + "name": "oldSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + }, + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParticipantPublicKeySet", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "participant", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "newAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartAggregationRound", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "authority", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "participants", + "type": "address[]", + "internalType": "address[]", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TimeoutChanged", + "inputs": [ + { + "name": "oldTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + }, + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TranscriptPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "transcriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "INITIATOR_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "TREASURY_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "acceptDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "application", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildApplication" + } + ] + }, + { + "type": "function", + "name": "beginDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cancelDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "changeDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cohortFingerprint", + "stateMutability": "pure", + "inputs": [ + { + "name": "nodes", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "currency", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ] + }, + { + "type": "function", + "name": "defaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelayIncreaseWait", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "feeRatePerSecond", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getAuthority", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "getParticipantFromProvider", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant" + } + ] + }, + { + "type": "function", + "name": "getParticipants", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant[]" + } + ] + }, + { + "type": "function", + "name": "getProviderPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + }, + { + "name": "_ritualId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ] + }, + { + "type": "function", + "name": "getPublicKeyFromRitualId", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ] + }, + { + "type": "function", + "name": "getRitualIdFromPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ], + "outputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "getRitualInitiationCost", + "stateMutability": "view", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getRitualState", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum Coordinator.RitualState" + } + ] + }, + { + "type": "function", + "name": "getRoleAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "getThresholdForRitualSize", + "stateMutability": "pure", + "inputs": [ + { + "name": "size", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "grantRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "hasRole", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "initiateRitual", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "isEncryptionAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "evidence", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "ciphertextHeader", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isInitiationPublic", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isProviderPublicKeySet", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isRitualFinalized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "makeInitiationPublic", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "maxDkgSize", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "numberOfRituals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingFees", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "postAggregation", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "postTranscript", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "processPendingFee", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "renounceRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "revokeRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "rituals", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "initiator", + "type": "address", + "internalType": "address" + }, + { + "name": "initTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "endTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "totalTranscripts", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "totalAggregations", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "dkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "threshold", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "aggregationMismatch", + "type": "bool", + "internalType": "bool" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "function", + "name": "rollbackDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setMaxDkgSize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setProviderPublicKey", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setReimbursementPool", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "contract IReimbursementPool" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setRitualAuthority", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setTimeout", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "supportsInterface", + "stateMutability": "view", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "timeout", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "totalPendingFees", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "withdrawTokens", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [] + } + ] + ], + [ + "GlobalAllowList", + "v0.0.0", + "0xa7aF704855EA2a2513C56212D45b86287205520E", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "contract Coordinator" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeScheduled", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48", + "indexed": false + }, + { + "name": "effectSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferScheduled", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "acceptSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "newAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "acceptDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "authorize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "addresses", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "beginDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cancelDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "changeDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "coordinator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract Coordinator" + } + ] + }, + { + "type": "function", + "name": "deauthorize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "addresses", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "defaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelayIncreaseWait", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "getRoleAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "grantRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "hasRole", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isAddressAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "encryptor", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "evidence", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "ciphertextHeader", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "renounceRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "revokeRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "rollbackDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setCoordinator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "contract Coordinator" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "supportsInterface", + "stateMutability": "view", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + } + ] + ] +] \ No newline at end of file From 8ae98d0527fcceead14da3f00f9d98384a630caf Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Fri, 22 Sep 2023 20:02:11 +0200 Subject: [PATCH 043/112] Adds missing or incorrect AGPL 3+ licenses --- contracts/contracts/coordination/GlobalAllowList.sol | 2 ++ contracts/contracts/coordination/IEncryptionAuthorizer.sol | 2 ++ contracts/contracts/coordination/TACoChildApplication.sol | 2 +- contracts/threshold/ITACoChildApplication.sol | 2 +- contracts/xchain/PolygonChild.sol | 3 ++- contracts/xchain/PolygonRoot.sol | 3 ++- 6 files changed, 10 insertions(+), 4 deletions(-) diff --git a/contracts/contracts/coordination/GlobalAllowList.sol b/contracts/contracts/coordination/GlobalAllowList.sol index f0cd5c12..01f0f07b 100644 --- a/contracts/contracts/coordination/GlobalAllowList.sol +++ b/contracts/contracts/coordination/GlobalAllowList.sol @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/AccessControlDefaultAdminRules.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; diff --git a/contracts/contracts/coordination/IEncryptionAuthorizer.sol b/contracts/contracts/coordination/IEncryptionAuthorizer.sol index a38259c6..b0093df0 100644 --- a/contracts/contracts/coordination/IEncryptionAuthorizer.sol +++ b/contracts/contracts/coordination/IEncryptionAuthorizer.sol @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later + pragma solidity ^0.8.0; interface IEncryptionAuthorizer { diff --git a/contracts/contracts/coordination/TACoChildApplication.sol b/contracts/contracts/coordination/TACoChildApplication.sol index 721c2846..609f58ff 100644 --- a/contracts/contracts/coordination/TACoChildApplication.sol +++ b/contracts/contracts/coordination/TACoChildApplication.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: MIT +// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; diff --git a/contracts/threshold/ITACoChildApplication.sol b/contracts/threshold/ITACoChildApplication.sol index a40490de..05f392e2 100644 --- a/contracts/threshold/ITACoChildApplication.sol +++ b/contracts/threshold/ITACoChildApplication.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: GPL-3.0-or-later +// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; diff --git a/contracts/xchain/PolygonChild.sol b/contracts/xchain/PolygonChild.sol index 78010023..856d0628 100644 --- a/contracts/xchain/PolygonChild.sol +++ b/contracts/xchain/PolygonChild.sol @@ -1,4 +1,5 @@ -// SPDX-License-Identifier: MIT +// SPDX-License-Identifier: AGPL-3.0-or-later + pragma solidity ^0.8.0; import "@fx-portal/contracts/tunnel/FxBaseChildTunnel.sol"; diff --git a/contracts/xchain/PolygonRoot.sol b/contracts/xchain/PolygonRoot.sol index 9ac3ebea..7838930b 100644 --- a/contracts/xchain/PolygonRoot.sol +++ b/contracts/xchain/PolygonRoot.sol @@ -1,4 +1,5 @@ -// SPDX-License-Identifier: MIT +// SPDX-License-Identifier: AGPL-3.0-or-later + pragma solidity ^0.8.0; import "@fx-portal/contracts/tunnel/FxBaseRootTunnel.sol"; From dfc43aebf556b125b72f37967a7204e64c780839 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Fri, 22 Sep 2023 20:02:51 +0200 Subject: [PATCH 044/112] verify lynx contracts with standalone script --- scripts/verify_contract.py | 4 ---- scripts/verify_lynx.py | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) delete mode 100644 scripts/verify_contract.py create mode 100644 scripts/verify_lynx.py diff --git a/scripts/verify_contract.py b/scripts/verify_contract.py deleted file mode 100644 index dbef6434..00000000 --- a/scripts/verify_contract.py +++ /dev/null @@ -1,4 +0,0 @@ -from ape import networks - -etherscan = networks.provider.network.explorer -etherscan.publish_contract("0xc7590Ba497d1A7AB82c1BD61f7Dcd2685990986e") diff --git a/scripts/verify_lynx.py b/scripts/verify_lynx.py new file mode 100644 index 00000000..e97424c6 --- /dev/null +++ b/scripts/verify_lynx.py @@ -0,0 +1,14 @@ +from ape import networks, project + +deployments = [ + project.LynxRootApplication.at('0xe9e6C183fadD057b8972E12471B212288b1ca6E6'), + project.LynxTACoChildApplication.at('0x099a6128710F7e30Ed8740644F40EE6d3e6673D1'), + project.LynxRitualToken.at('0x871EbA00295fF9c329dbCF2Cd329cd89FD926192'), + project.Coordinator.at('0x7c8EA2d03fA65088fA85B889da365035555e4394'), + project.GlobalAllowList.at('0xa7aF704855EA2a2513C56212D45b86287205520E'), +] + +etherscan = networks.provider.network.explorer +for deployment in deployments: + print(f"(i) Verifying {deployment.contract_type.name}...") + etherscan.publish_contract(deployment.address) From d60d2adf6ff4bf4cb9ff5796df001d9b6f7242e5 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Fri, 22 Sep 2023 19:58:34 +0200 Subject: [PATCH 045/112] Deletes test registry --- .../lynx-alpha-13-registry-test.json | 2179 ----------------- 1 file changed, 2179 deletions(-) delete mode 100644 deployments/artifacts/lynx-alpha-13-registry-test.json diff --git a/deployments/artifacts/lynx-alpha-13-registry-test.json b/deployments/artifacts/lynx-alpha-13-registry-test.json deleted file mode 100644 index 33bf51ca..00000000 --- a/deployments/artifacts/lynx-alpha-13-registry-test.json +++ /dev/null @@ -1,2179 +0,0 @@ -[ - [ - "TACoApplication", - "v0.0.0", - "0x274b028b03A250cA03644E6c578D81f019eE1323", - [ - { - "type": "event", - "name": "OperatorConfirmed", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "newOwner", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "childApplication", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoRootToChild" - } - ] - }, - { - "type": "function", - "name": "confirmOperatorAddress", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "renounceOwnership", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setChildApplication", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_childApplication", - "type": "address", - "internalType": "contract ITACoRootToChild" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "transferOwnership", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateAuthorization", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "_amount", - "type": "uint96", - "internalType": "uint96" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateOperator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - } - ] - ], - [ - "TACoChildApplication", - "v0.0.0", - "0xBcF7FFFD8B256Ec51a36782a52D0c34f6474D951", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_rootApplication", - "type": "address", - "internalType": "contract ITACoChildToRoot" - } - ] - }, - { - "type": "event", - "name": "AuthorizationUpdated", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "amount", - "type": "uint96", - "internalType": "uint96", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint8", - "internalType": "uint8", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OperatorConfirmed", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OperatorUpdated", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "newOwner", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "authorizedStake", - "stateMutability": "view", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint96", - "internalType": "uint96" - } - ] - }, - { - "type": "function", - "name": "confirmOperatorAddress", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "coordinator", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "initialize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "renounceOwnership", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "rootApplication", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoChildToRoot" - } - ] - }, - { - "type": "function", - "name": "setCoordinator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "stakingProviderFromOperator", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "stakingProviderInfo", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "operator", - "type": "address", - "internalType": "address" - }, - { - "name": "operatorConfirmed", - "type": "bool", - "internalType": "bool" - }, - { - "name": "authorized", - "type": "uint96", - "internalType": "uint96" - } - ] - }, - { - "type": "function", - "name": "transferOwnership", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateAuthorization", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint96", - "internalType": "uint96" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateOperator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - } - ] - ], - [ - "LynxRitualToken", - "v0.0.0", - "0x4B3E65104805A303c274f078127D5a7E9F9b47b2", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_totalSupplyOfTokens", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "spender", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "to", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "allowance", - "stateMutability": "view", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "approve", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "balanceOf", - "stateMutability": "view", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "decimals", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - } - ] - }, - { - "type": "function", - "name": "decreaseAllowance", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "subtractedValue", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "increaseAllowance", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "addedValue", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "name", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "function", - "name": "symbol", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "function", - "name": "totalSupply", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "transfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "transferFrom", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - } - ] - ], - [ - "Coordinator", - "v0.0.0", - "0x6Af9BB9Cf7307AC439cc7E37859bdD844874ebc1", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_application", - "type": "address", - "internalType": "contract ITACoChildApplication" - }, - { - "name": "_timeout", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "_maxDkgSize", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "_admin", - "type": "address", - "internalType": "address" - }, - { - "name": "_currency", - "type": "address", - "internalType": "contract IERC20" - }, - { - "name": "_feeRatePerSecond", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "event", - "name": "AggregationPosted", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "node", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "aggregatedTranscriptDigest", - "type": "bytes32", - "internalType": "bytes32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeScheduled", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48", - "indexed": false - }, - { - "name": "effectSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferScheduled", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "acceptSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EndRitual", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "successful", - "type": "bool", - "internalType": "bool", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MaxDkgSizeChanged", - "inputs": [ - { - "name": "oldSize", - "type": "uint16", - "internalType": "uint16", - "indexed": false - }, - { - "name": "newSize", - "type": "uint16", - "internalType": "uint16", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ParticipantPublicKeySet", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "participant", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "newAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StartAggregationRound", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StartRitual", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "authority", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "participants", - "type": "address[]", - "internalType": "address[]", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TimeoutChanged", - "inputs": [ - { - "name": "oldTimeout", - "type": "uint32", - "internalType": "uint32", - "indexed": false - }, - { - "name": "newTimeout", - "type": "uint32", - "internalType": "uint32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TranscriptPosted", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "node", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "transcriptDigest", - "type": "bytes32", - "internalType": "bytes32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "INITIATOR_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "TREASURY_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "acceptDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "application", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoChildApplication" - } - ] - }, - { - "type": "function", - "name": "beginDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cancelDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "changeDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cohortFingerprint", - "stateMutability": "pure", - "inputs": [ - { - "name": "nodes", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "currency", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IERC20" - } - ] - }, - { - "type": "function", - "name": "defaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelayIncreaseWait", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "feeRatePerSecond", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "getAuthority", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "getParticipantFromProvider", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "provider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "components": [ - { - "name": "provider", - "type": "address", - "internalType": "address" - }, - { - "name": "aggregated", - "type": "bool", - "internalType": "bool" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "internalType": "struct Coordinator.Participant" - } - ] - }, - { - "type": "function", - "name": "getParticipants", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "components": [ - { - "name": "provider", - "type": "address", - "internalType": "address" - }, - { - "name": "aggregated", - "type": "bool", - "internalType": "bool" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "internalType": "struct Coordinator.Participant[]" - } - ] - }, - { - "type": "function", - "name": "getProviderPublicKey", - "stateMutability": "view", - "inputs": [ - { - "name": "_provider", - "type": "address", - "internalType": "address" - }, - { - "name": "_ritualId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point" - } - ] - }, - { - "type": "function", - "name": "getPublicKeyFromRitualId", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - } - ] - }, - { - "type": "function", - "name": "getRitualIdFromPublicKey", - "stateMutability": "view", - "inputs": [ - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - } - ], - "outputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "getRitualInitiationCost", - "stateMutability": "view", - "inputs": [ - { - "name": "providers", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "duration", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "getRitualState", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "enum Coordinator.RitualState" - } - ] - }, - { - "type": "function", - "name": "getRoleAdmin", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "getThresholdForRitualSize", - "stateMutability": "pure", - "inputs": [ - { - "name": "size", - "type": "uint16", - "internalType": "uint16" - } - ], - "outputs": [ - { - "name": "", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "type": "function", - "name": "grantRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "hasRole", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "initiateRitual", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "providers", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - }, - { - "name": "duration", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "accessController", - "type": "address", - "internalType": "contract IEncryptionAuthorizer" - } - ], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "isEncryptionAuthorized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "evidence", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "ciphertextHeader", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isInitiationPublic", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isProviderPublicKeySet", - "stateMutability": "view", - "inputs": [ - { - "name": "_provider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isRitualFinalized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "makeInitiationPublic", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "maxDkgSize", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "type": "function", - "name": "numberOfRituals", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingFees", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "postAggregation", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "aggregatedTranscript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "postTranscript", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "processPendingFee", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "renounceRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "revokeRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "rituals", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "initiator", - "type": "address", - "internalType": "address" - }, - { - "name": "initTimestamp", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "endTimestamp", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "totalTranscripts", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "totalAggregations", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - }, - { - "name": "dkgSize", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "threshold", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "aggregationMismatch", - "type": "bool", - "internalType": "bool" - }, - { - "name": "accessController", - "type": "address", - "internalType": "contract IEncryptionAuthorizer" - }, - { - "name": "publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - }, - { - "name": "aggregatedTranscript", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "function", - "name": "rollbackDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setMaxDkgSize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newSize", - "type": "uint16", - "internalType": "uint16" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setProviderPublicKey", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setReimbursementPool", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "pool", - "type": "address", - "internalType": "contract IReimbursementPool" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setRitualAuthority", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setTimeout", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newTimeout", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "supportsInterface", - "stateMutability": "view", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "timeout", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "totalPendingFees", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "withdrawTokens", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "contract IERC20" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [] - } - ] - ] -] \ No newline at end of file From 4adf73920954e12d3efa3837ff45bbf743ddd7bd Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Fri, 22 Sep 2023 19:59:30 +0200 Subject: [PATCH 046/112] disables default ape 'publish' feature --- scripts/deploy_lynx.py | 14 +++++++++----- scripts/deployment.py | 7 ++++++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 907420d1..d53f6a5a 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -1,12 +1,17 @@ #!/usr/bin/python3 -from ape import project - +from ape import project, networks + +from scripts.constants import ( + CONSTRUCTOR_PARAMS_DIR, + ARTIFACTS_DIR, + CURRENT_NETWORK, + LOCAL_BLOCKCHAIN_ENVIRONMENTS +) from scripts.deployment import prepare_deployment from scripts.registry import registry_from_ape_deployments -from scripts.constants import CONSTRUCTOR_PARAMS_DIR, ARTIFACTS_DIR -PUBLISH = False +VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx-alpha-13-params.json" REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx-alpha-13-registry.json" @@ -32,7 +37,6 @@ def main(): deployer, params = prepare_deployment( params_filepath=CONSTRUCTOR_PARAMS_FILEPATH, registry_filepath=REGISTRY_FILEPATH, - publish=PUBLISH ) root_application = deployer.deploy( diff --git a/scripts/deployment.py b/scripts/deployment.py index b6d0f576..a04c22b1 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -17,11 +17,16 @@ def prepare_deployment( - params_filepath: Path, registry_filepath: Path, publish: bool + params_filepath: Path, + registry_filepath: Path, + publish: bool = False ) -> typing.Tuple[AccountAPI, "ApeDeploymentParameters"]: """ Prepares the deployment by loading the deployment parameters and checking the pre-deployment conditions. + + NOTE: publish is False by default because we use customized artifact tracking + that is not compatible with the ape publish command. """ # pre-deployment checks From e702438bdff6b40207354f8a045679bffccdee9f Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Fri, 22 Sep 2023 20:00:36 +0200 Subject: [PATCH 047/112] document september 22, 2023 mumbai deployment ape versions and launch command --- scripts/deploy_lynx.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index d53f6a5a..2b14351b 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -32,6 +32,16 @@ def main(): 'LynxRootApplication' deployed to: 0xb6400F55857716A3Ff863e6bE867F01F23C71793 'LynxTACoChildApplication' deployed to: 0x3593f90b19F148FCbe7B00201f854d8839F33F86 'Coordinator' deployed to: 0x4077ad1CFA834aEd68765dB0Cf3d14701a970a9a + + September 22, 2023, Mumbai Deployment: + ape-etherscan 0.6.10 + ape-infura 0.6.3 + ape-polygon 0.6.5 + ape-solidity 0.6.9 + eth-ape 0.6.20 + + ape-run deploy_lynx --network polygon:mumbai:infura + """ deployer, params = prepare_deployment( From 5bf960a92f5fe26ffd4ff7af01d789a31eaeffc2 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Fri, 22 Sep 2023 20:00:57 +0200 Subject: [PATCH 048/112] manually verify contracts with etherscan --- scripts/deploy_lynx.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 2b14351b..719b723c 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -98,3 +98,9 @@ def main(): output_filepath=REGISTRY_FILEPATH ) print(f"(i) Registry written to {output_filepath}!") + + if VERIFY: + etherscan = networks.provider.network.explorer + for deployment in deployments: + print(f"(i) Verifying {deployment.contract_type.name}...") + etherscan.publish_contract(deployment.address) From 4ed3249aba276d5373d1d1c7acc48c1295cefd9a Mon Sep 17 00:00:00 2001 From: derekpierre Date: Fri, 22 Sep 2023 14:19:28 -0400 Subject: [PATCH 049/112] Add script to perform merging of contract registries for lynx. Merged lynx alpha-13 registry with prior lynx mumbai registry in `nucypher/nucypher` to include SubscriptionManager and exclude deprecated StakeInfo. --- .../lynx-alpha-13-merged-registry.json | 3190 +++++++++++++++++ scripts/merge_lynx_deployment_registries.py | 13 + 2 files changed, 3203 insertions(+) create mode 100644 deployments/artifacts/lynx-alpha-13-merged-registry.json create mode 100644 scripts/merge_lynx_deployment_registries.py diff --git a/deployments/artifacts/lynx-alpha-13-merged-registry.json b/deployments/artifacts/lynx-alpha-13-merged-registry.json new file mode 100644 index 00000000..0a3b0f13 --- /dev/null +++ b/deployments/artifacts/lynx-alpha-13-merged-registry.json @@ -0,0 +1,3190 @@ +[ + [ + "TACoApplication", + "v0.0.0", + "0xe9e6C183fadD057b8972E12471B212288b1ca6E6", + [ + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "childApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setChildApplication", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_childApplication", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "TACoChildApplication", + "v0.0.0", + "0x099a6128710F7e30Ed8740644F40EE6d3e6673D1", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_rootApplication", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "event", + "name": "AuthorizationUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "internalType": "uint8", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "authorizedStake", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "coordinator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "initialize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "rootApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "function", + "name": "setCoordinator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "stakingProviderFromOperator", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "stakingProviderInfo", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "operatorConfirmed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "authorized", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "LynxRitualToken", + "v0.0.0", + "0x871EbA00295fF9c329dbCF2Cd329cd89FD926192", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_totalSupplyOfTokens", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "spender", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "to", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "allowance", + "stateMutability": "view", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "approve", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "balanceOf", + "stateMutability": "view", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "decimals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ] + }, + { + "type": "function", + "name": "decreaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "subtractedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "increaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "addedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "name", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "symbol", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "totalSupply", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "transfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "transferFrom", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + } + ] + ], + [ + "Coordinator", + "v0.0.0", + "0x7c8EA2d03fA65088fA85B889da365035555e4394", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_application", + "type": "address", + "internalType": "contract ITACoChildApplication" + }, + { + "name": "_timeout", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_maxDkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + }, + { + "name": "_currency", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "_feeRatePerSecond", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "AggregationPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "aggregatedTranscriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeScheduled", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48", + "indexed": false + }, + { + "name": "effectSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferScheduled", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "acceptSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EndRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "successful", + "type": "bool", + "internalType": "bool", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MaxDkgSizeChanged", + "inputs": [ + { + "name": "oldSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + }, + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParticipantPublicKeySet", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "participant", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "newAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartAggregationRound", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "authority", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "participants", + "type": "address[]", + "internalType": "address[]", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TimeoutChanged", + "inputs": [ + { + "name": "oldTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + }, + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TranscriptPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "transcriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "INITIATOR_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "TREASURY_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "acceptDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "application", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildApplication" + } + ] + }, + { + "type": "function", + "name": "beginDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cancelDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "changeDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cohortFingerprint", + "stateMutability": "pure", + "inputs": [ + { + "name": "nodes", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "currency", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ] + }, + { + "type": "function", + "name": "defaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelayIncreaseWait", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "feeRatePerSecond", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getAuthority", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "getParticipantFromProvider", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant" + } + ] + }, + { + "type": "function", + "name": "getParticipants", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant[]" + } + ] + }, + { + "type": "function", + "name": "getProviderPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + }, + { + "name": "_ritualId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ] + }, + { + "type": "function", + "name": "getPublicKeyFromRitualId", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ] + }, + { + "type": "function", + "name": "getRitualIdFromPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ], + "outputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "getRitualInitiationCost", + "stateMutability": "view", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getRitualState", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum Coordinator.RitualState" + } + ] + }, + { + "type": "function", + "name": "getRoleAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "getThresholdForRitualSize", + "stateMutability": "pure", + "inputs": [ + { + "name": "size", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "grantRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "hasRole", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "initiateRitual", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "isEncryptionAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "evidence", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "ciphertextHeader", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isInitiationPublic", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isProviderPublicKeySet", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isRitualFinalized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "makeInitiationPublic", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "maxDkgSize", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "numberOfRituals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingFees", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "postAggregation", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "postTranscript", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "processPendingFee", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "renounceRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "revokeRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "rituals", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "initiator", + "type": "address", + "internalType": "address" + }, + { + "name": "initTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "endTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "totalTranscripts", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "totalAggregations", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "dkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "threshold", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "aggregationMismatch", + "type": "bool", + "internalType": "bool" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "function", + "name": "rollbackDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setMaxDkgSize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setProviderPublicKey", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setReimbursementPool", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "contract IReimbursementPool" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setRitualAuthority", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setTimeout", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "supportsInterface", + "stateMutability": "view", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "timeout", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "totalPendingFees", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "withdrawTokens", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [] + } + ] + ], + [ + "GlobalAllowList", + "v0.0.0", + "0xa7aF704855EA2a2513C56212D45b86287205520E", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "contract Coordinator" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeScheduled", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48", + "indexed": false + }, + { + "name": "effectSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferScheduled", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "acceptSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "newAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "acceptDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "authorize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "addresses", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "beginDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cancelDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "changeDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "coordinator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract Coordinator" + } + ] + }, + { + "type": "function", + "name": "deauthorize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "addresses", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "defaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelayIncreaseWait", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "getRoleAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "grantRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "hasRole", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isAddressAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "encryptor", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "evidence", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "ciphertextHeader", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "renounceRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "revokeRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "rollbackDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setCoordinator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "contract Coordinator" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "supportsInterface", + "stateMutability": "view", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + } + ] + ], + [ + "SubscriptionManager", + "v0.0.0", + "0xb9015d7B35Ce7c81ddE38eF7136Baa3B1044f313", + [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldFeeRate", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newFeeRate", + "type": "uint256" + } + ], + "name": "FeeRateUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes16", + "name": "policyId", + "type": "bytes16" + }, + { + "indexed": true, + "internalType": "address", + "name": "sponsor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "size", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "startTimestamp", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "endTimestamp", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cost", + "type": "uint256" + } + ], + "name": "PolicyCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SET_RATE_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WITHDRAW_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes16", + "name": "_policyId", + "type": "bytes16" + }, + { + "internalType": "address", + "name": "_policyOwner", + "type": "address" + }, + { + "internalType": "uint16", + "name": "_size", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "_startTimestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_endTimestamp", + "type": "uint32" + } + ], + "name": "createPolicy", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "feeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes16", + "name": "_policyID", + "type": "bytes16" + } + ], + "name": "getPolicy", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "sponsor", + "type": "address" + }, + { + "internalType": "uint32", + "name": "startTimestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "endTimestamp", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "size", + "type": "uint16" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "internalType": "struct SubscriptionManager.Policy", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "_size", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "_startTimestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_endTimestamp", + "type": "uint32" + } + ], + "name": "getPolicyCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_feeRate", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes16", + "name": "_policyID", + "type": "bytes16" + } + ], + "name": "isPolicyActive", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_ratePerSecond", + "type": "uint256" + } + ], + "name": "setFeeRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "name": "sweep", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] + ] +] diff --git a/scripts/merge_lynx_deployment_registries.py b/scripts/merge_lynx_deployment_registries.py new file mode 100644 index 00000000..61102fc9 --- /dev/null +++ b/scripts/merge_lynx_deployment_registries.py @@ -0,0 +1,13 @@ +from scripts.constants import ARTIFACTS_DIR +from scripts.registry import merge_registries + +lynx_deployment_registry = ARTIFACTS_DIR / "lynx-alpha-13-registry.json" +lynx_registry_w_subscription_manager = ARTIFACTS_DIR / "contract_registry.json" +output_registry = ARTIFACTS_DIR / "lynx-alpha-13-merged-registry.json" + +merge_registries( + registry_1_filepath=lynx_deployment_registry, + registry_2_filepath=lynx_registry_w_subscription_manager, + output_filepath=output_registry, + deprecated_contracts=["StakeInfo"], +) From 7e550c2978ad88cd643cb615253812a95ea4128b Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sat, 23 Sep 2023 06:33:32 -0400 Subject: [PATCH 050/112] Add print statements when calling a function on deployed lynx contract. --- scripts/deploy_lynx.py | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 719b723c..510df569 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -1,12 +1,11 @@ #!/usr/bin/python3 -from ape import project, networks - +from ape import networks, project from scripts.constants import ( - CONSTRUCTOR_PARAMS_DIR, ARTIFACTS_DIR, + CONSTRUCTOR_PARAMS_DIR, CURRENT_NETWORK, - LOCAL_BLOCKCHAIN_ENVIRONMENTS + LOCAL_BLOCKCHAIN_ENVIRONMENTS, ) from scripts.deployment import prepare_deployment from scripts.registry import registry_from_ape_deployments @@ -57,34 +56,27 @@ def main(): *params.get(project.LynxTACoChildApplication), **params.get_kwargs() ) + print("\nSetting TACo Child application on TACo Root") root_application.setChildApplication( child_application.address, sender=deployer, ) - ritual_token = deployer.deploy( - *params.get(project.LynxRitualToken), **params.get_kwargs() - ) + ritual_token = deployer.deploy(*params.get(project.LynxRitualToken), **params.get_kwargs()) - coordinator = deployer.deploy( - *params.get(project.Coordinator), **params.get_kwargs() - ) + coordinator = deployer.deploy(*params.get(project.Coordinator), **params.get_kwargs()) - child_application.setCoordinator( - coordinator.address, - sender=deployer - ) + print("\nSetting Coordinator on TACo Child application") + child_application.setCoordinator(coordinator.address, sender=deployer) - global_allow_list = deployer.deploy( - *params.get(project.GlobalAllowList), **params.get_kwargs() - ) + global_allow_list = deployer.deploy(*params.get(project.GlobalAllowList), **params.get_kwargs()) deployments = [ root_application, child_application, ritual_token, coordinator, - global_allow_list + global_allow_list, ] registry_names = { @@ -93,9 +85,7 @@ def main(): } output_filepath = registry_from_ape_deployments( - deployments=deployments, - registry_names=registry_names, - output_filepath=REGISTRY_FILEPATH + deployments=deployments, registry_names=registry_names, output_filepath=REGISTRY_FILEPATH ) print(f"(i) Registry written to {output_filepath}!") From 271652b24c018738fa18f7eb13f8c5dceea68346 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sat, 23 Sep 2023 08:03:51 -0400 Subject: [PATCH 051/112] Update LynxRootApplication to implement functions to better match the requirements needed from a real TACoApplicatio contract. --- contracts/contracts/testnet/LynxSet.sol | 152 +++++++++++++++++++++++- 1 file changed, 147 insertions(+), 5 deletions(-) diff --git a/contracts/contracts/testnet/LynxSet.sol b/contracts/contracts/testnet/LynxSet.sol index aaa30bc4..db56d4a3 100644 --- a/contracts/contracts/testnet/LynxSet.sol +++ b/contracts/contracts/testnet/LynxSet.sol @@ -10,22 +10,164 @@ import "../coordination/ITACoChildToRoot.sol"; import "../coordination/TACoChildApplication.sol"; contract LynxRootApplication is Ownable, ITACoChildToRoot { + struct StakingProviderInfo { + address operator; + bool operatorConfirmed; + uint64 operatorStartTimestamp; + uint96 authorized; + } + + uint96 public immutable minimumAuthorization = 40000000000000000000000; + uint256 public immutable minOperatorSeconds = 3600; ITACoRootToChild public childApplication; + mapping(address => StakingProviderInfo) public stakingProviderInfo; + address[] public stakingProviders; + mapping(address => address) internal _stakingProviderFromOperator; function setChildApplication(ITACoRootToChild _childApplication) external onlyOwner { childApplication = _childApplication; } - function updateOperator(address _stakingProvider, address _operator) external onlyOwner { - childApplication.updateOperator(_stakingProvider, _operator); - } - function updateAuthorization(address _stakingProvider, uint96 _amount) external onlyOwner { childApplication.updateAuthorization(_stakingProvider, _amount); } + function confirmOperatorAddress(address _operator) external override { + address stakingProvider = _stakingProviderFromOperator[_operator]; + if (stakingProvider == address(0)) { + return; + } + StakingProviderInfo storage info = stakingProviderInfo[stakingProvider]; + if (!info.operatorConfirmed) { + info.operatorConfirmed = true; + } + } + + // + // Required TACoApplication functions + // + function stakingProviderFromOperator(address _operator) public view returns (address) { + return _stakingProviderFromOperator[_operator]; + } + + function getOperatorFromStakingProvider( + address _stakingProvider + ) public view returns (address) { + return stakingProviderInfo[_stakingProvider].operator; + } + + function getActiveStakingProviders( + uint256 _startIndex, + uint256 _maxStakingProviders + ) + external + view + returns (uint256 allAuthorizedTokens, uint256[2][] memory activeStakingProviders) + { + uint256 endIndex = stakingProviders.length; + require(_startIndex < endIndex, "Wrong start index"); + if (_maxStakingProviders != 0 && _startIndex + _maxStakingProviders < endIndex) { + endIndex = _startIndex + _maxStakingProviders; + } + activeStakingProviders = new uint256[2][](endIndex - _startIndex); + allAuthorizedTokens = 0; + + uint256 resultIndex = 0; + for (uint256 i = _startIndex; i < endIndex; i++) { + address stakingProvider = stakingProviders[i]; + StakingProviderInfo storage info = stakingProviderInfo[stakingProvider]; + uint256 eligibleAmount = info.authorized; + activeStakingProviders[resultIndex][0] = uint256(uint160(stakingProvider)); + activeStakingProviders[resultIndex++][1] = eligibleAmount; + allAuthorizedTokens += eligibleAmount; + } + assembly { + mstore(activeStakingProviders, resultIndex) + } + } + + function isAuthorized(address _stakingProvider) public view returns (bool) { + return stakingProviderInfo[_stakingProvider].authorized > 0; + } + + function authorizedStake(address _stakingProvider) public view returns (uint96) { + return stakingProviderInfo[_stakingProvider].authorized; + } + + function isOperatorConfirmed(address _operator) public view returns (bool) { + address stakingProvider = _stakingProviderFromOperator[_operator]; + StakingProviderInfo storage info = stakingProviderInfo[stakingProvider]; + return info.operatorConfirmed; + } + + function getStakingProvidersLength() external view returns (uint256) { + return stakingProviders.length; + } + + function bondOperator(address _stakingProvider, address _operator) external onlyOwner { + StakingProviderInfo storage info = stakingProviderInfo[_stakingProvider]; + address previousOperator = info.operator; + require( + _operator != previousOperator, + "Specified operator is already bonded with this provider" + ); + // If this staker had a operator ... + if (previousOperator != address(0)) { + // Remove the old relation "operator->stakingProvider" + _stakingProviderFromOperator[previousOperator] = address(0); + } + + if (_operator != address(0)) { + require( + _stakingProviderFromOperator[_operator] == address(0), + "Specified operator is already in use" + ); + // Set new operator->stakingProvider relation + _stakingProviderFromOperator[_operator] = _stakingProvider; + } + + if (info.operatorStartTimestamp == 0) { + stakingProviders.push(_stakingProvider); + } + + // Bond new operator (or unbond if _operator == address(0)) + info.operator = _operator; + info.operatorStartTimestamp = uint64(block.timestamp); + info.operatorConfirmed = false; + if (address(childApplication) != address(0)) { + childApplication.updateOperator(_stakingProvider, _operator); + } + } + + // + // Remaining IApplication functions + // + // solhint-disable-next-line no-empty-blocks - function confirmOperatorAddress(address _operator) external override {} + function withdrawRewards(address stakingProvider) external {} + + function authorizationIncreased( + address _stakingProvider, + uint96 _fromAmount, + uint96 _toAmount // solhint-disable-next-line no-empty-blocks + ) external {} + + function authorizationDecreaseRequested( + address stakingProvider, + uint96 fromAmount, + uint96 toAmount // solhint-disable-next-line no-empty-blocks + ) external {} + + function involuntaryAuthorizationDecrease( + address stakingProvider, + uint96 fromAmount, + uint96 toAmount // solhint-disable-next-line no-empty-blocks + ) external {} + + // solhint-disable-next-line no-unused-vars + function availableRewards(address stakingProvider) external view returns (uint96) { + return 0; + } } contract LynxTACoChildApplication is TACoChildApplication, Ownable { From fa1f9ec88763f39f08ea37af767095e696c65d14 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sun, 24 Sep 2023 22:20:44 -0400 Subject: [PATCH 052/112] Check whether child application is set before calling. --- contracts/contracts/testnet/LynxSet.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contracts/contracts/testnet/LynxSet.sol b/contracts/contracts/testnet/LynxSet.sol index db56d4a3..379a83dc 100644 --- a/contracts/contracts/testnet/LynxSet.sol +++ b/contracts/contracts/testnet/LynxSet.sol @@ -29,7 +29,9 @@ contract LynxRootApplication is Ownable, ITACoChildToRoot { } function updateAuthorization(address _stakingProvider, uint96 _amount) external onlyOwner { - childApplication.updateAuthorization(_stakingProvider, _amount); + if (address(childApplication) != address(0)) { + childApplication.updateAuthorization(_stakingProvider, _amount); + } } function confirmOperatorAddress(address _operator) external override { From 46b5d105390663d401c6b9e5fdef081959e30506 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sun, 24 Sep 2023 22:53:52 -0400 Subject: [PATCH 053/112] Implement authorizationIncreased properly. --- contracts/contracts/testnet/LynxSet.sol | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/contracts/contracts/testnet/LynxSet.sol b/contracts/contracts/testnet/LynxSet.sol index 379a83dc..d2ad2b97 100644 --- a/contracts/contracts/testnet/LynxSet.sol +++ b/contracts/contracts/testnet/LynxSet.sol @@ -150,9 +150,28 @@ contract LynxRootApplication is Ownable, ITACoChildToRoot { function authorizationIncreased( address _stakingProvider, + // solhint-disable-next-line no-unused-vars uint96 _fromAmount, - uint96 _toAmount // solhint-disable-next-line no-empty-blocks - ) external {} + uint96 _toAmount + ) external onlyOwner { + require( + _stakingProvider != address(0) && _toAmount > 0, + "Input parameters must be specified" + ); + require(_toAmount >= minimumAuthorization, "Authorization must be greater than minimum"); + + StakingProviderInfo storage info = stakingProviderInfo[_stakingProvider]; + require( + _stakingProviderFromOperator[_stakingProvider] == address(0) || + _stakingProviderFromOperator[_stakingProvider] == _stakingProvider, + "A provider can't be an operator for another provider" + ); + + info.authorized = _toAmount; + if (address(childApplication) != address(0)) { + childApplication.updateAuthorization(_stakingProvider, _toAmount); + } + } function authorizationDecreaseRequested( address stakingProvider, From c6bdb17883c68dddf755ae71e910cae90570db51 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Sun, 24 Sep 2023 22:21:08 -0400 Subject: [PATCH 054/112] Add LynxMockRoot to use on lynx with LynxChildApplication. --- contracts/contracts/testnet/LynxSet.sol | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/contracts/contracts/testnet/LynxSet.sol b/contracts/contracts/testnet/LynxSet.sol index d2ad2b97..e4bee9b3 100644 --- a/contracts/contracts/testnet/LynxSet.sol +++ b/contracts/contracts/testnet/LynxSet.sol @@ -191,6 +191,11 @@ contract LynxRootApplication is Ownable, ITACoChildToRoot { } } +contract LynxMockRoot is Ownable, ITACoChildToRoot { + // solhint-disable-next-line no-empty-blocks + function confirmOperatorAddress(address _operator) external override {} +} + contract LynxTACoChildApplication is TACoChildApplication, Ownable { constructor(ITACoChildToRoot _rootApplication) TACoChildApplication(_rootApplication) {} From e53f44b7a5beeae185d3ab0e602b1954e8a881a3 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 08:57:05 -0400 Subject: [PATCH 055/112] Update LynxMockRootApplication to call a child application based on ITACoRootToChild. --- contracts/contracts/testnet/LynxSet.sol | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/contracts/contracts/testnet/LynxSet.sol b/contracts/contracts/testnet/LynxSet.sol index e4bee9b3..8f6d0542 100644 --- a/contracts/contracts/testnet/LynxSet.sol +++ b/contracts/contracts/testnet/LynxSet.sol @@ -191,7 +191,27 @@ contract LynxRootApplication is Ownable, ITACoChildToRoot { } } -contract LynxMockRoot is Ownable, ITACoChildToRoot { +contract LynxMockRootApplication is Ownable, ITACoChildToRoot, ITACoRootToChild { + ITACoRootToChild public childApplication; + + function setChildApplication(ITACoRootToChild _childApplication) external onlyOwner { + childApplication = _childApplication; + } + + function updateOperator( + address _stakingProvider, + address _operator + ) external override onlyOwner { + childApplication.updateOperator(_stakingProvider, _operator); + } + + function updateAuthorization( + address _stakingProvider, + uint96 _amount + ) external override onlyOwner { + childApplication.updateAuthorization(_stakingProvider, _amount); + } + // solhint-disable-next-line no-empty-blocks function confirmOperatorAddress(address _operator) external override {} } From 12bc24e75ab73763405e9995941548cf3de1170a Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 09:11:56 -0400 Subject: [PATCH 056/112] Create subfolder within artifacts and constructor-params folders to provide better deployment context for relevant files (inputs and outputs). --- .../artifacts/lynx-alpha-13-registry.json | 2706 ----------------- .../lynx-alpha-13-merged-registry.json | 0 .../lynx/lynx-alpha-13-registry.json | 2706 +++++++++++++++++ .../{ => lynx}/lynx-alpha-13-params.json | 0 scripts/deploy_lynx.py | 4 +- 5 files changed, 2708 insertions(+), 2708 deletions(-) delete mode 100644 deployments/artifacts/lynx-alpha-13-registry.json rename deployments/artifacts/{ => lynx}/lynx-alpha-13-merged-registry.json (100%) create mode 100644 deployments/artifacts/lynx/lynx-alpha-13-registry.json rename deployments/constructor_params/{ => lynx}/lynx-alpha-13-params.json (100%) diff --git a/deployments/artifacts/lynx-alpha-13-registry.json b/deployments/artifacts/lynx-alpha-13-registry.json deleted file mode 100644 index 14441931..00000000 --- a/deployments/artifacts/lynx-alpha-13-registry.json +++ /dev/null @@ -1,2706 +0,0 @@ -[ - [ - "TACoApplication", - "v0.0.0", - "0xe9e6C183fadD057b8972E12471B212288b1ca6E6", - [ - { - "type": "event", - "name": "OperatorConfirmed", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "newOwner", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "childApplication", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoRootToChild" - } - ] - }, - { - "type": "function", - "name": "confirmOperatorAddress", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "renounceOwnership", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setChildApplication", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_childApplication", - "type": "address", - "internalType": "contract ITACoRootToChild" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "transferOwnership", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateAuthorization", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "_amount", - "type": "uint96", - "internalType": "uint96" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateOperator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - } - ] - ], - [ - "TACoChildApplication", - "v0.0.0", - "0x099a6128710F7e30Ed8740644F40EE6d3e6673D1", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_rootApplication", - "type": "address", - "internalType": "contract ITACoChildToRoot" - } - ] - }, - { - "type": "event", - "name": "AuthorizationUpdated", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "amount", - "type": "uint96", - "internalType": "uint96", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint8", - "internalType": "uint8", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OperatorConfirmed", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OperatorUpdated", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "newOwner", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "authorizedStake", - "stateMutability": "view", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint96", - "internalType": "uint96" - } - ] - }, - { - "type": "function", - "name": "confirmOperatorAddress", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "coordinator", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "initialize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "renounceOwnership", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "rootApplication", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoChildToRoot" - } - ] - }, - { - "type": "function", - "name": "setCoordinator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "stakingProviderFromOperator", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "stakingProviderInfo", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "operator", - "type": "address", - "internalType": "address" - }, - { - "name": "operatorConfirmed", - "type": "bool", - "internalType": "bool" - }, - { - "name": "authorized", - "type": "uint96", - "internalType": "uint96" - } - ] - }, - { - "type": "function", - "name": "transferOwnership", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateAuthorization", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint96", - "internalType": "uint96" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateOperator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - } - ] - ], - [ - "LynxRitualToken", - "v0.0.0", - "0x871EbA00295fF9c329dbCF2Cd329cd89FD926192", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_totalSupplyOfTokens", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "spender", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "to", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "allowance", - "stateMutability": "view", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "approve", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "balanceOf", - "stateMutability": "view", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "decimals", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - } - ] - }, - { - "type": "function", - "name": "decreaseAllowance", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "subtractedValue", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "increaseAllowance", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "addedValue", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "name", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "function", - "name": "symbol", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "function", - "name": "totalSupply", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "transfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "transferFrom", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - } - ] - ], - [ - "Coordinator", - "v0.0.0", - "0x7c8EA2d03fA65088fA85B889da365035555e4394", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_application", - "type": "address", - "internalType": "contract ITACoChildApplication" - }, - { - "name": "_timeout", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "_maxDkgSize", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "_admin", - "type": "address", - "internalType": "address" - }, - { - "name": "_currency", - "type": "address", - "internalType": "contract IERC20" - }, - { - "name": "_feeRatePerSecond", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "event", - "name": "AggregationPosted", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "node", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "aggregatedTranscriptDigest", - "type": "bytes32", - "internalType": "bytes32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeScheduled", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48", - "indexed": false - }, - { - "name": "effectSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferScheduled", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "acceptSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EndRitual", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "successful", - "type": "bool", - "internalType": "bool", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MaxDkgSizeChanged", - "inputs": [ - { - "name": "oldSize", - "type": "uint16", - "internalType": "uint16", - "indexed": false - }, - { - "name": "newSize", - "type": "uint16", - "internalType": "uint16", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ParticipantPublicKeySet", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "participant", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "newAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StartAggregationRound", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StartRitual", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "authority", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "participants", - "type": "address[]", - "internalType": "address[]", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TimeoutChanged", - "inputs": [ - { - "name": "oldTimeout", - "type": "uint32", - "internalType": "uint32", - "indexed": false - }, - { - "name": "newTimeout", - "type": "uint32", - "internalType": "uint32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TranscriptPosted", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "node", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "transcriptDigest", - "type": "bytes32", - "internalType": "bytes32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "INITIATOR_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "TREASURY_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "acceptDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "application", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoChildApplication" - } - ] - }, - { - "type": "function", - "name": "beginDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cancelDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "changeDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cohortFingerprint", - "stateMutability": "pure", - "inputs": [ - { - "name": "nodes", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "currency", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IERC20" - } - ] - }, - { - "type": "function", - "name": "defaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelayIncreaseWait", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "feeRatePerSecond", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "getAuthority", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "getParticipantFromProvider", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "provider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "components": [ - { - "name": "provider", - "type": "address", - "internalType": "address" - }, - { - "name": "aggregated", - "type": "bool", - "internalType": "bool" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "internalType": "struct Coordinator.Participant" - } - ] - }, - { - "type": "function", - "name": "getParticipants", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "components": [ - { - "name": "provider", - "type": "address", - "internalType": "address" - }, - { - "name": "aggregated", - "type": "bool", - "internalType": "bool" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "internalType": "struct Coordinator.Participant[]" - } - ] - }, - { - "type": "function", - "name": "getProviderPublicKey", - "stateMutability": "view", - "inputs": [ - { - "name": "_provider", - "type": "address", - "internalType": "address" - }, - { - "name": "_ritualId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point" - } - ] - }, - { - "type": "function", - "name": "getPublicKeyFromRitualId", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - } - ] - }, - { - "type": "function", - "name": "getRitualIdFromPublicKey", - "stateMutability": "view", - "inputs": [ - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - } - ], - "outputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "getRitualInitiationCost", - "stateMutability": "view", - "inputs": [ - { - "name": "providers", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "duration", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "getRitualState", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "enum Coordinator.RitualState" - } - ] - }, - { - "type": "function", - "name": "getRoleAdmin", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "getThresholdForRitualSize", - "stateMutability": "pure", - "inputs": [ - { - "name": "size", - "type": "uint16", - "internalType": "uint16" - } - ], - "outputs": [ - { - "name": "", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "type": "function", - "name": "grantRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "hasRole", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "initiateRitual", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "providers", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - }, - { - "name": "duration", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "accessController", - "type": "address", - "internalType": "contract IEncryptionAuthorizer" - } - ], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "isEncryptionAuthorized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "evidence", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "ciphertextHeader", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isInitiationPublic", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isProviderPublicKeySet", - "stateMutability": "view", - "inputs": [ - { - "name": "_provider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isRitualFinalized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "makeInitiationPublic", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "maxDkgSize", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "type": "function", - "name": "numberOfRituals", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingFees", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "postAggregation", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "aggregatedTranscript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "postTranscript", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "processPendingFee", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "renounceRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "revokeRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "rituals", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "initiator", - "type": "address", - "internalType": "address" - }, - { - "name": "initTimestamp", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "endTimestamp", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "totalTranscripts", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "totalAggregations", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - }, - { - "name": "dkgSize", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "threshold", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "aggregationMismatch", - "type": "bool", - "internalType": "bool" - }, - { - "name": "accessController", - "type": "address", - "internalType": "contract IEncryptionAuthorizer" - }, - { - "name": "publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - }, - { - "name": "aggregatedTranscript", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "function", - "name": "rollbackDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setMaxDkgSize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newSize", - "type": "uint16", - "internalType": "uint16" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setProviderPublicKey", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setReimbursementPool", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "pool", - "type": "address", - "internalType": "contract IReimbursementPool" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setRitualAuthority", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setTimeout", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newTimeout", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "supportsInterface", - "stateMutability": "view", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "timeout", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "totalPendingFees", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "withdrawTokens", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "contract IERC20" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [] - } - ] - ], - [ - "GlobalAllowList", - "v0.0.0", - "0xa7aF704855EA2a2513C56212D45b86287205520E", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "contract Coordinator" - }, - { - "name": "_admin", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeScheduled", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48", - "indexed": false - }, - { - "name": "effectSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferScheduled", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "acceptSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "newAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "acceptDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "authorize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "addresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "beginDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cancelDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "changeDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "coordinator", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract Coordinator" - } - ] - }, - { - "type": "function", - "name": "deauthorize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "addresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "defaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelayIncreaseWait", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "getRoleAdmin", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "grantRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "hasRole", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isAddressAuthorized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "encryptor", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isAuthorized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "evidence", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "ciphertextHeader", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "renounceRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "revokeRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "rollbackDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setCoordinator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "contract Coordinator" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "supportsInterface", - "stateMutability": "view", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - } - ] - ] -] \ No newline at end of file diff --git a/deployments/artifacts/lynx-alpha-13-merged-registry.json b/deployments/artifacts/lynx/lynx-alpha-13-merged-registry.json similarity index 100% rename from deployments/artifacts/lynx-alpha-13-merged-registry.json rename to deployments/artifacts/lynx/lynx-alpha-13-merged-registry.json diff --git a/deployments/artifacts/lynx/lynx-alpha-13-registry.json b/deployments/artifacts/lynx/lynx-alpha-13-registry.json new file mode 100644 index 00000000..8fc7c805 --- /dev/null +++ b/deployments/artifacts/lynx/lynx-alpha-13-registry.json @@ -0,0 +1,2706 @@ +[ + [ + "TACoApplication", + "v0.0.0", + "0xe9e6C183fadD057b8972E12471B212288b1ca6E6", + [ + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "childApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setChildApplication", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_childApplication", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "TACoChildApplication", + "v0.0.0", + "0x099a6128710F7e30Ed8740644F40EE6d3e6673D1", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_rootApplication", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "event", + "name": "AuthorizationUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "internalType": "uint8", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "authorizedStake", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "coordinator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "initialize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "rootApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "function", + "name": "setCoordinator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "stakingProviderFromOperator", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "stakingProviderInfo", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "operatorConfirmed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "authorized", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "LynxRitualToken", + "v0.0.0", + "0x871EbA00295fF9c329dbCF2Cd329cd89FD926192", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_totalSupplyOfTokens", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "spender", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "to", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "allowance", + "stateMutability": "view", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "approve", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "balanceOf", + "stateMutability": "view", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "decimals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ] + }, + { + "type": "function", + "name": "decreaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "subtractedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "increaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "addedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "name", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "symbol", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "totalSupply", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "transfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "transferFrom", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + } + ] + ], + [ + "Coordinator", + "v0.0.0", + "0x7c8EA2d03fA65088fA85B889da365035555e4394", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_application", + "type": "address", + "internalType": "contract ITACoChildApplication" + }, + { + "name": "_timeout", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_maxDkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + }, + { + "name": "_currency", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "_feeRatePerSecond", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "AggregationPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "aggregatedTranscriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeScheduled", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48", + "indexed": false + }, + { + "name": "effectSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferScheduled", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "acceptSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EndRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "successful", + "type": "bool", + "internalType": "bool", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MaxDkgSizeChanged", + "inputs": [ + { + "name": "oldSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + }, + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParticipantPublicKeySet", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "participant", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "newAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartAggregationRound", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "authority", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "participants", + "type": "address[]", + "internalType": "address[]", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TimeoutChanged", + "inputs": [ + { + "name": "oldTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + }, + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TranscriptPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "transcriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "INITIATOR_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "TREASURY_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "acceptDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "application", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildApplication" + } + ] + }, + { + "type": "function", + "name": "beginDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cancelDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "changeDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cohortFingerprint", + "stateMutability": "pure", + "inputs": [ + { + "name": "nodes", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "currency", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ] + }, + { + "type": "function", + "name": "defaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelayIncreaseWait", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "feeRatePerSecond", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getAuthority", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "getParticipantFromProvider", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant" + } + ] + }, + { + "type": "function", + "name": "getParticipants", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant[]" + } + ] + }, + { + "type": "function", + "name": "getProviderPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + }, + { + "name": "_ritualId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ] + }, + { + "type": "function", + "name": "getPublicKeyFromRitualId", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ] + }, + { + "type": "function", + "name": "getRitualIdFromPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ], + "outputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "getRitualInitiationCost", + "stateMutability": "view", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getRitualState", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum Coordinator.RitualState" + } + ] + }, + { + "type": "function", + "name": "getRoleAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "getThresholdForRitualSize", + "stateMutability": "pure", + "inputs": [ + { + "name": "size", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "grantRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "hasRole", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "initiateRitual", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "isEncryptionAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "evidence", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "ciphertextHeader", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isInitiationPublic", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isProviderPublicKeySet", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isRitualFinalized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "makeInitiationPublic", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "maxDkgSize", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "numberOfRituals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingFees", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "postAggregation", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "postTranscript", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "processPendingFee", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "renounceRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "revokeRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "rituals", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "initiator", + "type": "address", + "internalType": "address" + }, + { + "name": "initTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "endTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "totalTranscripts", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "totalAggregations", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "dkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "threshold", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "aggregationMismatch", + "type": "bool", + "internalType": "bool" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "function", + "name": "rollbackDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setMaxDkgSize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setProviderPublicKey", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setReimbursementPool", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "contract IReimbursementPool" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setRitualAuthority", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setTimeout", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "supportsInterface", + "stateMutability": "view", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "timeout", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "totalPendingFees", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "withdrawTokens", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [] + } + ] + ], + [ + "GlobalAllowList", + "v0.0.0", + "0xa7aF704855EA2a2513C56212D45b86287205520E", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "contract Coordinator" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeScheduled", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48", + "indexed": false + }, + { + "name": "effectSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferScheduled", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "acceptSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "newAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "acceptDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "authorize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "addresses", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "beginDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cancelDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "changeDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "coordinator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract Coordinator" + } + ] + }, + { + "type": "function", + "name": "deauthorize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "addresses", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "defaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelayIncreaseWait", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "getRoleAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "grantRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "hasRole", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isAddressAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "encryptor", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "evidence", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "ciphertextHeader", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "renounceRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "revokeRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "rollbackDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setCoordinator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "contract Coordinator" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "supportsInterface", + "stateMutability": "view", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + } + ] + ] +] diff --git a/deployments/constructor_params/lynx-alpha-13-params.json b/deployments/constructor_params/lynx/lynx-alpha-13-params.json similarity index 100% rename from deployments/constructor_params/lynx-alpha-13-params.json rename to deployments/constructor_params/lynx/lynx-alpha-13-params.json diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index 510df569..f77db1d5 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -11,8 +11,8 @@ from scripts.registry import registry_from_ape_deployments VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS -CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx-alpha-13-params.json" -REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx-alpha-13-registry.json" +CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-params.json" +REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-registry.json" def main(): From 48c43e5cbeef66622d0ed2044e9c9bd140a0c787 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 11:31:42 -0400 Subject: [PATCH 057/112] Allow empty bytes parameter to be specified as a SPECIAL_VARIABLE. Handle the cases where the contract container is housed in a project dependency. --- scripts/deploy_lynx.py | 4 ++-- scripts/deployment.py | 44 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx.py index f77db1d5..b450ea40 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx.py @@ -49,7 +49,7 @@ def main(): ) root_application = deployer.deploy( - *params.get(project.LynxRootApplication), **params.get_kwargs() + *params.get(project.LynxMockRootApplication), **params.get_kwargs() ) child_application = deployer.deploy( @@ -80,7 +80,7 @@ def main(): ] registry_names = { - root_application.contract_type.name: "TACoApplication", + # TACoApplication will be available on Goerli (not on Mumbai) so no rename here child_application.contract_type.name: "TACoChildApplication", } diff --git a/scripts/deployment.py b/scripts/deployment.py index a04c22b1..1a410773 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -8,18 +8,17 @@ from ape.api import AccountAPI from ape.cli import get_user_selected_account from ape.contracts.base import ContractContainer -from web3.auto.gethdev import w3 - from scripts.constants import NULL_ADDRESS from scripts.utils import check_etherscan_plugin, check_infura_plugin, check_registry_filepath +from web3.auto.gethdev import w3 VARIABLE_PREFIX = "$" +SPECIAL_VARIABLES = {"EMPTY_BYTES": b""} + def prepare_deployment( - params_filepath: Path, - registry_filepath: Path, - publish: bool = False + params_filepath: Path, registry_filepath: Path, publish: bool = False ) -> typing.Tuple[AccountAPI, "ApeDeploymentParameters"]: """ Prepares the deployment by loading the deployment parameters @@ -54,8 +53,12 @@ def _resolve_param(value: Any) -> Any: """Resolves a single parameter value.""" if not _is_variable(value): return value # literally a value + variable = value.strip(VARIABLE_PREFIX) - contract_container = getattr(project, variable) + if variable in SPECIAL_VARIABLES: + return SPECIAL_VARIABLES[variable] + + contract_container = _get_contract_container(variable) contract_instances = contract_container.deployments if not contract_instances: return NULL_ADDRESS @@ -90,7 +93,7 @@ def _validate_constructor_param(param: Any, contracts: List[str]) -> None: if not _is_variable(param): return # literally a value variable = param.strip(VARIABLE_PREFIX) - if variable not in contracts: + if (variable not in contracts) and (variable not in SPECIAL_VARIABLES): raise ConstructorParameters.Invalid(f"Variable {param} is not resolvable") @@ -136,6 +139,30 @@ def _validate_constructor_abi_inputs( ) +def _get_dependency_contract_container(contract: str) -> ContractContainer: + for dependency_name, dependency_versions in project.dependencies.items(): + if len(dependency_versions) > 1: + raise ValueError(f"Ambiguous {dependency_name} dependency for {contract}") + try: + dependency_api = list(dependency_versions.values())[0] + contract_container = getattr(dependency_api, contract) + return contract_container + except AttributeError: + continue + + raise ValueError(f"No contract found for {contract}") + + +def _get_contract_container(contract: str) -> ContractContainer: + try: + contract_container = getattr(project, contract) + except AttributeError: + # not in root project; check dependencies + contract_container = _get_dependency_contract_container(contract) + + return contract_container + + def validate_constructor_parameters(config: typing.OrderedDict[str, Any]) -> None: """Validates the constructor parameters for all contracts in a single config.""" available_contracts = list(config.keys()) @@ -145,7 +172,8 @@ def validate_constructor_parameters(config: typing.OrderedDict[str, Any]) -> Non _validate_constructor_param_list(value, available_contracts) else: _validate_constructor_param(value, available_contracts) - contract_container = getattr(project, contract) + + contract_container = _get_contract_container(contract) _validate_constructor_abi_inputs( contract_name=contract, abi_inputs=contract_container.constructor.abi.inputs, From 3ab22f2750fc49752a12ea0b9ac31b21bbe572e7 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 11:37:26 -0400 Subject: [PATCH 058/112] Modify our Lynx strategy so that TACoApplication can be deployed on Goerli, and child application etc. on Mumbai. The bridge is non-existent but owners of the contract can execute txs to similate bridge/synching functionality. Separate deployment scripts for Goerli deployment, and Mumbai. --- contracts/contracts/testnet/LynxSet.sol | 192 ++---------------- .../lynx/lynx-alpha-13-params.json | 4 +- .../lynx/lynx-alpha-13-root-params.json | 24 +++ scripts/deploy_lynx_root.py | 78 +++++++ 4 files changed, 121 insertions(+), 177 deletions(-) create mode 100644 deployments/constructor_params/lynx/lynx-alpha-13-root-params.json create mode 100644 scripts/deploy_lynx_root.py diff --git a/contracts/contracts/testnet/LynxSet.sol b/contracts/contracts/testnet/LynxSet.sol index 8f6d0542..0fa6503e 100644 --- a/contracts/contracts/testnet/LynxSet.sol +++ b/contracts/contracts/testnet/LynxSet.sol @@ -8,190 +8,32 @@ import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "../coordination/ITACoRootToChild.sol"; import "../coordination/ITACoChildToRoot.sol"; import "../coordination/TACoChildApplication.sol"; +import "../TACoApplication.sol"; -contract LynxRootApplication is Ownable, ITACoChildToRoot { - struct StakingProviderInfo { - address operator; - bool operatorConfirmed; - uint64 operatorStartTimestamp; - uint96 authorized; - } - - uint96 public immutable minimumAuthorization = 40000000000000000000000; - uint256 public immutable minOperatorSeconds = 3600; - ITACoRootToChild public childApplication; - mapping(address => StakingProviderInfo) public stakingProviderInfo; - address[] public stakingProviders; - mapping(address => address) internal _stakingProviderFromOperator; - - function setChildApplication(ITACoRootToChild _childApplication) external onlyOwner { - childApplication = _childApplication; - } - - function updateAuthorization(address _stakingProvider, uint96 _amount) external onlyOwner { - if (address(childApplication) != address(0)) { - childApplication.updateAuthorization(_stakingProvider, _amount); - } - } - - function confirmOperatorAddress(address _operator) external override { - address stakingProvider = _stakingProviderFromOperator[_operator]; - if (stakingProvider == address(0)) { - return; - } - StakingProviderInfo storage info = stakingProviderInfo[stakingProvider]; - if (!info.operatorConfirmed) { - info.operatorConfirmed = true; - } - } - - // - // Required TACoApplication functions - // - function stakingProviderFromOperator(address _operator) public view returns (address) { - return _stakingProviderFromOperator[_operator]; - } - - function getOperatorFromStakingProvider( - address _stakingProvider - ) public view returns (address) { - return stakingProviderInfo[_stakingProvider].operator; - } - - function getActiveStakingProviders( - uint256 _startIndex, - uint256 _maxStakingProviders - ) - external - view - returns (uint256 allAuthorizedTokens, uint256[2][] memory activeStakingProviders) - { - uint256 endIndex = stakingProviders.length; - require(_startIndex < endIndex, "Wrong start index"); - if (_maxStakingProviders != 0 && _startIndex + _maxStakingProviders < endIndex) { - endIndex = _startIndex + _maxStakingProviders; - } - activeStakingProviders = new uint256[2][](endIndex - _startIndex); - allAuthorizedTokens = 0; - - uint256 resultIndex = 0; - for (uint256 i = _startIndex; i < endIndex; i++) { - address stakingProvider = stakingProviders[i]; - StakingProviderInfo storage info = stakingProviderInfo[stakingProvider]; - uint256 eligibleAmount = info.authorized; - activeStakingProviders[resultIndex][0] = uint256(uint160(stakingProvider)); - activeStakingProviders[resultIndex++][1] = eligibleAmount; - allAuthorizedTokens += eligibleAmount; - } - assembly { - mstore(activeStakingProviders, resultIndex) - } - } - - function isAuthorized(address _stakingProvider) public view returns (bool) { - return stakingProviderInfo[_stakingProvider].authorized > 0; - } - - function authorizedStake(address _stakingProvider) public view returns (uint96) { - return stakingProviderInfo[_stakingProvider].authorized; - } +contract LynxMockTACoChildApplication is Ownable, ITACoChildToRoot { + ITACoChildToRoot public immutable rootApplication; - function isOperatorConfirmed(address _operator) public view returns (bool) { - address stakingProvider = _stakingProviderFromOperator[_operator]; - StakingProviderInfo storage info = stakingProviderInfo[stakingProvider]; - return info.operatorConfirmed; - } - - function getStakingProvidersLength() external view returns (uint256) { - return stakingProviders.length; - } - - function bondOperator(address _stakingProvider, address _operator) external onlyOwner { - StakingProviderInfo storage info = stakingProviderInfo[_stakingProvider]; - address previousOperator = info.operator; + constructor(ITACoChildToRoot _rootApplication) { require( - _operator != previousOperator, - "Specified operator is already bonded with this provider" + address(_rootApplication) != address(0), + "Address for root application must be specified" ); - // If this staker had a operator ... - if (previousOperator != address(0)) { - // Remove the old relation "operator->stakingProvider" - _stakingProviderFromOperator[previousOperator] = address(0); - } - - if (_operator != address(0)) { - require( - _stakingProviderFromOperator[_operator] == address(0), - "Specified operator is already in use" - ); - // Set new operator->stakingProvider relation - _stakingProviderFromOperator[_operator] = _stakingProvider; - } - - if (info.operatorStartTimestamp == 0) { - stakingProviders.push(_stakingProvider); - } - - // Bond new operator (or unbond if _operator == address(0)) - info.operator = _operator; - info.operatorStartTimestamp = uint64(block.timestamp); - info.operatorConfirmed = false; - if (address(childApplication) != address(0)) { - childApplication.updateOperator(_stakingProvider, _operator); - } + rootApplication = _rootApplication; } - // - // Remaining IApplication functions - // - - // solhint-disable-next-line no-empty-blocks - function withdrawRewards(address stakingProvider) external {} - - function authorizationIncreased( - address _stakingProvider, - // solhint-disable-next-line no-unused-vars - uint96 _fromAmount, - uint96 _toAmount - ) external onlyOwner { - require( - _stakingProvider != address(0) && _toAmount > 0, - "Input parameters must be specified" - ); - require(_toAmount >= minimumAuthorization, "Authorization must be greater than minimum"); - - StakingProviderInfo storage info = stakingProviderInfo[_stakingProvider]; - require( - _stakingProviderFromOperator[_stakingProvider] == address(0) || - _stakingProviderFromOperator[_stakingProvider] == _stakingProvider, - "A provider can't be an operator for another provider" - ); - - info.authorized = _toAmount; - if (address(childApplication) != address(0)) { - childApplication.updateAuthorization(_stakingProvider, _toAmount); - } - } - - function authorizationDecreaseRequested( - address stakingProvider, - uint96 fromAmount, - uint96 toAmount // solhint-disable-next-line no-empty-blocks - ) external {} - - function involuntaryAuthorizationDecrease( - address stakingProvider, - uint96 fromAmount, - uint96 toAmount // solhint-disable-next-line no-empty-blocks - ) external {} - - // solhint-disable-next-line no-unused-vars - function availableRewards(address stakingProvider) external view returns (uint96) { - return 0; + function confirmOperatorAddress(address operator) external override onlyOwner { + rootApplication.confirmOperatorAddress(operator); } } -contract LynxMockRootApplication is Ownable, ITACoChildToRoot, ITACoRootToChild { +// Goerli <---------> Mumbai .... +// LynxTACoApplication LynxMockTACoApplication <---> LynxTACoChildApplication +// +// +// Registry: +// ^ TACoApplication +// ^ TACoChildApplication +contract LynxMockTACoApplication is Ownable, ITACoChildToRoot, ITACoRootToChild { ITACoRootToChild public childApplication; function setChildApplication(ITACoRootToChild _childApplication) external onlyOwner { diff --git a/deployments/constructor_params/lynx/lynx-alpha-13-params.json b/deployments/constructor_params/lynx/lynx-alpha-13-params.json index 973a7ad5..d6239c43 100644 --- a/deployments/constructor_params/lynx/lynx-alpha-13-params.json +++ b/deployments/constructor_params/lynx/lynx-alpha-13-params.json @@ -1,7 +1,7 @@ { - "LynxRootApplication": {}, + "LynxMockRootApplication": {}, "LynxTACoChildApplication": { - "_rootApplication": "$LynxRootApplication" + "_rootApplication": "$LynxMockRootApplication" }, "LynxRitualToken": { "_totalSupplyOfTokens": 10000000000000000000000000 diff --git a/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json b/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json new file mode 100644 index 00000000..6fd0dc72 --- /dev/null +++ b/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json @@ -0,0 +1,24 @@ +{ + "LynxRitualToken": { + "_totalSupplyOfTokens": 10000000000000000000000000 + }, + "ThresholdStakingForTACoApplicationMock": {}, + "ProxyAdmin": {}, + "TACoApplication": { + "_token": "$LynxRitualToken", + "_tStaking": "$ThresholdStakingForTACoApplicationMock", + "_minimumAuthorization": 40000000000000000000000, + "_minOperatorSeconds": 3600, + "_rewardDuration": 604800, + "_deauthorizationDuration": 5184000, + "_commitmentDurationOptions": [15724800, 31449600] + }, + "TransparentUpgradeableProxy": { + "_logic": "$TACoApplication", + "admin_": "$ProxyAdmin", + "_data": "$EMPTY_BYTES" + }, + "LynxMockTACoChildApplication": { + "_rootApplication": "$TACoApplication" + } +} diff --git a/scripts/deploy_lynx_root.py b/scripts/deploy_lynx_root.py new file mode 100644 index 00000000..c906c223 --- /dev/null +++ b/scripts/deploy_lynx_root.py @@ -0,0 +1,78 @@ +#!/usr/bin/python3 + +from ape import networks, project +from scripts.constants import ( + ARTIFACTS_DIR, + CONSTRUCTOR_PARAMS_DIR, + CURRENT_NETWORK, + LOCAL_BLOCKCHAIN_ENVIRONMENTS, +) +from scripts.deployment import prepare_deployment +from scripts.registry import registry_from_ape_deployments + +VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS +CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-root-params.json" +REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-root-registry.json" + +OZ_DEPENDENCY = project.dependencies["openzeppelin"]["4.9.1"] + + +def main(): + """ + This script deploys only the Lynx TACo Root Application. + """ + + deployer, params = prepare_deployment( + params_filepath=CONSTRUCTOR_PARAMS_FILEPATH, + registry_filepath=REGISTRY_FILEPATH, + ) + + reward_token = deployer.deploy(*params.get(project.LynxRitualToken), **params.get_kwargs()) + + mock_threshold_staking = deployer.deploy( + *params.get(project.ThresholdStakingForTACoApplicationMock), **params.get_kwargs() + ) + + proxy_admin = deployer.deploy(*params.get(OZ_DEPENDENCY.ProxyAdmin), **params.get_kwargs()) + + _ = deployer.deploy(*params.get(project.TACoApplication), **params.get_kwargs()) + + proxy = deployer.deploy( + *params.get(OZ_DEPENDENCY.TransparentUpgradeableProxy), **params.get_kwargs() + ) + + print("\nWrapping TACoApplication in proxy") + taco_application = project.TACoApplication.at(proxy.address) + + print("\nSetting TACoApplication on ThresholdStakingMock") + mock_threshold_staking.setApplication(taco_application.address, sender=deployer) + + print("\nInitialize TACoApplication proxy") + taco_application.initialize(sender=deployer) + + mock_taco_child = deployer.deploy( + *params.get(project.LynxMockTACoChildApplication), **params.get_kwargs() + ) + + print(f"\nSetting child application {mock_taco_child.address} on TACoApplication") + taco_application.setChildApplication(mock_taco_child.address, sender=deployer) + + deployments = [ + reward_token, + proxy_admin, + mock_threshold_staking, + proxy, + taco_application, + mock_taco_child, + ] + + output_filepath = registry_from_ape_deployments( + deployments=deployments, output_filepath=REGISTRY_FILEPATH + ) + print(f"(i) Registry written to {output_filepath}!") + + if VERIFY: + etherscan = networks.provider.network.explorer + for deployment in deployments: + print(f"(i) Verifying {deployment.contract_type.name}...") + etherscan.publish_contract(deployment.address) From 3b72f9c51ad58d9069e5acb1df63fbc40d2f9adb Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 12:00:40 -0400 Subject: [PATCH 059/112] Force TestnetThresholdStaking to allow authorization increases. --- contracts/contracts/TestnetThresholdStaking.sol | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/contracts/contracts/TestnetThresholdStaking.sol b/contracts/contracts/TestnetThresholdStaking.sol index eef66099..a9f13e06 100644 --- a/contracts/contracts/TestnetThresholdStaking.sol +++ b/contracts/contracts/TestnetThresholdStaking.sol @@ -27,6 +27,14 @@ contract TestnetThresholdStaking is Ownable { return 0; } + function authorizationIncreased( + address _stakingProvider, + uint96 _fromAmount, + uint96 _toAmount + ) external onlyOwner { + application.authorizationIncreased(_stakingProvider, _fromAmount, _toAmount); + } + function setRoles( address _stakingProvider, address _owner, From d3c43e1e6c3b05a490dc51c09e35013981d76a6f Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 15:19:58 -0400 Subject: [PATCH 060/112] Add confirmation prompt whenever null address is a deployment parameter. --- scripts/deployment.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/scripts/deployment.py b/scripts/deployment.py index 1a410773..789b7e03 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -189,6 +189,13 @@ def _confirm_deployment(contract_name: str) -> None: exit(-1) +def _confirm_null_address() -> None: + answer = input(f"Null Address detected for deployment parmaeter; Continue? Y/N? ") + if answer.lower().strip() == "n": + print("Aborting deployment!") + exit(-1) + + def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> None: """Asks the user to confirm the resolved constructor parameters for a single contract.""" if len(resolved_params) == 0: @@ -197,9 +204,14 @@ def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> Non return print(f"\nConstructor parameters for {contract_name}") + contains_null_address = False for name, resolved_value in resolved_params.items(): print(f"\t{name}={resolved_value}") + if not contains_null_address: + contains_null_address = resolved_value == NULL_ADDRESS _confirm_deployment(contract_name) + if contains_null_address: + _confirm_null_address() class ConstructorParameters: From 30876af40b157377f51672e14e95174e109edabd Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 15:22:04 -0400 Subject: [PATCH 061/112] Handle proxy contracts as variables in deployment params file. Co-authored-by: Kieran Prasch --- scripts/deployment.py | 81 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 13 deletions(-) diff --git a/scripts/deployment.py b/scripts/deployment.py index 789b7e03..63134969 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -4,18 +4,21 @@ from pathlib import Path from typing import Any, List -from ape import project +from ape import chain, project from ape.api import AccountAPI from ape.cli import get_user_selected_account -from ape.contracts.base import ContractContainer +from ape.contracts.base import ContractContainer, ContractInstance from scripts.constants import NULL_ADDRESS from scripts.utils import check_etherscan_plugin, check_infura_plugin, check_registry_filepath from web3.auto.gethdev import w3 VARIABLE_PREFIX = "$" +PROXY_DECLARATION_DELIMETER = ":" SPECIAL_VARIABLES = {"EMPTY_BYTES": b""} +PROXY_NAME = "TransparentUpgradeableProxy" + def prepare_deployment( params_filepath: Path, registry_filepath: Path, publish: bool = False @@ -43,31 +46,65 @@ def prepare_deployment( return deployer_account, deployment_parameters +def _is_proxy_variable(variable: str): + return PROXY_DECLARATION_DELIMETER in variable + + +def _resolve_proxy_address(variable) -> str: + proxy, target = variable.split(PROXY_DECLARATION_DELIMETER) + target_contract_container = _get_contract_container(target) + target_contract_instance = _get_contract_instance(target_contract_container) + if target_contract_instance == NULL_ADDRESS: + # eager validation + return NULL_ADDRESS + + local_proxies = chain.contracts._local_proxies + for proxy_address, proxy_info in local_proxies.items(): + if proxy_info.target == target_contract_instance.address: + return proxy_address + + raise ConstructorParameters.Invalid(f"Could not determine proxy for {variable}") + + def _is_variable(param: Any) -> bool: """Returns True if the param is a variable.""" result = isinstance(param, str) and param.startswith(VARIABLE_PREFIX) return result +def _get_contract_instance(contract_container: ContractContainer) -> ContractInstance: + contract_instances = contract_container.deployments + if not contract_instances: + return NULL_ADDRESS + if len(contract_instances) != 1: + raise ConstructorParameters.Invalid( + f"Variable {contract_container.contract_type.name} is ambiguous - " + f"expected exactly one contract instance, got {len(contract_instances)}" + ) + contract_instance = contract_instances[0] + return contract_instance + + def _resolve_param(value: Any) -> Any: """Resolves a single parameter value.""" if not _is_variable(value): return value # literally a value variable = value.strip(VARIABLE_PREFIX) + + # special values if variable in SPECIAL_VARIABLES: return SPECIAL_VARIABLES[variable] + # proxied contract + if _is_proxy_variable(variable): + return _resolve_proxy_address(variable) + contract_container = _get_contract_container(variable) - contract_instances = contract_container.deployments - if not contract_instances: + contract_instance = _get_contract_instance(contract_container) + if contract_instance == NULL_ADDRESS: return NULL_ADDRESS - if len(contract_instances) != 1: - raise ConstructorParameters.Invalid( - f"Variable {value} is ambiguous - " - f"expected exactly one contract instance, got {len(contract_instances)}" - ) - contract_instance = contract_instances[0] + return contract_instance.address @@ -93,8 +130,26 @@ def _validate_constructor_param(param: Any, contracts: List[str]) -> None: if not _is_variable(param): return # literally a value variable = param.strip(VARIABLE_PREFIX) - if (variable not in contracts) and (variable not in SPECIAL_VARIABLES): - raise ConstructorParameters.Invalid(f"Variable {param} is not resolvable") + + if _is_proxy_variable(variable): + proxy, target = variable.split(PROXY_DECLARATION_DELIMETER) + + if proxy != PROXY_NAME: + raise ConstructorParameters.Invalid( + f"Ambiguous proxy variable {param}; only {PROXY_NAME} " + f"allowed before '{PROXY_DECLARATION_DELIMETER}'" + ) + + # check proxy target + variable = target + + if variable in SPECIAL_VARIABLES: + return + + if variable in contracts: + return + + raise ConstructorParameters.Invalid(f"Variable {param} is not resolvable") def _validate_constructor_param_list(params: List[Any], contracts: List[str]) -> None: @@ -190,7 +245,7 @@ def _confirm_deployment(contract_name: str) -> None: def _confirm_null_address() -> None: - answer = input(f"Null Address detected for deployment parmaeter; Continue? Y/N? ") + answer = input("Null Address detected for deployment parameter; Continue? Y/N? ") if answer.lower().strip() == "n": print("Aborting deployment!") exit(-1) From 4e35100d36c35ad6d6d7b52d9c1f7dceac6ffda6 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 15:24:17 -0400 Subject: [PATCH 062/112] Update deployment of lynx child (mumbai deployments) to use proxy contracts and testnet threshold staking contract. --- .../lynx/lynx-alpha-13-child-params.json | 27 +++++++++++++ .../{deploy_lynx.py => deploy_lynx_child.py} | 39 +++++++++++-------- 2 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 deployments/constructor_params/lynx/lynx-alpha-13-child-params.json rename scripts/{deploy_lynx.py => deploy_lynx_child.py} (69%) diff --git a/deployments/constructor_params/lynx/lynx-alpha-13-child-params.json b/deployments/constructor_params/lynx/lynx-alpha-13-child-params.json new file mode 100644 index 00000000..e71383a4 --- /dev/null +++ b/deployments/constructor_params/lynx/lynx-alpha-13-child-params.json @@ -0,0 +1,27 @@ +{ + "LynxMockTACoApplication": {}, + "ProxyAdmin": {}, + "LynxTACoChildApplication": { + "_rootApplication": "$LynxMockTACoApplication" + }, + "TransparentUpgradeableProxy": { + "_logic": "$LynxTACoChildApplication", + "admin_": "$ProxyAdmin", + "_data": "$EMPTY_BYTES" + }, + "LynxRitualToken": { + "_totalSupplyOfTokens": 10000000000000000000000000 + }, + "Coordinator": { + "_application": "$TransparentUpgradeableProxy:LynxTACoChildApplication", + "_timeout": 3600, + "_maxDkgSize": 4, + "_admin": "0x1e6f0dfb1775f5032f12f56a01526351eD3F07aF", + "_currency": "$LynxRitualToken", + "_feeRatePerSecond": 1 + }, + "GlobalAllowList": { + "_coordinator": "$Coordinator", + "_admin": "0x1e6f0dfb1775f5032f12f56a01526351eD3F07aF" + } +} diff --git a/scripts/deploy_lynx.py b/scripts/deploy_lynx_child.py similarity index 69% rename from scripts/deploy_lynx.py rename to scripts/deploy_lynx_child.py index b450ea40..6a0f9abe 100644 --- a/scripts/deploy_lynx.py +++ b/scripts/deploy_lynx_child.py @@ -11,14 +11,16 @@ from scripts.registry import registry_from_ape_deployments VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS -CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-params.json" -REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-registry.json" +CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-child-params.json" +REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-child-registry.json" + +OZ_DEPENDENCY = project.dependencies["openzeppelin"]["4.9.1"] def main(): """ - This script deploys the Lynx TACo Root Application, - Lynx TACo Child Application, Lynx Ritual Token, and Lynx Coordinator. + This script deploys the Mock Lynx TACo Root Application, + Proxied Lynx TACo Child Application, Lynx Ritual Token, and Lynx Coordinator. September 18, 2023, Goerli Deployment: ape run testnet deploy_lynx --network ethereum:goerli: @@ -49,16 +51,23 @@ def main(): ) root_application = deployer.deploy( - *params.get(project.LynxMockRootApplication), **params.get_kwargs() + *params.get(project.LynxMockTACoApplication), **params.get_kwargs() ) - child_application = deployer.deploy( - *params.get(project.LynxTACoChildApplication), **params.get_kwargs() + proxy_admin = deployer.deploy(*params.get(OZ_DEPENDENCY.ProxyAdmin), **params.get_kwargs()) + + _ = deployer.deploy(*params.get(project.LynxTACoChildApplication), **params.get_kwargs()) + + proxy = deployer.deploy( + *params.get(OZ_DEPENDENCY.TransparentUpgradeableProxy), **params.get_kwargs() ) + print("\nWrapping TACoChildApplication in proxy") + taco_child_application = project.LynxTACoChildApplication.at(proxy.address) + print("\nSetting TACo Child application on TACo Root") root_application.setChildApplication( - child_application.address, + taco_child_application.address, sender=deployer, ) @@ -66,26 +75,22 @@ def main(): coordinator = deployer.deploy(*params.get(project.Coordinator), **params.get_kwargs()) - print("\nSetting Coordinator on TACo Child application") - child_application.setCoordinator(coordinator.address, sender=deployer) + print(f"\nInitialize TACoChildApplication proxy with Coordinator {coordinator.address}") + taco_child_application.initialize(coordinator.address, sender=deployer) global_allow_list = deployer.deploy(*params.get(project.GlobalAllowList), **params.get_kwargs()) deployments = [ root_application, - child_application, + proxy_admin, + taco_child_application, ritual_token, coordinator, global_allow_list, ] - registry_names = { - # TACoApplication will be available on Goerli (not on Mumbai) so no rename here - child_application.contract_type.name: "TACoChildApplication", - } - output_filepath = registry_from_ape_deployments( - deployments=deployments, registry_names=registry_names, output_filepath=REGISTRY_FILEPATH + deployments=deployments, output_filepath=REGISTRY_FILEPATH ) print(f"(i) Registry written to {output_filepath}!") From a42d2dfb5064b12724e431f557548849cf73fd54 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 15:27:01 -0400 Subject: [PATCH 063/112] Update deploy lynx root (Goerli contracts) to proxy TACoApplication and use a mocked TACo child. --- .../lynx/lynx-alpha-13-params.json | 21 ------------------- .../lynx/lynx-alpha-13-root-params.json | 2 +- scripts/deploy_lynx_root.py | 2 +- 3 files changed, 2 insertions(+), 23 deletions(-) delete mode 100644 deployments/constructor_params/lynx/lynx-alpha-13-params.json diff --git a/deployments/constructor_params/lynx/lynx-alpha-13-params.json b/deployments/constructor_params/lynx/lynx-alpha-13-params.json deleted file mode 100644 index d6239c43..00000000 --- a/deployments/constructor_params/lynx/lynx-alpha-13-params.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "LynxMockRootApplication": {}, - "LynxTACoChildApplication": { - "_rootApplication": "$LynxMockRootApplication" - }, - "LynxRitualToken": { - "_totalSupplyOfTokens": 10000000000000000000000000 - }, - "Coordinator": { - "_application": "$LynxTACoChildApplication", - "_timeout": 3600, - "_maxDkgSize": 4, - "_admin": "0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600", - "_currency": "$LynxRitualToken", - "_feeRatePerSecond": 1 - }, - "GlobalAllowList": { - "_coordinator": "$Coordinator", - "_admin": "0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600" - } -} diff --git a/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json b/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json index 6fd0dc72..729ab78d 100644 --- a/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json +++ b/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json @@ -19,6 +19,6 @@ "_data": "$EMPTY_BYTES" }, "LynxMockTACoChildApplication": { - "_rootApplication": "$TACoApplication" + "_rootApplication": "$TransparentUpgradeableProxy:TACoApplication" } } diff --git a/scripts/deploy_lynx_root.py b/scripts/deploy_lynx_root.py index c906c223..e23493f9 100644 --- a/scripts/deploy_lynx_root.py +++ b/scripts/deploy_lynx_root.py @@ -19,7 +19,7 @@ def main(): """ - This script deploys only the Lynx TACo Root Application. + This script deploys only the Proxied Lynx TACo Root Application. """ deployer, params = prepare_deployment( From c2988164cac21bdba5fc658f94891ba933c348e0 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 15:51:47 -0400 Subject: [PATCH 064/112] Rename constant that represents special value variables. --- scripts/deployment.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/deployment.py b/scripts/deployment.py index 63134969..2fd37e96 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -15,7 +15,7 @@ VARIABLE_PREFIX = "$" PROXY_DECLARATION_DELIMETER = ":" -SPECIAL_VARIABLES = {"EMPTY_BYTES": b""} +SPECIAL_VALUE_VARIABLES = {"EMPTY_BYTES": b""} PROXY_NAME = "TransparentUpgradeableProxy" @@ -93,8 +93,8 @@ def _resolve_param(value: Any) -> Any: variable = value.strip(VARIABLE_PREFIX) # special values - if variable in SPECIAL_VARIABLES: - return SPECIAL_VARIABLES[variable] + if variable in SPECIAL_VALUE_VARIABLES: + return SPECIAL_VALUE_VARIABLES[variable] # proxied contract if _is_proxy_variable(variable): @@ -143,7 +143,7 @@ def _validate_constructor_param(param: Any, contracts: List[str]) -> None: # check proxy target variable = target - if variable in SPECIAL_VARIABLES: + if variable in SPECIAL_VALUE_VARIABLES: return if variable in contracts: From 2ca8ece70cd810593854744e4167ec91bf468cbf Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 25 Sep 2023 22:43:54 +0200 Subject: [PATCH 065/112] Adds LynxStakingToken to LynxSet.sol --- contracts/contracts/testnet/LynxSet.sol | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/contracts/contracts/testnet/LynxSet.sol b/contracts/contracts/testnet/LynxSet.sol index 0fa6503e..ae001c97 100644 --- a/contracts/contracts/testnet/LynxSet.sol +++ b/contracts/contracts/testnet/LynxSet.sol @@ -76,3 +76,9 @@ contract LynxRitualToken is ERC20("LynxRitualToken", "LRT") { _mint(msg.sender, _totalSupplyOfTokens); } } + +contract LynxStakingToken is ERC20("LynxStakingToken", "LST") { + constructor(uint256 _totalSupplyOfTokens) { + _mint(msg.sender, _totalSupplyOfTokens); + } +} From 3298e719359055a8f321306f730f2ed15cc416f1 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 25 Sep 2023 22:44:37 +0200 Subject: [PATCH 066/112] track taco child implementation artifacts --- scripts/deploy_lynx_child.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/deploy_lynx_child.py b/scripts/deploy_lynx_child.py index 6a0f9abe..6f8c3e98 100644 --- a/scripts/deploy_lynx_child.py +++ b/scripts/deploy_lynx_child.py @@ -56,7 +56,7 @@ def main(): proxy_admin = deployer.deploy(*params.get(OZ_DEPENDENCY.ProxyAdmin), **params.get_kwargs()) - _ = deployer.deploy(*params.get(project.LynxTACoChildApplication), **params.get_kwargs()) + taco_implementation = deployer.deploy(*params.get(project.LynxTACoChildApplication), **params.get_kwargs()) proxy = deployer.deploy( *params.get(OZ_DEPENDENCY.TransparentUpgradeableProxy), **params.get_kwargs() @@ -83,6 +83,7 @@ def main(): deployments = [ root_application, proxy_admin, + taco_implementation, taco_child_application, ritual_token, coordinator, From bc20e6f8057e142cd976bda900b6f3de19f71852 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 25 Sep 2023 22:45:07 +0200 Subject: [PATCH 067/112] deploy LynxStakingToken on root network as omck for T --- scripts/deploy_lynx_root.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy_lynx_root.py b/scripts/deploy_lynx_root.py index e23493f9..288bfcd8 100644 --- a/scripts/deploy_lynx_root.py +++ b/scripts/deploy_lynx_root.py @@ -27,7 +27,7 @@ def main(): registry_filepath=REGISTRY_FILEPATH, ) - reward_token = deployer.deploy(*params.get(project.LynxRitualToken), **params.get_kwargs()) + reward_token = deployer.deploy(*params.get(project.LynxStakingToken), **params.get_kwargs()) mock_threshold_staking = deployer.deploy( *params.get(project.ThresholdStakingForTACoApplicationMock), **params.get_kwargs() From 620cb85fcc700e586b5ce4f40f250e8cc3565087 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 25 Sep 2023 22:45:33 +0200 Subject: [PATCH 068/112] ThresholdStakingForTACoApplicationMock -> TetsnetThresholdStaking --- scripts/deploy_lynx_root.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy_lynx_root.py b/scripts/deploy_lynx_root.py index 288bfcd8..28b13f48 100644 --- a/scripts/deploy_lynx_root.py +++ b/scripts/deploy_lynx_root.py @@ -30,7 +30,7 @@ def main(): reward_token = deployer.deploy(*params.get(project.LynxStakingToken), **params.get_kwargs()) mock_threshold_staking = deployer.deploy( - *params.get(project.ThresholdStakingForTACoApplicationMock), **params.get_kwargs() + *params.get(project.TestnetThresholdStaking), **params.get_kwargs() ) proxy_admin = deployer.deploy(*params.get(OZ_DEPENDENCY.ProxyAdmin), **params.get_kwargs()) From a8cb1af32b3fc7bbd5c2ae1872d81e9b03f864a7 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 25 Sep 2023 22:46:20 +0200 Subject: [PATCH 069/112] updates lynx deployment parameters --- .../lynx/lynx-alpha-13-child-params.json | 4 ++-- .../lynx/lynx-alpha-13-root-params.json | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/deployments/constructor_params/lynx/lynx-alpha-13-child-params.json b/deployments/constructor_params/lynx/lynx-alpha-13-child-params.json index e71383a4..fff5fde1 100644 --- a/deployments/constructor_params/lynx/lynx-alpha-13-child-params.json +++ b/deployments/constructor_params/lynx/lynx-alpha-13-child-params.json @@ -16,12 +16,12 @@ "_application": "$TransparentUpgradeableProxy:LynxTACoChildApplication", "_timeout": 3600, "_maxDkgSize": 4, - "_admin": "0x1e6f0dfb1775f5032f12f56a01526351eD3F07aF", + "_admin": "0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600", "_currency": "$LynxRitualToken", "_feeRatePerSecond": 1 }, "GlobalAllowList": { "_coordinator": "$Coordinator", - "_admin": "0x1e6f0dfb1775f5032f12f56a01526351eD3F07aF" + "_admin": "0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600" } } diff --git a/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json b/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json index 729ab78d..20d6dff5 100644 --- a/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json +++ b/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json @@ -1,12 +1,12 @@ { - "LynxRitualToken": { + "LynxStakingToken": { "_totalSupplyOfTokens": 10000000000000000000000000 }, - "ThresholdStakingForTACoApplicationMock": {}, + "TestnetThresholdStaking": {}, "ProxyAdmin": {}, "TACoApplication": { - "_token": "$LynxRitualToken", - "_tStaking": "$ThresholdStakingForTACoApplicationMock", + "_token": "$LynxStakingToken", + "_tStaking": "$TestnetThresholdStaking", "_minimumAuthorization": 40000000000000000000000, "_minOperatorSeconds": 3600, "_rewardDuration": 604800, From b0630f66d44aa807195b5ba33971dbfc6a49c25c Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 25 Sep 2023 22:46:40 +0200 Subject: [PATCH 070/112] Lynx root network registry --- .../lynx/lynx-alpha-13-root-registry.json | 2124 +++++++++++++++++ 1 file changed, 2124 insertions(+) create mode 100644 deployments/artifacts/lynx/lynx-alpha-13-root-registry.json diff --git a/deployments/artifacts/lynx/lynx-alpha-13-root-registry.json b/deployments/artifacts/lynx/lynx-alpha-13-root-registry.json new file mode 100644 index 00000000..e5578222 --- /dev/null +++ b/deployments/artifacts/lynx/lynx-alpha-13-root-registry.json @@ -0,0 +1,2124 @@ +[ + [ + "LynxStakingToken", + "v0.0.0", + "0x90990F1F7C952D4D02759802565d62479e8aA936", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_totalSupplyOfTokens", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "spender", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "to", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "allowance", + "stateMutability": "view", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "approve", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "balanceOf", + "stateMutability": "view", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "decimals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ] + }, + { + "type": "function", + "name": "decreaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "subtractedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "increaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "addedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "name", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "symbol", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "totalSupply", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "transfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "transferFrom", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + } + ] + ], + [ + "ProxyAdmin", + "v0.0.0", + "0x3e1E113A6d6D8e15e4F9d71D3144339E205410af", + [ + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "changeProxyAdmin", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "proxy", + "type": "address", + "internalType": "contract ITransparentUpgradeableProxy" + }, + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "getProxyAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "proxy", + "type": "address", + "internalType": "contract ITransparentUpgradeableProxy" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "getProxyImplementation", + "stateMutability": "view", + "inputs": [ + { + "name": "proxy", + "type": "address", + "internalType": "contract ITransparentUpgradeableProxy" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "upgrade", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "proxy", + "type": "address", + "internalType": "contract ITransparentUpgradeableProxy" + }, + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "upgradeAndCall", + "stateMutability": "payable", + "inputs": [ + { + "name": "proxy", + "type": "address", + "internalType": "contract ITransparentUpgradeableProxy" + }, + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + } + ] + ], + [ + "TestnetThresholdStaking", + "v0.0.0", + "0xcdD63981c8f4a2A684d102f7d7693A1c326CDd33", + [ + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "application", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IApplication" + } + ] + }, + { + "type": "function", + "name": "authorizationIncreased", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_fromAmount", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "_toAmount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "authorizedStake", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "rolesOf", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "authorizer", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "setApplication", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_application", + "type": "address", + "internalType": "contract IApplication" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setRoles", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setRoles", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_owner", + "type": "address", + "internalType": "address" + }, + { + "name": "_beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "_authorizer", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setStakes", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_tStake", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "_keepInTStake", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "_nuInTStake", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "stakedNu", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "stakes", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "tStake", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "keepInTStake", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "nuInTStake", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "stakingProviderInfo", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + }, + { + "name": "authorizer", + "type": "address", + "internalType": "address" + }, + { + "name": "tStake", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "keepInTStake", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "nuInTStake", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "TransparentUpgradeableProxy", + "v0.0.0", + "0x40ab1047a1CdE0b27F3d2d4D73e1d9050E27dA9D", + [ + { + "type": "constructor", + "stateMutability": "payable", + "inputs": [ + { + "name": "_logic", + "type": "address", + "internalType": "address" + }, + { + "name": "admin_", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "event", + "name": "AdminChanged", + "inputs": [ + { + "name": "previousAdmin", + "type": "address", + "internalType": "address", + "indexed": false + }, + { + "name": "newAdmin", + "type": "address", + "internalType": "address", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BeaconUpgraded", + "inputs": [ + { + "name": "beacon", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "receive", + "stateMutability": "payable" + } + ] + ], + [ + "TACoApplication", + "v0.0.0", + "0x40ab1047a1CdE0b27F3d2d4D73e1d9050E27dA9D", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "_tStaking", + "type": "address", + "internalType": "contract IStaking" + }, + { + "name": "_minimumAuthorization", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "_minOperatorSeconds", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_rewardDuration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_deauthorizationDuration", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_commitmentDurationOptions", + "type": "uint64[]", + "internalType": "uint64[]" + } + ] + }, + { + "type": "event", + "name": "AuthorizationDecreaseApproved", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "fromAmount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + }, + { + "name": "toAmount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AuthorizationDecreaseRequested", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "fromAmount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + }, + { + "name": "toAmount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AuthorizationIncreased", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "fromAmount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + }, + { + "name": "toAmount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AuthorizationInvoluntaryDecreased", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "fromAmount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + }, + { + "name": "toAmount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AuthorizationReSynchronized", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "fromAmount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + }, + { + "name": "toAmount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "CommitmentMade", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "endCommitment", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "internalType": "uint8", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorBonded", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "previousOperator", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "startTimestamp", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardAdded", + "inputs": [ + { + "name": "reward", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributorSet", + "inputs": [ + { + "name": "distributor", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardPaid", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "beneficiary", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "reward", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardsWithdrawn", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Slashed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "penalty", + "type": "uint256", + "internalType": "uint256", + "indexed": false + }, + { + "name": "investigator", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "reward", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "adjudicator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "authorizationDecreaseRequested", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_fromAmount", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "_toAmount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "authorizationIncreased", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_fromAmount", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "_toAmount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "authorizedOverall", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "authorizedStake", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "availableRewards", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "bondOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "childApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ] + }, + { + "type": "function", + "name": "commitmentDurationOption1", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ] + }, + { + "type": "function", + "name": "commitmentDurationOption2", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ] + }, + { + "type": "function", + "name": "commitmentDurationOption3", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ] + }, + { + "type": "function", + "name": "commitmentDurationOption4", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "deauthorizationDuration", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "finishAuthorizationDecrease", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "getActiveStakingProviders", + "stateMutability": "view", + "inputs": [ + { + "name": "_startIndex", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_maxStakingProviders", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "allAuthorizedTokens", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "activeStakingProviders", + "type": "uint256[2][]", + "internalType": "uint256[2][]" + } + ] + }, + { + "type": "function", + "name": "getBeneficiary", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "beneficiary", + "type": "address", + "internalType": "address payable" + } + ] + }, + { + "type": "function", + "name": "getOperatorFromStakingProvider", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "getStakingProvidersLength", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "initialize", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "involuntaryAuthorizationDecrease", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_fromAmount", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "_toAmount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "isAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isOperatorConfirmed", + "stateMutability": "view", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "lastTimeRewardApplicable", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "lastUpdateTime", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "makeCommitment", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_commitmentDuration", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "minOperatorSeconds", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "minimumAuthorization", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "periodFinish", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "pushReward", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_reward", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "resynchronizeAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "rewardDistributor", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "rewardDuration", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "rewardPerToken", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "rewardPerTokenStored", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "rewardRateDecimals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "setAdjudicator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_adjudicator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setChildApplication", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_childApplication", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setRewardDistributor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_rewardDistributor", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "slash", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_penalty", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "_investigator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "stakingProviderFromOperator", + "stateMutability": "view", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "stakingProviderInfo", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "operatorConfirmed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "operatorStartTimestamp", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "authorized", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "deauthorizing", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "endDeauthorization", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "tReward", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "rewardPerTokenPaid", + "type": "uint96", + "internalType": "uint96" + }, + { + "name": "endCommitment", + "type": "uint64", + "internalType": "uint64" + } + ] + }, + { + "type": "function", + "name": "stakingProviders", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "tStaking", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IStaking" + } + ] + }, + { + "type": "function", + "name": "token", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "withdrawRewards", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "LynxMockTACoChildApplication", + "v0.0.0", + "0xb5841C2707De89e6F64c1a8b9F4c2fe4d399a51a", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_rootApplication", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "rootApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ] +] \ No newline at end of file From e1ff0146671f663b13b6b9de4faba4ab10f5de04 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 25 Sep 2023 22:58:07 +0200 Subject: [PATCH 071/112] Lynx child network registry --- .../lynx/lynx-alpha-13-child-registry.json | 3208 +++++++++++++++++ 1 file changed, 3208 insertions(+) create mode 100644 deployments/artifacts/lynx/lynx-alpha-13-child-registry.json diff --git a/deployments/artifacts/lynx/lynx-alpha-13-child-registry.json b/deployments/artifacts/lynx/lynx-alpha-13-child-registry.json new file mode 100644 index 00000000..70a92e53 --- /dev/null +++ b/deployments/artifacts/lynx/lynx-alpha-13-child-registry.json @@ -0,0 +1,3208 @@ +[ + [ + "LynxMockTACoApplication", + "v0.0.0", + "0x45e06A2EaC4D928C8773A64b9eFe9d757B17F04D", + [ + { + "type": "event", + "name": "AuthorizationUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "childApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setChildApplication", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_childApplication", + "type": "address", + "internalType": "contract ITACoRootToChild" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "ProxyAdmin", + "v0.0.0", + "0xC1a87ED2FEEa048eB69EBB6e033757EF7a837Ea9", + [ + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "changeProxyAdmin", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "proxy", + "type": "address", + "internalType": "contract ITransparentUpgradeableProxy" + }, + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "getProxyAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "proxy", + "type": "address", + "internalType": "contract ITransparentUpgradeableProxy" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "getProxyImplementation", + "stateMutability": "view", + "inputs": [ + { + "name": "proxy", + "type": "address", + "internalType": "contract ITransparentUpgradeableProxy" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "upgrade", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "proxy", + "type": "address", + "internalType": "contract ITransparentUpgradeableProxy" + }, + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "upgradeAndCall", + "stateMutability": "payable", + "inputs": [ + { + "name": "proxy", + "type": "address", + "internalType": "contract ITransparentUpgradeableProxy" + }, + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + } + ] + ], + [ + "LynxTACoChildApplication", + "v0.0.0", + "0x6e8307390c3a24024de31cc2E48Df41aC094823D", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_rootApplication", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "event", + "name": "AuthorizationUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "internalType": "uint8", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "authorizedStake", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "coordinator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "initialize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "rootApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "function", + "name": "setCoordinator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "stakingProviderFromOperator", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "stakingProviderInfo", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "operatorConfirmed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "authorized", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "LynxTACoChildApplication", + "v0.0.0", + "0x55A25dff1b38Ec76E2a1A8E42f2728c7347fdF4a", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_rootApplication", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "event", + "name": "AuthorizationUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "internalType": "uint8", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorConfirmed", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperatorUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "newOwner", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "authorizedStake", + "stateMutability": "view", + "inputs": [ + { + "name": "_stakingProvider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "confirmOperatorAddress", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "coordinator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "initialize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "renounceOwnership", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "rootApplication", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ] + }, + { + "type": "function", + "name": "setCoordinator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "stakingProviderFromOperator", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "stakingProviderInfo", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "operator", + "type": "address", + "internalType": "address" + }, + { + "name": "operatorConfirmed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "authorized", + "type": "uint96", + "internalType": "uint96" + } + ] + }, + { + "type": "function", + "name": "transferOwnership", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + } + ] + ], + [ + "LynxRitualToken", + "v0.0.0", + "0x6DED3A2DCaC9dcB62253F063D765F323D6E4be82", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_totalSupplyOfTokens", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "spender", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "to", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "allowance", + "stateMutability": "view", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "approve", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "balanceOf", + "stateMutability": "view", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "decimals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ] + }, + { + "type": "function", + "name": "decreaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "subtractedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "increaseAllowance", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "addedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "name", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "symbol", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ] + }, + { + "type": "function", + "name": "totalSupply", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "transfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "transferFrom", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + } + ] + ], + [ + "Coordinator", + "v0.0.0", + "0x8E49989F9D3aD89c8ab0de21FbA2E00C67ca872F", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_application", + "type": "address", + "internalType": "contract ITACoChildApplication" + }, + { + "name": "_timeout", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_maxDkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + }, + { + "name": "_currency", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "_feeRatePerSecond", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "event", + "name": "AggregationPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "aggregatedTranscriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeScheduled", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48", + "indexed": false + }, + { + "name": "effectSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferScheduled", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "acceptSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EndRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "successful", + "type": "bool", + "internalType": "bool", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MaxDkgSizeChanged", + "inputs": [ + { + "name": "oldSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + }, + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParticipantPublicKeySet", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "participant", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "newAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartAggregationRound", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StartRitual", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "authority", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "participants", + "type": "address[]", + "internalType": "address[]", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TimeoutChanged", + "inputs": [ + { + "name": "oldTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + }, + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TranscriptPosted", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32", + "indexed": true + }, + { + "name": "node", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "transcriptDigest", + "type": "bytes32", + "internalType": "bytes32", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "INITIATOR_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "TREASURY_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "acceptDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "application", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ITACoChildApplication" + } + ] + }, + { + "type": "function", + "name": "beginDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cancelDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "changeDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cohortFingerprint", + "stateMutability": "pure", + "inputs": [ + { + "name": "nodes", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "currency", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20" + } + ] + }, + { + "type": "function", + "name": "defaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelayIncreaseWait", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "feeRatePerSecond", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getAuthority", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "getParticipantFromProvider", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant" + } + ] + }, + { + "type": "function", + "name": "getParticipants", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "components": [ + { + "name": "provider", + "type": "address", + "internalType": "address" + }, + { + "name": "aggregated", + "type": "bool", + "internalType": "bool" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "internalType": "struct Coordinator.Participant[]" + } + ] + }, + { + "type": "function", + "name": "getProviderPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + }, + { + "name": "_ritualId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ] + }, + { + "type": "function", + "name": "getPublicKeyFromRitualId", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ] + }, + { + "type": "function", + "name": "getRitualIdFromPublicKey", + "stateMutability": "view", + "inputs": [ + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + } + ], + "outputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "getRitualInitiationCost", + "stateMutability": "view", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "getRitualState", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum Coordinator.RitualState" + } + ] + }, + { + "type": "function", + "name": "getRoleAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "getThresholdForRitualSize", + "stateMutability": "pure", + "inputs": [ + { + "name": "size", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "grantRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "hasRole", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "initiateRitual", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "providers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "duration", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "isEncryptionAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "evidence", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "ciphertextHeader", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isInitiationPublic", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isProviderPublicKeySet", + "stateMutability": "view", + "inputs": [ + { + "name": "_provider", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isRitualFinalized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "makeInitiationPublic", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "maxDkgSize", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "name": "numberOfRituals", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingFees", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "postAggregation", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "dkgPublicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "decryptionRequestStaticKey", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "postTranscript", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "transcript", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "processPendingFee", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "renounceRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "revokeRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "rituals", + "stateMutability": "view", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "initiator", + "type": "address", + "internalType": "address" + }, + { + "name": "initTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "endTimestamp", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "totalTranscripts", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "totalAggregations", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + }, + { + "name": "dkgSize", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "threshold", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "aggregationMismatch", + "type": "bool", + "internalType": "bool" + }, + { + "name": "accessController", + "type": "address", + "internalType": "contract IEncryptionAuthorizer" + }, + { + "name": "publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes16", + "internalType": "bytes16" + } + ], + "internalType": "struct BLS12381.G1Point" + }, + { + "name": "aggregatedTranscript", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "function", + "name": "rollbackDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setMaxDkgSize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newSize", + "type": "uint16", + "internalType": "uint16" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setProviderPublicKey", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_publicKey", + "type": "tuple", + "components": [ + { + "name": "word0", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word1", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "word2", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "internalType": "struct BLS12381.G2Point" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setReimbursementPool", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "contract IReimbursementPool" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setRitualAuthority", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "authority", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "setTimeout", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newTimeout", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "supportsInterface", + "stateMutability": "view", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "timeout", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ] + }, + { + "type": "function", + "name": "totalPendingFees", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "name": "withdrawTokens", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "token", + "type": "address", + "internalType": "contract IERC20" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [] + } + ] + ], + [ + "GlobalAllowList", + "v0.0.0", + "0x7b521E78CFaf55fa01433181d1D636E7e4b73243", + [ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "contract Coordinator" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminDelayChangeScheduled", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48", + "indexed": false + }, + { + "name": "effectSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferCanceled", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "DefaultAdminTransferScheduled", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "acceptSchedule", + "type": "uint48", + "internalType": "uint48", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "newAdminRole", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32", + "indexed": true + }, + { + "name": "account", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "sender", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "acceptDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "authorize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "addresses", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "beginDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "cancelDefaultAdminTransfer", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "changeDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "coordinator", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract Coordinator" + } + ] + }, + { + "type": "function", + "name": "deauthorize", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "addresses", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "defaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "defaultAdminDelayIncreaseWait", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "getRoleAdmin", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "function", + "name": "grantRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "hasRole", + "stateMutability": "view", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isAddressAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "encryptor", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "isAuthorized", + "stateMutability": "view", + "inputs": [ + { + "name": "ritualId", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "evidence", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "ciphertextHeader", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "name": "owner", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdmin", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "pendingDefaultAdminDelay", + "stateMutability": "view", + "inputs": [], + "outputs": [ + { + "name": "newDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "schedule", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "type": "function", + "name": "renounceRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "revokeRole", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "rollbackDefaultAdminDelay", + "stateMutability": "nonpayable", + "inputs": [], + "outputs": [] + }, + { + "type": "function", + "name": "setCoordinator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "_coordinator", + "type": "address", + "internalType": "contract Coordinator" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "supportsInterface", + "stateMutability": "view", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ] + } + ] + ] +] \ No newline at end of file From 4a45b68cb5cdf00ce33928326ce46d2a6755c538 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 25 Sep 2023 23:00:00 +0200 Subject: [PATCH 072/112] deletes stale registries --- .../lynx/lynx-alpha-13-merged-registry.json | 3190 ----------------- .../lynx/lynx-alpha-13-registry.json | 2706 -------------- 2 files changed, 5896 deletions(-) delete mode 100644 deployments/artifacts/lynx/lynx-alpha-13-merged-registry.json delete mode 100644 deployments/artifacts/lynx/lynx-alpha-13-registry.json diff --git a/deployments/artifacts/lynx/lynx-alpha-13-merged-registry.json b/deployments/artifacts/lynx/lynx-alpha-13-merged-registry.json deleted file mode 100644 index 0a3b0f13..00000000 --- a/deployments/artifacts/lynx/lynx-alpha-13-merged-registry.json +++ /dev/null @@ -1,3190 +0,0 @@ -[ - [ - "TACoApplication", - "v0.0.0", - "0xe9e6C183fadD057b8972E12471B212288b1ca6E6", - [ - { - "type": "event", - "name": "OperatorConfirmed", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "newOwner", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "childApplication", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoRootToChild" - } - ] - }, - { - "type": "function", - "name": "confirmOperatorAddress", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "renounceOwnership", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setChildApplication", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_childApplication", - "type": "address", - "internalType": "contract ITACoRootToChild" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "transferOwnership", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateAuthorization", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "_amount", - "type": "uint96", - "internalType": "uint96" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateOperator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - } - ] - ], - [ - "TACoChildApplication", - "v0.0.0", - "0x099a6128710F7e30Ed8740644F40EE6d3e6673D1", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_rootApplication", - "type": "address", - "internalType": "contract ITACoChildToRoot" - } - ] - }, - { - "type": "event", - "name": "AuthorizationUpdated", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "amount", - "type": "uint96", - "internalType": "uint96", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint8", - "internalType": "uint8", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OperatorConfirmed", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OperatorUpdated", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "newOwner", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "authorizedStake", - "stateMutability": "view", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint96", - "internalType": "uint96" - } - ] - }, - { - "type": "function", - "name": "confirmOperatorAddress", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "coordinator", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "initialize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "renounceOwnership", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "rootApplication", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoChildToRoot" - } - ] - }, - { - "type": "function", - "name": "setCoordinator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "stakingProviderFromOperator", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "stakingProviderInfo", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "operator", - "type": "address", - "internalType": "address" - }, - { - "name": "operatorConfirmed", - "type": "bool", - "internalType": "bool" - }, - { - "name": "authorized", - "type": "uint96", - "internalType": "uint96" - } - ] - }, - { - "type": "function", - "name": "transferOwnership", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateAuthorization", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint96", - "internalType": "uint96" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateOperator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - } - ] - ], - [ - "LynxRitualToken", - "v0.0.0", - "0x871EbA00295fF9c329dbCF2Cd329cd89FD926192", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_totalSupplyOfTokens", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "spender", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "to", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "allowance", - "stateMutability": "view", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "approve", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "balanceOf", - "stateMutability": "view", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "decimals", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - } - ] - }, - { - "type": "function", - "name": "decreaseAllowance", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "subtractedValue", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "increaseAllowance", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "addedValue", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "name", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "function", - "name": "symbol", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "function", - "name": "totalSupply", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "transfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "transferFrom", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - } - ] - ], - [ - "Coordinator", - "v0.0.0", - "0x7c8EA2d03fA65088fA85B889da365035555e4394", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_application", - "type": "address", - "internalType": "contract ITACoChildApplication" - }, - { - "name": "_timeout", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "_maxDkgSize", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "_admin", - "type": "address", - "internalType": "address" - }, - { - "name": "_currency", - "type": "address", - "internalType": "contract IERC20" - }, - { - "name": "_feeRatePerSecond", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "event", - "name": "AggregationPosted", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "node", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "aggregatedTranscriptDigest", - "type": "bytes32", - "internalType": "bytes32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeScheduled", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48", - "indexed": false - }, - { - "name": "effectSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferScheduled", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "acceptSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EndRitual", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "successful", - "type": "bool", - "internalType": "bool", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MaxDkgSizeChanged", - "inputs": [ - { - "name": "oldSize", - "type": "uint16", - "internalType": "uint16", - "indexed": false - }, - { - "name": "newSize", - "type": "uint16", - "internalType": "uint16", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ParticipantPublicKeySet", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "participant", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "newAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StartAggregationRound", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StartRitual", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "authority", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "participants", - "type": "address[]", - "internalType": "address[]", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TimeoutChanged", - "inputs": [ - { - "name": "oldTimeout", - "type": "uint32", - "internalType": "uint32", - "indexed": false - }, - { - "name": "newTimeout", - "type": "uint32", - "internalType": "uint32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TranscriptPosted", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "node", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "transcriptDigest", - "type": "bytes32", - "internalType": "bytes32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "INITIATOR_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "TREASURY_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "acceptDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "application", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoChildApplication" - } - ] - }, - { - "type": "function", - "name": "beginDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cancelDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "changeDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cohortFingerprint", - "stateMutability": "pure", - "inputs": [ - { - "name": "nodes", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "currency", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IERC20" - } - ] - }, - { - "type": "function", - "name": "defaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelayIncreaseWait", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "feeRatePerSecond", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "getAuthority", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "getParticipantFromProvider", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "provider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "components": [ - { - "name": "provider", - "type": "address", - "internalType": "address" - }, - { - "name": "aggregated", - "type": "bool", - "internalType": "bool" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "internalType": "struct Coordinator.Participant" - } - ] - }, - { - "type": "function", - "name": "getParticipants", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "components": [ - { - "name": "provider", - "type": "address", - "internalType": "address" - }, - { - "name": "aggregated", - "type": "bool", - "internalType": "bool" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "internalType": "struct Coordinator.Participant[]" - } - ] - }, - { - "type": "function", - "name": "getProviderPublicKey", - "stateMutability": "view", - "inputs": [ - { - "name": "_provider", - "type": "address", - "internalType": "address" - }, - { - "name": "_ritualId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point" - } - ] - }, - { - "type": "function", - "name": "getPublicKeyFromRitualId", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - } - ] - }, - { - "type": "function", - "name": "getRitualIdFromPublicKey", - "stateMutability": "view", - "inputs": [ - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - } - ], - "outputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "getRitualInitiationCost", - "stateMutability": "view", - "inputs": [ - { - "name": "providers", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "duration", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "getRitualState", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "enum Coordinator.RitualState" - } - ] - }, - { - "type": "function", - "name": "getRoleAdmin", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "getThresholdForRitualSize", - "stateMutability": "pure", - "inputs": [ - { - "name": "size", - "type": "uint16", - "internalType": "uint16" - } - ], - "outputs": [ - { - "name": "", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "type": "function", - "name": "grantRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "hasRole", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "initiateRitual", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "providers", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - }, - { - "name": "duration", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "accessController", - "type": "address", - "internalType": "contract IEncryptionAuthorizer" - } - ], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "isEncryptionAuthorized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "evidence", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "ciphertextHeader", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isInitiationPublic", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isProviderPublicKeySet", - "stateMutability": "view", - "inputs": [ - { - "name": "_provider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isRitualFinalized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "makeInitiationPublic", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "maxDkgSize", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "type": "function", - "name": "numberOfRituals", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingFees", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "postAggregation", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "aggregatedTranscript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "postTranscript", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "processPendingFee", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "renounceRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "revokeRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "rituals", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "initiator", - "type": "address", - "internalType": "address" - }, - { - "name": "initTimestamp", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "endTimestamp", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "totalTranscripts", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "totalAggregations", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - }, - { - "name": "dkgSize", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "threshold", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "aggregationMismatch", - "type": "bool", - "internalType": "bool" - }, - { - "name": "accessController", - "type": "address", - "internalType": "contract IEncryptionAuthorizer" - }, - { - "name": "publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - }, - { - "name": "aggregatedTranscript", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "function", - "name": "rollbackDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setMaxDkgSize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newSize", - "type": "uint16", - "internalType": "uint16" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setProviderPublicKey", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setReimbursementPool", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "pool", - "type": "address", - "internalType": "contract IReimbursementPool" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setRitualAuthority", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setTimeout", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newTimeout", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "supportsInterface", - "stateMutability": "view", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "timeout", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "totalPendingFees", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "withdrawTokens", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "contract IERC20" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [] - } - ] - ], - [ - "GlobalAllowList", - "v0.0.0", - "0xa7aF704855EA2a2513C56212D45b86287205520E", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "contract Coordinator" - }, - { - "name": "_admin", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeScheduled", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48", - "indexed": false - }, - { - "name": "effectSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferScheduled", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "acceptSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "newAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "acceptDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "authorize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "addresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "beginDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cancelDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "changeDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "coordinator", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract Coordinator" - } - ] - }, - { - "type": "function", - "name": "deauthorize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "addresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "defaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelayIncreaseWait", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "getRoleAdmin", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "grantRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "hasRole", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isAddressAuthorized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "encryptor", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isAuthorized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "evidence", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "ciphertextHeader", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "renounceRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "revokeRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "rollbackDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setCoordinator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "contract Coordinator" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "supportsInterface", - "stateMutability": "view", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - } - ] - ], - [ - "SubscriptionManager", - "v0.0.0", - "0xb9015d7B35Ce7c81ddE38eF7136Baa3B1044f313", - [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldFeeRate", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newFeeRate", - "type": "uint256" - } - ], - "name": "FeeRateUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes16", - "name": "policyId", - "type": "bytes16" - }, - { - "indexed": true, - "internalType": "address", - "name": "sponsor", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint16", - "name": "size", - "type": "uint16" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "startTimestamp", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "endTimestamp", - "type": "uint32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "cost", - "type": "uint256" - } - ], - "name": "PolicyCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SET_RATE_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WITHDRAW_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes16", - "name": "_policyId", - "type": "bytes16" - }, - { - "internalType": "address", - "name": "_policyOwner", - "type": "address" - }, - { - "internalType": "uint16", - "name": "_size", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "_startTimestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_endTimestamp", - "type": "uint32" - } - ], - "name": "createPolicy", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "feeRate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes16", - "name": "_policyID", - "type": "bytes16" - } - ], - "name": "getPolicy", - "outputs": [ - { - "components": [ - { - "internalType": "address payable", - "name": "sponsor", - "type": "address" - }, - { - "internalType": "uint32", - "name": "startTimestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "endTimestamp", - "type": "uint32" - }, - { - "internalType": "uint16", - "name": "size", - "type": "uint16" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "internalType": "struct SubscriptionManager.Policy", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "_size", - "type": "uint16" - }, - { - "internalType": "uint32", - "name": "_startTimestamp", - "type": "uint32" - }, - { - "internalType": "uint32", - "name": "_endTimestamp", - "type": "uint32" - } - ], - "name": "getPolicyCost", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_feeRate", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes16", - "name": "_policyID", - "type": "bytes16" - } - ], - "name": "isPolicyActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_ratePerSecond", - "type": "uint256" - } - ], - "name": "setFeeRate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "recipient", - "type": "address" - } - ], - "name": "sweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ] - ] -] diff --git a/deployments/artifacts/lynx/lynx-alpha-13-registry.json b/deployments/artifacts/lynx/lynx-alpha-13-registry.json deleted file mode 100644 index 8fc7c805..00000000 --- a/deployments/artifacts/lynx/lynx-alpha-13-registry.json +++ /dev/null @@ -1,2706 +0,0 @@ -[ - [ - "TACoApplication", - "v0.0.0", - "0xe9e6C183fadD057b8972E12471B212288b1ca6E6", - [ - { - "type": "event", - "name": "OperatorConfirmed", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "newOwner", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "childApplication", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoRootToChild" - } - ] - }, - { - "type": "function", - "name": "confirmOperatorAddress", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "renounceOwnership", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setChildApplication", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_childApplication", - "type": "address", - "internalType": "contract ITACoRootToChild" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "transferOwnership", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateAuthorization", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "_amount", - "type": "uint96", - "internalType": "uint96" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateOperator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - } - ] - ], - [ - "TACoChildApplication", - "v0.0.0", - "0x099a6128710F7e30Ed8740644F40EE6d3e6673D1", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_rootApplication", - "type": "address", - "internalType": "contract ITACoChildToRoot" - } - ] - }, - { - "type": "event", - "name": "AuthorizationUpdated", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "amount", - "type": "uint96", - "internalType": "uint96", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint8", - "internalType": "uint8", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OperatorConfirmed", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OperatorUpdated", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "operator", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "newOwner", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "authorizedStake", - "stateMutability": "view", - "inputs": [ - { - "name": "_stakingProvider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint96", - "internalType": "uint96" - } - ] - }, - { - "type": "function", - "name": "confirmOperatorAddress", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "coordinator", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "initialize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "renounceOwnership", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "rootApplication", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoChildToRoot" - } - ] - }, - { - "type": "function", - "name": "setCoordinator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "stakingProviderFromOperator", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "stakingProviderInfo", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "operator", - "type": "address", - "internalType": "address" - }, - { - "name": "operatorConfirmed", - "type": "bool", - "internalType": "bool" - }, - { - "name": "authorized", - "type": "uint96", - "internalType": "uint96" - } - ] - }, - { - "type": "function", - "name": "transferOwnership", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateAuthorization", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint96", - "internalType": "uint96" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "updateOperator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "stakingProvider", - "type": "address", - "internalType": "address" - }, - { - "name": "operator", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - } - ] - ], - [ - "LynxRitualToken", - "v0.0.0", - "0x871EbA00295fF9c329dbCF2Cd329cd89FD926192", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_totalSupplyOfTokens", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "event", - "name": "Approval", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "spender", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Transfer", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "to", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "allowance", - "stateMutability": "view", - "inputs": [ - { - "name": "owner", - "type": "address", - "internalType": "address" - }, - { - "name": "spender", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "approve", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "balanceOf", - "stateMutability": "view", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "decimals", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - } - ] - }, - { - "type": "function", - "name": "decreaseAllowance", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "subtractedValue", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "increaseAllowance", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "spender", - "type": "address", - "internalType": "address" - }, - { - "name": "addedValue", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "name", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "function", - "name": "symbol", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ] - }, - { - "type": "function", - "name": "totalSupply", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "transfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "transferFrom", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address" - }, - { - "name": "to", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - } - ] - ], - [ - "Coordinator", - "v0.0.0", - "0x7c8EA2d03fA65088fA85B889da365035555e4394", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_application", - "type": "address", - "internalType": "contract ITACoChildApplication" - }, - { - "name": "_timeout", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "_maxDkgSize", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "_admin", - "type": "address", - "internalType": "address" - }, - { - "name": "_currency", - "type": "address", - "internalType": "contract IERC20" - }, - { - "name": "_feeRatePerSecond", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "event", - "name": "AggregationPosted", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "node", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "aggregatedTranscriptDigest", - "type": "bytes32", - "internalType": "bytes32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeScheduled", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48", - "indexed": false - }, - { - "name": "effectSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferScheduled", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "acceptSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EndRitual", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "successful", - "type": "bool", - "internalType": "bool", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "MaxDkgSizeChanged", - "inputs": [ - { - "name": "oldSize", - "type": "uint16", - "internalType": "uint16", - "indexed": false - }, - { - "name": "newSize", - "type": "uint16", - "internalType": "uint16", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ParticipantPublicKeySet", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "participant", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "newAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StartAggregationRound", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StartRitual", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "authority", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "participants", - "type": "address[]", - "internalType": "address[]", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TimeoutChanged", - "inputs": [ - { - "name": "oldTimeout", - "type": "uint32", - "internalType": "uint32", - "indexed": false - }, - { - "name": "newTimeout", - "type": "uint32", - "internalType": "uint32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TranscriptPosted", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32", - "indexed": true - }, - { - "name": "node", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "transcriptDigest", - "type": "bytes32", - "internalType": "bytes32", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "INITIATOR_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "TREASURY_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "acceptDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "application", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ITACoChildApplication" - } - ] - }, - { - "type": "function", - "name": "beginDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cancelDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "changeDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cohortFingerprint", - "stateMutability": "pure", - "inputs": [ - { - "name": "nodes", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "currency", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IERC20" - } - ] - }, - { - "type": "function", - "name": "defaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelayIncreaseWait", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "feeRatePerSecond", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "getAuthority", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "getParticipantFromProvider", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "provider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "components": [ - { - "name": "provider", - "type": "address", - "internalType": "address" - }, - { - "name": "aggregated", - "type": "bool", - "internalType": "bool" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "internalType": "struct Coordinator.Participant" - } - ] - }, - { - "type": "function", - "name": "getParticipants", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "components": [ - { - "name": "provider", - "type": "address", - "internalType": "address" - }, - { - "name": "aggregated", - "type": "bool", - "internalType": "bool" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "internalType": "struct Coordinator.Participant[]" - } - ] - }, - { - "type": "function", - "name": "getProviderPublicKey", - "stateMutability": "view", - "inputs": [ - { - "name": "_provider", - "type": "address", - "internalType": "address" - }, - { - "name": "_ritualId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point" - } - ] - }, - { - "type": "function", - "name": "getPublicKeyFromRitualId", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - } - ] - }, - { - "type": "function", - "name": "getRitualIdFromPublicKey", - "stateMutability": "view", - "inputs": [ - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - } - ], - "outputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "getRitualInitiationCost", - "stateMutability": "view", - "inputs": [ - { - "name": "providers", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "duration", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "getRitualState", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "enum Coordinator.RitualState" - } - ] - }, - { - "type": "function", - "name": "getRoleAdmin", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "getThresholdForRitualSize", - "stateMutability": "pure", - "inputs": [ - { - "name": "size", - "type": "uint16", - "internalType": "uint16" - } - ], - "outputs": [ - { - "name": "", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "type": "function", - "name": "grantRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "hasRole", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "initiateRitual", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "providers", - "type": "address[]", - "internalType": "address[]" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - }, - { - "name": "duration", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "accessController", - "type": "address", - "internalType": "contract IEncryptionAuthorizer" - } - ], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "isEncryptionAuthorized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "evidence", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "ciphertextHeader", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isInitiationPublic", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isProviderPublicKeySet", - "stateMutability": "view", - "inputs": [ - { - "name": "_provider", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isRitualFinalized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "makeInitiationPublic", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "maxDkgSize", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint16", - "internalType": "uint16" - } - ] - }, - { - "type": "function", - "name": "numberOfRituals", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingFees", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "postAggregation", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "aggregatedTranscript", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "dkgPublicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - }, - { - "name": "decryptionRequestStaticKey", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "postTranscript", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "transcript", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "processPendingFee", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "renounceRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "revokeRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "rituals", - "stateMutability": "view", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "initiator", - "type": "address", - "internalType": "address" - }, - { - "name": "initTimestamp", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "endTimestamp", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "totalTranscripts", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "totalAggregations", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - }, - { - "name": "dkgSize", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "threshold", - "type": "uint16", - "internalType": "uint16" - }, - { - "name": "aggregationMismatch", - "type": "bool", - "internalType": "bool" - }, - { - "name": "accessController", - "type": "address", - "internalType": "contract IEncryptionAuthorizer" - }, - { - "name": "publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes16", - "internalType": "bytes16" - } - ], - "internalType": "struct BLS12381.G1Point" - }, - { - "name": "aggregatedTranscript", - "type": "bytes", - "internalType": "bytes" - } - ] - }, - { - "type": "function", - "name": "rollbackDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setMaxDkgSize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newSize", - "type": "uint16", - "internalType": "uint16" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setProviderPublicKey", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_publicKey", - "type": "tuple", - "components": [ - { - "name": "word0", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word1", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "word2", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "internalType": "struct BLS12381.G2Point" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setReimbursementPool", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "pool", - "type": "address", - "internalType": "contract IReimbursementPool" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setRitualAuthority", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "authority", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "setTimeout", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newTimeout", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "supportsInterface", - "stateMutability": "view", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "timeout", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ] - }, - { - "type": "function", - "name": "totalPendingFees", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "function", - "name": "withdrawTokens", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "contract IERC20" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [] - } - ] - ], - [ - "GlobalAllowList", - "v0.0.0", - "0xa7aF704855EA2a2513C56212D45b86287205520E", - [ - { - "type": "constructor", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "contract Coordinator" - }, - { - "name": "_admin", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminDelayChangeScheduled", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48", - "indexed": false - }, - { - "name": "effectSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferCanceled", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "DefaultAdminTransferScheduled", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "acceptSchedule", - "type": "uint48", - "internalType": "uint48", - "indexed": false - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "newAdminRole", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32", - "indexed": true - }, - { - "name": "account", - "type": "address", - "internalType": "address", - "indexed": true - }, - { - "name": "sender", - "type": "address", - "internalType": "address", - "indexed": true - } - ], - "anonymous": false - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "acceptDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "authorize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "addresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "beginDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "cancelDefaultAdminTransfer", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "changeDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "coordinator", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract Coordinator" - } - ] - }, - { - "type": "function", - "name": "deauthorize", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "addresses", - "type": "address[]", - "internalType": "address[]" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "defaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "defaultAdminDelayIncreaseWait", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "getRoleAdmin", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "function", - "name": "grantRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "hasRole", - "stateMutability": "view", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isAddressAuthorized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "encryptor", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "isAuthorized", - "stateMutability": "view", - "inputs": [ - { - "name": "ritualId", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "evidence", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "ciphertextHeader", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "type": "function", - "name": "owner", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdmin", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newAdmin", - "type": "address", - "internalType": "address" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "pendingDefaultAdminDelay", - "stateMutability": "view", - "inputs": [], - "outputs": [ - { - "name": "newDelay", - "type": "uint48", - "internalType": "uint48" - }, - { - "name": "schedule", - "type": "uint48", - "internalType": "uint48" - } - ] - }, - { - "type": "function", - "name": "renounceRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "revokeRole", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "rollbackDefaultAdminDelay", - "stateMutability": "nonpayable", - "inputs": [], - "outputs": [] - }, - { - "type": "function", - "name": "setCoordinator", - "stateMutability": "nonpayable", - "inputs": [ - { - "name": "_coordinator", - "type": "address", - "internalType": "contract Coordinator" - } - ], - "outputs": [] - }, - { - "type": "function", - "name": "supportsInterface", - "stateMutability": "view", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ] - } - ] - ] -] From 7bec4ef402727d928faf2681a4ecebb7857c52f2 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 25 Sep 2023 23:02:22 +0200 Subject: [PATCH 073/112] deployment ape versioning and run command docstring updates --- scripts/deploy_lynx_child.py | 18 ++---------------- scripts/deploy_lynx_root.py | 8 ++++++++ 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/scripts/deploy_lynx_child.py b/scripts/deploy_lynx_child.py index 6f8c3e98..bca332ba 100644 --- a/scripts/deploy_lynx_child.py +++ b/scripts/deploy_lynx_child.py @@ -22,27 +22,13 @@ def main(): This script deploys the Mock Lynx TACo Root Application, Proxied Lynx TACo Child Application, Lynx Ritual Token, and Lynx Coordinator. - September 18, 2023, Goerli Deployment: - ape run testnet deploy_lynx --network ethereum:goerli: - 'LynxRootApplication' deployed to: 0x39F1061d68540F7eb57545C4C731E0945c167016 - 'LynxTACoChildApplication' deployed to: 0x892a548592bA66dc3860F75d76cDDb488a838c35 - 'Coordinator' deployed to: 0x18566d4590be23e4cb0a8476C80C22096C8c3418 - - September 18, 2023, Mumbai Deployment: - ape run testnet deploy_lynx --network polygon:mumbai: - 'LynxRootApplication' deployed to: 0xb6400F55857716A3Ff863e6bE867F01F23C71793 - 'LynxTACoChildApplication' deployed to: 0x3593f90b19F148FCbe7B00201f854d8839F33F86 - 'Coordinator' deployed to: 0x4077ad1CFA834aEd68765dB0Cf3d14701a970a9a - - September 22, 2023, Mumbai Deployment: + September 25, 2023, Deployment: + ape-run deploy_lynx --network polygon:mumbai:infura ape-etherscan 0.6.10 ape-infura 0.6.3 ape-polygon 0.6.5 ape-solidity 0.6.9 eth-ape 0.6.20 - - ape-run deploy_lynx --network polygon:mumbai:infura - """ deployer, params = prepare_deployment( diff --git a/scripts/deploy_lynx_root.py b/scripts/deploy_lynx_root.py index 28b13f48..bb1988aa 100644 --- a/scripts/deploy_lynx_root.py +++ b/scripts/deploy_lynx_root.py @@ -20,6 +20,14 @@ def main(): """ This script deploys only the Proxied Lynx TACo Root Application. + + September 25, 2023, Deployment: + ape-run deploy_lynx --network etherscan:goerli:infura + ape-etherscan 0.6.10 + ape-infura 0.6.3 + ape-polygon 0.6.5 + ape-solidity 0.6.9 + eth-ape 0.6.20 """ deployer, params = prepare_deployment( From 67f67da22f551cac9ed36ee93845e3f3bf609621 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Mon, 25 Sep 2023 23:15:20 +0200 Subject: [PATCH 074/112] modifies standalone verification script to consume a registry --- scripts/verify_lynx.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/scripts/verify_lynx.py b/scripts/verify_lynx.py index e97424c6..c8b2b539 100644 --- a/scripts/verify_lynx.py +++ b/scripts/verify_lynx.py @@ -1,12 +1,20 @@ +import json + from ape import networks, project -deployments = [ - project.LynxRootApplication.at('0xe9e6C183fadD057b8972E12471B212288b1ca6E6'), - project.LynxTACoChildApplication.at('0x099a6128710F7e30Ed8740644F40EE6d3e6673D1'), - project.LynxRitualToken.at('0x871EbA00295fF9c329dbCF2Cd329cd89FD926192'), - project.Coordinator.at('0x7c8EA2d03fA65088fA85B889da365035555e4394'), - project.GlobalAllowList.at('0xa7aF704855EA2a2513C56212D45b86287205520E'), -] +from scripts.constants import ARTIFACTS_DIR + +REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-child-registry.json" + +with open(REGISTRY_FILEPATH) as f: + registry = json.loads(f.read()) + +deployments = [] +for entry in registry: + contract_type = entry[0] + contract_container = getattr(project, contract_type) + contract_instance = contract_container.at(entry[2]) + deployments.append(contract_instance) etherscan = networks.provider.network.explorer for deployment in deployments: From 2cb01a0b152e2ca1db5b506ad8fcee5215aefb5e Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 20:28:07 -0400 Subject: [PATCH 075/112] Update command comment. --- scripts/deploy_lynx_root.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deploy_lynx_root.py b/scripts/deploy_lynx_root.py index bb1988aa..0658685b 100644 --- a/scripts/deploy_lynx_root.py +++ b/scripts/deploy_lynx_root.py @@ -22,7 +22,7 @@ def main(): This script deploys only the Proxied Lynx TACo Root Application. September 25, 2023, Deployment: - ape-run deploy_lynx --network etherscan:goerli:infura + ape-run deploy_lynx_root --network etherscan:goerli:infura ape-etherscan 0.6.10 ape-infura 0.6.3 ape-polygon 0.6.5 From 5f968cf9acabda9c2944851d7b6b62155e70d834 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 20:29:31 -0400 Subject: [PATCH 076/112] Make read_registry and get_contract_container public so that it could be reused by verify_lynx script. --- scripts/deployment.py | 8 ++++---- scripts/registry.py | 12 ++++++------ scripts/verify_lynx.py | 18 ++++++++---------- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/scripts/deployment.py b/scripts/deployment.py index 2fd37e96..1f4100fc 100644 --- a/scripts/deployment.py +++ b/scripts/deployment.py @@ -52,7 +52,7 @@ def _is_proxy_variable(variable: str): def _resolve_proxy_address(variable) -> str: proxy, target = variable.split(PROXY_DECLARATION_DELIMETER) - target_contract_container = _get_contract_container(target) + target_contract_container = get_contract_container(target) target_contract_instance = _get_contract_instance(target_contract_container) if target_contract_instance == NULL_ADDRESS: # eager validation @@ -100,7 +100,7 @@ def _resolve_param(value: Any) -> Any: if _is_proxy_variable(variable): return _resolve_proxy_address(variable) - contract_container = _get_contract_container(variable) + contract_container = get_contract_container(variable) contract_instance = _get_contract_instance(contract_container) if contract_instance == NULL_ADDRESS: return NULL_ADDRESS @@ -208,7 +208,7 @@ def _get_dependency_contract_container(contract: str) -> ContractContainer: raise ValueError(f"No contract found for {contract}") -def _get_contract_container(contract: str) -> ContractContainer: +def get_contract_container(contract: str) -> ContractContainer: try: contract_container = getattr(project, contract) except AttributeError: @@ -228,7 +228,7 @@ def validate_constructor_parameters(config: typing.OrderedDict[str, Any]) -> Non else: _validate_constructor_param(value, available_contracts) - contract_container = _get_contract_container(contract) + contract_container = get_contract_container(contract) _validate_constructor_abi_inputs( contract_name=contract, abi_inputs=contract_container.constructor.abi.inputs, diff --git a/scripts/registry.py b/scripts/registry.py index 5f0ec30d..9e07030b 100644 --- a/scripts/registry.py +++ b/scripts/registry.py @@ -55,7 +55,7 @@ def _get_entry( return entry -def _read_registry(filepath: Path) -> List[RegistryEntry]: +def read_registry(filepath: Path) -> List[RegistryEntry]: with open(filepath, "r") as registry_file: json_data = json.load(registry_file) @@ -68,7 +68,7 @@ def _read_registry(filepath: Path) -> List[RegistryEntry]: return registry_entries -def _write_registry(data: List[RegistryEntry], filepath: Path) -> Path: +def write_registry(data: List[RegistryEntry], filepath: Path) -> Path: with open(filepath, "w") as registry_file: json_data = json.dumps(data, indent=4) registry_file.write(json_data) @@ -123,7 +123,7 @@ def registry_from_ape_deployments( entry = _get_entry(contract_instance=contract_instance, registry_names=registry_names) registry_data.append(entry) - output_filepath = _write_registry(data=registry_data, filepath=output_filepath) + output_filepath = write_registry(data=registry_data, filepath=output_filepath) return output_filepath @@ -137,8 +137,8 @@ def merge_registries( """Merges two nucypher-style contract registries created from ape deployments API.""" check_registry_filepath(registry_filepath=output_filepath) - registry_1_entries = _read_registry(registry_1_filepath) - registry_2_entries = _read_registry(registry_2_filepath) + registry_1_entries = read_registry(registry_1_filepath) + registry_2_entries = read_registry(registry_2_filepath) deprecated_contracts = [] if deprecated_contracts is None else deprecated_contracts @@ -183,7 +183,7 @@ def merge_registries( # registry 2 entries merged_entries.extend(registry_2_contracts_dict.values()) - _write_registry(data=merged_entries, filepath=output_filepath) + write_registry(data=merged_entries, filepath=output_filepath) print(f"Merged registry output to {output_filepath}") return output_filepath diff --git a/scripts/verify_lynx.py b/scripts/verify_lynx.py index c8b2b539..fe368f53 100644 --- a/scripts/verify_lynx.py +++ b/scripts/verify_lynx.py @@ -1,19 +1,17 @@ -import json - -from ape import networks, project - +from ape import networks from scripts.constants import ARTIFACTS_DIR +from scripts.deployment import get_contract_container +from scripts.registry import read_registry REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-child-registry.json" -with open(REGISTRY_FILEPATH) as f: - registry = json.loads(f.read()) +registry_entries = read_registry(filepath=REGISTRY_FILEPATH) deployments = [] -for entry in registry: - contract_type = entry[0] - contract_container = getattr(project, contract_type) - contract_instance = contract_container.at(entry[2]) +for registry_entry in registry_entries: + contract_type = registry_entry.contract_name + contract_container = get_contract_container(contract_type) + contract_instance = contract_container.at(registry_entry.contract_address) deployments.append(contract_instance) etherscan = networks.provider.network.explorer From 45e3fa45cee26544a59e14ee167e16c1e453277d Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 20:47:40 -0400 Subject: [PATCH 077/112] Fix script to properly name proxy contract in registry after deployment. --- .../artifacts/lynx/lynx-alpha-13-child-registry.json | 4 ++-- scripts/deploy_lynx_child.py | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/deployments/artifacts/lynx/lynx-alpha-13-child-registry.json b/deployments/artifacts/lynx/lynx-alpha-13-child-registry.json index 70a92e53..14079532 100644 --- a/deployments/artifacts/lynx/lynx-alpha-13-child-registry.json +++ b/deployments/artifacts/lynx/lynx-alpha-13-child-registry.json @@ -655,7 +655,7 @@ ] ], [ - "LynxTACoChildApplication", + "TACoChildApplication", "v0.0.0", "0x55A25dff1b38Ec76E2a1A8E42f2728c7347fdF4a", [ @@ -3205,4 +3205,4 @@ } ] ] -] \ No newline at end of file +] diff --git a/scripts/deploy_lynx_child.py b/scripts/deploy_lynx_child.py index bca332ba..108fb357 100644 --- a/scripts/deploy_lynx_child.py +++ b/scripts/deploy_lynx_child.py @@ -42,14 +42,16 @@ def main(): proxy_admin = deployer.deploy(*params.get(OZ_DEPENDENCY.ProxyAdmin), **params.get_kwargs()) - taco_implementation = deployer.deploy(*params.get(project.LynxTACoChildApplication), **params.get_kwargs()) + taco_implementation = deployer.deploy( + *params.get(project.LynxTACoChildApplication), **params.get_kwargs() + ) proxy = deployer.deploy( *params.get(OZ_DEPENDENCY.TransparentUpgradeableProxy), **params.get_kwargs() ) print("\nWrapping TACoChildApplication in proxy") - taco_child_application = project.LynxTACoChildApplication.at(proxy.address) + taco_child_application = project.TACoChildApplication.at(proxy.address) print("\nSetting TACo Child application on TACo Root") root_application.setChildApplication( From 7b576a0978584a81165cf82b1b7a8f9540180de1 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 21:00:57 -0400 Subject: [PATCH 078/112] Update merge lynx script by improving naming/annotations. --- scripts/merge_lynx_deployment_registries.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/merge_lynx_deployment_registries.py b/scripts/merge_lynx_deployment_registries.py index 61102fc9..5feeb38b 100644 --- a/scripts/merge_lynx_deployment_registries.py +++ b/scripts/merge_lynx_deployment_registries.py @@ -1,12 +1,15 @@ from scripts.constants import ARTIFACTS_DIR from scripts.registry import merge_registries -lynx_deployment_registry = ARTIFACTS_DIR / "lynx-alpha-13-registry.json" +lynx_child_deployment_registry = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-child-registry.json" + +# mumbai registry from `nucypher/nucypher` lynx_registry_w_subscription_manager = ARTIFACTS_DIR / "contract_registry.json" + output_registry = ARTIFACTS_DIR / "lynx-alpha-13-merged-registry.json" merge_registries( - registry_1_filepath=lynx_deployment_registry, + registry_1_filepath=lynx_child_deployment_registry, registry_2_filepath=lynx_registry_w_subscription_manager, output_filepath=output_registry, deprecated_contracts=["StakeInfo"], From 45004cd4a031bce138701cbaf3b2abea0b5b1508 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Mon, 25 Sep 2023 21:31:41 -0400 Subject: [PATCH 079/112] Add script to configure lynx stakes on goerli root application. --- scripts/configure_lynx_staking.py | 41 +++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 scripts/configure_lynx_staking.py diff --git a/scripts/configure_lynx_staking.py b/scripts/configure_lynx_staking.py new file mode 100644 index 00000000..224beaad --- /dev/null +++ b/scripts/configure_lynx_staking.py @@ -0,0 +1,41 @@ +from ape import project +from ape.cli import get_user_selected_account +from scripts.constants import ARTIFACTS_DIR +from scripts.registry import read_registry + +REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-root-registry.json" + + +def main(): + registry_entries = read_registry(filepath=REGISTRY_FILEPATH) + + registry_contracts_dict = { + registry_entry.contract_name: registry_entry for registry_entry in registry_entries + } + + taco_application_entry = registry_contracts_dict[project.TACoApplication.contract_type.name] + threshold_staking_entry = registry_contracts_dict[ + project.TestnetThresholdStaking.contract_type.name + ] + + taco_application_contract = project.TACoApplication.at(taco_application_entry.contract_address) + threshold_staking_contract = project.TestnetThresholdStaking.at( + threshold_staking_entry.contract_address + ) + + deployer_account = get_user_selected_account() + + # Set up lynx stakes + lynx_nodes = { + "0xb15d5a4e2be34f4be154a1b08a94ab920ffd8a41": "0x890069745E9497C6f99Db68C4588deC5669F3d3E", + "0x210eeac07542f815ebb6fd6689637d8ca2689392": "0xf48F720A2Ed237c24F5A7686543D90596bb8D44D", + "0x48C8039c32F4c6f5cb206A5911C8Ae814929C16B": "0xce057adc39dcD1b3eA28661194E8963481CC48b2", + } + + min_stake_size = taco_application_contract.minimumAuthorization() + for staking_provider, operator in lynx_nodes.items(): + threshold_staking_contract.setRoles(staking_provider, sender=deployer_account) + + threshold_staking_contract.authorizationIncreased( + staking_provider, 0, min_stake_size, sender=deployer_account + ) From 906769309ec814b0ba80b9f5c6a1c58d2d1e3098 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 26 Sep 2023 13:41:52 +0200 Subject: [PATCH 080/112] removes 'deployments' section from ape-config.yml --- ape-config.yaml | 84 ------------------------------------------------- 1 file changed, 84 deletions(-) diff --git a/ape-config.yaml b/ape-config.yaml index 63ff262e..be368761 100644 --- a/ape-config.yaml +++ b/ape-config.yaml @@ -35,90 +35,6 @@ solidity: - "@fx-portal/contracts=fx-portal/v1.0.5" - "@threshold/contracts=threshold/v1.2.1" -deployments: - polygon: - mainnet: - - contract_type: DAI - address: "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063" - - contract_type: fx_child - address: "0x8397259c983751DAf40400790063935a11afa28a" - mumbai: - - contract_type: DAI - address: "0x001B3B4d0F3714Ca98ba10F6042DaEbF0B1B7b6F" - - contract_type: StakeInfo - address: "0xC1379866Fb0c100DCBFAb7b470009C4827D47DD8" - - contract_type: fx_child - address: "0xCf73231F28B7331BBe3124B907840A94851f9f11" - - contract_type: TACoChildApplication - address: "0x68E95C2548363Bf5856667065Bc1B89CC498969F" - ethereum: - local: - - nu_token_supply: 1_000_000_000 - pre_min_authorization: 40000000000000000000000 - pre_min_operator_seconds: 86400 # one day in seconds - pre_hash_algorithm: 1 - pre_base_penalty: 2 - pre_penalty_history_coefficient: 0 - pre_percentage_penalty_coefficient: 100000 - reward_duration: 604800 # one week in seconds - deauthorization_duration: 5184000 # 60 days in seconds - commitment_duration_1: 15552000 # 180 days in seconds - commitment_duration_2: 31104000 # 360 days in seconds - verify: False - rinkeby: - - nu_token: "0x78D591D90a4a768B9D2790deA465D472b6Fe0f18" - nu_token_supply: 1_000_000_000 - t_staking: "0x18eFb520dA5D387982C860a64855C14C0AcADF3F" - work_lock: "0x0000000000000000000000000000000000000000" - staking_escrow: "0x6A6F917a3FF3d33d26BB4743140F205486cD6B4B" - pre_min_authorization: 40000000000000000000000 - pre_min_operator_seconds: 86400 # one day in seconds - verify: True - # TODO: is there a batter way to manage multiple deployments on the same network? - # goerli-tapir: - # - t_staking: '0x09B5065d2924De33C85F76474A89A27189402064' - # pre_min_authorization: 40000000000000000000000 - # pre_min_operator_seconds: 86400 # one day in seconds - # verify: True - # goerli-oryx: - # - t_staking: '0xf91afFE7cf1d9c367Cb56eDd70C0941a4E8570d9' - # verify: True - # pre_min_authorization: 40000000000000000000000 - # pre_min_operator_seconds: 86400 # one day in seconds - goerli: # -lynx - - t_staking: "0x81eEefb7B1b3313C89976910096F8f1487301Bb1" - pre_min_authorization: 40000000000000000000000 - pre_min_operator_seconds: 86400 # one day in seconds - ritual_timeout: 3600 - max_dkg_size: 8 - pre_application: "0x685b8Fd02aB87d8FfFff7346cB101A5cE4185bf3" - verify: True - reward_duration: 604800 # one week in seconds - deauthorization_duration: 5184000 # 60 days in seconds - - contract_type: fx_root - address: "0x3d1d3E34f7fB6D26245E6640E1c50710eFFf15bA" - - contract_type: checkpoint_manager - address: "0x2890bA17EfE978480615e330ecB65333b880928e" - mumbai: - - stake_info_contract: "0xC1379866Fb0c100DCBFAb7b470009C4827D47DD8" - max_dkg_size: 16 - ritual_timeout: 86400 # one day in seconds - verify: True - checkpoint_manager: "0x2890bA17EfE978480615e330ecB65333b880928e" - fx_root: "0x3d1d3E34f7fB6D26245E6640E1c50710eFFf15bA" - mainnet: - - nu_token: "0x4fE83213D56308330EC302a8BD641f1d0113A4Cc" - t_staking: "0x01B67b1194C75264d06F808A921228a95C765dd7" - work_lock: "0xe9778E69a961e64d3cdBB34CF6778281d34667c2" - staking_escrow: "0xbbD3C0C794F40c4f993B03F65343aCC6fcfCb2e2" - pre_min_authorization: 40000000000000000000000 - pre_min_operator_seconds: 86400 # one day in seconds - verify: True - - contract_type: fx_root - address: "0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2" - - contract_type: checkpoint_manager - address: "0x86e4dc95c7fbdbf52e33d563bbdb00823894c287" - test: mnemonic: test test test test test test test test test test test junk number_of_accounts: 10 From e9dff3e1b30135e4d31ff9363e17f2248351a882 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 26 Sep 2023 13:44:33 +0200 Subject: [PATCH 081/112] removes ape-etherscan api_key field --- ape-config.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/ape-config.yaml b/ape-config.yaml index be368761..1e8b99b1 100644 --- a/ape-config.yaml +++ b/ape-config.yaml @@ -5,8 +5,6 @@ plugins: - name: solidity - name: polygon - name: ape-etherscan - config: - api_key: ${ETHERSCAN_API_KEY} dependencies: - name: openzeppelin From da3ca9cdb5044970b9ae7a7e909f6692dee99d73 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Tue, 26 Sep 2023 14:21:27 +0200 Subject: [PATCH 082/112] Relocates custom logic into 'deploymnets' package; Removes stale scripts that use legacy deployment methods --- deployment/__init__.py | 0 .../lynx/lynx-alpha-13-child-registry.json | 0 .../lynx/lynx-alpha-13-root-registry.json | 0 deployment/confirm.py | 36 +++++ deployment/constants.py | 20 +++ .../lynx/lynx-alpha-13-child-params.json | 0 .../lynx/lynx-alpha-13-root-params.json | 0 scripts/deployment.py => deployment/params.py | 77 ++-------- {scripts => deployment}/registry.py | 15 +- {scripts => deployment}/utils.py | 82 ++++++----- scripts/check_xchain.py | 32 ----- scripts/constants.py | 14 -- scripts/deploy_coordinator.py | 18 --- scripts/deploy_coordinator_with_fee_model.py | 77 ---------- scripts/deploy_flat_rate_fee_model.py | 70 --------- scripts/deploy_nucypher_token.py | 17 --- scripts/deploy_staking_escrow.py | 27 ---- scripts/deploy_subscription_manager.py | 22 --- scripts/deploy_taco_application.py | 35 ----- scripts/deploy_testnet_threshold_staking.py | 14 -- scripts/deploy_xchain_test.py | 135 ------------------ .../configure_staking.py} | 4 +- .../deploy_child.py} | 15 +- .../deploy_root.py} | 10 +- .../merge_registries.py} | 4 +- scripts/lynx/verify.py | 10 ++ scripts/verify_lynx.py | 20 --- setup.cfg | 3 + setup.py | 3 + 29 files changed, 151 insertions(+), 609 deletions(-) create mode 100644 deployment/__init__.py rename {deployments => deployment}/artifacts/lynx/lynx-alpha-13-child-registry.json (100%) rename {deployments => deployment}/artifacts/lynx/lynx-alpha-13-root-registry.json (100%) create mode 100644 deployment/confirm.py create mode 100644 deployment/constants.py rename {deployments => deployment}/constructor_params/lynx/lynx-alpha-13-child-params.json (100%) rename {deployments => deployment}/constructor_params/lynx/lynx-alpha-13-root-params.json (100%) rename scripts/deployment.py => deployment/params.py (77%) rename {scripts => deployment}/registry.py (91%) rename {scripts => deployment}/utils.py (54%) delete mode 100644 scripts/check_xchain.py delete mode 100644 scripts/constants.py delete mode 100644 scripts/deploy_coordinator.py delete mode 100644 scripts/deploy_coordinator_with_fee_model.py delete mode 100644 scripts/deploy_flat_rate_fee_model.py delete mode 100644 scripts/deploy_nucypher_token.py delete mode 100644 scripts/deploy_staking_escrow.py delete mode 100644 scripts/deploy_subscription_manager.py delete mode 100644 scripts/deploy_taco_application.py delete mode 100644 scripts/deploy_testnet_threshold_staking.py delete mode 100644 scripts/deploy_xchain_test.py rename scripts/{configure_lynx_staking.py => lynx/configure_staking.py} (94%) rename scripts/{deploy_lynx_child.py => lynx/deploy_child.py} (84%) rename scripts/{deploy_lynx_root.py => lynx/deploy_root.py} (91%) rename scripts/{merge_lynx_deployment_registries.py => lynx/merge_registries.py} (84%) create mode 100644 scripts/lynx/verify.py delete mode 100644 scripts/verify_lynx.py create mode 100644 setup.py diff --git a/deployment/__init__.py b/deployment/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/deployments/artifacts/lynx/lynx-alpha-13-child-registry.json b/deployment/artifacts/lynx/lynx-alpha-13-child-registry.json similarity index 100% rename from deployments/artifacts/lynx/lynx-alpha-13-child-registry.json rename to deployment/artifacts/lynx/lynx-alpha-13-child-registry.json diff --git a/deployments/artifacts/lynx/lynx-alpha-13-root-registry.json b/deployment/artifacts/lynx/lynx-alpha-13-root-registry.json similarity index 100% rename from deployments/artifacts/lynx/lynx-alpha-13-root-registry.json rename to deployment/artifacts/lynx/lynx-alpha-13-root-registry.json diff --git a/deployment/confirm.py b/deployment/confirm.py new file mode 100644 index 00000000..d688e77a --- /dev/null +++ b/deployment/confirm.py @@ -0,0 +1,36 @@ +from collections import OrderedDict + +from deployment.constants import NULL_ADDRESS + + +def _confirm_deployment(contract_name: str) -> None: + """Asks the user to confirm the deployment of a single contract.""" + answer = input(f"Deploy {contract_name} Y/N? ") + if answer.lower().strip() == "n": + print("Aborting deployment!") + exit(-1) + + +def _confirm_null_address() -> None: + answer = input("Null Address detected for deployment parameter; Continue? Y/N? ") + if answer.lower().strip() == "n": + print("Aborting deployment!") + exit(-1) + + +def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> None: + """Asks the user to confirm the resolved constructor parameters for a single contract.""" + if len(resolved_params) == 0: + print(f"\n(i) No constructor parameters for {contract_name}") + _confirm_deployment(contract_name) + return + + print(f"\nConstructor parameters for {contract_name}") + contains_null_address = False + for name, resolved_value in resolved_params.items(): + print(f"\t{name}={resolved_value}") + if not contains_null_address: + contains_null_address = resolved_value == NULL_ADDRESS + _confirm_deployment(contract_name) + if contains_null_address: + _confirm_null_address() diff --git a/deployment/constants.py b/deployment/constants.py new file mode 100644 index 00000000..a4844a91 --- /dev/null +++ b/deployment/constants.py @@ -0,0 +1,20 @@ +from pathlib import Path + +from ape import networks, project + +import deployment + +LOCAL_BLOCKCHAIN_ENVIRONMENTS = ["local"] +PRODUCTION_ENVIRONMENTS = ["mainnet", "polygon-main"] +CURRENT_NETWORK = networks.network.name +DEPLOYMENT_DIR = Path(deployment.__file__).parent +CONSTRUCTOR_PARAMS_DIR = DEPLOYMENT_DIR / "constructor_params" +ARTIFACTS_DIR = DEPLOYMENT_DIR / "artifacts" +ETHERSCAN_API_KEY_ENVVAR = "ETHERSCAN_API_KEY" +WEB3_INFURA_API_KEY_ENVVAR = "WEB3_INFURA_API_KEY" +NULL_ADDRESS = "0x" + "0" * 40 +VARIABLE_PREFIX = "$" +PROXY_DECLARATION_DELIMETER = ":" +SPECIAL_VALUE_VARIABLES = {"EMPTY_BYTES": b""} +PROXY_NAME = "TransparentUpgradeableProxy" +OZ_DEPENDENCY = project.dependencies["openzeppelin"]["4.9.1"] diff --git a/deployments/constructor_params/lynx/lynx-alpha-13-child-params.json b/deployment/constructor_params/lynx/lynx-alpha-13-child-params.json similarity index 100% rename from deployments/constructor_params/lynx/lynx-alpha-13-child-params.json rename to deployment/constructor_params/lynx/lynx-alpha-13-child-params.json diff --git a/deployments/constructor_params/lynx/lynx-alpha-13-root-params.json b/deployment/constructor_params/lynx/lynx-alpha-13-root-params.json similarity index 100% rename from deployments/constructor_params/lynx/lynx-alpha-13-root-params.json rename to deployment/constructor_params/lynx/lynx-alpha-13-root-params.json diff --git a/scripts/deployment.py b/deployment/params.py similarity index 77% rename from scripts/deployment.py rename to deployment/params.py index 1f4100fc..654f1b5a 100644 --- a/scripts/deployment.py +++ b/deployment/params.py @@ -5,45 +5,17 @@ from typing import Any, List from ape import chain, project -from ape.api import AccountAPI -from ape.cli import get_user_selected_account from ape.contracts.base import ContractContainer, ContractInstance -from scripts.constants import NULL_ADDRESS -from scripts.utils import check_etherscan_plugin, check_infura_plugin, check_registry_filepath from web3.auto.gethdev import w3 -VARIABLE_PREFIX = "$" -PROXY_DECLARATION_DELIMETER = ":" - -SPECIAL_VALUE_VARIABLES = {"EMPTY_BYTES": b""} - -PROXY_NAME = "TransparentUpgradeableProxy" - - -def prepare_deployment( - params_filepath: Path, registry_filepath: Path, publish: bool = False -) -> typing.Tuple[AccountAPI, "ApeDeploymentParameters"]: - """ - Prepares the deployment by loading the deployment parameters - and checking the pre-deployment conditions. - - NOTE: publish is False by default because we use customized artifact tracking - that is not compatible with the ape publish command. - """ - - # pre-deployment checks - check_registry_filepath(registry_filepath=registry_filepath) - check_etherscan_plugin() - check_infura_plugin() - - # load (and implicitly validate) deployment parameters - constructor_parameters = ConstructorParameters.from_file(params_filepath) - deployment_parameters = ApeDeploymentParameters(constructor_parameters, publish) - - # do this last so that the user can see any failed - # pre-deployment checks or validation errors. - deployer_account = get_user_selected_account() - return deployer_account, deployment_parameters +from deployment.confirm import _confirm_resolution +from deployment.constants import ( + NULL_ADDRESS, + VARIABLE_PREFIX, + PROXY_DECLARATION_DELIMETER, + SPECIAL_VALUE_VARIABLES, + PROXY_NAME +) def _is_proxy_variable(variable: str): @@ -236,39 +208,6 @@ def validate_constructor_parameters(config: typing.OrderedDict[str, Any]) -> Non ) -def _confirm_deployment(contract_name: str) -> None: - """Asks the user to confirm the deployment of a single contract.""" - answer = input(f"Deploy {contract_name} Y/N? ") - if answer.lower().strip() == "n": - print("Aborting deployment!") - exit(-1) - - -def _confirm_null_address() -> None: - answer = input("Null Address detected for deployment parameter; Continue? Y/N? ") - if answer.lower().strip() == "n": - print("Aborting deployment!") - exit(-1) - - -def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> None: - """Asks the user to confirm the resolved constructor parameters for a single contract.""" - if len(resolved_params) == 0: - print(f"\n(i) No constructor parameters for {contract_name}") - _confirm_deployment(contract_name) - return - - print(f"\nConstructor parameters for {contract_name}") - contains_null_address = False - for name, resolved_value in resolved_params.items(): - print(f"\t{name}={resolved_value}") - if not contains_null_address: - contains_null_address = resolved_value == NULL_ADDRESS - _confirm_deployment(contract_name) - if contains_null_address: - _confirm_null_address() - - class ConstructorParameters: """Represents the constructor parameters for a set of contracts.""" diff --git a/scripts/registry.py b/deployment/registry.py similarity index 91% rename from scripts/registry.py rename to deployment/registry.py index 9e07030b..ff688f41 100644 --- a/scripts/registry.py +++ b/deployment/registry.py @@ -6,7 +6,9 @@ from ape.contracts import ContractInstance from eth_typing import ChecksumAddress from eth_utils import to_checksum_address -from scripts.utils import check_registry_filepath + +from deployment.params import get_contract_container +from deployment.utils import check_registry_filepath class RegistryEntry(NamedTuple): @@ -187,3 +189,14 @@ def merge_registries( print(f"Merged registry output to {output_filepath}") return output_filepath + + +def contracts_from_registry(registry_filepath: Path): + registry_entries = read_registry(filepath=registry_filepath) + deployments = list() + for registry_entry in registry_entries: + contract_type = registry_entry.contract_name + contract_container = get_contract_container(contract_type) + contract_instance = contract_container.at(registry_entry.contract_address) + deployments.append(contract_instance) + return deployments diff --git a/scripts/utils.py b/deployment/utils.py similarity index 54% rename from scripts/utils.py rename to deployment/utils.py index c19b075f..506fb44a 100644 --- a/scripts/utils.py +++ b/deployment/utils.py @@ -1,50 +1,23 @@ import os +import typing from pathlib import Path +from typing import List -from ape import accounts, project -from web3 import Web3 +from ape import networks +from ape.api import AccountAPI +from ape.cli import get_user_selected_account +from ape.contracts import ContractInstance -from scripts.constants import ( +from deployment.constants import ( CURRENT_NETWORK, ETHERSCAN_API_KEY_ENVVAR, LOCAL_BLOCKCHAIN_ENVIRONMENTS, WEB3_INFURA_API_KEY_ENVVAR ) - - -def deploy_mocks(deployer): - """This function should deploy nucypher_token and t_staking and return the - corresponding contract addresses""" - nucypher_token = project.NuCypherToken.deploy(1_000_000_000, sender=deployer) - t_staking_for_escrow = project.ThresholdStakingForStakingEscrowMock.deploy(sender=deployer) - t_staking_for_taco = project.ThresholdStakingForTACoApplicationMock.deploy(sender=deployer) - total_supply = Web3.to_wei(10_000_000_000, "ether") - t_token = project.TToken.deploy(total_supply, sender=deployer) - work_lock = project.WorkLockForStakingEscrowMock.deploy(nucypher_token, sender=deployer) - staking_escrow = project.StakingEscrow.deploy( - nucypher_token, work_lock, t_staking_for_escrow, sender=deployer - ) - return ( - nucypher_token, - t_staking_for_escrow, - t_staking_for_taco, - work_lock, - staking_escrow, - t_token, - ) - - -def get_account(_id): - if CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS: - if _id is None: - raise ValueError("Must specify account id when deploying to production networks") - else: - return accounts.load(_id) - - elif CURRENT_NETWORK in LOCAL_BLOCKCHAIN_ENVIRONMENTS: - return accounts.test_accounts[0] - else: - return None +from deployment.params import ( + ApeDeploymentParameters, + ConstructorParameters +) def check_registry_filepath(registry_filepath: Path) -> None: @@ -91,3 +64,36 @@ def check_infura_plugin() -> None: raise ValueError(f"{WEB3_INFURA_API_KEY_ENVVAR} is not set.") if not len(api_key) == 32: raise ValueError(f"{WEB3_INFURA_API_KEY_ENVVAR} is not valid.") + + +def verify_contracts(contracts: List[ContractInstance]) -> None: + explorer = networks.provider.network.explorer + for instance in contracts: + print(f"(i) Verifying {instance.contract_type.name}...") + explorer.publish_contract(instance.address) + + +def prepare_deployment( + params_filepath: Path, registry_filepath: Path, publish: bool = False +) -> typing.Tuple[AccountAPI, "ApeDeploymentParameters"]: + """ + Prepares the deployment by loading the deployment parameters + and checking the pre-deployment conditions. + + NOTE: publish is False by default because we use customized artifact tracking + that is not compatible with the ape publish command. + """ + + # pre-deployment checks + check_registry_filepath(registry_filepath=registry_filepath) + check_etherscan_plugin() + check_infura_plugin() + + # load (and implicitly validate) deployment parameters + constructor_parameters = ConstructorParameters.from_file(params_filepath) + deployment_parameters = ApeDeploymentParameters(constructor_parameters, publish) + + # do this last so that the user can see any failed + # pre-deployment checks or validation errors. + deployer_account = get_user_selected_account() + return deployer_account, deployment_parameters diff --git a/scripts/check_xchain.py b/scripts/check_xchain.py deleted file mode 100644 index 039e7c3b..00000000 --- a/scripts/check_xchain.py +++ /dev/null @@ -1,32 +0,0 @@ -import time - -from ape import accounts, networks, project - - -def main(): - deployer = accounts.load("TGoerli") - print("*******") - print("WARNING: This script will take 40 mins to run to allow messages to sync from L1 to L2") - print("*******") - with networks.ethereum.goerli.use_provider("infura"): - root = project.PolygonRoot.at("0xD2Cb2A8fbE29adBa1C287b2A0b49f5C4fDc1f5BE") - root.updateOperator( - "0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600", - "0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600", - sender=deployer, - ) - # check every 5 minutes - print("Now: {}".format(time.time())) - for i in range(12): - time.sleep(60 * i * 5) - print("Now: {}".format(time.time())) - with networks.polygon.mumbai.use_provider("infura"): - taco_child = project.TACoChildApplication.at( - "0x68E95C2548363Bf5856667065Bc1B89CC498969F" - ) - print( - taco_child.stakingProviderFromOperator("0xAe87D865F3A507185656aD0ef52a8E0B9f3d58f8") - ) - print( - taco_child.stakingProviderFromOperator("0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600") - ) diff --git a/scripts/constants.py b/scripts/constants.py deleted file mode 100644 index 24a596d8..00000000 --- a/scripts/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from pathlib import Path - -from ape import config, networks - -LOCAL_BLOCKCHAIN_ENVIRONMENTS = ["local"] -PRODUCTION_ENVIRONMENTS = ["mainnet", "polygon-main"] -CURRENT_NETWORK = networks.network.name -DEPLOYMENTS_CONFIG = config.get_config("deployments")["ethereum"][CURRENT_NETWORK][0] -PROJECT_ROOT = Path(__file__).parent.parent -CONSTRUCTOR_PARAMS_DIR = PROJECT_ROOT / "deployments" / "constructor_params" -ARTIFACTS_DIR = PROJECT_ROOT / "deployments" / "artifacts" -ETHERSCAN_API_KEY_ENVVAR = "ETHERSCAN_API_KEY" -WEB3_INFURA_API_KEY_ENVVAR = "WEB3_INFURA_API_KEY" -NULL_ADDRESS = "0x" + "0" * 40 diff --git a/scripts/deploy_coordinator.py b/scripts/deploy_coordinator.py deleted file mode 100644 index 55472f2a..00000000 --- a/scripts/deploy_coordinator.py +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/python3 -from ape import project -from ape.cli import get_user_selected_account -from scripts.constants import DEPLOYMENTS_CONFIG - - -def main(account_id=None): - deployer = get_user_selected_account() - deployments_config = DEPLOYMENTS_CONFIG - - coordinator = project.Coordinator.deploy( - deployments_config.get("taco_child_contract"), - deployments_config.get("ritual_timeout"), - deployments_config.get("max_dkg_size"), - sender=deployer, - publish=deployments_config.get("verify"), - ) - return coordinator diff --git a/scripts/deploy_coordinator_with_fee_model.py b/scripts/deploy_coordinator_with_fee_model.py deleted file mode 100644 index ac0d568e..00000000 --- a/scripts/deploy_coordinator_with_fee_model.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/python3 - -import os - -import click -from ape import config, networks, project -from ape.cli import NetworkBoundCommand, account_option, network_option -from ape.utils import ZERO_ADDRESS -from ape_etherscan.utils import API_KEY_ENV_KEY_MAP - - -@click.command(cls=NetworkBoundCommand) -@network_option() -@account_option() -@click.option("--currency", default=ZERO_ADDRESS) -@click.option("--rate", default=None) -@click.option("--timeout", default=None) -@click.option("--admin", default=None) -@click.option("--max_size", default=None) -@click.option("--verify/--no-verify", default=True) -def cli(network, account, currency, rate, timeout, admin, max_size, verify): - - deployer = account - click.echo(f"Deployer: {deployer}") - - if rate and currency == ZERO_ADDRESS: - raise ValueError("ERC20 contract address needed for currency") - - # Network - ecosystem_name = networks.provider.network.ecosystem.name - network_name = networks.provider.network.name - provider_name = networks.provider.name - click.echo(f"You are connected to network '{ecosystem_name}:{network_name}:{provider_name}'.") - - # TODO: Move this to a common deployment utilities module - # Validate Etherscan verification parameters. - # This import fails if called before the click network options are evaluated - from scripts.constants import LOCAL_BLOCKCHAIN_ENVIRONMENTS - - is_public_deployment = network_name not in LOCAL_BLOCKCHAIN_ENVIRONMENTS - if not is_public_deployment: - verify = False - elif verify: - env_var_key = API_KEY_ENV_KEY_MAP.get(ecosystem_name) - api_key = os.environ.get(env_var_key) - print(api_key) - if not api_key: - raise ValueError(f"{env_var_key} is not set") - - # Use deployment information for currency, if possible - try: - deployments = config.deployments[ecosystem_name][network_name] - except KeyError: - pass # TODO: Further validate currency address? - else: - print(deployments) - try: - currency = next(d for d in deployments if d["contract_type"] == currency)["address"] - except StopIteration: - pass - - try: - stakes = next(d for d in deployments if d["contract_type"] == "TACoChildApplication")[ - "address" - ] - except StopIteration: - raise ValueError("TACoChildApplication deployment needed") - - # Parameter defaults - admin = admin or deployer - rate = rate or 1 - timeout = timeout or 60 * 60 - max_size = max_size or 64 - - params = (stakes, timeout, max_size, admin, currency, rate) - print("Deployment parameters:", params) - return project.Coordinator.deploy(*params, sender=deployer, publish=verify) diff --git a/scripts/deploy_flat_rate_fee_model.py b/scripts/deploy_flat_rate_fee_model.py deleted file mode 100644 index 9ebc3b1f..00000000 --- a/scripts/deploy_flat_rate_fee_model.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/python3 - -import os - -import click -from ape import config, networks, project -from ape.cli import NetworkBoundCommand, account_option, network_option -from ape.utils import ZERO_ADDRESS -from ape_etherscan.utils import API_KEY_ENV_KEY_MAP - - -@click.command(cls=NetworkBoundCommand) -@network_option() -@account_option() -@click.option("--currency", default=ZERO_ADDRESS) -@click.option("--rate", default=0) -@click.option("--verify/--no-verify", default=True) -def cli(network, account, currency, rate, verify): - deployer = account # get_account(account_id) - click.echo(f"Deployer: {deployer}") - - if rate and currency == ZERO_ADDRESS: - raise ValueError("ERC20 contract address needed for currency") - - # Network - ecosystem_name = networks.provider.network.ecosystem.name - network_name = networks.provider.network.name - provider_name = networks.provider.name - click.echo(f"You are connected to network '{ecosystem_name}:{network_name}:{provider_name}'.") - - # TODO: Move this to a common deployment utilities module - # Validate Etherscan verification parameters. - # This import fails if called before the click network options are evaluated - from scripts.constants import LOCAL_BLOCKCHAIN_ENVIRONMENTS - - is_public_deployment = network_name not in LOCAL_BLOCKCHAIN_ENVIRONMENTS - if not is_public_deployment: - verify = False - elif verify: - env_var_key = API_KEY_ENV_KEY_MAP.get(ecosystem_name) - api_key = os.environ.get(env_var_key) - if not api_key: - raise ValueError(f"{env_var_key} is not set") - - # Use deployment information for currency, if possible - try: - deployments = config.deployments[ecosystem_name][network_name] - except KeyError: - pass # TODO: Further validate currency address? - else: - try: - currency = next(d for d in deployments if d["contract_type"] == currency)["address"] - except StopIteration: - pass - - try: - stakes = next(d for d in deployments if d["contract_type"] == "TACoChildApplication")[ - "address" - ] - except StopIteration: - raise ValueError("TACoChildApplication deployment needed") - - flat_rate_fee_model = project.FlatRateFeeModel.deploy( - currency, - rate, - stakes, - sender=deployer, - publish=verify, - ) - return flat_rate_fee_model diff --git a/scripts/deploy_nucypher_token.py b/scripts/deploy_nucypher_token.py deleted file mode 100644 index 53b02c9c..00000000 --- a/scripts/deploy_nucypher_token.py +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/python3 -from ape import project -from scripts.utils import get_account -from scripts.constants import DEPLOYMENTS_CONFIG - - -def main(account_id=None): - deployer = get_account(account_id) - deployments_config = DEPLOYMENTS_CONFIG - nucypher_token_supply = deployments_config.get("nu_token_supply") - - nucypher_token = project.NuCypherToken.deploy( - nucypher_token_supply, - sender=deployer, - publish=deployments_config.get("verify"), - ) - return nucypher_token diff --git a/scripts/deploy_staking_escrow.py b/scripts/deploy_staking_escrow.py deleted file mode 100644 index c543488d..00000000 --- a/scripts/deploy_staking_escrow.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/python3 -from ape import project -from scripts.utils import ( - deploy_mocks, - get_account, -) -from scripts.constants import LOCAL_BLOCKCHAIN_ENVIRONMENTS, CURRENT_NETWORK, DEPLOYMENTS_CONFIG - - -def main(account_id=None): - deployer = get_account(account_id) - deployments_config = DEPLOYMENTS_CONFIG - if CURRENT_NETWORK in LOCAL_BLOCKCHAIN_ENVIRONMENTS: - nucypher_token, t_staking, _, work_lock, _, _ = deploy_mocks(deployer) - else: - nucypher_token = deployments_config.get("nu_token") - t_staking = deployments_config.get("t_staking") - work_lock = deployments_config.get("work_lock") - - staking_escrow = project.StakingEscrow.deploy( - nucypher_token, - work_lock, - t_staking, - sender=deployer, - publish=deployments_config.get("verify"), - ) - return staking_escrow diff --git a/scripts/deploy_subscription_manager.py b/scripts/deploy_subscription_manager.py deleted file mode 100644 index 564195e3..00000000 --- a/scripts/deploy_subscription_manager.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/python3 -from ape import project -from scripts.utils import get_account -from web3 import Web3 - -INITIAL_FEE_RATE = Web3.to_wei(1, "gwei") - - -def main(id=None): - deployer = get_account(id) - dependency = project.dependencies["openzeppelin"]["4.9.1"] - - proxy_admin = deployer.deploy(dependency.ProxyAdmin) - - subscription_manager_logic = deployer.deploy(project.SubscriptionManager) - calldata = subscription_manager_logic.initialize.encode_input(INITIAL_FEE_RATE) - transparent_proxy = dependency.TransparentUpgradeableProxy.deploy( - subscription_manager_logic.address, proxy_admin.address, calldata, sender=deployer - ) - - subscription_manager = project.SubscriptionManager.at(transparent_proxy.address) - return subscription_manager diff --git a/scripts/deploy_taco_application.py b/scripts/deploy_taco_application.py deleted file mode 100644 index c62dfbb2..00000000 --- a/scripts/deploy_taco_application.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/python3 -from ape import project -from scripts.utils import ( - deploy_mocks, - get_account, -) -from scripts.constants import LOCAL_BLOCKCHAIN_ENVIRONMENTS, CURRENT_NETWORK, DEPLOYMENTS_CONFIG - - -def main(account_id=None): - deployer = get_account(account_id) - deployments_config = DEPLOYMENTS_CONFIG - - if CURRENT_NETWORK in LOCAL_BLOCKCHAIN_ENVIRONMENTS: - _, _, t_staking, _, _, t_token = deploy_mocks(deployer) - else: - t_staking = deployments_config.get("t_staking") - t_token = deployments_config.get("t_token") - - # TODO deploy proxy - taco_app = project.TACoApplication.deploy( - t_token, - t_staking, - deployments_config.get("pre_min_authorization"), - deployments_config.get("pre_min_operator_seconds"), - deployments_config.get("reward_duration"), - deployments_config.get("deauthorization_duration"), - [ - deployments_config.get("commitment_duration_1"), - deployments_config.get("commitment_duration_2"), - ], - sender=deployer, - publish=deployments_config.get("verify"), - ) - return taco_app diff --git a/scripts/deploy_testnet_threshold_staking.py b/scripts/deploy_testnet_threshold_staking.py deleted file mode 100644 index f6f0d3cc..00000000 --- a/scripts/deploy_testnet_threshold_staking.py +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/python3 -from ape import project -from scripts.utils import get_account -from scripts.constants import DEPLOYMENTS_CONFIG - - -def main(account_id=None): - deployer = get_account(account_id) - deployments_config = DEPLOYMENTS_CONFIG - testnet_staking = project.TestnetThresholdStaking.deploy( - sender=deployer, - publish=deployments_config.get("verify"), - ) - return testnet_staking diff --git a/scripts/deploy_xchain_test.py b/scripts/deploy_xchain_test.py deleted file mode 100644 index edb4c9d2..00000000 --- a/scripts/deploy_xchain_test.py +++ /dev/null @@ -1,135 +0,0 @@ -import click -from ape import accounts, config, networks, project -from ape.cli import NetworkBoundCommand, account_option - -DEPENDENCY = project.dependencies["openzeppelin"]["4.9.1"] - - -def convert_config(config): - result = {} - for item in config: - if "contract_type" in item: - result[item["contract_type"]] = item["address"] - else: - result.update(item) - return result - - -def deploy_eth_contracts(deployer, child_address, config, eth_network): - # Connect to the Ethereum network - with eth_network.use_provider("infura"): - - token = project.TToken.deploy( - 100_000_000_000 * 10**18, - sender=deployer, - ) - - threshold_staking = project.ThresholdStakingForTACoApplicationMock.deploy( - sender=deployer, - ) - - taco_app = project.TACoApplication.deploy( - token, - threshold_staking, - config["pre_min_authorization"], - config["pre_min_operator_seconds"], - config["reward_duration"], - config["deauthorization_duration"], - sender=deployer, - ) - - proxy_admin = DEPENDENCY.ProxyAdmin.deploy(sender=deployer) - proxy = DEPENDENCY.TransparentUpgradeableProxy.deploy( - taco_app.address, - proxy_admin.address, - taco_app.initialize.encode_input(), - sender=deployer, - ) - - proxy_contract = project.TACoApplication.at(proxy.address) - threshold_staking.setApplication(proxy_contract.address, sender=deployer) - - root = project.PolygonRoot.deploy( - config["checkpoint_manager"], - config["fx_root"], - proxy_contract.address, - child_address, - sender=deployer, - publish=False, - ) - proxy_contract.setChildApplication(root.address, sender=deployer) - - return root, proxy_contract, threshold_staking - - -def deploy_polygon_contracts(deployer, config, poly_network): - # Connect to the Polygon network - with poly_network.use_provider("infura"): - polygon_child = project.PolygonChild.deploy( - config["fx_child"], - sender=deployer, - publish=False, - ) - - TACoChild = project.TestnetTACoChildApplication.deploy( - polygon_child.address, - sender=deployer, - publish=False, - ) - proxy_admin = DEPENDENCY.ProxyAdmin.deploy(sender=deployer) - proxy = DEPENDENCY.TransparentUpgradeableProxy.deploy( - TACoChild.address, - proxy_admin.address, - b"", - sender=deployer, - ) - proxy_contract = project.TestnetTACoChildApplication.at(proxy.address) - polygon_child.setChildApplication(proxy_contract.address, sender=deployer) - - coordinator = project.CoordinatorForTACoChildApplicationMock.deploy( - proxy_contract.address, sender=deployer - ) - proxy_contract.initialize(coordinator.address, [deployer], sender=deployer) - - return polygon_child, proxy_contract, coordinator - - -# TODO: Figure out better way to retrieve the TACo app contract address -@click.command(cls=NetworkBoundCommand) -@click.option("--network_type", type=click.Choice(["mainnet", "testnet"])) -@account_option() -def cli(network_type, account): - deployer = account - if network_type == "mainnet": - eth_config = config.get_config("deployments")["ethereum"]["mainnet"] - poly_config = config.get_config("deployments")["polygon"]["mainnet"] - eth_network = networks.ethereum.mainnet - poly_network = networks.polygon.mainnet - elif network_type == "testnet": - eth_config = config.get_config("deployments")["ethereum"]["goerli"] - poly_config = config.get_config("deployments")["polygon"]["mumbai"] - eth_network = networks.ethereum.goerli - poly_network = networks.polygon.mumbai - - print("Deployer: {}".format(deployer)) - print("ETH CONFIG: {}".format(eth_config)) - print("POLYGON CONFIG: {}".format(poly_config)) - - with accounts.use_sender(deployer): - poly_child, taco_child_app, coordinator = deploy_polygon_contracts( - deployer, convert_config(poly_config), poly_network - ) - root, taco_root_app, threshold_staking = deploy_eth_contracts( - deployer, poly_child.address, convert_config(eth_config), eth_network - ) - - # Set the root contract address in the child contract - with poly_network.use_provider("infura"): - poly_child.setFxRootTunnel(root.address) - - print("CHILD: {}".format(poly_child.address)) - print("TACo CHILD APP: {}".format(taco_child_app.address)) - print("COORDINATOR: {}".format(coordinator.address)) - print("ROOT: {}".format(root.address)) - print("THRESHOLD STAKING: {}".format(threshold_staking.address)) - print("TACO ROOT APP: {}".format(taco_root_app.address)) diff --git a/scripts/configure_lynx_staking.py b/scripts/lynx/configure_staking.py similarity index 94% rename from scripts/configure_lynx_staking.py rename to scripts/lynx/configure_staking.py index 224beaad..d6bda2fd 100644 --- a/scripts/configure_lynx_staking.py +++ b/scripts/lynx/configure_staking.py @@ -1,7 +1,7 @@ from ape import project from ape.cli import get_user_selected_account -from scripts.constants import ARTIFACTS_DIR -from scripts.registry import read_registry +from deployment.constants import ARTIFACTS_DIR +from deployment.registry import read_registry REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-root-registry.json" diff --git a/scripts/deploy_lynx_child.py b/scripts/lynx/deploy_child.py similarity index 84% rename from scripts/deploy_lynx_child.py rename to scripts/lynx/deploy_child.py index 108fb357..cbcf1650 100644 --- a/scripts/deploy_lynx_child.py +++ b/scripts/lynx/deploy_child.py @@ -1,21 +1,19 @@ #!/usr/bin/python3 from ape import networks, project -from scripts.constants import ( +from deployment.constants import ( ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR, CURRENT_NETWORK, - LOCAL_BLOCKCHAIN_ENVIRONMENTS, + LOCAL_BLOCKCHAIN_ENVIRONMENTS, OZ_DEPENDENCY, ) -from scripts.deployment import prepare_deployment -from scripts.registry import registry_from_ape_deployments +from deployment.registry import registry_from_ape_deployments +from deployment.utils import verify_contracts, prepare_deployment VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-child-params.json" REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-child-registry.json" -OZ_DEPENDENCY = project.dependencies["openzeppelin"]["4.9.1"] - def main(): """ @@ -84,7 +82,4 @@ def main(): print(f"(i) Registry written to {output_filepath}!") if VERIFY: - etherscan = networks.provider.network.explorer - for deployment in deployments: - print(f"(i) Verifying {deployment.contract_type.name}...") - etherscan.publish_contract(deployment.address) + verify_contracts(contracts=deployments) diff --git a/scripts/deploy_lynx_root.py b/scripts/lynx/deploy_root.py similarity index 91% rename from scripts/deploy_lynx_root.py rename to scripts/lynx/deploy_root.py index 0658685b..3016603f 100644 --- a/scripts/deploy_lynx_root.py +++ b/scripts/lynx/deploy_root.py @@ -1,21 +1,19 @@ #!/usr/bin/python3 from ape import networks, project -from scripts.constants import ( +from deployment.constants import ( ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR, CURRENT_NETWORK, - LOCAL_BLOCKCHAIN_ENVIRONMENTS, + LOCAL_BLOCKCHAIN_ENVIRONMENTS, OZ_DEPENDENCY, ) -from scripts.deployment import prepare_deployment -from scripts.registry import registry_from_ape_deployments +from deployment.utils import prepare_deployment +from deployment.registry import registry_from_ape_deployments VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-root-params.json" REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-root-registry.json" -OZ_DEPENDENCY = project.dependencies["openzeppelin"]["4.9.1"] - def main(): """ diff --git a/scripts/merge_lynx_deployment_registries.py b/scripts/lynx/merge_registries.py similarity index 84% rename from scripts/merge_lynx_deployment_registries.py rename to scripts/lynx/merge_registries.py index 5feeb38b..47dcd999 100644 --- a/scripts/merge_lynx_deployment_registries.py +++ b/scripts/lynx/merge_registries.py @@ -1,5 +1,5 @@ -from scripts.constants import ARTIFACTS_DIR -from scripts.registry import merge_registries +from deployment.constants import ARTIFACTS_DIR +from deployment.registry import merge_registries lynx_child_deployment_registry = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-child-registry.json" diff --git a/scripts/lynx/verify.py b/scripts/lynx/verify.py new file mode 100644 index 00000000..9d5228c3 --- /dev/null +++ b/scripts/lynx/verify.py @@ -0,0 +1,10 @@ +from deployment.constants import ARTIFACTS_DIR +from deployment.registry import contracts_from_registry +from deployment.utils import verify_contracts + +REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-child-registry.json" + + +def main(): + contracts = contracts_from_registry(REGISTRY_FILEPATH) + verify_contracts(contracts) diff --git a/scripts/verify_lynx.py b/scripts/verify_lynx.py deleted file mode 100644 index fe368f53..00000000 --- a/scripts/verify_lynx.py +++ /dev/null @@ -1,20 +0,0 @@ -from ape import networks -from scripts.constants import ARTIFACTS_DIR -from scripts.deployment import get_contract_container -from scripts.registry import read_registry - -REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-child-registry.json" - -registry_entries = read_registry(filepath=REGISTRY_FILEPATH) - -deployments = [] -for registry_entry in registry_entries: - contract_type = registry_entry.contract_name - contract_container = get_contract_container(contract_type) - contract_instance = contract_container.at(registry_entry.contract_address) - deployments.append(contract_instance) - -etherscan = networks.provider.network.explorer -for deployment in deployments: - print(f"(i) Verifying {deployment.contract_type.name}...") - etherscan.publish_contract(deployment.address) diff --git a/setup.cfg b/setup.cfg index 5fe53284..358ba231 100644 --- a/setup.cfg +++ b/setup.cfg @@ -8,3 +8,6 @@ include_trailing_comma = True line_length = 100 multi_line_output = 3 use_parentheses = True + +[options] +packages = find: diff --git a/setup.py b/setup.py new file mode 100644 index 00000000..60684932 --- /dev/null +++ b/setup.py @@ -0,0 +1,3 @@ +from setuptools import setup + +setup() From e060df30bba913d8a3a0c83bb697eb5aed6ee63c Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 08:43:33 -0400 Subject: [PATCH 083/112] Proper verification at the end of deploy_lynx_root. --- scripts/lynx/deploy_root.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/scripts/lynx/deploy_root.py b/scripts/lynx/deploy_root.py index 3016603f..8e9dcd32 100644 --- a/scripts/lynx/deploy_root.py +++ b/scripts/lynx/deploy_root.py @@ -1,14 +1,15 @@ #!/usr/bin/python3 -from ape import networks, project +from ape import project from deployment.constants import ( ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR, CURRENT_NETWORK, - LOCAL_BLOCKCHAIN_ENVIRONMENTS, OZ_DEPENDENCY, + LOCAL_BLOCKCHAIN_ENVIRONMENTS, + OZ_DEPENDENCY, ) -from deployment.utils import prepare_deployment from deployment.registry import registry_from_ape_deployments +from deployment.utils import prepare_deployment, verify_contracts VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-root-params.json" @@ -78,7 +79,4 @@ def main(): print(f"(i) Registry written to {output_filepath}!") if VERIFY: - etherscan = networks.provider.network.explorer - for deployment in deployments: - print(f"(i) Verifying {deployment.contract_type.name}...") - etherscan.publish_contract(deployment.address) + verify_contracts(contracts=deployments) From 77eb11950bc59a5c54b39933e2e4bd61a147e37c Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 08:44:00 -0400 Subject: [PATCH 084/112] Update merge_registries to use main method. --- scripts/lynx/merge_registries.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/scripts/lynx/merge_registries.py b/scripts/lynx/merge_registries.py index 47dcd999..42b02063 100644 --- a/scripts/lynx/merge_registries.py +++ b/scripts/lynx/merge_registries.py @@ -8,9 +8,11 @@ output_registry = ARTIFACTS_DIR / "lynx-alpha-13-merged-registry.json" -merge_registries( - registry_1_filepath=lynx_child_deployment_registry, - registry_2_filepath=lynx_registry_w_subscription_manager, - output_filepath=output_registry, - deprecated_contracts=["StakeInfo"], -) + +def main(): + merge_registries( + registry_1_filepath=lynx_child_deployment_registry, + registry_2_filepath=lynx_registry_w_subscription_manager, + output_filepath=output_registry, + deprecated_contracts=["StakeInfo"], + ) From 70617afaf5aa6c011fe9276300d558fe73ae7073 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 09:03:18 -0400 Subject: [PATCH 085/112] Have contracts_from_registry return a dict of contract name -> contract instance instead of a list. --- deployment/registry.py | 13 ++++++------- scripts/lynx/verify.py | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/deployment/registry.py b/deployment/registry.py index ff688f41..79f533c3 100644 --- a/deployment/registry.py +++ b/deployment/registry.py @@ -4,11 +4,10 @@ from typing import Dict, List, NamedTuple, Optional from ape.contracts import ContractInstance -from eth_typing import ChecksumAddress -from eth_utils import to_checksum_address - from deployment.params import get_contract_container from deployment.utils import check_registry_filepath +from eth_typing import ChecksumAddress +from eth_utils import to_checksum_address class RegistryEntry(NamedTuple): @@ -191,12 +190,12 @@ def merge_registries( return output_filepath -def contracts_from_registry(registry_filepath: Path): - registry_entries = read_registry(filepath=registry_filepath) - deployments = list() +def contracts_from_registry(filepath: Path) -> Dict[str, ContractInstance]: + registry_entries = read_registry(filepath=filepath) + deployments = dict() for registry_entry in registry_entries: contract_type = registry_entry.contract_name contract_container = get_contract_container(contract_type) contract_instance = contract_container.at(registry_entry.contract_address) - deployments.append(contract_instance) + deployments[contract_type] = contract_instance return deployments diff --git a/scripts/lynx/verify.py b/scripts/lynx/verify.py index 9d5228c3..4c463bb6 100644 --- a/scripts/lynx/verify.py +++ b/scripts/lynx/verify.py @@ -7,4 +7,4 @@ def main(): contracts = contracts_from_registry(REGISTRY_FILEPATH) - verify_contracts(contracts) + verify_contracts(list(contracts.values())) From 1aa8b0a63d0da4e871c6d736012940718ace69fc Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 11:15:52 -0400 Subject: [PATCH 086/112] Add script to configure stakes/bonding for Lynx. --- scripts/lynx/configure_staking.py | 101 +++++++++++++++++++++--------- 1 file changed, 72 insertions(+), 29 deletions(-) diff --git a/scripts/lynx/configure_staking.py b/scripts/lynx/configure_staking.py index d6bda2fd..6da7f234 100644 --- a/scripts/lynx/configure_staking.py +++ b/scripts/lynx/configure_staking.py @@ -1,41 +1,84 @@ -from ape import project +from ape import networks, project +from ape.api import AccountAPI from ape.cli import get_user_selected_account from deployment.constants import ARTIFACTS_DIR -from deployment.registry import read_registry +from deployment.registry import contracts_from_registry -REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-root-registry.json" +ROOT_REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-root-registry.json" +CHILD_REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-child-registry.json" +LYNX_NODES = { + # staking provider -> operator + "0xb15d5a4e2be34f4be154a1b08a94ab920ffd8a41": "0x890069745E9497C6f99Db68C4588deC5669F3d3E", + "0x210eeac07542f815ebb6fd6689637d8ca2689392": "0xf48F720A2Ed237c24F5A7686543D90596bb8D44D", + "0x48C8039c32F4c6f5cb206A5911C8Ae814929C16B": "0xce057adc39dcD1b3eA28661194E8963481CC48b2", +} -def main(): - registry_entries = read_registry(filepath=REGISTRY_FILEPATH) - registry_contracts_dict = { - registry_entry.contract_name: registry_entry for registry_entry in registry_entries - } +def configure_goerli_root(deployer_account: AccountAPI) -> int: + """Configures ThresholdStaking and TACoApplication on Goerli.""" + deployments = contracts_from_registry(filepath=ROOT_REGISTRY_FILEPATH) - taco_application_entry = registry_contracts_dict[project.TACoApplication.contract_type.name] - threshold_staking_entry = registry_contracts_dict[ - project.TestnetThresholdStaking.contract_type.name - ] + # Set up lynx stakes on Goerli + eth_network = networks.ethereum.goerli + with eth_network.use_provider("infura"): + taco_application_contract = deployments[project.TACoApplication.contract_type.name] + threshold_staking_contract = deployments[project.TestnetThresholdStaking.contract_type.name] - taco_application_contract = project.TACoApplication.at(taco_application_entry.contract_address) - threshold_staking_contract = project.TestnetThresholdStaking.at( - threshold_staking_entry.contract_address - ) + min_stake_size = taco_application_contract.minimumAuthorization() + for staking_provider, operator in LYNX_NODES.items(): + # staking + print(f"Setting roles for staking provider {staking_provider} on Goerli") + threshold_staking_contract.setRoles( + staking_provider, + deployer_account.address, + staking_provider, + staking_provider, + sender=deployer_account, + ) + + print( + f"Authorizing increased in stake for staking provider {staking_provider} on Goerli" + ) + threshold_staking_contract.authorizationIncreased( + staking_provider, 0, min_stake_size, sender=deployer_account + ) + + # bonding + print(f"Bonding operator {operator} for {staking_provider} on Goerli") + taco_application_contract.bondOperator( + staking_provider, operator, sender=deployer_account + ) + + return min_stake_size - deployer_account = get_user_selected_account() - # Set up lynx stakes - lynx_nodes = { - "0xb15d5a4e2be34f4be154a1b08a94ab920ffd8a41": "0x890069745E9497C6f99Db68C4588deC5669F3d3E", - "0x210eeac07542f815ebb6fd6689637d8ca2689392": "0xf48F720A2Ed237c24F5A7686543D90596bb8D44D", - "0x48C8039c32F4c6f5cb206A5911C8Ae814929C16B": "0xce057adc39dcD1b3eA28661194E8963481CC48b2", - } +def configure_mumbai_root(deployer_account: AccountAPI, stake_size: int): + """Configures MockTACoApplication on Mumbai.""" + deployments = contracts_from_registry(filepath=CHILD_REGISTRY_FILEPATH) - min_stake_size = taco_application_contract.minimumAuthorization() - for staking_provider, operator in lynx_nodes.items(): - threshold_staking_contract.setRoles(staking_provider, sender=deployer_account) + # Set up lynx stakes on Mumbai + poly_network = networks.polygon.mumbai + with poly_network.use_provider("infura"): + mock_taco_application_contract = deployments[ + project.LynxMockTACoApplication.contract_type.name + ] - threshold_staking_contract.authorizationIncreased( - staking_provider, 0, min_stake_size, sender=deployer_account - ) + for staking_provider, operator in LYNX_NODES.items(): + # staking + print(f"Setting stake for staking provider {staking_provider} on Mumbai") + mock_taco_application_contract.updateAuthorization( + staking_provider, stake_size, sender=deployer_account + ) + + # bonding + print(f"Bonding operator {operator} for {staking_provider} on Mumbai") + mock_taco_application_contract.updateOperator( + staking_provider, operator, sender=deployer_account + ) + + +def main(): + deployer_account = get_user_selected_account() + stake_size = configure_goerli_root(deployer_account) + configure_mumbai_root(deployer_account, stake_size) From 580a2218d72d3773153a8ca47932f7afc1fa385a Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 14:43:58 -0400 Subject: [PATCH 087/112] Rename LynxMockTACoChildApplication -> MockPolygonRoot (for Goerli) and implement ITACoRootToChild. Rename LynxMockTACoApplication -> MockPolygonChild (for Mumbai). Update constructor params and lynx deployment scripts (root, child scripts) accordingly. --- contracts/contracts/testnet/LynxSet.sol | 26 ++++++++++++++----- .../lynx/lynx-alpha-13-child-params.json | 4 +-- .../lynx/lynx-alpha-13-root-params.json | 2 +- scripts/lynx/deploy_child.py | 25 +++++++++++------- scripts/lynx/deploy_root.py | 22 +++++++++------- 5 files changed, 50 insertions(+), 29 deletions(-) diff --git a/contracts/contracts/testnet/LynxSet.sol b/contracts/contracts/testnet/LynxSet.sol index ae001c97..65255323 100644 --- a/contracts/contracts/testnet/LynxSet.sol +++ b/contracts/contracts/testnet/LynxSet.sol @@ -10,8 +10,8 @@ import "../coordination/ITACoChildToRoot.sol"; import "../coordination/TACoChildApplication.sol"; import "../TACoApplication.sol"; -contract LynxMockTACoChildApplication is Ownable, ITACoChildToRoot { - ITACoChildToRoot public immutable rootApplication; +contract MockPolygonRoot is Ownable, ITACoChildToRoot, ITACoRootToChild { + ITACoChildToRoot public rootApplication; constructor(ITACoChildToRoot _rootApplication) { require( @@ -21,19 +21,33 @@ contract LynxMockTACoChildApplication is Ownable, ITACoChildToRoot { rootApplication = _rootApplication; } + function setRootApplication(ITACoChildToRoot application) external onlyOwner { + rootApplication = application; + } + function confirmOperatorAddress(address operator) external override onlyOwner { rootApplication.confirmOperatorAddress(operator); } + + // solhint-disable-next-line no-empty-blocks + function updateOperator(address stakingProvider, address operator) external {} + + // solhint-disable-next-line no-empty-blocks + function updateAuthorization(address stakingProvider, uint96 amount) external {} } -// Goerli <---------> Mumbai .... -// LynxTACoApplication LynxMockTACoApplication <---> LynxTACoChildApplication +// TACoApplication <---> MockPolygonRoot | | MockPolygonChild <--> TACoChildApplication +// +// Goerli <---------> Mumbai .... +// TestnetThresholdStaking +// - TACoApplication MockPolygonChild <---> LynxTACoChildApplication +// - child = LynxMockTACoChildApplication // // // Registry: // ^ TACoApplication -// ^ TACoChildApplication -contract LynxMockTACoApplication is Ownable, ITACoChildToRoot, ITACoRootToChild { +// ^ TACoChildApplication +contract MockPolygonChild is Ownable, ITACoChildToRoot, ITACoRootToChild { ITACoRootToChild public childApplication; function setChildApplication(ITACoRootToChild _childApplication) external onlyOwner { diff --git a/deployment/constructor_params/lynx/lynx-alpha-13-child-params.json b/deployment/constructor_params/lynx/lynx-alpha-13-child-params.json index fff5fde1..fd6ea47f 100644 --- a/deployment/constructor_params/lynx/lynx-alpha-13-child-params.json +++ b/deployment/constructor_params/lynx/lynx-alpha-13-child-params.json @@ -1,8 +1,8 @@ { - "LynxMockTACoApplication": {}, + "MockPolygonChild": {}, "ProxyAdmin": {}, "LynxTACoChildApplication": { - "_rootApplication": "$LynxMockTACoApplication" + "_rootApplication": "$MockPolygonChild" }, "TransparentUpgradeableProxy": { "_logic": "$LynxTACoChildApplication", diff --git a/deployment/constructor_params/lynx/lynx-alpha-13-root-params.json b/deployment/constructor_params/lynx/lynx-alpha-13-root-params.json index 20d6dff5..e5bf2b7a 100644 --- a/deployment/constructor_params/lynx/lynx-alpha-13-root-params.json +++ b/deployment/constructor_params/lynx/lynx-alpha-13-root-params.json @@ -18,7 +18,7 @@ "admin_": "$ProxyAdmin", "_data": "$EMPTY_BYTES" }, - "LynxMockTACoChildApplication": { + "MockPolygonRoot": { "_rootApplication": "$TransparentUpgradeableProxy:TACoApplication" } } diff --git a/scripts/lynx/deploy_child.py b/scripts/lynx/deploy_child.py index cbcf1650..4a8f28cb 100644 --- a/scripts/lynx/deploy_child.py +++ b/scripts/lynx/deploy_child.py @@ -5,10 +5,11 @@ ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR, CURRENT_NETWORK, - LOCAL_BLOCKCHAIN_ENVIRONMENTS, OZ_DEPENDENCY, + LOCAL_BLOCKCHAIN_ENVIRONMENTS, + OZ_DEPENDENCY, ) from deployment.registry import registry_from_ape_deployments -from deployment.utils import verify_contracts, prepare_deployment +from deployment.utils import prepare_deployment, verify_contracts VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-child-params.json" @@ -34,8 +35,8 @@ def main(): registry_filepath=REGISTRY_FILEPATH, ) - root_application = deployer.deploy( - *params.get(project.LynxMockTACoApplication), **params.get_kwargs() + mock_polygon_child = deployer.deploy( + *params.get(project.MockPolygonChild), **params.get_kwargs() ) proxy_admin = deployer.deploy(*params.get(OZ_DEPENDENCY.ProxyAdmin), **params.get_kwargs()) @@ -51,8 +52,10 @@ def main(): print("\nWrapping TACoChildApplication in proxy") taco_child_application = project.TACoChildApplication.at(proxy.address) - print("\nSetting TACo Child application on TACo Root") - root_application.setChildApplication( + print( + f"\nSetting TACoChildApplication proxy ({taco_child_application.address}) as child application on MockPolygonChild ({mock_polygon_child.address})" + ) + mock_polygon_child.setChildApplication( taco_child_application.address, sender=deployer, ) @@ -61,16 +64,18 @@ def main(): coordinator = deployer.deploy(*params.get(project.Coordinator), **params.get_kwargs()) - print(f"\nInitialize TACoChildApplication proxy with Coordinator {coordinator.address}") + print( + f"\nInitializing TACoChildApplication proxy ({taco_child_application.address}) with Coordinator ({coordinator.address})" + ) taco_child_application.initialize(coordinator.address, sender=deployer) global_allow_list = deployer.deploy(*params.get(project.GlobalAllowList), **params.get_kwargs()) deployments = [ - root_application, + mock_polygon_child, proxy_admin, - taco_implementation, - taco_child_application, + taco_implementation, # implementation (contract name is different than proxy contract) + taco_child_application, # proxy ritual_token, coordinator, global_allow_list, diff --git a/scripts/lynx/deploy_root.py b/scripts/lynx/deploy_root.py index 8e9dcd32..0beafc23 100644 --- a/scripts/lynx/deploy_root.py +++ b/scripts/lynx/deploy_root.py @@ -51,26 +51,28 @@ def main(): print("\nWrapping TACoApplication in proxy") taco_application = project.TACoApplication.at(proxy.address) - print("\nSetting TACoApplication on ThresholdStakingMock") + print( + f"\nSetting TACoApplication proxy ({taco_application.address}) on ThresholdStakingMock ({mock_threshold_staking.address})" + ) mock_threshold_staking.setApplication(taco_application.address, sender=deployer) - print("\nInitialize TACoApplication proxy") + print("\nInitializing TACoApplication proxy") taco_application.initialize(sender=deployer) - mock_taco_child = deployer.deploy( - *params.get(project.LynxMockTACoChildApplication), **params.get_kwargs() - ) + mock_polygon_root = deployer.deploy(*params.get(project.MockPolygonRoot), **params.get_kwargs()) - print(f"\nSetting child application {mock_taco_child.address} on TACoApplication") - taco_application.setChildApplication(mock_taco_child.address, sender=deployer) + print( + f"\nSetting child application on TACoApplication proxy ({taco_application.address}) to MockPolygonChild ({mock_polygon_root.address})" + ) + taco_application.setChildApplication(mock_polygon_root.address, sender=deployer) deployments = [ reward_token, - proxy_admin, mock_threshold_staking, - proxy, + proxy_admin, + # proxy only (implementation has same contract name so not included) taco_application, - mock_taco_child, + mock_polygon_root, ] output_filepath = registry_from_ape_deployments( From c15126a5bbc831450d94fc5792e63c67fb0af483 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 14:47:21 -0400 Subject: [PATCH 088/112] Update lynx alpha-13 root registry based on update made on Goerli to use MockPolygonRoot instead of LynxMockTACoChildApplication. --- .../lynx/lynx-alpha-13-root-registry.json | 91 ++++++++++++++++++- 1 file changed, 89 insertions(+), 2 deletions(-) diff --git a/deployment/artifacts/lynx/lynx-alpha-13-root-registry.json b/deployment/artifacts/lynx/lynx-alpha-13-root-registry.json index e5578222..f4d9f437 100644 --- a/deployment/artifacts/lynx/lynx-alpha-13-root-registry.json +++ b/deployment/artifacts/lynx/lynx-alpha-13-root-registry.json @@ -2007,9 +2007,9 @@ ] ], [ - "LynxMockTACoChildApplication", + "MockPolygonRoot", "v0.0.0", - "0xb5841C2707De89e6F64c1a8b9F4c2fe4d399a51a", + "0x49e3973596522DD789d8D8dc9DA62e8580701e37", [ { "type": "constructor", @@ -2022,6 +2022,25 @@ } ] }, + { + "type": "event", + "name": "AuthorizationUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96", + "indexed": false + } + ], + "anonymous": false + }, { "type": "event", "name": "OperatorConfirmed", @@ -2041,6 +2060,25 @@ ], "anonymous": false }, + { + "type": "event", + "name": "OperatorUpdated", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address", + "indexed": true + }, + { + "name": "operator", + "type": "address", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, { "type": "event", "name": "OwnershipTransferred", @@ -2106,6 +2144,19 @@ } ] }, + { + "type": "function", + "name": "setRootApplication", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "application", + "type": "address", + "internalType": "contract ITACoChildToRoot" + } + ], + "outputs": [] + }, { "type": "function", "name": "transferOwnership", @@ -2118,6 +2169,42 @@ } ], "outputs": [] + }, + { + "type": "function", + "name": "updateAuthorization", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint96", + "internalType": "uint96" + } + ], + "outputs": [] + }, + { + "type": "function", + "name": "updateOperator", + "stateMutability": "nonpayable", + "inputs": [ + { + "name": "stakingProvider", + "type": "address", + "internalType": "address" + }, + { + "name": "operator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [] } ] ] From eeb97820cbf61863699f066dab8bdcc8d564af03 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 14:52:59 -0400 Subject: [PATCH 089/112] Rename LynxMockTACoApplication to MockPolygonChild in child registry (mumbai). --- deployment/artifacts/lynx/lynx-alpha-13-child-registry.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/artifacts/lynx/lynx-alpha-13-child-registry.json b/deployment/artifacts/lynx/lynx-alpha-13-child-registry.json index 14079532..9e2616e3 100644 --- a/deployment/artifacts/lynx/lynx-alpha-13-child-registry.json +++ b/deployment/artifacts/lynx/lynx-alpha-13-child-registry.json @@ -1,6 +1,6 @@ [ [ - "LynxMockTACoApplication", + "MockPolygonChild", "v0.0.0", "0x45e06A2EaC4D928C8773A64b9eFe9d757B17F04D", [ From 59c2b12e0e48a0fc72eb076780dc43818f1968ac Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 15:15:45 -0400 Subject: [PATCH 090/112] Ensure that SubscriptionManager is still included in the child registry. --- .../lynx/lynx-alpha-13-child-registry.json | 486 +++++++++++++++++- 1 file changed, 485 insertions(+), 1 deletion(-) diff --git a/deployment/artifacts/lynx/lynx-alpha-13-child-registry.json b/deployment/artifacts/lynx/lynx-alpha-13-child-registry.json index 9e2616e3..262faa20 100644 --- a/deployment/artifacts/lynx/lynx-alpha-13-child-registry.json +++ b/deployment/artifacts/lynx/lynx-alpha-13-child-registry.json @@ -3204,5 +3204,489 @@ ] } ] + ], + [ + "SubscriptionManager", + "v0.0.0", + "0xb9015d7B35Ce7c81ddE38eF7136Baa3B1044f313", + [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldFeeRate", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newFeeRate", + "type": "uint256" + } + ], + "name": "FeeRateUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes16", + "name": "policyId", + "type": "bytes16" + }, + { + "indexed": true, + "internalType": "address", + "name": "sponsor", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint16", + "name": "size", + "type": "uint16" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "startTimestamp", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint32", + "name": "endTimestamp", + "type": "uint32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "cost", + "type": "uint256" + } + ], + "name": "PolicyCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SET_RATE_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "WITHDRAW_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes16", + "name": "_policyId", + "type": "bytes16" + }, + { + "internalType": "address", + "name": "_policyOwner", + "type": "address" + }, + { + "internalType": "uint16", + "name": "_size", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "_startTimestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_endTimestamp", + "type": "uint32" + } + ], + "name": "createPolicy", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "feeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes16", + "name": "_policyID", + "type": "bytes16" + } + ], + "name": "getPolicy", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "sponsor", + "type": "address" + }, + { + "internalType": "uint32", + "name": "startTimestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "endTimestamp", + "type": "uint32" + }, + { + "internalType": "uint16", + "name": "size", + "type": "uint16" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "internalType": "struct SubscriptionManager.Policy", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "_size", + "type": "uint16" + }, + { + "internalType": "uint32", + "name": "_startTimestamp", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_endTimestamp", + "type": "uint32" + } + ], + "name": "getPolicyCost", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_feeRate", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes16", + "name": "_policyID", + "type": "bytes16" + } + ], + "name": "isPolicyActive", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_ratePerSecond", + "type": "uint256" + } + ], + "name": "setFeeRate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "recipient", + "type": "address" + } + ], + "name": "sweep", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] ] -] +] \ No newline at end of file From a82cd49c7430195dd4b24d50bec227e1593ef56c Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 14:57:29 -0400 Subject: [PATCH 091/112] Clarify manual bridge set up on Lynx within contract comments. --- contracts/contracts/testnet/LynxSet.sol | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/contracts/contracts/testnet/LynxSet.sol b/contracts/contracts/testnet/LynxSet.sol index 65255323..eb9734c3 100644 --- a/contracts/contracts/testnet/LynxSet.sol +++ b/contracts/contracts/testnet/LynxSet.sol @@ -10,6 +10,11 @@ import "../coordination/ITACoChildToRoot.sol"; import "../coordination/TACoChildApplication.sol"; import "../TACoApplication.sol"; +// [Goerli] <---------> [Mumbai] +// +// TACoApplication <---> MockPolygonRoot | | MockPolygonChild <--> TACoChildApplication +// + contract MockPolygonRoot is Ownable, ITACoChildToRoot, ITACoRootToChild { ITACoChildToRoot public rootApplication; @@ -36,17 +41,6 @@ contract MockPolygonRoot is Ownable, ITACoChildToRoot, ITACoRootToChild { function updateAuthorization(address stakingProvider, uint96 amount) external {} } -// TACoApplication <---> MockPolygonRoot | | MockPolygonChild <--> TACoChildApplication -// -// Goerli <---------> Mumbai .... -// TestnetThresholdStaking -// - TACoApplication MockPolygonChild <---> LynxTACoChildApplication -// - child = LynxMockTACoChildApplication -// -// -// Registry: -// ^ TACoApplication -// ^ TACoChildApplication contract MockPolygonChild is Ownable, ITACoChildToRoot, ITACoRootToChild { ITACoRootToChild public childApplication; From 94f7c571ff5a4b2b36d44b00ab4dd61c122dc1a4 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 15:21:22 -0400 Subject: [PATCH 092/112] Install dependencies and don't run deployment scripts as part of CI tests. --- .github/workflows/main.yaml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 37dbf131..a518a259 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -38,23 +38,11 @@ jobs: with: cache: "pip" python-version: "3.8" - - run: pip install -r requirements.txt + - run: pip install -e . -r requirements.txt - name: Run Tests run: ape test - - name: Deploy NuCypher Token - run: ape run scripts/deploy_nucypher_token.py --network ethereum:local - - - name: Deploy TACo Application - run: ape run scripts/deploy_taco_application.py --network ethereum:local - - - name: Deploy Staking Escrow - run: ape run scripts/deploy_staking_escrow.py --network ethereum:local - - - name: Deploy Subscription Manager - run: ape run scripts/deploy_subscription_manager.py --network ethereum:local - linting: runs-on: ubuntu-latest From ca7e27a0d5e54c12e0bcfd4243dfba55c3e608f6 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 15:43:18 -0400 Subject: [PATCH 093/112] Relock dependencies to include ape-infura. eth-ape is limited to <=0.6.19 because of a bug seemingly in 0.6.20 that causes our tests to fail. --- Pipfile | 3 +- Pipfile.lock | 5165 +++++++++++++++++++++++----------------------- requirements.txt | 23 +- 3 files changed, 2589 insertions(+), 2602 deletions(-) diff --git a/Pipfile b/Pipfile index 00bafb00..bd963eac 100644 --- a/Pipfile +++ b/Pipfile @@ -7,10 +7,11 @@ name = "pypi" black = "*" coincurve = "*" cryptography = "*" -eth-ape = "*" +eth-ape = "<=0.6.19" # there is a bug in 0.6.20 that causes `ape test` to fail ape-solidity = ">=0.6.5" ape-etherscan = "*" ape-polygon = "*" +ape-infura = "*" flake8 = "*" isort = "*" nucypher-core = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 31733ab1..1db2b393 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,2591 +1,2578 @@ { - "_meta": { - "hash": { - "sha256": "0e8d8efb70c5f9a20421971c09c829df1c43237c2dde27347b4d72f74830a2de" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "aiohttp": { - "hashes": [ - "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67", - "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c", - "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda", - "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755", - "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d", - "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5", - "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548", - "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690", - "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84", - "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4", - "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a", - "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a", - "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9", - "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef", - "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b", - "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a", - "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d", - "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945", - "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634", - "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7", - "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691", - "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802", - "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c", - "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0", - "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8", - "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82", - "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a", - "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975", - "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b", - "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d", - "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3", - "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7", - "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e", - "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5", - "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649", - "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff", - "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e", - "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c", - "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22", - "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df", - "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e", - "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780", - "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905", - "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51", - "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543", - "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6", - "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873", - "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f", - "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35", - "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938", - "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b", - "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d", - "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8", - "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c", - "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af", - "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42", - "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3", - "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc", - "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8", - "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410", - "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c", - "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825", - "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9", - "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53", - "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a", - "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc", - "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8", - "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c", - "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a", - "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b", - "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd", - "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14", - "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2", - "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c", - "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9", - "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692", - "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1", - "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa", - "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a", - "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de", - "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91", - "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761", - "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd", - "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced", - "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28", - "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8", - "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824" - ], - "markers": "python_version >= '3.6'", - "version": "==3.8.5" - }, - "aiosignal": { - "hashes": [ - "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc", - "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17" - ], - "markers": "python_version >= '3.7'", - "version": "==1.3.1" - }, - "ape-etherscan": { - "hashes": [ - "sha256:398e5f7a1eed82c683498bf432060127b1aa3683566d63e770a13ae79b7af71b", - "sha256:df6b6ac7f56aed956340c0d783192ba4b4510888defb0e5f4667cc367661c72b" - ], - "index": "pypi", - "version": "==0.6.10" - }, - "ape-polygon": { - "hashes": [ - "sha256:1d1faacdeb3ffef3e49070bb4dc9da3a52ef6478338cccbfbb44016ab81d837b", - "sha256:5f606ba9b2834765b0d9516d7b6dcd59a4c73026d1e56162e35247561a1feee4" - ], - "index": "pypi", - "version": "==0.6.5" - }, - "ape-solidity": { - "hashes": [ - "sha256:c923809f4f3542e86b18cbeb325b08800461b4af38366a8950d26afc15431e35", - "sha256:ccd58558fad2a0003d1e0c026b8bfb5e35ec1600aa06ba2c2260daa5c64a2299" - ], - "index": "pypi", - "version": "==0.6.9" - }, - "appnope": { - "hashes": [ - "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", - "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" - ], - "markers": "sys_platform == 'darwin'", - "version": "==0.1.3" - }, - "asn1crypto": { - "hashes": [ - "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c", - "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67" - ], - "version": "==1.5.1" - }, - "asttokens": { - "hashes": [ - "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e", - "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69" - ], - "version": "==2.4.0" - }, - "async-timeout": { - "hashes": [ - "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", - "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028" - ], - "markers": "python_version >= '3.7'", - "version": "==4.0.3" - }, - "attrs": { - "hashes": [ - "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", - "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" - ], - "markers": "python_version >= '3.7'", - "version": "==23.1.0" - }, - "backcall": { - "hashes": [ - "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", - "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" - ], - "version": "==0.2.0" - }, - "base58": { - "hashes": [ - "sha256:1e42993c0628ed4f898c03b522b26af78fb05115732549b21a028bc4633d19ab", - "sha256:6aa0553e477478993588303c54659d15e3c17ae062508c854a8b752d07c716bd", - "sha256:9a793c599979c497800eb414c852b80866f28daaed5494703fc129592cc83e60" - ], - "version": "==1.0.3" - }, - "bitarray": { - "hashes": [ - "sha256:00ff372dfaced7dd6cc2dffd052fafc118053cf81a442992b9a23367479d77d7", - "sha256:0cc066c7290151600b8872865708d2d00fb785c5db8a0df20d70d518e02f172b", - "sha256:0de1bc5f971aba46de88a4eb0dbb5779e30bbd7514f4dcbff743c209e0c02667", - "sha256:1414582b3b7516d2282433f0914dd9846389b051b2aea592ae7cc165806c24ac", - "sha256:17c32ba584e8fb9322419390e0e248769ed7d59de3ffa7432562a4c0ec4f1f82", - "sha256:18530ed3ddd71e9ff95440afce531efc3df7a3e0657f1c201c2c3cb41dd65869", - "sha256:1a0d27aad02d8abcb1d3b7d85f463877c4937e71adf9b6adb9367f2cdad91a52", - "sha256:1e859c664500d57526fe07140889a3b58dca54ff3b16ac6dc6d534a65c933084", - "sha256:214c05a7642040f6174e29f3e099549d3c40ac44616405081bf230dcafb38767", - "sha256:28dee92edd0d21655e56e1870c22468d0dabe557df18aa69f6d06b1543614180", - "sha256:29e19cb80a69f6d1a64097bfbe1766c418e1a785d901b583ef0328ea10a30399", - "sha256:2aa2267eb6d2b88ef7d139e79a6daaa84cd54d241b9797478f10dcb95a9cd620", - "sha256:2ab81c74a1805fe74330859b38e70d7525cdd80953461b59c06660046afaffcf", - "sha256:2b0f754a5791635b8239abdcc0258378111b8ee7a8eb3e2bbc24bcc48a0f0b08", - "sha256:2b977c39e3734e73540a2e3a71501c2c6261c70c6ce59d427bb7c4ecf6331c7e", - "sha256:2d38ceca90ed538706e3f111513073590f723f90659a7af0b992b29776a6e816", - "sha256:2d3f28a80f2e6bb96e9360a4baf3fbacb696b5aba06a14c18a15488d4b6f398f", - "sha256:2dc064a63445366f6b26eaf77230d326b9463e903ba59d6ff5efde0c5ec1ea0e", - "sha256:3024ab4c4906c3681408ca17c35833237d18813ebb9f24ae9f9e3157a4a66939", - "sha256:3243e4b8279ff2fe4c6e7869f0e6930c17799ee9f8d07317f68d44a66b46281e", - "sha256:3994f7dc48d21af40c0d69fca57d8040b02953f4c7c3652c2341d8947e9cbedf", - "sha256:3b999fb66980f885961d197d97d7ff5a13b7ab524ccf45ccb4704f4b82ce02e3", - "sha256:3bb5f2954dd897b0bac13b5449e5c977534595b688120c8af054657a08b01f46", - "sha256:443726af4bd60515e4e41ea36c5dbadb29a59bc799bcbf431011d1c6fd4363e3", - "sha256:4677477a406f2a9e064920463f69172b865e4d69117e1f2160064d3f5912b0bd", - "sha256:46fdd27c8fa4186d8b290bf74a28cbd91b94127b1b6a35c265a002e394fa9324", - "sha256:4a637bcd199c1366c65b98f18884f0d0b87403f04676b21e4635831660d722a7", - "sha256:4ce2ef9291a193a0e0cd5e23970bf3b682cc8b95220561d05b775b8d616d665f", - "sha256:542358b178b025dcc95e7fb83389e9954f701c41d312cbb66bdd763cbe5414b5", - "sha256:55020d6fb9b72bd3606969f5431386c592ed3666133bd475af945aa0fa9e84ec", - "sha256:57aeab27120a8a50917845bb81b0976e33d4759f2156b01359e2b43d445f5127", - "sha256:5934e3a623a1d485e1dcfc1990246e3c32c6fc6e7f0fd894750800d35fdb5794", - "sha256:5b0493ab66c6b8e17e9fde74c646b39ee09c236cf28a787cb8cbd3a83c05bff7", - "sha256:5f6175c1cf07dadad3213d60075704cf2e2f1232975cfd4ac8328c24a05e8f78", - "sha256:6033303431a7c85a535b3f1b0ec28abc2ebc2167c263f244993b56ccb87cae6b", - "sha256:62ac31059a3c510ef64ed93d930581b262fd4592e6d95ede79fca91e8d3d3ef6", - "sha256:63fa75e87ad8c57d5722cc87902ca148ef8bbbba12b5c5b3c3730a1bc9ac2886", - "sha256:67e8fb18df51e649adbc81359e1db0f202d72708fba61b06f5ac8db47c08d107", - "sha256:69ab51d551d50e4d6ca35abc95c9d04b33ad28418019bb5481ab09bdbc0df15c", - "sha256:6be965028785413a6163dd55a639b898b22f67f9b6ed554081c23e94a602031e", - "sha256:6c26a923080bc211cab8f5a5e242e3657b32951fec8980db0616e9239aade482", - "sha256:6df04efdba4e1bf9d93a1735e42005f8fcf812caf40c03934d9322412d563499", - "sha256:6ea51ba4204d086d5b76e84c31d2acbb355ed1b075ded54eb9b7070b0b95415d", - "sha256:741c3a2c0997c8f8878edfc65a4a8f7aa72eede337c9bc0b7bd8a45cf6e70dbc", - "sha256:74cd1725d08325b6669e6e9a5d09cec29e7c41f7d58e082286af5387414d046d", - "sha256:75104c3076676708c1ac2484ebf5c26464fb3850312de33a5b5bf61bfa7dbec5", - "sha256:797de3465f5f6c6be9a412b4e99eb6e8cdb86b83b6756655c4d83a65d0b9a376", - "sha256:7b29d4bf3d3da1847f2be9e30105bf51caaf5922e94dc827653e250ed33f4e8a", - "sha256:7c17dd8fb146c2c680bf1cb28b358f9e52a14076e44141c5442148863ee95d7d", - "sha256:81e83ed7e0b1c09c5a33b97712da89e7a21fd3e5598eff3975c39540f5619792", - "sha256:82bfb6ab9b1b5451a5483c9a2ae2a8f83799d7503b384b54f6ab56ea74abb305", - "sha256:8367768ab797105eb97dfbd4577fcde281618de4d8d3b16ad62c477bb065f347", - "sha256:843af12991161b358b6379a8dc5f6636798f3dacdae182d30995b6a2df3b263e", - "sha256:848af80518d0ed2aee782018588c7c88805f51b01271935df5b256c8d81c726e", - "sha256:861850d6a58e7b6a7096d0b0efed9c6d993a6ab8b9d01e781df1f4d80cc00efa", - "sha256:8c361201e1c3ee6d6b2266f8b7a645389880bccab1b29e22e7a6b7b6e7831ad5", - "sha256:904719fb7304d4115228b63c178f0cc725ad3b73e285c4b328e45a99a8e3fad6", - "sha256:9061c0a50216f24c97fb2325de84200e5ad5555f25c854ddcb3ceb6f12136055", - "sha256:9186cf8135ca170cd907d8c4df408a87747570d192d89ec4ff23805611c702a0", - "sha256:9336300fd0acf07ede92e424930176dc4b43ef1b298489e93ba9a1695e8ea752", - "sha256:9aad7b4670f090734b272c072c9db375c63bd503512be9a9393e657dcacfc7e2", - "sha256:9b65d487451e0e287565c8436cf4da45260f958f911299f6122a20d7ec76525c", - "sha256:9d5df3d6358425c9dfb6bdbd4f576563ec4173d24693a9042d05aadcb23c0b98", - "sha256:9d6a9c72354327c7aa9890ff87904cbe86830cb1fb58c39750a0afac8df5e051", - "sha256:9fed8aba8d1b09cf641b50f1e6dd079c31677106ea4b63ec29f4c49adfabd63f", - "sha256:a04d4851e83730f03c4a6aac568c7d8b42f78f0f9cc8231d6db66192b030ce1e", - "sha256:a0f6d705860f59721d7282496a4d29b5fd78690e1c1473503832c983e762b01b", - "sha256:aa08a9b03888c768b9b2383949a942804d50d8164683b39fe62f0bfbfd9b4204", - "sha256:ad440c17ef2ff42e94286186b5bcf82bf87c4026f91822675239102ebe1f7035", - "sha256:ae32ac7217e83646b9f64d7090bf7b737afaa569665621f110a05d9738ca841a", - "sha256:b2015a9dd718393e814ff7b9e80c58190eb1cef7980f86a97a33e8440e158ce2", - "sha256:b2560475c5a1ff96fcab01fae7cf6b9a6da590f02659556b7fccc7991e401884", - "sha256:b65a04b2e029b0694b52d60786732afd15b1ec6517de61a36afbb7808a2ffac1", - "sha256:b67733a240a96f09b7597af97ac4d60c59140cfcfd180f11a7221863b82f023a", - "sha256:b8d6e5ff385fea25caf26fd58b43f087deb763dcaddd18d3df2895235cf1b484", - "sha256:bc03bb358ae3917247d257207c79162e666d407ac473718d1b95316dac94162b", - "sha256:bf80804014e3736515b84044c2be0e70080616b4ceddd4e38d85f3167aeb8165", - "sha256:c2426dc7a0d92d8254def20ab7a231626397ce5b6fb3d4f44be74cc1370a60c3", - "sha256:c54b0af16be45de534af9d77e8a180126cd059f72db8b6550f62dda233868942", - "sha256:c5582dd7d906e6f9ec1704f99d56d812f7d395d28c02262bc8b50834d51250c3", - "sha256:c9efcee311d9ba0c619743060585af9a9b81496e97b945843d5e954c67722a75", - "sha256:cbe54685cf6b17b3e15faf6c4b76773bc1c484bc447020737d2550a9dde5f6e6", - "sha256:cf38871ed4cd89df9db7c70f729b948fa3e2848a07c69f78e4ddfbe4f23db63c", - "sha256:d175e16419a52d54c0ac44c93309ba76dc2cfd33ee9d20624f1a5eb86b8e162e", - "sha256:d2f13b7d0694ce2024c82fc595e6ccc3918e7f069747c3de41b1ce72a9a1e346", - "sha256:d32ccd2c0d906eae103ef84015f0545a395052b0b6eb0e02e9023ca0132557f6", - "sha256:d34790a919f165b6f537935280ef5224957d9ce8ab11d339f5e6d0319a683ccc", - "sha256:dc7acffee09822b334d1b46cd384e969804abdf18f892c82c05c2328066cd2ae", - "sha256:dd76bbf5a4b2ab84b8ffa229f5648e80038ba76bf8d7acc5de9dd06031b38117", - "sha256:df9d8a9a46c46950f306394705512553c552b633f8bf3c11359c4204289f11e3", - "sha256:e48c45ea7944225bcee026c457a70eaea61db3659d9603f07fc8a643ab7e633b", - "sha256:e4cd81ffd2d58ef68c22c825aff89f4a47bd721e2ada0a3a96793169f370ae21", - "sha256:e68ceef35a88625d16169550768fcc8d3894913e363c24ecbf6b8c07eb02c8f3", - "sha256:e7f7231ef349e8f4955d9b39561f4683a418a73443cfce797a4eddbee1ba9664", - "sha256:e88a706f92ad1e0e1e66f6811d10b6155d5f18f0de9356ee899a7966a4e41992", - "sha256:ea71e0a50060f96ad0821e0ac785e91e44807f8b69555970979d81934961d5bd", - "sha256:ee772c20dcb56b03d666a4e4383d0b5b942b0ccc27815e42fe0737b34cba2082", - "sha256:f0af01e1f61fe627f63648c0c6f52de8eac56710a2ef1dbce4851d867084cc7e", - "sha256:f30cdce22af3dc7c73e70af391bfd87c4574cc40c74d651919e20efc26e014b5", - "sha256:f3128234bde3629ab301a501950587e847d30031a9cbf04d95f35cbf44469a9e", - "sha256:f7d2ec2174d503cbb092f8353527842633c530b4e03b9922411640ac9c018a19", - "sha256:f9a66745682e175e143a180524a63e692acb2b8c86941073f6dd4ee906e69608" - ], - "version": "==2.8.1" - }, - "black": { - "hashes": [ - "sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f", - "sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7", - "sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100", - "sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573", - "sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d", - "sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f", - "sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9", - "sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300", - "sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948", - "sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325", - "sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9", - "sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71", - "sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186", - "sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f", - "sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe", - "sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855", - "sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80", - "sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393", - "sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c", - "sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204", - "sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377", - "sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301" - ], - "index": "pypi", - "version": "==23.9.1" - }, - "cached-property": { - "hashes": [ - "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130", - "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0" - ], - "version": "==1.5.2" - }, - "cachetools": { - "hashes": [ - "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590", - "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b" - ], - "markers": "python_version >= '3.7'", - "version": "==5.3.1" - }, - "certifi": { - "hashes": [ - "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", - "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" - ], - "markers": "python_version >= '3.6'", - "version": "==2023.7.22" - }, - "cffi": { - "hashes": [ - "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", - "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", - "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", - "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", - "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", - "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", - "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", - "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", - "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", - "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", - "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", - "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", - "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", - "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", - "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", - "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", - "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", - "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", - "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", - "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", - "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", - "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", - "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", - "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", - "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", - "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", - "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", - "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", - "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", - "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", - "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", - "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", - "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", - "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", - "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", - "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", - "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", - "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", - "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", - "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", - "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", - "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", - "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", - "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", - "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", - "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", - "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", - "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", - "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", - "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", - "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", - "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", - "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", - "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", - "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", - "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", - "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", - "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", - "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", - "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", - "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", - "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", - "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", - "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" - ], - "version": "==1.15.1" - }, - "cfgv": { - "hashes": [ - "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", - "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560" - ], - "markers": "python_version >= '3.8'", - "version": "==3.4.0" - }, - "chardet": { - "hashes": [ - "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", - "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970" - ], - "markers": "python_version >= '3.7'", - "version": "==5.2.0" - }, - "charset-normalizer": { - "hashes": [ - "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96", - "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c", - "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710", - "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706", - "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020", - "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252", - "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad", - "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329", - "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a", - "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f", - "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6", - "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4", - "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a", - "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46", - "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2", - "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23", - "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace", - "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd", - "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982", - "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10", - "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2", - "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea", - "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09", - "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5", - "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149", - "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489", - "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9", - "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80", - "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592", - "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3", - "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6", - "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed", - "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c", - "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200", - "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a", - "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e", - "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d", - "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6", - "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623", - "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669", - "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3", - "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa", - "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9", - "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2", - "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f", - "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1", - "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4", - "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a", - "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8", - "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3", - "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029", - "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f", - "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959", - "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22", - "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7", - "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952", - "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346", - "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e", - "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d", - "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299", - "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd", - "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a", - "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3", - "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037", - "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94", - "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c", - "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858", - "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a", - "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449", - "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c", - "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918", - "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1", - "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c", - "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", - "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.2.0" - }, - "click": { - "hashes": [ - "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", - "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" - ], - "markers": "python_version >= '3.7'", - "version": "==8.1.7" - }, - "coincurve": { - "hashes": [ - "sha256:07e3c37cfadac6896668a130ea46296a3dfdeea0160fd66a51e377ad00795269", - "sha256:0b1a42eba91b9e4f833309e94bc6a270b1700cb4567d4809ef91f00968b57925", - "sha256:0b31ab366fadff16ecfdde96ffc07e70fee83850f88bd1f985a8b4977a68bbfb", - "sha256:116bf1b60a6e72e23c6b153d7c79f0e565d82973d917a3cecf655ffb29263163", - "sha256:14700463009c7d799a746929728223aa53ff1ece394ea408516d98d637434883", - "sha256:1bce17d7475cee9db2c2fa7af07eaab582732b378acf6dcaee417de1df2d8661", - "sha256:23b9ced9cce32dabb4bc15fa6449252fa51efddf0268481973e4c3772a5a68c6", - "sha256:257c6171cd0301c119ef41360f0d0c2fb5cc288717b33d3bd5482a4c9ae04551", - "sha256:286969b6f789bbd9d744d28350a3630c1cb3ee045263469a28892f70a4a6654a", - "sha256:2d2c20d108580bce5efedb980688031462168f4de2446de95898b48a249127a2", - "sha256:2d95103ed43df855121cd925869ae2589360a8d94fcd61b236958deacfb9a359", - "sha256:33678f6b43edbeab6605584c725305f4f814239780c53eba0f8e4bc4a52b1d1a", - "sha256:3caf58877bcf41eb4c1be7a2d54317f0b31541d99ba248dae28821b19c52a0db", - "sha256:412a06b7d1b8229f25318f05e76310298da5ad55d73851eabac7ddfdcdc5bff4", - "sha256:4ab662b67454fea7f0a5ae855ba6ad9410bcaebe68b97f4dade7b5944dec3a11", - "sha256:599b1b3cf097cae920d97f31a5b8e8aff185ca8fa5d8a785b2edf7b199fb9731", - "sha256:6a0c0c1e492ef08efe99d25a23d535e2bff667bbef43d71a6f8893ae811b3d81", - "sha256:704d1abf2e78def33988368592233a8ec9b98bfc45dfa2ec9e898adfad46e5ad", - "sha256:73e464e0ace77c686fdc54590e5592905b6802f9fc20a0c023f0b1585669d6a3", - "sha256:779da694dea1b1d09e16b00e079f6a1195290ce9568f39c95cddf35f1f49ec49", - "sha256:7844f01904e32317a00696a27fd771860e53a2fa62e5c66eace9337d2742c9e6", - "sha256:7f1142252e870f091b2c2c21cc1fadfdd29af23d02e99f29add0f14d1ba94b4c", - "sha256:8290903d4629f27f9f3cdeec72ffa97536c5a6ed5ba7e3413b2707991c650fbe", - "sha256:83379dd70291480df2052554851bfd17444c003aef7c4bb02d96d73eec69fe28", - "sha256:8964e680c622a2b5eea940abdf51c77c1bd3d4fde2a04cec2420bf91981b198a", - "sha256:908467330cd3047c71105a08394c4f3e7dce76e4371b030ba8b0ef863013e3ca", - "sha256:a7b31efe56b3f6434828ad5f6ecde4a95747bb69b59032746482eebb8f3456a4", - "sha256:abeb4c1d78e1a81a3f1c99a406cd858669582ada2d976e876ef694f57dec95ca", - "sha256:ba9eaddd50a2ce0d891af7cee11c2e048d1f0f44bf87db00a5c4b1eee7e3391b", - "sha256:c60690bd7704d8563968d2dded33eb514875a52b5964f085409965ad041b2555", - "sha256:c86626afe417a09d8e80e56780efcae3ae516203b23b5ade84813916e1c94fc1", - "sha256:cd11d2ca5b7e989c5ce1af217a2ad78c19c21afca786f198d1b1a408d6f408dc", - "sha256:d05641cf31d68514c47cb54105d20acbae79fc3ee3942454eaaf411babb3f880", - "sha256:d53e2a268142924c24e9b786b3e6c3603fae54bb8211560036b0e9ce6a9f2dbc", - "sha256:e009f06287507158f16c82cc313c0f3bfd0e9ec1e82d1a4d5fa1c5b6c0060f69", - "sha256:e3abb7f65e2b5fb66a15e374faeaafe6700fdb83fb66d1873ddff91c395a3b74", - "sha256:eba563f7f70c10323227d1890072172bd84df6f814c9a6b012033b214426b6cf", - "sha256:f3e5f2a2d774050b3ea8bf2167f2d598fde58d7690779931516714d98b65d884", - "sha256:f40646d5f29ac9026f8cc1b368bc9ab68710fad055b64fbec020f9bbfc99b242", - "sha256:f44b9ba588b34795d1b4074f9a9fa372adef3fde58300bf32f40a69e8cd72a23", - "sha256:f8bcb9c40fd730cf377fa448f1304355d6497fb3d00b7b0a69a10dfcc14a6d28", - "sha256:fceca9d6ecaa1e8f891675e4f4ff530d54e41c648fc6e8a816835ffa640fa899" - ], - "index": "pypi", - "version": "==18.0.0" - }, - "colorama": { - "hashes": [ - "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", - "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", - "version": "==0.4.6" - }, - "commonmark": { - "hashes": [ - "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60", - "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9" - ], - "version": "==0.9.1" - }, - "cryptography": { - "hashes": [ - "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306", - "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84", - "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47", - "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d", - "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116", - "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207", - "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81", - "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087", - "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd", - "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507", - "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858", - "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae", - "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34", - "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906", - "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd", - "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922", - "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7", - "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4", - "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574", - "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1", - "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c", - "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e", - "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de" - ], - "index": "pypi", - "version": "==41.0.3" - }, - "cytoolz": { - "hashes": [ - "sha256:00547da587f124b32b072ce52dd5e4b37cf199fedcea902e33c67548523e4678", - "sha256:0295289c4510efa41174850e75bc9188f82b72b1b54d0ea57d1781729c2924d5", - "sha256:03b58f843f09e73414e82e57f7e8d88f087eaabf8f276b866a40661161da6c51", - "sha256:0568d4da0a9ee9f9f5ab318f6501557f1cfe26d18c96c8e0dac7332ae04c6717", - "sha256:08a0e03f287e45eb694998bb55ac1643372199c659affa8319dfbbdec7f7fb3c", - "sha256:0a9d12436fd64937bd2c9609605f527af7f1a8db6e6637639b44121c0fe715d6", - "sha256:101b5bd32badfc8b1f9c7be04ba3ae04fb47f9c8736590666ce9449bff76e0b1", - "sha256:14108cafb140dd68fdda610c2bbc6a37bf052cd48cfebf487ed44145f7a2b67f", - "sha256:18580d060fa637ff01541640ecde6de832a248df02b8fb57e6dd578f189d62c7", - "sha256:18a0f838677f9510aef0330c0096778dd6406d21d4ff9504bf79d85235a18460", - "sha256:1ce324d1b413636ea5ee929f79637821f13c9e55e9588f38228947294944d2ed", - "sha256:246368e983eaee9851b15d7755f82030eab4aa82098d2a34f6bef9c689d33fcc", - "sha256:24c0d71e9ac91f4466b1bd280f7de43aa4d94682daaf34d85d867a9b479b87cc", - "sha256:275d53fd769df2102d6c9fc98e553bd8a9a38926f54d6b20cf29f0dd00bf3b75", - "sha256:294d24edc747ef4e1b28e54365f713becb844e7898113fafbe3e9165dc44aeea", - "sha256:2fb740482794a72e2e5fec58e4d9b00dcd5a60a8cef68431ff12f2ba0e0d9a7e", - "sha256:31d4b0455d72d914645f803d917daf4f314d115c70de0578d3820deb8b101f66", - "sha256:388f840fd911d61a96e9e595eaf003f9dc39e847c9060b8e623ab29e556f009b", - "sha256:3e993804e6b04113d61fdb9541b6df2f096ec265a506dad7437517470919c90f", - "sha256:4180b2785d1278e6abb36a72ac97c92432db53fa2df00ee943d2c15a33627d31", - "sha256:4416ee86a87180b6a28e7483102c92debc077bec59c67eda8cc63fc52a218ac0", - "sha256:45c7b4eac7571707269ebc2893facdf87e359cd5c7cfbfa9e6bd8b33fb1079c5", - "sha256:460c05238fbfe6d848141669d17a751a46c923f9f0c9fd8a3a462ab737623a44", - "sha256:478051e5ef8278b2429864c8d148efcebdc2be948a61c9a44757cd8c816c98f5", - "sha256:481e3129a76ea01adcc0e7097ccb8dbddab1cfc40b6f0e32c670153512957c0f", - "sha256:48425107fbb1af3f0f2410c004f16be10ffc9374358e5600b57fa543f46f8def", - "sha256:4a7d8b869ded171f6cdf584fc2fc6ae03b30a0e1e37a9daf213a59857a62ed90", - "sha256:4bff49986c9bae127928a2f9fd6313146a342bfae8292f63e562f872bd01b871", - "sha256:51d3495235af09f21aa92a7cdd51504bda640b108b6be834448b774f52852c09", - "sha256:5556acde785a61d4cf8b8534ae109b023cbd2f9df65ee2afbe070be47c410f8c", - "sha256:55e94124af9c8fbb1df54195cc092688fdad0765641b738970b6f1d5ea72e776", - "sha256:5616d386dfbfba7c39e9418ba668c734f6ceaacc0130877e8a100cad11e6838b", - "sha256:57233e1600560ceb719bed759dc78393edd541b9a3e7fefc3079abd83c26a6ea", - "sha256:593e89e2518eaf81e96edcc9ef2c5fca666e8fc922b03d5cb7a7b8964dbee336", - "sha256:5998f81bf6a2b28a802521efe14d9fc119f74b64e87b62ad1b0e7c3d8366d0c7", - "sha256:5e4e612b7ecc9596e7c859cd9e0cd085e6d0c576b4f0d917299595eb56bf9c05", - "sha256:5fef7b602ccf8a3c77ab483479ccd7a952a8c5bb1c263156671ba7aaa24d1035", - "sha256:63b31345e20afda2ae30dba246955517a4264464d75e071fc2fa641e88c763ec", - "sha256:663911786dcde3e4a5d88215c722c531c7548903dc07d418418c0d1c768072c0", - "sha256:673d6e9e3aa86949343b46ac2b7be266c36e07ce77fa1d40f349e6987a814d6e", - "sha256:68ae7091cc73a752f0b938f15bb193de80ca5edf5ae2ea6360d93d3e9228357b", - "sha256:698da4fa1f7baeea0607738cb1f9877ed1ba50342b29891b0223221679d6f729", - "sha256:6a93644d7996fd696ab7f1f466cd75d718d0a00d5c8118b9fe8c64231dc1f85e", - "sha256:6c8d0dff4865da54ae825d43e1721925721b19f3b9aca8e730c2ce73dee2c630", - "sha256:732d08228fa8d366fec284f7032cc868d28a99fa81fc71e3adf7ecedbcf33a0f", - "sha256:735147aa41b8eeb104da186864b55e2a6623c758000081d19c93d759cd9523e3", - "sha256:7a92aab8dd1d427ac9bc7480cfd3481dbab0ef024558f2f5a47de672d8a5ffaa", - "sha256:7d352d4de060604e605abdc5c8a5d0429d5f156cb9866609065d3003454d4cea", - "sha256:81074edf3c74bc9bd250d223408a5df0ff745d1f7a462597536cd26b9390e2d6", - "sha256:81e6a9a8fda78a2f4901d2915b25bf620f372997ca1f20a14f7cefef5ad6f6f4", - "sha256:843500cd3e4884b92fd4037912bc42d5f047108d2c986d36352e880196d465b0", - "sha256:89247ac220031a4f9f689688bcee42b38fd770d4cce294e5d914afc53b630abe", - "sha256:8bb624dbaef4661f5e3625c1e39ad98ecceef281d1380e2774d8084ad0810275", - "sha256:9007bb1290c79402be6b84bcf9e7a622a073859d61fcee146dc7bc47afe328f3", - "sha256:9070ae35c410d644e6df98a8f69f3ed2807e657d0df2a26b2643127cbf6944a5", - "sha256:908c13f305d34322e11b796de358edaeea47dd2d115c33ca22909c5e8fb036fd", - "sha256:9480b4b327be83c4d29cb88bcace761b11f5e30198ffe2287889455c6819e934", - "sha256:960d85ebaa974ecea4e71fa56d098378fa51fd670ee744614cbb95bf95e28fc7", - "sha256:96796594c770bc6587376e74ddc7d9c982d68f47116bb69d90873db5e0ea88b6", - "sha256:97cf514a9f3426228d8daf880f56488330e4b2948a6d183a106921217850d9eb", - "sha256:997b7e0960072f6bb445402da162f964ea67387b9f18bda2361edcc026e13597", - "sha256:9b28787eaf2174e68f0acb3c66f9c6b98bdfeb0930c0d0b08e1941c7aedc8d27", - "sha256:9bf51354e15520715f068853e6ab8190e77139940e8b8b633bdb587956a08fb0", - "sha256:9e5075e30be626ef0f9bedf7a15f55ed4d7209e832bc314fdc232dbd61dcbf44", - "sha256:a08b4346350660799d81d4016e748bcb134a9083301d41f9618f64a6077f89f2", - "sha256:a67f75cc51a2dc7229a8ac84291e4d61dc5abfc8940befcf37a2836d95873340", - "sha256:a973f5286758f76824ecf19ae1999f6697371a9121c8f163295d181d19a819d7", - "sha256:ab911033e5937fc221a2c165acce7f66ae5ac9d3e54bec56f3c9c197a96be574", - "sha256:ad92e37be0b106fdbc575a3a669b43b364a5ef334495c9764de4c2d7541f7a99", - "sha256:ad9ea4a50d2948738351790047d45f2b1a023facc01bf0361988109b177e8b2f", - "sha256:b029bdd5a8b6c9a7c0e8fdbe4fc25ffaa2e09b77f6f3462314696e3a20511829", - "sha256:b41a85b9b9a2530b72b0d3d10e383fc3c2647ae88169d557d5e216f881860318", - "sha256:baf020f4b708f800b353259cd7575e335a79f1ac912d9dda55b2aa0bf3616e42", - "sha256:c08094b9e5d1b6dfb0845a0253cc2655ca64ce70d15162dfdb102e28c8993493", - "sha256:c26805b6c8dc8565ed91045c44040bf6c0fe5cb5b390c78cd1d9400d08a6cd39", - "sha256:c6ee222671eed5c5b16a5ad2aea07f0a715b8b199ee534834bc1dd2798f1ade7", - "sha256:c820608e7077416f766b148d75e158e454881961881b657cff808529d261dd24", - "sha256:cb081b2b02bf4405c804de1ece6f904916838ab0e057f1446e4ac12fac827960", - "sha256:cbe038bb78d599b5a29d09c438905defaa615a522bc7e12f8016823179439497", - "sha256:cd461e402e24929d866f05061d2f8337e3a8456e75e21b72c125abff2477c7f7", - "sha256:cde6dbb788a4cbc4a80a72aa96386ba4c2b17bdfff3ace0709799adbe16d6476", - "sha256:ce7889dc3701826d519ede93cdff11940fb5567dbdc165dce0e78047eece02b7", - "sha256:d0086ba8d41d73647b13087a3ca9c020f6bfec338335037e8f5172b4c7c8dce5", - "sha256:d29988bde28a90a00367edcf92afa1a2f7ecf43ea3ae383291b7da6d380ccc25", - "sha256:d494befe648c13c98c0f3d56d05489c839c9228a32f58e9777305deb6c2c1cee", - "sha256:df4e32badb2ccf1773e1e74020b7e3b8caf9e92f842c6be7d14888ecdefc2c6c", - "sha256:e6de6a4bdfaee382c2de2a3580b3ae76fce6105da202bbd835e5efbeae6a9c6e", - "sha256:f039c5373f7b314b151432c73219216857b19ab9cb834f0eb5d880f74fc7851c", - "sha256:f6e86ac2b45a95f75c6f744147483e0fc9697ce7dfe1726083324c236f873f8b", - "sha256:f9c690b359f503f18bf1c46a6456370e4f6f3fc4320b8774ae69c4f85ecc6c94", - "sha256:fa436abd4ac9ca71859baf5794614e6ec8fa27362f0162baedcc059048da55f7", - "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", - "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" - ], - "markers": "implementation_name == 'cpython'", - "version": "==0.12.2" - }, - "dataclassy": { - "hashes": [ - "sha256:ad6622cb91e644d13f68768558983fbc22c90a8ff7e355638485d18b9baf1198", - "sha256:bcb030d3d700cf9b1597042bbc8375b92773e6f68f65675a7071862c0ddb87f5" - ], - "markers": "python_version >= '3.6'", - "version": "==0.11.1" - }, - "decorator": { - "hashes": [ - "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", - "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" - ], - "markers": "python_version >= '3.5'", - "version": "==5.1.1" - }, - "deprecated": { - "hashes": [ - "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c", - "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.2.14" - }, - "distlib": { - "hashes": [ - "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057", - "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8" - ], - "version": "==0.3.7" - }, - "eip712": { - "hashes": [ - "sha256:3997dace7e581b66a84d106a10baac47a3f6c94095d79c7d0971ca0ede1926ad", - "sha256:c984c577358d1c7e5d4e52802bf4bd0432e965ba7326448998f95fcc1b6d5269" - ], - "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.2.1" - }, - "eth-abi": { - "hashes": [ - "sha256:60d88788d53725794cdb07c0f0bb0df2a31a6e1ad19644313fe6117ac24eeeb0", - "sha256:abd83410a5326145bf178675c276de0ed154f6dc695dcad1beafaa44d97f44ae" - ], - "markers": "python_full_version >= '3.7.2' and python_version < '4'", - "version": "==4.2.1" - }, - "eth-account": { - "hashes": [ - "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b", - "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca" - ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==0.8.0" - }, - "eth-ape": { - "hashes": [ - "sha256:78001209dfdf8c7973c649b8cbba73d3399cd649aeee4223d0b29078ae997201", - "sha256:f6c5137a10edcc2a37a8f8736882e412b2fb3b326d00d8128538e73dc031f89b" - ], - "index": "pypi", - "version": "==0.6.19" - }, - "eth-bloom": { - "hashes": [ - "sha256:73576828dff7566b9216403e0898966912f370bae5734241dd3f50ce5664a825", - "sha256:cc86ab9670577996f7fcb8445b7a164ecd211ac91d9c4c2b5a47678623419927" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.0.0" - }, - "eth-hash": { - "extras": ["pycryptodome"], - "hashes": [ - "sha256:1b5f10eca7765cc385e1430eefc5ced6e2e463bb18d1365510e2e539c1a6fe4e", - "sha256:251f62f6579a1e247561679d78df37548bd5f59908da0b159982bf8293ad32f0" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==0.5.2" - }, - "eth-keyfile": { - "hashes": [ - "sha256:471be6e5386fce7b22556b3d4bde5558dbce46d2674f00848027cb0a20abdc8c", - "sha256:609773a1ad5956944a33348413cad366ec6986c53357a806528c8f61c4961560" - ], - "version": "==0.6.1" - }, - "eth-keys": { - "hashes": [ - "sha256:7d18887483bc9b8a3fdd8e32ddcb30044b9f08fcb24a380d93b6eee3a5bb3216", - "sha256:e07915ffb91277803a28a379418bdd1fad1f390c38ad9353a0f189789a440d5d" - ], - "version": "==0.4.0" - }, - "eth-rlp": { - "hashes": [ - "sha256:e88e949a533def85c69fa94224618bbbd6de00061f4cff645c44621dab11cf33", - "sha256:f3263b548df718855d9a8dbd754473f383c0efc82914b0b849572ce3e06e71a6" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==0.3.0" - }, - "eth-tester": { - "extras": ["py-evm"], - "hashes": [ - "sha256:0e4367d99ae242efdb8c1d18ed99d1ff3f03149abb0a4c2427bc6d333ebef13b", - "sha256:b9cbc93d0b17a6e8acbb52294dad214ee223cf88209fa5be66ead353937d274c" - ], - "version": "==0.9.1b1" - }, - "eth-typing": { - "hashes": [ - "sha256:347d50713dd58ab50063b228d8271624ab2de3071bfa32d467b05f0ea31ab4c5", - "sha256:7f49610469811ee97ac43eaf6baa294778ce74042d41e61ecf22e5ebe385590f" - ], - "markers": "python_full_version >= '3.7.2' and python_version < '4'", - "version": "==3.4.0" - }, - "eth-utils": { - "hashes": [ - "sha256:60fc999c1b4ae011ab600b01a3eb5375156f3bc46e7cd1a83ca9e6e14bb9b13c", - "sha256:f79a95f86dd991344697c763db40271dbe43fbbcd5776f49b0c4fb7b645ee1c4" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.2.1" - }, - "ethpm-types": { - "hashes": [ - "sha256:4d8e7aaf69f605055f0c3681eaa03bab2dbc201a72d2493ef41db9aa3fcaa1ff", - "sha256:edc64fec898349338a83d36120452467c6e64399ed0541524bbcadb736035756" - ], - "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.5.6" - }, - "evm-trace": { - "hashes": [ - "sha256:0bc0cee185807b8e950d3d3009e5e8680e252054e11611694d632416c8b9d96a", - "sha256:34fbdfdef480066602d8dd8334fd72c6c7dab3d272c1371b7842bc2199918124" - ], - "markers": "python_version >= '3.8' and python_version < '4'", - "version": "==0.1.0a24" - }, - "exceptiongroup": { - "hashes": [ - "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", - "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" - ], - "markers": "python_version < '3.11'", - "version": "==1.1.3" - }, - "executing": { - "hashes": [ - "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc", - "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107" - ], - "version": "==1.2.0" - }, - "filelock": { - "hashes": [ - "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4", - "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd" - ], - "markers": "python_version >= '3.8'", - "version": "==3.12.4" - }, - "flake8": { - "hashes": [ - "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23", - "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5" - ], - "index": "pypi", - "version": "==6.1.0" - }, - "frozenlist": { - "hashes": [ - "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6", - "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01", - "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251", - "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9", - "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b", - "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87", - "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf", - "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f", - "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0", - "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2", - "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b", - "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc", - "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c", - "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467", - "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9", - "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1", - "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a", - "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79", - "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167", - "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300", - "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf", - "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea", - "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2", - "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab", - "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3", - "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb", - "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087", - "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc", - "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8", - "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62", - "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f", - "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326", - "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c", - "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431", - "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963", - "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7", - "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef", - "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3", - "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956", - "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781", - "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472", - "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc", - "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839", - "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672", - "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3", - "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503", - "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d", - "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8", - "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b", - "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc", - "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f", - "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559", - "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b", - "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95", - "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb", - "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963", - "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919", - "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f", - "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3", - "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1", - "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e" - ], - "markers": "python_version >= '3.8'", - "version": "==1.4.0" - }, - "hexbytes": { - "hashes": [ - "sha256:383595ad75026cf00abd570f44b368c6cdac0c6becfae5c39ff88829877f8a59", - "sha256:a3fe35c6831ee8fafd048c4c086b986075fc14fd46258fa24ecb8d65745f9a9d" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==0.3.1" - }, - "identify": { - "hashes": [ - "sha256:24437fbf6f4d3fe6efd0eb9d67e24dd9106db99af5ceb27996a5f7895f24bf1b", - "sha256:d43d52b86b15918c137e3a74fff5224f60385cd0e9c38e99d07c257f02f151a5" - ], - "markers": "python_version >= '3.8'", - "version": "==2.5.29" - }, - "idna": { - "hashes": [ - "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", - "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" - ], - "markers": "python_version >= '3.5'", - "version": "==3.4" - }, - "ijson": { - "hashes": [ - "sha256:06f9707da06a19b01013f8c65bf67db523662a9b4a4ff027e946e66c261f17f0", - "sha256:0974444c1f416e19de1e9f567a4560890095e71e81623c509feff642114c1e53", - "sha256:0a4ae076bf97b0430e4e16c9cb635a6b773904aec45ed8dcbc9b17211b8569ba", - "sha256:0b9d1141cfd1e6d6643aa0b4876730d0d28371815ce846d2e4e84a2d4f471cf3", - "sha256:0e0243d166d11a2a47c17c7e885debf3b19ed136be2af1f5d1c34212850236ac", - "sha256:10294e9bf89cb713da05bc4790bdff616610432db561964827074898e174f917", - "sha256:1844c5b57da21466f255a0aeddf89049e730d7f3dfc4d750f0e65c36e6a61a7c", - "sha256:211124cff9d9d139dd0dfced356f1472860352c055d2481459038b8205d7d742", - "sha256:2a80c0bb1053055d1599e44dc1396f713e8b3407000e6390add72d49633ff3bb", - "sha256:2cc04fc0a22bb945cd179f614845c8b5106c0b3939ee0d84ce67c7a61ac1a936", - "sha256:2ec3e5ff2515f1c40ef6a94983158e172f004cd643b9e4b5302017139b6c96e4", - "sha256:35194e0b8a2bda12b4096e2e792efa5d4801a0abb950c48ade351d479cd22ba5", - "sha256:396338a655fb9af4ac59dd09c189885b51fa0eefc84d35408662031023c110d1", - "sha256:39f551a6fbeed4433c85269c7c8778e2aaea2501d7ebcb65b38f556030642c17", - "sha256:3b14d322fec0de7af16f3ef920bf282f0dd747200b69e0b9628117f381b7775b", - "sha256:3c0d526ccb335c3c13063c273637d8611f32970603dfb182177b232d01f14c23", - "sha256:3dcc33ee56f92a77f48776014ddb47af67c33dda361e84371153c4f1ed4434e1", - "sha256:4252e48c95cd8ceefc2caade310559ab61c37d82dfa045928ed05328eb5b5f65", - "sha256:455d7d3b7a6aacfb8ab1ebcaf697eedf5be66e044eac32508fccdc633d995f0e", - "sha256:46bafb1b9959872a1f946f8dd9c6f1a30a970fc05b7bfae8579da3f1f988e598", - "sha256:4a3a6a2fbbe7550ffe52d151cf76065e6b89cfb3e9d0463e49a7e322a25d0426", - "sha256:4b2ec8c2a3f1742cbd5f36b65e192028e541b5fd8c7fd97c1fc0ca6c427c704a", - "sha256:4fc35d569eff3afa76bfecf533f818ecb9390105be257f3f83c03204661ace70", - "sha256:545a30b3659df2a3481593d30d60491d1594bc8005f99600e1bba647bb44cbb5", - "sha256:644f4f03349ff2731fd515afd1c91b9e439e90c9f8c28292251834154edbffca", - "sha256:674e585361c702fad050ab4c153fd168dc30f5980ef42b64400bc84d194e662d", - "sha256:6a4db2f7fb9acfb855c9ae1aae602e4648dd1f88804a0d5cfb78c3639bcf156c", - "sha256:6bd3e7e91d031f1e8cea7ce53f704ab74e61e505e8072467e092172422728b22", - "sha256:6c32c18a934c1dc8917455b0ce478fd7a26c50c364bd52c5a4fb0fc6bb516af7", - "sha256:6f662dc44362a53af3084d3765bb01cd7b4734d1f484a6095cad4cb0cbfe5374", - "sha256:713a919e0220ac44dab12b5fed74f9130f3480e55e90f9d80f58de129ea24f83", - "sha256:7596b42f38c3dcf9d434dddd50f46aeb28e96f891444c2b4b1266304a19a2c09", - "sha256:7851a341429b12d4527ca507097c959659baf5106c7074d15c17c387719ffbcd", - "sha256:7b8064a85ec1b0beda7dd028e887f7112670d574db606f68006c72dd0bb0e0e2", - "sha256:7ce4c70c23521179d6da842bb9bc2e36bb9fad1e0187e35423ff0f282890c9ca", - "sha256:7dc357da4b4ebd8903e77dbcc3ce0555ee29ebe0747c3c7f56adda423df8ec89", - "sha256:81815b4184b85ce124bfc4c446d5f5e5e643fc119771c5916f035220ada29974", - "sha256:85afdb3f3a5d0011584d4fa8e6dccc5936be51c27e84cd2882fe904ca3bd04c5", - "sha256:86b3c91fdcb8ffb30556c9669930f02b7642de58ca2987845b04f0d7fe46d9a8", - "sha256:904f77dd3d87736ff668884fe5197a184748eb0c3e302ded61706501d0327465", - "sha256:916acdc5e504f8b66c3e287ada5d4b39a3275fc1f2013c4b05d1ab9933671a6c", - "sha256:923131f5153c70936e8bd2dd9dcfcff43c67a3d1c789e9c96724747423c173eb", - "sha256:92dc4d48e9f6a271292d6079e9fcdce33c83d1acf11e6e12696fb05c5889fe74", - "sha256:96190d59f015b5a2af388a98446e411f58ecc6a93934e036daa75f75d02386a0", - "sha256:9680e37a10fedb3eab24a4a7e749d8a73f26f1a4c901430e7aa81b5da15f7307", - "sha256:98c6799925a5d1988da4cd68879b8eeab52c6e029acc45e03abb7921a4715c4b", - "sha256:9c2a12dcdb6fa28f333bf10b3a0f80ec70bc45280d8435be7e19696fab2bc706", - "sha256:9e0a27db6454edd6013d40a956d008361aac5bff375a9c04ab11fc8c214250b5", - "sha256:a4d7fe3629de3ecb088bff6dfe25f77be3e8261ed53d5e244717e266f8544305", - "sha256:a729b0c8fb935481afe3cf7e0dadd0da3a69cc7f145dbab8502e2f1e01d85a7c", - "sha256:ab4db9fee0138b60e31b3c02fff8a4c28d7b152040553b6a91b60354aebd4b02", - "sha256:b49fd5fe1cd9c1c8caf6c59f82b08117dd6bea2ec45b641594e25948f48f4169", - "sha256:b4eb2304573c9fdf448d3fa4a4fdcb727b93002b5c5c56c14a5ffbbc39f64ae4", - "sha256:ba33c764afa9ecef62801ba7ac0319268a7526f50f7601370d9f8f04e77fc02b", - "sha256:bcc51c84bb220ac330122468fe526a7777faa6464e3b04c15b476761beea424f", - "sha256:be8495f7c13fa1f622a2c6b64e79ac63965b89caf664cc4e701c335c652d15f2", - "sha256:c1a4b8eb69b6d7b4e94170aa991efad75ba156b05f0de2a6cd84f991def12ff9", - "sha256:c63f3d57dbbac56cead05b12b81e8e1e259f14ce7f233a8cbe7fa0996733b628", - "sha256:ccd6be56335cbb845f3d3021b1766299c056c70c4c9165fb2fbe2d62258bae3f", - "sha256:cfced0a6ec85916eb8c8e22415b7267ae118eaff2a860c42d2cc1261711d0d31", - "sha256:d052417fd7ce2221114f8d3b58f05a83c1a2b6b99cafe0b86ac9ed5e2fc889df", - "sha256:d1053fb5f0b010ee76ca515e6af36b50d26c1728ad46be12f1f147a835341083", - "sha256:d31e0d771d82def80cd4663a66de277c3b44ba82cd48f630526b52f74663c639", - "sha256:d34e049992d8a46922f96483e96b32ac4c9cffd01a5c33a928e70a283710cd58", - "sha256:d6ea7c7e3ec44742e867c72fd750c6a1e35b112f88a917615332c4476e718d40", - "sha256:db2d6341f9cb538253e7fe23311d59252f124f47165221d3c06a7ed667ecd595", - "sha256:db3bf1b42191b5cc9b6441552fdcb3b583594cb6b19e90d1578b7cbcf80d0fae", - "sha256:e641814793a037175f7ec1b717ebb68f26d89d82cfd66f36e588f32d7e488d5f", - "sha256:e84d27d1acb60d9102728d06b9650e5b7e5cb0631bd6e3dfadba8fb6a80d6c2f", - "sha256:e9fd906f0c38e9f0bfd5365e1bed98d649f506721f76bb1a9baa5d7374f26f19", - "sha256:eaac293853f1342a8d2a45ac1f723c860f700860e7743fb97f7b76356df883a8", - "sha256:eeb286639649fb6bed37997a5e30eefcacddac79476d24128348ec890b2a0ccb", - "sha256:f05ed49f434ce396ddcf99e9fd98245328e99f991283850c309f5e3182211a79", - "sha256:f4bc87e69d1997c6a55fff5ee2af878720801ff6ab1fb3b7f94adda050651e37", - "sha256:f8d54b624629f9903005c58d9321a036c72f5c212701bbb93d1a520ecd15e370", - "sha256:fa8b98be298efbb2588f883f9953113d8a0023ab39abe77fe734b71b46b1220a", - "sha256:fbac4e9609a1086bbad075beb2ceec486a3b138604e12d2059a33ce2cba93051", - "sha256:fd12e42b9cb9c0166559a3ffa276b4f9fc9d5b4c304e5a13668642d34b48b634" - ], - "version": "==3.2.3" - }, - "importlib-metadata": { - "hashes": [ - "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", - "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" - ], - "markers": "python_version >= '3.8'", - "version": "==6.8.0" - }, - "importlib-resources": { - "hashes": [ - "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf", - "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4" - ], - "markers": "python_version < '3.9'", - "version": "==6.0.1" - }, - "iniconfig": { - "hashes": [ - "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", - "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" - ], - "markers": "python_version >= '3.7'", - "version": "==2.0.0" - }, - "ipython": { - "hashes": [ - "sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea", - "sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc" - ], - "markers": "python_version >= '3.8'", - "version": "==8.12.2" - }, - "isort": { - "hashes": [ - "sha256:0ec8b74806e80fec33e6e7ba89d35e17b3eb1c4c74316ea44cf877cc26e8b118", - "sha256:cde11e804641edbe1b6b95d56582eb541f27eebc77864c6015545944bb0e9c76" - ], - "index": "pypi", - "version": "==6.0.0b2" - }, - "jedi": { - "hashes": [ - "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4", - "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e" - ], - "markers": "python_version >= '3.6'", - "version": "==0.19.0" - }, - "jsonschema": { - "hashes": [ - "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb", - "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f" - ], - "markers": "python_version >= '3.8'", - "version": "==4.19.0" - }, - "jsonschema-specifications": { - "hashes": [ - "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1", - "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" - ], - "markers": "python_version >= '3.8'", - "version": "==2023.7.1" - }, - "lazyasd": { - "hashes": ["sha256:a3196f05cff27f952ad05767e5735fd564b4ea4e89b23f5ea1887229c3db145b"], - "version": "==0.1.4" - }, - "lru-dict": { - "hashes": [ - "sha256:00f6e8a3fc91481b40395316a14c94daa0f0a5de62e7e01a7d589f8d29224052", - "sha256:020b93870f8c7195774cbd94f033b96c14f51c57537969965c3af300331724fe", - "sha256:05fb8744f91f58479cbe07ed80ada6696ec7df21ea1740891d4107a8dd99a970", - "sha256:086ce993414f0b28530ded7e004c77dc57c5748fa6da488602aa6e7f79e6210e", - "sha256:0c316dfa3897fabaa1fe08aae89352a3b109e5f88b25529bc01e98ac029bf878", - "sha256:0facf49b053bf4926d92d8d5a46fe07eecd2af0441add0182c7432d53d6da667", - "sha256:1171ad3bff32aa8086778be4a3bdff595cc2692e78685bcce9cb06b96b22dcc2", - "sha256:1184d91cfebd5d1e659d47f17a60185bbf621635ca56dcdc46c6a1745d25df5c", - "sha256:13c56782f19d68ddf4d8db0170041192859616514c706b126d0df2ec72a11bd7", - "sha256:18ee88ada65bd2ffd483023be0fa1c0a6a051ef666d1cd89e921dcce134149f2", - "sha256:203b3e78d03d88f491fa134f85a42919020686b6e6f2d09759b2f5517260c651", - "sha256:20f5f411f7751ad9a2c02e80287cedf69ae032edd321fe696e310d32dd30a1f8", - "sha256:21b3090928c7b6cec509e755cc3ab742154b33660a9b433923bd12c37c448e3e", - "sha256:22147367b296be31cc858bf167c448af02435cac44806b228c9be8117f1bfce4", - "sha256:231d7608f029dda42f9610e5723614a35b1fff035a8060cf7d2be19f1711ace8", - "sha256:25f9e0bc2fe8f41c2711ccefd2871f8a5f50a39e6293b68c3dec576112937aad", - "sha256:287c2115a59c1c9ed0d5d8ae7671e594b1206c36ea9df2fca6b17b86c468ff99", - "sha256:291d13f85224551913a78fe695cde04cbca9dcb1d84c540167c443eb913603c9", - "sha256:312b6b2a30188586fe71358f0f33e4bac882d33f5e5019b26f084363f42f986f", - "sha256:34a3091abeb95e707f381a8b5b7dc8e4ee016316c659c49b726857b0d6d1bd7a", - "sha256:35a142a7d1a4fd5d5799cc4f8ab2fff50a598d8cee1d1c611f50722b3e27874f", - "sha256:3838e33710935da2ade1dd404a8b936d571e29268a70ff4ca5ba758abb3850df", - "sha256:5345bf50e127bd2767e9fd42393635bbc0146eac01f6baf6ef12c332d1a6a329", - "sha256:5919dd04446bc1ee8d6ecda2187deeebfff5903538ae71083e069bc678599446", - "sha256:59f3df78e94e07959f17764e7fa7ca6b54e9296953d2626a112eab08e1beb2db", - "sha256:5b172fce0a0ffc0fa6d282c14256d5a68b5db1e64719c2915e69084c4b6bf555", - "sha256:5c6acbd097b15bead4de8e83e8a1030bb4d8257723669097eac643a301a952f0", - "sha256:5d90a70c53b0566084447c3ef9374cc5a9be886e867b36f89495f211baabd322", - "sha256:604d07c7604b20b3130405d137cae61579578b0e8377daae4125098feebcb970", - "sha256:6b7a031e47421d4b7aa626b8c91c180a9f037f89e5d0a71c4bb7afcf4036c774", - "sha256:6da5b8099766c4da3bf1ed6e7d7f5eff1681aff6b5987d1258a13bd2ed54f0c9", - "sha256:712e71b64da181e1c0a2eaa76cd860265980cd15cb0e0498602b8aa35d5db9f8", - "sha256:71da89e134747e20ed5b8ad5b4ee93fc5b31022c2b71e8176e73c5a44699061b", - "sha256:756230c22257597b7557eaef7f90484c489e9ba78e5bb6ab5a5bcfb6b03cb075", - "sha256:7d3336e901acec897bcd318c42c2b93d5f1d038e67688f497045fc6bad2c0be7", - "sha256:7e51fa6a203fa91d415f3b2900e5748ec8e06ad75777c98cc3aeb3983ca416d7", - "sha256:877801a20f05c467126b55338a4e9fa30e2a141eb7b0b740794571b7d619ee11", - "sha256:87bbad3f5c3de8897b8c1263a9af73bbb6469fb90e7b57225dad89b8ef62cd8d", - "sha256:8bda3a9afd241ee0181661decaae25e5336ce513ac268ab57da737eacaa7871f", - "sha256:8dafc481d2defb381f19b22cc51837e8a42631e98e34b9e0892245cc96593deb", - "sha256:91d577a11b84387013815b1ad0bb6e604558d646003b44c92b3ddf886ad0f879", - "sha256:981ef3edc82da38d39eb60eae225b88a538d47b90cce2e5808846fd2cf64384b", - "sha256:987b73a06bcf5a95d7dc296241c6b1f9bc6cda42586948c9dabf386dc2bef1cd", - "sha256:9e4c85aa8844bdca3c8abac3b7f78da1531c74e9f8b3e4890c6e6d86a5a3f6c0", - "sha256:a3ea7571b6bf2090a85ff037e6593bbafe1a8598d5c3b4560eb56187bcccb4dc", - "sha256:a87bdc291718bbdf9ea4be12ae7af26cbf0706fa62c2ac332748e3116c5510a7", - "sha256:aaecd7085212d0aa4cd855f38b9d61803d6509731138bf798a9594745953245b", - "sha256:ae301c282a499dc1968dd633cfef8771dd84228ae9d40002a3ea990e4ff0c469", - "sha256:afdadd73304c9befaed02eb42f5f09fdc16288de0a08b32b8080f0f0f6350aa6", - "sha256:b20b7c9beb481e92e07368ebfaa363ed7ef61e65ffe6e0edbdbaceb33e134124", - "sha256:b30122e098c80e36d0117810d46459a46313421ce3298709170b687dc1240b02", - "sha256:b55753ee23028ba8644fd22e50de7b8f85fa60b562a0fafaad788701d6131ff8", - "sha256:b5ccfd2291c93746a286c87c3f895165b697399969d24c54804ec3ec559d4e43", - "sha256:b6613daa851745dd22b860651de930275be9d3e9373283a2164992abacb75b62", - "sha256:b710f0f4d7ec4f9fa89dfde7002f80bcd77de8024017e70706b0911ea086e2ef", - "sha256:b9ec7a4a0d6b8297102aa56758434fb1fca276a82ed7362e37817407185c3abb", - "sha256:bb12f19cdf9c4f2d9aa259562e19b188ff34afab28dd9509ff32a3f1c2c29326", - "sha256:bd2cd1b998ea4c8c1dad829fc4fa88aeed4dee555b5e03c132fc618e6123f168", - "sha256:c4da599af36618881748b5db457d937955bb2b4800db891647d46767d636c408", - "sha256:c53b12b89bd7a6c79f0536ff0d0a84fdf4ab5f6252d94b24b9b753bd9ada2ddf", - "sha256:c9617583173a29048e11397f165501edc5ae223504a404b2532a212a71ecc9ed", - "sha256:cd46c94966f631a81ffe33eee928db58e9fbee15baba5923d284aeadc0e0fa76", - "sha256:cd6806313606559e6c7adfa0dbeb30fc5ab625f00958c3d93f84831e7a32b71e", - "sha256:d0dd4cd58220351233002f910e35cc01d30337696b55c6578f71318b137770f9", - "sha256:d0f7ec902a0097ac39f1922c89be9eaccf00eb87751e28915320b4f72912d057", - "sha256:d5bb41bc74b321789803d45b124fc2145c1b3353b4ad43296d9d1d242574969b", - "sha256:d7ab0c10c4fa99dc9e26b04e6b62ac32d2bcaea3aad9b81ec8ce9a7aa32b7b1b", - "sha256:de24b47159e07833aeab517d9cb1c3c5c2d6445cc378b1c2f1d8d15fb4841d63", - "sha256:de906e5486b5c053d15b7731583c25e3c9147c288ac8152a6d1f9bccdec72641", - "sha256:df25a426446197488a6702954dcc1de511deee20c9db730499a2aa83fddf0df1", - "sha256:e25b2e90a032dc248213af7f3f3e975e1934b204f3b16aeeaeaff27a3b65e128", - "sha256:e707d93bae8f0a14e6df1ae8b0f076532b35f00e691995f33132d806a88e5c18", - "sha256:ea2ac3f7a7a2f32f194c84d82a034e66780057fd908b421becd2f173504d040e", - "sha256:ead83ac59a29d6439ddff46e205ce32f8b7f71a6bd8062347f77e232825e3d0a", - "sha256:edad398d5d402c43d2adada390dd83c74e46e020945ff4df801166047013617e", - "sha256:f010cfad3ab10676e44dc72a813c968cd586f37b466d27cde73d1f7f1ba158c2", - "sha256:f404dcc8172da1f28da9b1f0087009578e608a4899b96d244925c4f463201f2a", - "sha256:f54908bf91280a9b8fa6a8c8f3c2f65850ce6acae2852bbe292391628ebca42f", - "sha256:f5d5a5f976b39af73324f2b793862859902ccb9542621856d51a5993064f25e4", - "sha256:f9484016e6765bd295708cccc9def49f708ce07ac003808f69efa386633affb9", - "sha256:fbf36c5a220a85187cacc1fcb7dd87070e04b5fc28df7a43f6842f7c8224a388", - "sha256:fc42882b554a86e564e0b662da47b8a4b32fa966920bd165e27bb8079a323bc1" - ], - "version": "==1.2.0" - }, - "matplotlib-inline": { - "hashes": [ - "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", - "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" - ], - "markers": "python_version >= '3.5'", - "version": "==0.1.6" - }, - "mccabe": { - "hashes": [ - "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", - "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e" - ], - "markers": "python_version >= '3.6'", - "version": "==0.7.0" - }, - "morphys": { - "hashes": ["sha256:76d6dbaa4d65f597e59d332c81da786d83e4669387b9b2a750cfec74e7beec20"], - "version": "==1.0" - }, - "msgspec": { - "hashes": [ - "sha256:1535855b0db1bee4e5c79384010861de2a23391b45095785e84ec9489abc56cd", - "sha256:23e65efaef864bf66a4ddfae9c2200c40ce1a50411f454de1757f3651e5762cd", - "sha256:25f7e3adaf1ca5d80455057576785069475b1d941eb877dbd0ae738cc5d1fefa", - "sha256:2ad4f4704045a0fb1b5226769d9cdc00a4a69adec2e6770064f3db73bb91bbf9", - "sha256:35420ae8afaa90498733541c0d8b2a73c70548a8a4d86da11201ed6df557e98f", - "sha256:358c2b908f1ed63419ccc5f185150c0caa3fc49599f4582504637cbfd5ff6242", - "sha256:3996bf1fc252658a7e028a0c263d28ac4dc48476e35f6fd8ebaf461a39459825", - "sha256:3bfc55d5ca60b3aa2c2287191aa9e943c54eb0aef16d4babb92fddcc047093b1", - "sha256:3f71c33efda990ecddc878ea2bb37f22e941d4264ded83e1b2309f86d335cde7", - "sha256:4c1ee8b9667fde3b5d7e0e0b555a8b70e2fa7bf2e02e9e8673af262c82c7b691", - "sha256:595f14f628825d9d79eeea6e08514144a3d516eb014f0c6191f91899c83a6836", - "sha256:70fa7f008008e2c823ecc1a143258bb2820ac76010cf6003091fa3832b6334c9", - "sha256:78a593bc0db95416d633b28cff00af0465f04590d53ff1a80a33d7e2728820ad", - "sha256:7b065995f3a41e4c8274a86e1ee84ac432969918373c777de239ef14f9537d80", - "sha256:80e57102469ee0d2186c72d42fa9460981ccd4252bdb997bf04ef2af0818984f", - "sha256:84cc7932f78aeec6ef014cca4bb4ecea8469bc05f13c9eacdfa27baa785e54b9", - "sha256:84fcf74b6371494aa536bf438ef96b08ce8f6e40483a01ed305535a40113136b", - "sha256:a75c4efa7565048f81e709a366e14b9dc10752b3fb5ea1f3c8de5abfca3db3c2", - "sha256:abcb92ffbca77bcfbedd5b29b68629628948982aafb994658e7abfad6e15913c", - "sha256:ade3959577bff46c7d9476962d2d7aa086b2820f3da03ee000e9be4958404829", - "sha256:b56cc7b9956daefb309447bbbb2581c84e5d5e3b89d573b1d5a25647522d2e43", - "sha256:b90a44550f19ee0b8c37dbca75f96473299275001af2a00273d736b7347ead6d", - "sha256:b9b3ed82f71816cddf0a9cdaae30a1d1addf8fe56ec09e7368db93ce43b29a81", - "sha256:baaba2411003f2e7a4328b5a58eba9efeb4c5e6a27e8ffd2adaccdc8feb0a805", - "sha256:c79ac853409b0000727f4c3e5fb32fe38122ad94b9e074f992fa9ea7f00eb498", - "sha256:ccaddb764b5abe457c0eded4a252f5fbeb8b04a946b46a06a7e6ca299c35dcb1", - "sha256:d127bf90f29f1211520f1baa897b10f2a9c05b8648ce7dc89dfc9ca45599be53", - "sha256:e03ff009f3a2e1fe883703f98098d12aea6b30934707b404fd994e9ea1c1bfa7", - "sha256:eb80befd343f3b378c8abad0367154703c74bde02fc62cbcf1a0e6b5fa779459" - ], - "markers": "python_version >= '3.8'", - "version": "==0.18.2" - }, - "multidict": { - "hashes": [ - "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9", - "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8", - "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03", - "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710", - "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161", - "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664", - "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569", - "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067", - "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313", - "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706", - "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2", - "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636", - "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49", - "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93", - "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603", - "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0", - "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60", - "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4", - "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e", - "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1", - "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60", - "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951", - "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc", - "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe", - "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95", - "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d", - "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8", - "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed", - "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2", - "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775", - "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87", - "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c", - "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2", - "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98", - "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3", - "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe", - "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78", - "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660", - "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176", - "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e", - "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988", - "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c", - "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c", - "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0", - "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449", - "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f", - "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde", - "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5", - "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d", - "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac", - "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a", - "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9", - "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca", - "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11", - "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35", - "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063", - "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b", - "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982", - "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258", - "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1", - "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52", - "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480", - "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7", - "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461", - "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d", - "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc", - "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779", - "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a", - "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547", - "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0", - "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171", - "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf", - "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d", - "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba" - ], - "markers": "python_version >= '3.7'", - "version": "==6.0.4" - }, - "mypy-extensions": { - "hashes": [ - "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", - "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" - ], - "markers": "python_version >= '3.5'", - "version": "==1.0.0" - }, - "nodeenv": { - "hashes": [ - "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2", - "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", - "version": "==1.8.0" - }, - "nucypher-core": { - "hashes": [ - "sha256:09c754a7450d2ba3a46bf2c73ac35a0e8fe73c0c2fdbc2dab47ebea47d90b909", - "sha256:0b3d44fdc4acfd31cf6e46fdf8acb9ea278823b2d72336f5c9e7732b37ac6f30", - "sha256:0b8449ab2524628b1d4c095fc4ff5e46c699f0acd62a099ba6d411e72704c94c", - "sha256:0fe7eab174fc658f8391f1834aa193fb10acf1a55a1c613d0f09493e8d0d9f17", - "sha256:1f70477f41bc10e19f6280258530dabecb453b1230f641601ea12f5e4c9cac67", - "sha256:1fc6f39de2e90e36695c2674a170047dc9abfc083e9177b3304bd74ec21727d2", - "sha256:57c1c6d96570221ec8c30f8b00d89496f9d68cdf11b0574bdae7defd3cc1c975", - "sha256:74fcf712399aeb0d242c1d332a7f7a34d4ff70d9262c0537eb769ff973c2170e", - "sha256:75d5b86ab0fe51b00036cab25d6d4699fa3171aa8a8418d4027fdc2388f84c43", - "sha256:a3a69e37fdf6a42b5d0be58b28d70e2fb614320d032a2fe99aa3aa29643f9494", - "sha256:b9c82bd7593d2deac41c8f7b2833193eb6e6cab0208261313121646fcd275629", - "sha256:de48dae67ff01ffe020e8887432daa8a1072797559e11cb34d56b3012b6f4520", - "sha256:e22038db52190d88b6dd8cbcd76980d2f2d62a630baac46677f9ad6743b3b689", - "sha256:f2d44c28e4724f1c5ff6e566bbe1ab731bd57458bd219072aa146bd43a4e78d6", - "sha256:fadd7ac4009d74b2bdf2b678015ff6e315827517de21d0684fd31b9259a08fbc", - "sha256:fcb97049f8719d30fd155fe3f862410cb5edb3afd76ff0ae1ff60d76d0b5a3f8" - ], - "index": "pypi", - "version": "==0.13.0" - }, - "numpy": { - "hashes": [ - "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f", - "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61", - "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7", - "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400", - "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef", - "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2", - "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d", - "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc", - "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835", - "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706", - "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5", - "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4", - "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6", - "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463", - "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a", - "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f", - "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e", - "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e", - "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694", - "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8", - "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64", - "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d", - "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc", - "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254", - "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2", - "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1", - "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810", - "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9" - ], - "markers": "python_version < '3.10'", - "version": "==1.24.4" - }, - "packaging": { - "hashes": [ - "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", - "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" - ], - "markers": "python_version >= '3.7'", - "version": "==23.1" - }, - "pandas": { - "hashes": [ - "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813", - "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792", - "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406", - "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373", - "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328", - "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996", - "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf", - "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6", - "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7", - "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc", - "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1", - "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23", - "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a", - "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51", - "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572", - "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31", - "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5", - "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a", - "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003", - "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d", - "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354", - "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee", - "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa", - "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0", - "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9", - "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae", - "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc" - ], - "markers": "python_version >= '3.8'", - "version": "==1.5.3" - }, - "parsimonious": { - "hashes": ["sha256:b2ad1ae63a2f65bd78f5e0a8ac510a98f3607a43f1db2a8d46636a5d9e4a30c1"], - "version": "==0.9.0" - }, - "parso": { - "hashes": [ - "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", - "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" - ], - "markers": "python_version >= '3.6'", - "version": "==0.8.3" - }, - "pathspec": { - "hashes": [ - "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20", - "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3" - ], - "markers": "python_version >= '3.7'", - "version": "==0.11.2" - }, - "pexpect": { - "hashes": [ - "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", - "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" - ], - "markers": "sys_platform != 'win32'", - "version": "==4.8.0" - }, - "pickleshare": { - "hashes": [ - "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", - "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" - ], - "version": "==0.7.5" - }, - "pkgutil-resolve-name": { - "hashes": [ - "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", - "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" - ], - "markers": "python_version < '3.9'", - "version": "==1.3.10" - }, - "platformdirs": { - "hashes": [ - "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d", - "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d" - ], - "markers": "python_version >= '3.7'", - "version": "==3.10.0" - }, - "pluggy": { - "hashes": [ - "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12", - "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7" - ], - "markers": "python_version >= '3.8'", - "version": "==1.3.0" - }, - "pre-commit": { - "hashes": [ - "sha256:6bbd5129a64cad4c0dfaeeb12cd8f7ea7e15b77028d985341478c8af3c759522", - "sha256:96d529a951f8b677f730a7212442027e8ba53f9b04d217c4c67dc56c393ad945" - ], - "index": "pypi", - "version": "==3.4.0" - }, - "prompt-toolkit": { - "hashes": [ - "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", - "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.0.39" - }, - "protobuf": { - "hashes": [ - "sha256:067f750169bc644da2e1ef18c785e85071b7c296f14ac53e0900e605da588719", - "sha256:12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d", - "sha256:1b182c7181a2891e8f7f3a1b5242e4ec54d1f42582485a896e4de81aa17540c2", - "sha256:20651f11b6adc70c0f29efbe8f4a94a74caf61b6200472a9aea6e19898f9fcf4", - "sha256:2da777d34b4f4f7613cdf85c70eb9a90b1fbef9d36ae4a0ccfe014b0b07906f1", - "sha256:3d42e9e4796a811478c783ef63dc85b5a104b44aaaca85d4864d5b886e4b05e3", - "sha256:6e514e8af0045be2b56e56ae1bb14f43ce7ffa0f68b1c793670ccbe2c4fc7d2b", - "sha256:b0271a701e6782880d65a308ba42bc43874dabd1a0a0f41f72d2dac3b57f8e76", - "sha256:ba53c2f04798a326774f0e53b9c759eaef4f6a568ea7072ec6629851c8435959", - "sha256:e29d79c913f17a60cf17c626f1041e5288e9885c8579832580209de8b75f2a52", - "sha256:f631bb982c5478e0c1c70eab383af74a84be66945ebf5dd6b06fc90079668d0b", - "sha256:f6ccbcf027761a2978c1406070c3788f6de4a4b2cc20800cc03d52df716ad675", - "sha256:f6f8dc65625dadaad0c8545319c2e2f0424fede988368893ca3844261342c11a" - ], - "markers": "python_version >= '3.7'", - "version": "==4.24.3" - }, - "ptyprocess": { - "hashes": [ - "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", - "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" - ], - "version": "==0.7.0" - }, - "pure-eval": { - "hashes": [ - "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", - "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" - ], - "version": "==0.2.2" - }, - "py-cid": { - "hashes": [ - "sha256:22f432cc6fb68d12a9c35dbdc92c95484fc49e31dfcb9e0efb0082233c5394e3", - "sha256:7c48a6ee0bc50fd114d4b24849cd689a31d3ad5bdf8fa073bf68f846fd58c5da" - ], - "version": "==0.3.0" - }, - "py-ecc": { - "hashes": [ - "sha256:3fc8a79e38975e05dc443d25783fd69212a1ca854cc0efef071301a8f7d6ce1d", - "sha256:54e8aa4c30374fa62d582c599a99f352c153f2971352171318bd6910a643be0b" - ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==6.0.0" - }, - "py-evm": { - "hashes": [ - "sha256:1bf7b293faa70c03727358ae3e5cb0abf7282391461d9b52b82decd6ed18c2f7", - "sha256:d40b6ac950485111dc7ad7bd29e3f61e00d5f81dc919e8c2b3afca30f228dc05" - ], - "version": "==0.7.0a4" - }, - "py-geth": { - "hashes": [ - "sha256:1eb9c1d05b51133a6961889ec508cdcb19d24d32888704c4e034cae86a3accad", - "sha256:f3563e2de8e78599cb9c69ee5bf3bded858ac6cf59891a04177f2353c425fdb7" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==3.13.0" - }, - "py-multibase": { - "hashes": [ - "sha256:2677c1fafcc0ae15ddb9c7f444c5becc2530b3889124fd4fa2959ddfefb8c15b", - "sha256:d28a20efcbb61eec28f55827a0bf329c7cea80fffd933aecaea6ae8431267fe4" - ], - "version": "==1.0.3" - }, - "py-multicodec": { - "hashes": [ - "sha256:55b6bb53088a63e56c434cb11b29795e8805652bac43d50a8f2a9bcf5ca84e1f", - "sha256:83021ffe8c0e272d19b5b86bc5b39efa67c8e9f4735ce6cafdbc1ace767ec647" - ], - "version": "==0.2.1" - }, - "py-multihash": { - "hashes": [ - "sha256:a0602c99093587dfbf1634e2e8c7726de39374b0d68587a36093b4c237af6969", - "sha256:f0ade4de820afdc4b4aaa40464ec86c9da5cae3a4578cda2daab4b0eb7e5b18d" - ], - "version": "==0.2.3" - }, - "py-solc-x": { - "hashes": [ - "sha256:8f5caa4f54e227fc301e2e4c8aa868e869c2bc0c6636aa9e8115f8414bb891f9", - "sha256:d8b0bd2b04f47cff6e92181739d9e94e41b2d62f056900761c797fa5babc76b6" - ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==1.1.1" - }, - "pycodestyle": { - "hashes": [ - "sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0", - "sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8" - ], - "markers": "python_version >= '3.8'", - "version": "==2.11.0" - }, - "pycparser": { - "hashes": [ - "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", - "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" - ], - "version": "==2.21" - }, - "pycryptodome": { - "hashes": [ - "sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6", - "sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810", - "sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a", - "sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db", - "sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33", - "sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5", - "sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551", - "sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa", - "sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4", - "sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405", - "sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc", - "sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997", - "sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb", - "sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e", - "sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9", - "sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f", - "sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e", - "sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34", - "sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631", - "sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c", - "sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde", - "sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7", - "sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa", - "sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0", - "sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea", - "sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e", - "sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400", - "sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270", - "sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f", - "sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1", - "sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434", - "sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49" - ], - "version": "==3.19.0" - }, - "pydantic": { - "hashes": [ - "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303", - "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe", - "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47", - "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494", - "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33", - "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86", - "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d", - "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c", - "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a", - "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565", - "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb", - "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62", - "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62", - "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0", - "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523", - "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d", - "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405", - "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f", - "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b", - "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718", - "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed", - "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb", - "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5", - "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc", - "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942", - "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe", - "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246", - "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350", - "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303", - "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09", - "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33", - "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8", - "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a", - "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1", - "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6", - "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d" - ], - "markers": "python_version >= '3.7'", - "version": "==1.10.12" - }, - "pyethash": { - "hashes": ["sha256:ff66319ce26b9d77df1f610942634dac9742e216f2c27b051c0a2c2dec9c2818"], - "version": "==0.1.27" - }, - "pyflakes": { - "hashes": [ - "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774", - "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc" - ], - "markers": "python_version >= '3.8'", - "version": "==3.1.0" - }, - "pygithub": { - "hashes": [ - "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9", - "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217" - ], - "markers": "python_version >= '3.7'", - "version": "==1.59.1" - }, - "pygments": { - "hashes": [ - "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", - "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" - ], - "markers": "python_version >= '3.7'", - "version": "==2.16.1" - }, - "pyjwt": { - "extras": ["crypto"], - "hashes": [ - "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de", - "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320" - ], - "markers": "python_version >= '3.7'", - "version": "==2.8.0" - }, - "pynacl": { - "hashes": [ - "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", - "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", - "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", - "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", - "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", - "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", - "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", - "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", - "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", - "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543" - ], - "markers": "python_version >= '3.6'", - "version": "==1.5.0" - }, - "pyproject-api": { - "hashes": [ - "sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538", - "sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675" - ], - "markers": "python_version >= '3.8'", - "version": "==1.6.1" - }, - "pysha3": { - "hashes": [ - "sha256:0060a66be16665d90c432f55a0ba1f6480590cfb7d2ad389e688a399183474f0", - "sha256:11a2ba7a2e1d9669d0052fc8fb30f5661caed5512586ecbeeaf6bf9478ab5c48", - "sha256:386998ee83e313b6911327174e088021f9f2061cbfa1651b97629b761e9ef5c4", - "sha256:41be70b06c8775a9e4d4eeb52f2f6a3f356f17539a54eac61f43a29e42fd453d", - "sha256:4416f16b0f1605c25f627966f76873e432971824778b369bd9ce1bb63d6566d9", - "sha256:571a246308a7b63f15f5aa9651f99cf30f2a6acba18eddf28f1510935968b603", - "sha256:59111c08b8f34495575d12e5f2ce3bafb98bea470bc81e70c8b6df99aef0dd2f", - "sha256:5ec8da7c5c70a53b5fa99094af3ba8d343955b212bc346a0d25f6ff75853999f", - "sha256:684cb01d87ed6ff466c135f1c83e7e4042d0fc668fa20619f581e6add1d38d77", - "sha256:68c3a60a39f9179b263d29e221c1bd6e01353178b14323c39cc70593c30f21c5", - "sha256:6e6a84efb7856f5d760ee55cd2b446972cb7b835676065f6c4f694913ea8f8d9", - "sha256:827b308dc025efe9b6b7bae36c2e09ed0118a81f792d888548188e97b9bf9a3d", - "sha256:93abd775dac570cb9951c4e423bcb2bc6303a9d1dc0dc2b7afa2dd401d195b24", - "sha256:9c778fa8b161dc9348dc5cc361e94d54aa5ff18413788f4641f6600d4893a608", - "sha256:9fdd28884c5d0b4edfed269b12badfa07f1c89dbc5c9c66dd279833894a9896b", - "sha256:c7c2adcc43836223680ebdf91f1d3373543dc32747c182c8ca2e02d1b69ce030", - "sha256:c93a2676e6588abcfaecb73eb14485c81c63b94fca2000a811a7b4fb5937b8e8", - "sha256:cd5c961b603bd2e6c2b5ef9976f3238a561c58569945d4165efb9b9383b050ef", - "sha256:f9046d59b3e72aa84f6dae83a040bd1184ebd7fef4e822d38186a8158c89e3cf", - "sha256:fd7e66999060d079e9c0e8893e78d8017dad4f59721f6fe0be6307cd32127a07", - "sha256:fe988e73f2ce6d947220624f04d467faf05f1bbdbc64b0a201296bb3af92739e" - ], - "version": "==1.0.2" - }, - "pytest": { - "hashes": [ - "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002", - "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069" - ], - "markers": "python_version >= '3.7'", - "version": "==7.4.2" - }, - "python-baseconv": { - "hashes": ["sha256:0539f8bd0464013b05ad62e0a1673f0ac9086c76b43ebf9f833053527cd9931b"], - "version": "==1.2.2" - }, - "python-dateutil": { - "hashes": [ - "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", - "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==2.8.2" - }, - "pytz": { - "hashes": [ - "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b", - "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7" - ], - "version": "==2023.3.post1" - }, - "pyunormalize": { - "hashes": ["sha256:e63fdba0d85ea04579dde2fc29a072dba773dcae600b04faf6cc90714c8b1302"], - "markers": "python_version >= '3.6'", - "version": "==15.0.0" - }, - "pyyaml": { - "hashes": [ - "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", - "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", - "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", - "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", - "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", - "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", - "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", - "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", - "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", - "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", - "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", - "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", - "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", - "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", - "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", - "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", - "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", - "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", - "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", - "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", - "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", - "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", - "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", - "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", - "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", - "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", - "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", - "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", - "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", - "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", - "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", - "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", - "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", - "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", - "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", - "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", - "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", - "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", - "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", - "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", - "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", - "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", - "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", - "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", - "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", - "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", - "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", - "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", - "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", - "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" - ], - "markers": "python_version >= '3.6'", - "version": "==6.0.1" - }, - "referencing": { - "hashes": [ - "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf", - "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" - ], - "markers": "python_version >= '3.8'", - "version": "==0.30.2" - }, - "regex": { - "hashes": [ - "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf", - "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46", - "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18", - "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7", - "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7", - "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9", - "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559", - "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71", - "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280", - "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898", - "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684", - "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3", - "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9", - "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8", - "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca", - "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c", - "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c", - "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab", - "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd", - "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56", - "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586", - "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7", - "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103", - "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac", - "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177", - "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109", - "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033", - "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb", - "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61", - "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800", - "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb", - "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8", - "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570", - "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34", - "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e", - "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4", - "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb", - "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7", - "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208", - "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc", - "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb", - "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3", - "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504", - "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb", - "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57", - "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b", - "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601", - "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116", - "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8", - "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6", - "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6", - "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93", - "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09", - "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a", - "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921", - "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a", - "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495", - "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6", - "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7", - "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236", - "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235", - "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470", - "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b", - "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5", - "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61", - "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c", - "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db", - "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be", - "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96", - "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a", - "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2", - "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63", - "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef", - "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739", - "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e", - "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217", - "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90", - "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4", - "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8", - "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3", - "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357", - "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4", - "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b", - "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882", - "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a", - "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675", - "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf", - "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e" - ], - "markers": "python_version >= '3.6'", - "version": "==2023.8.8" - }, - "requests": { - "hashes": [ - "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", - "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" - ], - "markers": "python_version >= '3.7'", - "version": "==2.31.0" - }, - "rich": { - "hashes": [ - "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e", - "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0" - ], - "markers": "python_full_version >= '3.6.3' and python_full_version < '4.0.0'", - "version": "==12.6.0" - }, - "rlp": { - "hashes": [ - "sha256:63b0465d2948cd9f01de449d7adfb92d207c1aef3982f20310f8009be4a507e8", - "sha256:d2a963225b3f26795c5b52310e0871df9824af56823d739511583ef459895a7d" - ], - "version": "==3.0.0" - }, - "rpds-py": { - "hashes": [ - "sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9", - "sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637", - "sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5", - "sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9", - "sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c", - "sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957", - "sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6", - "sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154", - "sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8", - "sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569", - "sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2", - "sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c", - "sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453", - "sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1", - "sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7", - "sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b", - "sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9", - "sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496", - "sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3", - "sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b", - "sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6", - "sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da", - "sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842", - "sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd", - "sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294", - "sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71", - "sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093", - "sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e", - "sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c", - "sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e", - "sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b", - "sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97", - "sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac", - "sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf", - "sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a", - "sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc", - "sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0", - "sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623", - "sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6", - "sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8", - "sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b", - "sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d", - "sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff", - "sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb", - "sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08", - "sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33", - "sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5", - "sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a", - "sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a", - "sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762", - "sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860", - "sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73", - "sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a", - "sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065", - "sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c", - "sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c", - "sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec", - "sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515", - "sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72", - "sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd", - "sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec", - "sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12", - "sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1", - "sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557", - "sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25", - "sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff", - "sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8", - "sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9", - "sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d", - "sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a", - "sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e", - "sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c", - "sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0", - "sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48", - "sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e", - "sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314", - "sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717", - "sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95", - "sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8", - "sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57", - "sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33", - "sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1", - "sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f", - "sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f", - "sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9", - "sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599", - "sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41", - "sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391", - "sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475", - "sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882", - "sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740", - "sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f", - "sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee", - "sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836", - "sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c", - "sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a", - "sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb" - ], - "markers": "python_version >= '3.8'", - "version": "==0.10.3" - }, - "semantic-version": { - "hashes": [ - "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", - "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177" - ], - "markers": "python_version >= '2.7'", - "version": "==2.10.0" - }, - "setuptools": { - "hashes": [ - "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", - "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" - ], - "markers": "python_version >= '3.8'", - "version": "==68.2.2" - }, - "six": { - "hashes": [ - "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", - "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", - "version": "==1.16.0" - }, - "sortedcontainers": { - "hashes": [ - "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", - "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" - ], - "version": "==2.4.0" - }, - "sqlalchemy": { - "hashes": [ - "sha256:014794b60d2021cc8ae0f91d4d0331fe92691ae5467a00841f7130fe877b678e", - "sha256:0268256a34806e5d1c8f7ee93277d7ea8cc8ae391f487213139018b6805aeaf6", - "sha256:05b971ab1ac2994a14c56b35eaaa91f86ba080e9ad481b20d99d77f381bb6258", - "sha256:141675dae56522126986fa4ca713739d00ed3a6f08f3c2eb92c39c6dfec463ce", - "sha256:1e7dc99b23e33c71d720c4ae37ebb095bebebbd31a24b7d99dfc4753d2803ede", - "sha256:2e617727fe4091cedb3e4409b39368f424934c7faa78171749f704b49b4bb4ce", - "sha256:3cf229704074bce31f7f47d12883afee3b0a02bb233a0ba45ddbfe542939cca4", - "sha256:3eb7c03fe1cd3255811cd4e74db1ab8dca22074d50cd8937edf4ef62d758cdf4", - "sha256:3f7d57a7e140efe69ce2d7b057c3f9a595f98d0bbdfc23fd055efdfbaa46e3a5", - "sha256:419b1276b55925b5ac9b4c7044e999f1787c69761a3c9756dec6e5c225ceca01", - "sha256:44ac5c89b6896f4740e7091f4a0ff2e62881da80c239dd9408f84f75a293dae9", - "sha256:4615623a490e46be85fbaa6335f35cf80e61df0783240afe7d4f544778c315a9", - "sha256:50a69067af86ec7f11a8e50ba85544657b1477aabf64fa447fd3736b5a0a4f67", - "sha256:513fd5b6513d37e985eb5b7ed89da5fd9e72354e3523980ef00d439bc549c9e9", - "sha256:6ff3dc2f60dbf82c9e599c2915db1526d65415be323464f84de8db3e361ba5b9", - "sha256:73c079e21d10ff2be54a4699f55865d4b275fd6c8bd5d90c5b1ef78ae0197301", - "sha256:7614f1eab4336df7dd6bee05bc974f2b02c38d3d0c78060c5faa4cd1ca2af3b8", - "sha256:785e2f2c1cb50d0a44e2cdeea5fd36b5bf2d79c481c10f3a88a8be4cfa2c4615", - "sha256:7ca38746eac23dd7c20bec9278d2058c7ad662b2f1576e4c3dbfcd7c00cc48fa", - "sha256:7f0c4ee579acfe6c994637527c386d1c22eb60bc1c1d36d940d8477e482095d4", - "sha256:87bf91ebf15258c4701d71dcdd9c4ba39521fb6a37379ea68088ce8cd869b446", - "sha256:89e274604abb1a7fd5c14867a412c9d49c08ccf6ce3e1e04fffc068b5b6499d4", - "sha256:8c323813963b2503e54d0944813cd479c10c636e3ee223bcbd7bd478bf53c178", - "sha256:a95aa0672e3065d43c8aa80080cdd5cc40fe92dc873749e6c1cf23914c4b83af", - "sha256:af520a730d523eab77d754f5cf44cc7dd7ad2d54907adeb3233177eeb22f271b", - "sha256:b19ae41ef26c01a987e49e37c77b9ad060c59f94d3b3efdfdbf4f3daaca7b5fe", - "sha256:b4eae01faee9f2b17f08885e3f047153ae0416648f8e8c8bd9bc677c5ce64be9", - "sha256:b69f1f754d92eb1cc6b50938359dead36b96a1dcf11a8670bff65fd9b21a4b09", - "sha256:b977bfce15afa53d9cf6a632482d7968477625f030d86a109f7bdfe8ce3c064a", - "sha256:bf8eebccc66829010f06fbd2b80095d7872991bfe8415098b9fe47deaaa58063", - "sha256:c111cd40910ffcb615b33605fc8f8e22146aeb7933d06569ac90f219818345ef", - "sha256:c2d494b6a2a2d05fb99f01b84cc9af9f5f93bf3e1e5dbdafe4bed0c2823584c1", - "sha256:c9cba4e7369de663611ce7460a34be48e999e0bbb1feb9130070f0685e9a6b66", - "sha256:cca720d05389ab1a5877ff05af96551e58ba65e8dc65582d849ac83ddde3e231", - "sha256:ccb99c3138c9bde118b51a289d90096a3791658da9aea1754667302ed6564f6e", - "sha256:d59cb9e20d79686aa473e0302e4a82882d7118744d30bb1dfb62d3c47141b3ec", - "sha256:e36339a68126ffb708dc6d1948161cea2a9e85d7d7b0c54f6999853d70d44430", - "sha256:ea7da25ee458d8f404b93eb073116156fd7d8c2a776d8311534851f28277b4ce", - "sha256:f9fefd6298433b6e9188252f3bff53b9ff0443c8fde27298b8a2b19f6617eeb9", - "sha256:fb87f763b5d04a82ae84ccff25554ffd903baafba6698e18ebaf32561f2fe4aa", - "sha256:fc6b15465fabccc94bf7e38777d665b6a4f95efd1725049d6184b3a39fd54880" - ], - "markers": "python_version >= '3.7'", - "version": "==2.0.21" - }, - "stack-data": { - "hashes": [ - "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815", - "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8" - ], - "version": "==0.6.2" - }, - "tomli": { - "hashes": [ - "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", - "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" - ], - "markers": "python_version < '3.11'", - "version": "==2.0.1" - }, - "toolz": { - "hashes": [ - "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f", - "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194" - ], - "markers": "python_version >= '3.5'", - "version": "==0.12.0" - }, - "tox": { - "hashes": [ - "sha256:5039f68276461fae6a9452a3b2c7295798f00a0e92edcd9a3b78ba1a73577951", - "sha256:599af5e5bb0cad0148ac1558a0b66f8fff219ef88363483b8d92a81e4246f28f" - ], - "index": "pypi", - "version": "==4.11.3" - }, - "tqdm": { - "hashes": [ - "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386", - "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7" - ], - "markers": "python_version >= '3.7'", - "version": "==4.66.1" - }, - "traitlets": { - "hashes": [ - "sha256:417745a96681fbb358e723d5346a547521f36e9bd0d50ba7ab368fff5d67aa54", - "sha256:f584ea209240466e66e91f3c81aa7d004ba4cf794990b0c775938a1544217cd1" - ], - "markers": "python_version >= '3.8'", - "version": "==5.10.0" - }, - "trie": { - "hashes": [ - "sha256:1c7fa6f4a3088e083764cf4e32a07a69c672fcf15ad922e03f51158d64a855cf", - "sha256:c1a5fc17b37a75008a4517e4f297ad8026dce777eb0eed63ee6335c66d7437b7" - ], - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==2.1.1" - }, - "typing-extensions": { - "hashes": [ - "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", - "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" - ], - "markers": "python_version < '3.11'", - "version": "==4.8.0" - }, - "urllib3": { - "hashes": [ - "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11", - "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4" - ], - "markers": "python_version >= '3.7'", - "version": "==2.0.4" - }, - "varint": { - "hashes": ["sha256:a6ecc02377ac5ee9d65a6a8ad45c9ff1dac8ccee19400a5950fb51d594214ca5"], - "version": "==1.0.2" - }, - "virtualenv": { - "hashes": [ - "sha256:b80039f280f4919c77b30f1c23294ae357c4c8701042086e3fc005963e4e537b", - "sha256:e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752" - ], - "markers": "python_version >= '3.7'", - "version": "==20.24.5" - }, - "watchdog": { - "hashes": [ - "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a", - "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100", - "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8", - "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc", - "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae", - "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41", - "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0", - "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f", - "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c", - "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9", - "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3", - "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709", - "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83", - "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759", - "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9", - "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3", - "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7", - "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f", - "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346", - "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674", - "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397", - "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96", - "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d", - "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a", - "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64", - "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44", - "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33" - ], - "markers": "python_version >= '3.7'", - "version": "==3.0.0" - }, - "wcwidth": { - "hashes": [ - "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", - "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" - ], - "version": "==0.2.6" - }, - "web3": { - "extras": ["tester"], - "hashes": [ - "sha256:3bc95043ee9fc6ee0b13a4766d4975b9f7cae069db136430a3799ed18743e608", - "sha256:cb454d0180e63ba1d83143dccf7c623581ba58e222edb006f48252d8a7b948e0" - ], - "markers": "python_full_version >= '3.7.2'", - "version": "==6.9.0" - }, - "websockets": { - "hashes": [ - "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd", - "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f", - "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998", - "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82", - "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788", - "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa", - "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f", - "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4", - "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7", - "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f", - "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd", - "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69", - "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb", - "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b", - "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016", - "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac", - "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4", - "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb", - "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99", - "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e", - "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54", - "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf", - "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007", - "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3", - "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6", - "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86", - "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1", - "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61", - "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11", - "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8", - "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f", - "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931", - "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526", - "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016", - "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae", - "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd", - "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b", - "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311", - "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af", - "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152", - "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288", - "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de", - "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97", - "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d", - "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d", - "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca", - "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0", - "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9", - "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b", - "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e", - "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128", - "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d", - "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c", - "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5", - "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6", - "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b", - "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b", - "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280", - "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c", - "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c", - "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f", - "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20", - "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8", - "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb", - "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602", - "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf", - "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0", - "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74", - "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0", - "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564" - ], - "markers": "python_version >= '3.7'", - "version": "==11.0.3" - }, - "wrapt": { - "hashes": [ - "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", - "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", - "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", - "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", - "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", - "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", - "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", - "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", - "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", - "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", - "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", - "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", - "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", - "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", - "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", - "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", - "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", - "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", - "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", - "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", - "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", - "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", - "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", - "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", - "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", - "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", - "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", - "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", - "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", - "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", - "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", - "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", - "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", - "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", - "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", - "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", - "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", - "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", - "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", - "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", - "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", - "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", - "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", - "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", - "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", - "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", - "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", - "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", - "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", - "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", - "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", - "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", - "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", - "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", - "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", - "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", - "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", - "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", - "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", - "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", - "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", - "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", - "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", - "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", - "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", - "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", - "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", - "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", - "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", - "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", - "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", - "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", - "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", - "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", - "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.15.0" - }, - "yarl": { - "hashes": [ - "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571", - "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3", - "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3", - "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c", - "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7", - "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04", - "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191", - "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea", - "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4", - "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4", - "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095", - "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e", - "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74", - "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef", - "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33", - "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde", - "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45", - "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf", - "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b", - "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac", - "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0", - "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528", - "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716", - "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb", - "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18", - "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72", - "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6", - "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582", - "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5", - "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368", - "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc", - "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9", - "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be", - "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a", - "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80", - "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8", - "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6", - "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417", - "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574", - "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59", - "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608", - "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82", - "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1", - "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3", - "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d", - "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8", - "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc", - "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac", - "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8", - "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955", - "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0", - "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367", - "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb", - "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a", - "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623", - "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2", - "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6", - "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7", - "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4", - "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051", - "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938", - "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8", - "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9", - "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3", - "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5", - "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9", - "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333", - "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185", - "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3", - "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560", - "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b", - "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7", - "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78", - "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7" - ], - "markers": "python_version >= '3.7'", - "version": "==1.9.2" - }, - "zipp": { - "hashes": [ - "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", - "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" - ], - "markers": "python_version >= '3.8'", - "version": "==3.17.0" - } - }, - "develop": {} + "_meta": { + "hash": { + "sha256": "0a552c29b7f4cd8e37fad9a964cc69912cb7b7ada427c077ca2b13faddbc58f6" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "aiohttp": { + "hashes": [ + "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67", + "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c", + "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda", + "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755", + "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d", + "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5", + "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548", + "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690", + "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84", + "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4", + "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a", + "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a", + "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9", + "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef", + "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b", + "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a", + "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d", + "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945", + "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634", + "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7", + "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691", + "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802", + "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c", + "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0", + "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8", + "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82", + "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a", + "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975", + "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b", + "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d", + "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3", + "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7", + "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e", + "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5", + "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649", + "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff", + "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e", + "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c", + "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22", + "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df", + "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e", + "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780", + "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905", + "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51", + "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543", + "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6", + "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873", + "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f", + "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35", + "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938", + "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b", + "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d", + "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8", + "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c", + "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af", + "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42", + "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3", + "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc", + "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8", + "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410", + "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c", + "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825", + "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9", + "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53", + "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a", + "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc", + "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8", + "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c", + "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a", + "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b", + "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd", + "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14", + "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2", + "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c", + "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9", + "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692", + "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1", + "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa", + "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a", + "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de", + "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91", + "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761", + "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd", + "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced", + "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28", + "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8", + "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824" + ], + "markers": "python_version >= '3.6'", + "version": "==3.8.5" + }, + "aiosignal": { + "hashes": [ + "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc", + "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17" + ], + "markers": "python_version >= '3.7'", + "version": "==1.3.1" + }, + "ape-etherscan": { + "hashes": [ + "sha256:398e5f7a1eed82c683498bf432060127b1aa3683566d63e770a13ae79b7af71b", + "sha256:df6b6ac7f56aed956340c0d783192ba4b4510888defb0e5f4667cc367661c72b" + ], + "index": "pypi", + "version": "==0.6.10" + }, + "ape-infura": { + "hashes": [ + "sha256:7737278379e019907c9783d69f5c6918fef63e1d8830a0937789e83c37a63eb6", + "sha256:b9a80c7187ea9daafb761041a86f10ec8e066d2d0170f47b2c3ad3c2af419d16" + ], + "index": "pypi", + "version": "==0.6.3" + }, + "ape-polygon": { + "hashes": [ + "sha256:1d1faacdeb3ffef3e49070bb4dc9da3a52ef6478338cccbfbb44016ab81d837b", + "sha256:5f606ba9b2834765b0d9516d7b6dcd59a4c73026d1e56162e35247561a1feee4" + ], + "index": "pypi", + "version": "==0.6.5" + }, + "ape-solidity": { + "hashes": [ + "sha256:c923809f4f3542e86b18cbeb325b08800461b4af38366a8950d26afc15431e35", + "sha256:ccd58558fad2a0003d1e0c026b8bfb5e35ec1600aa06ba2c2260daa5c64a2299" + ], + "index": "pypi", + "version": "==0.6.9" + }, + "appnope": { + "hashes": [ + "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24", + "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e" + ], + "markers": "sys_platform == 'darwin'", + "version": "==0.1.3" + }, + "asn1crypto": { + "hashes": [ + "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c", + "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67" + ], + "version": "==1.5.1" + }, + "asttokens": { + "hashes": [ + "sha256:2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e", + "sha256:cf8fc9e61a86461aa9fb161a14a0841a03c405fa829ac6b202670b3495d2ce69" + ], + "version": "==2.4.0" + }, + "async-timeout": { + "hashes": [ + "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", + "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028" + ], + "markers": "python_version >= '3.7'", + "version": "==4.0.3" + }, + "attrs": { + "hashes": [ + "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04", + "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015" + ], + "markers": "python_version >= '3.7'", + "version": "==23.1.0" + }, + "backcall": { + "hashes": [ + "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", + "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255" + ], + "version": "==0.2.0" + }, + "base58": { + "hashes": [ + "sha256:1e42993c0628ed4f898c03b522b26af78fb05115732549b21a028bc4633d19ab", + "sha256:6aa0553e477478993588303c54659d15e3c17ae062508c854a8b752d07c716bd", + "sha256:9a793c599979c497800eb414c852b80866f28daaed5494703fc129592cc83e60" + ], + "version": "==1.0.3" + }, + "bitarray": { + "hashes": [ + "sha256:00ff372dfaced7dd6cc2dffd052fafc118053cf81a442992b9a23367479d77d7", + "sha256:0cc066c7290151600b8872865708d2d00fb785c5db8a0df20d70d518e02f172b", + "sha256:0de1bc5f971aba46de88a4eb0dbb5779e30bbd7514f4dcbff743c209e0c02667", + "sha256:1414582b3b7516d2282433f0914dd9846389b051b2aea592ae7cc165806c24ac", + "sha256:17c32ba584e8fb9322419390e0e248769ed7d59de3ffa7432562a4c0ec4f1f82", + "sha256:18530ed3ddd71e9ff95440afce531efc3df7a3e0657f1c201c2c3cb41dd65869", + "sha256:1a0d27aad02d8abcb1d3b7d85f463877c4937e71adf9b6adb9367f2cdad91a52", + "sha256:1e859c664500d57526fe07140889a3b58dca54ff3b16ac6dc6d534a65c933084", + "sha256:214c05a7642040f6174e29f3e099549d3c40ac44616405081bf230dcafb38767", + "sha256:28dee92edd0d21655e56e1870c22468d0dabe557df18aa69f6d06b1543614180", + "sha256:29e19cb80a69f6d1a64097bfbe1766c418e1a785d901b583ef0328ea10a30399", + "sha256:2aa2267eb6d2b88ef7d139e79a6daaa84cd54d241b9797478f10dcb95a9cd620", + "sha256:2ab81c74a1805fe74330859b38e70d7525cdd80953461b59c06660046afaffcf", + "sha256:2b0f754a5791635b8239abdcc0258378111b8ee7a8eb3e2bbc24bcc48a0f0b08", + "sha256:2b977c39e3734e73540a2e3a71501c2c6261c70c6ce59d427bb7c4ecf6331c7e", + "sha256:2d38ceca90ed538706e3f111513073590f723f90659a7af0b992b29776a6e816", + "sha256:2d3f28a80f2e6bb96e9360a4baf3fbacb696b5aba06a14c18a15488d4b6f398f", + "sha256:2dc064a63445366f6b26eaf77230d326b9463e903ba59d6ff5efde0c5ec1ea0e", + "sha256:3024ab4c4906c3681408ca17c35833237d18813ebb9f24ae9f9e3157a4a66939", + "sha256:3243e4b8279ff2fe4c6e7869f0e6930c17799ee9f8d07317f68d44a66b46281e", + "sha256:3994f7dc48d21af40c0d69fca57d8040b02953f4c7c3652c2341d8947e9cbedf", + "sha256:3b999fb66980f885961d197d97d7ff5a13b7ab524ccf45ccb4704f4b82ce02e3", + "sha256:3bb5f2954dd897b0bac13b5449e5c977534595b688120c8af054657a08b01f46", + "sha256:443726af4bd60515e4e41ea36c5dbadb29a59bc799bcbf431011d1c6fd4363e3", + "sha256:4677477a406f2a9e064920463f69172b865e4d69117e1f2160064d3f5912b0bd", + "sha256:46fdd27c8fa4186d8b290bf74a28cbd91b94127b1b6a35c265a002e394fa9324", + "sha256:4a637bcd199c1366c65b98f18884f0d0b87403f04676b21e4635831660d722a7", + "sha256:4ce2ef9291a193a0e0cd5e23970bf3b682cc8b95220561d05b775b8d616d665f", + "sha256:542358b178b025dcc95e7fb83389e9954f701c41d312cbb66bdd763cbe5414b5", + "sha256:55020d6fb9b72bd3606969f5431386c592ed3666133bd475af945aa0fa9e84ec", + "sha256:57aeab27120a8a50917845bb81b0976e33d4759f2156b01359e2b43d445f5127", + "sha256:5934e3a623a1d485e1dcfc1990246e3c32c6fc6e7f0fd894750800d35fdb5794", + "sha256:5b0493ab66c6b8e17e9fde74c646b39ee09c236cf28a787cb8cbd3a83c05bff7", + "sha256:5f6175c1cf07dadad3213d60075704cf2e2f1232975cfd4ac8328c24a05e8f78", + "sha256:6033303431a7c85a535b3f1b0ec28abc2ebc2167c263f244993b56ccb87cae6b", + "sha256:62ac31059a3c510ef64ed93d930581b262fd4592e6d95ede79fca91e8d3d3ef6", + "sha256:63fa75e87ad8c57d5722cc87902ca148ef8bbbba12b5c5b3c3730a1bc9ac2886", + "sha256:67e8fb18df51e649adbc81359e1db0f202d72708fba61b06f5ac8db47c08d107", + "sha256:69ab51d551d50e4d6ca35abc95c9d04b33ad28418019bb5481ab09bdbc0df15c", + "sha256:6be965028785413a6163dd55a639b898b22f67f9b6ed554081c23e94a602031e", + "sha256:6c26a923080bc211cab8f5a5e242e3657b32951fec8980db0616e9239aade482", + "sha256:6df04efdba4e1bf9d93a1735e42005f8fcf812caf40c03934d9322412d563499", + "sha256:6ea51ba4204d086d5b76e84c31d2acbb355ed1b075ded54eb9b7070b0b95415d", + "sha256:741c3a2c0997c8f8878edfc65a4a8f7aa72eede337c9bc0b7bd8a45cf6e70dbc", + "sha256:74cd1725d08325b6669e6e9a5d09cec29e7c41f7d58e082286af5387414d046d", + "sha256:75104c3076676708c1ac2484ebf5c26464fb3850312de33a5b5bf61bfa7dbec5", + "sha256:797de3465f5f6c6be9a412b4e99eb6e8cdb86b83b6756655c4d83a65d0b9a376", + "sha256:7b29d4bf3d3da1847f2be9e30105bf51caaf5922e94dc827653e250ed33f4e8a", + "sha256:7c17dd8fb146c2c680bf1cb28b358f9e52a14076e44141c5442148863ee95d7d", + "sha256:81e83ed7e0b1c09c5a33b97712da89e7a21fd3e5598eff3975c39540f5619792", + "sha256:82bfb6ab9b1b5451a5483c9a2ae2a8f83799d7503b384b54f6ab56ea74abb305", + "sha256:8367768ab797105eb97dfbd4577fcde281618de4d8d3b16ad62c477bb065f347", + "sha256:843af12991161b358b6379a8dc5f6636798f3dacdae182d30995b6a2df3b263e", + "sha256:848af80518d0ed2aee782018588c7c88805f51b01271935df5b256c8d81c726e", + "sha256:861850d6a58e7b6a7096d0b0efed9c6d993a6ab8b9d01e781df1f4d80cc00efa", + "sha256:8c361201e1c3ee6d6b2266f8b7a645389880bccab1b29e22e7a6b7b6e7831ad5", + "sha256:904719fb7304d4115228b63c178f0cc725ad3b73e285c4b328e45a99a8e3fad6", + "sha256:9061c0a50216f24c97fb2325de84200e5ad5555f25c854ddcb3ceb6f12136055", + "sha256:9186cf8135ca170cd907d8c4df408a87747570d192d89ec4ff23805611c702a0", + "sha256:9336300fd0acf07ede92e424930176dc4b43ef1b298489e93ba9a1695e8ea752", + "sha256:9aad7b4670f090734b272c072c9db375c63bd503512be9a9393e657dcacfc7e2", + "sha256:9b65d487451e0e287565c8436cf4da45260f958f911299f6122a20d7ec76525c", + "sha256:9d5df3d6358425c9dfb6bdbd4f576563ec4173d24693a9042d05aadcb23c0b98", + "sha256:9d6a9c72354327c7aa9890ff87904cbe86830cb1fb58c39750a0afac8df5e051", + "sha256:9fed8aba8d1b09cf641b50f1e6dd079c31677106ea4b63ec29f4c49adfabd63f", + "sha256:a04d4851e83730f03c4a6aac568c7d8b42f78f0f9cc8231d6db66192b030ce1e", + "sha256:a0f6d705860f59721d7282496a4d29b5fd78690e1c1473503832c983e762b01b", + "sha256:aa08a9b03888c768b9b2383949a942804d50d8164683b39fe62f0bfbfd9b4204", + "sha256:ad440c17ef2ff42e94286186b5bcf82bf87c4026f91822675239102ebe1f7035", + "sha256:ae32ac7217e83646b9f64d7090bf7b737afaa569665621f110a05d9738ca841a", + "sha256:b2015a9dd718393e814ff7b9e80c58190eb1cef7980f86a97a33e8440e158ce2", + "sha256:b2560475c5a1ff96fcab01fae7cf6b9a6da590f02659556b7fccc7991e401884", + "sha256:b65a04b2e029b0694b52d60786732afd15b1ec6517de61a36afbb7808a2ffac1", + "sha256:b67733a240a96f09b7597af97ac4d60c59140cfcfd180f11a7221863b82f023a", + "sha256:b8d6e5ff385fea25caf26fd58b43f087deb763dcaddd18d3df2895235cf1b484", + "sha256:bc03bb358ae3917247d257207c79162e666d407ac473718d1b95316dac94162b", + "sha256:bf80804014e3736515b84044c2be0e70080616b4ceddd4e38d85f3167aeb8165", + "sha256:c2426dc7a0d92d8254def20ab7a231626397ce5b6fb3d4f44be74cc1370a60c3", + "sha256:c54b0af16be45de534af9d77e8a180126cd059f72db8b6550f62dda233868942", + "sha256:c5582dd7d906e6f9ec1704f99d56d812f7d395d28c02262bc8b50834d51250c3", + "sha256:c9efcee311d9ba0c619743060585af9a9b81496e97b945843d5e954c67722a75", + "sha256:cbe54685cf6b17b3e15faf6c4b76773bc1c484bc447020737d2550a9dde5f6e6", + "sha256:cf38871ed4cd89df9db7c70f729b948fa3e2848a07c69f78e4ddfbe4f23db63c", + "sha256:d175e16419a52d54c0ac44c93309ba76dc2cfd33ee9d20624f1a5eb86b8e162e", + "sha256:d2f13b7d0694ce2024c82fc595e6ccc3918e7f069747c3de41b1ce72a9a1e346", + "sha256:d32ccd2c0d906eae103ef84015f0545a395052b0b6eb0e02e9023ca0132557f6", + "sha256:d34790a919f165b6f537935280ef5224957d9ce8ab11d339f5e6d0319a683ccc", + "sha256:dc7acffee09822b334d1b46cd384e969804abdf18f892c82c05c2328066cd2ae", + "sha256:dd76bbf5a4b2ab84b8ffa229f5648e80038ba76bf8d7acc5de9dd06031b38117", + "sha256:df9d8a9a46c46950f306394705512553c552b633f8bf3c11359c4204289f11e3", + "sha256:e48c45ea7944225bcee026c457a70eaea61db3659d9603f07fc8a643ab7e633b", + "sha256:e4cd81ffd2d58ef68c22c825aff89f4a47bd721e2ada0a3a96793169f370ae21", + "sha256:e68ceef35a88625d16169550768fcc8d3894913e363c24ecbf6b8c07eb02c8f3", + "sha256:e7f7231ef349e8f4955d9b39561f4683a418a73443cfce797a4eddbee1ba9664", + "sha256:e88a706f92ad1e0e1e66f6811d10b6155d5f18f0de9356ee899a7966a4e41992", + "sha256:ea71e0a50060f96ad0821e0ac785e91e44807f8b69555970979d81934961d5bd", + "sha256:ee772c20dcb56b03d666a4e4383d0b5b942b0ccc27815e42fe0737b34cba2082", + "sha256:f0af01e1f61fe627f63648c0c6f52de8eac56710a2ef1dbce4851d867084cc7e", + "sha256:f30cdce22af3dc7c73e70af391bfd87c4574cc40c74d651919e20efc26e014b5", + "sha256:f3128234bde3629ab301a501950587e847d30031a9cbf04d95f35cbf44469a9e", + "sha256:f7d2ec2174d503cbb092f8353527842633c530b4e03b9922411640ac9c018a19", + "sha256:f9a66745682e175e143a180524a63e692acb2b8c86941073f6dd4ee906e69608" + ], + "version": "==2.8.1" + }, + "black": { + "hashes": [ + "sha256:031e8c69f3d3b09e1aa471a926a1eeb0b9071f80b17689a655f7885ac9325a6f", + "sha256:13a2e4a93bb8ca74a749b6974925c27219bb3df4d42fc45e948a5d9feb5122b7", + "sha256:13ef033794029b85dfea8032c9d3b92b42b526f1ff4bf13b2182ce4e917f5100", + "sha256:14f04c990259576acd093871e7e9b14918eb28f1866f91968ff5524293f9c573", + "sha256:24b6b3ff5c6d9ea08a8888f6977eae858e1f340d7260cf56d70a49823236b62d", + "sha256:403397c033adbc45c2bd41747da1f7fc7eaa44efbee256b53842470d4ac5a70f", + "sha256:50254ebfa56aa46a9fdd5d651f9637485068a1adf42270148cd101cdf56e0ad9", + "sha256:538efb451cd50f43aba394e9ec7ad55a37598faae3348d723b59ea8e91616300", + "sha256:638619a559280de0c2aa4d76f504891c9860bb8fa214267358f0a20f27c12948", + "sha256:6a3b50e4b93f43b34a9d3ef00d9b6728b4a722c997c99ab09102fd5efdb88325", + "sha256:6ccd59584cc834b6d127628713e4b6b968e5f79572da66284532525a042549f9", + "sha256:75a2dc41b183d4872d3a500d2b9c9016e67ed95738a3624f4751a0cb4818fe71", + "sha256:7d30ec46de88091e4316b17ae58bbbfc12b2de05e069030f6b747dfc649ad186", + "sha256:8431445bf62d2a914b541da7ab3e2b4f3bc052d2ccbf157ebad18ea126efb91f", + "sha256:8fc1ddcf83f996247505db6b715294eba56ea9372e107fd54963c7553f2b6dfe", + "sha256:a732b82747235e0542c03bf352c126052c0fbc458d8a239a94701175b17d4855", + "sha256:adc3e4442eef57f99b5590b245a328aad19c99552e0bdc7f0b04db6656debd80", + "sha256:c46767e8df1b7beefb0899c4a95fb43058fa8500b6db144f4ff3ca38eb2f6393", + "sha256:c619f063c2d68f19b2d7270f4cf3192cb81c9ec5bc5ba02df91471d0b88c4c5c", + "sha256:cf3a4d00e4cdb6734b64bf23cd4341421e8953615cba6b3670453737a72ec204", + "sha256:cf99f3de8b3273a8317681d8194ea222f10e0133a24a7548c73ce44ea1679377", + "sha256:d6bc09188020c9ac2555a498949401ab35bb6bf76d4e0f8ee251694664df6301" + ], + "index": "pypi", + "version": "==23.9.1" + }, + "cached-property": { + "hashes": [ + "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130", + "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0" + ], + "version": "==1.5.2" + }, + "cachetools": { + "hashes": [ + "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590", + "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b" + ], + "markers": "python_version >= '3.7'", + "version": "==5.3.1" + }, + "certifi": { + "hashes": [ + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" + ], + "markers": "python_version >= '3.6'", + "version": "==2023.7.22" + }, + "cffi": { + "hashes": [ + "sha256:0928df15fc8e63099fa82cf2deb0f67ad740639ae23089fd26c6d919d08f9844", + "sha256:0e4ffd75af0ff2f2ec6ba18e249c6969653d6f06bd7f4a405236c217963dd887", + "sha256:0ed256dd741501dc11c8f536972f54a5a68df018a7959ce97219a8b308b4b881", + "sha256:23a0d34f7f10935d798e4a3700f7ebff6bfdfa8476b7e55a56dbf53b8d41da55", + "sha256:24357100aceaf76318b9a826237fe7dc20652daf1d15d6f0db162fea3d665e7b", + "sha256:2dd553b3ff4817b2dab4c6a9c257dd35f720976815c899d5040297604acd98e3", + "sha256:2de1371afe36f892916da71e83ab00f8766ccd81df40794bacb6eda7a355cd6f", + "sha256:31fd177716140a5229c30e6e316d49a9eedb13b10eb7726cb892cd4aa5bff84f", + "sha256:3389f61db8594bb5e996340188aa81a6dc817b29ee80fd1c6471c63d2721e269", + "sha256:3591f33b9b0f8a31a612d9f1cefe595973d991233eecce07948d1e74114cc0c1", + "sha256:3743ea0ed69c8cc40cb6f29482d8b7de20235c04d1373406fe2df01b961b9064", + "sha256:384f5328f37ab2c681d925b1d1cc7d79cd355546a9d7e6d901ed4e2083b4b548", + "sha256:3a3a5d6575f5193c305b026ab4b6cfd9faf6b23ad823cf527553cf8e98055ffe", + "sha256:3b478e5cb81139cfb2726f7b7d5b3662e4cbbe8e13da5443db23545dcc4c0d05", + "sha256:3f3637d26849648ca75ffccdf8e24c0bef77cb038f1fc178afa8a12afa5dffb8", + "sha256:4766877e1aca2f1d6d93416873ec268f034c2a03ffb11b6daf5db5dcad03709b", + "sha256:478d6a99f78478d7e3b8db69bbd1a648fff31a313e1ae76f87d260dde91e5cd7", + "sha256:4ce6c1a2e8925db47492378860b25a051a73a5fe217261af7dee3d523f2922ba", + "sha256:50e493ab94d425edfc713a2cac4d56a6a6c11638bebf411e86013be69e624e69", + "sha256:563f16837d86a5e3fb4625f0baf936898d5b3da03a1192e16592b226c73cfd4a", + "sha256:57ddcf5dd192126e62e9ed427ac6c61f36300482938e3f46f5cda1105b09dc90", + "sha256:5a3bf751ceba6c9165e21b2ef3408830449abfaf3db5f791b6e9fde92a04dea0", + "sha256:62fb88370101ac6c983114fb014679158e359b3d6b6c539b17618acfb6d5539e", + "sha256:678716ca1c06138450b0454ada2245d326765720c2634d370d249cd0d566b992", + "sha256:76bac0ad1168d71e9f117b5bbcd4efc5d7328f9a0054fd058b0b0eba88bcf7d6", + "sha256:78faf51033e48213a2ef2d8cb2987e650058a60ebe8085bcc3afe484c61950fb", + "sha256:85431bf5729028182587f9bba21c82a567d82e4cddd8e74e1952dcba5fd9f337", + "sha256:911868b5d339d866040851c55c7f95d01e21bcb3764641a264f88dc9f314dbef", + "sha256:98cf866039b1b41712a71cb448001a0ed1bb38f1d1db583aea1b78cae05ec057", + "sha256:98e2d9d7754509a1e5366c378eb095e9f8a3b67ba6dc822092153fe3c7529d45", + "sha256:993088af255a591351fb1f7e9a2fb459f790ba46b29c3481cb5c0cf54005dc25", + "sha256:9b598e2b6f0f24180482458d644db6dc44e98bcdc9c00914d69b2749994efe0c", + "sha256:a10bcc26a395411129016be78b82071f1431ab5763e5c3f25ee18e91bf3f88af", + "sha256:aac5299ed6c4b56447b6b0c4f99e587e4998c05bb4d633002adcd36be68085e1", + "sha256:ae42699a559623cb730602ade2cc0a1f053f8b0ed958c8c1c7ddd0a02254876a", + "sha256:af5b0f7e331ea55232f15e972abd74d2817964accdd6fd3e5c2b8ac354fa993f", + "sha256:b1d80ef126d3b8e1e1ead94fb8ac44eb1f4ed36990dba3e09fa4b7921426879d", + "sha256:bd43ef97cabb2bab95c09956c28a87a0e05274b9258996521696912bf93da36f", + "sha256:c761446abcc82b52f1be155f5266887216a6e20174d3afd7025c95fdd57d527b", + "sha256:cb7df7ab7d13d2d5d6df4d4adb6d9013139be8bfab17f9bedcdf9aa0ae10c6c1", + "sha256:cbf204995c237988376b60021bfe3c6eb161f8be68b2a7546bb4fda9cb1a38e1", + "sha256:d184e5d68d4ddfae311dcc63614ba53d0d7a592339366f6ec5f522ed43f50f20", + "sha256:d9b57c9037208b92529f14b5b18c5416ebaa84446e7f5172d4f45074b4b4bb61", + "sha256:dacd0caf16ed0c23a1ac105fd129f410ff7a2aa8240c479be2c25adf2095996e", + "sha256:dfd80e1feaffe8eff95ae26ffa83bdf7ad5f1e24f00b24310c27a95eca51a4b6", + "sha256:e21f83989e4f54eece0347451c4694c6116de04c93b80a422ead425bfbdd18c3", + "sha256:e24ab5f0ea81b1285b93b637ad44d8da1e4928540b2bc554b4533a267bddc575", + "sha256:e2d583f83b5f6e4c284ccf53f220cead00241231e51e573d6324e05ad1e6c879", + "sha256:e654ae5341ba422841ebcb992c0041f9379f18cf0e7f7c70e00e36ff78777420", + "sha256:e9b75f0097a15dc2a6c00571be3d50381b0e921b0942a398fcde7cdf70277f1f", + "sha256:f2c9e3946ee71debff0bc2260aa4994e782d4a7e95923c101a20d16eabb075f7", + "sha256:f4a99491edeafd0c41f5fe39ba0540b889a17f86f740d8160ee535fa0303c9ec" + ], + "markers": "python_version >= '3.8'", + "version": "==1.16.0rc2" + }, + "cfgv": { + "hashes": [ + "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", + "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560" + ], + "markers": "python_version >= '3.8'", + "version": "==3.4.0" + }, + "chardet": { + "hashes": [ + "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", + "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970" + ], + "markers": "python_version >= '3.7'", + "version": "==5.2.0" + }, + "charset-normalizer": { + "hashes": [ + "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96", + "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c", + "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710", + "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706", + "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020", + "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252", + "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad", + "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329", + "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a", + "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f", + "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6", + "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4", + "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a", + "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46", + "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2", + "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23", + "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace", + "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd", + "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982", + "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10", + "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2", + "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea", + "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09", + "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5", + "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149", + "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489", + "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9", + "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80", + "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592", + "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3", + "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6", + "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed", + "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c", + "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200", + "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a", + "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e", + "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d", + "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6", + "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623", + "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669", + "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3", + "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa", + "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9", + "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2", + "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f", + "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1", + "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4", + "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a", + "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8", + "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3", + "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029", + "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f", + "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959", + "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22", + "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7", + "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952", + "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346", + "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e", + "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d", + "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299", + "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd", + "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a", + "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3", + "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037", + "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94", + "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c", + "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858", + "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a", + "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449", + "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c", + "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918", + "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1", + "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c", + "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", + "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.2.0" + }, + "click": { + "hashes": [ + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.7" + }, + "coincurve": { + "hashes": [ + "sha256:07e3c37cfadac6896668a130ea46296a3dfdeea0160fd66a51e377ad00795269", + "sha256:0b1a42eba91b9e4f833309e94bc6a270b1700cb4567d4809ef91f00968b57925", + "sha256:0b31ab366fadff16ecfdde96ffc07e70fee83850f88bd1f985a8b4977a68bbfb", + "sha256:116bf1b60a6e72e23c6b153d7c79f0e565d82973d917a3cecf655ffb29263163", + "sha256:14700463009c7d799a746929728223aa53ff1ece394ea408516d98d637434883", + "sha256:1bce17d7475cee9db2c2fa7af07eaab582732b378acf6dcaee417de1df2d8661", + "sha256:23b9ced9cce32dabb4bc15fa6449252fa51efddf0268481973e4c3772a5a68c6", + "sha256:257c6171cd0301c119ef41360f0d0c2fb5cc288717b33d3bd5482a4c9ae04551", + "sha256:286969b6f789bbd9d744d28350a3630c1cb3ee045263469a28892f70a4a6654a", + "sha256:2d2c20d108580bce5efedb980688031462168f4de2446de95898b48a249127a2", + "sha256:2d95103ed43df855121cd925869ae2589360a8d94fcd61b236958deacfb9a359", + "sha256:33678f6b43edbeab6605584c725305f4f814239780c53eba0f8e4bc4a52b1d1a", + "sha256:3caf58877bcf41eb4c1be7a2d54317f0b31541d99ba248dae28821b19c52a0db", + "sha256:412a06b7d1b8229f25318f05e76310298da5ad55d73851eabac7ddfdcdc5bff4", + "sha256:4ab662b67454fea7f0a5ae855ba6ad9410bcaebe68b97f4dade7b5944dec3a11", + "sha256:599b1b3cf097cae920d97f31a5b8e8aff185ca8fa5d8a785b2edf7b199fb9731", + "sha256:6a0c0c1e492ef08efe99d25a23d535e2bff667bbef43d71a6f8893ae811b3d81", + "sha256:704d1abf2e78def33988368592233a8ec9b98bfc45dfa2ec9e898adfad46e5ad", + "sha256:73e464e0ace77c686fdc54590e5592905b6802f9fc20a0c023f0b1585669d6a3", + "sha256:779da694dea1b1d09e16b00e079f6a1195290ce9568f39c95cddf35f1f49ec49", + "sha256:7844f01904e32317a00696a27fd771860e53a2fa62e5c66eace9337d2742c9e6", + "sha256:7f1142252e870f091b2c2c21cc1fadfdd29af23d02e99f29add0f14d1ba94b4c", + "sha256:8290903d4629f27f9f3cdeec72ffa97536c5a6ed5ba7e3413b2707991c650fbe", + "sha256:83379dd70291480df2052554851bfd17444c003aef7c4bb02d96d73eec69fe28", + "sha256:8964e680c622a2b5eea940abdf51c77c1bd3d4fde2a04cec2420bf91981b198a", + "sha256:908467330cd3047c71105a08394c4f3e7dce76e4371b030ba8b0ef863013e3ca", + "sha256:a7b31efe56b3f6434828ad5f6ecde4a95747bb69b59032746482eebb8f3456a4", + "sha256:abeb4c1d78e1a81a3f1c99a406cd858669582ada2d976e876ef694f57dec95ca", + "sha256:ba9eaddd50a2ce0d891af7cee11c2e048d1f0f44bf87db00a5c4b1eee7e3391b", + "sha256:c60690bd7704d8563968d2dded33eb514875a52b5964f085409965ad041b2555", + "sha256:c86626afe417a09d8e80e56780efcae3ae516203b23b5ade84813916e1c94fc1", + "sha256:cd11d2ca5b7e989c5ce1af217a2ad78c19c21afca786f198d1b1a408d6f408dc", + "sha256:d05641cf31d68514c47cb54105d20acbae79fc3ee3942454eaaf411babb3f880", + "sha256:d53e2a268142924c24e9b786b3e6c3603fae54bb8211560036b0e9ce6a9f2dbc", + "sha256:e009f06287507158f16c82cc313c0f3bfd0e9ec1e82d1a4d5fa1c5b6c0060f69", + "sha256:e3abb7f65e2b5fb66a15e374faeaafe6700fdb83fb66d1873ddff91c395a3b74", + "sha256:eba563f7f70c10323227d1890072172bd84df6f814c9a6b012033b214426b6cf", + "sha256:f3e5f2a2d774050b3ea8bf2167f2d598fde58d7690779931516714d98b65d884", + "sha256:f40646d5f29ac9026f8cc1b368bc9ab68710fad055b64fbec020f9bbfc99b242", + "sha256:f44b9ba588b34795d1b4074f9a9fa372adef3fde58300bf32f40a69e8cd72a23", + "sha256:f8bcb9c40fd730cf377fa448f1304355d6497fb3d00b7b0a69a10dfcc14a6d28", + "sha256:fceca9d6ecaa1e8f891675e4f4ff530d54e41c648fc6e8a816835ffa640fa899" + ], + "index": "pypi", + "version": "==18.0.0" + }, + "colorama": { + "hashes": [ + "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", + "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==0.4.6" + }, + "commonmark": { + "hashes": [ + "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60", + "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9" + ], + "version": "==0.9.1" + }, + "cryptography": { + "hashes": [ + "sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67", + "sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311", + "sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8", + "sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13", + "sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143", + "sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f", + "sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829", + "sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd", + "sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397", + "sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac", + "sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d", + "sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a", + "sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839", + "sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e", + "sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6", + "sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9", + "sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860", + "sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca", + "sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91", + "sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d", + "sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714", + "sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb", + "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f" + ], + "index": "pypi", + "version": "==41.0.4" + }, + "cytoolz": { + "hashes": [ + "sha256:00547da587f124b32b072ce52dd5e4b37cf199fedcea902e33c67548523e4678", + "sha256:0295289c4510efa41174850e75bc9188f82b72b1b54d0ea57d1781729c2924d5", + "sha256:03b58f843f09e73414e82e57f7e8d88f087eaabf8f276b866a40661161da6c51", + "sha256:0568d4da0a9ee9f9f5ab318f6501557f1cfe26d18c96c8e0dac7332ae04c6717", + "sha256:08a0e03f287e45eb694998bb55ac1643372199c659affa8319dfbbdec7f7fb3c", + "sha256:0a9d12436fd64937bd2c9609605f527af7f1a8db6e6637639b44121c0fe715d6", + "sha256:101b5bd32badfc8b1f9c7be04ba3ae04fb47f9c8736590666ce9449bff76e0b1", + "sha256:14108cafb140dd68fdda610c2bbc6a37bf052cd48cfebf487ed44145f7a2b67f", + "sha256:18580d060fa637ff01541640ecde6de832a248df02b8fb57e6dd578f189d62c7", + "sha256:18a0f838677f9510aef0330c0096778dd6406d21d4ff9504bf79d85235a18460", + "sha256:1ce324d1b413636ea5ee929f79637821f13c9e55e9588f38228947294944d2ed", + "sha256:246368e983eaee9851b15d7755f82030eab4aa82098d2a34f6bef9c689d33fcc", + "sha256:24c0d71e9ac91f4466b1bd280f7de43aa4d94682daaf34d85d867a9b479b87cc", + "sha256:275d53fd769df2102d6c9fc98e553bd8a9a38926f54d6b20cf29f0dd00bf3b75", + "sha256:294d24edc747ef4e1b28e54365f713becb844e7898113fafbe3e9165dc44aeea", + "sha256:2fb740482794a72e2e5fec58e4d9b00dcd5a60a8cef68431ff12f2ba0e0d9a7e", + "sha256:31d4b0455d72d914645f803d917daf4f314d115c70de0578d3820deb8b101f66", + "sha256:388f840fd911d61a96e9e595eaf003f9dc39e847c9060b8e623ab29e556f009b", + "sha256:3e993804e6b04113d61fdb9541b6df2f096ec265a506dad7437517470919c90f", + "sha256:4180b2785d1278e6abb36a72ac97c92432db53fa2df00ee943d2c15a33627d31", + "sha256:4416ee86a87180b6a28e7483102c92debc077bec59c67eda8cc63fc52a218ac0", + "sha256:45c7b4eac7571707269ebc2893facdf87e359cd5c7cfbfa9e6bd8b33fb1079c5", + "sha256:460c05238fbfe6d848141669d17a751a46c923f9f0c9fd8a3a462ab737623a44", + "sha256:478051e5ef8278b2429864c8d148efcebdc2be948a61c9a44757cd8c816c98f5", + "sha256:481e3129a76ea01adcc0e7097ccb8dbddab1cfc40b6f0e32c670153512957c0f", + "sha256:48425107fbb1af3f0f2410c004f16be10ffc9374358e5600b57fa543f46f8def", + "sha256:4a7d8b869ded171f6cdf584fc2fc6ae03b30a0e1e37a9daf213a59857a62ed90", + "sha256:4bff49986c9bae127928a2f9fd6313146a342bfae8292f63e562f872bd01b871", + "sha256:51d3495235af09f21aa92a7cdd51504bda640b108b6be834448b774f52852c09", + "sha256:5556acde785a61d4cf8b8534ae109b023cbd2f9df65ee2afbe070be47c410f8c", + "sha256:55e94124af9c8fbb1df54195cc092688fdad0765641b738970b6f1d5ea72e776", + "sha256:5616d386dfbfba7c39e9418ba668c734f6ceaacc0130877e8a100cad11e6838b", + "sha256:57233e1600560ceb719bed759dc78393edd541b9a3e7fefc3079abd83c26a6ea", + "sha256:593e89e2518eaf81e96edcc9ef2c5fca666e8fc922b03d5cb7a7b8964dbee336", + "sha256:5998f81bf6a2b28a802521efe14d9fc119f74b64e87b62ad1b0e7c3d8366d0c7", + "sha256:5e4e612b7ecc9596e7c859cd9e0cd085e6d0c576b4f0d917299595eb56bf9c05", + "sha256:5fef7b602ccf8a3c77ab483479ccd7a952a8c5bb1c263156671ba7aaa24d1035", + "sha256:63b31345e20afda2ae30dba246955517a4264464d75e071fc2fa641e88c763ec", + "sha256:663911786dcde3e4a5d88215c722c531c7548903dc07d418418c0d1c768072c0", + "sha256:673d6e9e3aa86949343b46ac2b7be266c36e07ce77fa1d40f349e6987a814d6e", + "sha256:68ae7091cc73a752f0b938f15bb193de80ca5edf5ae2ea6360d93d3e9228357b", + "sha256:698da4fa1f7baeea0607738cb1f9877ed1ba50342b29891b0223221679d6f729", + "sha256:6a93644d7996fd696ab7f1f466cd75d718d0a00d5c8118b9fe8c64231dc1f85e", + "sha256:6c8d0dff4865da54ae825d43e1721925721b19f3b9aca8e730c2ce73dee2c630", + "sha256:732d08228fa8d366fec284f7032cc868d28a99fa81fc71e3adf7ecedbcf33a0f", + "sha256:735147aa41b8eeb104da186864b55e2a6623c758000081d19c93d759cd9523e3", + "sha256:7a92aab8dd1d427ac9bc7480cfd3481dbab0ef024558f2f5a47de672d8a5ffaa", + "sha256:7d352d4de060604e605abdc5c8a5d0429d5f156cb9866609065d3003454d4cea", + "sha256:81074edf3c74bc9bd250d223408a5df0ff745d1f7a462597536cd26b9390e2d6", + "sha256:81e6a9a8fda78a2f4901d2915b25bf620f372997ca1f20a14f7cefef5ad6f6f4", + "sha256:843500cd3e4884b92fd4037912bc42d5f047108d2c986d36352e880196d465b0", + "sha256:89247ac220031a4f9f689688bcee42b38fd770d4cce294e5d914afc53b630abe", + "sha256:8bb624dbaef4661f5e3625c1e39ad98ecceef281d1380e2774d8084ad0810275", + "sha256:9007bb1290c79402be6b84bcf9e7a622a073859d61fcee146dc7bc47afe328f3", + "sha256:9070ae35c410d644e6df98a8f69f3ed2807e657d0df2a26b2643127cbf6944a5", + "sha256:908c13f305d34322e11b796de358edaeea47dd2d115c33ca22909c5e8fb036fd", + "sha256:9480b4b327be83c4d29cb88bcace761b11f5e30198ffe2287889455c6819e934", + "sha256:960d85ebaa974ecea4e71fa56d098378fa51fd670ee744614cbb95bf95e28fc7", + "sha256:96796594c770bc6587376e74ddc7d9c982d68f47116bb69d90873db5e0ea88b6", + "sha256:97cf514a9f3426228d8daf880f56488330e4b2948a6d183a106921217850d9eb", + "sha256:997b7e0960072f6bb445402da162f964ea67387b9f18bda2361edcc026e13597", + "sha256:9b28787eaf2174e68f0acb3c66f9c6b98bdfeb0930c0d0b08e1941c7aedc8d27", + "sha256:9bf51354e15520715f068853e6ab8190e77139940e8b8b633bdb587956a08fb0", + "sha256:9e5075e30be626ef0f9bedf7a15f55ed4d7209e832bc314fdc232dbd61dcbf44", + "sha256:a08b4346350660799d81d4016e748bcb134a9083301d41f9618f64a6077f89f2", + "sha256:a67f75cc51a2dc7229a8ac84291e4d61dc5abfc8940befcf37a2836d95873340", + "sha256:a973f5286758f76824ecf19ae1999f6697371a9121c8f163295d181d19a819d7", + "sha256:ab911033e5937fc221a2c165acce7f66ae5ac9d3e54bec56f3c9c197a96be574", + "sha256:ad92e37be0b106fdbc575a3a669b43b364a5ef334495c9764de4c2d7541f7a99", + "sha256:ad9ea4a50d2948738351790047d45f2b1a023facc01bf0361988109b177e8b2f", + "sha256:b029bdd5a8b6c9a7c0e8fdbe4fc25ffaa2e09b77f6f3462314696e3a20511829", + "sha256:b41a85b9b9a2530b72b0d3d10e383fc3c2647ae88169d557d5e216f881860318", + "sha256:baf020f4b708f800b353259cd7575e335a79f1ac912d9dda55b2aa0bf3616e42", + "sha256:c08094b9e5d1b6dfb0845a0253cc2655ca64ce70d15162dfdb102e28c8993493", + "sha256:c26805b6c8dc8565ed91045c44040bf6c0fe5cb5b390c78cd1d9400d08a6cd39", + "sha256:c6ee222671eed5c5b16a5ad2aea07f0a715b8b199ee534834bc1dd2798f1ade7", + "sha256:c820608e7077416f766b148d75e158e454881961881b657cff808529d261dd24", + "sha256:cb081b2b02bf4405c804de1ece6f904916838ab0e057f1446e4ac12fac827960", + "sha256:cbe038bb78d599b5a29d09c438905defaa615a522bc7e12f8016823179439497", + "sha256:cd461e402e24929d866f05061d2f8337e3a8456e75e21b72c125abff2477c7f7", + "sha256:cde6dbb788a4cbc4a80a72aa96386ba4c2b17bdfff3ace0709799adbe16d6476", + "sha256:ce7889dc3701826d519ede93cdff11940fb5567dbdc165dce0e78047eece02b7", + "sha256:d0086ba8d41d73647b13087a3ca9c020f6bfec338335037e8f5172b4c7c8dce5", + "sha256:d29988bde28a90a00367edcf92afa1a2f7ecf43ea3ae383291b7da6d380ccc25", + "sha256:d494befe648c13c98c0f3d56d05489c839c9228a32f58e9777305deb6c2c1cee", + "sha256:df4e32badb2ccf1773e1e74020b7e3b8caf9e92f842c6be7d14888ecdefc2c6c", + "sha256:e6de6a4bdfaee382c2de2a3580b3ae76fce6105da202bbd835e5efbeae6a9c6e", + "sha256:f039c5373f7b314b151432c73219216857b19ab9cb834f0eb5d880f74fc7851c", + "sha256:f6e86ac2b45a95f75c6f744147483e0fc9697ce7dfe1726083324c236f873f8b", + "sha256:f9c690b359f503f18bf1c46a6456370e4f6f3fc4320b8774ae69c4f85ecc6c94", + "sha256:fa436abd4ac9ca71859baf5794614e6ec8fa27362f0162baedcc059048da55f7", + "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54", + "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab" + ], + "markers": "implementation_name == 'cpython'", + "version": "==0.12.2" + }, + "dataclassy": { + "hashes": [ + "sha256:ad6622cb91e644d13f68768558983fbc22c90a8ff7e355638485d18b9baf1198", + "sha256:bcb030d3d700cf9b1597042bbc8375b92773e6f68f65675a7071862c0ddb87f5" + ], + "markers": "python_version >= '3.6'", + "version": "==0.11.1" + }, + "decorator": { + "hashes": [ + "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", + "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186" + ], + "markers": "python_version >= '3.5'", + "version": "==5.1.1" + }, + "deprecated": { + "hashes": [ + "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c", + "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.2.14" + }, + "distlib": { + "hashes": [ + "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057", + "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8" + ], + "version": "==0.3.7" + }, + "eip712": { + "hashes": [ + "sha256:3997dace7e581b66a84d106a10baac47a3f6c94095d79c7d0971ca0ede1926ad", + "sha256:c984c577358d1c7e5d4e52802bf4bd0432e965ba7326448998f95fcc1b6d5269" + ], + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.2.1" + }, + "eth-abi": { + "hashes": [ + "sha256:60d88788d53725794cdb07c0f0bb0df2a31a6e1ad19644313fe6117ac24eeeb0", + "sha256:abd83410a5326145bf178675c276de0ed154f6dc695dcad1beafaa44d97f44ae" + ], + "markers": "python_full_version >= '3.7.2' and python_version < '4'", + "version": "==4.2.1" + }, + "eth-account": { + "hashes": [ + "sha256:0ccc0edbb17021004356ae6e37887528b6e59e6ae6283f3917b9759a5887203b", + "sha256:ccb2d90a16c81c8ea4ca4dc76a70b50f1d63cea6aff3c5a5eddedf9e45143eca" + ], + "markers": "python_version >= '3.6' and python_version < '4'", + "version": "==0.8.0" + }, + "eth-ape": { + "hashes": [ + "sha256:78001209dfdf8c7973c649b8cbba73d3399cd649aeee4223d0b29078ae997201", + "sha256:f6c5137a10edcc2a37a8f8736882e412b2fb3b326d00d8128538e73dc031f89b" + ], + "index": "pypi", + "version": "==0.6.19" + }, + "eth-bloom": { + "hashes": [ + "sha256:73576828dff7566b9216403e0898966912f370bae5734241dd3f50ce5664a825", + "sha256:cc86ab9670577996f7fcb8445b7a164ecd211ac91d9c4c2b5a47678623419927" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.0.0" + }, + "eth-hash": { + "extras": [ + "pycryptodome" + ], + "hashes": [ + "sha256:1b5f10eca7765cc385e1430eefc5ced6e2e463bb18d1365510e2e539c1a6fe4e", + "sha256:251f62f6579a1e247561679d78df37548bd5f59908da0b159982bf8293ad32f0" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==0.5.2" + }, + "eth-keyfile": { + "hashes": [ + "sha256:471be6e5386fce7b22556b3d4bde5558dbce46d2674f00848027cb0a20abdc8c", + "sha256:609773a1ad5956944a33348413cad366ec6986c53357a806528c8f61c4961560" + ], + "version": "==0.6.1" + }, + "eth-keys": { + "hashes": [ + "sha256:7d18887483bc9b8a3fdd8e32ddcb30044b9f08fcb24a380d93b6eee3a5bb3216", + "sha256:e07915ffb91277803a28a379418bdd1fad1f390c38ad9353a0f189789a440d5d" + ], + "version": "==0.4.0" + }, + "eth-rlp": { + "hashes": [ + "sha256:e88e949a533def85c69fa94224618bbbd6de00061f4cff645c44621dab11cf33", + "sha256:f3263b548df718855d9a8dbd754473f383c0efc82914b0b849572ce3e06e71a6" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==0.3.0" + }, + "eth-tester": { + "extras": [ + "py-evm" + ], + "hashes": [ + "sha256:0e4367d99ae242efdb8c1d18ed99d1ff3f03149abb0a4c2427bc6d333ebef13b", + "sha256:b9cbc93d0b17a6e8acbb52294dad214ee223cf88209fa5be66ead353937d274c" + ], + "version": "==0.9.1b1" + }, + "eth-typing": { + "hashes": [ + "sha256:347d50713dd58ab50063b228d8271624ab2de3071bfa32d467b05f0ea31ab4c5", + "sha256:7f49610469811ee97ac43eaf6baa294778ce74042d41e61ecf22e5ebe385590f" + ], + "markers": "python_full_version >= '3.7.2' and python_version < '4'", + "version": "==3.4.0" + }, + "eth-utils": { + "hashes": [ + "sha256:60fc999c1b4ae011ab600b01a3eb5375156f3bc46e7cd1a83ca9e6e14bb9b13c", + "sha256:f79a95f86dd991344697c763db40271dbe43fbbcd5776f49b0c4fb7b645ee1c4" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.2.1" + }, + "ethpm-types": { + "hashes": [ + "sha256:4d8e7aaf69f605055f0c3681eaa03bab2dbc201a72d2493ef41db9aa3fcaa1ff", + "sha256:edc64fec898349338a83d36120452467c6e64399ed0541524bbcadb736035756" + ], + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.5.6" + }, + "evm-trace": { + "hashes": [ + "sha256:0e5b6d6977bf42c3a5157ee3c5cdc5e57bd23827855283b516fa4e68d09e32e2", + "sha256:5cd30ba28dcb2c7ba2461c124ad9059629c78bd0781f5c3f2a9939427f50cb47" + ], + "markers": "python_version >= '3.8' and python_version < '4'", + "version": "==0.1.0a25" + }, + "exceptiongroup": { + "hashes": [ + "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9", + "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3" + ], + "markers": "python_version < '3.11'", + "version": "==1.1.3" + }, + "executing": { + "hashes": [ + "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc", + "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107" + ], + "version": "==1.2.0" + }, + "filelock": { + "hashes": [ + "sha256:08c21d87ded6e2b9da6728c3dff51baf1dcecf973b768ef35bcbc3447edb9ad4", + "sha256:2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd" + ], + "markers": "python_version >= '3.8'", + "version": "==3.12.4" + }, + "flake8": { + "hashes": [ + "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23", + "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5" + ], + "index": "pypi", + "version": "==6.1.0" + }, + "frozenlist": { + "hashes": [ + "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6", + "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01", + "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251", + "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9", + "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b", + "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87", + "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf", + "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f", + "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0", + "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2", + "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b", + "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc", + "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c", + "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467", + "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9", + "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1", + "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a", + "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79", + "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167", + "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300", + "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf", + "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea", + "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2", + "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab", + "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3", + "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb", + "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087", + "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc", + "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8", + "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62", + "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f", + "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326", + "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c", + "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431", + "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963", + "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7", + "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef", + "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3", + "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956", + "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781", + "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472", + "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc", + "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839", + "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672", + "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3", + "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503", + "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d", + "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8", + "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b", + "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc", + "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f", + "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559", + "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b", + "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95", + "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb", + "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963", + "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919", + "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f", + "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3", + "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1", + "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e" + ], + "markers": "python_version >= '3.8'", + "version": "==1.4.0" + }, + "hexbytes": { + "hashes": [ + "sha256:383595ad75026cf00abd570f44b368c6cdac0c6becfae5c39ff88829877f8a59", + "sha256:a3fe35c6831ee8fafd048c4c086b986075fc14fd46258fa24ecb8d65745f9a9d" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==0.3.1" + }, + "identify": { + "hashes": [ + "sha256:24437fbf6f4d3fe6efd0eb9d67e24dd9106db99af5ceb27996a5f7895f24bf1b", + "sha256:d43d52b86b15918c137e3a74fff5224f60385cd0e9c38e99d07c257f02f151a5" + ], + "markers": "python_version >= '3.8'", + "version": "==2.5.29" + }, + "idna": { + "hashes": [ + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + ], + "markers": "python_version >= '3.5'", + "version": "==3.4" + }, + "ijson": { + "hashes": [ + "sha256:06f9707da06a19b01013f8c65bf67db523662a9b4a4ff027e946e66c261f17f0", + "sha256:0974444c1f416e19de1e9f567a4560890095e71e81623c509feff642114c1e53", + "sha256:0a4ae076bf97b0430e4e16c9cb635a6b773904aec45ed8dcbc9b17211b8569ba", + "sha256:0b9d1141cfd1e6d6643aa0b4876730d0d28371815ce846d2e4e84a2d4f471cf3", + "sha256:0e0243d166d11a2a47c17c7e885debf3b19ed136be2af1f5d1c34212850236ac", + "sha256:10294e9bf89cb713da05bc4790bdff616610432db561964827074898e174f917", + "sha256:1844c5b57da21466f255a0aeddf89049e730d7f3dfc4d750f0e65c36e6a61a7c", + "sha256:211124cff9d9d139dd0dfced356f1472860352c055d2481459038b8205d7d742", + "sha256:2a80c0bb1053055d1599e44dc1396f713e8b3407000e6390add72d49633ff3bb", + "sha256:2cc04fc0a22bb945cd179f614845c8b5106c0b3939ee0d84ce67c7a61ac1a936", + "sha256:2ec3e5ff2515f1c40ef6a94983158e172f004cd643b9e4b5302017139b6c96e4", + "sha256:35194e0b8a2bda12b4096e2e792efa5d4801a0abb950c48ade351d479cd22ba5", + "sha256:396338a655fb9af4ac59dd09c189885b51fa0eefc84d35408662031023c110d1", + "sha256:39f551a6fbeed4433c85269c7c8778e2aaea2501d7ebcb65b38f556030642c17", + "sha256:3b14d322fec0de7af16f3ef920bf282f0dd747200b69e0b9628117f381b7775b", + "sha256:3c0d526ccb335c3c13063c273637d8611f32970603dfb182177b232d01f14c23", + "sha256:3dcc33ee56f92a77f48776014ddb47af67c33dda361e84371153c4f1ed4434e1", + "sha256:4252e48c95cd8ceefc2caade310559ab61c37d82dfa045928ed05328eb5b5f65", + "sha256:455d7d3b7a6aacfb8ab1ebcaf697eedf5be66e044eac32508fccdc633d995f0e", + "sha256:46bafb1b9959872a1f946f8dd9c6f1a30a970fc05b7bfae8579da3f1f988e598", + "sha256:4a3a6a2fbbe7550ffe52d151cf76065e6b89cfb3e9d0463e49a7e322a25d0426", + "sha256:4b2ec8c2a3f1742cbd5f36b65e192028e541b5fd8c7fd97c1fc0ca6c427c704a", + "sha256:4fc35d569eff3afa76bfecf533f818ecb9390105be257f3f83c03204661ace70", + "sha256:545a30b3659df2a3481593d30d60491d1594bc8005f99600e1bba647bb44cbb5", + "sha256:644f4f03349ff2731fd515afd1c91b9e439e90c9f8c28292251834154edbffca", + "sha256:674e585361c702fad050ab4c153fd168dc30f5980ef42b64400bc84d194e662d", + "sha256:6a4db2f7fb9acfb855c9ae1aae602e4648dd1f88804a0d5cfb78c3639bcf156c", + "sha256:6bd3e7e91d031f1e8cea7ce53f704ab74e61e505e8072467e092172422728b22", + "sha256:6c32c18a934c1dc8917455b0ce478fd7a26c50c364bd52c5a4fb0fc6bb516af7", + "sha256:6f662dc44362a53af3084d3765bb01cd7b4734d1f484a6095cad4cb0cbfe5374", + "sha256:713a919e0220ac44dab12b5fed74f9130f3480e55e90f9d80f58de129ea24f83", + "sha256:7596b42f38c3dcf9d434dddd50f46aeb28e96f891444c2b4b1266304a19a2c09", + "sha256:7851a341429b12d4527ca507097c959659baf5106c7074d15c17c387719ffbcd", + "sha256:7b8064a85ec1b0beda7dd028e887f7112670d574db606f68006c72dd0bb0e0e2", + "sha256:7ce4c70c23521179d6da842bb9bc2e36bb9fad1e0187e35423ff0f282890c9ca", + "sha256:7dc357da4b4ebd8903e77dbcc3ce0555ee29ebe0747c3c7f56adda423df8ec89", + "sha256:81815b4184b85ce124bfc4c446d5f5e5e643fc119771c5916f035220ada29974", + "sha256:85afdb3f3a5d0011584d4fa8e6dccc5936be51c27e84cd2882fe904ca3bd04c5", + "sha256:86b3c91fdcb8ffb30556c9669930f02b7642de58ca2987845b04f0d7fe46d9a8", + "sha256:904f77dd3d87736ff668884fe5197a184748eb0c3e302ded61706501d0327465", + "sha256:916acdc5e504f8b66c3e287ada5d4b39a3275fc1f2013c4b05d1ab9933671a6c", + "sha256:923131f5153c70936e8bd2dd9dcfcff43c67a3d1c789e9c96724747423c173eb", + "sha256:92dc4d48e9f6a271292d6079e9fcdce33c83d1acf11e6e12696fb05c5889fe74", + "sha256:96190d59f015b5a2af388a98446e411f58ecc6a93934e036daa75f75d02386a0", + "sha256:9680e37a10fedb3eab24a4a7e749d8a73f26f1a4c901430e7aa81b5da15f7307", + "sha256:98c6799925a5d1988da4cd68879b8eeab52c6e029acc45e03abb7921a4715c4b", + "sha256:9c2a12dcdb6fa28f333bf10b3a0f80ec70bc45280d8435be7e19696fab2bc706", + "sha256:9e0a27db6454edd6013d40a956d008361aac5bff375a9c04ab11fc8c214250b5", + "sha256:a4d7fe3629de3ecb088bff6dfe25f77be3e8261ed53d5e244717e266f8544305", + "sha256:a729b0c8fb935481afe3cf7e0dadd0da3a69cc7f145dbab8502e2f1e01d85a7c", + "sha256:ab4db9fee0138b60e31b3c02fff8a4c28d7b152040553b6a91b60354aebd4b02", + "sha256:b49fd5fe1cd9c1c8caf6c59f82b08117dd6bea2ec45b641594e25948f48f4169", + "sha256:b4eb2304573c9fdf448d3fa4a4fdcb727b93002b5c5c56c14a5ffbbc39f64ae4", + "sha256:ba33c764afa9ecef62801ba7ac0319268a7526f50f7601370d9f8f04e77fc02b", + "sha256:bcc51c84bb220ac330122468fe526a7777faa6464e3b04c15b476761beea424f", + "sha256:be8495f7c13fa1f622a2c6b64e79ac63965b89caf664cc4e701c335c652d15f2", + "sha256:c1a4b8eb69b6d7b4e94170aa991efad75ba156b05f0de2a6cd84f991def12ff9", + "sha256:c63f3d57dbbac56cead05b12b81e8e1e259f14ce7f233a8cbe7fa0996733b628", + "sha256:ccd6be56335cbb845f3d3021b1766299c056c70c4c9165fb2fbe2d62258bae3f", + "sha256:cfced0a6ec85916eb8c8e22415b7267ae118eaff2a860c42d2cc1261711d0d31", + "sha256:d052417fd7ce2221114f8d3b58f05a83c1a2b6b99cafe0b86ac9ed5e2fc889df", + "sha256:d1053fb5f0b010ee76ca515e6af36b50d26c1728ad46be12f1f147a835341083", + "sha256:d31e0d771d82def80cd4663a66de277c3b44ba82cd48f630526b52f74663c639", + "sha256:d34e049992d8a46922f96483e96b32ac4c9cffd01a5c33a928e70a283710cd58", + "sha256:d6ea7c7e3ec44742e867c72fd750c6a1e35b112f88a917615332c4476e718d40", + "sha256:db2d6341f9cb538253e7fe23311d59252f124f47165221d3c06a7ed667ecd595", + "sha256:db3bf1b42191b5cc9b6441552fdcb3b583594cb6b19e90d1578b7cbcf80d0fae", + "sha256:e641814793a037175f7ec1b717ebb68f26d89d82cfd66f36e588f32d7e488d5f", + "sha256:e84d27d1acb60d9102728d06b9650e5b7e5cb0631bd6e3dfadba8fb6a80d6c2f", + "sha256:e9fd906f0c38e9f0bfd5365e1bed98d649f506721f76bb1a9baa5d7374f26f19", + "sha256:eaac293853f1342a8d2a45ac1f723c860f700860e7743fb97f7b76356df883a8", + "sha256:eeb286639649fb6bed37997a5e30eefcacddac79476d24128348ec890b2a0ccb", + "sha256:f05ed49f434ce396ddcf99e9fd98245328e99f991283850c309f5e3182211a79", + "sha256:f4bc87e69d1997c6a55fff5ee2af878720801ff6ab1fb3b7f94adda050651e37", + "sha256:f8d54b624629f9903005c58d9321a036c72f5c212701bbb93d1a520ecd15e370", + "sha256:fa8b98be298efbb2588f883f9953113d8a0023ab39abe77fe734b71b46b1220a", + "sha256:fbac4e9609a1086bbad075beb2ceec486a3b138604e12d2059a33ce2cba93051", + "sha256:fd12e42b9cb9c0166559a3ffa276b4f9fc9d5b4c304e5a13668642d34b48b634" + ], + "version": "==3.2.3" + }, + "importlib-metadata": { + "hashes": [ + "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", + "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" + ], + "markers": "python_version >= '3.8'", + "version": "==6.8.0" + }, + "iniconfig": { + "hashes": [ + "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", + "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.0" + }, + "ipython": { + "hashes": [ + "sha256:2baeb5be6949eeebf532150f81746f8333e2ccce02de1c7eedde3f23ed5e9f1e", + "sha256:45a2c3a529296870a97b7de34eda4a31bee16bc7bf954e07d39abe49caf8f887" + ], + "markers": "python_version >= '3.9'", + "version": "==8.15.0" + }, + "isort": { + "hashes": [ + "sha256:0ec8b74806e80fec33e6e7ba89d35e17b3eb1c4c74316ea44cf877cc26e8b118", + "sha256:cde11e804641edbe1b6b95d56582eb541f27eebc77864c6015545944bb0e9c76" + ], + "index": "pypi", + "version": "==6.0.0b2" + }, + "jedi": { + "hashes": [ + "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4", + "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e" + ], + "markers": "python_version >= '3.6'", + "version": "==0.19.0" + }, + "jsonschema": { + "hashes": [ + "sha256:cd5f1f9ed9444e554b38ba003af06c0a8c2868131e56bfbef0550fb450c0330e", + "sha256:ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf" + ], + "markers": "python_version >= '3.8'", + "version": "==4.19.1" + }, + "jsonschema-specifications": { + "hashes": [ + "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1", + "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb" + ], + "markers": "python_version >= '3.8'", + "version": "==2023.7.1" + }, + "lazyasd": { + "hashes": [ + "sha256:a3196f05cff27f952ad05767e5735fd564b4ea4e89b23f5ea1887229c3db145b" + ], + "version": "==0.1.4" + }, + "lru-dict": { + "hashes": [ + "sha256:00f6e8a3fc91481b40395316a14c94daa0f0a5de62e7e01a7d589f8d29224052", + "sha256:020b93870f8c7195774cbd94f033b96c14f51c57537969965c3af300331724fe", + "sha256:05fb8744f91f58479cbe07ed80ada6696ec7df21ea1740891d4107a8dd99a970", + "sha256:086ce993414f0b28530ded7e004c77dc57c5748fa6da488602aa6e7f79e6210e", + "sha256:0c316dfa3897fabaa1fe08aae89352a3b109e5f88b25529bc01e98ac029bf878", + "sha256:0facf49b053bf4926d92d8d5a46fe07eecd2af0441add0182c7432d53d6da667", + "sha256:1171ad3bff32aa8086778be4a3bdff595cc2692e78685bcce9cb06b96b22dcc2", + "sha256:1184d91cfebd5d1e659d47f17a60185bbf621635ca56dcdc46c6a1745d25df5c", + "sha256:13c56782f19d68ddf4d8db0170041192859616514c706b126d0df2ec72a11bd7", + "sha256:18ee88ada65bd2ffd483023be0fa1c0a6a051ef666d1cd89e921dcce134149f2", + "sha256:203b3e78d03d88f491fa134f85a42919020686b6e6f2d09759b2f5517260c651", + "sha256:20f5f411f7751ad9a2c02e80287cedf69ae032edd321fe696e310d32dd30a1f8", + "sha256:21b3090928c7b6cec509e755cc3ab742154b33660a9b433923bd12c37c448e3e", + "sha256:22147367b296be31cc858bf167c448af02435cac44806b228c9be8117f1bfce4", + "sha256:231d7608f029dda42f9610e5723614a35b1fff035a8060cf7d2be19f1711ace8", + "sha256:25f9e0bc2fe8f41c2711ccefd2871f8a5f50a39e6293b68c3dec576112937aad", + "sha256:287c2115a59c1c9ed0d5d8ae7671e594b1206c36ea9df2fca6b17b86c468ff99", + "sha256:291d13f85224551913a78fe695cde04cbca9dcb1d84c540167c443eb913603c9", + "sha256:312b6b2a30188586fe71358f0f33e4bac882d33f5e5019b26f084363f42f986f", + "sha256:34a3091abeb95e707f381a8b5b7dc8e4ee016316c659c49b726857b0d6d1bd7a", + "sha256:35a142a7d1a4fd5d5799cc4f8ab2fff50a598d8cee1d1c611f50722b3e27874f", + "sha256:3838e33710935da2ade1dd404a8b936d571e29268a70ff4ca5ba758abb3850df", + "sha256:5345bf50e127bd2767e9fd42393635bbc0146eac01f6baf6ef12c332d1a6a329", + "sha256:5919dd04446bc1ee8d6ecda2187deeebfff5903538ae71083e069bc678599446", + "sha256:59f3df78e94e07959f17764e7fa7ca6b54e9296953d2626a112eab08e1beb2db", + "sha256:5b172fce0a0ffc0fa6d282c14256d5a68b5db1e64719c2915e69084c4b6bf555", + "sha256:5c6acbd097b15bead4de8e83e8a1030bb4d8257723669097eac643a301a952f0", + "sha256:5d90a70c53b0566084447c3ef9374cc5a9be886e867b36f89495f211baabd322", + "sha256:604d07c7604b20b3130405d137cae61579578b0e8377daae4125098feebcb970", + "sha256:6b7a031e47421d4b7aa626b8c91c180a9f037f89e5d0a71c4bb7afcf4036c774", + "sha256:6da5b8099766c4da3bf1ed6e7d7f5eff1681aff6b5987d1258a13bd2ed54f0c9", + "sha256:712e71b64da181e1c0a2eaa76cd860265980cd15cb0e0498602b8aa35d5db9f8", + "sha256:71da89e134747e20ed5b8ad5b4ee93fc5b31022c2b71e8176e73c5a44699061b", + "sha256:756230c22257597b7557eaef7f90484c489e9ba78e5bb6ab5a5bcfb6b03cb075", + "sha256:7d3336e901acec897bcd318c42c2b93d5f1d038e67688f497045fc6bad2c0be7", + "sha256:7e51fa6a203fa91d415f3b2900e5748ec8e06ad75777c98cc3aeb3983ca416d7", + "sha256:877801a20f05c467126b55338a4e9fa30e2a141eb7b0b740794571b7d619ee11", + "sha256:87bbad3f5c3de8897b8c1263a9af73bbb6469fb90e7b57225dad89b8ef62cd8d", + "sha256:8bda3a9afd241ee0181661decaae25e5336ce513ac268ab57da737eacaa7871f", + "sha256:8dafc481d2defb381f19b22cc51837e8a42631e98e34b9e0892245cc96593deb", + "sha256:91d577a11b84387013815b1ad0bb6e604558d646003b44c92b3ddf886ad0f879", + "sha256:981ef3edc82da38d39eb60eae225b88a538d47b90cce2e5808846fd2cf64384b", + "sha256:987b73a06bcf5a95d7dc296241c6b1f9bc6cda42586948c9dabf386dc2bef1cd", + "sha256:9e4c85aa8844bdca3c8abac3b7f78da1531c74e9f8b3e4890c6e6d86a5a3f6c0", + "sha256:a3ea7571b6bf2090a85ff037e6593bbafe1a8598d5c3b4560eb56187bcccb4dc", + "sha256:a87bdc291718bbdf9ea4be12ae7af26cbf0706fa62c2ac332748e3116c5510a7", + "sha256:aaecd7085212d0aa4cd855f38b9d61803d6509731138bf798a9594745953245b", + "sha256:ae301c282a499dc1968dd633cfef8771dd84228ae9d40002a3ea990e4ff0c469", + "sha256:afdadd73304c9befaed02eb42f5f09fdc16288de0a08b32b8080f0f0f6350aa6", + "sha256:b20b7c9beb481e92e07368ebfaa363ed7ef61e65ffe6e0edbdbaceb33e134124", + "sha256:b30122e098c80e36d0117810d46459a46313421ce3298709170b687dc1240b02", + "sha256:b55753ee23028ba8644fd22e50de7b8f85fa60b562a0fafaad788701d6131ff8", + "sha256:b5ccfd2291c93746a286c87c3f895165b697399969d24c54804ec3ec559d4e43", + "sha256:b6613daa851745dd22b860651de930275be9d3e9373283a2164992abacb75b62", + "sha256:b710f0f4d7ec4f9fa89dfde7002f80bcd77de8024017e70706b0911ea086e2ef", + "sha256:b9ec7a4a0d6b8297102aa56758434fb1fca276a82ed7362e37817407185c3abb", + "sha256:bb12f19cdf9c4f2d9aa259562e19b188ff34afab28dd9509ff32a3f1c2c29326", + "sha256:bd2cd1b998ea4c8c1dad829fc4fa88aeed4dee555b5e03c132fc618e6123f168", + "sha256:c4da599af36618881748b5db457d937955bb2b4800db891647d46767d636c408", + "sha256:c53b12b89bd7a6c79f0536ff0d0a84fdf4ab5f6252d94b24b9b753bd9ada2ddf", + "sha256:c9617583173a29048e11397f165501edc5ae223504a404b2532a212a71ecc9ed", + "sha256:cd46c94966f631a81ffe33eee928db58e9fbee15baba5923d284aeadc0e0fa76", + "sha256:cd6806313606559e6c7adfa0dbeb30fc5ab625f00958c3d93f84831e7a32b71e", + "sha256:d0dd4cd58220351233002f910e35cc01d30337696b55c6578f71318b137770f9", + "sha256:d0f7ec902a0097ac39f1922c89be9eaccf00eb87751e28915320b4f72912d057", + "sha256:d5bb41bc74b321789803d45b124fc2145c1b3353b4ad43296d9d1d242574969b", + "sha256:d7ab0c10c4fa99dc9e26b04e6b62ac32d2bcaea3aad9b81ec8ce9a7aa32b7b1b", + "sha256:de24b47159e07833aeab517d9cb1c3c5c2d6445cc378b1c2f1d8d15fb4841d63", + "sha256:de906e5486b5c053d15b7731583c25e3c9147c288ac8152a6d1f9bccdec72641", + "sha256:df25a426446197488a6702954dcc1de511deee20c9db730499a2aa83fddf0df1", + "sha256:e25b2e90a032dc248213af7f3f3e975e1934b204f3b16aeeaeaff27a3b65e128", + "sha256:e707d93bae8f0a14e6df1ae8b0f076532b35f00e691995f33132d806a88e5c18", + "sha256:ea2ac3f7a7a2f32f194c84d82a034e66780057fd908b421becd2f173504d040e", + "sha256:ead83ac59a29d6439ddff46e205ce32f8b7f71a6bd8062347f77e232825e3d0a", + "sha256:edad398d5d402c43d2adada390dd83c74e46e020945ff4df801166047013617e", + "sha256:f010cfad3ab10676e44dc72a813c968cd586f37b466d27cde73d1f7f1ba158c2", + "sha256:f404dcc8172da1f28da9b1f0087009578e608a4899b96d244925c4f463201f2a", + "sha256:f54908bf91280a9b8fa6a8c8f3c2f65850ce6acae2852bbe292391628ebca42f", + "sha256:f5d5a5f976b39af73324f2b793862859902ccb9542621856d51a5993064f25e4", + "sha256:f9484016e6765bd295708cccc9def49f708ce07ac003808f69efa386633affb9", + "sha256:fbf36c5a220a85187cacc1fcb7dd87070e04b5fc28df7a43f6842f7c8224a388", + "sha256:fc42882b554a86e564e0b662da47b8a4b32fa966920bd165e27bb8079a323bc1" + ], + "version": "==1.2.0" + }, + "matplotlib-inline": { + "hashes": [ + "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311", + "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304" + ], + "markers": "python_version >= '3.5'", + "version": "==0.1.6" + }, + "mccabe": { + "hashes": [ + "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", + "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e" + ], + "markers": "python_version >= '3.6'", + "version": "==0.7.0" + }, + "morphys": { + "hashes": [ + "sha256:76d6dbaa4d65f597e59d332c81da786d83e4669387b9b2a750cfec74e7beec20" + ], + "version": "==1.0" + }, + "msgspec": { + "hashes": [ + "sha256:1535855b0db1bee4e5c79384010861de2a23391b45095785e84ec9489abc56cd", + "sha256:23e65efaef864bf66a4ddfae9c2200c40ce1a50411f454de1757f3651e5762cd", + "sha256:25f7e3adaf1ca5d80455057576785069475b1d941eb877dbd0ae738cc5d1fefa", + "sha256:2ad4f4704045a0fb1b5226769d9cdc00a4a69adec2e6770064f3db73bb91bbf9", + "sha256:35420ae8afaa90498733541c0d8b2a73c70548a8a4d86da11201ed6df557e98f", + "sha256:358c2b908f1ed63419ccc5f185150c0caa3fc49599f4582504637cbfd5ff6242", + "sha256:3996bf1fc252658a7e028a0c263d28ac4dc48476e35f6fd8ebaf461a39459825", + "sha256:3bfc55d5ca60b3aa2c2287191aa9e943c54eb0aef16d4babb92fddcc047093b1", + "sha256:3f71c33efda990ecddc878ea2bb37f22e941d4264ded83e1b2309f86d335cde7", + "sha256:4c1ee8b9667fde3b5d7e0e0b555a8b70e2fa7bf2e02e9e8673af262c82c7b691", + "sha256:595f14f628825d9d79eeea6e08514144a3d516eb014f0c6191f91899c83a6836", + "sha256:70fa7f008008e2c823ecc1a143258bb2820ac76010cf6003091fa3832b6334c9", + "sha256:78a593bc0db95416d633b28cff00af0465f04590d53ff1a80a33d7e2728820ad", + "sha256:7b065995f3a41e4c8274a86e1ee84ac432969918373c777de239ef14f9537d80", + "sha256:80e57102469ee0d2186c72d42fa9460981ccd4252bdb997bf04ef2af0818984f", + "sha256:84cc7932f78aeec6ef014cca4bb4ecea8469bc05f13c9eacdfa27baa785e54b9", + "sha256:84fcf74b6371494aa536bf438ef96b08ce8f6e40483a01ed305535a40113136b", + "sha256:a75c4efa7565048f81e709a366e14b9dc10752b3fb5ea1f3c8de5abfca3db3c2", + "sha256:abcb92ffbca77bcfbedd5b29b68629628948982aafb994658e7abfad6e15913c", + "sha256:ade3959577bff46c7d9476962d2d7aa086b2820f3da03ee000e9be4958404829", + "sha256:b56cc7b9956daefb309447bbbb2581c84e5d5e3b89d573b1d5a25647522d2e43", + "sha256:b90a44550f19ee0b8c37dbca75f96473299275001af2a00273d736b7347ead6d", + "sha256:b9b3ed82f71816cddf0a9cdaae30a1d1addf8fe56ec09e7368db93ce43b29a81", + "sha256:baaba2411003f2e7a4328b5a58eba9efeb4c5e6a27e8ffd2adaccdc8feb0a805", + "sha256:c79ac853409b0000727f4c3e5fb32fe38122ad94b9e074f992fa9ea7f00eb498", + "sha256:ccaddb764b5abe457c0eded4a252f5fbeb8b04a946b46a06a7e6ca299c35dcb1", + "sha256:d127bf90f29f1211520f1baa897b10f2a9c05b8648ce7dc89dfc9ca45599be53", + "sha256:e03ff009f3a2e1fe883703f98098d12aea6b30934707b404fd994e9ea1c1bfa7", + "sha256:eb80befd343f3b378c8abad0367154703c74bde02fc62cbcf1a0e6b5fa779459" + ], + "markers": "python_version >= '3.8'", + "version": "==0.18.2" + }, + "multidict": { + "hashes": [ + "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9", + "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8", + "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03", + "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710", + "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161", + "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664", + "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569", + "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067", + "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313", + "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706", + "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2", + "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636", + "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49", + "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93", + "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603", + "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0", + "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60", + "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4", + "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e", + "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1", + "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60", + "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951", + "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc", + "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe", + "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95", + "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d", + "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8", + "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed", + "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2", + "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775", + "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87", + "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c", + "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2", + "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98", + "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3", + "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe", + "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78", + "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660", + "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176", + "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e", + "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988", + "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c", + "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c", + "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0", + "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449", + "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f", + "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde", + "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5", + "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d", + "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac", + "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a", + "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9", + "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca", + "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11", + "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35", + "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063", + "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b", + "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982", + "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258", + "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1", + "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52", + "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480", + "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7", + "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461", + "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d", + "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc", + "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779", + "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a", + "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547", + "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0", + "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171", + "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf", + "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d", + "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba" + ], + "markers": "python_version >= '3.7'", + "version": "==6.0.4" + }, + "mypy-extensions": { + "hashes": [ + "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", + "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782" + ], + "markers": "python_version >= '3.5'", + "version": "==1.0.0" + }, + "nodeenv": { + "hashes": [ + "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2", + "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==1.8.0" + }, + "nucypher-core": { + "hashes": [ + "sha256:09c754a7450d2ba3a46bf2c73ac35a0e8fe73c0c2fdbc2dab47ebea47d90b909", + "sha256:0b3d44fdc4acfd31cf6e46fdf8acb9ea278823b2d72336f5c9e7732b37ac6f30", + "sha256:0b8449ab2524628b1d4c095fc4ff5e46c699f0acd62a099ba6d411e72704c94c", + "sha256:0fe7eab174fc658f8391f1834aa193fb10acf1a55a1c613d0f09493e8d0d9f17", + "sha256:1f70477f41bc10e19f6280258530dabecb453b1230f641601ea12f5e4c9cac67", + "sha256:1fc6f39de2e90e36695c2674a170047dc9abfc083e9177b3304bd74ec21727d2", + "sha256:57c1c6d96570221ec8c30f8b00d89496f9d68cdf11b0574bdae7defd3cc1c975", + "sha256:74fcf712399aeb0d242c1d332a7f7a34d4ff70d9262c0537eb769ff973c2170e", + "sha256:75d5b86ab0fe51b00036cab25d6d4699fa3171aa8a8418d4027fdc2388f84c43", + "sha256:a3a69e37fdf6a42b5d0be58b28d70e2fb614320d032a2fe99aa3aa29643f9494", + "sha256:b9c82bd7593d2deac41c8f7b2833193eb6e6cab0208261313121646fcd275629", + "sha256:de48dae67ff01ffe020e8887432daa8a1072797559e11cb34d56b3012b6f4520", + "sha256:e22038db52190d88b6dd8cbcd76980d2f2d62a630baac46677f9ad6743b3b689", + "sha256:f2d44c28e4724f1c5ff6e566bbe1ab731bd57458bd219072aa146bd43a4e78d6", + "sha256:fadd7ac4009d74b2bdf2b678015ff6e315827517de21d0684fd31b9259a08fbc", + "sha256:fcb97049f8719d30fd155fe3f862410cb5edb3afd76ff0ae1ff60d76d0b5a3f8" + ], + "index": "pypi", + "version": "==0.13.0" + }, + "numpy": { + "hashes": [ + "sha256:020cdbee66ed46b671429c7265cf00d8ac91c046901c55684954c3958525dab2", + "sha256:0621f7daf973d34d18b4e4bafb210bbaf1ef5e0100b5fa750bd9cde84c7ac292", + "sha256:0792824ce2f7ea0c82ed2e4fecc29bb86bee0567a080dacaf2e0a01fe7654369", + "sha256:09aaee96c2cbdea95de76ecb8a586cb687d281c881f5f17bfc0fb7f5890f6b91", + "sha256:166b36197e9debc4e384e9c652ba60c0bacc216d0fc89e78f973a9760b503388", + "sha256:186ba67fad3c60dbe8a3abff3b67a91351100f2661c8e2a80364ae6279720299", + "sha256:306545e234503a24fe9ae95ebf84d25cba1fdc27db971aa2d9f1ab6bba19a9dd", + "sha256:436c8e9a4bdeeee84e3e59614d38c3dbd3235838a877af8c211cfcac8a80b8d3", + "sha256:4a873a8180479bc829313e8d9798d5234dfacfc2e8a7ac188418189bb8eafbd2", + "sha256:4acc65dd65da28060e206c8f27a573455ed724e6179941edb19f97e58161bb69", + "sha256:51be5f8c349fdd1a5568e72713a21f518e7d6707bcf8503b528b88d33b57dc68", + "sha256:546b7dd7e22f3c6861463bebb000646fa730e55df5ee4a0224408b5694cc6148", + "sha256:5671338034b820c8d58c81ad1dafc0ed5a00771a82fccc71d6438df00302094b", + "sha256:637c58b468a69869258b8ae26f4a4c6ff8abffd4a8334c830ffb63e0feefe99a", + "sha256:767254ad364991ccfc4d81b8152912e53e103ec192d1bb4ea6b1f5a7117040be", + "sha256:7d484292eaeb3e84a51432a94f53578689ffdea3f90e10c8b203a99be5af57d8", + "sha256:7f6bad22a791226d0a5c7c27a80a20e11cfe09ad5ef9084d4d3fc4a299cca505", + "sha256:86f737708b366c36b76e953c46ba5827d8c27b7a8c9d0f471810728e5a2fe57c", + "sha256:8c6adc33561bd1d46f81131d5352348350fc23df4d742bb246cdfca606ea1208", + "sha256:914b28d3215e0c721dc75db3ad6d62f51f630cb0c277e6b3bcb39519bed10bd8", + "sha256:b44e6a09afc12952a7d2a58ca0a2429ee0d49a4f89d83a0a11052da696440e49", + "sha256:bb0d9a1aaf5f1cb7967320e80690a1d7ff69f1d47ebc5a9bea013e3a21faec95", + "sha256:c0b45c8b65b79337dee5134d038346d30e109e9e2e9d43464a2970e5c0e93229", + "sha256:c2e698cb0c6dda9372ea98a0344245ee65bdc1c9dd939cceed6bb91256837896", + "sha256:c78a22e95182fb2e7874712433eaa610478a3caf86f28c621708d35fa4fd6e7f", + "sha256:e062aa24638bb5018b7841977c360d2f5917268d125c833a686b7cbabbec496c", + "sha256:e5e18e5b14a7560d8acf1c596688f4dfd19b4f2945b245a71e5af4ddb7422feb", + "sha256:eae430ecf5794cb7ae7fa3808740b015aa80747e5266153128ef055975a72b99", + "sha256:ee84ca3c58fe48b8ddafdeb1db87388dce2c3c3f701bf447b05e4cfcc3679112", + "sha256:f042f66d0b4ae6d48e70e28d487376204d3cbf43b84c03bac57e28dac6151581", + "sha256:f8db2f125746e44dce707dd44d4f4efeea8d7e2b43aace3f8d1f235cfa2733dd", + "sha256:f93fc78fe8bf15afe2b8d6b6499f1c73953169fad1e9a8dd086cdff3190e7fdf" + ], + "markers": "python_version < '3.10'", + "version": "==1.26.0" + }, + "packaging": { + "hashes": [ + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" + ], + "markers": "python_version >= '3.7'", + "version": "==23.1" + }, + "pandas": { + "hashes": [ + "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813", + "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792", + "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406", + "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373", + "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328", + "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996", + "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf", + "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6", + "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7", + "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc", + "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1", + "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23", + "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a", + "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51", + "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572", + "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31", + "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5", + "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a", + "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003", + "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d", + "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354", + "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee", + "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa", + "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0", + "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9", + "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae", + "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc" + ], + "markers": "python_version >= '3.8'", + "version": "==1.5.3" + }, + "parsimonious": { + "hashes": [ + "sha256:b2ad1ae63a2f65bd78f5e0a8ac510a98f3607a43f1db2a8d46636a5d9e4a30c1" + ], + "version": "==0.9.0" + }, + "parso": { + "hashes": [ + "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0", + "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75" + ], + "markers": "python_version >= '3.6'", + "version": "==0.8.3" + }, + "pathspec": { + "hashes": [ + "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20", + "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3" + ], + "markers": "python_version >= '3.7'", + "version": "==0.11.2" + }, + "pexpect": { + "hashes": [ + "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", + "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c" + ], + "markers": "sys_platform != 'win32'", + "version": "==4.8.0" + }, + "pickleshare": { + "hashes": [ + "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", + "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" + ], + "version": "==0.7.5" + }, + "platformdirs": { + "hashes": [ + "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d", + "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d" + ], + "markers": "python_version >= '3.7'", + "version": "==3.10.0" + }, + "pluggy": { + "hashes": [ + "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12", + "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7" + ], + "markers": "python_version >= '3.8'", + "version": "==1.3.0" + }, + "pre-commit": { + "hashes": [ + "sha256:6bbd5129a64cad4c0dfaeeb12cd8f7ea7e15b77028d985341478c8af3c759522", + "sha256:96d529a951f8b677f730a7212442027e8ba53f9b04d217c4c67dc56c393ad945" + ], + "index": "pypi", + "version": "==3.4.0" + }, + "prompt-toolkit": { + "hashes": [ + "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", + "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.0.39" + }, + "protobuf": { + "hashes": [ + "sha256:067f750169bc644da2e1ef18c785e85071b7c296f14ac53e0900e605da588719", + "sha256:12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d", + "sha256:1b182c7181a2891e8f7f3a1b5242e4ec54d1f42582485a896e4de81aa17540c2", + "sha256:20651f11b6adc70c0f29efbe8f4a94a74caf61b6200472a9aea6e19898f9fcf4", + "sha256:2da777d34b4f4f7613cdf85c70eb9a90b1fbef9d36ae4a0ccfe014b0b07906f1", + "sha256:3d42e9e4796a811478c783ef63dc85b5a104b44aaaca85d4864d5b886e4b05e3", + "sha256:6e514e8af0045be2b56e56ae1bb14f43ce7ffa0f68b1c793670ccbe2c4fc7d2b", + "sha256:b0271a701e6782880d65a308ba42bc43874dabd1a0a0f41f72d2dac3b57f8e76", + "sha256:ba53c2f04798a326774f0e53b9c759eaef4f6a568ea7072ec6629851c8435959", + "sha256:e29d79c913f17a60cf17c626f1041e5288e9885c8579832580209de8b75f2a52", + "sha256:f631bb982c5478e0c1c70eab383af74a84be66945ebf5dd6b06fc90079668d0b", + "sha256:f6ccbcf027761a2978c1406070c3788f6de4a4b2cc20800cc03d52df716ad675", + "sha256:f6f8dc65625dadaad0c8545319c2e2f0424fede988368893ca3844261342c11a" + ], + "markers": "python_version >= '3.7'", + "version": "==4.24.3" + }, + "ptyprocess": { + "hashes": [ + "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", + "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220" + ], + "version": "==0.7.0" + }, + "pure-eval": { + "hashes": [ + "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350", + "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3" + ], + "version": "==0.2.2" + }, + "py-cid": { + "hashes": [ + "sha256:22f432cc6fb68d12a9c35dbdc92c95484fc49e31dfcb9e0efb0082233c5394e3", + "sha256:7c48a6ee0bc50fd114d4b24849cd689a31d3ad5bdf8fa073bf68f846fd58c5da" + ], + "version": "==0.3.0" + }, + "py-ecc": { + "hashes": [ + "sha256:3fc8a79e38975e05dc443d25783fd69212a1ca854cc0efef071301a8f7d6ce1d", + "sha256:54e8aa4c30374fa62d582c599a99f352c153f2971352171318bd6910a643be0b" + ], + "markers": "python_version >= '3.6' and python_version < '4'", + "version": "==6.0.0" + }, + "py-evm": { + "hashes": [ + "sha256:1bf7b293faa70c03727358ae3e5cb0abf7282391461d9b52b82decd6ed18c2f7", + "sha256:d40b6ac950485111dc7ad7bd29e3f61e00d5f81dc919e8c2b3afca30f228dc05" + ], + "version": "==0.7.0a4" + }, + "py-geth": { + "hashes": [ + "sha256:1eb9c1d05b51133a6961889ec508cdcb19d24d32888704c4e034cae86a3accad", + "sha256:f3563e2de8e78599cb9c69ee5bf3bded858ac6cf59891a04177f2353c425fdb7" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==3.13.0" + }, + "py-multibase": { + "hashes": [ + "sha256:2677c1fafcc0ae15ddb9c7f444c5becc2530b3889124fd4fa2959ddfefb8c15b", + "sha256:d28a20efcbb61eec28f55827a0bf329c7cea80fffd933aecaea6ae8431267fe4" + ], + "version": "==1.0.3" + }, + "py-multicodec": { + "hashes": [ + "sha256:55b6bb53088a63e56c434cb11b29795e8805652bac43d50a8f2a9bcf5ca84e1f", + "sha256:83021ffe8c0e272d19b5b86bc5b39efa67c8e9f4735ce6cafdbc1ace767ec647" + ], + "version": "==0.2.1" + }, + "py-multihash": { + "hashes": [ + "sha256:a0602c99093587dfbf1634e2e8c7726de39374b0d68587a36093b4c237af6969", + "sha256:f0ade4de820afdc4b4aaa40464ec86c9da5cae3a4578cda2daab4b0eb7e5b18d" + ], + "version": "==0.2.3" + }, + "py-solc-x": { + "hashes": [ + "sha256:8f5caa4f54e227fc301e2e4c8aa868e869c2bc0c6636aa9e8115f8414bb891f9", + "sha256:d8b0bd2b04f47cff6e92181739d9e94e41b2d62f056900761c797fa5babc76b6" + ], + "markers": "python_version >= '3.6' and python_version < '4'", + "version": "==1.1.1" + }, + "pycodestyle": { + "hashes": [ + "sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0", + "sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8" + ], + "markers": "python_version >= '3.8'", + "version": "==2.11.0" + }, + "pycparser": { + "hashes": [ + "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", + "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + ], + "version": "==2.21" + }, + "pycryptodome": { + "hashes": [ + "sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6", + "sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810", + "sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a", + "sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db", + "sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33", + "sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5", + "sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551", + "sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa", + "sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4", + "sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405", + "sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc", + "sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997", + "sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb", + "sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e", + "sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9", + "sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f", + "sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e", + "sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34", + "sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631", + "sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c", + "sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde", + "sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7", + "sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa", + "sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0", + "sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea", + "sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e", + "sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400", + "sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270", + "sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f", + "sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1", + "sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434", + "sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49" + ], + "version": "==3.19.0" + }, + "pydantic": { + "hashes": [ + "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303", + "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe", + "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47", + "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494", + "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33", + "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86", + "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d", + "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c", + "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a", + "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565", + "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb", + "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62", + "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62", + "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0", + "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523", + "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d", + "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405", + "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f", + "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b", + "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718", + "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed", + "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb", + "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5", + "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc", + "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942", + "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe", + "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246", + "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350", + "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303", + "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09", + "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33", + "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8", + "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a", + "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1", + "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6", + "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d" + ], + "markers": "python_version >= '3.7'", + "version": "==1.10.12" + }, + "pyethash": { + "hashes": [ + "sha256:ff66319ce26b9d77df1f610942634dac9742e216f2c27b051c0a2c2dec9c2818" + ], + "version": "==0.1.27" + }, + "pyflakes": { + "hashes": [ + "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774", + "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc" + ], + "markers": "python_version >= '3.8'", + "version": "==3.1.0" + }, + "pygithub": { + "hashes": [ + "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9", + "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217" + ], + "markers": "python_version >= '3.7'", + "version": "==1.59.1" + }, + "pygments": { + "hashes": [ + "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", + "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29" + ], + "markers": "python_version >= '3.7'", + "version": "==2.16.1" + }, + "pyjwt": { + "extras": [ + "crypto" + ], + "hashes": [ + "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de", + "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320" + ], + "markers": "python_version >= '3.7'", + "version": "==2.8.0" + }, + "pynacl": { + "hashes": [ + "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858", + "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d", + "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93", + "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1", + "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92", + "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff", + "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba", + "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394", + "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b", + "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543" + ], + "markers": "python_version >= '3.6'", + "version": "==1.5.0" + }, + "pyproject-api": { + "hashes": [ + "sha256:1817dc018adc0d1ff9ca1ed8c60e1623d5aaca40814b953af14a9cf9a5cae538", + "sha256:4c0116d60476b0786c88692cf4e325a9814965e2469c5998b830bba16b183675" + ], + "markers": "python_version >= '3.8'", + "version": "==1.6.1" + }, + "pytest": { + "hashes": [ + "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002", + "sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069" + ], + "markers": "python_version >= '3.7'", + "version": "==7.4.2" + }, + "python-baseconv": { + "hashes": [ + "sha256:0539f8bd0464013b05ad62e0a1673f0ac9086c76b43ebf9f833053527cd9931b" + ], + "version": "==1.2.2" + }, + "python-dateutil": { + "hashes": [ + "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", + "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==2.8.2" + }, + "pytz": { + "hashes": [ + "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b", + "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7" + ], + "version": "==2023.3.post1" + }, + "pyunormalize": { + "hashes": [ + "sha256:e63fdba0d85ea04579dde2fc29a072dba773dcae600b04faf6cc90714c8b1302" + ], + "markers": "python_version >= '3.6'", + "version": "==15.0.0" + }, + "pyyaml": { + "hashes": [ + "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", + "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", + "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", + "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", + "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", + "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", + "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", + "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", + "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", + "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", + "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", + "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", + "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", + "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", + "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", + "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", + "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", + "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", + "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", + "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", + "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", + "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", + "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", + "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", + "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", + "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", + "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", + "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", + "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", + "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", + "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", + "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", + "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", + "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", + "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", + "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", + "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", + "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", + "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", + "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", + "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", + "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", + "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", + "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", + "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", + "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", + "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", + "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", + "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", + "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" + ], + "markers": "python_version >= '3.6'", + "version": "==6.0.1" + }, + "referencing": { + "hashes": [ + "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf", + "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0" + ], + "markers": "python_version >= '3.8'", + "version": "==0.30.2" + }, + "regex": { + "hashes": [ + "sha256:0085da0f6c6393428bf0d9c08d8b1874d805bb55e17cb1dfa5ddb7cfb11140bf", + "sha256:06c57e14ac723b04458df5956cfb7e2d9caa6e9d353c0b4c7d5d54fcb1325c46", + "sha256:09b7f4c66aa9d1522b06e31a54f15581c37286237208df1345108fcf4e050c18", + "sha256:0c59122ceccb905a941fb23b087b8eafc5290bf983ebcb14d2301febcbe199c7", + "sha256:1005c60ed7037be0d9dea1f9c53cc42f836188227366370867222bda4c3c6bd7", + "sha256:14898830f0a0eb67cae2bbbc787c1a7d6e34ecc06fbd39d3af5fe29a4468e2c9", + "sha256:14dc6f2d88192a67d708341f3085df6a4f5a0c7b03dec08d763ca2cd86e9f559", + "sha256:1e7d84d64c84ad97bf06f3c8cb5e48941f135ace28f450d86af6b6512f1c9a71", + "sha256:2162ae2eb8b079622176a81b65d486ba50b888271302190870b8cc488587d280", + "sha256:22283c769a7b01c8ac355d5be0715bf6929b6267619505e289f792b01304d898", + "sha256:239c3c2a339d3b3ddd51c2daef10874410917cd2b998f043c13e2084cb191684", + "sha256:293352710172239bf579c90a9864d0df57340b6fd21272345222fb6371bf82b3", + "sha256:2ae54a338191e1356253e7883d9d19f8679b6143703086245fb14d1f20196be9", + "sha256:2e73e5243af12d9cd6a9d6a45a43570dbe2e5b1cdfc862f5ae2b031e44dd95a8", + "sha256:2e9216e0d2cdce7dbc9be48cb3eacb962740a09b011a116fd7af8c832ab116ca", + "sha256:3026cbcf11d79095a32d9a13bbc572a458727bd5b1ca332df4a79faecd45281c", + "sha256:3611576aff55918af2697410ff0293d6071b7e00f4b09e005d614686ac4cd57c", + "sha256:3ae646c35cb9f820491760ac62c25b6d6b496757fda2d51be429e0e7b67ae0ab", + "sha256:3b8e6ea6be6d64104d8e9afc34c151926f8182f84e7ac290a93925c0db004bfd", + "sha256:3d370ff652323c5307d9c8e4c62efd1956fb08051b0e9210212bc51168b4ff56", + "sha256:3f7454aa427b8ab9101f3787eb178057c5250478e39b99540cfc2b889c7d0586", + "sha256:40f029d73b10fac448c73d6eb33d57b34607f40116e9f6e9f0d32e9229b147d7", + "sha256:423adfa872b4908843ac3e7a30f957f5d5282944b81ca0a3b8a7ccbbfaa06103", + "sha256:4873ef92e03a4309b3ccd8281454801b291b689f6ad45ef8c3658b6fa761d7ac", + "sha256:48c640b99213643d141550326f34f0502fedb1798adb3c9eb79650b1ecb2f177", + "sha256:4ae594c66f4a7e1ea67232a0846649a7c94c188d6c071ac0210c3e86a5f92109", + "sha256:4b694430b3f00eb02c594ff5a16db30e054c1b9589a043fe9174584c6efa8033", + "sha256:51d8ea2a3a1a8fe4f67de21b8b93757005213e8ac3917567872f2865185fa7fb", + "sha256:54de2619f5ea58474f2ac211ceea6b615af2d7e4306220d4f3fe690c91988a61", + "sha256:551ad543fa19e94943c5b2cebc54c73353ffff08228ee5f3376bd27b3d5b9800", + "sha256:5543c055d8ec7801901e1193a51570643d6a6ab8751b1f7dd9af71af467538bb", + "sha256:5cd9cd7170459b9223c5e592ac036e0704bee765706445c353d96f2890e816c8", + "sha256:5ec4b3f0aebbbe2fc0134ee30a791af522a92ad9f164858805a77442d7d18570", + "sha256:67ecd894e56a0c6108ec5ab1d8fa8418ec0cff45844a855966b875d1039a2e34", + "sha256:6ab2ed84bf0137927846b37e882745a827458689eb969028af8032b1b3dac78e", + "sha256:704f63b774218207b8ccc6c47fcef5340741e5d839d11d606f70af93ee78e4d4", + "sha256:7098c524ba9f20717a56a8d551d2ed491ea89cbf37e540759ed3b776a4f8d6eb", + "sha256:7aed90a72fc3654fba9bc4b7f851571dcc368120432ad68b226bd593f3f6c0b7", + "sha256:7ce606c14bb195b0e5108544b540e2c5faed6843367e4ab3deb5c6aa5e681208", + "sha256:7eb95fe8222932c10d4436e7a6f7c99991e3fdd9f36c949eff16a69246dee2dc", + "sha256:80b80b889cb767cc47f31d2b2f3dec2db8126fbcd0cff31b3925b4dc6609dcdb", + "sha256:82cd0a69cd28f6cc3789cc6adeb1027f79526b1ab50b1f6062bbc3a0ccb2dbc3", + "sha256:83215147121e15d5f3a45d99abeed9cf1fe16869d5c233b08c56cdf75f43a504", + "sha256:88900f521c645f784260a8d346e12a1590f79e96403971241e64c3a265c8ecdb", + "sha256:91129ff1bb0619bc1f4ad19485718cc623a2dc433dff95baadbf89405c7f6b57", + "sha256:920974009fb37b20d32afcdf0227a2e707eb83fe418713f7a8b7de038b870d0b", + "sha256:9233ac249b354c54146e392e8a451e465dd2d967fc773690811d3a8c240ac601", + "sha256:941460db8fe3bd613db52f05259c9336f5a47ccae7d7def44cc277184030a116", + "sha256:942f8b1f3b223638b02df7df79140646c03938d488fbfb771824f3d05fc083a8", + "sha256:964b16dcc10c79a4a2be9f1273fcc2684a9eedb3906439720598029a797b46e6", + "sha256:9691a549c19c22d26a4f3b948071e93517bdf86e41b81d8c6ac8a964bb71e5a6", + "sha256:96979d753b1dc3b2169003e1854dc67bfc86edf93c01e84757927f810b8c3c93", + "sha256:987b9ac04d0b38ef4f89fbc035e84a7efad9cdd5f1e29024f9289182c8d99e09", + "sha256:988631b9d78b546e284478c2ec15c8a85960e262e247b35ca5eaf7ee22f6050a", + "sha256:9a96edd79661e93327cfeac4edec72a4046e14550a1d22aa0dd2e3ca52aec921", + "sha256:9b7408511fca48a82a119d78a77c2f5eb1b22fe88b0d2450ed0756d194fe7a9a", + "sha256:9dd6082f4e2aec9b6a0927202c85bc1b09dcab113f97265127c1dc20e2e32495", + "sha256:a2ad5add903eb7cdde2b7c64aaca405f3957ab34f16594d2b78d53b8b1a6a7d6", + "sha256:a8c65c17aed7e15a0c824cdc63a6b104dfc530f6fa8cb6ac51c437af52b481c7", + "sha256:aadf28046e77a72f30dcc1ab185639e8de7f4104b8cb5c6dfa5d8ed860e57236", + "sha256:b076da1ed19dc37788f6a934c60adf97bd02c7eea461b73730513921a85d4235", + "sha256:b2aeab3895d778155054abea5238d0eb9a72e9242bd4b43f42fd911ef9a13470", + "sha256:b82edc98d107cbc7357da7a5a695901b47d6eb0420e587256ba3ad24b80b7d0b", + "sha256:b8a0ccc8f2698f120e9e5742f4b38dc944c38744d4bdfc427616f3a163dd9de5", + "sha256:b993b6f524d1e274a5062488a43e3f9f8764ee9745ccd8e8193df743dbe5ee61", + "sha256:bb34d1605f96a245fc39790a117ac1bac8de84ab7691637b26ab2c5efb8f228c", + "sha256:bd3366aceedf274f765a3a4bc95d6cd97b130d1dda524d8f25225d14123c01db", + "sha256:c12f6f67495ea05c3d542d119d270007090bad5b843f642d418eb601ec0fa7be", + "sha256:c662a4cbdd6280ee56f841f14620787215a171c4e2d1744c9528bed8f5816c96", + "sha256:c884d1a59e69e03b93cf0dfee8794c63d7de0ee8f7ffb76e5f75be8131b6400a", + "sha256:ca339088839582d01654e6f83a637a4b8194d0960477b9769d2ff2cfa0fa36d2", + "sha256:cd2b6c5dfe0929b6c23dde9624483380b170b6e34ed79054ad131b20203a1a63", + "sha256:ce0f9fbe7d295f9922c0424a3637b88c6c472b75eafeaff6f910494a1fa719ef", + "sha256:cf0633e4a1b667bfe0bb10b5e53fe0d5f34a6243ea2530eb342491f1adf4f739", + "sha256:cf9273e96f3ee2ac89ffcb17627a78f78e7516b08f94dc435844ae72576a276e", + "sha256:d909b5a3fff619dc7e48b6b1bedc2f30ec43033ba7af32f936c10839e81b9217", + "sha256:d9b6627408021452dcd0d2cdf8da0534e19d93d070bfa8b6b4176f99711e7f90", + "sha256:de35342190deb7b866ad6ba5cbcccb2d22c0487ee0cbb251efef0843d705f0d4", + "sha256:e51c80c168074faa793685656c38eb7a06cbad7774c8cbc3ea05552d615393d8", + "sha256:e6bd1e9b95bc5614a7a9c9c44fde9539cba1c823b43a9f7bc11266446dd568e3", + "sha256:e7a9aaa5a1267125eef22cef3b63484c3241aaec6f48949b366d26c7250e0357", + "sha256:e951d1a8e9963ea51efd7f150450803e3b95db5939f994ad3d5edac2b6f6e2b4", + "sha256:e9941a4ada58f6218694f382e43fdd256e97615db9da135e77359da257a7168b", + "sha256:f0640913d2c1044d97e30d7c41728195fc37e54d190c5385eacb52115127b882", + "sha256:f0ccf3e01afeb412a1a9993049cb160d0352dba635bbca7762b2dc722aa5742a", + "sha256:f2181c20ef18747d5f4a7ea513e09ea03bdd50884a11ce46066bb90fe4213675", + "sha256:f2200e00b62568cfd920127782c61bc1c546062a879cdc741cfcc6976668dfcf", + "sha256:fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e" + ], + "markers": "python_version >= '3.6'", + "version": "==2023.8.8" + }, + "requests": { + "hashes": [ + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" + ], + "markers": "python_version >= '3.7'", + "version": "==2.31.0" + }, + "rich": { + "hashes": [ + "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e", + "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0" + ], + "markers": "python_full_version >= '3.6.3' and python_full_version < '4.0.0'", + "version": "==12.6.0" + }, + "rlp": { + "hashes": [ + "sha256:63b0465d2948cd9f01de449d7adfb92d207c1aef3982f20310f8009be4a507e8", + "sha256:d2a963225b3f26795c5b52310e0871df9824af56823d739511583ef459895a7d" + ], + "version": "==3.0.0" + }, + "rpds-py": { + "hashes": [ + "sha256:015de2ce2af1586ff5dc873e804434185199a15f7d96920ce67e50604592cae9", + "sha256:061c3ff1f51ecec256e916cf71cc01f9975af8fb3af9b94d3c0cc8702cfea637", + "sha256:08a80cf4884920863623a9ee9a285ee04cef57ebedc1cc87b3e3e0f24c8acfe5", + "sha256:09362f86ec201288d5687d1dc476b07bf39c08478cde837cb710b302864e7ec9", + "sha256:0bb4f48bd0dd18eebe826395e6a48b7331291078a879295bae4e5d053be50d4c", + "sha256:106af1653007cc569d5fbb5f08c6648a49fe4de74c2df814e234e282ebc06957", + "sha256:11fdd1192240dda8d6c5d18a06146e9045cb7e3ba7c06de6973000ff035df7c6", + "sha256:16a472300bc6c83fe4c2072cc22b3972f90d718d56f241adabc7ae509f53f154", + "sha256:176287bb998fd1e9846a9b666e240e58f8d3373e3bf87e7642f15af5405187b8", + "sha256:177914f81f66c86c012311f8c7f46887ec375cfcfd2a2f28233a3053ac93a569", + "sha256:177c9dd834cdf4dc39c27436ade6fdf9fe81484758885f2d616d5d03c0a83bd2", + "sha256:187700668c018a7e76e89424b7c1042f317c8df9161f00c0c903c82b0a8cac5c", + "sha256:1d9b5ee46dcb498fa3e46d4dfabcb531e1f2e76b477e0d99ef114f17bbd38453", + "sha256:22da15b902f9f8e267020d1c8bcfc4831ca646fecb60254f7bc71763569f56b1", + "sha256:24cd91a03543a0f8d09cb18d1cb27df80a84b5553d2bd94cba5979ef6af5c6e7", + "sha256:255f1a10ae39b52122cce26ce0781f7a616f502feecce9e616976f6a87992d6b", + "sha256:271c360fdc464fe6a75f13ea0c08ddf71a321f4c55fc20a3fe62ea3ef09df7d9", + "sha256:2ed83d53a8c5902ec48b90b2ac045e28e1698c0bea9441af9409fc844dc79496", + "sha256:2f3e1867dd574014253b4b8f01ba443b9c914e61d45f3674e452a915d6e929a3", + "sha256:35fbd23c1c8732cde7a94abe7fb071ec173c2f58c0bd0d7e5b669fdfc80a2c7b", + "sha256:37d0c59548ae56fae01c14998918d04ee0d5d3277363c10208eef8c4e2b68ed6", + "sha256:39d05e65f23a0fe897b6ac395f2a8d48c56ac0f583f5d663e0afec1da89b95da", + "sha256:3ad59efe24a4d54c2742929001f2d02803aafc15d6d781c21379e3f7f66ec842", + "sha256:3aed39db2f0ace76faa94f465d4234aac72e2f32b009f15da6492a561b3bbebd", + "sha256:3bbac1953c17252f9cc675bb19372444aadf0179b5df575ac4b56faaec9f6294", + "sha256:40bc802a696887b14c002edd43c18082cb7b6f9ee8b838239b03b56574d97f71", + "sha256:42f712b4668831c0cd85e0a5b5a308700fe068e37dcd24c0062904c4e372b093", + "sha256:448a66b8266de0b581246ca7cd6a73b8d98d15100fb7165974535fa3b577340e", + "sha256:485301ee56ce87a51ccb182a4b180d852c5cb2b3cb3a82f7d4714b4141119d8c", + "sha256:485747ee62da83366a44fbba963c5fe017860ad408ccd6cd99aa66ea80d32b2e", + "sha256:4cf0855a842c5b5c391dd32ca273b09e86abf8367572073bd1edfc52bc44446b", + "sha256:4eca20917a06d2fca7628ef3c8b94a8c358f6b43f1a621c9815243462dcccf97", + "sha256:4ed172d0c79f156c1b954e99c03bc2e3033c17efce8dd1a7c781bc4d5793dfac", + "sha256:5267cfda873ad62591b9332fd9472d2409f7cf02a34a9c9cb367e2c0255994bf", + "sha256:52b5cbc0469328e58180021138207e6ec91d7ca2e037d3549cc9e34e2187330a", + "sha256:53d7a3cd46cdc1689296348cb05ffd4f4280035770aee0c8ead3bbd4d6529acc", + "sha256:563646d74a4b4456d0cf3b714ca522e725243c603e8254ad85c3b59b7c0c4bf0", + "sha256:570cc326e78ff23dec7f41487aa9c3dffd02e5ee9ab43a8f6ccc3df8f9327623", + "sha256:5aca759ada6b1967fcfd4336dcf460d02a8a23e6abe06e90ea7881e5c22c4de6", + "sha256:5de11c041486681ce854c814844f4ce3282b6ea1656faae19208ebe09d31c5b8", + "sha256:5e271dd97c7bb8eefda5cca38cd0b0373a1fea50f71e8071376b46968582af9b", + "sha256:642ed0a209ced4be3a46f8cb094f2d76f1f479e2a1ceca6de6346a096cd3409d", + "sha256:6446002739ca29249f0beaaf067fcbc2b5aab4bc7ee8fb941bd194947ce19aff", + "sha256:691d50c99a937709ac4c4cd570d959a006bd6a6d970a484c84cc99543d4a5bbb", + "sha256:69b857a7d8bd4f5d6e0db4086da8c46309a26e8cefdfc778c0c5cc17d4b11e08", + "sha256:6ac3fefb0d168c7c6cab24fdfc80ec62cd2b4dfd9e65b84bdceb1cb01d385c33", + "sha256:6c9141af27a4e5819d74d67d227d5047a20fa3c7d4d9df43037a955b4c748ec5", + "sha256:7170cbde4070dc3c77dec82abf86f3b210633d4f89550fa0ad2d4b549a05572a", + "sha256:763ad59e105fca09705d9f9b29ecffb95ecdc3b0363be3bb56081b2c6de7977a", + "sha256:77076bdc8776a2b029e1e6ffbe6d7056e35f56f5e80d9dc0bad26ad4a024a762", + "sha256:7cd020b1fb41e3ab7716d4d2c3972d4588fdfbab9bfbbb64acc7078eccef8860", + "sha256:821392559d37759caa67d622d0d2994c7a3f2fb29274948ac799d496d92bca73", + "sha256:829e91f3a8574888b73e7a3feb3b1af698e717513597e23136ff4eba0bc8387a", + "sha256:850c272e0e0d1a5c5d73b1b7871b0a7c2446b304cec55ccdb3eaac0d792bb065", + "sha256:87d9b206b1bd7a0523375dc2020a6ce88bca5330682ae2fe25e86fd5d45cea9c", + "sha256:8bd01ff4032abaed03f2db702fa9a61078bee37add0bd884a6190b05e63b028c", + "sha256:8d54bbdf5d56e2c8cf81a1857250f3ea132de77af543d0ba5dce667183b61fec", + "sha256:8efaeb08ede95066da3a3e3c420fcc0a21693fcd0c4396d0585b019613d28515", + "sha256:8f94fdd756ba1f79f988855d948ae0bad9ddf44df296770d9a58c774cfbcca72", + "sha256:95cde244e7195b2c07ec9b73fa4c5026d4a27233451485caa1cd0c1b55f26dbd", + "sha256:975382d9aa90dc59253d6a83a5ca72e07f4ada3ae3d6c0575ced513db322b8ec", + "sha256:9dd9d9d9e898b9d30683bdd2b6c1849449158647d1049a125879cb397ee9cd12", + "sha256:a019a344312d0b1f429c00d49c3be62fa273d4a1094e1b224f403716b6d03be1", + "sha256:a4d9bfda3f84fc563868fe25ca160c8ff0e69bc4443c5647f960d59400ce6557", + "sha256:a657250807b6efd19b28f5922520ae002a54cb43c2401e6f3d0230c352564d25", + "sha256:a771417c9c06c56c9d53d11a5b084d1de75de82978e23c544270ab25e7c066ff", + "sha256:aad6ed9e70ddfb34d849b761fb243be58c735be6a9265b9060d6ddb77751e3e8", + "sha256:ae87137951bb3dc08c7d8bfb8988d8c119f3230731b08a71146e84aaa919a7a9", + "sha256:af247fd4f12cca4129c1b82090244ea5a9d5bb089e9a82feb5a2f7c6a9fe181d", + "sha256:b5d4bdd697195f3876d134101c40c7d06d46c6ab25159ed5cbd44105c715278a", + "sha256:b9255e7165083de7c1d605e818025e8860636348f34a79d84ec533546064f07e", + "sha256:c22211c165166de6683de8136229721f3d5c8606cc2c3d1562da9a3a5058049c", + "sha256:c55f9821f88e8bee4b7a72c82cfb5ecd22b6aad04033334f33c329b29bfa4da0", + "sha256:c7aed97f2e676561416c927b063802c8a6285e9b55e1b83213dfd99a8f4f9e48", + "sha256:cd2163f42868865597d89399a01aa33b7594ce8e2c4a28503127c81a2f17784e", + "sha256:ce5e7504db95b76fc89055c7f41e367eaadef5b1d059e27e1d6eabf2b55ca314", + "sha256:cff7351c251c7546407827b6a37bcef6416304fc54d12d44dbfecbb717064717", + "sha256:d27aa6bbc1f33be920bb7adbb95581452cdf23005d5611b29a12bb6a3468cc95", + "sha256:d3b52a67ac66a3a64a7e710ba629f62d1e26ca0504c29ee8cbd99b97df7079a8", + "sha256:de61e424062173b4f70eec07e12469edde7e17fa180019a2a0d75c13a5c5dc57", + "sha256:e10e6a1ed2b8661201e79dff5531f8ad4cdd83548a0f81c95cf79b3184b20c33", + "sha256:e1a0ffc39f51aa5f5c22114a8f1906b3c17eba68c5babb86c5f77d8b1bba14d1", + "sha256:e22491d25f97199fc3581ad8dd8ce198d8c8fdb8dae80dea3512e1ce6d5fa99f", + "sha256:e626b864725680cd3904414d72e7b0bd81c0e5b2b53a5b30b4273034253bb41f", + "sha256:e8c71ea77536149e36c4c784f6d420ffd20bea041e3ba21ed021cb40ce58e2c9", + "sha256:e8d0f0eca087630d58b8c662085529781fd5dc80f0a54eda42d5c9029f812599", + "sha256:ea65b59882d5fa8c74a23f8960db579e5e341534934f43f3b18ec1839b893e41", + "sha256:ea93163472db26ac6043e8f7f93a05d9b59e0505c760da2a3cd22c7dd7111391", + "sha256:eab75a8569a095f2ad470b342f2751d9902f7944704f0571c8af46bede438475", + "sha256:ed8313809571a5463fd7db43aaca68ecb43ca7a58f5b23b6e6c6c5d02bdc7882", + "sha256:ef5fddfb264e89c435be4adb3953cef5d2936fdeb4463b4161a6ba2f22e7b740", + "sha256:ef750a20de1b65657a1425f77c525b0183eac63fe7b8f5ac0dd16f3668d3e64f", + "sha256:efb9ece97e696bb56e31166a9dd7919f8f0c6b31967b454718c6509f29ef6fee", + "sha256:f4c179a7aeae10ddf44c6bac87938134c1379c49c884529f090f9bf05566c836", + "sha256:f602881d80ee4228a2355c68da6b296a296cd22bbb91e5418d54577bbf17fa7c", + "sha256:fc2200e79d75b5238c8d69f6a30f8284290c777039d331e7340b6c17cad24a5a", + "sha256:fcc1ebb7561a3e24a6588f7c6ded15d80aec22c66a070c757559b57b17ffd1cb" + ], + "markers": "python_version >= '3.8'", + "version": "==0.10.3" + }, + "safe-pysha3": { + "hashes": [ + "sha256:e429146b1edd198b2ca934a2046a65656c5d31b0ec894bbd6055127f4deaff17" + ], + "version": "==1.0.4" + }, + "semantic-version": { + "hashes": [ + "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", + "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177" + ], + "markers": "python_version >= '2.7'", + "version": "==2.10.0" + }, + "setuptools": { + "hashes": [ + "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", + "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" + ], + "markers": "python_version >= '3.8'", + "version": "==68.2.2" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", + "version": "==1.16.0" + }, + "sortedcontainers": { + "hashes": [ + "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", + "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" + ], + "version": "==2.4.0" + }, + "sqlalchemy": { + "hashes": [ + "sha256:014794b60d2021cc8ae0f91d4d0331fe92691ae5467a00841f7130fe877b678e", + "sha256:0268256a34806e5d1c8f7ee93277d7ea8cc8ae391f487213139018b6805aeaf6", + "sha256:05b971ab1ac2994a14c56b35eaaa91f86ba080e9ad481b20d99d77f381bb6258", + "sha256:141675dae56522126986fa4ca713739d00ed3a6f08f3c2eb92c39c6dfec463ce", + "sha256:1e7dc99b23e33c71d720c4ae37ebb095bebebbd31a24b7d99dfc4753d2803ede", + "sha256:2e617727fe4091cedb3e4409b39368f424934c7faa78171749f704b49b4bb4ce", + "sha256:3cf229704074bce31f7f47d12883afee3b0a02bb233a0ba45ddbfe542939cca4", + "sha256:3eb7c03fe1cd3255811cd4e74db1ab8dca22074d50cd8937edf4ef62d758cdf4", + "sha256:3f7d57a7e140efe69ce2d7b057c3f9a595f98d0bbdfc23fd055efdfbaa46e3a5", + "sha256:419b1276b55925b5ac9b4c7044e999f1787c69761a3c9756dec6e5c225ceca01", + "sha256:44ac5c89b6896f4740e7091f4a0ff2e62881da80c239dd9408f84f75a293dae9", + "sha256:4615623a490e46be85fbaa6335f35cf80e61df0783240afe7d4f544778c315a9", + "sha256:50a69067af86ec7f11a8e50ba85544657b1477aabf64fa447fd3736b5a0a4f67", + "sha256:513fd5b6513d37e985eb5b7ed89da5fd9e72354e3523980ef00d439bc549c9e9", + "sha256:6ff3dc2f60dbf82c9e599c2915db1526d65415be323464f84de8db3e361ba5b9", + "sha256:73c079e21d10ff2be54a4699f55865d4b275fd6c8bd5d90c5b1ef78ae0197301", + "sha256:7614f1eab4336df7dd6bee05bc974f2b02c38d3d0c78060c5faa4cd1ca2af3b8", + "sha256:785e2f2c1cb50d0a44e2cdeea5fd36b5bf2d79c481c10f3a88a8be4cfa2c4615", + "sha256:7ca38746eac23dd7c20bec9278d2058c7ad662b2f1576e4c3dbfcd7c00cc48fa", + "sha256:7f0c4ee579acfe6c994637527c386d1c22eb60bc1c1d36d940d8477e482095d4", + "sha256:87bf91ebf15258c4701d71dcdd9c4ba39521fb6a37379ea68088ce8cd869b446", + "sha256:89e274604abb1a7fd5c14867a412c9d49c08ccf6ce3e1e04fffc068b5b6499d4", + "sha256:8c323813963b2503e54d0944813cd479c10c636e3ee223bcbd7bd478bf53c178", + "sha256:a95aa0672e3065d43c8aa80080cdd5cc40fe92dc873749e6c1cf23914c4b83af", + "sha256:af520a730d523eab77d754f5cf44cc7dd7ad2d54907adeb3233177eeb22f271b", + "sha256:b19ae41ef26c01a987e49e37c77b9ad060c59f94d3b3efdfdbf4f3daaca7b5fe", + "sha256:b4eae01faee9f2b17f08885e3f047153ae0416648f8e8c8bd9bc677c5ce64be9", + "sha256:b69f1f754d92eb1cc6b50938359dead36b96a1dcf11a8670bff65fd9b21a4b09", + "sha256:b977bfce15afa53d9cf6a632482d7968477625f030d86a109f7bdfe8ce3c064a", + "sha256:bf8eebccc66829010f06fbd2b80095d7872991bfe8415098b9fe47deaaa58063", + "sha256:c111cd40910ffcb615b33605fc8f8e22146aeb7933d06569ac90f219818345ef", + "sha256:c2d494b6a2a2d05fb99f01b84cc9af9f5f93bf3e1e5dbdafe4bed0c2823584c1", + "sha256:c9cba4e7369de663611ce7460a34be48e999e0bbb1feb9130070f0685e9a6b66", + "sha256:cca720d05389ab1a5877ff05af96551e58ba65e8dc65582d849ac83ddde3e231", + "sha256:ccb99c3138c9bde118b51a289d90096a3791658da9aea1754667302ed6564f6e", + "sha256:d59cb9e20d79686aa473e0302e4a82882d7118744d30bb1dfb62d3c47141b3ec", + "sha256:e36339a68126ffb708dc6d1948161cea2a9e85d7d7b0c54f6999853d70d44430", + "sha256:ea7da25ee458d8f404b93eb073116156fd7d8c2a776d8311534851f28277b4ce", + "sha256:f9fefd6298433b6e9188252f3bff53b9ff0443c8fde27298b8a2b19f6617eeb9", + "sha256:fb87f763b5d04a82ae84ccff25554ffd903baafba6698e18ebaf32561f2fe4aa", + "sha256:fc6b15465fabccc94bf7e38777d665b6a4f95efd1725049d6184b3a39fd54880" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.21" + }, + "stack-data": { + "hashes": [ + "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815", + "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8" + ], + "version": "==0.6.2" + }, + "tomli": { + "hashes": [ + "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", + "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" + ], + "markers": "python_version < '3.11'", + "version": "==2.0.1" + }, + "toolz": { + "hashes": [ + "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f", + "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194" + ], + "markers": "python_version >= '3.5'", + "version": "==0.12.0" + }, + "tox": { + "hashes": [ + "sha256:5039f68276461fae6a9452a3b2c7295798f00a0e92edcd9a3b78ba1a73577951", + "sha256:599af5e5bb0cad0148ac1558a0b66f8fff219ef88363483b8d92a81e4246f28f" + ], + "index": "pypi", + "version": "==4.11.3" + }, + "tqdm": { + "hashes": [ + "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386", + "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7" + ], + "markers": "python_version >= '3.7'", + "version": "==4.66.1" + }, + "traitlets": { + "hashes": [ + "sha256:07ab9c5bf8a0499fd7b088ba51be899c90ffc936ffc797d7b6907fc516bcd116", + "sha256:db9c4aa58139c3ba850101913915c042bdba86f7c8a0dda1c6f7f92c5da8e542" + ], + "markers": "python_version >= '3.8'", + "version": "==5.10.1" + }, + "trie": { + "hashes": [ + "sha256:1c7fa6f4a3088e083764cf4e32a07a69c672fcf15ad922e03f51158d64a855cf", + "sha256:c1a5fc17b37a75008a4517e4f297ad8026dce777eb0eed63ee6335c66d7437b7" + ], + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==2.1.1" + }, + "typing-extensions": { + "hashes": [ + "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", + "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" + ], + "markers": "python_version < '3.11'", + "version": "==4.8.0" + }, + "urllib3": { + "hashes": [ + "sha256:13abf37382ea2ce6fb744d4dad67838eec857c9f4f57009891805e0b5e123594", + "sha256:ef16afa8ba34a1f989db38e1dbbe0c302e4289a47856990d0682e374563ce35e" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.5" + }, + "varint": { + "hashes": [ + "sha256:a6ecc02377ac5ee9d65a6a8ad45c9ff1dac8ccee19400a5950fb51d594214ca5" + ], + "version": "==1.0.2" + }, + "virtualenv": { + "hashes": [ + "sha256:b80039f280f4919c77b30f1c23294ae357c4c8701042086e3fc005963e4e537b", + "sha256:e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752" + ], + "markers": "python_version >= '3.7'", + "version": "==20.24.5" + }, + "watchdog": { + "hashes": [ + "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a", + "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100", + "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8", + "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc", + "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae", + "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41", + "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0", + "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f", + "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c", + "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9", + "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3", + "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709", + "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83", + "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759", + "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9", + "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3", + "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7", + "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f", + "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346", + "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674", + "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397", + "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96", + "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d", + "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a", + "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64", + "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44", + "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33" + ], + "markers": "python_version >= '3.7'", + "version": "==3.0.0" + }, + "wcwidth": { + "hashes": [ + "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e", + "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0" + ], + "version": "==0.2.6" + }, + "web3": { + "extras": [ + "tester" + ], + "hashes": [ + "sha256:070625a0da4f0fcac090fa95186e0b865a1bbc43efb78fd2ee805f7bf9cd8986", + "sha256:ea89f8a6ee74b74c3ff21954eafe00ec914365adb904c6c374f559bc46d4a61c" + ], + "markers": "python_full_version >= '3.7.2'", + "version": "==6.10.0" + }, + "websockets": { + "hashes": [ + "sha256:01f5567d9cf6f502d655151645d4e8b72b453413d3819d2b6f1185abc23e82dd", + "sha256:03aae4edc0b1c68498f41a6772d80ac7c1e33c06c6ffa2ac1c27a07653e79d6f", + "sha256:0ac56b661e60edd453585f4bd68eb6a29ae25b5184fd5ba51e97652580458998", + "sha256:0ee68fe502f9031f19d495dae2c268830df2760c0524cbac5d759921ba8c8e82", + "sha256:1553cb82942b2a74dd9b15a018dce645d4e68674de2ca31ff13ebc2d9f283788", + "sha256:1a073fc9ab1c8aff37c99f11f1641e16da517770e31a37265d2755282a5d28aa", + "sha256:1d2256283fa4b7f4c7d7d3e84dc2ece74d341bce57d5b9bf385df109c2a1a82f", + "sha256:1d5023a4b6a5b183dc838808087033ec5df77580485fc533e7dab2567851b0a4", + "sha256:1fdf26fa8a6a592f8f9235285b8affa72748dc12e964a5518c6c5e8f916716f7", + "sha256:2529338a6ff0eb0b50c7be33dc3d0e456381157a31eefc561771ee431134a97f", + "sha256:279e5de4671e79a9ac877427f4ac4ce93751b8823f276b681d04b2156713b9dd", + "sha256:2d903ad4419f5b472de90cd2d40384573b25da71e33519a67797de17ef849b69", + "sha256:332d126167ddddec94597c2365537baf9ff62dfcc9db4266f263d455f2f031cb", + "sha256:34fd59a4ac42dff6d4681d8843217137f6bc85ed29722f2f7222bd619d15e95b", + "sha256:3580dd9c1ad0701169e4d6fc41e878ffe05e6bdcaf3c412f9d559389d0c9e016", + "sha256:3ccc8a0c387629aec40f2fc9fdcb4b9d5431954f934da3eaf16cdc94f67dbfac", + "sha256:41f696ba95cd92dc047e46b41b26dd24518384749ed0d99bea0a941ca87404c4", + "sha256:42cc5452a54a8e46a032521d7365da775823e21bfba2895fb7b77633cce031bb", + "sha256:4841ed00f1026dfbced6fca7d963c4e7043aa832648671b5138008dc5a8f6d99", + "sha256:4b253869ea05a5a073ebfdcb5cb3b0266a57c3764cf6fe114e4cd90f4bfa5f5e", + "sha256:54c6e5b3d3a8936a4ab6870d46bdd6ec500ad62bde9e44462c32d18f1e9a8e54", + "sha256:619d9f06372b3a42bc29d0cd0354c9bb9fb39c2cbc1a9c5025b4538738dbffaf", + "sha256:6505c1b31274723ccaf5f515c1824a4ad2f0d191cec942666b3d0f3aa4cb4007", + "sha256:660e2d9068d2bedc0912af508f30bbeb505bbbf9774d98def45f68278cea20d3", + "sha256:6681ba9e7f8f3b19440921e99efbb40fc89f26cd71bf539e45d8c8a25c976dc6", + "sha256:68b977f21ce443d6d378dbd5ca38621755f2063d6fdb3335bda981d552cfff86", + "sha256:69269f3a0b472e91125b503d3c0b3566bda26da0a3261c49f0027eb6075086d1", + "sha256:6f1a3f10f836fab6ca6efa97bb952300b20ae56b409414ca85bff2ad241d2a61", + "sha256:7622a89d696fc87af8e8d280d9b421db5133ef5b29d3f7a1ce9f1a7bf7fcfa11", + "sha256:777354ee16f02f643a4c7f2b3eff8027a33c9861edc691a2003531f5da4f6bc8", + "sha256:84d27a4832cc1a0ee07cdcf2b0629a8a72db73f4cf6de6f0904f6661227f256f", + "sha256:8531fdcad636d82c517b26a448dcfe62f720e1922b33c81ce695d0edb91eb931", + "sha256:86d2a77fd490ae3ff6fae1c6ceaecad063d3cc2320b44377efdde79880e11526", + "sha256:88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016", + "sha256:8a34e13a62a59c871064dfd8ffb150867e54291e46d4a7cf11d02c94a5275bae", + "sha256:8c82f11964f010053e13daafdc7154ce7385ecc538989a354ccc7067fd7028fd", + "sha256:92b2065d642bf8c0a82d59e59053dd2fdde64d4ed44efe4870fa816c1232647b", + "sha256:97b52894d948d2f6ea480171a27122d77af14ced35f62e5c892ca2fae9344311", + "sha256:9d9acd80072abcc98bd2c86c3c9cd4ac2347b5a5a0cae7ed5c0ee5675f86d9af", + "sha256:9f59a3c656fef341a99e3d63189852be7084c0e54b75734cde571182c087b152", + "sha256:aa5003845cdd21ac0dc6c9bf661c5beddd01116f6eb9eb3c8e272353d45b3288", + "sha256:b16fff62b45eccb9c7abb18e60e7e446998093cdcb50fed33134b9b6878836de", + "sha256:b30c6590146e53149f04e85a6e4fcae068df4289e31e4aee1fdf56a0dead8f97", + "sha256:b58cbf0697721120866820b89f93659abc31c1e876bf20d0b3d03cef14faf84d", + "sha256:b67c6f5e5a401fc56394f191f00f9b3811fe843ee93f4a70df3c389d1adf857d", + "sha256:bceab846bac555aff6427d060f2fcfff71042dba6f5fca7dc4f75cac815e57ca", + "sha256:bee9fcb41db2a23bed96c6b6ead6489702c12334ea20a297aa095ce6d31370d0", + "sha256:c114e8da9b475739dde229fd3bc6b05a6537a88a578358bc8eb29b4030fac9c9", + "sha256:c1f0524f203e3bd35149f12157438f406eff2e4fb30f71221c8a5eceb3617b6b", + "sha256:c792ea4eabc0159535608fc5658a74d1a81020eb35195dd63214dcf07556f67e", + "sha256:c7f3cb904cce8e1be667c7e6fef4516b98d1a6a0635a58a57528d577ac18a128", + "sha256:d67ac60a307f760c6e65dad586f556dde58e683fab03323221a4e530ead6f74d", + "sha256:dcacf2c7a6c3a84e720d1bb2b543c675bf6c40e460300b628bab1b1efc7c034c", + "sha256:de36fe9c02995c7e6ae6efe2e205816f5f00c22fd1fbf343d4d18c3d5ceac2f5", + "sha256:def07915168ac8f7853812cc593c71185a16216e9e4fa886358a17ed0fd9fcf6", + "sha256:df41b9bc27c2c25b486bae7cf42fccdc52ff181c8c387bfd026624a491c2671b", + "sha256:e052b8467dd07d4943936009f46ae5ce7b908ddcac3fda581656b1b19c083d9b", + "sha256:e063b1865974611313a3849d43f2c3f5368093691349cf3c7c8f8f75ad7cb280", + "sha256:e1459677e5d12be8bbc7584c35b992eea142911a6236a3278b9b5ce3326f282c", + "sha256:e1a99a7a71631f0efe727c10edfba09ea6bee4166a6f9c19aafb6c0b5917d09c", + "sha256:e590228200fcfc7e9109509e4d9125eace2042fd52b595dd22bbc34bb282307f", + "sha256:e6316827e3e79b7b8e7d8e3b08f4e331af91a48e794d5d8b099928b6f0b85f20", + "sha256:e7837cb169eca3b3ae94cc5787c4fed99eef74c0ab9506756eea335e0d6f3ed8", + "sha256:e848f46a58b9fcf3d06061d17be388caf70ea5b8cc3466251963c8345e13f7eb", + "sha256:ed058398f55163a79bb9f06a90ef9ccc063b204bb346c4de78efc5d15abfe602", + "sha256:f2e58f2c36cc52d41f2659e4c0cbf7353e28c8c9e63e30d8c6d3494dc9fdedcf", + "sha256:f467ba0050b7de85016b43f5a22b46383ef004c4f672148a8abf32bc999a87f0", + "sha256:f61bdb1df43dc9c131791fbc2355535f9024b9a04398d3bd0684fc16ab07df74", + "sha256:fb06eea71a00a7af0ae6aefbb932fb8a7df3cb390cc217d51a9ad7343de1b8d0", + "sha256:ffd7dcaf744f25f82190856bc26ed81721508fc5cbf2a330751e135ff1283564" + ], + "markers": "python_version >= '3.7'", + "version": "==11.0.3" + }, + "wrapt": { + "hashes": [ + "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", + "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", + "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", + "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", + "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", + "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", + "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", + "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", + "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", + "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", + "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", + "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", + "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", + "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", + "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", + "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", + "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", + "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", + "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", + "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", + "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", + "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", + "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", + "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", + "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", + "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", + "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", + "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", + "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", + "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", + "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", + "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", + "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", + "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", + "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", + "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", + "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", + "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", + "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", + "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", + "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", + "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", + "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", + "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", + "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", + "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", + "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", + "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", + "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", + "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", + "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", + "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", + "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", + "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", + "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", + "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", + "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", + "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", + "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", + "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", + "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", + "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", + "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", + "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", + "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", + "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", + "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", + "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", + "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", + "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", + "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", + "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", + "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", + "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", + "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.15.0" + }, + "yarl": { + "hashes": [ + "sha256:04ab9d4b9f587c06d801c2abfe9317b77cdf996c65a90d5e84ecc45010823571", + "sha256:066c163aec9d3d073dc9ffe5dd3ad05069bcb03fcaab8d221290ba99f9f69ee3", + "sha256:13414591ff516e04fcdee8dc051c13fd3db13b673c7a4cb1350e6b2ad9639ad3", + "sha256:149ddea5abf329752ea5051b61bd6c1d979e13fbf122d3a1f9f0c8be6cb6f63c", + "sha256:159d81f22d7a43e6eabc36d7194cb53f2f15f498dbbfa8edc8a3239350f59fe7", + "sha256:1b1bba902cba32cdec51fca038fd53f8beee88b77efc373968d1ed021024cc04", + "sha256:22a94666751778629f1ec4280b08eb11815783c63f52092a5953faf73be24191", + "sha256:2a96c19c52ff442a808c105901d0bdfd2e28575b3d5f82e2f5fd67e20dc5f4ea", + "sha256:2b0738fb871812722a0ac2154be1f049c6223b9f6f22eec352996b69775b36d4", + "sha256:2c315df3293cd521033533d242d15eab26583360b58f7ee5d9565f15fee1bef4", + "sha256:32f1d071b3f362c80f1a7d322bfd7b2d11e33d2adf395cc1dd4df36c9c243095", + "sha256:3458a24e4ea3fd8930e934c129b676c27452e4ebda80fbe47b56d8c6c7a63a9e", + "sha256:38a3928ae37558bc1b559f67410df446d1fbfa87318b124bf5032c31e3447b74", + "sha256:3da8a678ca8b96c8606bbb8bfacd99a12ad5dd288bc6f7979baddd62f71c63ef", + "sha256:494053246b119b041960ddcd20fd76224149cfea8ed8777b687358727911dd33", + "sha256:50f33040f3836e912ed16d212f6cc1efb3231a8a60526a407aeb66c1c1956dde", + "sha256:52a25809fcbecfc63ac9ba0c0fb586f90837f5425edfd1ec9f3372b119585e45", + "sha256:53338749febd28935d55b41bf0bcc79d634881195a39f6b2f767870b72514caf", + "sha256:5415d5a4b080dc9612b1b63cba008db84e908b95848369aa1da3686ae27b6d2b", + "sha256:5610f80cf43b6202e2c33ba3ec2ee0a2884f8f423c8f4f62906731d876ef4fac", + "sha256:566185e8ebc0898b11f8026447eacd02e46226716229cea8db37496c8cdd26e0", + "sha256:56ff08ab5df8429901ebdc5d15941b59f6253393cb5da07b4170beefcf1b2528", + "sha256:59723a029760079b7d991a401386390c4be5bfec1e7dd83e25a6a0881859e716", + "sha256:5fcd436ea16fee7d4207c045b1e340020e58a2597301cfbcfdbe5abd2356c2fb", + "sha256:61016e7d582bc46a5378ffdd02cd0314fb8ba52f40f9cf4d9a5e7dbef88dee18", + "sha256:63c48f6cef34e6319a74c727376e95626f84ea091f92c0250a98e53e62c77c72", + "sha256:646d663eb2232d7909e6601f1a9107e66f9791f290a1b3dc7057818fe44fc2b6", + "sha256:662e6016409828ee910f5d9602a2729a8a57d74b163c89a837de3fea050c7582", + "sha256:674ca19cbee4a82c9f54e0d1eee28116e63bc6fd1e96c43031d11cbab8b2afd5", + "sha256:6a5883464143ab3ae9ba68daae8e7c5c95b969462bbe42e2464d60e7e2698368", + "sha256:6e7221580dc1db478464cfeef9b03b95c5852cc22894e418562997df0d074ccc", + "sha256:75df5ef94c3fdc393c6b19d80e6ef1ecc9ae2f4263c09cacb178d871c02a5ba9", + "sha256:783185c75c12a017cc345015ea359cc801c3b29a2966c2655cd12b233bf5a2be", + "sha256:822b30a0f22e588b32d3120f6d41e4ed021806418b4c9f0bc3048b8c8cb3f92a", + "sha256:8288d7cd28f8119b07dd49b7230d6b4562f9b61ee9a4ab02221060d21136be80", + "sha256:82aa6264b36c50acfb2424ad5ca537a2060ab6de158a5bd2a72a032cc75b9eb8", + "sha256:832b7e711027c114d79dffb92576acd1bd2decc467dec60e1cac96912602d0e6", + "sha256:838162460b3a08987546e881a2bfa573960bb559dfa739e7800ceeec92e64417", + "sha256:83fcc480d7549ccebe9415d96d9263e2d4226798c37ebd18c930fce43dfb9574", + "sha256:84e0b1599334b1e1478db01b756e55937d4614f8654311eb26012091be109d59", + "sha256:891c0e3ec5ec881541f6c5113d8df0315ce5440e244a716b95f2525b7b9f3608", + "sha256:8c2ad583743d16ddbdf6bb14b5cd76bf43b0d0006e918809d5d4ddf7bde8dd82", + "sha256:8c56986609b057b4839968ba901944af91b8e92f1725d1a2d77cbac6972b9ed1", + "sha256:8ea48e0a2f931064469bdabca50c2f578b565fc446f302a79ba6cc0ee7f384d3", + "sha256:8ec53a0ea2a80c5cd1ab397925f94bff59222aa3cf9c6da938ce05c9ec20428d", + "sha256:95d2ecefbcf4e744ea952d073c6922e72ee650ffc79028eb1e320e732898d7e8", + "sha256:9b3152f2f5677b997ae6c804b73da05a39daa6a9e85a512e0e6823d81cdad7cc", + "sha256:9bf345c3a4f5ba7f766430f97f9cc1320786f19584acc7086491f45524a551ac", + "sha256:a60347f234c2212a9f0361955007fcf4033a75bf600a33c88a0a8e91af77c0e8", + "sha256:a74dcbfe780e62f4b5a062714576f16c2f3493a0394e555ab141bf0d746bb955", + "sha256:a83503934c6273806aed765035716216cc9ab4e0364f7f066227e1aaea90b8d0", + "sha256:ac9bb4c5ce3975aeac288cfcb5061ce60e0d14d92209e780c93954076c7c4367", + "sha256:aff634b15beff8902d1f918012fc2a42e0dbae6f469fce134c8a0dc51ca423bb", + "sha256:b03917871bf859a81ccb180c9a2e6c1e04d2f6a51d953e6a5cdd70c93d4e5a2a", + "sha256:b124e2a6d223b65ba8768d5706d103280914d61f5cae3afbc50fc3dfcc016623", + "sha256:b25322201585c69abc7b0e89e72790469f7dad90d26754717f3310bfe30331c2", + "sha256:b7232f8dfbd225d57340e441d8caf8652a6acd06b389ea2d3222b8bc89cbfca6", + "sha256:b8cc1863402472f16c600e3e93d542b7e7542a540f95c30afd472e8e549fc3f7", + "sha256:b9a4e67ad7b646cd6f0938c7ebfd60e481b7410f574c560e455e938d2da8e0f4", + "sha256:be6b3fdec5c62f2a67cb3f8c6dbf56bbf3f61c0f046f84645cd1ca73532ea051", + "sha256:bf74d08542c3a9ea97bb8f343d4fcbd4d8f91bba5ec9d5d7f792dbe727f88938", + "sha256:c027a6e96ef77d401d8d5a5c8d6bc478e8042f1e448272e8d9752cb0aff8b5c8", + "sha256:c0c77533b5ed4bcc38e943178ccae29b9bcf48ffd1063f5821192f23a1bd27b9", + "sha256:c1012fa63eb6c032f3ce5d2171c267992ae0c00b9e164efe4d73db818465fac3", + "sha256:c3a53ba34a636a256d767c086ceb111358876e1fb6b50dfc4d3f4951d40133d5", + "sha256:d4e2c6d555e77b37288eaf45b8f60f0737c9efa3452c6c44626a5455aeb250b9", + "sha256:de119f56f3c5f0e2fb4dee508531a32b069a5f2c6e827b272d1e0ff5ac040333", + "sha256:e65610c5792870d45d7b68c677681376fcf9cc1c289f23e8e8b39c1485384185", + "sha256:e9fdc7ac0d42bc3ea78818557fab03af6181e076a2944f43c38684b4b6bed8e3", + "sha256:ee4afac41415d52d53a9833ebae7e32b344be72835bbb589018c9e938045a560", + "sha256:f364d3480bffd3aa566e886587eaca7c8c04d74f6e8933f3f2c996b7f09bee1b", + "sha256:f3b078dbe227f79be488ffcfc7a9edb3409d018e0952cf13f15fd6512847f3f7", + "sha256:f4e2d08f07a3d7d3e12549052eb5ad3eab1c349c53ac51c209a0e5991bbada78", + "sha256:f7a3d8146575e08c29ed1cd287068e6d02f1c7bdff8970db96683b9591b86ee7" + ], + "markers": "python_version >= '3.7'", + "version": "==1.9.2" + }, + "zipp": { + "hashes": [ + "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", + "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + ], + "markers": "python_version >= '3.8'", + "version": "==3.17.0" + } + }, + "develop": {} } diff --git a/requirements.txt b/requirements.txt index 5917a1bf..f7bab243 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,7 @@ aiohttp==3.8.5 ; python_version >= '3.6' aiosignal==1.3.1 ; python_version >= '3.7' ape-etherscan==0.6.10 +ape-infura==0.6.3 ape-polygon==0.6.5 ape-solidity==0.6.9 appnope==0.1.3 ; sys_platform == 'darwin' @@ -16,7 +17,7 @@ black==23.9.1 cached-property==1.5.2 cachetools==5.3.1 ; python_version >= '3.7' certifi==2023.7.22 ; python_version >= '3.6' -cffi==1.15.1 +cffi==1.16.0rc2 ; python_version >= '3.8' cfgv==3.4.0 ; python_version >= '3.8' chardet==5.2.0 ; python_version >= '3.7' charset-normalizer==3.2.0 ; python_full_version >= '3.7.0' @@ -24,7 +25,7 @@ click==8.1.7 ; python_version >= '3.7' coincurve==18.0.0 colorama==0.4.6 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' commonmark==0.9.1 -cryptography==41.0.3 +cryptography==41.0.4 cytoolz==0.12.2 ; implementation_name == 'cpython' dataclassy==0.11.1 ; python_version >= '3.6' decorator==5.1.1 ; python_version >= '3.5' @@ -43,7 +44,7 @@ eth-tester[py-evm]==0.9.1b1 eth-typing==3.4.0 ; python_full_version >= '3.7.2' and python_version < '4' eth-utils==2.2.1 ; python_version >= '3.7' and python_version < '4' ethpm-types==0.5.6 ; python_version >= '3.8' and python_version < '4' -evm-trace==0.1.0a24 ; python_version >= '3.8' and python_version < '4' +evm-trace==0.1.0a25 ; python_version >= '3.8' and python_version < '4' exceptiongroup==1.1.3 ; python_version < '3.11' executing==1.2.0 filelock==3.12.4 ; python_version >= '3.8' @@ -54,12 +55,11 @@ identify==2.5.29 ; python_version >= '3.8' idna==3.4 ; python_version >= '3.5' ijson==3.2.3 importlib-metadata==6.8.0 ; python_version >= '3.8' -importlib-resources==6.0.1 ; python_version < '3.9' iniconfig==2.0.0 ; python_version >= '3.7' -ipython==8.12.2 ; python_version >= '3.8' +ipython==8.15.0 ; python_version >= '3.9' isort==6.0.0b2 jedi==0.19.0 ; python_version >= '3.6' -jsonschema==4.19.0 ; python_version >= '3.8' +jsonschema==4.19.1 ; python_version >= '3.8' jsonschema-specifications==2023.7.1 ; python_version >= '3.8' lazyasd==0.1.4 lru-dict==1.2.0 @@ -71,7 +71,7 @@ multidict==6.0.4 ; python_version >= '3.7' mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' nucypher-core==0.13.0 -numpy==1.24.4 ; python_version < '3.10' +numpy==1.26.0 ; python_version < '3.10' packaging==23.1 ; python_version >= '3.7' pandas==1.5.3 ; python_version >= '3.8' parsimonious==0.9.0 @@ -79,7 +79,6 @@ parso==0.8.3 ; python_version >= '3.6' pathspec==0.11.2 ; python_version >= '3.7' pexpect==4.8.0 ; sys_platform != 'win32' pickleshare==0.7.5 -pkgutil-resolve-name==1.3.10 ; python_version < '3.9' platformdirs==3.10.0 ; python_version >= '3.7' pluggy==1.3.0 ; python_version >= '3.8' pre-commit==3.4.0 @@ -106,7 +105,6 @@ pygments==2.16.1 ; python_version >= '3.7' pyjwt[crypto]==2.8.0 ; python_version >= '3.7' pynacl==1.5.0 ; python_version >= '3.6' pyproject-api==1.6.1 ; python_version >= '3.8' -pysha3==1.0.2 pytest==7.4.2 ; python_version >= '3.7' python-baseconv==1.2.2 python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' @@ -119,6 +117,7 @@ requests==2.31.0 ; python_version >= '3.7' rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 rpds-py==0.10.3 ; python_version >= '3.8' +safe-pysha3==1.0.4 semantic-version==2.10.0 ; python_version >= '2.7' setuptools==68.2.2 ; python_version >= '3.8' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' @@ -129,15 +128,15 @@ tomli==2.0.1 ; python_version < '3.11' toolz==0.12.0 ; python_version >= '3.5' tox==4.11.3 tqdm==4.66.1 ; python_version >= '3.7' -traitlets==5.10.0 ; python_version >= '3.8' +traitlets==5.10.1 ; python_version >= '3.8' trie==2.1.1 ; python_version >= '3.7' and python_version < '4' typing-extensions==4.8.0 ; python_version < '3.11' -urllib3==2.0.4 ; python_version >= '3.7' +urllib3==2.0.5 ; python_version >= '3.7' varint==1.0.2 virtualenv==20.24.5 ; python_version >= '3.7' watchdog==3.0.0 ; python_version >= '3.7' wcwidth==0.2.6 -web3[tester]==6.9.0 ; python_full_version >= '3.7.2' +web3[tester]==6.10.0 ; python_full_version >= '3.7.2' websockets==11.0.3 ; python_version >= '3.7' wrapt==1.15.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' yarl==1.9.2 ; python_version >= '3.7' From 0ad857019c6db54d9eec3b0d9c07c921c7476bd5 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 16:28:28 -0400 Subject: [PATCH 094/112] Add script to confirm operator addresses for Lynx nodes. --- deployment/constants.py | 10 ++++++++-- scripts/lynx/confirm_operator_addresses.py | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 scripts/lynx/confirm_operator_addresses.py diff --git a/deployment/constants.py b/deployment/constants.py index a4844a91..2d4b25e4 100644 --- a/deployment/constants.py +++ b/deployment/constants.py @@ -1,8 +1,7 @@ from pathlib import Path -from ape import networks, project - import deployment +from ape import networks, project LOCAL_BLOCKCHAIN_ENVIRONMENTS = ["local"] PRODUCTION_ENVIRONMENTS = ["mainnet", "polygon-main"] @@ -18,3 +17,10 @@ SPECIAL_VALUE_VARIABLES = {"EMPTY_BYTES": b""} PROXY_NAME = "TransparentUpgradeableProxy" OZ_DEPENDENCY = project.dependencies["openzeppelin"]["4.9.1"] + +LYNX_NODES = { + # staking provider -> operator + "0xb15d5a4e2be34f4be154a1b08a94ab920ffd8a41": "0x890069745E9497C6f99Db68C4588deC5669F3d3E", + "0x210eeac07542f815ebb6fd6689637d8ca2689392": "0xf48F720A2Ed237c24F5A7686543D90596bb8D44D", + "0x48C8039c32F4c6f5cb206A5911C8Ae814929C16B": "0xce057adc39dcD1b3eA28661194E8963481CC48b2", +} diff --git a/scripts/lynx/confirm_operator_addresses.py b/scripts/lynx/confirm_operator_addresses.py new file mode 100644 index 00000000..97c6ab33 --- /dev/null +++ b/scripts/lynx/confirm_operator_addresses.py @@ -0,0 +1,20 @@ +from ape import project +from ape.cli import get_user_selected_account +from deployment.constants import ARTIFACTS_DIR, LYNX_NODES +from deployment.registry import contracts_from_registry + +ROOT_REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-root-registry.json" + + +def main(): + """ + Confirm lynx operator addresses on the Goerli side of the bridge + + ape run lynx confirm_operator_addresses --network ethereum:goerli:infura + """ + + deployer_account = get_user_selected_account() + deployments = contracts_from_registry(filepath=ROOT_REGISTRY_FILEPATH) + mock_polygon_root = deployments[project.MockPolygonRoot.contract_type.name] + for _, operator in LYNX_NODES.items(): + mock_polygon_root.confirmOperatorAddress(operator, sender=deployer_account) From 34b537142bccd066be6ec106b3ca6c1451de0c1d Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 16:28:54 -0400 Subject: [PATCH 095/112] Update configure_staking script to use LYNX_NODES constant. --- scripts/lynx/configure_staking.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/scripts/lynx/configure_staking.py b/scripts/lynx/configure_staking.py index 6da7f234..0cecd9e7 100644 --- a/scripts/lynx/configure_staking.py +++ b/scripts/lynx/configure_staking.py @@ -1,19 +1,12 @@ from ape import networks, project from ape.api import AccountAPI from ape.cli import get_user_selected_account -from deployment.constants import ARTIFACTS_DIR +from deployment.constants import ARTIFACTS_DIR, LYNX_NODES from deployment.registry import contracts_from_registry ROOT_REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-root-registry.json" CHILD_REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-child-registry.json" -LYNX_NODES = { - # staking provider -> operator - "0xb15d5a4e2be34f4be154a1b08a94ab920ffd8a41": "0x890069745E9497C6f99Db68C4588deC5669F3d3E", - "0x210eeac07542f815ebb6fd6689637d8ca2689392": "0xf48F720A2Ed237c24F5A7686543D90596bb8D44D", - "0x48C8039c32F4c6f5cb206A5911C8Ae814929C16B": "0xce057adc39dcD1b3eA28661194E8963481CC48b2", -} - def configure_goerli_root(deployer_account: AccountAPI) -> int: """Configures ThresholdStaking and TACoApplication on Goerli.""" From dc9ffe1065937fb2c519269794055295dd02a907 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Tue, 26 Sep 2023 19:28:10 -0400 Subject: [PATCH 096/112] Relock dependencies again - last relock seemed to use incorrect dependency versions for some reason. --- Pipfile.lock | 118 ++++++++++++++++++++++++++++++----------------- requirements.txt | 8 ++-- 2 files changed, 80 insertions(+), 46 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index 1db2b393..6a86798c 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1073,6 +1073,14 @@ "markers": "python_version >= '3.8'", "version": "==6.8.0" }, + "importlib-resources": { + "hashes": [ + "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9", + "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83" + ], + "markers": "python_version < '3.9'", + "version": "==6.1.0" + }, "iniconfig": { "hashes": [ "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", @@ -1083,11 +1091,11 @@ }, "ipython": { "hashes": [ - "sha256:2baeb5be6949eeebf532150f81746f8333e2ccce02de1c7eedde3f23ed5e9f1e", - "sha256:45a2c3a529296870a97b7de34eda4a31bee16bc7bf954e07d39abe49caf8f887" + "sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea", + "sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc" ], - "markers": "python_version >= '3.9'", - "version": "==8.15.0" + "markers": "python_version >= '3.8'", + "version": "==8.12.2" }, "isort": { "hashes": [ @@ -1391,41 +1399,37 @@ }, "numpy": { "hashes": [ - "sha256:020cdbee66ed46b671429c7265cf00d8ac91c046901c55684954c3958525dab2", - "sha256:0621f7daf973d34d18b4e4bafb210bbaf1ef5e0100b5fa750bd9cde84c7ac292", - "sha256:0792824ce2f7ea0c82ed2e4fecc29bb86bee0567a080dacaf2e0a01fe7654369", - "sha256:09aaee96c2cbdea95de76ecb8a586cb687d281c881f5f17bfc0fb7f5890f6b91", - "sha256:166b36197e9debc4e384e9c652ba60c0bacc216d0fc89e78f973a9760b503388", - "sha256:186ba67fad3c60dbe8a3abff3b67a91351100f2661c8e2a80364ae6279720299", - "sha256:306545e234503a24fe9ae95ebf84d25cba1fdc27db971aa2d9f1ab6bba19a9dd", - "sha256:436c8e9a4bdeeee84e3e59614d38c3dbd3235838a877af8c211cfcac8a80b8d3", - "sha256:4a873a8180479bc829313e8d9798d5234dfacfc2e8a7ac188418189bb8eafbd2", - "sha256:4acc65dd65da28060e206c8f27a573455ed724e6179941edb19f97e58161bb69", - "sha256:51be5f8c349fdd1a5568e72713a21f518e7d6707bcf8503b528b88d33b57dc68", - "sha256:546b7dd7e22f3c6861463bebb000646fa730e55df5ee4a0224408b5694cc6148", - "sha256:5671338034b820c8d58c81ad1dafc0ed5a00771a82fccc71d6438df00302094b", - "sha256:637c58b468a69869258b8ae26f4a4c6ff8abffd4a8334c830ffb63e0feefe99a", - "sha256:767254ad364991ccfc4d81b8152912e53e103ec192d1bb4ea6b1f5a7117040be", - "sha256:7d484292eaeb3e84a51432a94f53578689ffdea3f90e10c8b203a99be5af57d8", - "sha256:7f6bad22a791226d0a5c7c27a80a20e11cfe09ad5ef9084d4d3fc4a299cca505", - "sha256:86f737708b366c36b76e953c46ba5827d8c27b7a8c9d0f471810728e5a2fe57c", - "sha256:8c6adc33561bd1d46f81131d5352348350fc23df4d742bb246cdfca606ea1208", - "sha256:914b28d3215e0c721dc75db3ad6d62f51f630cb0c277e6b3bcb39519bed10bd8", - "sha256:b44e6a09afc12952a7d2a58ca0a2429ee0d49a4f89d83a0a11052da696440e49", - "sha256:bb0d9a1aaf5f1cb7967320e80690a1d7ff69f1d47ebc5a9bea013e3a21faec95", - "sha256:c0b45c8b65b79337dee5134d038346d30e109e9e2e9d43464a2970e5c0e93229", - "sha256:c2e698cb0c6dda9372ea98a0344245ee65bdc1c9dd939cceed6bb91256837896", - "sha256:c78a22e95182fb2e7874712433eaa610478a3caf86f28c621708d35fa4fd6e7f", - "sha256:e062aa24638bb5018b7841977c360d2f5917268d125c833a686b7cbabbec496c", - "sha256:e5e18e5b14a7560d8acf1c596688f4dfd19b4f2945b245a71e5af4ddb7422feb", - "sha256:eae430ecf5794cb7ae7fa3808740b015aa80747e5266153128ef055975a72b99", - "sha256:ee84ca3c58fe48b8ddafdeb1db87388dce2c3c3f701bf447b05e4cfcc3679112", - "sha256:f042f66d0b4ae6d48e70e28d487376204d3cbf43b84c03bac57e28dac6151581", - "sha256:f8db2f125746e44dce707dd44d4f4efeea8d7e2b43aace3f8d1f235cfa2733dd", - "sha256:f93fc78fe8bf15afe2b8d6b6499f1c73953169fad1e9a8dd086cdff3190e7fdf" + "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f", + "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61", + "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7", + "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400", + "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef", + "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2", + "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d", + "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc", + "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835", + "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706", + "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5", + "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4", + "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6", + "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463", + "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a", + "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f", + "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e", + "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e", + "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694", + "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8", + "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64", + "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d", + "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc", + "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254", + "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2", + "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1", + "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810", + "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9" ], "markers": "python_version < '3.10'", - "version": "==1.26.0" + "version": "==1.24.4" }, "packaging": { "hashes": [ @@ -1505,6 +1509,14 @@ ], "version": "==0.7.5" }, + "pkgutil-resolve-name": { + "hashes": [ + "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174", + "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e" + ], + "markers": "python_version < '3.9'", + "version": "==1.3.10" + }, "platformdirs": { "hashes": [ "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d", @@ -1788,6 +1800,32 @@ "markers": "python_version >= '3.8'", "version": "==1.6.1" }, + "pysha3": { + "hashes": [ + "sha256:0060a66be16665d90c432f55a0ba1f6480590cfb7d2ad389e688a399183474f0", + "sha256:11a2ba7a2e1d9669d0052fc8fb30f5661caed5512586ecbeeaf6bf9478ab5c48", + "sha256:386998ee83e313b6911327174e088021f9f2061cbfa1651b97629b761e9ef5c4", + "sha256:41be70b06c8775a9e4d4eeb52f2f6a3f356f17539a54eac61f43a29e42fd453d", + "sha256:4416f16b0f1605c25f627966f76873e432971824778b369bd9ce1bb63d6566d9", + "sha256:571a246308a7b63f15f5aa9651f99cf30f2a6acba18eddf28f1510935968b603", + "sha256:59111c08b8f34495575d12e5f2ce3bafb98bea470bc81e70c8b6df99aef0dd2f", + "sha256:5ec8da7c5c70a53b5fa99094af3ba8d343955b212bc346a0d25f6ff75853999f", + "sha256:684cb01d87ed6ff466c135f1c83e7e4042d0fc668fa20619f581e6add1d38d77", + "sha256:68c3a60a39f9179b263d29e221c1bd6e01353178b14323c39cc70593c30f21c5", + "sha256:6e6a84efb7856f5d760ee55cd2b446972cb7b835676065f6c4f694913ea8f8d9", + "sha256:827b308dc025efe9b6b7bae36c2e09ed0118a81f792d888548188e97b9bf9a3d", + "sha256:93abd775dac570cb9951c4e423bcb2bc6303a9d1dc0dc2b7afa2dd401d195b24", + "sha256:9c778fa8b161dc9348dc5cc361e94d54aa5ff18413788f4641f6600d4893a608", + "sha256:9fdd28884c5d0b4edfed269b12badfa07f1c89dbc5c9c66dd279833894a9896b", + "sha256:c7c2adcc43836223680ebdf91f1d3373543dc32747c182c8ca2e02d1b69ce030", + "sha256:c93a2676e6588abcfaecb73eb14485c81c63b94fca2000a811a7b4fb5937b8e8", + "sha256:cd5c961b603bd2e6c2b5ef9976f3238a561c58569945d4165efb9b9383b050ef", + "sha256:f9046d59b3e72aa84f6dae83a040bd1184ebd7fef4e822d38186a8158c89e3cf", + "sha256:fd7e66999060d079e9c0e8893e78d8017dad4f59721f6fe0be6307cd32127a07", + "sha256:fe988e73f2ce6d947220624f04d467faf05f1bbdbc64b0a201296bb3af92739e" + ], + "version": "==1.0.2" + }, "pytest": { "hashes": [ "sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002", @@ -2108,12 +2146,6 @@ "markers": "python_version >= '3.8'", "version": "==0.10.3" }, - "safe-pysha3": { - "hashes": [ - "sha256:e429146b1edd198b2ca934a2046a65656c5d31b0ec894bbd6055127f4deaff17" - ], - "version": "==1.0.4" - }, "semantic-version": { "hashes": [ "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", diff --git a/requirements.txt b/requirements.txt index f7bab243..47c003b9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -55,8 +55,9 @@ identify==2.5.29 ; python_version >= '3.8' idna==3.4 ; python_version >= '3.5' ijson==3.2.3 importlib-metadata==6.8.0 ; python_version >= '3.8' +importlib-resources==6.1.0 ; python_version < '3.9' iniconfig==2.0.0 ; python_version >= '3.7' -ipython==8.15.0 ; python_version >= '3.9' +ipython==8.12.2 ; python_version >= '3.8' isort==6.0.0b2 jedi==0.19.0 ; python_version >= '3.6' jsonschema==4.19.1 ; python_version >= '3.8' @@ -71,7 +72,7 @@ multidict==6.0.4 ; python_version >= '3.7' mypy-extensions==1.0.0 ; python_version >= '3.5' nodeenv==1.8.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6' nucypher-core==0.13.0 -numpy==1.26.0 ; python_version < '3.10' +numpy==1.24.4 ; python_version < '3.10' packaging==23.1 ; python_version >= '3.7' pandas==1.5.3 ; python_version >= '3.8' parsimonious==0.9.0 @@ -79,6 +80,7 @@ parso==0.8.3 ; python_version >= '3.6' pathspec==0.11.2 ; python_version >= '3.7' pexpect==4.8.0 ; sys_platform != 'win32' pickleshare==0.7.5 +pkgutil-resolve-name==1.3.10 ; python_version < '3.9' platformdirs==3.10.0 ; python_version >= '3.7' pluggy==1.3.0 ; python_version >= '3.8' pre-commit==3.4.0 @@ -105,6 +107,7 @@ pygments==2.16.1 ; python_version >= '3.7' pyjwt[crypto]==2.8.0 ; python_version >= '3.7' pynacl==1.5.0 ; python_version >= '3.6' pyproject-api==1.6.1 ; python_version >= '3.8' +pysha3==1.0.2 pytest==7.4.2 ; python_version >= '3.7' python-baseconv==1.2.2 python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' @@ -117,7 +120,6 @@ requests==2.31.0 ; python_version >= '3.7' rich==12.6.0 ; python_full_version >= '3.6.3' and python_full_version < '4.0.0' rlp==3.0.0 rpds-py==0.10.3 ; python_version >= '3.8' -safe-pysha3==1.0.4 semantic-version==2.10.0 ; python_version >= '2.7' setuptools==68.2.2 ; python_version >= '3.8' six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2' From 49dd3e565ccd02f6abd70733b5e51aca779aa3ff Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 11:20:53 +0200 Subject: [PATCH 097/112] Use ape's ZERO_ADDRESS instead of local NULL_ADDRESS --- deployment/confirm.py | 16 ++++++++-------- deployment/constants.py | 1 - deployment/params.py | 17 ++++++++++------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/deployment/confirm.py b/deployment/confirm.py index d688e77a..4f9adaa1 100644 --- a/deployment/confirm.py +++ b/deployment/confirm.py @@ -1,6 +1,6 @@ from collections import OrderedDict -from deployment.constants import NULL_ADDRESS +from ape.utils import ZERO_ADDRESS def _confirm_deployment(contract_name: str) -> None: @@ -11,8 +11,8 @@ def _confirm_deployment(contract_name: str) -> None: exit(-1) -def _confirm_null_address() -> None: - answer = input("Null Address detected for deployment parameter; Continue? Y/N? ") +def _confirm_zero_address() -> None: + answer = input("Zero Address detected for deployment parameter; Continue? Y/N? ") if answer.lower().strip() == "n": print("Aborting deployment!") exit(-1) @@ -26,11 +26,11 @@ def _confirm_resolution(resolved_params: OrderedDict, contract_name: str) -> Non return print(f"\nConstructor parameters for {contract_name}") - contains_null_address = False + contains_zero_address = False for name, resolved_value in resolved_params.items(): print(f"\t{name}={resolved_value}") - if not contains_null_address: - contains_null_address = resolved_value == NULL_ADDRESS + if not contains_zero_address: + contains_zero_address = resolved_value == ZERO_ADDRESS _confirm_deployment(contract_name) - if contains_null_address: - _confirm_null_address() + if contains_zero_address: + _confirm_zero_address() diff --git a/deployment/constants.py b/deployment/constants.py index 2d4b25e4..974fd902 100644 --- a/deployment/constants.py +++ b/deployment/constants.py @@ -11,7 +11,6 @@ ARTIFACTS_DIR = DEPLOYMENT_DIR / "artifacts" ETHERSCAN_API_KEY_ENVVAR = "ETHERSCAN_API_KEY" WEB3_INFURA_API_KEY_ENVVAR = "WEB3_INFURA_API_KEY" -NULL_ADDRESS = "0x" + "0" * 40 VARIABLE_PREFIX = "$" PROXY_DECLARATION_DELIMETER = ":" SPECIAL_VALUE_VARIABLES = {"EMPTY_BYTES": b""} diff --git a/deployment/params.py b/deployment/params.py index 654f1b5a..c9096e63 100644 --- a/deployment/params.py +++ b/deployment/params.py @@ -5,12 +5,15 @@ from typing import Any, List from ape import chain, project -from ape.contracts.base import ContractContainer, ContractInstance +from ape.contracts.base import ( + ContractContainer, + ContractInstance +) +from ape.utils import ZERO_ADDRESS from web3.auto.gethdev import w3 from deployment.confirm import _confirm_resolution from deployment.constants import ( - NULL_ADDRESS, VARIABLE_PREFIX, PROXY_DECLARATION_DELIMETER, SPECIAL_VALUE_VARIABLES, @@ -26,9 +29,9 @@ def _resolve_proxy_address(variable) -> str: proxy, target = variable.split(PROXY_DECLARATION_DELIMETER) target_contract_container = get_contract_container(target) target_contract_instance = _get_contract_instance(target_contract_container) - if target_contract_instance == NULL_ADDRESS: + if target_contract_instance == ZERO_ADDRESS: # eager validation - return NULL_ADDRESS + return ZERO_ADDRESS local_proxies = chain.contracts._local_proxies for proxy_address, proxy_info in local_proxies.items(): @@ -47,7 +50,7 @@ def _is_variable(param: Any) -> bool: def _get_contract_instance(contract_container: ContractContainer) -> ContractInstance: contract_instances = contract_container.deployments if not contract_instances: - return NULL_ADDRESS + return ZERO_ADDRESS if len(contract_instances) != 1: raise ConstructorParameters.Invalid( f"Variable {contract_container.contract_type.name} is ambiguous - " @@ -74,8 +77,8 @@ def _resolve_param(value: Any) -> Any: contract_container = get_contract_container(variable) contract_instance = _get_contract_instance(contract_container) - if contract_instance == NULL_ADDRESS: - return NULL_ADDRESS + if contract_instance == ZERO_ADDRESS: + return ZERO_ADDRESS return contract_instance.address From 53838f7ccbd75b48a42ed38e433e9e6aa41d4317 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 11:34:55 +0200 Subject: [PATCH 098/112] use enviorment variables key names directly from ape plugins instead of local constants. --- deployment/constants.py | 4 +--- deployment/utils.py | 39 +++++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/deployment/constants.py b/deployment/constants.py index 974fd902..817e596e 100644 --- a/deployment/constants.py +++ b/deployment/constants.py @@ -1,7 +1,7 @@ from pathlib import Path -import deployment from ape import networks, project +import deployment LOCAL_BLOCKCHAIN_ENVIRONMENTS = ["local"] PRODUCTION_ENVIRONMENTS = ["mainnet", "polygon-main"] @@ -9,8 +9,6 @@ DEPLOYMENT_DIR = Path(deployment.__file__).parent CONSTRUCTOR_PARAMS_DIR = DEPLOYMENT_DIR / "constructor_params" ARTIFACTS_DIR = DEPLOYMENT_DIR / "artifacts" -ETHERSCAN_API_KEY_ENVVAR = "ETHERSCAN_API_KEY" -WEB3_INFURA_API_KEY_ENVVAR = "WEB3_INFURA_API_KEY" VARIABLE_PREFIX = "$" PROXY_DECLARATION_DELIMETER = ":" SPECIAL_VALUE_VARIABLES = {"EMPTY_BYTES": b""} diff --git a/deployment/utils.py b/deployment/utils.py index 506fb44a..cfeba8f4 100644 --- a/deployment/utils.py +++ b/deployment/utils.py @@ -7,12 +7,11 @@ from ape.api import AccountAPI from ape.cli import get_user_selected_account from ape.contracts import ContractInstance +from ape_etherscan.utils import API_KEY_ENV_KEY_MAP from deployment.constants import ( CURRENT_NETWORK, - ETHERSCAN_API_KEY_ENVVAR, - LOCAL_BLOCKCHAIN_ENVIRONMENTS, - WEB3_INFURA_API_KEY_ENVVAR + LOCAL_BLOCKCHAIN_ENVIRONMENTS ) from deployment.params import ( ApeDeploymentParameters, @@ -32,38 +31,42 @@ def check_registry_filepath(registry_filepath: Path) -> None: def check_etherscan_plugin() -> None: - """Checks that the ape-etherscan plugin is installed and that the ETHERSCAN_API_KEY is set.""" + """ + Checks that the ape-etherscan plugin is installed and that + the appropriate API key environment variable is set. + """ if CURRENT_NETWORK in LOCAL_BLOCKCHAIN_ENVIRONMENTS: # unnecessary for local deployment return - try: import ape_etherscan # noqa: F401 except ImportError: raise ImportError("Please install the ape-etherscan plugin to use this script.") - - api_key = os.environ.get(ETHERSCAN_API_KEY_ENVVAR) + ecosystem_name = networks.provider.network.ecosystem.name + explorer_envvar = API_KEY_ENV_KEY_MAP.get(ecosystem_name) + api_key = os.environ.get(explorer_envvar) if not api_key: - raise ValueError(f"{ETHERSCAN_API_KEY_ENVVAR} is not set.") - if not len(api_key) == 34: - raise ValueError(f"{ETHERSCAN_API_KEY_ENVVAR} is not valid.") + raise ValueError(f"{explorer_envvar} is not set.") def check_infura_plugin() -> None: """Checks that the ape-infura plugin is installed.""" if CURRENT_NETWORK in LOCAL_BLOCKCHAIN_ENVIRONMENTS: - # unnecessary for local deployment - return - + return # unnecessary for local deployment try: import ape_infura # noqa: F401 + from ape_infura.provider import _ENVIRONMENT_VARIABLE_NAMES # noqa: F401 except ImportError: raise ImportError("Please install the ape-infura plugin to use this script.") - api_key = os.environ.get(WEB3_INFURA_API_KEY_ENVVAR) - if not api_key: - raise ValueError(f"{WEB3_INFURA_API_KEY_ENVVAR} is not set.") - if not len(api_key) == 32: - raise ValueError(f"{WEB3_INFURA_API_KEY_ENVVAR} is not valid.") + for envvar in _ENVIRONMENT_VARIABLE_NAMES: + api_key = os.environ.get(envvar) + if api_key: + break + else: + raise ValueError( + f"No Infura API key found in " + f"environment variables: {', '.join(_ENVIRONMENT_VARIABLE_NAMES)}" + ) def verify_contracts(contracts: List[ContractInstance]) -> None: From 9b396e39bd9b05800a9a30f3ba5cc58a80639396 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 11:53:43 +0200 Subject: [PATCH 099/112] Handle arbitrary bytes values as consructor parameters with hex. --- deployment/constants.py | 6 ++- .../lynx/lynx-alpha-13-root-params.json | 2 +- deployment/params.py | 46 ++++++++++++------- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/deployment/constants.py b/deployment/constants.py index 817e596e..4be6dead 100644 --- a/deployment/constants.py +++ b/deployment/constants.py @@ -1,6 +1,7 @@ from pathlib import Path from ape import networks, project + import deployment LOCAL_BLOCKCHAIN_ENVIRONMENTS = ["local"] @@ -10,8 +11,9 @@ CONSTRUCTOR_PARAMS_DIR = DEPLOYMENT_DIR / "constructor_params" ARTIFACTS_DIR = DEPLOYMENT_DIR / "artifacts" VARIABLE_PREFIX = "$" -PROXY_DECLARATION_DELIMETER = ":" -SPECIAL_VALUE_VARIABLES = {"EMPTY_BYTES": b""} +SPECIAL_VARIABLE_DELIMITER = ":" +HEX_PREFIX = "0x" +BYTES_PREFIX = "bytes" PROXY_NAME = "TransparentUpgradeableProxy" OZ_DEPENDENCY = project.dependencies["openzeppelin"]["4.9.1"] diff --git a/deployment/constructor_params/lynx/lynx-alpha-13-root-params.json b/deployment/constructor_params/lynx/lynx-alpha-13-root-params.json index e5bf2b7a..919b4899 100644 --- a/deployment/constructor_params/lynx/lynx-alpha-13-root-params.json +++ b/deployment/constructor_params/lynx/lynx-alpha-13-root-params.json @@ -16,7 +16,7 @@ "TransparentUpgradeableProxy": { "_logic": "$TACoApplication", "admin_": "$ProxyAdmin", - "_data": "$EMPTY_BYTES" + "_data": "$bytes:0x" }, "MockPolygonRoot": { "_rootApplication": "$TransparentUpgradeableProxy:TACoApplication" diff --git a/deployment/params.py b/deployment/params.py index c9096e63..1cc09a1f 100644 --- a/deployment/params.py +++ b/deployment/params.py @@ -10,23 +10,36 @@ ContractInstance ) from ape.utils import ZERO_ADDRESS +from eth_typing import ChecksumAddress from web3.auto.gethdev import w3 from deployment.confirm import _confirm_resolution from deployment.constants import ( VARIABLE_PREFIX, - PROXY_DECLARATION_DELIMETER, + SPECIAL_VARIABLE_DELIMITER, SPECIAL_VALUE_VARIABLES, - PROXY_NAME + PROXY_NAME, BYTES_PREFIX, HEX_PREFIX ) -def _is_proxy_variable(variable: str): - return PROXY_DECLARATION_DELIMETER in variable +def _is_variable(param: Any) -> bool: + """Returns True if the param is a variable.""" + result = isinstance(param, str) and param.startswith(VARIABLE_PREFIX) + return result + + +def _is_proxy_variable(variable: str) -> bool: + """Returns True if the variable is a special proxy variable.""" + return variable.startswith(PROXY_NAME + SPECIAL_VARIABLE_DELIMITER) + + +def _is_bytes(variable: str) -> bool: + """Returns True if the variable is a special bytes value.""" + return variable.startswith(BYTES_PREFIX + SPECIAL_VARIABLE_DELIMITER) def _resolve_proxy_address(variable) -> str: - proxy, target = variable.split(PROXY_DECLARATION_DELIMETER) + proxy, target = variable.split(SPECIAL_VARIABLE_DELIMITER) target_contract_container = get_contract_container(target) target_contract_instance = _get_contract_instance(target_contract_container) if target_contract_instance == ZERO_ADDRESS: @@ -41,13 +54,16 @@ def _resolve_proxy_address(variable) -> str: raise ConstructorParameters.Invalid(f"Could not determine proxy for {variable}") -def _is_variable(param: Any) -> bool: - """Returns True if the param is a variable.""" - result = isinstance(param, str) and param.startswith(VARIABLE_PREFIX) - return result +def _resolve_bytes(variable: str) -> bytes: + """Resolves a special bytes value.""" + _prefix, value = variable.split(SPECIAL_VARIABLE_DELIMITER) + if not value.startswith(HEX_PREFIX): + raise ConstructorParameters.Invalid(f"Invalid bytes value {variable}") + value = bytes.fromhex(value[2:]) + return value -def _get_contract_instance(contract_container: ContractContainer) -> ContractInstance: +def _get_contract_instance(contract_container: ContractContainer) -> typing.Union[ContractInstance, ChecksumAddress]: contract_instances = contract_container.deployments if not contract_instances: return ZERO_ADDRESS @@ -67,11 +83,9 @@ def _resolve_param(value: Any) -> Any: variable = value.strip(VARIABLE_PREFIX) - # special values - if variable in SPECIAL_VALUE_VARIABLES: - return SPECIAL_VALUE_VARIABLES[variable] + if _is_bytes(variable): + return _resolve_bytes(variable) - # proxied contract if _is_proxy_variable(variable): return _resolve_proxy_address(variable) @@ -107,12 +121,12 @@ def _validate_constructor_param(param: Any, contracts: List[str]) -> None: variable = param.strip(VARIABLE_PREFIX) if _is_proxy_variable(variable): - proxy, target = variable.split(PROXY_DECLARATION_DELIMETER) + proxy, target = variable.split(SPECIAL_VARIABLE_DELIMITER) if proxy != PROXY_NAME: raise ConstructorParameters.Invalid( f"Ambiguous proxy variable {param}; only {PROXY_NAME} " - f"allowed before '{PROXY_DECLARATION_DELIMETER}'" + f"allowed before '{SPECIAL_VARIABLE_DELIMITER}'" ) # check proxy target From 586f1061946e68342ba0e6b67142a833d69c4b43 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 12:13:05 +0200 Subject: [PATCH 100/112] removes unused constant PODUCTION_ENVIORMENTS --- deployment/constants.py | 1 - 1 file changed, 1 deletion(-) diff --git a/deployment/constants.py b/deployment/constants.py index 4be6dead..f57b97b0 100644 --- a/deployment/constants.py +++ b/deployment/constants.py @@ -5,7 +5,6 @@ import deployment LOCAL_BLOCKCHAIN_ENVIRONMENTS = ["local"] -PRODUCTION_ENVIRONMENTS = ["mainnet", "polygon-main"] CURRENT_NETWORK = networks.network.name DEPLOYMENT_DIR = Path(deployment.__file__).parent CONSTRUCTOR_PARAMS_DIR = DEPLOYMENT_DIR / "constructor_params" From 909cefc390b6cbb988c02af0b507bd4d3dfc120d Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 12:13:55 +0200 Subject: [PATCH 101/112] Code reorg for handling of special variables; Stub for deployer account resolution. --- deployment/constants.py | 1 + deployment/params.py | 71 +++++++++++++++++++++++++++++------------ 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/deployment/constants.py b/deployment/constants.py index f57b97b0..fde7a57e 100644 --- a/deployment/constants.py +++ b/deployment/constants.py @@ -13,6 +13,7 @@ SPECIAL_VARIABLE_DELIMITER = ":" HEX_PREFIX = "0x" BYTES_PREFIX = "bytes" +DEPLOYER_INDICATOR = "deployer" PROXY_NAME = "TransparentUpgradeableProxy" OZ_DEPENDENCY = project.dependencies["openzeppelin"]["4.9.1"] diff --git a/deployment/params.py b/deployment/params.py index 1cc09a1f..8f1302c5 100644 --- a/deployment/params.py +++ b/deployment/params.py @@ -17,8 +17,10 @@ from deployment.constants import ( VARIABLE_PREFIX, SPECIAL_VARIABLE_DELIMITER, - SPECIAL_VALUE_VARIABLES, - PROXY_NAME, BYTES_PREFIX, HEX_PREFIX + PROXY_NAME, + BYTES_PREFIX, + HEX_PREFIX, + DEPLOYER_INDICATOR ) @@ -28,6 +30,16 @@ def _is_variable(param: Any) -> bool: return result +def _is_special_variable(variable: str) -> bool: + """Returns True if the variable is a special variable.""" + rules = [ + _is_bytes(variable), + _is_proxy_variable(variable), + _is_deployer(variable) + ] + return any(rules) + + def _is_proxy_variable(variable: str) -> bool: """Returns True if the variable is a special proxy variable.""" return variable.startswith(PROXY_NAME + SPECIAL_VARIABLE_DELIMITER) @@ -38,6 +50,11 @@ def _is_bytes(variable: str) -> bool: return variable.startswith(BYTES_PREFIX + SPECIAL_VARIABLE_DELIMITER) +def _is_deployer(variable: str) -> bool: + """Returns True if the variable is a special deployer variable.""" + return variable == DEPLOYER_INDICATOR + + def _resolve_proxy_address(variable) -> str: proxy, target = variable.split(SPECIAL_VARIABLE_DELIMITER) target_contract_container = get_contract_container(target) @@ -76,27 +93,44 @@ def _get_contract_instance(contract_container: ContractContainer) -> typing.Unio return contract_instance -def _resolve_param(value: Any) -> Any: - """Resolves a single parameter value.""" - if not _is_variable(value): - return value # literally a value +def _resolve_deployer(variable: str) -> str: + breakpoint() + assert False - variable = value.strip(VARIABLE_PREFIX) - - if _is_bytes(variable): - return _resolve_bytes(variable) - - if _is_proxy_variable(variable): - return _resolve_proxy_address(variable) +def _resolve_contract_address(variable: str) -> str: + """Resolves a contract address.""" contract_container = get_contract_container(variable) contract_instance = _get_contract_instance(contract_container) if contract_instance == ZERO_ADDRESS: return ZERO_ADDRESS - return contract_instance.address +def _resolve_special_variable(variable: str) -> Any: + if _is_bytes(variable): + result = _resolve_bytes(variable) + elif _is_proxy_variable(variable): + result = _resolve_proxy_address(variable) + elif _is_deployer(variable): + result = _resolve_deployer(variable) + else: + raise ValueError(f"Invalid special variable {variable}") + return result + + +def _resolve_param(value: Any) -> Any: + """Resolves a single parameter value.""" + if not _is_variable(value): + return value # literally a value + variable = value.strip(VARIABLE_PREFIX) + if _is_special_variable(variable): + result = _resolve_special_variable(variable) + else: + result = _resolve_contract_address(variable) + return result + + def _resolve_list(value: List[Any]) -> List[Any]: """Resolves a list of parameter values.""" params = [_resolve_param(v) for v in value] @@ -122,18 +156,15 @@ def _validate_constructor_param(param: Any, contracts: List[str]) -> None: if _is_proxy_variable(variable): proxy, target = variable.split(SPECIAL_VARIABLE_DELIMITER) - if proxy != PROXY_NAME: raise ConstructorParameters.Invalid( f"Ambiguous proxy variable {param}; only {PROXY_NAME} " f"allowed before '{SPECIAL_VARIABLE_DELIMITER}'" ) + variable = target # check proxy target - # check proxy target - variable = target - - if variable in SPECIAL_VALUE_VARIABLES: - return + if _is_special_variable(variable): + return # special variables are always marked as valid if variable in contracts: return From 60b9e59d4dd1d38c2cabb87ed1cdbdb02759e023 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 12:20:24 +0200 Subject: [PATCH 102/112] set updated special variables into constructor params --- .../constructor_params/lynx/lynx-alpha-13-child-params.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deployment/constructor_params/lynx/lynx-alpha-13-child-params.json b/deployment/constructor_params/lynx/lynx-alpha-13-child-params.json index fd6ea47f..9901eab2 100644 --- a/deployment/constructor_params/lynx/lynx-alpha-13-child-params.json +++ b/deployment/constructor_params/lynx/lynx-alpha-13-child-params.json @@ -7,7 +7,7 @@ "TransparentUpgradeableProxy": { "_logic": "$LynxTACoChildApplication", "admin_": "$ProxyAdmin", - "_data": "$EMPTY_BYTES" + "_data": "$bytes:0x" }, "LynxRitualToken": { "_totalSupplyOfTokens": 10000000000000000000000000 @@ -16,12 +16,12 @@ "_application": "$TransparentUpgradeableProxy:LynxTACoChildApplication", "_timeout": 3600, "_maxDkgSize": 4, - "_admin": "0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600", + "_admin": "$deployer", "_currency": "$LynxRitualToken", "_feeRatePerSecond": 1 }, "GlobalAllowList": { "_coordinator": "$Coordinator", - "_admin": "0x3B42d26E19FF860bC4dEbB920DD8caA53F93c600" + "_admin": "$deployer" } } From 682c3c0bb3480b66b11b307b2247f3bfc0c310f0 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 14:31:55 +0200 Subject: [PATCH 103/112] Abstracts deployment into integrated Deployer object (formerly ApeDeploymentParameters) with added variable suport. --- deployment/params.py | 44 ++++++++++++++++++++++++++++-------- deployment/utils.py | 21 +++++++---------- scripts/lynx/deploy_child.py | 40 ++++++++++++-------------------- scripts/lynx/deploy_root.py | 36 +++++++++++------------------ 4 files changed, 70 insertions(+), 71 deletions(-) diff --git a/deployment/params.py b/deployment/params.py index 8f1302c5..d819f7ec 100644 --- a/deployment/params.py +++ b/deployment/params.py @@ -5,6 +5,7 @@ from typing import Any, List from ape import chain, project +from ape.api import AccountAPI from ape.contracts.base import ( ContractContainer, ContractInstance @@ -93,9 +94,12 @@ def _get_contract_instance(contract_container: ContractContainer) -> typing.Unio return contract_instance -def _resolve_deployer(variable: str) -> str: - breakpoint() - assert False +def _resolve_deployer() -> str: + deployer_account = Deployer.get_account() + if deployer_account is None: + return ZERO_ADDRESS + else: + return deployer_account.address def _resolve_contract_address(variable: str) -> str: @@ -113,7 +117,7 @@ def _resolve_special_variable(variable: str) -> Any: elif _is_proxy_variable(variable): result = _resolve_proxy_address(variable) elif _is_deployer(variable): - result = _resolve_deployer(variable) + result = _resolve_deployer() else: raise ValueError(f"Invalid special variable {variable}") return result @@ -279,21 +283,43 @@ def resolve(self, contract_name: str) -> OrderedDict: return result -class ApeDeploymentParameters: - """Represents ape deployment parameters for a set of contracts.""" +class Deployer: + """ + Represents ape an ape deployment account plus + deployment parameters for a set of contracts. + """ - def __init__(self, constructor_parameters: ConstructorParameters, publish: bool): + __DEPLOYER_ACCOUNT: AccountAPI = None + + def __init__(self, deployer: AccountAPI, constructor_parameters: ConstructorParameters, publish: bool): self.constructor_parameters = constructor_parameters self.publish = publish + self._set_deployer(deployer) + + @classmethod + def get_account(cls) -> AccountAPI: + """Returns the deployer account.""" + return cls.__DEPLOYER_ACCOUNT + + @classmethod + def _set_deployer(cls, deployer: AccountAPI) -> None: + """Sets the deployer account.""" + cls.__DEPLOYER_ACCOUNT = deployer - def get_kwargs(self) -> typing.Dict[str, Any]: + def _get_kwargs(self) -> typing.Dict[str, Any]: """Returns the deployment kwargs.""" return {"publish": self.publish} - def get(self, container: ContractContainer) -> List[Any]: + def _get_args(self, container: ContractContainer) -> List[Any]: """Resolves the deployment parameters for a single contract.""" contract_name = container.contract_type.name resolved_constructor_params = self.constructor_parameters.resolve(contract_name) _confirm_resolution(resolved_constructor_params, contract_name) deployment_params = [container, *resolved_constructor_params.values()] return deployment_params + + def deploy(self, container: ContractContainer) -> ContractInstance: + deployer_account = self.get_account() + args, kwargs = self._get_args(container), self._get_kwargs() + instance = deployer_account.deploy(*args, **kwargs) + return instance diff --git a/deployment/utils.py b/deployment/utils.py index cfeba8f4..b6d88597 100644 --- a/deployment/utils.py +++ b/deployment/utils.py @@ -1,10 +1,8 @@ import os -import typing from pathlib import Path from typing import List from ape import networks -from ape.api import AccountAPI from ape.cli import get_user_selected_account from ape.contracts import ContractInstance from ape_etherscan.utils import API_KEY_ENV_KEY_MAP @@ -14,7 +12,7 @@ LOCAL_BLOCKCHAIN_ENVIRONMENTS ) from deployment.params import ( - ApeDeploymentParameters, + Deployer, ConstructorParameters ) @@ -78,7 +76,7 @@ def verify_contracts(contracts: List[ContractInstance]) -> None: def prepare_deployment( params_filepath: Path, registry_filepath: Path, publish: bool = False -) -> typing.Tuple[AccountAPI, "ApeDeploymentParameters"]: +) -> "Deployer": """ Prepares the deployment by loading the deployment parameters and checking the pre-deployment conditions. @@ -86,17 +84,14 @@ def prepare_deployment( NOTE: publish is False by default because we use customized artifact tracking that is not compatible with the ape publish command. """ - - # pre-deployment checks check_registry_filepath(registry_filepath=registry_filepath) check_etherscan_plugin() check_infura_plugin() - - # load (and implicitly validate) deployment parameters constructor_parameters = ConstructorParameters.from_file(params_filepath) - deployment_parameters = ApeDeploymentParameters(constructor_parameters, publish) - - # do this last so that the user can see any failed - # pre-deployment checks or validation errors. deployer_account = get_user_selected_account() - return deployer_account, deployment_parameters + deployment_parameters = Deployer( + deployer=deployer_account, + constructor_parameters=constructor_parameters, + publish=publish, + ) + return deployment_parameters diff --git a/scripts/lynx/deploy_child.py b/scripts/lynx/deploy_child.py index 4a8f28cb..d72de107 100644 --- a/scripts/lynx/deploy_child.py +++ b/scripts/lynx/deploy_child.py @@ -30,46 +30,34 @@ def main(): eth-ape 0.6.20 """ - deployer, params = prepare_deployment( + deployer = prepare_deployment( params_filepath=CONSTRUCTOR_PARAMS_FILEPATH, registry_filepath=REGISTRY_FILEPATH, ) - mock_polygon_child = deployer.deploy( - *params.get(project.MockPolygonChild), **params.get_kwargs() - ) - - proxy_admin = deployer.deploy(*params.get(OZ_DEPENDENCY.ProxyAdmin), **params.get_kwargs()) - - taco_implementation = deployer.deploy( - *params.get(project.LynxTACoChildApplication), **params.get_kwargs() - ) - - proxy = deployer.deploy( - *params.get(OZ_DEPENDENCY.TransparentUpgradeableProxy), **params.get_kwargs() - ) + mock_polygon_child = deployer.deploy(project.MockPolygonChild) + proxy_admin = deployer.deploy(OZ_DEPENDENCY.ProxyAdmin) + taco_implementation = deployer.deploy(project.LynxTACoChildApplication) + proxy = deployer.deploy(OZ_DEPENDENCY.TransparentUpgradeableProxy) print("\nWrapping TACoChildApplication in proxy") taco_child_application = project.TACoChildApplication.at(proxy.address) - print( - f"\nSetting TACoChildApplication proxy ({taco_child_application.address}) as child application on MockPolygonChild ({mock_polygon_child.address})" - ) + print(f"\nSetting TACoChildApplication proxy ({taco_child_application.address})" + f" as child application on MockPolygonChild ({mock_polygon_child.address})") mock_polygon_child.setChildApplication( taco_child_application.address, - sender=deployer, + sender=deployer.get_account(), ) - ritual_token = deployer.deploy(*params.get(project.LynxRitualToken), **params.get_kwargs()) + ritual_token = deployer.deploy(project.LynxRitualToken) + coordinator = deployer.deploy(project.Coordinator) - coordinator = deployer.deploy(*params.get(project.Coordinator), **params.get_kwargs()) - - print( - f"\nInitializing TACoChildApplication proxy ({taco_child_application.address}) with Coordinator ({coordinator.address})" - ) - taco_child_application.initialize(coordinator.address, sender=deployer) + print(f"\nInitializing TACoChildApplication proxy ({taco_child_application.address}) " + f"with Coordinator ({coordinator.address})") + taco_child_application.initialize(coordinator.address, sender=deployer.get_account()) - global_allow_list = deployer.deploy(*params.get(project.GlobalAllowList), **params.get_kwargs()) + global_allow_list = deployer.deploy(project.GlobalAllowList) deployments = [ mock_polygon_child, diff --git a/scripts/lynx/deploy_root.py b/scripts/lynx/deploy_root.py index 0beafc23..c22e5c78 100644 --- a/scripts/lynx/deploy_root.py +++ b/scripts/lynx/deploy_root.py @@ -29,41 +29,31 @@ def main(): eth-ape 0.6.20 """ - deployer, params = prepare_deployment( + deployer = prepare_deployment( params_filepath=CONSTRUCTOR_PARAMS_FILEPATH, registry_filepath=REGISTRY_FILEPATH, ) - reward_token = deployer.deploy(*params.get(project.LynxStakingToken), **params.get_kwargs()) - - mock_threshold_staking = deployer.deploy( - *params.get(project.TestnetThresholdStaking), **params.get_kwargs() - ) - - proxy_admin = deployer.deploy(*params.get(OZ_DEPENDENCY.ProxyAdmin), **params.get_kwargs()) - - _ = deployer.deploy(*params.get(project.TACoApplication), **params.get_kwargs()) - - proxy = deployer.deploy( - *params.get(OZ_DEPENDENCY.TransparentUpgradeableProxy), **params.get_kwargs() - ) + reward_token = deployer.deploy(project.LynxStakingToken) + mock_threshold_staking = deployer.deploy(project.TestnetThresholdStaking) + proxy_admin = deployer.deploy(OZ_DEPENDENCY.ProxyAdmin) + _ = deployer.deploy(project.TACoApplication) + proxy = deployer.deploy(OZ_DEPENDENCY.TransparentUpgradeableProxy) print("\nWrapping TACoApplication in proxy") taco_application = project.TACoApplication.at(proxy.address) - print( - f"\nSetting TACoApplication proxy ({taco_application.address}) on ThresholdStakingMock ({mock_threshold_staking.address})" - ) - mock_threshold_staking.setApplication(taco_application.address, sender=deployer) + print(f"\nSetting TACoApplication proxy ({taco_application.address}) on " + f"ThresholdStakingMock ({mock_threshold_staking.address})") + mock_threshold_staking.setApplication(taco_application.address, sender=deployer.get_account()) print("\nInitializing TACoApplication proxy") - taco_application.initialize(sender=deployer) + taco_application.initialize(sender=deployer.get_account()) - mock_polygon_root = deployer.deploy(*params.get(project.MockPolygonRoot), **params.get_kwargs()) + mock_polygon_root = deployer.deploy(project.MockPolygonRoot) - print( - f"\nSetting child application on TACoApplication proxy ({taco_application.address}) to MockPolygonChild ({mock_polygon_root.address})" - ) + print(f"\nSetting child application on TACoApplication proxy " + f"({taco_application.address}) to MockPolygonChild ({mock_polygon_root.address})") taco_application.setChildApplication(mock_polygon_root.address, sender=deployer) deployments = [ From 9b6ee719d053045f3669bf6a89dfe2c1831172b5 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 14:43:11 +0200 Subject: [PATCH 104/112] Ingests ConstructorParameters into Deployer --- deployment/params.py | 6 +++--- deployment/utils.py | 19 +------------------ scripts/lynx/deploy_child.py | 12 ++++++++---- scripts/lynx/deploy_root.py | 10 +++++++--- 4 files changed, 19 insertions(+), 28 deletions(-) diff --git a/deployment/params.py b/deployment/params.py index d819f7ec..5576d4eb 100644 --- a/deployment/params.py +++ b/deployment/params.py @@ -291,10 +291,10 @@ class Deployer: __DEPLOYER_ACCOUNT: AccountAPI = None - def __init__(self, deployer: AccountAPI, constructor_parameters: ConstructorParameters, publish: bool): - self.constructor_parameters = constructor_parameters + def __init__(self, account: AccountAPI, params_path: Path, publish: bool): + self.constructor_parameters = ConstructorParameters.from_file(params_path) + self._set_deployer(account) self.publish = publish - self._set_deployer(deployer) @classmethod def get_account(cls) -> AccountAPI: diff --git a/deployment/utils.py b/deployment/utils.py index b6d88597..6f1c6225 100644 --- a/deployment/utils.py +++ b/deployment/utils.py @@ -74,24 +74,7 @@ def verify_contracts(contracts: List[ContractInstance]) -> None: explorer.publish_contract(instance.address) -def prepare_deployment( - params_filepath: Path, registry_filepath: Path, publish: bool = False -) -> "Deployer": - """ - Prepares the deployment by loading the deployment parameters - and checking the pre-deployment conditions. - - NOTE: publish is False by default because we use customized artifact tracking - that is not compatible with the ape publish command. - """ +def prepare_deployment(registry_filepath: Path) -> None: check_registry_filepath(registry_filepath=registry_filepath) check_etherscan_plugin() check_infura_plugin() - constructor_parameters = ConstructorParameters.from_file(params_filepath) - deployer_account = get_user_selected_account() - deployment_parameters = Deployer( - deployer=deployer_account, - constructor_parameters=constructor_parameters, - publish=publish, - ) - return deployment_parameters diff --git a/scripts/lynx/deploy_child.py b/scripts/lynx/deploy_child.py index d72de107..c35a37cc 100644 --- a/scripts/lynx/deploy_child.py +++ b/scripts/lynx/deploy_child.py @@ -1,6 +1,8 @@ #!/usr/bin/python3 -from ape import networks, project +from ape import project +from ape.cli import get_user_selected_account + from deployment.constants import ( ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR, @@ -30,9 +32,11 @@ def main(): eth-ape 0.6.20 """ - deployer = prepare_deployment( - params_filepath=CONSTRUCTOR_PARAMS_FILEPATH, - registry_filepath=REGISTRY_FILEPATH, + prepare_deployment(registry_filepath=REGISTRY_FILEPATH) + deployer = Deployer( + account=get_user_selected_account(), + params_path=CONSTRUCTOR_PARAMS_FILEPATH, + publish=VERIFY, ) mock_polygon_child = deployer.deploy(project.MockPolygonChild) diff --git a/scripts/lynx/deploy_root.py b/scripts/lynx/deploy_root.py index c22e5c78..4331b2ca 100644 --- a/scripts/lynx/deploy_root.py +++ b/scripts/lynx/deploy_root.py @@ -1,6 +1,8 @@ #!/usr/bin/python3 from ape import project +from ape.cli import get_user_selected_account + from deployment.constants import ( ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR, @@ -29,9 +31,11 @@ def main(): eth-ape 0.6.20 """ - deployer = prepare_deployment( - params_filepath=CONSTRUCTOR_PARAMS_FILEPATH, - registry_filepath=REGISTRY_FILEPATH, + prepare_deployment(registry_filepath=REGISTRY_FILEPATH) + deployer = Deployer( + account=get_user_selected_account(), + params_path=CONSTRUCTOR_PARAMS_FILEPATH, + publish=VERIFY, ) reward_token = deployer.deploy(project.LynxStakingToken) From 92541a7ecc658d334e9f9de845483406472c6708 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 14:51:18 +0200 Subject: [PATCH 105/112] (optionally) Ingest interactive account selection into Deployer --- deployment/params.py | 5 ++++- scripts/lynx/deploy_child.py | 1 - scripts/lynx/deploy_root.py | 1 - 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/deployment/params.py b/deployment/params.py index 5576d4eb..16269007 100644 --- a/deployment/params.py +++ b/deployment/params.py @@ -6,6 +6,7 @@ from ape import chain, project from ape.api import AccountAPI +from ape.cli import get_user_selected_account from ape.contracts.base import ( ContractContainer, ContractInstance @@ -291,8 +292,10 @@ class Deployer: __DEPLOYER_ACCOUNT: AccountAPI = None - def __init__(self, account: AccountAPI, params_path: Path, publish: bool): + def __init__(self, params_path: Path, publish: bool, account: typing.Optional[AccountAPI] = None): self.constructor_parameters = ConstructorParameters.from_file(params_path) + if account is None: + account = get_user_selected_account() self._set_deployer(account) self.publish = publish diff --git a/scripts/lynx/deploy_child.py b/scripts/lynx/deploy_child.py index c35a37cc..7bb81743 100644 --- a/scripts/lynx/deploy_child.py +++ b/scripts/lynx/deploy_child.py @@ -1,7 +1,6 @@ #!/usr/bin/python3 from ape import project -from ape.cli import get_user_selected_account from deployment.constants import ( ARTIFACTS_DIR, diff --git a/scripts/lynx/deploy_root.py b/scripts/lynx/deploy_root.py index 4331b2ca..56fed947 100644 --- a/scripts/lynx/deploy_root.py +++ b/scripts/lynx/deploy_root.py @@ -1,7 +1,6 @@ #!/usr/bin/python3 from ape import project -from ape.cli import get_user_selected_account from deployment.constants import ( ARTIFACTS_DIR, From 2856a3bae99b480e7284263196eec4fd7b460694 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 14:51:59 +0200 Subject: [PATCH 106/112] Divides pre-deployment plugin and registry checks --- deployment/utils.py | 8 ++++++-- scripts/lynx/deploy_child.py | 11 ++++------- scripts/lynx/deploy_root.py | 11 ++++------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/deployment/utils.py b/deployment/utils.py index 6f1c6225..5696e05e 100644 --- a/deployment/utils.py +++ b/deployment/utils.py @@ -74,7 +74,11 @@ def verify_contracts(contracts: List[ContractInstance]) -> None: explorer.publish_contract(instance.address) -def prepare_deployment(registry_filepath: Path) -> None: - check_registry_filepath(registry_filepath=registry_filepath) +def check_plugins() -> None: check_etherscan_plugin() check_infura_plugin() + + +def check_deployment_ready(registry_filepath: Path) -> None: + check_plugins() + check_registry_filepath(registry_filepath=registry_filepath) diff --git a/scripts/lynx/deploy_child.py b/scripts/lynx/deploy_child.py index 7bb81743..afc29aa8 100644 --- a/scripts/lynx/deploy_child.py +++ b/scripts/lynx/deploy_child.py @@ -9,8 +9,9 @@ LOCAL_BLOCKCHAIN_ENVIRONMENTS, OZ_DEPENDENCY, ) +from deployment.params import Deployer from deployment.registry import registry_from_ape_deployments -from deployment.utils import prepare_deployment, verify_contracts +from deployment.utils import verify_contracts, check_deployment_ready VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-child-params.json" @@ -31,12 +32,8 @@ def main(): eth-ape 0.6.20 """ - prepare_deployment(registry_filepath=REGISTRY_FILEPATH) - deployer = Deployer( - account=get_user_selected_account(), - params_path=CONSTRUCTOR_PARAMS_FILEPATH, - publish=VERIFY, - ) + check_deployment_ready(registry_filepath=REGISTRY_FILEPATH) + deployer = Deployer(params_path=CONSTRUCTOR_PARAMS_FILEPATH, publish=VERIFY) mock_polygon_child = deployer.deploy(project.MockPolygonChild) proxy_admin = deployer.deploy(OZ_DEPENDENCY.ProxyAdmin) diff --git a/scripts/lynx/deploy_root.py b/scripts/lynx/deploy_root.py index 56fed947..fcd4c2ad 100644 --- a/scripts/lynx/deploy_root.py +++ b/scripts/lynx/deploy_root.py @@ -9,8 +9,9 @@ LOCAL_BLOCKCHAIN_ENVIRONMENTS, OZ_DEPENDENCY, ) +from deployment.params import Deployer from deployment.registry import registry_from_ape_deployments -from deployment.utils import prepare_deployment, verify_contracts +from deployment.utils import verify_contracts, check_deployment_ready VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-root-params.json" @@ -30,12 +31,8 @@ def main(): eth-ape 0.6.20 """ - prepare_deployment(registry_filepath=REGISTRY_FILEPATH) - deployer = Deployer( - account=get_user_selected_account(), - params_path=CONSTRUCTOR_PARAMS_FILEPATH, - publish=VERIFY, - ) + check_deployment_ready(registry_filepath=REGISTRY_FILEPATH) + deployer = Deployer(params_path=CONSTRUCTOR_PARAMS_FILEPATH, publish=VERIFY) reward_token = deployer.deploy(project.LynxStakingToken) mock_threshold_staking = deployer.deploy(project.TestnetThresholdStaking) From 616418888bb06877018f83c3b584d1cb1693babb Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 15:05:56 +0200 Subject: [PATCH 107/112] Utility functions for deployment scripting initilization functons and proxying --- deployment/params.py | 10 ++++++++++ scripts/lynx/deploy_child.py | 19 +++---------------- scripts/lynx/deploy_root.py | 19 ++++--------------- 3 files changed, 17 insertions(+), 31 deletions(-) diff --git a/deployment/params.py b/deployment/params.py index 16269007..45390ba0 100644 --- a/deployment/params.py +++ b/deployment/params.py @@ -326,3 +326,13 @@ def deploy(self, container: ContractContainer) -> ContractInstance: args, kwargs = self._get_args(container), self._get_kwargs() instance = deployer_account.deploy(*args, **kwargs) return instance + + def transact(self, method, *args): + print(f"Transacting {method} with \n\t{args}") + result = method(*args, sender=self.get_account()) + return result + + @staticmethod + def proxy(contract: ContractContainer, proxy_contract: ContractInstance) -> ContractInstance: + print(f"Wrapping {contract} in proxy at {proxy_contract.address}.") + return contract.at(proxy_contract.address) diff --git a/scripts/lynx/deploy_child.py b/scripts/lynx/deploy_child.py index afc29aa8..275ceef5 100644 --- a/scripts/lynx/deploy_child.py +++ b/scripts/lynx/deploy_child.py @@ -39,24 +39,11 @@ def main(): proxy_admin = deployer.deploy(OZ_DEPENDENCY.ProxyAdmin) taco_implementation = deployer.deploy(project.LynxTACoChildApplication) proxy = deployer.deploy(OZ_DEPENDENCY.TransparentUpgradeableProxy) - - print("\nWrapping TACoChildApplication in proxy") - taco_child_application = project.TACoChildApplication.at(proxy.address) - - print(f"\nSetting TACoChildApplication proxy ({taco_child_application.address})" - f" as child application on MockPolygonChild ({mock_polygon_child.address})") - mock_polygon_child.setChildApplication( - taco_child_application.address, - sender=deployer.get_account(), - ) - + taco_child_application = deployer.proxy(project.TACoChildApplication, proxy) + deployer.transact(mock_polygon_child.setChildApplication, taco_child_application.address) ritual_token = deployer.deploy(project.LynxRitualToken) coordinator = deployer.deploy(project.Coordinator) - - print(f"\nInitializing TACoChildApplication proxy ({taco_child_application.address}) " - f"with Coordinator ({coordinator.address})") - taco_child_application.initialize(coordinator.address, sender=deployer.get_account()) - + deployer.transact(taco_child_application.initialize, coordinator.address) global_allow_list = deployer.deploy(project.GlobalAllowList) deployments = [ diff --git a/scripts/lynx/deploy_root.py b/scripts/lynx/deploy_root.py index fcd4c2ad..f5c74008 100644 --- a/scripts/lynx/deploy_root.py +++ b/scripts/lynx/deploy_root.py @@ -39,22 +39,11 @@ def main(): proxy_admin = deployer.deploy(OZ_DEPENDENCY.ProxyAdmin) _ = deployer.deploy(project.TACoApplication) proxy = deployer.deploy(OZ_DEPENDENCY.TransparentUpgradeableProxy) - - print("\nWrapping TACoApplication in proxy") - taco_application = project.TACoApplication.at(proxy.address) - - print(f"\nSetting TACoApplication proxy ({taco_application.address}) on " - f"ThresholdStakingMock ({mock_threshold_staking.address})") - mock_threshold_staking.setApplication(taco_application.address, sender=deployer.get_account()) - - print("\nInitializing TACoApplication proxy") - taco_application.initialize(sender=deployer.get_account()) - + taco_application = deployer.proxy(project.TACoApplication, proxy) + deployer.transact(mock_threshold_staking.setApplication, taco_application.address) + deployer.transact(taco_application.initialize) mock_polygon_root = deployer.deploy(project.MockPolygonRoot) - - print(f"\nSetting child application on TACoApplication proxy " - f"({taco_application.address}) to MockPolygonChild ({mock_polygon_root.address})") - taco_application.setChildApplication(mock_polygon_root.address, sender=deployer) + deployer.transact(taco_application.setChildApplication, mock_polygon_root.address) deployments = [ reward_token, From b9d82ddf0541f1740911856cd51b9a82540bfec4 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 15:07:20 +0200 Subject: [PATCH 108/112] internalize registry success message into registry_from_ape_deployments. --- deployment/registry.py | 2 +- scripts/lynx/deploy_child.py | 6 +----- scripts/lynx/deploy_root.py | 6 +----- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/deployment/registry.py b/deployment/registry.py index 79f533c3..813219a5 100644 --- a/deployment/registry.py +++ b/deployment/registry.py @@ -125,7 +125,7 @@ def registry_from_ape_deployments( registry_data.append(entry) output_filepath = write_registry(data=registry_data, filepath=output_filepath) - + print(f"(i) Registry written to {output_filepath}!") return output_filepath diff --git a/scripts/lynx/deploy_child.py b/scripts/lynx/deploy_child.py index 275ceef5..63981233 100644 --- a/scripts/lynx/deploy_child.py +++ b/scripts/lynx/deploy_child.py @@ -56,10 +56,6 @@ def main(): global_allow_list, ] - output_filepath = registry_from_ape_deployments( - deployments=deployments, output_filepath=REGISTRY_FILEPATH - ) - print(f"(i) Registry written to {output_filepath}!") - + registry_from_ape_deployments(deployments=deployments, output_filepath=REGISTRY_FILEPATH) if VERIFY: verify_contracts(contracts=deployments) diff --git a/scripts/lynx/deploy_root.py b/scripts/lynx/deploy_root.py index f5c74008..65c88157 100644 --- a/scripts/lynx/deploy_root.py +++ b/scripts/lynx/deploy_root.py @@ -54,10 +54,6 @@ def main(): mock_polygon_root, ] - output_filepath = registry_from_ape_deployments( - deployments=deployments, output_filepath=REGISTRY_FILEPATH - ) - print(f"(i) Registry written to {output_filepath}!") - + registry_from_ape_deployments(deployments=deployments, output_filepath=REGISTRY_FILEPATH) if VERIFY: verify_contracts(contracts=deployments) From 34b586bdcb750d10b893d7ee53e3a1893f6005d4 Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 15:10:31 +0200 Subject: [PATCH 109/112] improves proxy wrapping console log message --- deployment/params.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deployment/params.py b/deployment/params.py index 45390ba0..b3a23a6c 100644 --- a/deployment/params.py +++ b/deployment/params.py @@ -334,5 +334,6 @@ def transact(self, method, *args): @staticmethod def proxy(contract: ContractContainer, proxy_contract: ContractInstance) -> ContractInstance: - print(f"Wrapping {contract} in proxy at {proxy_contract.address}.") + print(f"Wrapping {contract.contract_type.name} in " + f"at {proxy_contract.contract_type.name}:{proxy_contract.address}.") return contract.at(proxy_contract.address) From 1824edaa3f8c6ea3bd8b39bf3da0c62391391690 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 27 Sep 2023 09:36:01 -0400 Subject: [PATCH 110/112] Have Deployer.transact take the contract instance to improve messaging. Space out actions in deployment scripts for clarity. --- deployment/params.py | 49 ++++++++++++++++++------------------ scripts/lynx/deploy_child.py | 15 ++++++++--- scripts/lynx/deploy_root.py | 16 ++++++++---- 3 files changed, 47 insertions(+), 33 deletions(-) diff --git a/deployment/params.py b/deployment/params.py index b3a23a6c..c89a4b88 100644 --- a/deployment/params.py +++ b/deployment/params.py @@ -5,25 +5,21 @@ from typing import Any, List from ape import chain, project -from ape.api import AccountAPI +from ape.api import AccountAPI, ReceiptAPI from ape.cli import get_user_selected_account -from ape.contracts.base import ( - ContractContainer, - ContractInstance -) +from ape.contracts.base import ContractContainer, ContractInstance from ape.utils import ZERO_ADDRESS -from eth_typing import ChecksumAddress -from web3.auto.gethdev import w3 - from deployment.confirm import _confirm_resolution from deployment.constants import ( - VARIABLE_PREFIX, - SPECIAL_VARIABLE_DELIMITER, - PROXY_NAME, BYTES_PREFIX, + DEPLOYER_INDICATOR, HEX_PREFIX, - DEPLOYER_INDICATOR + PROXY_NAME, + SPECIAL_VARIABLE_DELIMITER, + VARIABLE_PREFIX, ) +from eth_typing import ChecksumAddress +from web3.auto.gethdev import w3 def _is_variable(param: Any) -> bool: @@ -34,11 +30,7 @@ def _is_variable(param: Any) -> bool: def _is_special_variable(variable: str) -> bool: """Returns True if the variable is a special variable.""" - rules = [ - _is_bytes(variable), - _is_proxy_variable(variable), - _is_deployer(variable) - ] + rules = [_is_bytes(variable), _is_proxy_variable(variable), _is_deployer(variable)] return any(rules) @@ -82,7 +74,9 @@ def _resolve_bytes(variable: str) -> bytes: return value -def _get_contract_instance(contract_container: ContractContainer) -> typing.Union[ContractInstance, ChecksumAddress]: +def _get_contract_instance( + contract_container: ContractContainer, +) -> typing.Union[ContractInstance, ChecksumAddress]: contract_instances = contract_container.deployments if not contract_instances: return ZERO_ADDRESS @@ -292,7 +286,9 @@ class Deployer: __DEPLOYER_ACCOUNT: AccountAPI = None - def __init__(self, params_path: Path, publish: bool, account: typing.Optional[AccountAPI] = None): + def __init__( + self, params_path: Path, publish: bool, account: typing.Optional[AccountAPI] = None + ): self.constructor_parameters = ConstructorParameters.from_file(params_path) if account is None: account = get_user_selected_account() @@ -327,13 +323,18 @@ def deploy(self, container: ContractContainer) -> ContractInstance: instance = deployer_account.deploy(*args, **kwargs) return instance - def transact(self, method, *args): - print(f"Transacting {method} with \n\t{args}") - result = method(*args, sender=self.get_account()) + def transact(self, contract: ContractInstance, method: str, *args) -> ReceiptAPI: + print( + f"Transacting '{method}' on {contract.contract_type.name} " + f"({contract.address}) with args\n\t{args}" + ) + result = contract.invoke_transaction(method, *args, sender=self.get_account()) return result @staticmethod def proxy(contract: ContractContainer, proxy_contract: ContractInstance) -> ContractInstance: - print(f"Wrapping {contract.contract_type.name} in " - f"at {proxy_contract.contract_type.name}:{proxy_contract.address}.") + print( + f"Wrapping {contract.contract_type.name} in " + f"at {proxy_contract.contract_type.name}:{proxy_contract.address}." + ) return contract.at(proxy_contract.address) diff --git a/scripts/lynx/deploy_child.py b/scripts/lynx/deploy_child.py index 63981233..7412ce8a 100644 --- a/scripts/lynx/deploy_child.py +++ b/scripts/lynx/deploy_child.py @@ -1,7 +1,6 @@ #!/usr/bin/python3 from ape import project - from deployment.constants import ( ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR, @@ -11,7 +10,7 @@ ) from deployment.params import Deployer from deployment.registry import registry_from_ape_deployments -from deployment.utils import verify_contracts, check_deployment_ready +from deployment.utils import check_deployment_ready, verify_contracts VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-child-params.json" @@ -36,14 +35,22 @@ def main(): deployer = Deployer(params_path=CONSTRUCTOR_PARAMS_FILEPATH, publish=VERIFY) mock_polygon_child = deployer.deploy(project.MockPolygonChild) + proxy_admin = deployer.deploy(OZ_DEPENDENCY.ProxyAdmin) + taco_implementation = deployer.deploy(project.LynxTACoChildApplication) + proxy = deployer.deploy(OZ_DEPENDENCY.TransparentUpgradeableProxy) taco_child_application = deployer.proxy(project.TACoChildApplication, proxy) - deployer.transact(mock_polygon_child.setChildApplication, taco_child_application.address) + + deployer.transact(mock_polygon_child, "setChildApplication", taco_child_application.address) + ritual_token = deployer.deploy(project.LynxRitualToken) + coordinator = deployer.deploy(project.Coordinator) - deployer.transact(taco_child_application.initialize, coordinator.address) + + deployer.transact(taco_child_application, "initialize", coordinator.address) + global_allow_list = deployer.deploy(project.GlobalAllowList) deployments = [ diff --git a/scripts/lynx/deploy_root.py b/scripts/lynx/deploy_root.py index 65c88157..eb030a41 100644 --- a/scripts/lynx/deploy_root.py +++ b/scripts/lynx/deploy_root.py @@ -1,7 +1,6 @@ #!/usr/bin/python3 from ape import project - from deployment.constants import ( ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR, @@ -11,7 +10,7 @@ ) from deployment.params import Deployer from deployment.registry import registry_from_ape_deployments -from deployment.utils import verify_contracts, check_deployment_ready +from deployment.utils import check_deployment_ready, verify_contracts VERIFY = CURRENT_NETWORK not in LOCAL_BLOCKCHAIN_ENVIRONMENTS CONSTRUCTOR_PARAMS_FILEPATH = CONSTRUCTOR_PARAMS_DIR / "lynx" / "lynx-alpha-13-root-params.json" @@ -35,15 +34,22 @@ def main(): deployer = Deployer(params_path=CONSTRUCTOR_PARAMS_FILEPATH, publish=VERIFY) reward_token = deployer.deploy(project.LynxStakingToken) + mock_threshold_staking = deployer.deploy(project.TestnetThresholdStaking) + proxy_admin = deployer.deploy(OZ_DEPENDENCY.ProxyAdmin) + _ = deployer.deploy(project.TACoApplication) + proxy = deployer.deploy(OZ_DEPENDENCY.TransparentUpgradeableProxy) taco_application = deployer.proxy(project.TACoApplication, proxy) - deployer.transact(mock_threshold_staking.setApplication, taco_application.address) - deployer.transact(taco_application.initialize) + + deployer.transact(mock_threshold_staking, "setApplication", taco_application.address) + + deployer.transact(taco_application, "initialize") + mock_polygon_root = deployer.deploy(project.MockPolygonRoot) - deployer.transact(taco_application.setChildApplication, mock_polygon_root.address) + deployer.transact(taco_application, "setChildApplication", mock_polygon_root.address) deployments = [ reward_token, From f403c5b29d25ed9a4f0ba7d6243ba6a4ea8e97ea Mon Sep 17 00:00:00 2001 From: Kieran Prasch Date: Wed, 27 Sep 2023 16:21:49 +0200 Subject: [PATCH 111/112] Validate transaction function ABIs, and humanize transaction argument confirmation messages during deployment. --- deployment/confirm.py | 8 ++++++ deployment/params.py | 56 +++++++++++++++++++++++++++++------- deployment/registry.py | 5 ++-- deployment/utils.py | 5 ---- scripts/lynx/deploy_child.py | 5 ++-- scripts/lynx/deploy_root.py | 7 +++-- 6 files changed, 64 insertions(+), 22 deletions(-) diff --git a/deployment/confirm.py b/deployment/confirm.py index 4f9adaa1..aae74c5c 100644 --- a/deployment/confirm.py +++ b/deployment/confirm.py @@ -11,6 +11,14 @@ def _confirm_deployment(contract_name: str) -> None: exit(-1) +def _continue() -> None: + """Asks the user to continue.""" + answer = input(f"Continue Y/N? ") + if answer.lower().strip() == "n": + print("Aborting deployment!") + exit(-1) + + def _confirm_zero_address() -> None: answer = input("Zero Address detected for deployment parameter; Continue? Y/N? ") if answer.lower().strip() == "n": diff --git a/deployment/params.py b/deployment/params.py index c89a4b88..4f57fe2b 100644 --- a/deployment/params.py +++ b/deployment/params.py @@ -7,9 +7,20 @@ from ape import chain, project from ape.api import AccountAPI, ReceiptAPI from ape.cli import get_user_selected_account -from ape.contracts.base import ContractContainer, ContractInstance +from ape.contracts.base import ( + ContractContainer, + ContractInstance, + ContractTransactionHandler +) from ape.utils import ZERO_ADDRESS -from deployment.confirm import _confirm_resolution +from eth_typing import ChecksumAddress +from ethpm_types import MethodABI +from web3.auto.gethdev import w3 + +from deployment.confirm import ( + _confirm_resolution, + _continue +) from deployment.constants import ( BYTES_PREFIX, DEPLOYER_INDICATOR, @@ -18,8 +29,6 @@ SPECIAL_VARIABLE_DELIMITER, VARIABLE_PREFIX, ) -from eth_typing import ChecksumAddress -from web3.auto.gethdev import w3 def _is_variable(param: Any) -> bool: @@ -237,6 +246,27 @@ def get_contract_container(contract: str) -> ContractContainer: return contract_container +def _get_function_abi(method: ContractTransactionHandler, args) -> MethodABI: + """Returns the function ABI for a contract function with a given number of arguments.""" + for abi in method.abis: + if len(abi.inputs) == len(args): + return abi + else: + raise ValueError(f"Could not find ABI for {method} with {len(args)} args") + + +def _validate_transaction_args(args: typing.Tuple[Any, ...], abi) -> typing.Dict[str, Any]: + """Validates the transaction arguments against the function ABI.""" + named_args = dict() + for arg, abi_input in zip(args, abi.inputs): + if not w3.is_encodable(abi_input.type, arg): + raise ValueError( + f"Argument '{arg}' of type '{type(arg)}' is not encodable as '{abi_input.type}'" + ) + named_args[abi_input.name] = arg + return named_args + + def validate_constructor_parameters(config: typing.OrderedDict[str, Any]) -> None: """Validates the constructor parameters for all contracts in a single config.""" available_contracts = list(config.keys()) @@ -323,12 +353,18 @@ def deploy(self, container: ContractContainer) -> ContractInstance: instance = deployer_account.deploy(*args, **kwargs) return instance - def transact(self, contract: ContractInstance, method: str, *args) -> ReceiptAPI: - print( - f"Transacting '{method}' on {contract.contract_type.name} " - f"({contract.address}) with args\n\t{args}" - ) - result = contract.invoke_transaction(method, *args, sender=self.get_account()) + def transact(self, method: ContractTransactionHandler, *args) -> ReceiptAPI: + abi = _get_function_abi(method=method, args=args) + named_args = _validate_transaction_args(args=args, abi=abi) + base_message = f"Transacting {method.contract.contract_type.name}[{method.contract.address[:10]}].{method}" + if named_args: + pretty_args = "\n\t".join(f"{k}={v}" for k, v in named_args.items()) + message = f"{base_message} with arguments:\n\t{pretty_args}" + else: + message = f"{base_message} with no arguments" + print(message) + _continue() + result = method(*args, sender=self.get_account()) return result @staticmethod diff --git a/deployment/registry.py b/deployment/registry.py index 813219a5..399e3687 100644 --- a/deployment/registry.py +++ b/deployment/registry.py @@ -4,11 +4,12 @@ from typing import Dict, List, NamedTuple, Optional from ape.contracts import ContractInstance -from deployment.params import get_contract_container -from deployment.utils import check_registry_filepath from eth_typing import ChecksumAddress from eth_utils import to_checksum_address +from deployment.params import get_contract_container +from deployment.utils import check_registry_filepath + class RegistryEntry(NamedTuple): """Represents a single entry in a nucypher-style contract registry.""" diff --git a/deployment/utils.py b/deployment/utils.py index 5696e05e..2552dc50 100644 --- a/deployment/utils.py +++ b/deployment/utils.py @@ -3,7 +3,6 @@ from typing import List from ape import networks -from ape.cli import get_user_selected_account from ape.contracts import ContractInstance from ape_etherscan.utils import API_KEY_ENV_KEY_MAP @@ -11,10 +10,6 @@ CURRENT_NETWORK, LOCAL_BLOCKCHAIN_ENVIRONMENTS ) -from deployment.params import ( - Deployer, - ConstructorParameters -) def check_registry_filepath(registry_filepath: Path) -> None: diff --git a/scripts/lynx/deploy_child.py b/scripts/lynx/deploy_child.py index 7412ce8a..115794b0 100644 --- a/scripts/lynx/deploy_child.py +++ b/scripts/lynx/deploy_child.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 from ape import project + from deployment.constants import ( ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR, @@ -43,13 +44,13 @@ def main(): proxy = deployer.deploy(OZ_DEPENDENCY.TransparentUpgradeableProxy) taco_child_application = deployer.proxy(project.TACoChildApplication, proxy) - deployer.transact(mock_polygon_child, "setChildApplication", taco_child_application.address) + deployer.transact(mock_polygon_child.setChildApplication, taco_child_application.address) ritual_token = deployer.deploy(project.LynxRitualToken) coordinator = deployer.deploy(project.Coordinator) - deployer.transact(taco_child_application, "initialize", coordinator.address) + deployer.transact(taco_child_application.initialize, coordinator.address) global_allow_list = deployer.deploy(project.GlobalAllowList) diff --git a/scripts/lynx/deploy_root.py b/scripts/lynx/deploy_root.py index eb030a41..4cd514a6 100644 --- a/scripts/lynx/deploy_root.py +++ b/scripts/lynx/deploy_root.py @@ -1,6 +1,7 @@ #!/usr/bin/python3 from ape import project + from deployment.constants import ( ARTIFACTS_DIR, CONSTRUCTOR_PARAMS_DIR, @@ -44,12 +45,12 @@ def main(): proxy = deployer.deploy(OZ_DEPENDENCY.TransparentUpgradeableProxy) taco_application = deployer.proxy(project.TACoApplication, proxy) - deployer.transact(mock_threshold_staking, "setApplication", taco_application.address) + deployer.transact(mock_threshold_staking.setApplication, taco_application.address) - deployer.transact(taco_application, "initialize") + deployer.transact(taco_application.initialize) mock_polygon_root = deployer.deploy(project.MockPolygonRoot) - deployer.transact(taco_application, "setChildApplication", mock_polygon_root.address) + deployer.transact(taco_application.setChildApplication, mock_polygon_root.address) deployments = [ reward_token, From 7688e60e1b6e2ae377e9df52ea277c357c179bc9 Mon Sep 17 00:00:00 2001 From: derekpierre Date: Wed, 27 Sep 2023 11:51:21 -0400 Subject: [PATCH 112/112] Create Transactor class (parent of Deployer) for transaction execution and includes validation and annotated information. Use Transactor in scripts which only perform transactions based on already deployed contracts i.e. no fresh deployments. Update configure_staking script to use MockPolygonChild entry from child registry. --- deployment/params.py | 77 ++++++++++++---------- scripts/lynx/configure_staking.py | 51 +++++++------- scripts/lynx/confirm_operator_addresses.py | 9 +-- 3 files changed, 70 insertions(+), 67 deletions(-) diff --git a/deployment/params.py b/deployment/params.py index 4f57fe2b..17931a35 100644 --- a/deployment/params.py +++ b/deployment/params.py @@ -7,20 +7,9 @@ from ape import chain, project from ape.api import AccountAPI, ReceiptAPI from ape.cli import get_user_selected_account -from ape.contracts.base import ( - ContractContainer, - ContractInstance, - ContractTransactionHandler -) +from ape.contracts.base import ContractContainer, ContractInstance, ContractTransactionHandler from ape.utils import ZERO_ADDRESS -from eth_typing import ChecksumAddress -from ethpm_types import MethodABI -from web3.auto.gethdev import w3 - -from deployment.confirm import ( - _confirm_resolution, - _continue -) +from deployment.confirm import _confirm_resolution, _continue from deployment.constants import ( BYTES_PREFIX, DEPLOYER_INDICATOR, @@ -29,6 +18,9 @@ SPECIAL_VARIABLE_DELIMITER, VARIABLE_PREFIX, ) +from eth_typing import ChecksumAddress +from ethpm_types import MethodABI +from web3.auto.gethdev import w3 def _is_variable(param: Any) -> bool: @@ -308,10 +300,42 @@ def resolve(self, contract_name: str) -> OrderedDict: return result -class Deployer: +class Transactor: """ - Represents ape an ape deployment account plus - deployment parameters for a set of contracts. + Represents an ape account plus validated/annotated transaction execution. + """ + + def __init__(self, account: typing.Optional[AccountAPI] = None): + if account is None: + self._account = get_user_selected_account() + + def get_account(self) -> AccountAPI: + """Returns the transactor account.""" + return self._account + + def transact(self, method: ContractTransactionHandler, *args) -> ReceiptAPI: + abi = _get_function_abi(method=method, args=args) + named_args = _validate_transaction_args(args=args, abi=abi) + base_message = ( + f"\nTransacting {method.contract.contract_type.name}" + f"[{method.contract.address[:10]}].{method}" + ) + if named_args: + pretty_args = "\n\t".join(f"{k}={v}" for k, v in named_args.items()) + message = f"{base_message} with arguments:\n\t{pretty_args}" + else: + message = f"{base_message} with no arguments" + print(message) + _continue() + + result = method(*args, sender=self._account) + return result + + +class Deployer(Transactor): + """ + Represents an ape account plus + deployment parameters for a set of contracts, plus validated/annotated execution. """ __DEPLOYER_ACCOUNT: AccountAPI = None @@ -319,10 +343,9 @@ class Deployer: def __init__( self, params_path: Path, publish: bool, account: typing.Optional[AccountAPI] = None ): + super().__init__(account) self.constructor_parameters = ConstructorParameters.from_file(params_path) - if account is None: - account = get_user_selected_account() - self._set_deployer(account) + self._set_deployer(self._account) self.publish = publish @classmethod @@ -353,24 +376,10 @@ def deploy(self, container: ContractContainer) -> ContractInstance: instance = deployer_account.deploy(*args, **kwargs) return instance - def transact(self, method: ContractTransactionHandler, *args) -> ReceiptAPI: - abi = _get_function_abi(method=method, args=args) - named_args = _validate_transaction_args(args=args, abi=abi) - base_message = f"Transacting {method.contract.contract_type.name}[{method.contract.address[:10]}].{method}" - if named_args: - pretty_args = "\n\t".join(f"{k}={v}" for k, v in named_args.items()) - message = f"{base_message} with arguments:\n\t{pretty_args}" - else: - message = f"{base_message} with no arguments" - print(message) - _continue() - result = method(*args, sender=self.get_account()) - return result - @staticmethod def proxy(contract: ContractContainer, proxy_contract: ContractInstance) -> ContractInstance: print( - f"Wrapping {contract.contract_type.name} in " + f"\nWrapping {contract.contract_type.name} in " f"at {proxy_contract.contract_type.name}:{proxy_contract.address}." ) return contract.at(proxy_contract.address) diff --git a/scripts/lynx/configure_staking.py b/scripts/lynx/configure_staking.py index 0cecd9e7..34f7ff92 100644 --- a/scripts/lynx/configure_staking.py +++ b/scripts/lynx/configure_staking.py @@ -1,14 +1,14 @@ from ape import networks, project -from ape.api import AccountAPI -from ape.cli import get_user_selected_account from deployment.constants import ARTIFACTS_DIR, LYNX_NODES +from deployment.params import Transactor from deployment.registry import contracts_from_registry +from deployment.utils import check_plugins ROOT_REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-root-registry.json" CHILD_REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-child-registry.json" -def configure_goerli_root(deployer_account: AccountAPI) -> int: +def configure_goerli_root(transactor: Transactor) -> int: """Configures ThresholdStaking and TACoApplication on Goerli.""" deployments = contracts_from_registry(filepath=ROOT_REGISTRY_FILEPATH) @@ -21,57 +21,50 @@ def configure_goerli_root(deployer_account: AccountAPI) -> int: min_stake_size = taco_application_contract.minimumAuthorization() for staking_provider, operator in LYNX_NODES.items(): # staking - print(f"Setting roles for staking provider {staking_provider} on Goerli") - threshold_staking_contract.setRoles( + transactor.transact( + threshold_staking_contract.setRoles, staking_provider, - deployer_account.address, + transactor.get_account().address, staking_provider, staking_provider, - sender=deployer_account, ) - print( - f"Authorizing increased in stake for staking provider {staking_provider} on Goerli" - ) - threshold_staking_contract.authorizationIncreased( - staking_provider, 0, min_stake_size, sender=deployer_account + transactor.transact( + threshold_staking_contract.authorizationIncreased, + staking_provider, + 0, + min_stake_size, ) # bonding - print(f"Bonding operator {operator} for {staking_provider} on Goerli") - taco_application_contract.bondOperator( - staking_provider, operator, sender=deployer_account - ) + transactor.transact(taco_application_contract.bondOperator, staking_provider, operator) return min_stake_size -def configure_mumbai_root(deployer_account: AccountAPI, stake_size: int): +def configure_mumbai_root(transactor: Transactor, stake_size: int): """Configures MockTACoApplication on Mumbai.""" deployments = contracts_from_registry(filepath=CHILD_REGISTRY_FILEPATH) # Set up lynx stakes on Mumbai poly_network = networks.polygon.mumbai with poly_network.use_provider("infura"): - mock_taco_application_contract = deployments[ - project.LynxMockTACoApplication.contract_type.name - ] + mock_taco_application_contract = deployments[project.MockPolygonChild.contract_type.name] for staking_provider, operator in LYNX_NODES.items(): # staking - print(f"Setting stake for staking provider {staking_provider} on Mumbai") - mock_taco_application_contract.updateAuthorization( - staking_provider, stake_size, sender=deployer_account + transactor.transact( + mock_taco_application_contract.updateAuthorization, staking_provider, stake_size ) # bonding - print(f"Bonding operator {operator} for {staking_provider} on Mumbai") - mock_taco_application_contract.updateOperator( - staking_provider, operator, sender=deployer_account + transactor.transact( + mock_taco_application_contract.updateOperator, staking_provider, operator ) def main(): - deployer_account = get_user_selected_account() - stake_size = configure_goerli_root(deployer_account) - configure_mumbai_root(deployer_account, stake_size) + check_plugins() + transactor = Transactor() + stake_size = configure_goerli_root(transactor) + configure_mumbai_root(transactor, stake_size) diff --git a/scripts/lynx/confirm_operator_addresses.py b/scripts/lynx/confirm_operator_addresses.py index 97c6ab33..667409f7 100644 --- a/scripts/lynx/confirm_operator_addresses.py +++ b/scripts/lynx/confirm_operator_addresses.py @@ -1,7 +1,8 @@ from ape import project -from ape.cli import get_user_selected_account from deployment.constants import ARTIFACTS_DIR, LYNX_NODES +from deployment.params import Transactor from deployment.registry import contracts_from_registry +from deployment.utils import check_plugins ROOT_REGISTRY_FILEPATH = ARTIFACTS_DIR / "lynx" / "lynx-alpha-13-root-registry.json" @@ -12,9 +13,9 @@ def main(): ape run lynx confirm_operator_addresses --network ethereum:goerli:infura """ - - deployer_account = get_user_selected_account() + check_plugins() + transactor = Transactor() deployments = contracts_from_registry(filepath=ROOT_REGISTRY_FILEPATH) mock_polygon_root = deployments[project.MockPolygonRoot.contract_type.name] for _, operator in LYNX_NODES.items(): - mock_polygon_root.confirmOperatorAddress(operator, sender=deployer_account) + transactor.transact(mock_polygon_root.confirmOperatorAddress, operator)