30
votes

Python web3 et Ganache Error "Méthode Eth_maxpriorityeepergas non pris en charge

L'exécution web3.py avec ganache-Cli renvoie cette erreur:

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

Mais cela fonctionne lorsque vous travaillez avec un réseau de test comme Ropsten directement sans ganache-Cli.

Exécution de ce code en suivant un tutoriel:

Traceback (most recent call last):
  File "C:\Users\Axceus\Desktop\demos\web3_py_simple_storage\deploy.py", line 54, in <module>
    transaction = SimpleStorage.constructor().buildTransaction(
  File "C:\Users\Axceus\AppData\Local\Programs\Python\Python310\lib\site-packages\eth_utils\decorators.py", line 18, in _wrapper
    return self.method(obj, *args, **kwargs)
  File "C:\Users\Axceus\AppData\Local\Programs\Python\Python310\lib\site-packages\web3\contract.py", line 684, in buildTransaction
    return fill_transaction_defaults(self.web3, built_transaction)
  File "cytoolz/functoolz.pyx", line 250, in cytoolz.functoolz.curry.__call__
    return self.func(*args, **kwargs)
  File "C:\Users\Axceus\AppData\Local\Programs\Python\Python310\lib\site-packages\web3\_utils\transactions.py", line 121, in fill_transaction_defaults
    default_val = default_getter(web3, transaction)
  File "C:\Users\Axceus\AppData\Local\Programs\Python\Python310\lib\site-packages\web3\_utils\transactions.py", line 71, in <lambda>
    web3.eth.max_priority_fee + (2 * web3.eth.get_block('latest')['baseFeePerGas'])
  File "C:\Users\Axceus\AppData\Local\Programs\Python\Python310\lib\site-packages\web3\eth.py", line 549, in max_priority_fee
    return self._max_priority_fee()
  File "C:\Users\Axceus\AppData\Local\Programs\Python\Python310\lib\site-packages\web3\module.py", line 57, in caller
    result = w3.manager.request_blocking(method_str,
  File "C:\Users\Axceus\AppData\Local\Programs\Python\Python310\lib\site-packages\web3\manager.py", line 198, in request_blocking
    return self.formatted_response(response,
  File "C:\Users\Axceus\AppData\Local\Programs\Python\Python310\lib\site-packages\web3\manager.py", line 171, in formatted_response
    raise ValueError(response["error"])
ValueError: {'message': 'Method eth_maxPriorityFeePerGas not supported.', 'code': -32000, 'data': {'stack': 'Error: Method eth_maxPriorityFeePerGas not supported.\n    at GethApiDouble.handleRequest (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\lib\\subproviders\\geth_api_double.js:70:16)\n    at next (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\node_modules\\web3-provider-engine\\index.js:136:18)\n    at GethDefaults.handleRequest (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\lib\\subproviders\\gethdefaults.js:15:12)\n    at next (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\node_modules\\web3-provider-engine\\index.js:136:18)\n    at SubscriptionSubprovider.FilterSubprovider.handleRequest (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\node_modules\\web3-provider-engine\\subproviders\\filters.js:89:7)\n    at SubscriptionSubprovider.handleRequest (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\node_modules\\web3-provider-engine\\subproviders\\subscriptions.js:137:49)\n    at next (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\node_modules\\web3-provider-engine\\index.js:136:18)\n    at DelayedBlockFilter.handleRequest (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\lib\\subproviders\\delayedblockfilter.js:31:3)\n    at next (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\node_modules\\web3-provider-engine\\index.js:136:18)\n    at RequestFunnel.handleRequest (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\lib\\subproviders\\requestfunnel.js:32:12)\n    at next (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\node_modules\\web3-provider-engine\\index.js:136:18)\n    at Web3ProviderEngine._handleAsync (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\node_modules\\web3-provider-engine\\index.js:123:3)\n    at Timeout._onTimeout (C:\\Program Files\\WindowsApps\\GanacheUI_2.5.4.0_x64__5dg5pnz03psnj\\app\\resources\\static\\node\\node_modules\\ganache-core\\node_modules\\web3-provider-engine\\index.js:107:12)\n    at listOnTimeout (internal/timers.js:531:17)\n    at processTimers (internal/timers.js:475:7)', 'name': 'Error'}}

J'obtiens cette erreur dans le terminal:

from solcx import compile_standard, install_solc
import json
from web3 import Web3
import os
from dotenv import load_dotenv

load_dotenv()

with open("./SimpleStorage.sol", "r") as file:
    simple_storage_file = file.read()

install_solc("0.6.0")

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)

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 = 1337
my_address = "0x3d5CDfCea81141d7C839938095912F594b566Ab8"
private_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, "from": my_address, "nonce": nonce}
)

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

