Fonction de transaction web3.py donnant une erreur de compte inconnue

slaveCoder

Fonction de transaction web3.py donnant une erreur de compte inconnue


Je peux utiliser la bibliothèque web3.py et je peux déployer le contrat directement en utilisant mon nœud dans ethereum.

J’ai créé mon code de solidité en remix et copié l’abi dans la console etherum pour déployer le code. J’ai aussi l’adresse du contrat.

Mon code de solidité est le suivant.

 pragma solidity ^0.4.0; //For testing use the below data //123,"wheat","grade1",50 contract bidding { struct bid { string bidderName; uint grainId; uint bidAmount; uint bidTime; } mapping (uint => bid) bidInfos; uint[] public bidIds; function addBid( uint _bidId, string _bidderName, uint _grainId, uint _bidAmount ) public { var bid_info = bidInfos[_bidId]; bid_info.bidderName = _bidderName; bid_info.grainId = _grainId; bid_info.bidAmount=_bidAmount; bid_info.bidTime= now; bidIds.push(_bidId) -1; } function getallBids() view public returns(uint[]) { return bidIds; } function getBid(uint _bidId) view public returns (string, uint, uint, uint) { return ( bidInfos[_bidId].bidderName, bidInfos[_bidId].grainId, bidInfos[_bidId].bidAmount, bidInfos[_bidId].bidTime ); } function getbidcount() view public returns (uint) { return bidIds.length; } } 

J’ai déployé dans mon réseau etherum et obtenu l’adresse comme dans mon python j’utilise la bibliothèque web3.

 from web3 import Web3, HTTPProvider, IPCProvider, WebsocketProvider import json web3 = Web3(IPCProvider()) bid_abi=json.loads('''[{"constant":false,"inputs":[{"name":"_bidId","type":"uint256"},{"name":"_bidderName","type":"string"},{"name":"_grainId","type":"uint256"},{"name":"_bidAmount","type":"uint256"}],"name":"addBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getallBids","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_bidId","type":"uint256"}],"name":"getBid","outputs":[{"name":"","type":"string"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getbidcount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"bidIds","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]''') contract_bid=web3.eth.contract(abi=bid_abi,address='0xbcd8ffbb0f8a5410194ab5a3badf46caaa693098') contract_bid.functions.addBid(10,"xyzz",1234,5600).transact() 

C’est l’erreur que je reçois.

  Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:WinPythonpython-3.5.4.amd64libsite-packagesweb3contract.py", line 1064, in transact **self.kwargs) File "D:WinPythonpython-3.5.4.amd64libsite-packagesweb3contract.py", line 1341, in transact_with_contract_function txn_hash = web3.eth.sendTransaction(transact_transaction) File "D:WinPythonpython-3.5.4.amd64libsite-packagesweb3eth.py", line 244, in sendTransaction [transaction], File "D:WinPythonpython-3.5.4.amd64libsite-packagesweb3manager.py", line 106, in request_blocking raise ValueError(response["error"]) ValueError: {'code': -32000, 'message': 'unknown account'} 

Je fais également un compte web3.personal.unlockAccount. il donne toujours la même erreur. Il n’y a qu’un seul compte associé à mon compte également. Qu’est-ce que je fais mal?

comment faire la transaction afin que je puisse ajouter une nouvelle offre de web3 en python et obtenir le hachage de la transaction.

Réponses


 Jaime

Deux choses: assurez-vous que la somme de contrôle des adresses est correcte. tu peux faire:

web3.toChecksumAddress('0xbcd8ffbb0f8a5410194ab5a3badf46caaa693098') // pour l’adresse du contrat

Essayez également de définir le from dans transact, comme ceci:

contract_bid.functions.addBid(10,"xyzz",1234,5600).transact({'from': 'your_account'})

J’espère que cela t’aides.

sculpteur

Notez que l’utilisation de toChecksumAddress supprime toute valeur d’utilisation de la somme de contrôle. Si vous copiez / collez une adresse quelque part, voyez si vous pouvez trouver une version de somme de contrôle à partir de cette source. Si vous utilisez une source qui ne fournit pas d’adresse de somme de contrôle, je recommande de la signaler comme bogue.

Jaime

pourriez-vous élaborer sur cette « efface toute valeur de l’utilisation de la somme de contrôle »

sculpteur

Si vous exécutez toChecksumAddress sur une adresse avec une somme de contrôle interrompue (ce qui implique que l’adresse est mal entrée), la méthode «corrigera» simplement la somme de contrôle rompue. Par exemple, essayez: `Web3.toChecksumAddress (‘0xBCD8fFBb0F8a5410194AB5a3baDF46caaA693098’)`.

 

#(une, #de, compte, donnant, Erreur, fonction, inconnue, transaction, web3.py

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *