运行 01_deploy_price_consumer 两次时出错 - 在布朗尼中杀死甘纳许

errors when running 01_deploy_price_consumer twice - killing ganache in brownie

目前正在学习 chainlink 训练营的练习 3:部署到本地区块链。

使用 ganache 时,如果我在 运行ning

之后有一个新的 chainlink-mix 文件夹
brownie run scripts/price_feed_scripts/01_deploy_price_consumer_v3.py

编译一切正常。但是当我关闭 ganache(ctrl+C) 并打开另一个 ganache 和 运行 相同的命令时,我得到了很多错误。

如果我删除 chainlink 混合并获得一个新的克隆,我可以解决这个问题。我想知道如何解决这个问题而不必每次都获取一个新文件夹。

编辑:我正在 运行再次执行 01_deploy_price_consumer 命令以查看是否可以将 eth 的默认 getLatestPrice 更改为 3000 而不是 2000

C:\Users\N\new\chainlink-mix>brownie run scripts/price_feed_scripts/01_deploy_price_consumer_v3.py
INFO: Could not find files for the given pattern(s).
Brownie v1.16.3 - Python development framework for Ethereum

ChainlinkMixProject is the active project.
  File "C:\Users\N\AppData\Local\Programs\Python\Python39\lib\site-packages\brownie\_cli\__main__.py", line 64, in main
    importlib.import_module(f"brownie._cli.{cmd}").main()
  File "C:\Users\N\AppData\Local\Programs\Python\Python39\lib\site-packages\brownie\_cli\run.py", line 43, in main
    network.connect(CONFIG.argv["network"])
  File "C:\Users\N\AppData\Local\Programs\Python\Python39\lib\site-packages\brownie\network\main.py", line 55, in connect
    p._load_deployments()
  File "C:\Users\N\AppData\Local\Programs\Python\Python39\lib\site-packages\brownie\project\main.py", line 357, in _load_deployments
    contract = ProjectContract(self, build, build_json.stem)
  File "C:\Users\N\AppData\Local\Programs\Python\Python39\lib\site-packages\brownie\network\contract.py", line 1292, in __init__
    _DeployedContractBase.__init__(self, address, owner, tx)
  File "C:\Users\N\AppData\Local\Programs\Python\Python39\lib\site-packages\brownie\network\contract.py", line 758, in __init__
    raise ContractNotFound(f"No contract deployed at {address}")
ContractNotFound: No contract deployed at 0xa1d97e44c6Ac5327DEa2deCAb5f9E1085b8Bcf38

brownie 连接的网络有 3 种:

  • Ethereum
  • Ethereum Classic(可以忽略)
  • Development

您可以在终端中 运行ning brownie networks list 查看它们。

Ethereum 类别中创建网络时,brownie 将保存已部署合约的地址,在这种情况下,您的本地 ganache 链在 Ethereum 类别中。它记得,但将地址存储在 build 文件夹中。

因此,当您第一次将合约部署到本地 ganache 链时,brownie 会将地址存储在其构建文件夹中。这些合约存在于你的 ganache 链上。但是,当你删除 ganache 链并创建一个新链时,这些合约也会被删除,但 brownie 仍然认为它们存在。

brownie networks list t运行 分类输出:

Ethereum
  ├─Mainnet (Infura): mainnet
  └─ganache: ganache (brownie will remember these)

Development
  ├─Ganache-CLI: development
  └─ganache-temp: ganache-temp (brownie won't remember these)

如果您希望 brownie 总是重新部署所需的体验,您可以在 Development 网络中创建您的 ganache 网络,这样 brownie 就不会记住它的部署,并且会一直部署新鲜.

不过,这意味着您将无法 运行 任何第二个脚本,例如 brownie run scripts/price_feed_scripts/02_whatever_this_one_is.py,因为布朗尼不记得那里有任何合同。