【问题标题】:Troubles when trying to build and sign a transaction with web3尝试使用 web3 构建和签署交易时出现问题
【发布时间】: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_pa​​rams) 文件 "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_pa​​rams) 文件“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_pa​​rams = 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


    【解决方案1】:

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

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    • 我做了,但错误比以前多了,实际上我不能把它们都贴在这里
    【解决方案2】:

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

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

    转到服务器选项卡并选择以下值并保存。

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

    还将创建交易代码更改为此

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

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

    【讨论】:

      猜你喜欢
      • 2022-07-21
      • 2022-01-04
      • 2011-05-29
      • 2013-04-06
      • 2022-07-16
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      相关资源
      最近更新 更多