Simon Smith
Simon Smith

Reputation: 21

Typeerror - Transaction must not include unrecognized value. Solidity/Python

I am taking a course in solidity/python, where I have encountered an error, which it does seem I can solve myself.

from solcx import compile_standard, install_solc  # <- import the install_solc method!
import json
from web3 import Web3
import os
from dotenv import load_dotenv

load_dotenv()

install_solc("0.6.0")  # <- Add this line and run it

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("compiled_code.json", "w") as file:
    json.dump(compiled_sol, file)

# get bytecode
bytecode = compiled_sol["contracts"]["simpleStorage.sol"]["SimpleStorage"]["evm"]["bytecode"]["object"]

# get abi
abi = compiled_sol["contracts"]["simpleStorage.sol"]["SimpleStorage"]["abi"]

#HTTP provider - connecting to ganache

w3 = Web3(Web3.HTTPProvider("http://XXXXXXX"))

#Network ID - Blockchain ID ganache
chain_id = XXXX

#Adress from ganache
my_address = "XXX"
private_key = os.getenv("my_private_key_1")
# From os env: my_private_key = os.getenv("Private_key_test_1")

# Create the contract in python 
SimpleStorage = w3.eth.contract(abi=abi, bytecode=bytecode)
#Get the latest transaction
nonce = w3.eth.getTransactionCount(my_address)

# 1. Build a transaction
# 2. Sign a transaction
# 3. Send a transaction

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

signed_txn = w3.eth.account.sign_transaction(transaction, private_key=private_key)

print(signed_txn)

I have the following error:

TypeError("Transaction must not include unrecognized fields: %r" % superfluous_keys) TypeError: Transaction must not include unrecognized fields: {'chainID'} PS C:\Users\VSCode-win32-x64-1.40.1\Project\demos\web3_py_simple_storage>

Any help would be much appreciated...

Upvotes: 2

Views: 969

Answers (1)

JustKevin
JustKevin

Reputation: 374

If you look on the readthedocs.io page for the function "buildTransaction" it shows that the named parameter in the transaction dictionary is "chainId" and not "chainID". That's all. Python is case-sensitive in that respect. Good luck with your class.

https://web3py.readthedocs.io/en/stable/contracts.html

Upvotes: 1

Related Questions