tx_hash = w3.eth.send_raw_transaction(signed_txn.rawTransaction)

Solution:

Method eth_maxPriorityFeePerGas not supported.


7 commentaires

1. Correction du titre de votre message, 2. Le message doit se concentrer sur votre problème, pas sur vos frustrations ou votre niveau de programmation, vous obtenez tous les mêmes réponses si vous êtes un expert ou si vous êtes un débutant, donc la publication est inutile et ennuyeuse . 3. Expliquez de quoi parle votre code, ce que vous espérez obtenir, etc. Lisez également comment demander et vérifier Le tournée


Dans le cas où cela semblait un peu dur, laissez-moi vous expliquer. Le titre de question est essentiel pour obtenir de bonnes réponses; Vous voulez attirer l'attention des personnes qui pourront vous aider. La meilleure façon de le faire est de mettre le titre possible sur le titre.


Si je le pouvais, mais cela ne me laissera pas: le titre ne peut pas contenir "VS Code ne fonctionne pas avec Ganache"


Oui, les robots de nounou qui le contrôlent peuvent parfois être un peu dominateurs. Ma suggestion est de jouer avec le libellé jusqu'à ce que vous obteniez quelque chose qui passe.


J'ai essayé de nombreux titres et cela me donne toujours "le titre ne peut pas contenir" semble très difficile sur ce qu'il va et ne me laissera pas mettre le titre, il n'est donc pas très utile de frapper un titre lorsque le système ne me laissera rien de plus spécifique


Je passe également par ce tutoriel et j'ai trouvé votre question en copier et en collant l'erreur dans Google. Votre question est apparue. Je ne peux pas dire si vous avez changé le titre, mais y compris le texte de l'erreur m'a certainement aidé à trouver votre question et la réponse ultérieure.


Lorsque vous postez une question ou un titre, postez toujours ce que vous ou le compilateur faites. Ne publiez pas ce que vous ou le compilateur ne faites pas. Des phrases comme «X ne fonctionnent pas» sont inutiles et contre-productifs.


4 Réponses :


3
votes

Par défaut, web3py tentera de créer un transaction EIP-1559 . Pour ce faire, il essaiera de récupérer les frais de priorité estimés.

La version stable actuelle de Ganache (6.x) ne prend pas en charge les fonctionnalités liées à l'EIP-1559, donc l'appel RPC échoue. L'ajout de l'argument du prix du gaz à la transaction fera envoyer une "transaction héritée" (c'est-à-dire pré-1559), il n'essaiera donc pas d'interroger les frais de priorité et de simplement coder dur le prix du gaz.

De Ganache 7.x (en version bêta au moment de la rédaction), les transactions EIP-1559 seront prises en charge, de sorte que le comportement par défaut de web3py fonctionnera également.


0 commentaires

0
votes

J'ai essayé de suivre la suggestion de Daniel, mais je n'ai pas pu installer Ganache-Cli 7.x sur mon ordinateur pour quelque peu de raison. J'ai donc rétrogradé la version Web3 à 5.24.0 et cela fonctionne.


1 commentaires

Cela ne fournit pas de réponse à la question. Une fois que vous avez suffisamment Reputation Vous serez en mesure de Commentaire sur n'importe quel article ; Au lieu de cela, fournir des réponses Cela ne nécessite pas de clarification de l'Asker . - d'examen



30
votes

Veuillez l'utiliser pour envoyer votre transaction:

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


0 commentaires

1
votes
from solcx import compile_standard, install_solc
from web3 import Web3
import json

with open("simpleStorage.sol", "r") as f:
    simple_storage_file = f.read()


# install version of compiler
install_solc("0.6.0")

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"
)

# print(compiled_sol)



# save the json to file
with open("compile_code.json", "w") as f:
    json.dump(compiled_sol, f)


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

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


# connect to ganache

# setup RPC SERVER / HTTP provider
w3 = Web3(Web3.HTTPProvider("http://127.0.0.1:7545"))
chain_id = 1337
my_address = "address here"
private_key = "private key here"


SimpleStorage = w3.eth.contract(abi=abi, bytecode=bytecode)
# print(SimpleStorage)

# nonce >> Number only used once in a cryptographic communication
nonce = w3.eth.getTransactionCount(my_address)
# print(nonce)


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

0 commentaires