From 5139db69cfddde1cc712e855cc6cd5bdcedb3f4f Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Sat, 28 May 2022 06:52:55 +0200 Subject: [PATCH 01/22] Fix #10 --- util/test/test_rinkeby.py | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/util/test/test_rinkeby.py b/util/test/test_rinkeby.py index d0b8db682..9dd2f9a31 100644 --- a/util/test/test_rinkeby.py +++ b/util/test/test_rinkeby.py @@ -1,11 +1,10 @@ -# import brownie +import brownie from enforce_typing import enforce_types - -# from pprint import pprint +from pprint import pprint import pytest -# from util import networkutil, oceanutil, oceantestutil -# from util.graphutil import submitQuery +from util import networkutil, oceanutil, oceantestutil +from util.graphutil import submitQuery @enforce_types @@ -13,26 +12,26 @@ def test_query_approvedTokens(): print("hello") - # OCEAN = oceanutil.OCEANtoken() + OCEAN = oceanutil.OCEANtoken() - # oceantestutil.randomDeployPool(accounts[0], OCEAN) + oceantestutil.randomDeployPool(accounts[0], OCEAN) - # query = "{ opcs{approvedTokens} }" - # result = submitQuery(query, chainID) + query = "{ opcs{approvedTokens} }" + result = submitQuery(query, chainID) - # pprint(result) + pprint(result) -# @enforce_types -# def setup_function(): -# chainID = networkutil.networkToChainId("rinkeby") -# networkutil.connect(chainID) +@enforce_types +def setup_function(): + chainID = networkutil.networkToChainId("rinkeby") + networkutil.connect(chainID) -# address_file = networkutil.chainIdToAddressFile(chainID) -# oceanutil.recordDeployedContracts(address_file) -# oceantestutil.fillAccountsWithOCEAN() + address_file = networkutil.chainIdToAddressFile(chainID) + oceanutil.recordDeployedContracts(address_file) + oceantestutil.fillAccountsWithOCEAN() -# @enforce_types -# def teardown_function(): -# networkutil.disconnect() +@enforce_types +def teardown_function(): + networkutil.disconnect() From 5bca66c901dfd664252e1523a50b2895b409ed0e Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Sat, 28 May 2022 09:13:56 +0200 Subject: [PATCH 02/22] getting close --- util/networkutil.py | 24 +++++++++----------- util/test/test_rinkeby.py | 46 ++++++++++++++++++++------------------- 2 files changed, 34 insertions(+), 36 deletions(-) diff --git a/util/networkutil.py b/util/networkutil.py index 2a0218788..406af408a 100644 --- a/util/networkutil.py +++ b/util/networkutil.py @@ -6,10 +6,6 @@ from util.constants import CONTRACTS _BARGE_ADDRESS_FILE = "~/.ocean/ocean-contracts/artifacts/address.json" -_BARGE_SUBGRAPH_URI = ( - "http://127.0.0.1:9000/subgraphs/name/oceanprotocol/ocean-subgraph" -) - # Chainid values & names are from brownie, where possible. # https://eth-brownie.readthedocs.io/en/stable/network-management.html @@ -35,20 +31,20 @@ @enforce_types def chainIdToAddressFile(chainID: int) -> str: """Returns the address file for a given chainID""" - if chainID == DEV_CHAINID: - return os.path.expanduser(_BARGE_ADDRESS_FILE) - - raise NotImplementedError() + return os.path.expanduser(_BARGE_ADDRESS_FILE) @enforce_types def chainIdToSubgraphUri(chainID: int) -> str: """Returns the subgraph URI for a given chainID""" + sg = "/subgraphs/name/oceanprotocol/ocean-subgraph" + network_str = chainIdToNetwork(chainID) if chainID == DEV_CHAINID: - return _BARGE_SUBGRAPH_URI - - raise NotImplementedError() - + return "http://127.0.0.1:9000" + sg + elif " " not in network_str: + return f"https://v4.subgraph.{network_str.lower()}.oceanprotocol.com"+sg + else: + raise NotImplementedError("Don't yet support {network_str}") @enforce_types def chainIdToNetwork(chainID: int) -> str: @@ -70,12 +66,12 @@ def connect(chainID: int): network.connect(chainIdToNetwork(chainID)) -@enforce_types +#@enforce_types def disconnect(): network = brownie.network if not network.is_connected(): return - + chainID = network.chain.id if chainID in CONTRACTS: del CONTRACTS[chainID] diff --git a/util/test/test_rinkeby.py b/util/test/test_rinkeby.py index 9dd2f9a31..5172920e9 100644 --- a/util/test/test_rinkeby.py +++ b/util/test/test_rinkeby.py @@ -6,32 +6,34 @@ from util import networkutil, oceanutil, oceantestutil from util.graphutil import submitQuery +CHAINID = networkutil.networkToChainId("rinkeby") @enforce_types -@pytest.mark.skip(reason="need to implement") -def test_query_approvedTokens(): - print("hello") - - OCEAN = oceanutil.OCEANtoken() - - oceantestutil.randomDeployPool(accounts[0], OCEAN) - - query = "{ opcs{approvedTokens} }" - result = submitQuery(query, chainID) - - pprint(result) - - +def test_chainIdToNetwork(): + network_str = networkutil.chainIdToNetwork(CHAINID) + assert network_str == "rinkeby" + @enforce_types -def setup_function(): - chainID = networkutil.networkToChainId("rinkeby") - networkutil.connect(chainID) - - address_file = networkutil.chainIdToAddressFile(chainID) +def test_chainIdToSubgraphUri(): + uri = networkutil.chainIdToSubgraphUri(CHAINID) + assert "subgraph.rinkeby.oceanprotocol.com" in uri + +@enforce_types +def test_main(): + #setup_function + networkutil.connect(CHAINID) + address_file = networkutil.chainIdToAddressFile(CHAINID) oceanutil.recordDeployedContracts(address_file) - oceantestutil.fillAccountsWithOCEAN() + #main + assert brownie.network.chain.id == CHAINID + + query = "{ opcs{approvedTokens} }" + result = submitQuery(query, CHAINID) + + OCEAN = oceanutil.OCEANtoken() + assert OCEAN.symbol() == "OCEAN" -@enforce_types -def teardown_function(): + #teardown_function networkutil.disconnect() + From 2a34551650605b65462e007114f07dbd816da625 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Sat, 28 May 2022 10:54:36 +0200 Subject: [PATCH 03/22] Convert at() calls to from_abi() calls. dftool uses networkutil.connect() directly. More WIP --- dftool | 28 ++++++++++++---------------- util/dispense.py | 5 +++-- util/networkutil.py | 12 ++++++++++++ util/oceanutil.py | 28 ++++++++++++++++++++-------- util/query.py | 8 ++++++-- util/test/test_rinkeby.py | 4 +++- 6 files changed, 56 insertions(+), 29 deletions(-) diff --git a/dftool b/dftool index ac356c748..9d3ac6c4d 100755 --- a/dftool +++ b/dftool @@ -115,7 +115,7 @@ ADDRESS_FILE -- eg for barge: export ADDRESS_FILE={networkutil.chainIdToAddressF os.mkdir(CSV_DIR) # brownie setup - _connectToChain(CHAINID) + networkutil.connect(CHAINID) chain = brownie.network.chain if "-" in ST: @@ -279,9 +279,10 @@ Transactions are signed with envvar 'DFTOOL_KEY`. assert DFREWARDS_ADDR is not None # main work - _connectToChain(CHAINID) + networkutil.connect(CHAINID) from_account = _getPrivateAccount() - token_symbol = B.Simpletoken.at(TOKEN_ADDR).symbol() + at = brownie.Contract.from_abi + token_symbol = at("", TOKEN_ADDR, B.Simpletoken.abi).symbol() rewards = csvs.loadRewardsCsv(CSV_DIR, token_symbol) dispense.dispense( rewards[CHAINID], @@ -340,7 +341,7 @@ Usage: dftool newdfrewards CHAINID print(f"Arguments: CHAINID={CHAINID}") # main work - _connectToChain(CHAINID) + networkutil.connect(CHAINID) from_account = _getPrivateAccount() df_rewards = B.DFRewards.deploy({"from": from_account}) print(f"New dispense contract deployed at address: {df_rewards.address}") @@ -407,7 +408,7 @@ Usage: dftool mine BLOCKS [TIMEDELTA] print(f"Arguments: BLOCKS={BLOCKS}, TIMEDELTA={TIMEDELTA}") # main work - _connectToChain(DEV_CHAINID) # hardcoded bc it's the only one we can force + networkutil.connect(DEV_CHAINID) chain = brownie.network.chain if TIMEDELTA is None: chain.mine(blocks=BLOCKS, timedelta=TIMEDELTA) @@ -432,7 +433,7 @@ Usage: dftool newacct assert sys.argv[1] == "newacct" # main work - _connectToChain(DEV_CHAINID) # hardcoded bc it's the only one we can force + networkutil.connect(DEV_CHAINID) account = brownie.network.accounts.add() print("Generated new account:") print(f" private_key = {account.private_key}") @@ -457,7 +458,7 @@ Usage: dftool newtoken CHAINID print(f"Arguments:\n CHAINID={CHAINID}") # main work - _connectToChain(CHAINID) + networkutil.connect(CHAINID) from_account = _getPrivateAccount() token = B.Simpletoken.deploy("TST", "Test Token", 18, 1e21, {"from": from_account}) print(f"Token '{token.symbol()}' deployed at address: {token.address}") @@ -487,14 +488,15 @@ If envvar ADDRESS_FILE is not None, it gives balance for OCEAN token too. # do work print("Account info:") - _connectToChain(CHAINID) + networkutil.connect(CHAINID) if len(str(ACCOUNT_ADDR)) == 1: addr_i = int(ACCOUNT_ADDR) ACCOUNT_ADDR = brownie.accounts[addr_i] print(f" Address = {ACCOUNT_ADDR}") if TOKEN_ADDR is not None: - token = B.Simpletoken.at(TOKEN_ADDR) + at = brownie.Contract.from_abi + token = at("", TOKEN_ADDR, B.Simpletoken.abi) balance = token.balanceOf(ACCOUNT_ADDR) print(f" {fromBase18(balance)} {token.symbol()}") @@ -525,7 +527,7 @@ Usage: dftool chaininfo CHAINID CHAINID = int(sys.argv[2]) # do work - _connectToChain(CHAINID) + networkutil.connect(CHAINID) # blocks = len(brownie.network.chain) print("\nChain info:") print(f" # blocks: {len(brownie.network.chain)}") @@ -553,12 +555,6 @@ def _getPrivateAccount(): return account -@enforce_types -def _connectToChain(chainID: int): - network = networkutil.chainIdToNetwork(chainID) - brownie.network.connect(network) - - # ======================================================================== # main @enforce_types diff --git a/util/dispense.py b/util/dispense.py index bdc35d992..9695bbd6f 100644 --- a/util/dispense.py +++ b/util/dispense.py @@ -40,8 +40,9 @@ def dispense( logger.info("dispense: begin") logger.info(f" # addresses: {len(rewards)}") - df_rewards = B.DFRewards.at(dfrewards_addr) - TOK = B.Simpletoken.at(token_addr) + at = brownie.Contract.from_abi + df_rewards = at("", dfrewards_addr. B.DFRewards.abi) + TOK = at("", token_addr, B.Simpletoken.abi) logger.info(f" Total amount: {sum(rewards.values())} {TOK.symbol()}") to_addrs = list(rewards.keys()) diff --git a/util/networkutil.py b/util/networkutil.py index 406af408a..2abd3d834 100644 --- a/util/networkutil.py +++ b/util/networkutil.py @@ -3,6 +3,7 @@ import brownie from enforce_typing import enforce_types +from util.constants import BROWNIE_PROJECT as B from util.constants import CONTRACTS _BARGE_ADDRESS_FILE = "~/.ocean/ocean-contracts/artifacts/address.json" @@ -76,4 +77,15 @@ def disconnect(): if chainID in CONTRACTS: del CONTRACTS[chainID] + #workaround for issue https://github.com/eth-brownie/brownie/issues/1144 + #how: give _contract_map an entry for each contract in + if chainID != DEV_CHAINID: + for c in [x for v in B._containers.values() for x in v._contracts]: + lower = c.address.lower() + checksum = brownie.web3.toChecksumAddress(lower) + network.state._contract_map[lower] = None + network.state._contract_map[checksum] = None + + print("last time, had error on 0x8967BCF84170c91B0d24D4302C2376283b0B3a07") + import pdb; pdb.set_trace() network.disconnect() diff --git a/util/oceanutil.py b/util/oceanutil.py index 7d4464d12..c53c6f00c 100644 --- a/util/oceanutil.py +++ b/util/oceanutil.py @@ -40,14 +40,26 @@ def recordDeployedContracts(address_file: str): a = json.load(json_file)[network] # dict of contract_name: address C = {} - C["Ocean"] = B.Simpletoken.at(a["Ocean"]) - C["ERC721Template"] = B.ERC721Template.at(a["ERC721Template"]["1"]) - C["ERC20Template"] = B.ERC20Template.at(a["ERC20Template"]["1"]) - C["PoolTemplate"] = B.BPool.at(a["poolTemplate"]) - C["Router"] = B.FactoryRouter.at(a["Router"]) - C["Staking"] = B.SideStaking.at(a["Staking"]) - C["ERC721Factory"] = B.ERC721Factory.at(a["ERC721Factory"]) - C["FixedPrice"] = B.FixedRateExchange.at(a["FixedPrice"]) + #NEW + at = brownie.Contract.from_abi + C["Ocean"] = at("", a["Ocean"], B.Simpletoken.abi) + C["ERC721Template"] = at("", a["ERC721Template"]["1"], B.ERC721Template.abi) + C["ERC20Template"] = at("", a["ERC20Template"]["1"], B.ERC20Template.abi) + C["PoolTemplate"] = at("", a["poolTemplate"], B.BPool.abi) + C["Router"] = at("", a["Router"], B.FactoryRouter.abi) + C["Staking"] = at("", a["Staking"], B.SideStaking.abi) + C["ERC721Factory"] = at("", a["ERC721Factory"], B.ERC721Factory.abi) + C["FixedPrice"] = at("", a["FixedPrice"], B.FixedRateExchange.abi) + + #OLD + # C["Ocean"] = B.Simpletoken.at(a["Ocean"]) + # C["ERC721Template"] = B.ERC721Template.at(a["ERC721Template"]["1"]) + # C["ERC20Template"] = B.ERC20Template.at(a["ERC20Template"]["1"]) + # C["PoolTemplate"] = B.BPool.at(a["poolTemplate"]) + # C["Router"] = B.FactoryRouter.at(a["Router"]) + # C["Staking"] = B.SideStaking.at(a["Staking"]) + # C["ERC721Factory"] = B.ERC721Factory.at(a["ERC721Factory"]) + # C["FixedPrice"] = B.FixedRateExchange.at(a["FixedPrice"]) CONTRACTS[chainID] = C diff --git a/util/query.py b/util/query.py index 41f5162fd..4954e96dc 100644 --- a/util/query.py +++ b/util/query.py @@ -304,7 +304,9 @@ def getApprovedTokens(chainID: int) -> Dict[str, str]: query = "{ opcs{approvedTokens} }" result = submitQuery(query, chainID) addrs = result["data"]["opcs"][0]["approvedTokens"] - d = {addr.lower(): B.Simpletoken.at(addr).symbol().upper() for addr in addrs} + at = brownie.Contract.from_abi + d = {addr.lower(): at("", addr, B.Simpletoken.abi).symbol().upper() + for addr in addrs} assert len(addrs) == len(set(d.values())), "symbols not unique, eek" for symbol in d.values(): assert symbol == symbol.upper(), "symbols should be uppercase" @@ -371,7 +373,9 @@ def _symbol(addr: str): """Returns token symbol, given its address.""" global _ADDR_TO_SYMBOL if addr not in _ADDR_TO_SYMBOL: - symbol = B.Simpletoken.at(addr).symbol() + at = brownie.Contract.from_abi + token = at("", addr, B.Simpletoken.abi) + symbol = token.symbol() symbol = symbol.upper() # follow lower-upper rules _ADDR_TO_SYMBOL[addr] = symbol return _ADDR_TO_SYMBOL[addr] diff --git a/util/test/test_rinkeby.py b/util/test/test_rinkeby.py index 5172920e9..1b5286b60 100644 --- a/util/test/test_rinkeby.py +++ b/util/test/test_rinkeby.py @@ -3,8 +3,10 @@ from pprint import pprint import pytest +from util.query import submitQuery + from util import networkutil, oceanutil, oceantestutil -from util.graphutil import submitQuery +#from util.graphutil import submitQuery CHAINID = networkutil.networkToChainId("rinkeby") From f517fde757ef0757eb1ab61bda61fe7a91a3d304 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Sat, 28 May 2022 10:59:39 +0200 Subject: [PATCH 04/22] first cut solution to issue --- util/networkutil.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/util/networkutil.py b/util/networkutil.py index 2abd3d834..79c7c40bb 100644 --- a/util/networkutil.py +++ b/util/networkutil.py @@ -77,15 +77,17 @@ def disconnect(): if chainID in CONTRACTS: del CONTRACTS[chainID] - #workaround for issue https://github.com/eth-brownie/brownie/issues/1144 - #how: give _contract_map an entry for each contract in - if chainID != DEV_CHAINID: - for c in [x for v in B._containers.values() for x in v._contracts]: - lower = c.address.lower() - checksum = brownie.web3.toChecksumAddress(lower) - network.state._contract_map[lower] = None - network.state._contract_map[checksum] = None - - print("last time, had error on 0x8967BCF84170c91B0d24D4302C2376283b0B3a07") - import pdb; pdb.set_trace() - network.disconnect() + if chainID == DEV_CHAINID: + network.disconnect() + else: + #workaround for https://github.com/eth-brownie/brownie/issues/1144 + #in file venv/lib/python3.8/site-packages/brownie/network/state.py + # function: _remove_contract() + # code: del _contract_map[contract.address] + #It calls that function from two separate places. First time it + # deletes, second time it has nothing left to delete. + try: + network.disconnect() + except KeyError: + print("Found known issue. It's ok to skip.") + From b7bf10820534290145f86e605e910fc6262edcb8 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Sat, 28 May 2022 11:09:57 +0200 Subject: [PATCH 05/22] another approach, that doesn't rely on try/catch --- util/networkutil.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/util/networkutil.py b/util/networkutil.py index 79c7c40bb..d48060c6d 100644 --- a/util/networkutil.py +++ b/util/networkutil.py @@ -86,8 +86,18 @@ def disconnect(): # code: del _contract_map[contract.address] #It calls that function from two separate places. First time it # deletes, second time it has nothing left to delete. - try: - network.disconnect() - except KeyError: - print("Found known issue. It's ok to skip.") - + + #mimic brownie/network/main.py::disconnect() + rpc = network.rpc + web3 = brownie.web3 + kill_rpc = True + #network.CONFIG.clear_active() #TURN OFF + if kill_rpc and rpc.is_active(): + if rpc.is_child(): + rpc.kill() + web3.disconnect() + #_notify_registry(0) #TURN OFF + + #HACK: dummy addresses. BUT, it doesn't help, so comment out + # for contract in [x for v in B._containers.values() for x in v._contracts]: + # network.state._contract_map[contract.address] = None From 516a7c32482b3e70a9c4d5d7c9b0785d3d2778bc Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 08:40:43 +0200 Subject: [PATCH 06/22] better comments --- util/networkutil.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/util/networkutil.py b/util/networkutil.py index d48060c6d..a183615e7 100644 --- a/util/networkutil.py +++ b/util/networkutil.py @@ -84,20 +84,27 @@ def disconnect(): #in file venv/lib/python3.8/site-packages/brownie/network/state.py # function: _remove_contract() # code: del _contract_map[contract.address] - #It calls that function from two separate places. First time it - # deletes, second time it has nothing left to delete. + #When it calls _remove_contract(): + # - First time, it deletes _contract_map items + # - After that, it can't find them, so gives KeyError - #mimic brownie/network/main.py::disconnect() + #mimic brownie/network/main.py::disconnect(), + # except bypass _remove_contract() to avoid KeyError rpc = network.rpc web3 = brownie.web3 kill_rpc = True - #network.CONFIG.clear_active() #TURN OFF + #network.CONFIG.clear_active() #bypass remove_contract() if kill_rpc and rpc.is_active(): if rpc.is_child(): rpc.kill() web3.disconnect() - #_notify_registry(0) #TURN OFF - - #HACK: dummy addresses. BUT, it doesn't help, so comment out - # for contract in [x for v in B._containers.values() for x in v._contracts]: - # network.state._contract_map[contract.address] = None + #_notify_registry(0) #bypass remove_contract() + + #Before brownie shuts down, it calls _remove_contract() again + # But _contract_map items are already deleted. Solve by + # reinserting 'None' items in to _contract_map + for contract in [x for v in B._containers.values() for x in v._contracts]: + network.state._contract_map[contract.address] = None + for container in B._containers.values(): + container._contracts.clear() + B._containers.clear() From bd277dd358a5d35a47f538a9e7e624884a797ceb Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 08:49:59 +0200 Subject: [PATCH 07/22] bug fix --- util/dispense.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/util/dispense.py b/util/dispense.py index 9695bbd6f..dfe969155 100644 --- a/util/dispense.py +++ b/util/dispense.py @@ -1,6 +1,7 @@ # pylint: disable=logging-fstring-interpolation from typing import Dict, Optional +import brownie from enforce_typing import enforce_types from util.constants import BROWNIE_PROJECT as B @@ -41,7 +42,7 @@ def dispense( logger.info(f" # addresses: {len(rewards)}") at = brownie.Contract.from_abi - df_rewards = at("", dfrewards_addr. B.DFRewards.abi) + df_rewards = at("", dfrewards_addr, B.DFRewards.abi) TOK = at("", token_addr, B.Simpletoken.abi) logger.info(f" Total amount: {sum(rewards.values())} {TOK.symbol()}") From 72f6c9334f0d4856edeb901ee3811bff9bf8b85c Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 08:50:23 +0200 Subject: [PATCH 08/22] remove comments --- util/oceanutil.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/util/oceanutil.py b/util/oceanutil.py index c53c6f00c..96c88b443 100644 --- a/util/oceanutil.py +++ b/util/oceanutil.py @@ -40,7 +40,7 @@ def recordDeployedContracts(address_file: str): a = json.load(json_file)[network] # dict of contract_name: address C = {} - #NEW + at = brownie.Contract.from_abi C["Ocean"] = at("", a["Ocean"], B.Simpletoken.abi) C["ERC721Template"] = at("", a["ERC721Template"]["1"], B.ERC721Template.abi) @@ -51,16 +51,6 @@ def recordDeployedContracts(address_file: str): C["ERC721Factory"] = at("", a["ERC721Factory"], B.ERC721Factory.abi) C["FixedPrice"] = at("", a["FixedPrice"], B.FixedRateExchange.abi) - #OLD - # C["Ocean"] = B.Simpletoken.at(a["Ocean"]) - # C["ERC721Template"] = B.ERC721Template.at(a["ERC721Template"]["1"]) - # C["ERC20Template"] = B.ERC20Template.at(a["ERC20Template"]["1"]) - # C["PoolTemplate"] = B.BPool.at(a["poolTemplate"]) - # C["Router"] = B.FactoryRouter.at(a["Router"]) - # C["Staking"] = B.SideStaking.at(a["Staking"]) - # C["ERC721Factory"] = B.ERC721Factory.at(a["ERC721Factory"]) - # C["FixedPrice"] = B.FixedRateExchange.at(a["FixedPrice"]) - CONTRACTS[chainID] = C From 803c0e4d612c167210f1546ede18c6cc37f6e0d4 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 12:10:06 +0200 Subject: [PATCH 09/22] have network names based on sg --- util/networkutil.py | 24 +++++++++++------------- util/test/test_networkutil.py | 19 ++++++++----------- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/util/networkutil.py b/util/networkutil.py index a183615e7..585aa88f9 100644 --- a/util/networkutil.py +++ b/util/networkutil.py @@ -8,19 +8,19 @@ _BARGE_ADDRESS_FILE = "~/.ocean/ocean-contracts/artifacts/address.json" -# Chainid values & names are from brownie, where possible. -# https://eth-brownie.readthedocs.io/en/stable/network-management.html -# Otherwise, values & names are from networkutil.org. +# Development chainid is from brownie, rest are from chainlist.org +# Chain values to fit Ocean subgraph urls as given in +# https://v3.docs.oceanprotocol.com/concepts/networks/ _CHAINID_TO_NETWORK = { 8996: "development", # ganache - 1: "mainnet", # eth mainnet + 1: "mainnet", 3: "ropsten", 4: "rinkeby", - 56: "Binance Smart Chain", - 137: "Polygon Mainnet", - 246: "Energy Web Chain", - 1284: "Moonbeam", - 1285: "Moonriver", + 56: "bsc", + 137: "polygon", + 246: "energyweb", + 1284: "moonbeam", + 1285: "moonriver", } _NETWORK_TO_CHAINID = { network: chainID for chainID, network in _CHAINID_TO_NETWORK.items() @@ -39,13 +39,11 @@ def chainIdToAddressFile(chainID: int) -> str: def chainIdToSubgraphUri(chainID: int) -> str: """Returns the subgraph URI for a given chainID""" sg = "/subgraphs/name/oceanprotocol/ocean-subgraph" - network_str = chainIdToNetwork(chainID) if chainID == DEV_CHAINID: return "http://127.0.0.1:9000" + sg - elif " " not in network_str: - return f"https://v4.subgraph.{network_str.lower()}.oceanprotocol.com"+sg else: - raise NotImplementedError("Don't yet support {network_str}") + network_str = chainIdToNetwork(chainID) + return f"https://v4.subgraph.{network_str}.oceanprotocol.com"+sg @enforce_types def chainIdToNetwork(chainID: int) -> str: diff --git a/util/test/test_networkutil.py b/util/test/test_networkutil.py index a4ef0cc94..6ea79c2ae 100644 --- a/util/test/test_networkutil.py +++ b/util/test/test_networkutil.py @@ -6,25 +6,22 @@ @enforce_types def test_chainIdToSubgraphUri(): - assert ( - networkutil.chainIdToSubgraphUri(networkutil.DEV_CHAINID)[:21] - == "http://127.0.0.1:9000" - ) - - for chainID in [1, 137]: - with pytest.raises(NotImplementedError): - networkutil.chainIdToSubgraphUri(chainID) - + for chainID, network_str in networkutil._CHAINID_TO_NETWORK.items(): + uri = networkutil.chainIdToSubgraphUri(chainID) + if chainID == networkutil.DEV_CHAINID: + assert uri[:21] == "http://127.0.0.1:9000" + else: + assert network_str in uri @enforce_types def test_chainIdToNetwork(): assert networkutil.chainIdToNetwork(8996) == "development" assert networkutil.chainIdToNetwork(1) == "mainnet" - assert networkutil.chainIdToNetwork(137) == "Polygon Mainnet" + assert networkutil.chainIdToNetwork(137) == "polygon" @enforce_types def test_networkToChainId(): assert networkutil.networkToChainId("development") == 8996 assert networkutil.networkToChainId("mainnet") == 1 - assert networkutil.networkToChainId("Polygon Mainnet") == 137 + assert networkutil.networkToChainId("polygon") == 137 From 260c7f1818b715d77d1573b7c4eb39e7a1b31f21 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 16:12:55 +0200 Subject: [PATCH 10/22] updates --- util/networkutil.py | 39 +++++++-------------------------------- 1 file changed, 7 insertions(+), 32 deletions(-) diff --git a/util/networkutil.py b/util/networkutil.py index 585aa88f9..e1ef6bc82 100644 --- a/util/networkutil.py +++ b/util/networkutil.py @@ -61,11 +61,11 @@ def networkToChainId(network: str) -> int: def connect(chainID: int): network = brownie.network if network.is_connected(): - network.disconnect() + disconnect() #call networkutil.disconnect(), *NOT* brownie directly network.connect(chainIdToNetwork(chainID)) -#@enforce_types +@enforce_types def disconnect(): network = brownie.network if not network.is_connected(): @@ -75,34 +75,9 @@ def disconnect(): if chainID in CONTRACTS: del CONTRACTS[chainID] - if chainID == DEV_CHAINID: + try: network.disconnect() - else: - #workaround for https://github.com/eth-brownie/brownie/issues/1144 - #in file venv/lib/python3.8/site-packages/brownie/network/state.py - # function: _remove_contract() - # code: del _contract_map[contract.address] - #When it calls _remove_contract(): - # - First time, it deletes _contract_map items - # - After that, it can't find them, so gives KeyError - - #mimic brownie/network/main.py::disconnect(), - # except bypass _remove_contract() to avoid KeyError - rpc = network.rpc - web3 = brownie.web3 - kill_rpc = True - #network.CONFIG.clear_active() #bypass remove_contract() - if kill_rpc and rpc.is_active(): - if rpc.is_child(): - rpc.kill() - web3.disconnect() - #_notify_registry(0) #bypass remove_contract() - - #Before brownie shuts down, it calls _remove_contract() again - # But _contract_map items are already deleted. Solve by - # reinserting 'None' items in to _contract_map - for contract in [x for v in B._containers.values() for x in v._contracts]: - network.state._contract_map[contract.address] = None - for container in B._containers.values(): - container._contracts.clear() - B._containers.clear() + except: + #overcome brownie issue + #https://github.com/eth-brownie/brownie/issues/1144 + pass From d9a98bdea312599197038a2cb4f16c3a14ce3106 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 16:14:00 +0200 Subject: [PATCH 11/22] tweak --- util/oceanutil.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/util/oceanutil.py b/util/oceanutil.py index 96c88b443..18bc7f4f4 100644 --- a/util/oceanutil.py +++ b/util/oceanutil.py @@ -153,7 +153,8 @@ def createBPoolFromDatatoken( ): TOK_have = fromBase18(base_TOKEN.balanceOf(from_account)) TOK_need = init_TOKEN_liquidity - assert TOK_have >= TOK_need, f"have {TOK_have} TOK, need {TOK_need}" + TOK_name = base_TOKEN.symbol() + assert TOK_have >= TOK_need, f"have {TOK_have} {TOK_name}, need {TOK_need}" pool_template = PoolTemplate() router = factoryRouter() # router.routerOwner() = '0xe2DD..' = accounts[0] From e465733cc1944fa6a4b1c3997e14338e862bdcd5 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 16:32:02 +0200 Subject: [PATCH 12/22] workaround, KISS --- util/test/test_rinkeby.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/util/test/test_rinkeby.py b/util/test/test_rinkeby.py index 1b5286b60..85ed2c846 100644 --- a/util/test/test_rinkeby.py +++ b/util/test/test_rinkeby.py @@ -22,6 +22,16 @@ def test_chainIdToSubgraphUri(): @enforce_types def test_main(): + #FIXME: only do a bash level call here, otherwise brownie goes crazy + + + return + #problem, like in https://github.com/eth-brownie/brownie/issues/1144 + #in file venv/lib/python3.8/site-packages/brownie/network/state.py + # function: _remove_contract() + # code: del _contract_map[contract.address] + + #setup_function networkutil.connect(CHAINID) address_file = networkutil.chainIdToAddressFile(CHAINID) From aeb7eaa3195a02ad3e1964d5451be1aad9efefba Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 17:23:32 +0200 Subject: [PATCH 13/22] revert at() in dftool --- dftool | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dftool b/dftool index 9d3ac6c4d..e91fdd19b 100755 --- a/dftool +++ b/dftool @@ -281,8 +281,7 @@ Transactions are signed with envvar 'DFTOOL_KEY`. # main work networkutil.connect(CHAINID) from_account = _getPrivateAccount() - at = brownie.Contract.from_abi - token_symbol = at("", TOKEN_ADDR, B.Simpletoken.abi).symbol() + token_symbol = B.Simpletoken.at(TOKEN_ADDR).symbol() rewards = csvs.loadRewardsCsv(CSV_DIR, token_symbol) dispense.dispense( rewards[CHAINID], @@ -495,8 +494,7 @@ If envvar ADDRESS_FILE is not None, it gives balance for OCEAN token too. print(f" Address = {ACCOUNT_ADDR}") if TOKEN_ADDR is not None: - at = brownie.Contract.from_abi - token = at("", TOKEN_ADDR, B.Simpletoken.abi) + token = B.Simpletoken.at(TOKEN_ADDR) balance = token.balanceOf(ACCOUNT_ADDR) print(f" {fromBase18(balance)} {token.symbol()}") From 2ac25fe6f3f83126f120441cdbec48dea227a817 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 17:24:42 +0200 Subject: [PATCH 14/22] revert at() in dispense.py --- util/dispense.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/util/dispense.py b/util/dispense.py index dfe969155..bdc35d992 100644 --- a/util/dispense.py +++ b/util/dispense.py @@ -1,7 +1,6 @@ # pylint: disable=logging-fstring-interpolation from typing import Dict, Optional -import brownie from enforce_typing import enforce_types from util.constants import BROWNIE_PROJECT as B @@ -41,9 +40,8 @@ def dispense( logger.info("dispense: begin") logger.info(f" # addresses: {len(rewards)}") - at = brownie.Contract.from_abi - df_rewards = at("", dfrewards_addr, B.DFRewards.abi) - TOK = at("", token_addr, B.Simpletoken.abi) + df_rewards = B.DFRewards.at(dfrewards_addr) + TOK = B.Simpletoken.at(token_addr) logger.info(f" Total amount: {sum(rewards.values())} {TOK.symbol()}") to_addrs = list(rewards.keys()) From 5865f8eba3d442e49fb64e7a63b1a240d6ba2d61 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 17:25:52 +0200 Subject: [PATCH 15/22] revert at() in oceanutil.py --- util/oceanutil.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/util/oceanutil.py b/util/oceanutil.py index 18bc7f4f4..b42df5c3a 100644 --- a/util/oceanutil.py +++ b/util/oceanutil.py @@ -40,16 +40,14 @@ def recordDeployedContracts(address_file: str): a = json.load(json_file)[network] # dict of contract_name: address C = {} - - at = brownie.Contract.from_abi - C["Ocean"] = at("", a["Ocean"], B.Simpletoken.abi) - C["ERC721Template"] = at("", a["ERC721Template"]["1"], B.ERC721Template.abi) - C["ERC20Template"] = at("", a["ERC20Template"]["1"], B.ERC20Template.abi) - C["PoolTemplate"] = at("", a["poolTemplate"], B.BPool.abi) - C["Router"] = at("", a["Router"], B.FactoryRouter.abi) - C["Staking"] = at("", a["Staking"], B.SideStaking.abi) - C["ERC721Factory"] = at("", a["ERC721Factory"], B.ERC721Factory.abi) - C["FixedPrice"] = at("", a["FixedPrice"], B.FixedRateExchange.abi) + C["Ocean"] = B.Simpletoken.at(a["Ocean"]) + C["ERC721Template"] = B.ERC721Template.at(a["ERC721Template"]["1"]) + C["ERC20Template"] = B.ERC20Template.at(a["ERC20Template"]["1"]) + C["PoolTemplate"] = B.BPool.at(a["poolTemplate"]) + C["Router"] = B.FactoryRouter.at(a["Router"]) + C["Staking"] = B.SideStaking.at(a["Staking"]) + C["ERC721Factory"] = B.ERC721Factory.at(a["ERC721Factory"]) + C["FixedPrice"] = B.FixedRateExchange.at(a["FixedPrice"]) CONTRACTS[chainID] = C From 3b19d63b9406a8ad10febfe42762a7f5c2c440e5 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 17:26:24 +0200 Subject: [PATCH 16/22] tweak --- util/oceanutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/oceanutil.py b/util/oceanutil.py index b42df5c3a..b1c71f174 100644 --- a/util/oceanutil.py +++ b/util/oceanutil.py @@ -47,7 +47,7 @@ def recordDeployedContracts(address_file: str): C["Router"] = B.FactoryRouter.at(a["Router"]) C["Staking"] = B.SideStaking.at(a["Staking"]) C["ERC721Factory"] = B.ERC721Factory.at(a["ERC721Factory"]) - C["FixedPrice"] = B.FixedRateExchange.at(a["FixedPrice"]) + C["FixedPrice"] = B.FixedRateExchange.at(a["FixedPrice"]) CONTRACTS[chainID] = C From 710edf35a71bf4b3952cebc190579a889aa745f2 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 17:27:47 +0200 Subject: [PATCH 17/22] revert at() in query.py --- util/query.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/util/query.py b/util/query.py index 4954e96dc..41f5162fd 100644 --- a/util/query.py +++ b/util/query.py @@ -304,9 +304,7 @@ def getApprovedTokens(chainID: int) -> Dict[str, str]: query = "{ opcs{approvedTokens} }" result = submitQuery(query, chainID) addrs = result["data"]["opcs"][0]["approvedTokens"] - at = brownie.Contract.from_abi - d = {addr.lower(): at("", addr, B.Simpletoken.abi).symbol().upper() - for addr in addrs} + d = {addr.lower(): B.Simpletoken.at(addr).symbol().upper() for addr in addrs} assert len(addrs) == len(set(d.values())), "symbols not unique, eek" for symbol in d.values(): assert symbol == symbol.upper(), "symbols should be uppercase" @@ -373,9 +371,7 @@ def _symbol(addr: str): """Returns token symbol, given its address.""" global _ADDR_TO_SYMBOL if addr not in _ADDR_TO_SYMBOL: - at = brownie.Contract.from_abi - token = at("", addr, B.Simpletoken.abi) - symbol = token.symbol() + symbol = B.Simpletoken.at(addr).symbol() symbol = symbol.upper() # follow lower-upper rules _ADDR_TO_SYMBOL[addr] = symbol return _ADDR_TO_SYMBOL[addr] From f4a9e1bb497305c8bbba0481ffdd699c668813c7 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 17:45:34 +0200 Subject: [PATCH 18/22] test connecting to rinkeby, while bypassing brownie bug --- util/test/test_rinkeby.py | 49 +++++++++++++++------------------------ 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/util/test/test_rinkeby.py b/util/test/test_rinkeby.py index 85ed2c846..82acfda86 100644 --- a/util/test/test_rinkeby.py +++ b/util/test/test_rinkeby.py @@ -1,12 +1,8 @@ -import brownie -from enforce_typing import enforce_types -from pprint import pprint -import pytest +import os -from util.query import submitQuery +from enforce_typing import enforce_types -from util import networkutil, oceanutil, oceantestutil -#from util.graphutil import submitQuery +from util import networkutil CHAINID = networkutil.networkToChainId("rinkeby") @@ -21,31 +17,24 @@ def test_chainIdToSubgraphUri(): assert "subgraph.rinkeby.oceanprotocol.com" in uri @enforce_types -def test_main(): - #FIXME: only do a bash level call here, otherwise brownie goes crazy - - - return - #problem, like in https://github.com/eth-brownie/brownie/issues/1144 +def test_main(tmp_path): + #brownie has a bug when trying to shut down non-ganache networks + #details in https://github.com/eth-brownie/brownie/issues/1144 #in file venv/lib/python3.8/site-packages/brownie/network/state.py # function: _remove_contract() # code: del _contract_map[contract.address] - - #setup_function - networkutil.connect(CHAINID) - address_file = networkutil.chainIdToAddressFile(CHAINID) - oceanutil.recordDeployedContracts(address_file) - - #main - assert brownie.network.chain.id == CHAINID - - query = "{ opcs{approvedTokens} }" - result = submitQuery(query, CHAINID) - - OCEAN = oceanutil.OCEANtoken() - assert OCEAN.symbol() == "OCEAN" - - #teardown_function - networkutil.disconnect() + #This isn't a problem from cli, since it cleans up mem + #But it is a problem for unit tests. Our workaround is to do a system call. + + ACCOUNT_ADDR = '0xc945a5a960fef1a9c3fef8593fc2446d1d7c6146' + TOKEN_ADDR = '0xddea378a6ddc8afec82c36e9b0078826bf9e68b6' + fn = os.path.join(tmp_path, "out.txt") + cmd = f"./dftool acctinfo {CHAINID} {ACCOUNT_ADDR} {TOKEN_ADDR}>{fn} 2>{fn}" + os.system(cmd) + + f = open(fn, 'r') + s = f.read() + f.close() + assert "62000.00000000001 ZRX" in s From 11ebeef4e1415450e65dc123f9a503f04b57aa0b Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 17:53:39 +0200 Subject: [PATCH 19/22] fix pylint complaints --- util/networkutil.py | 20 ++++++++++---------- util/test/test_networkutil.py | 4 ++-- util/test/test_rinkeby.py | 26 ++++++++++++++------------ 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/util/networkutil.py b/util/networkutil.py index e1ef6bc82..1bf1bd1e2 100644 --- a/util/networkutil.py +++ b/util/networkutil.py @@ -3,7 +3,6 @@ import brownie from enforce_typing import enforce_types -from util.constants import BROWNIE_PROJECT as B from util.constants import CONTRACTS _BARGE_ADDRESS_FILE = "~/.ocean/ocean-contracts/artifacts/address.json" @@ -30,7 +29,7 @@ @enforce_types -def chainIdToAddressFile(chainID: int) -> str: +def chainIdToAddressFile(chainID: int) -> str: # pylint: disable=unused-argument """Returns the address file for a given chainID""" return os.path.expanduser(_BARGE_ADDRESS_FILE) @@ -41,9 +40,10 @@ def chainIdToSubgraphUri(chainID: int) -> str: sg = "/subgraphs/name/oceanprotocol/ocean-subgraph" if chainID == DEV_CHAINID: return "http://127.0.0.1:9000" + sg - else: - network_str = chainIdToNetwork(chainID) - return f"https://v4.subgraph.{network_str}.oceanprotocol.com"+sg + + network_str = chainIdToNetwork(chainID) + return f"https://v4.subgraph.{network_str}.oceanprotocol.com" + sg + @enforce_types def chainIdToNetwork(chainID: int) -> str: @@ -61,7 +61,7 @@ def networkToChainId(network: str) -> int: def connect(chainID: int): network = brownie.network if network.is_connected(): - disconnect() #call networkutil.disconnect(), *NOT* brownie directly + disconnect() # call networkutil.disconnect(), *NOT* brownie directly network.connect(chainIdToNetwork(chainID)) @@ -70,14 +70,14 @@ def disconnect(): network = brownie.network if not network.is_connected(): return - + chainID = network.chain.id if chainID in CONTRACTS: del CONTRACTS[chainID] try: network.disconnect() - except: - #overcome brownie issue - #https://github.com/eth-brownie/brownie/issues/1144 + except: # pylint: disable=bare-except + # overcome brownie issue + # https://github.com/eth-brownie/brownie/issues/1144 pass diff --git a/util/test/test_networkutil.py b/util/test/test_networkutil.py index 6ea79c2ae..d77edade6 100644 --- a/util/test/test_networkutil.py +++ b/util/test/test_networkutil.py @@ -1,5 +1,4 @@ from enforce_typing import enforce_types -import pytest from util import networkutil @@ -7,12 +6,13 @@ @enforce_types def test_chainIdToSubgraphUri(): for chainID, network_str in networkutil._CHAINID_TO_NETWORK.items(): - uri = networkutil.chainIdToSubgraphUri(chainID) + uri = networkutil.chainIdToSubgraphUri(chainID) if chainID == networkutil.DEV_CHAINID: assert uri[:21] == "http://127.0.0.1:9000" else: assert network_str in uri + @enforce_types def test_chainIdToNetwork(): assert networkutil.chainIdToNetwork(8996) == "development" diff --git a/util/test/test_rinkeby.py b/util/test/test_rinkeby.py index 82acfda86..6e8a8954b 100644 --- a/util/test/test_rinkeby.py +++ b/util/test/test_rinkeby.py @@ -6,35 +6,37 @@ CHAINID = networkutil.networkToChainId("rinkeby") + @enforce_types def test_chainIdToNetwork(): network_str = networkutil.chainIdToNetwork(CHAINID) assert network_str == "rinkeby" - + + @enforce_types def test_chainIdToSubgraphUri(): uri = networkutil.chainIdToSubgraphUri(CHAINID) assert "subgraph.rinkeby.oceanprotocol.com" in uri - + + @enforce_types def test_main(tmp_path): - #brownie has a bug when trying to shut down non-ganache networks - #details in https://github.com/eth-brownie/brownie/issues/1144 - #in file venv/lib/python3.8/site-packages/brownie/network/state.py + # brownie has a bug when trying to shut down non-ganache networks + # details in https://github.com/eth-brownie/brownie/issues/1144 + # in file venv/lib/python3.8/site-packages/brownie/network/state.py # function: _remove_contract() # code: del _contract_map[contract.address] - - #This isn't a problem from cli, since it cleans up mem - #But it is a problem for unit tests. Our workaround is to do a system call. - ACCOUNT_ADDR = '0xc945a5a960fef1a9c3fef8593fc2446d1d7c6146' - TOKEN_ADDR = '0xddea378a6ddc8afec82c36e9b0078826bf9e68b6' + # This isn't a problem from cli, since it cleans up mem + # But it is a problem for unit tests. Our workaround is to do a system call. + + ACCOUNT_ADDR = "0xc945a5a960fef1a9c3fef8593fc2446d1d7c6146" + TOKEN_ADDR = "0xddea378a6ddc8afec82c36e9b0078826bf9e68b6" fn = os.path.join(tmp_path, "out.txt") cmd = f"./dftool acctinfo {CHAINID} {ACCOUNT_ADDR} {TOKEN_ADDR}>{fn} 2>{fn}" os.system(cmd) - f = open(fn, 'r') + f = open(fn, "r") s = f.read() f.close() assert "62000.00000000001 ZRX" in s - From a664e3e718ca9991e0f048e42efda15f35cce5ac Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 18:02:07 +0200 Subject: [PATCH 20/22] fix black complaint, pylint complaint, and be more robust to changes in ZRX of this random account holdings --- util/networkutil.py | 4 ++-- util/test/test_rinkeby.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/util/networkutil.py b/util/networkutil.py index 1bf1bd1e2..78565010d 100644 --- a/util/networkutil.py +++ b/util/networkutil.py @@ -29,7 +29,7 @@ @enforce_types -def chainIdToAddressFile(chainID: int) -> str: # pylint: disable=unused-argument +def chainIdToAddressFile(chainID: int) -> str: # pylint: disable=unused-argument """Returns the address file for a given chainID""" return os.path.expanduser(_BARGE_ADDRESS_FILE) @@ -77,7 +77,7 @@ def disconnect(): try: network.disconnect() - except: # pylint: disable=bare-except + except: # pylint: disable=bare-except # overcome brownie issue # https://github.com/eth-brownie/brownie/issues/1144 pass diff --git a/util/test/test_rinkeby.py b/util/test/test_rinkeby.py index 6e8a8954b..0b5b7316d 100644 --- a/util/test/test_rinkeby.py +++ b/util/test/test_rinkeby.py @@ -36,7 +36,7 @@ def test_main(tmp_path): cmd = f"./dftool acctinfo {CHAINID} {ACCOUNT_ADDR} {TOKEN_ADDR}>{fn} 2>{fn}" os.system(cmd) - f = open(fn, "r") - s = f.read() - f.close() - assert "62000.00000000001 ZRX" in s + s = None + with open(fn, "r") as f: + s = f.read() + assert " ZRX" in s From 8323f75068c5066c68f7b98d206e89069dbba0ed Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 18:21:30 +0200 Subject: [PATCH 21/22] set a proper WEB3_INFURA_PROJECT_ID envvar --- util/test/test_rinkeby.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/util/test/test_rinkeby.py b/util/test/test_rinkeby.py index 0b5b7316d..7e59fda3b 100644 --- a/util/test/test_rinkeby.py +++ b/util/test/test_rinkeby.py @@ -1,9 +1,12 @@ import os +import types from enforce_typing import enforce_types from util import networkutil +PREV = None + CHAINID = networkutil.networkToChainId("rinkeby") @@ -40,3 +43,24 @@ def test_main(tmp_path): with open(fn, "r") as f: s = f.read() assert " ZRX" in s + +@enforce_types +def setup_module(): + global PREV + + PREV = types.SimpleNamespace() + + PREV.WEB3_INFURA_PROJECT_ID = os.environ.get("WEB3_INFURA_PROJECT_ID") + + #got this value from https://rpc.info/. We could also use our own + os.environ["WEB3_INFURA_PROJECT_ID"] = "9aa3d95b3bc440fa88ea12eaa4456161" + + +@enforce_types +def teardown_module(): + global PREV + + if PREV.WEB3_INFURA_PROJECT_ID is None: + del os.environ["WEB3_INFURA_PROJECT_ID"] + else: + os.environ["WEB3_INFURA_PROJECT_ID"] = PREV.WEB3_INFURA_PROJECT_ID From d9c32ffbb7908363b68579a0d6dcc5cce0b9cb88 Mon Sep 17 00:00:00 2001 From: trentmc <5305452+trentmc@users.noreply.github.com> Date: Mon, 30 May 2022 18:22:52 +0200 Subject: [PATCH 22/22] make mypy and pylint happy --- util/test/test_rinkeby.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/util/test/test_rinkeby.py b/util/test/test_rinkeby.py index 7e59fda3b..13aff9a07 100644 --- a/util/test/test_rinkeby.py +++ b/util/test/test_rinkeby.py @@ -44,15 +44,16 @@ def test_main(tmp_path): s = f.read() assert " ZRX" in s + @enforce_types def setup_module(): global PREV - + PREV = types.SimpleNamespace() PREV.WEB3_INFURA_PROJECT_ID = os.environ.get("WEB3_INFURA_PROJECT_ID") - #got this value from https://rpc.info/. We could also use our own + # got this value from https://rpc.info/. We could also use our own os.environ["WEB3_INFURA_PROJECT_ID"] = "9aa3d95b3bc440fa88ea12eaa4456161"