在 ganache 上调用函数时出现 Web3.py abi keyerror

Posted

技术标签:

【中文标题】在 ganache 上调用函数时出现 Web3.py abi keyerror【英文标题】:Web3.py abi keyerror while calling a function on ganache 【发布时间】:2020-05-18 02:29:13 【问题描述】:

我已经在 remix ide 中编译了我的代码。它在那里工作正常。我将编译细节中的字节码和 adi 复制到了我的 python 代码中。我使用 web3.py 作为外部库。但是当我尝试运行我的函数时,我收到一个错误keyerror。我想我需要将函数中的一些键作为参数传递,但无法找到方法。

这是我的代码

from web3 import Web3,HTTPProvider
import json

web_link="http://127.0.0.1:7545"


class FunderContract:
    web3 = Web3(Web3.HTTPProvider(web_link))

    def start(self,account_number):
        print("local host is ",self.web3.isConnected())
        print("first block at",self.web3.eth.blockNumber)

        self.web3.eth.defaultAccount=account_number


        abi = json.loads('["inputs":[],"stateMutability":"payable","type":"constructor","anonymous":false,"inputs":["indexed":false,"internalType":"address","name":"to","type":"address","indexed":false,"internalType":"address","name":"from","type":"address","indexed":false,"internalType":"uint256","name":"value","type":"uint256"],"name":"FundsSended","type":"event","inputs":["internalType":"address","name":"add","type":"address"],"name":"endWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function","inputs":["internalType":"address","name":"add","type":"address"],"name":"initiateWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function","inputs":["internalType":"address","name":"id","type":"address"],"name":"isAllowedToWithdraw","outputs":["internalType":"bool","name":"","type":"bool"],"stateMutability":"payable","type":"function","inputs":["internalType":"string","name":"name","type":"string"],"name":"register","outputs":[],"stateMutability":"nonpayable","type":"function","inputs":["internalType":"address payable","name":"add","type":"address"],"name":"registerFundi","outputs":[],"stateMutability":"payable","type":"function","inputs":["internalType":"address","name":"add","type":"address"],"name":"sendFunds","outputs":[],"stateMutability":"payable","type":"function","inputs":[],"name":"stage","outputs":["internalType":"enum Funders.Stage","name":"","type":"uint8"],"stateMutability":"view","type":"function","inputs":["internalType":"address","name":"fundee_id","type":"address","internalType":"enum Funders.voteDetail","name":"v","type":"uint8"],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function","stateMutability":"payable","type":"receive"]')


        byte_code='608060405260026000556000600160006101000a81548160ff0219169083600281111561002857fe5b021790555060006001806101000a81548160ff0219169083600181111561004b57fe5b021790555060006003556000600560146101000a81548160ff021916908360ff16021790555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061137b806100c16000396000f3fe60806040526004361061007f5760003560e01c8063c040e6b81161004e578063c040e6b8146101da578063c92cd1b214610213578063cfe52bdd14610264578063f2c298be146102a857610086565b80632a4c80a41461008b57806358041a48146100e75780637eeb17731461012b578063bceb514d1461017c57610086565b3661008657005b600080fd5b6100cd600480360360208110156100a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610370565b604051808215151515815260200191505060405180910390f35b610129600480360360208110156100fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104b6565b005b34801561013757600080fd5b5061017a6004803603602081101561014e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610786565b005b34801561018857600080fd5b506101d86004803603604081101561019f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291905050506108cc565b005b3480156101e657600080fd5b506101ef610c40565b604051808260028111156101ff57fe5b60ff16815260200191505060405180910390f35b34801561021f57600080fd5b506102626004803603602081101561023657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c53565b005b6102a66004803603602081101561027a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d98565b005b3480156102b457600080fd5b5061036e600480360360208110156102cb57600080fd5b81019080803590602001906401000000008111156102e857600080fd5b8201836020820111156102fa57600080fd5b8035906020019184600183028401116401000000008311171561031c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506110d3565b005b600081600280600281111561038157fe5b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff1660028111156103dc57fe5b1461044f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f7420696e207468652072657175697265642073746174650000000000000081525060200191505060405180910390fd5b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154905060005481106104a95760019350506104af565b60009350505b5050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f796f75206e65656420746f20726567697374657220666972737400000000000081525060200191505060405180910390fd5b600354600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555080600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548160ff0219169083600281111561072a57fe5b02179055506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555060016003540160038190555050565b80600080600281111561079557fe5b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff1660028111156107f057fe5b14610863576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f7420696e207468652072657175697265642073746174650000000000000081525060200191505060405180910390fd5b6001600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548160ff021916908360028111156108c257fe5b0217905550505050565b8160018060028111156108db57fe5b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff16600281111561093657fe5b146109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f7420696e207468652072657175697265642073746174650000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f796f75206e65656420746f20726567697374657220666972737400000000000081525060200191505060405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160149054906101000a900460ff1615610b6f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f796f75206861766520616c726561647920766f7465640000000000000000000081525060200191505060405180910390fd5b600180811115610b7b57fe5b836001811115610b8757fe5b1415610bdf576001600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401600082825401925050819055505b6001600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160146101000a81548160ff02191690831515021790555050505050565b600160009054906101000a900460ff1681565b806001806002811115610c6257fe5b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff166002811115610cbd57fe5b14610d30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6e6f7420696e207468652072657175697265642073746174650000000000000081525060200191505060405180910390fd5b60028060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548160ff02191690836002811115610d8e57fe5b0217905550505050565b3373ffffffffffffffffffffffffffffffffffffffff16600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f796f75206e65656420746f20726567697374657220666972737400000000000081525060200191505060405180910390fd5b600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610f43573d6000803e3d6000fd5b5034600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015401600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055507f7c85e8630bb4531f4492b73593e689399a8f085c9bf902152cb608deedc05cde600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163334604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a150565b600560149054906101000a900460ff16600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010190805190602001906111939291906112a0565b5033600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160146101000a81548160ff0219169083151502179055506001600560149054906101000a900460ff1601600560146101000a81548160ff021916908360ff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106112e157805160ff191683800117855561130f565b8280016001018555821561130f579182015b8281111561130e5782518255916020019190600101906112f3565b5b50905061131c9190611320565b5090565b61134291905b8082111561133e576000816000905550600101611326565b5090565b9056fea2646970667358221220faca3dcd964f4917dbe19837b69f1ca4e4060e27338abe360253fc8353a2ab5964736f6c63430006010033'
        # address = web3.toChecksumAddress(address)
       Greeter = self.web3.eth.contract(abi=abi, bytecode=bytecode)
       tx_hash = Greeter.constructor().transact()
       tx_receipt = self.web3.eth.waitForTransactionReceipt(tx_hash)
       contract = self.web3.eth.contract(
         address=tx_receipt.contractAddress,
         abi=abi,
       )

       print(tx_receipt.contractAddress)

       tx_hash = contract.functions.register('name').transact()

