【发布时间】:2022-01-25 06:13:32
【问题描述】:
我在看freeCodeCamp.org的教程, Solidity、区块链和智能合约课程 - 从初学者到专家 Python 教程 (link of the video course) 我被困在 04:06:47 因为当我尝试构建一个交易并签名,我的编译器给了我很多错误:
INFORMAZIONI:不可能的 trovare 文件 corrispondenti ai criteri di 水稻。 Traceback(最近一次通话最后一次):文件 "C:\Users\giuse\OneDrive\Desktop\Sol\web3_py_simple_storage\deploy.py", 第 44 行,在 事务 = SimpleStorage.constructor().buildTransaction( 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\eth_utils\decorators.py", 第 18 行,在 _wrapper 中 return self.method(obj, *args, **kwargs) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\contract.py", 第 684 行,在 buildTransaction 返回 fill_transaction_defaults(self.web3,built_transaction) 文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry.调用 返回 self.func(*args, **kwargs) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3_utils\transactions.py", 第 121 行,在 fill_transaction_defaults 中 default_val = default_getter(web3, transaction) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3_utils\transactions.py", 第 67 行,在 'gas':lambda web3,tx:web3.eth.estimate_gas(tx),文件“C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\eth.py”, 第 759 行,在estimate_gas 中 return self._estimate_gas(transaction, block_identifier) File "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\module.py", 第 57 行,在调用者中 结果 = w3.manager.request_blocking(method_str,文件“C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\manager.py”, 第 197 行,在 request_blocking 中 response = self._make_request(method, params) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\manager.py", 第 150 行,在 _make_request return request_func(method, params) 文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry.call return self.func(*args, **kwargs) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\middleware\formatting.py", 第 76 行,在 apply_formatters 中 response = make_request(method, params) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\middleware\gas_price_strategy.py", 第 90 行,在中间件中 return make_request(method, params) 文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry.call return self.func(*args, **kwargs) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\middleware\formatting.py", 第 74 行,在 apply_formatters response = make_request(method, formatted_params) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\middleware\attrdict.py", 第 33 行,在中间件中 response = make_request(method, params) 文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry.call return self.func(*args, **kwargs) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\middleware\formatting.py", 第 74 行,在 apply_formatters response = make_request(method, formatted_params) 文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry.call return self.func(*args, **kwargs) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\middleware\formatting.py", 第 73 行,在 apply_formatters formatted_params = formatter(params) 文件“cytoolz/functoolz.pyx”,第 503 行,在 cytoolz.functoolz.Compose.调用 ret = PyObject_Call(self.first, args, kwargs) 文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry.call return self.func(*args, **kwargs) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\eth_utils\decorators.py", 第 91 行,在包装器中 return ReturnType(result) # 类型:忽略文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\eth_utils\applicators.py", 第 22 行,在 apply_formatter_at_index 中 产生格式化程序(项目)文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry.call return self.func(*args, **kwargs) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\eth_utils\functional.py", 第 45 行,在内部 返回回调(fn(*args, **kwargs)) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\eth_utils\applicators.py", 第 84 行,在 apply_formatters_to_dict 中 yield 键,formatterskey 文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry.call return self.func(*args, **kwargs) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\eth_utils\applicators.py", 第 72 行,在 apply_formatter_if 中 return formatter(value) File "cytoolz/functoolz.pyx", line 250, in cytoolz.functoolz.curry.call return self.func(*args, **kwargs) 文件 "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\middleware\validation.py", 第 57 行,在 validate_chain_id raise ValidationError( web3.exceptions.ValidationError: 事务声明链 ID 5777,但连接节点在 1337
我首先在互联网上搜索解决方案,但唯一的一个是在transation build中添加一个更多参数(gasPrice的那个),但它并没有解决我的问题。
希望有人能帮助我,这是我写的完整代码:
from solcx import compile_standard, install_solc
import json
from web3 import Web3
from dotenv import load_dotenv
import os
load_dotenv()
install_solc("0.6.0")
with open("./simpleStorage.sol", "r") as file:
simple_storage_file = file.read()
compiled_sol = compile_standard(
{
"language": "Solidity",
"sources": {"simpleStorage.sol": {"content": simple_storage_file}},
"settings": {
"outputSelection": {
"*": {"*": ["abi", "metadata", "evm.bytecode", "evm.sourceMap"]}
}
},
},
solc_version="0.6.0",
)
with open("compiledCode.json", "w") as file:
json.dump(compiled_sol, file)
bytecode = compiled_sol["contracts"]["simpleStorage.sol"]["SimpleStorage"]["evm"][
"bytecode"
]["object"]
abi = compiled_sol["contracts"]["simpleStorage.sol"]["SimpleStorage"]["abi"]
w3 = Web3(Web3.HTTPProvider("HTTP://127.0.0.1:7545"))
chain_id = 5777
my_address = "0xd8BADAe3766759e7e298931dF01F452616dc6dde"
pvt_key = os.getenv("PRIVATE_KEY")
SimpleStorage = w3.eth.contract(abi=abi, bytecode=bytecode)
nonce = w3.eth.getTransactionCount(my_address)
transaction = SimpleStorage.constructor().buildTransaction(
{
"chainId": chain_id,
"gasPrice": w3.eth.gas_price,
"from": my_address,
"nonce": nonce,
},
)
signed_txn = w3.eth.sign_transaction(transaction, private_key=pvt_key)
【问题讨论】:
标签: python python-3.x python-2.7 solidity web3