accounts.load("id") -- load from brownie accounts list
Iteration 1
from brownie import FundMe
from brownie import network, config
from scripts.helpful_scripts import *
from scripts.helpful_scripts import LOCAL_BLOCKCHAIN_ENV
def deploy_fund_me():
account = get_account()
print(f"Deploying on .....{network.show_active()}")
if network.show_active() not in LOCAL_BLOCKCHAIN_ENV:
price_feed_address = config["networks"][network.show_active()]["eth_usd_price_feed"]
else: #deploy mock of price feed on internal chain: development
deploy_mocks()
price_feed_address = MockV3Aggregator[-1].address
fund_me = FundMe.deploy(price_feed_address,
{"from": account},
publish_source=config["networks"][network.show_active()].get("verify"))
print(f"Contract deployed to: {fund_me.address}")
return fund_me
def main():
deploy_fund_me()
#Python will automatically run main() on execution.
from brownie import accounts, network, config
from brownie import MockV3Aggregator
LOCAL_BLOCKCHAIN_ENV = ["development", "ganache-local"]
FORKED_LOCAL_ENV = ["mainnet-fork", "mainnet-fork-dev"]
def get_account():
if network.show_active() in LOCAL_BLOCKCHAIN_ENV
or network.show_active() in FORKED_LOCAL_ENV:
return accounts[0] #use ganache generated account.
else:
return accounts.add(config["wallets"]["wallet1"])
#look in config.yaml
Function will check which network we are deploying to. If it is in LOCAL_BLOCKCHAIN_ENV / FORKED_LOCAL_ENV, a dummy ganache account is used.
forking mainnet into a private env, so can use dummy accounts.
Else, (i.e. live chains: mainnet, testnet), MetaMask wallet is used.
pulls private key from wallet1 defined in brownie-config.yaml
which in turn references the PK stored in the .env file
we do this, as opposed to hardcoding into the yaml file, so that on a git push, the .env is not uploaded to github, thereby exposing our private key.
In this version of get_accounts(), we only utilized dummy accounts and adding accounts from Private Key. We shall see the third method in the next interation.
Iteration 2
from brownie import network, accounts,config, Contract
from brownie import MockV3Aggregator
DECIMAL_PLACES = 8 #to resemble eth/usd price feed on mainnet aggregator
STARTING_PRICE = (2000*10**8)
LOCAL_BLOCKCHAIN_ENV = ["development", "ganache-local"]
FORKED_LOCAL_ENV = ["mainnet-fork", "mainnet-fork-dev"]
def get_account(index=None,id=None):
if index:
#if index was passed return ganache account
return accounts[index]
if id:
return accounts.load(id)
if network.show_active() in LOCAL_BLOCKCHAIN_ENV or network.show_active() in FORKED_LOCAL_ENV:
return accounts[0] #use ganache generated account.
else: #look in config.yaml
return accounts.add(config["wallets"]["wallet1"])
def get_account(index=None,id=None):
both parameters, index and id are optional, as their default value is set to None.
if index parameter is passed, function will return a dummy ganache account based on the parameter
account[index]
if id is passed, for example, get_account(id=freecodecamp)
function will reference stored accounts in brownie of the id name
can store an account by: brownie accounts new <id>
pass the private key, add 0x before it.
brownie will request for a password to hash it.
If neither index nor id are passed,
and deployment into LOCAL_BLOCKCHAIN_ENV / FORKED_LOCAL_ENV
-> account[0]
else (live chains: mainnet/rinkeby),
-> use PK from config.yaml file
In summary,
if index specified -> use ganache account
if id specified -> use id, stored account
none specified -> if local/forked env, use dummy, else use PK from config.yaml