繁体   English   中英

尝试使用 web3 构建和签署交易时出现问题

[英]Troubles when trying to build and sign a transaction with web3

我正在观看 freeCodeCamp.org、Solidity、区块链和智能合约课程的教程 - 从初学者到专家 Python 教程(视频课程的链接) ,我被困在04:06:47 ,因为当我尝试构建一个交易并签名,我的编译器给了我很多错误:

信息:不可能的 trovare 文件 corrispondenti ai criterca indicati。 Traceback(最近一次调用最后一次):文件“C:\Users\giuse\OneDrive\Desktop\Sol\web3_py_simple_storage\deploy.py”,第 44 行,在 transaction = SimpleStorage.constructor().buildTransaction( File "C:\Users \giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\eth_utils\decorators.py”,第 18 行,在 _wrapper 中返回 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.call return self.func(*args, **kwargs) File "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 行,在“气体”中:Z945F3FC449518A73B9F5F32868DB466C Z web3,tx:web3.eth.estimate_gas(tx),文件“C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\eth.py”,第 759 行,在estimate_gas 返回 self._estimate_gas(transaction, block_identifier) 文件“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 响应 = self._make_request(方法,参数)文件“C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\manager.py”,第 150 行,在 _make_request 返回 request_func(方法,参数)文件“ cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry 中。 调用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) File "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\middleware\gas_price_strategy.py",第 90 行,中间件返回make_request(method, params) 文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry 中。 调用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) File "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\web3\middleware\attrdict.py",第 33 行,在中间件响应中= make_request(method, params) 文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry 中。 调用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 中。 调用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 中。 调用return self.func(*args, **kwargs) File "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\eth_utils\decorators.py",第 91 行,在包装器中return ReturnType(result) # type: ignore File "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\eth_utils\applicators.py", line 22, in apply_formatter_at_index yield formatter(item ) 文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry 中。 调用return self.func(*args, **kwargs) File "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\eth_utils\functional.py",第 45 行,在内部return callback(fn(*args, **kwargs)) File "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 中。 调用return self.func(*args, **kwargs) File "C:\Users\giuse\AppData\Local\Programs\Python\Python39\lib\site-packages\eth_utils\applicators.py",第 72 行,在 apply_formatter_if返回格式化程序(值)文件“cytoolz/functoolz.pyx”,第 250 行,在 cytoolz.functoolz.curry 中。 调用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

我首先在互联网上搜索解决方案,但唯一的一个是在交易构建中添加一个更多参数(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)

尝试将您的chain_id = 5777 更改为chain_id = 1337。

如果您使用的是 ganache 快速入门,请改用新工作区选项,以便您可以保存它。

Go 到右上角的设置(如果您使用教程视频中的 GUI)

Go 到服务器选项卡和 select 以下值并保存。

在此处输入图像描述

在您的代码中相应地更改值。

还将创建事务代码更改为此

transaction = SimpleStorage.constructor().buildTransaction(
    {
        "chainId": chain_id,
        "gasPrice": w3.eth.gas_price,
        "from": my_address,
        "nonce": nonce,
    }
)

执行这两个步骤应该可以解决您的问题。 我只是为自己做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM