我正在学习一个教程,该教程使用python中的brownie来部署合同。如果要将契约部署到testnet (本例中为rinkeby),则程序应该从环境变量中获取私钥,但当尝试运行deploy.py脚本时,如下所示:
brownie run scripts/deploy.py --network rinkeby我得到以下错误:
Running 'scripts/deploy.py::main'...
File "brownie/_cli/run.py", line 50, in main
return_value, frame = run(
File "brownie/project/scripts.py", line 103, in run
return_value = f_locals[method_name](*args, **kwargs)
File "./scripts/deploy.py", line 10, in main
deploy_fund_me()
File "./scripts/deploy.py", line 5, in deploy_fund_me
account = get_account()
File "./scripts/helpful_scripts.py", line 19, in get_account
return accounts.add(config["wallets"]["from_key"])
File "brownie/network/account.py", line 142, in add
w3account = web3.eth.account.from_key(private_key)
File "eth_utils/decorators.py", line 18, in _wrapper
return self.method(obj, *args, **kwargs)
File "eth_account/account.py", line 250, in from_key
key = self._parsePrivateKey(private_key)
File "eth_utils/decorators.py", line 18, in _wrapper
return self.method(obj, *args, **kwargs)
File "eth_account/account.py", line 776, in _parsePrivateKey
raise ValueError(
ValueError: The private key must be exactly 32 bytes long, instead of 0 bytes.有关此错误的一些背景信息:我的brownie-config.yml目录中有一个.env文件,包含以下内容:
export PRIVATE_KEY={my_private_key}其中{my_private_key}是我实际的十六进制私钥。
布朗尼-config.yml看起来是这样的:
dependencies:
# - <organization/repo>@<version>
- smartcontractkit/chainlink-brownie-contracts@1.1.1
compiler:
solc:
remappings:
- '@chainlink=smartcontractkit/chainlink-brownie-contracts@1.1.1'
dotenv: .env
wallets:
from_key: ${PRIVATE_KEY}据我理解,brownie应该使用.env文件作为环境变量导出密钥,然后将其放入一些brownie文件中(可能在编译代码时?),在部署契约时,brownie将在哪里查找它。如果在执行代码之前手动导出此环境变量,它也不会更改任何内容。
P.S:似乎导致错误的函数:
def get_account():
if network.show_active() == "development":
return accounts[0]
else:
return accounts.add(config["wallets"]["from_key"])发布于 2022-02-10 06:36:20
我也得到了同样的错误,我试图直接给私钥0x.在brownie-config.yaml文件中,它可以工作,但我认为这不是获取私钥的安全方法。
.env钱包: from_key: 0x.
发布于 2022-05-21 20:25:54
我也有一个类似的问题,在本教程中还没有到这一点.我的问题是,当我使用帐户行运行deploy.py脚本时,更新到:
def deploy_simple_storage():
# account = accounts.load("Account")
account = accounts.add(os.getenv("PRIVATE-KEY"))
print(account)
而不是让正确的帐户打印,它生成一个新的一个新的助记符和帐户.
我的.env文件
export PRIVATE_KEY={My Private key prefixed w/ 0x}
我的布朗尼-config.yaml文件是:
dotenv: .env
当我创建一个测试脚本并只使用:
import os
def test():
print(os.getenv("PRIVATE-KEY"))
def main():
test()
我得到了以下结果:Browniev1.16.4- Python开发框架
BrownieSimpleStorageProject是一个活跃的项目。
推出'ganache-cli.cmd -端口8545 -天然气限制12000000 -帐户10 -硬叉伊斯坦布尔-助记布朗尼.
运行‘script\test.py::main’.没有终止本地RPC客户机..。
https://stackoverflow.com/questions/70103360
复制相似问题