if __name__ == "__main__":


        b=FunderContract()

        b.start("0x35286618aD7Ca934b0AA53FE110ec09569CAd507")
        a=b.funder_contract.functions.register('my').transact()
      `

我遇到了错误

File "main.py", line 41, in <module>
    b.start("0x35286618aD7Ca934b0AA53FE110ec09569CAd507")
  File "main.py", line 25, in start
    self.funder_contract.functions.register('my').transact()
  File "D:\mywork\ML\anaconda\envs\ethe_v\lib\site-packages\web3\contract.py", line 819, in __call__
    clone._set_function_info()
  File "D:\mywork\ML\anaconda\envs\ethe_v\lib\site-packages\web3\contract.py", line 829, in _set_function_info
    self.kwargs
  File "D:\mywork\ML\anaconda\envs\ethe_v\lib\site-packages\web3\_utils\contracts.py", line 119, in find_matching_fn_abi
    function_candidates = pipe(abi, name_filter, arg_count_filter, encoding_filter)
  File "cytoolz/functoolz.pyx", line 669, in cytoolz.functoolz.pipe
    return c_pipe(data, funcs)
  File "cytoolz/functoolz.pyx", line 644, in cytoolz.functoolz.c_pipe
    data = func(data)
  File "D:\mywork\ML\anaconda\envs\ethe_v\lib\site-packages\web3\_utils\abi.py", line 98, in filter_by_name
    in contract_abi
  File "D:\mywork\ML\anaconda\envs\ethe_v\lib\site-packages\web3\_utils\abi.py", line 102, in <listcomp>
    abi['name'] == name  # type: ignore
KeyError: 'name'

编辑 它适用于solidity 0.5.x ..

【问题讨论】:

【参考方案1】:

web3py 仍不完全兼容solidity 0.6.x 版本。 查看链接。 https://github.com/ethereum/web3.py/issues/1566 您可以在此之前使用solidity 0.5.x 并通过链接跟踪进度。

【讨论】:

以上是关于在 ganache 上调用函数时出现 Web3.py abi keyerror的主要内容,如果未能解决你的问题,请参考以下文章

外部函数调用:更换机器时出现错误1097

使用必要的 WHERE 子句时出现“在 bool 上调用成员函数 bind_param()”错误 [重复]

在视图/只读区块链函数上调用 ethers web3js 时出现气体限制错误

segueing时出现核心数据错误:无法在NSManagedObject类上调用指定的初始值设定项

制作替换系统库中的函数调用的 DLL 时出现问题

第二次调用函数绘制图表时出现Amcharts5错误