def setup_network(config_file=None): config = Config(filename=config_file) if config_file else get_config() network_url = config.network_url artifacts_path = get_artifacts_path(config) ContractHandler.set_artifacts_path(artifacts_path) w3_connection_provider = get_web3_connection_provider(network_url) Web3Provider.init_web3(provider=w3_connection_provider) if network_url.startswith("wss"): from web3.middleware import geth_poa_middleware Web3Provider.get_web3().middleware_stack.inject(geth_poa_middleware, layer=0) init_account_envvars() wallet = get_provider_wallet() if wallet is None: raise AssertionError( f"Ocean Provider cannot run without a valid " f"ethereum account. `PROVIDER_PRIVATE_KEY` was not found in the environment " f"variables. \nENV WAS: {sorted(os.environ.items())}") if not wallet.private_key: raise AssertionError( "Ocean Provider cannot run without a valid ethereum private key.")
def test1(): # ocean instance config = ExampleConfig.get_config() ConfigProvider.set_config(config) Web3Provider.init_web3( provider=get_web3_connection_provider(config.network_url)) ContractHandler.set_artifacts_path(config.artifacts_path) ocean = Ocean(config) OCEAN_address_before = ocean.OCEAN_address # deploy, distribute, etc deploy_fake_OCEAN() # test: OCEAN address should have changed OCEAN_address_after = ocean.OCEAN_address assert OCEAN_address_before != OCEAN_address_after # test: TEST_PRIVATE_KEY{1,2} should each hold OCEAN wallet1 = Wallet(ocean.web3, private_key=os.getenv("TEST_PRIVATE_KEY1")) wallet2 = Wallet(ocean.web3, private_key=os.getenv("TEST_PRIVATE_KEY2")) OCEAN_after = BToken(ocean.OCEAN_address) assert OCEAN_after.balanceOf(wallet1.address) > 0 assert OCEAN_after.balanceOf(wallet2.address) > 0
def setup_all(): config = ExampleConfig.get_config() ConfigProvider.set_config(config) Web3Provider.init_web3( provider=get_web3_connection_provider(config.network_url)) ContractHandler.set_artifacts_path(config.artifacts_path) network = Web3Helper.get_network_name() wallet = get_ganache_wallet() if network in ["ganache", "development"] and wallet: print( f"sender: {wallet.key}, {wallet.address}, {wallet.password}, {wallet.keysStr()}" ) print( f"sender balance: {Web3Helper.from_wei(Web3Helper.get_ether_balance(wallet.address))}" ) assert Web3Helper.from_wei(Web3Helper.get_ether_balance( wallet.address)) > 10 from ocean_lib.models.data_token import DataToken OCEAN_token = DataToken(get_ocean_token_address(network)) amt_distribute = 1000 amt_distribute_base = to_base_18(float(amt_distribute)) for w in (get_publisher_wallet(), get_consumer_wallet()): if Web3Helper.from_wei(Web3Helper.get_ether_balance( w.address)) < 2: Web3Helper.send_ether(wallet, w.address, 4) if OCEAN_token.token_balance(w.address) < 100: OCEAN_token.transfer(w.address, amt_distribute_base, from_wallet=wallet)
def setup_network(config_file=None): config = Config(filename=config_file) if config_file else get_config() network_url = config.network_url artifacts_path = get_artifacts_path(config) ContractHandler.set_artifacts_path(artifacts_path) if network_url.startswith('http'): provider = CustomHTTPProvider elif network_url.startswith('wss'): provider = WebsocketProvider else: raise AssertionError(f'Unsupported network url {network_url}. Must start with http or wss.') Web3Provider.init_web3(provider=provider(network_url)) if network_url.startswith('wss'): from web3.middleware import geth_poa_middleware Web3Provider.get_web3().middleware_stack.inject(geth_poa_middleware, layer=0) init_account_envvars() wallet = get_provider_wallet() if wallet is None: raise AssertionError(f'Ocean Provider cannot run without a valid ' f'ethereum account. `PROVIDER_PRIVATE_KEY` was not found in the environment ' f'variables. \nENV WAS: {sorted(os.environ.items())}') if not wallet.private_key: raise AssertionError(f'Ocean Provider cannot run without a valid ' f'ethereum private key..')
def run_events_monitor(): setup_logging() logger.info('EventsMonitor: preparing') required_env_vars = ['EVENTS_RPC', 'CONFIG_FILE'] for envvar in required_env_vars: if not os.getenv(envvar): raise AssertionError( f'env var {envvar} is missing, make sure to set the following ' f'environment variables before starting the events monitor: {required_env_vars}' ) network_rpc = os.environ.get('EVENTS_RPC', 'http:127.0.0.1:8545') config_file = os.getenv('CONFIG_FILE', 'config.ini') logger.info( f'EventsMonitor: starting with the following values: rpc={network_rpc}' ) ConfigProvider.set_config(Config(config_file)) from ocean_lib.ocean.util import get_web3_connection_provider Web3Provider.init_web3(provider=get_web3_connection_provider(network_rpc)) ContractHandler.set_artifacts_path(get_artifacts_path()) if get_network_name().lower() == 'rinkeby': from web3.middleware import geth_poa_middleware Web3Provider.get_web3().middleware_stack.inject(geth_poa_middleware, layer=0) monitor = EventsMonitor(Web3Provider.get_web3(), config_file) monitor.start_events_monitor() logger.info(f'EventsMonitor: started') while True: time.sleep(5)
def init_components(config=None): if config is None: config = Config(os.getenv(ENV_CONFIG_FILE)) ConfigProvider.set_config(config) Web3Provider.init_web3(provider=get_web3_connection_provider(config.network_url)) ContractHandler.set_artifacts_path(config.artifacts_path)
def test_set_artifacts_path__deny_change_to_same(): path_before = copy.copy(ContractHandler.artifacts_path) assert path_before is not None assert ContractHandler._contracts ContractHandler.set_artifacts_path(path_before) assert ContractHandler.artifacts_path == path_before assert ContractHandler._contracts # cache should *not* have reset
def test_set_artifacts_path__allow_change(): path_before = copy.copy(ContractHandler.artifacts_path) assert path_before is not None assert ContractHandler._contracts ContractHandler.set_artifacts_path("new path") assert ContractHandler.artifacts_path == "new path" assert not ContractHandler._contracts # cache should have reset
def test_set_artifacts_path__deny_change_to_empty(): """Tests can not set empty artifacts path.""" path_before = copy.copy(ContractHandler.artifacts_path) assert path_before is not None assert ContractHandler._contracts ContractHandler.set_artifacts_path(None) # it should deny this assert ContractHandler.artifacts_path == path_before assert ContractHandler._contracts # cache should *not* have reset
def test_set_artifacts_path__allow_change(): """Tests that a correct artifacts path can be set (happy flow).""" path_before = copy.copy(ContractHandler.artifacts_path) assert path_before is not None assert ContractHandler._contracts ContractHandler.set_artifacts_path("new path") assert ContractHandler.artifacts_path == "new path" assert not ContractHandler._contracts # cache should have reset
def initialize(private_key): load_dotenv(".env") config = Config(os.getenv('config.ini')) config = Config(os.getenv('config.ini')) print(config.network_url) # config.network_url="https://rinkeby.infura.io/v3/31d95be121a545b688a0e07e4de4d256" ConfigProvider.set_config(config) Web3Provider.init_web3( provider=get_web3_connection_provider(config.network_url)) ContractHandler.set_artifacts_path(config.artifacts_path) ocean = Ocean() wallet = Wallet(ocean.web3, private_key=private_key) return ocean, wallet
def setup_all(request): # a test can skip setup_all() via decorator "@pytest.mark.nosetup_all" if "nosetup_all" in request.keywords: return config = ExampleConfig.get_config() ConfigProvider.set_config(config) Web3Provider.init_web3( provider=get_web3_connection_provider(config.network_url)) ContractHandler.set_artifacts_path(config.artifacts_path) wallet = get_ganache_wallet() if not wallet: return addresses_file = config.address_file if not os.path.exists(addresses_file): return with open(addresses_file) as f: network_addresses = json.load(f) print( f"sender: {wallet.key}, {wallet.address}, {wallet.password}, {wallet.keysStr()}" ) print(f"sender balance: {from_wei(get_ether_balance(wallet.address))}") assert (from_wei(get_ether_balance(wallet.address)) > 10), "Ether balance less than 10." from ocean_lib.models.data_token import DataToken OCEAN_token = DataToken(address=network_addresses["development"]["Ocean"]) amt_distribute = 1000 amt_distribute_base = to_base_18(float(amt_distribute)) for w in (get_publisher_wallet(), get_consumer_wallet()): if from_wei(get_ether_balance(w.address)) < 2: send_ether(wallet, w.address, 4) if OCEAN_token.token_balance(w.address) < 100: OCEAN_token.mint(wallet.address, amt_distribute_base, from_wallet=wallet) OCEAN_token.transfer(w.address, amt_distribute_base, from_wallet=wallet)
def mint_fake_OCEAN(): """ Does the following: 1. Mints tokens 2. Distributes tokens to TEST_PRIVATE_KEY1 and TEST_PRIVATE_KEY2 """ config = ExampleConfig.get_config() ConfigProvider.set_config(config) Web3Provider.init_web3( provider=get_web3_connection_provider(config.network_url)) ContractHandler.set_artifacts_path(config.artifacts_path) addresses_file = config.address_file ocean = get_publisher_ocean_instance() web3 = ocean.web3 with open(addresses_file) as f: network_addresses = json.load(f) network = "development" deployer_wallet = get_ganache_wallet() OCEAN_token = DataToken(address=network_addresses[network]["Ocean"]) amt_distribute = 1000 amt_distribute_base = to_base_18(float(amt_distribute)) OCEAN_token.mint(deployer_wallet.address, 2 * amt_distribute_base, from_wallet=deployer_wallet) for key_label in ["TEST_PRIVATE_KEY1", "TEST_PRIVATE_KEY2"]: key = os.environ.get(key_label) if not key: continue w = Wallet(web3, private_key=key) if OCEAN_token.token_balance(w.address) < 1000: OCEAN_token.transfer(w.address, amt_distribute_base, from_wallet=deployer_wallet) if from_wei(get_ether_balance(w.address)) < 2: send_ether(deployer_wallet, w.address, 4)
def events_object(): global EVENTS_INSTANCE if not EVENTS_INSTANCE: config_file = os.getenv('CONFIG_FILE', 'config.ini') network_rpc = os.environ.get('EVENTS_RPC', 'http://127.0.0.1:8545') ConfigProvider.set_config(Config(config_file)) from ocean_lib.ocean.util import get_web3_connection_provider Web3Provider.init_web3( provider=get_web3_connection_provider(network_rpc)) ContractHandler.set_artifacts_path(get_artifacts_path()) EVENTS_INSTANCE = EventsMonitor(Web3Provider.get_web3(), app.config['CONFIG_FILE']) EVENTS_INSTANCE.store_last_processed_block(0) return EVENTS_INSTANCE
def run_scenario(): config = Config('config.ini') ocean = Ocean(config) wallet = Wallet( ocean.web3, 0x376e05899a4ae00463a3a607c774069b7d6a647860dba723f39b735c91238ddf, None, "EARLYTOBEDANDEARLYTORISE") ConfigProvider.set_config(config) Web3Provider.init_web3( provider=get_web3_connection_provider(config.network_url)) ContractHandler.set_artifacts_path(config.artifacts_path) print(dir(wallet)) print(wallet.address) print(config.network_url) print(config.provider_url) print(config.network_url) print(config.artifacts_path) data_token = ocean.create_data_token('S1Seven', 'S1SV', from_wallet=wallet) print(f'created new datatoken with address {data_token.address}') token_address = data_token.address print(token_address) '''
) from aquarius.app.auth_util import has_update_request_permission, get_signer_address from aquarius.app.dao import Dao from aquarius.app.util import (make_paginate_response, datetime_converter, get_metadata_from_services, sanitize_record, list_errors, get_request_data) from aquarius.events.metadata_updater import MetadataUpdater from aquarius.events.util import get_artifacts_path, get_network_name from aquarius.log import setup_logging from aquarius.myapp import app ConfigProvider.set_config(OceanConfig(app.config['CONFIG_FILE'])) Web3Provider.init_web3( provider=get_web3_connection_provider(os.environ.get('EVENTS_RPC', ''))) ContractHandler.set_artifacts_path(get_artifacts_path()) if get_network_name().lower() == 'rinkeby': from web3.middleware import geth_poa_middleware Web3Provider.get_web3().middleware_stack.inject(geth_poa_middleware, layer=0) setup_logging() assets = Blueprint('assets', __name__) # Prepare OceanDB dao = Dao(config_file=app.config['CONFIG_FILE']) logger = logging.getLogger('aquarius') @assets.route('', methods=['GET']) def get_assets_ids():
def __init__(self, config=None, data_provider=None): """Initialize Ocean class. >> # Make a new Ocean instance >> ocean = Ocean({...}) This class provides the main top-level functions in ocean protocol: * Publish assets metadata and associated services * Each asset is assigned a unique DID and a DID Document (DDO) * The DDO contains the asset's services including the metadata * The DID is registered on-chain with a URL of the metadata store to retrieve the DDO from >> asset = ocean.assets.create(metadata, publisher_wallet) * Discover/Search assets via the current configured metadata store (Aquarius) >> assets_list = ocean.assets.search('search text') An instance of Ocean is parameterized by a `Config` instance. :param config: Config instance :param data_provider: DataServiceProvider instance """ # Configuration information for the market is stored in the Config class # config = Config(filename=config_file, options_dict=config_dict) if not config: try: config = ConfigProvider.get_config() except AssertionError: config = Config(os.getenv(ENV_CONFIG_FILE)) ConfigProvider.set_config(config) if isinstance(config, dict): # fallback to metadataStoreUri cache_key = ("metadataCacheUri" if ("metadataCacheUri" in config) else "metadataStoreUri") aqua_url = config.get( cache_key, config.get("aquarius.url", "http://localhost:5000")) config_dict = { "eth-network": { "network": config.get("network", "") }, "resources": { "aquarius.url": aqua_url, "provider.url": config.get("providerUri", "http://localhost:8030"), }, } config = Config(options_dict=config_dict) ConfigProvider.set_config(config) self._config = config ContractHandler.set_artifacts_path(self._config.artifacts_path) Web3Provider.init_web3( provider=get_web3_connection_provider(self._config.network_url)) self._web3 = Web3Provider.get_web3() if not data_provider: data_provider = DataServiceProvider network = Web3Helper.get_network_name() addresses = get_contracts_addresses(network, self._config) self.assets = OceanAssets( self._config, data_provider, addresses.get(MetadataContract.CONTRACT_NAME)) self.services = OceanServices() self.auth = OceanAuth(self._config.storage_path) self.compute = OceanCompute(self.auth, self._config, data_provider) ocean_address = get_ocean_token_address(network) self.pool = OceanPool(ocean_address, get_bfactory_address(network)) self.exchange = OceanExchange( ocean_address, FixedRateExchange.configured_address( network or Web3Helper.get_network_name(), ConfigProvider.get_config().address_file, ), self.config, ) logger.debug("Ocean instance initialized: ")
def main(): network = 'ganache' private_key = os.getenv('EVENTS_TESTS_PRIVATE_KEY') network_rpc = os.getenv('EVENTS_RPC', 'http://127.0.0.1:8545') config = Config(os.getenv('CONFIG_FILE')) ConfigProvider.set_config(config) # artifacts_path = os.getenv('ARTIFACTS_PATH', ) artifacts_path = config.artifacts_path address_file = Path( os.getenv('ADDRESS_FILE', os.path.join(artifacts_path, 'address.json'))).expanduser().resolve() print(f'deploying contracts and saving addresses in {address_file}') Web3Provider.init_web3(provider=get_web3_connection_provider(network_rpc)) ContractHandler.set_artifacts_path(artifacts_path) web3 = Web3Provider.get_web3() addresses = dict() if os.path.exists(address_file): with open(address_file) as f: network_addresses = json.load(f) else: network_addresses = {network: {}} _addresses = network_addresses[network] # ****SET ENVT**** # grab vars factory_deployer_private_key = private_key # ****SEE FUNDS**** print( "Keys:\n%s\n" % Wallet(web3=web3, private_key=factory_deployer_private_key).keysStr()) # ****DEPLOY**** deployer_wallet = Wallet(web3, private_key=factory_deployer_private_key) minter_addr = deployer_wallet.address cap = 2**255 print("****Deploy DataTokenTemplate: begin****") dt_address = DataToken.deploy(web3, deployer_wallet, artifacts_path, 'Template Contract', 'TEMPLATE', minter_addr, DataToken.DEFAULT_CAP_BASE, DTFactory.FIRST_BLOB, minter_addr) addresses[DataToken.CONTRACT_NAME] = dt_address print("****Deploy DataTokenTemplate: done****\n") print("****Deploy DTFactory: begin****") dtfactory = DTFactory( DTFactory.deploy(web3, deployer_wallet, artifacts_path, dt_address, minter_addr)) addresses[DTFactory.CONTRACT_NAME] = dtfactory.address print("****Deploy DTFactory: done****\n") print("****Deploy BPool: begin****") bpool_address = BPool.deploy(web3, deployer_wallet, artifacts_path) bpool_template = BPool(bpool_address) addresses[BPool.CONTRACT_NAME] = bpool_address print("****Deploy BPool: done****\n") print("****Deploy 'BFactory': begin****") bfactory_address = BFactory.deploy(web3, deployer_wallet, artifacts_path, bpool_template.address) bfactory = BFactory(bfactory_address) addresses[BFactory.CONTRACT_NAME] = bfactory_address print("****Deploy 'BFactory': done****\n") print("****Deploy 'FixedRateExchange': begin****") addresses[FixedRateExchange.CONTRACT_NAME] = FixedRateExchange.deploy( web3, deployer_wallet, artifacts_path) print("****Deploy 'FixedRateExchange': done****\n") print("****Deploy 'Metadata': begin****") addresses[MetadataContract.CONTRACT_NAME] = MetadataContract.deploy( web3, deployer_wallet, artifacts_path) print("****Deploy 'Metadata': done****\n") if network == 'ganache' and 'Ocean' not in _addresses: print("****Deploy fake OCEAN: begin****") # For simplicity, hijack DataTokenTemplate. minter_addr = deployer_wallet.address OCEAN_cap = 1410 * 10**6 # 1.41B OCEAN_cap_base = to_base_18(float(OCEAN_cap)) OCEAN_token = DataToken( DataToken.deploy(web3, deployer_wallet, artifacts_path, 'Ocean', 'OCEAN', minter_addr, OCEAN_cap_base, '', minter_addr)) addresses["Ocean"] = OCEAN_token.address print("****Deploy fake OCEAN: done****\n") print("****Mint fake OCEAN: begin****") OCEAN_token.mint(minter_addr, OCEAN_cap_base, from_wallet=deployer_wallet) print("****Mint fake OCEAN: done****\n") print("****Distribute fake OCEAN: begin****") amt_distribute = 1000 amt_distribute_base = to_base_18(float(amt_distribute)) for key_label in [ 'EVENTS_TESTS_PRIVATE_KEY', 'EVENTS_TESTS_PRIVATE_KEY2' ]: key = os.environ.get(key_label) if not key: continue dst_address = privateKeyToAddress(key) try: OCEAN_token.transfer(dst_address, amt_distribute_base, from_wallet=deployer_wallet) except ValueError: # handle nonce issue time.sleep(3) OCEAN_token.transfer(dst_address, amt_distribute_base, from_wallet=deployer_wallet) print("****Distribute fake OCEAN: done****\n") network_addresses[network].update(addresses) with open(address_file, 'w') as f: json.dump(network_addresses, f, indent=2) print(f'contracts deployed: {network_addresses}') return addresses
def deploy(network, addresses_file): config = ExampleConfig.get_config() ConfigProvider.set_config(config) Web3Provider.init_web3( provider=get_web3_connection_provider(config.network_url)) ContractHandler.set_artifacts_path(config.artifacts_path) artifacts_path = ContractHandler.artifacts_path if not addresses_file: addresses_file = config.address_file else: addresses_file = Path(addresses_file).expanduser().resolve() ocean = get_publisher_ocean_instance() web3 = ocean.web3 addresses = dict() if os.path.exists(addresses_file): with open(addresses_file) as f: network_addresses = json.load(f) else: network_addresses = {network: {}} if network == "ganache" and network not in network_addresses: network = "development" _addresses = network_addresses[network] # ****SET ENVT**** # grab vars factory_deployer_private_key = get_ganache_wallet().private_key # corner cases if invalidKey(factory_deployer_private_key): print("Need valid FACTORY_DEPLOYER_PRIVATE_KEY") sys.exit(0) # ****SEE FUNDS**** print("Keys:\n%s" % Wallet( web3=get_web3(), private_key=factory_deployer_private_key).keysStr()) print("") # ****DEPLOY**** deployer_wallet = Wallet(web3, private_key=factory_deployer_private_key) minter_addr = deployer_wallet.address # cap = 2 ** 255 not used if DTFactory.CONTRACT_NAME not in _addresses: print("****Deploy DataTokenTemplate: begin****") dt_address = DataToken.deploy( web3, deployer_wallet, artifacts_path, "Template Contract", "TEMPLATE", minter_addr, DataToken.DEFAULT_CAP_BASE, DTFactory.FIRST_BLOB, minter_addr, ) addresses[DataToken.CONTRACT_NAME] = dt_address print("****Deploy DataTokenTemplate: done****\n") print("****Deploy DTFactory: begin****") dtfactory = DTFactory( DTFactory.deploy(web3, deployer_wallet, artifacts_path, dt_address, minter_addr)) addresses[DTFactory.CONTRACT_NAME] = dtfactory.address print("****Deploy DTFactory: done****\n") if BFactory.CONTRACT_NAME not in _addresses: print("****Deploy BPool: begin****") bpool_address = BPool.deploy(web3, deployer_wallet, artifacts_path) bpool_template = BPool(bpool_address) addresses[BPool.CONTRACT_NAME] = bpool_address print("****Deploy BPool: done****\n") print("****Deploy 'BFactory': begin****") bfactory_address = BFactory.deploy(web3, deployer_wallet, artifacts_path, bpool_template.address) _ = BFactory(bfactory_address) addresses[BFactory.CONTRACT_NAME] = bfactory_address print("****Deploy 'BFactory': done****\n") if FixedRateExchange.CONTRACT_NAME not in _addresses: print("****Deploy 'FixedRateExchange': begin****") addresses[FixedRateExchange.CONTRACT_NAME] = FixedRateExchange.deploy( web3, deployer_wallet, artifacts_path) print("****Deploy 'FixedRateExchange': done****\n") if MetadataContract.CONTRACT_NAME not in _addresses: print("****Deploy 'Metadata': begin****") addresses[MetadataContract.CONTRACT_NAME] = MetadataContract.deploy( web3, deployer_wallet, artifacts_path) print("****Deploy 'Metadata': done****\n") if network in ("ganache", "development"): print("****Deploy fake OCEAN: begin****") # For simplicity, hijack DataTokenTemplate. minter_addr = deployer_wallet.address OCEAN_cap = 1410 * 10**6 # 1.41B OCEAN_cap_base = util.to_base_18(float(OCEAN_cap)) OCEAN_token = DataToken( DataToken.deploy( web3, deployer_wallet, artifacts_path, "Ocean", "OCEAN", minter_addr, OCEAN_cap_base, "", minter_addr, )) addresses["Ocean"] = OCEAN_token.address print("****Deploy fake OCEAN: done****\n") print("****Mint fake OCEAN: begin****") OCEAN_token.mint(minter_addr, OCEAN_cap_base, from_wallet=deployer_wallet) print("****Mint fake OCEAN: done****\n") print("****Distribute fake OCEAN: begin****") amt_distribute = 1000 amt_distribute_base = util.to_base_18(float(amt_distribute)) for key_label in ["TEST_PRIVATE_KEY1", "TEST_PRIVATE_KEY2"]: key = os.environ.get(key_label) if not key: continue dst_address = privateKeyToAddress(key) OCEAN_token.transfer(dst_address, amt_distribute_base, from_wallet=deployer_wallet) print("****Distribute fake OCEAN: done****\n") network_addresses[network].update(addresses) with open(addresses_file, "w") as f: json.dump(network_addresses, f, indent=2) return addresses
''' config_file = """ [eth-network] network = https://rinkeby.infura.io/v3/102d6a75aad644f6a5b131e254d08892 [resources] aquarius.url = https://aquarius.rinkeby.v3.dev-ocean.com provider.url = https://provider.rinkeby.v3.dev-ocean.co """ ''' #configure the components ConfigProvider.set_config(config) Web3Provider.init_web3(provider=get_web3_connection_provider(config.network_url)) ContractHandler.set_artifacts_path(config.artifacts_path) print("") print(dir(config)) print(config.network_url) print(config.provider_url) print(config.network_url) print(config.artifacts_path) data_token = ocean.create_data_token('S1Seven', 'S1SV', from_wallet=wallet) print(f'created new datatoken with address {data_token.address}') token_address = data_token.address
def deploy_fake_OCEAN(): """ Does the following: 1. Deploy to ganache a new ERC20 contract having symbol OCEAN 2. Mints tokens 3. Distributes tokens to TEST_PRIVATE_KEY1 and TEST_PRIVATE_KEY2 4. In addresses.json, updates development : Ocean entry with new address """ network = "ganache" config = ExampleConfig.get_config() ConfigProvider.set_config(config) Web3Provider.init_web3( provider=get_web3_connection_provider(config.network_url)) ContractHandler.set_artifacts_path(config.artifacts_path) artifacts_path = ContractHandler.artifacts_path addresses_file = config.address_file ocean = get_publisher_ocean_instance() web3 = ocean.web3 addresses = dict() if os.path.exists(addresses_file): with open(addresses_file) as f: network_addresses = json.load(f) else: network_addresses = {network: {}} if network not in network_addresses: network = "development" # ****SET ENVT**** deployer_private_key = get_ganache_wallet().private_key if invalidKey(deployer_private_key): print("Need valid DEPLOYER_PRIVATE_KEY") sys.exit(0) # ****DEPLOY**** deployer_wallet = Wallet(web3, private_key=deployer_private_key) print("****Deploy fake OCEAN: begin****") # For simplicity, hijack DataTokenTemplate. deployer_addr = deployer_wallet.address OCEAN_cap = 1410 * 10**6 # 1.41B OCEAN_cap_base = util.to_base_18(float(OCEAN_cap)) OCEAN_token = DataToken( DataToken.deploy( web3, deployer_wallet, artifacts_path, "Ocean", "OCEAN", deployer_addr, OCEAN_cap_base, "", deployer_addr, )) addresses["Ocean"] = OCEAN_token.address print("****Deploy fake OCEAN: done****\n") print("****Mint fake OCEAN: begin****") OCEAN_token.mint(deployer_addr, OCEAN_cap_base, from_wallet=deployer_wallet) print("****Mint fake OCEAN: done****\n") print("****Distribute fake OCEAN: begin****") amt_distribute = 1000 amt_distribute_base = util.to_base_18(float(amt_distribute)) for key_label in ["TEST_PRIVATE_KEY1", "TEST_PRIVATE_KEY2"]: key = os.environ.get(key_label) if not key: continue dst_address = privateKeyToAddress(key) OCEAN_token.transfer(dst_address, amt_distribute_base, from_wallet=deployer_wallet) print(f"Distributed {amt_distribute} OCEAN to address {dst_address}") print("****Distribute fake OCEAN: done****\n") print("****Update addresses file: begin****\n") print(f"addresses file: {addresses_file}") print(f"network: {network}") print("") network_addresses[network].update(addresses) with open(addresses_file, "w") as f: json.dump(network_addresses, f, indent=2) _s = json.dumps(addresses, indent=4) s = "Have deployed to, and updated the following addresses\n" + _s print(s) print("****Update addresses file: done****\n")