diff --git a/tests/core/contracts/test_contract_call_interface.py b/tests/core/contracts/test_contract_call_interface.py index f91733360a..6826ee6375 100644 --- a/tests/core/contracts/test_contract_call_interface.py +++ b/tests/core/contracts/test_contract_call_interface.py @@ -33,6 +33,7 @@ from web3.exceptions import ( BadFunctionCallOutput, BlockNumberOutofRange, + ContractLogicError, FallbackNotFound, InvalidAddress, MismatchedABI, @@ -477,9 +478,10 @@ def test_call_missing_function(mismatched_math_contract, call): def test_call_undeployed_contract(undeployed_math_contract, call): expected_undeployed_call_error_message = ( - "Could not transact with/call contract function" + "Could not transact with/call contract function, is contract " + + "deployed correctly and chain synced?" ) - with pytest.raises(BadFunctionCallOutput) as exception_info: + with pytest.raises(ContractLogicError) as exception_info: call(contract=undeployed_math_contract, contract_function="return13") assert expected_undeployed_call_error_message in str(exception_info.value) diff --git a/tests/core/contracts/test_contract_init.py b/tests/core/contracts/test_contract_init.py index e297dd5113..f6c9b1cacf 100644 --- a/tests/core/contracts/test_contract_init.py +++ b/tests/core/contracts/test_contract_init.py @@ -5,7 +5,7 @@ ens_addresses, ) from web3.exceptions import ( - BadFunctionCallOutput, + ContractLogicError, NameNotFound, ) @@ -68,7 +68,7 @@ def test_contract_with_name_address_changing(math_contract_factory, math_addr): # what happens when name returns address to different contract with contract_ens_addresses(mc, [("thedao.eth", "0x" + "11" * 20)]): - with pytest.raises(BadFunctionCallOutput): + with pytest.raises(ContractLogicError): mc.functions.return13().call({"from": caller}) # contract works again when name resolves correctly diff --git a/tests/core/contracts/test_contract_logic_errors.py b/tests/core/contracts/test_contract_logic_errors.py new file mode 100644 index 0000000000..d5a2dddb99 --- /dev/null +++ b/tests/core/contracts/test_contract_logic_errors.py @@ -0,0 +1,33 @@ +import pytest +from unittest.mock import ( + patch, +) + +from web3 import ( + Web3, +) +from web3._utils.contract_sources.contract_data.contract_logic_error_tester import ( + MEAS_PUB_DATA, +) +from web3.exceptions import ( + ContractLogicError, +) + + +@pytest.fixture +def web3_instance(): + return Web3(Web3.EthereumTesterProvider()) + + +def test_get_subscriber_count_with_invalid_address(web3_instance): + invalid_contract_address = "0x0000000000000000000000000000000000000000" + contract_instance = web3_instance.eth.contract( + address=invalid_contract_address, abi=MEAS_PUB_DATA["abi"] + ) + + # Mock the responses for eth_call and get_code + with patch.object(web3_instance.eth, "call", return_value=b""): + with patch.object(web3_instance.eth, "get_code", return_value=""): + # Expect the ContractLogicError due to the mocked conditions + with pytest.raises(ContractLogicError): + contract_instance.functions.getSubscriberCount().call() diff --git a/web3/_utils/contract_sources/ContractLogicErrorTester.sol b/web3/_utils/contract_sources/ContractLogicErrorTester.sol new file mode 100644 index 0000000000..aeee1bee72 --- /dev/null +++ b/web3/_utils/contract_sources/ContractLogicErrorTester.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +contract MeasPub { + address public publisher; + string public description; + uint public price_per_second; // wei per second + + mapping (address => uint) private balances; + mapping (address => uint) private last_publish_block; + mapping (uint => address) private subscriber_index; + uint private subscriber_count; + mapping (address => string) private subscriber_pubkey; + + event LogPublished(address indexed _subscriber, bytes _pwdenc, bytes _ipfsaddr, uint _cost); + event LogDebug(string _msg); + + constructor() { + publisher = msg.sender; + price_per_second = 0; // Wei + } + + function setPricePerSecond(uint _price) public { + if (msg.sender == publisher) { + price_per_second = _price; + } + } + + function publish(address _subscriber, bytes memory _pwdenc, bytes memory _ipfsaddr) public returns (bool covered) { + if (msg.sender != publisher) { + emit LogDebug("only publisher can publish"); + return false; + } + uint cost = (block.timestamp - last_publish_block[_subscriber]) * price_per_second; + if (balances[_subscriber] < cost) { + emit LogDebug("subscriber has insufficient funds"); + return false; + } + balances[_subscriber] -= cost; + payable(publisher).transfer(cost); + last_publish_block[_subscriber] = block.timestamp; + emit LogPublished(_subscriber, _pwdenc, _ipfsaddr, cost); + return true; + } + + function getSubscriberCount() public view returns (uint count) { + return subscriber_count; + } + + function getSubscriber(uint _index) public view returns (address _subscriber, string memory _pubkey) { + if (msg.sender != publisher) return (address(0), ""); + return (subscriber_index[_index], subscriber_pubkey[subscriber_index[_index]]); + } + + function subscribe(string memory _pubkey) public payable returns (bool success) { + if (last_publish_block[msg.sender] != 0) return false; + last_publish_block[msg.sender] = block.timestamp; + subscriber_index[subscriber_count] = msg.sender; + subscriber_count += 1; + subscriber_pubkey[msg.sender] = _pubkey; + balances[msg.sender] += msg.value; + emit LogDebug("new subscription successful"); + return true; + } + + function kill() public { + if (msg.sender == publisher) selfdestruct(payable(publisher)); + } +} diff --git a/web3/_utils/contract_sources/contract_data/contract_logic_error_tester.py b/web3/_utils/contract_sources/contract_data/contract_logic_error_tester.py new file mode 100644 index 0000000000..3d706d182d --- /dev/null +++ b/web3/_utils/contract_sources/contract_data/contract_logic_error_tester.py @@ -0,0 +1,130 @@ +""" +Generated by `compile_contracts.py` script. +Compiled with Solidity v0.8.23. +""" + +# source: web3/_utils/contract_sources/ContractLogicErrorTester.sol:MeasPub +MEAS_PUB_BYTECODE = "0x608060405234801561000f575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60028190555061147c806100635f395ff3fe608060405260043610610085575f3560e01c8063507e788811610058578063507e7888146101425780637284e4161461017257806389169d031461019c5780638c72c54e146101c6578063a9e99c54146101f057610085565b80630d6a92ad1461008957806317e703ab146100c557806325df1e77146100ef57806341c0e1b51461012c575b5f80fd5b348015610094575f80fd5b506100af60048036038101906100aa9190610ba0565b610218565b6040516100bc9190610c42565b60405180910390f35b3480156100d0575f80fd5b506100d96104dc565b6040516100e69190610c73565b60405180910390f35b3480156100fa575f80fd5b5061011560048036038101906101109190610cb6565b6104e5565b604051610123929190610d6a565b60405180910390f35b348015610137575f80fd5b50610140610685565b005b61015c60048036038101906101579190610e36565b610711565b6040516101699190610c42565b60405180910390f35b34801561017d575f80fd5b506101866108e7565b6040516101939190610e7d565b60405180910390f35b3480156101a7575f80fd5b506101b0610973565b6040516101bd9190610c73565b60405180910390f35b3480156101d1575f80fd5b506101da610979565b6040516101e79190610e9d565b60405180910390f35b3480156101fb575f80fd5b5061021660048036038101906102119190610cb6565b61099c565b005b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a9577fd44da6836c8376d1693e8b9cacf1c39b9bed3599164ad6d8e60902515f83938e60405161029990610f00565b60405180910390a15f90506104d5565b5f60025460045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054426102f69190610f4b565b6103009190610f7e565b90508060035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610385577fd44da6836c8376d1693e8b9cacf1c39b9bed3599164ad6d8e60902515f83938e6040516103749061102f565b60405180910390a15f9150506104d5565b8060035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546103d19190610f4b565b925050819055505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561043a573d5f803e3d5ffd5b504260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508473ffffffffffffffffffffffffffffffffffffffff167f81a79e99af4b247d61f496352cb30a7c5947507e4c574a6b7b545fd127e591698585846040516104c79392919061109f565b60405180910390a260019150505b9392505050565b5f600654905090565b5f60605f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610553575f60405180602001604052805f81525091509150610680565b60055f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075f60055f8781526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208080546105fd9061110f565b80601f01602080910402602001604051908101604052809291908181526020018280546106299061110f565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b50505050509050915091505b915091565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361070f575f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b5f8060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541461075e575f90506108e2565b4260045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503360055f60065481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f828254610803919061113f565b925050819055508160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209081610854919061130f565b503460035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108a1919061113f565b925050819055507fd44da6836c8376d1693e8b9cacf1c39b9bed3599164ad6d8e60902515f83938e6040516108d590611428565b60405180910390a1600190505b919050565b600180546108f49061110f565b80601f01602080910402602001604051908101604052809291908181526020018280546109209061110f565b801561096b5780601f106109425761010080835404028352916020019161096b565b820191905f5260205f20905b81548152906001019060200180831161094e57829003601f168201915b505050505081565b60025481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036109f657806002819055505b50565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a3382610a0a565b9050919050565b610a4381610a29565b8114610a4d575f80fd5b50565b5f81359050610a5e81610a3a565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610ab282610a6c565b810181811067ffffffffffffffff82111715610ad157610ad0610a7c565b5b80604052505050565b5f610ae36109f9565b9050610aef8282610aa9565b919050565b5f67ffffffffffffffff821115610b0e57610b0d610a7c565b5b610b1782610a6c565b9050602081019050919050565b828183375f83830152505050565b5f610b44610b3f84610af4565b610ada565b905082815260208101848484011115610b6057610b5f610a68565b5b610b6b848285610b24565b509392505050565b5f82601f830112610b8757610b86610a64565b5b8135610b97848260208601610b32565b91505092915050565b5f805f60608486031215610bb757610bb6610a02565b5b5f610bc486828701610a50565b935050602084013567ffffffffffffffff811115610be557610be4610a06565b5b610bf186828701610b73565b925050604084013567ffffffffffffffff811115610c1257610c11610a06565b5b610c1e86828701610b73565b9150509250925092565b5f8115159050919050565b610c3c81610c28565b82525050565b5f602082019050610c555f830184610c33565b92915050565b5f819050919050565b610c6d81610c5b565b82525050565b5f602082019050610c865f830184610c64565b92915050565b610c9581610c5b565b8114610c9f575f80fd5b50565b5f81359050610cb081610c8c565b92915050565b5f60208284031215610ccb57610cca610a02565b5b5f610cd884828501610ca2565b91505092915050565b610cea81610a29565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610d27578082015181840152602081019050610d0c565b5f8484015250505050565b5f610d3c82610cf0565b610d468185610cfa565b9350610d56818560208601610d0a565b610d5f81610a6c565b840191505092915050565b5f604082019050610d7d5f830185610ce1565b8181036020830152610d8f8184610d32565b90509392505050565b5f67ffffffffffffffff821115610db257610db1610a7c565b5b610dbb82610a6c565b9050602081019050919050565b5f610dda610dd584610d98565b610ada565b905082815260208101848484011115610df657610df5610a68565b5b610e01848285610b24565b509392505050565b5f82601f830112610e1d57610e1c610a64565b5b8135610e2d848260208601610dc8565b91505092915050565b5f60208284031215610e4b57610e4a610a02565b5b5f82013567ffffffffffffffff811115610e6857610e67610a06565b5b610e7484828501610e09565b91505092915050565b5f6020820190508181035f830152610e958184610d32565b905092915050565b5f602082019050610eb05f830184610ce1565b92915050565b7f6f6e6c79207075626c69736865722063616e207075626c6973680000000000005f82015250565b5f610eea601a83610cfa565b9150610ef582610eb6565b602082019050919050565b5f6020820190508181035f830152610f1781610ede565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f5582610c5b565b9150610f6083610c5b565b9250828203905081811115610f7857610f77610f1e565b5b92915050565b5f610f8882610c5b565b9150610f9383610c5b565b9250828202610fa181610c5b565b91508282048414831517610fb857610fb7610f1e565b5b5092915050565b7f737562736372696265722068617320696e73756666696369656e742066756e645f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f611019602183610cfa565b915061102482610fbf565b604082019050919050565b5f6020820190508181035f8301526110468161100d565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6110718261104d565b61107b8185611057565b935061108b818560208601610d0a565b61109481610a6c565b840191505092915050565b5f6060820190508181035f8301526110b78186611067565b905081810360208301526110cb8185611067565b90506110da6040830184610c64565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061112657607f821691505b602082108103611139576111386110e2565b5b50919050565b5f61114982610c5b565b915061115483610c5b565b925082820190508082111561116c5761116b610f1e565b5b92915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026111ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611193565b6111d88683611193565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61121361120e61120984610c5b565b6111f0565b610c5b565b9050919050565b5f819050919050565b61122c836111f9565b6112406112388261121a565b84845461119f565b825550505050565b5f90565b611254611248565b61125f818484611223565b505050565b5b81811015611282576112775f8261124c565b600181019050611265565b5050565b601f8211156112c75761129881611172565b6112a184611184565b810160208510156112b0578190505b6112c46112bc85611184565b830182611264565b50505b505050565b5f82821c905092915050565b5f6112e75f19846008026112cc565b1980831691505092915050565b5f6112ff83836112d8565b9150826002028217905092915050565b61131882610cf0565b67ffffffffffffffff81111561133157611330610a7c565b5b61133b825461110f565b611346828285611286565b5f60209050601f831160018114611377575f8415611365578287015190505b61136f85826112f4565b8655506113d6565b601f19841661138586611172565b5f5b828110156113ac57848901518255600182019150602085019450602081019050611387565b868310156113c957848901516113c5601f8916826112d8565b8355505b6001600288020188555050505b505050505050565b7f6e657720737562736372697074696f6e207375636365737366756c00000000005f82015250565b5f611412601b83610cfa565b915061141d826113de565b602082019050919050565b5f6020820190508181035f83015261143f81611406565b905091905056fea2646970667358221220ee27d3ef3dafd787585f367b50e47be4628c13e2dd48982fbde11e4cc587b23b64736f6c63430008170033" # noqa: E501 +MEAS_PUB_RUNTIME = "0x608060405260043610610085575f3560e01c8063507e788811610058578063507e7888146101425780637284e4161461017257806389169d031461019c5780638c72c54e146101c6578063a9e99c54146101f057610085565b80630d6a92ad1461008957806317e703ab146100c557806325df1e77146100ef57806341c0e1b51461012c575b5f80fd5b348015610094575f80fd5b506100af60048036038101906100aa9190610ba0565b610218565b6040516100bc9190610c42565b60405180910390f35b3480156100d0575f80fd5b506100d96104dc565b6040516100e69190610c73565b60405180910390f35b3480156100fa575f80fd5b5061011560048036038101906101109190610cb6565b6104e5565b604051610123929190610d6a565b60405180910390f35b348015610137575f80fd5b50610140610685565b005b61015c60048036038101906101579190610e36565b610711565b6040516101699190610c42565b60405180910390f35b34801561017d575f80fd5b506101866108e7565b6040516101939190610e7d565b60405180910390f35b3480156101a7575f80fd5b506101b0610973565b6040516101bd9190610c73565b60405180910390f35b3480156101d1575f80fd5b506101da610979565b6040516101e79190610e9d565b60405180910390f35b3480156101fb575f80fd5b5061021660048036038101906102119190610cb6565b61099c565b005b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a9577fd44da6836c8376d1693e8b9cacf1c39b9bed3599164ad6d8e60902515f83938e60405161029990610f00565b60405180910390a15f90506104d5565b5f60025460045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054426102f69190610f4b565b6103009190610f7e565b90508060035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610385577fd44da6836c8376d1693e8b9cacf1c39b9bed3599164ad6d8e60902515f83938e6040516103749061102f565b60405180910390a15f9150506104d5565b8060035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546103d19190610f4b565b925050819055505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561043a573d5f803e3d5ffd5b504260045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508473ffffffffffffffffffffffffffffffffffffffff167f81a79e99af4b247d61f496352cb30a7c5947507e4c574a6b7b545fd127e591698585846040516104c79392919061109f565b60405180910390a260019150505b9392505050565b5f600654905090565b5f60605f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610553575f60405180602001604052805f81525091509150610680565b60055f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075f60055f8781526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208080546105fd9061110f565b80601f01602080910402602001604051908101604052809291908181526020018280546106299061110f565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b50505050509050915091505b915091565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361070f575f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b5f8060045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541461075e575f90506108e2565b4260045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503360055f60065481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f828254610803919061113f565b925050819055508160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209081610854919061130f565b503460035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108a1919061113f565b925050819055507fd44da6836c8376d1693e8b9cacf1c39b9bed3599164ad6d8e60902515f83938e6040516108d590611428565b60405180910390a1600190505b919050565b600180546108f49061110f565b80601f01602080910402602001604051908101604052809291908181526020018280546109209061110f565b801561096b5780601f106109425761010080835404028352916020019161096b565b820191905f5260205f20905b81548152906001019060200180831161094e57829003601f168201915b505050505081565b60025481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036109f657806002819055505b50565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a3382610a0a565b9050919050565b610a4381610a29565b8114610a4d575f80fd5b50565b5f81359050610a5e81610a3a565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610ab282610a6c565b810181811067ffffffffffffffff82111715610ad157610ad0610a7c565b5b80604052505050565b5f610ae36109f9565b9050610aef8282610aa9565b919050565b5f67ffffffffffffffff821115610b0e57610b0d610a7c565b5b610b1782610a6c565b9050602081019050919050565b828183375f83830152505050565b5f610b44610b3f84610af4565b610ada565b905082815260208101848484011115610b6057610b5f610a68565b5b610b6b848285610b24565b509392505050565b5f82601f830112610b8757610b86610a64565b5b8135610b97848260208601610b32565b91505092915050565b5f805f60608486031215610bb757610bb6610a02565b5b5f610bc486828701610a50565b935050602084013567ffffffffffffffff811115610be557610be4610a06565b5b610bf186828701610b73565b925050604084013567ffffffffffffffff811115610c1257610c11610a06565b5b610c1e86828701610b73565b9150509250925092565b5f8115159050919050565b610c3c81610c28565b82525050565b5f602082019050610c555f830184610c33565b92915050565b5f819050919050565b610c6d81610c5b565b82525050565b5f602082019050610c865f830184610c64565b92915050565b610c9581610c5b565b8114610c9f575f80fd5b50565b5f81359050610cb081610c8c565b92915050565b5f60208284031215610ccb57610cca610a02565b5b5f610cd884828501610ca2565b91505092915050565b610cea81610a29565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610d27578082015181840152602081019050610d0c565b5f8484015250505050565b5f610d3c82610cf0565b610d468185610cfa565b9350610d56818560208601610d0a565b610d5f81610a6c565b840191505092915050565b5f604082019050610d7d5f830185610ce1565b8181036020830152610d8f8184610d32565b90509392505050565b5f67ffffffffffffffff821115610db257610db1610a7c565b5b610dbb82610a6c565b9050602081019050919050565b5f610dda610dd584610d98565b610ada565b905082815260208101848484011115610df657610df5610a68565b5b610e01848285610b24565b509392505050565b5f82601f830112610e1d57610e1c610a64565b5b8135610e2d848260208601610dc8565b91505092915050565b5f60208284031215610e4b57610e4a610a02565b5b5f82013567ffffffffffffffff811115610e6857610e67610a06565b5b610e7484828501610e09565b91505092915050565b5f6020820190508181035f830152610e958184610d32565b905092915050565b5f602082019050610eb05f830184610ce1565b92915050565b7f6f6e6c79207075626c69736865722063616e207075626c6973680000000000005f82015250565b5f610eea601a83610cfa565b9150610ef582610eb6565b602082019050919050565b5f6020820190508181035f830152610f1781610ede565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f5582610c5b565b9150610f6083610c5b565b9250828203905081811115610f7857610f77610f1e565b5b92915050565b5f610f8882610c5b565b9150610f9383610c5b565b9250828202610fa181610c5b565b91508282048414831517610fb857610fb7610f1e565b5b5092915050565b7f737562736372696265722068617320696e73756666696369656e742066756e645f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f611019602183610cfa565b915061102482610fbf565b604082019050919050565b5f6020820190508181035f8301526110468161100d565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6110718261104d565b61107b8185611057565b935061108b818560208601610d0a565b61109481610a6c565b840191505092915050565b5f6060820190508181035f8301526110b78186611067565b905081810360208301526110cb8185611067565b90506110da6040830184610c64565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061112657607f821691505b602082108103611139576111386110e2565b5b50919050565b5f61114982610c5b565b915061115483610c5b565b925082820190508082111561116c5761116b610f1e565b5b92915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026111ce7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611193565b6111d88683611193565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61121361120e61120984610c5b565b6111f0565b610c5b565b9050919050565b5f819050919050565b61122c836111f9565b6112406112388261121a565b84845461119f565b825550505050565b5f90565b611254611248565b61125f818484611223565b505050565b5b81811015611282576112775f8261124c565b600181019050611265565b5050565b601f8211156112c75761129881611172565b6112a184611184565b810160208510156112b0578190505b6112c46112bc85611184565b830182611264565b50505b505050565b5f82821c905092915050565b5f6112e75f19846008026112cc565b1980831691505092915050565b5f6112ff83836112d8565b9150826002028217905092915050565b61131882610cf0565b67ffffffffffffffff81111561133157611330610a7c565b5b61133b825461110f565b611346828285611286565b5f60209050601f831160018114611377575f8415611365578287015190505b61136f85826112f4565b8655506113d6565b601f19841661138586611172565b5f5b828110156113ac57848901518255600182019150602085019450602081019050611387565b868310156113c957848901516113c5601f8916826112d8565b8355505b6001600288020188555050505b505050505050565b7f6e657720737562736372697074696f6e207375636365737366756c00000000005f82015250565b5f611412601b83610cfa565b915061141d826113de565b602082019050919050565b5f6020820190508181035f83015261143f81611406565b905091905056fea2646970667358221220ee27d3ef3dafd787585f367b50e47be4628c13e2dd48982fbde11e4cc587b23b64736f6c63430008170033" # noqa: E501 +MEAS_PUB_ABI = [ + {"inputs": [], "stateMutability": "nonpayable", "type": "constructor"}, + { + "anonymous": False, + "inputs": [ + { + "indexed": False, + "internalType": "string", + "name": "_msg", + "type": "string", + } + ], + "name": "LogDebug", + "type": "event", + }, + { + "anonymous": False, + "inputs": [ + { + "indexed": True, + "internalType": "address", + "name": "_subscriber", + "type": "address", + }, + { + "indexed": False, + "internalType": "bytes", + "name": "_pwdenc", + "type": "bytes", + }, + { + "indexed": False, + "internalType": "bytes", + "name": "_ipfsaddr", + "type": "bytes", + }, + { + "indexed": False, + "internalType": "uint256", + "name": "_cost", + "type": "uint256", + }, + ], + "name": "LogPublished", + "type": "event", + }, + { + "inputs": [], + "name": "description", + "outputs": [{"internalType": "string", "name": "", "type": "string"}], + "stateMutability": "view", + "type": "function", + }, + { + "inputs": [{"internalType": "uint256", "name": "_index", "type": "uint256"}], + "name": "getSubscriber", + "outputs": [ + {"internalType": "address", "name": "_subscriber", "type": "address"}, + {"internalType": "string", "name": "_pubkey", "type": "string"}, + ], + "stateMutability": "view", + "type": "function", + }, + { + "inputs": [], + "name": "getSubscriberCount", + "outputs": [{"internalType": "uint256", "name": "count", "type": "uint256"}], + "stateMutability": "view", + "type": "function", + }, + { + "inputs": [], + "name": "kill", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function", + }, + { + "inputs": [], + "name": "price_per_second", + "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], + "stateMutability": "view", + "type": "function", + }, + { + "inputs": [ + {"internalType": "address", "name": "_subscriber", "type": "address"}, + {"internalType": "bytes", "name": "_pwdenc", "type": "bytes"}, + {"internalType": "bytes", "name": "_ipfsaddr", "type": "bytes"}, + ], + "name": "publish", + "outputs": [{"internalType": "bool", "name": "covered", "type": "bool"}], + "stateMutability": "nonpayable", + "type": "function", + }, + { + "inputs": [], + "name": "publisher", + "outputs": [{"internalType": "address", "name": "", "type": "address"}], + "stateMutability": "view", + "type": "function", + }, + { + "inputs": [{"internalType": "uint256", "name": "_price", "type": "uint256"}], + "name": "setPricePerSecond", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function", + }, + { + "inputs": [{"internalType": "string", "name": "_pubkey", "type": "string"}], + "name": "subscribe", + "outputs": [{"internalType": "bool", "name": "success", "type": "bool"}], + "stateMutability": "payable", + "type": "function", + }, +] +MEAS_PUB_DATA = { + "bytecode": MEAS_PUB_BYTECODE, + "bytecode_runtime": MEAS_PUB_RUNTIME, + "abi": MEAS_PUB_ABI, +} diff --git a/web3/contract/utils.py b/web3/contract/utils.py index f0dd8b1471..48ef288127 100644 --- a/web3/contract/utils.py +++ b/web3/contract/utils.py @@ -43,6 +43,7 @@ ) from web3.exceptions import ( BadFunctionCallOutput, + ContractLogicError, ) from web3.types import ( ABI, @@ -121,12 +122,13 @@ def call_contract_function( "Could not transact with/call contract function, is contract " "deployed correctly and chain synced?" ) + raise ContractLogicError(msg) from e else: msg = ( f"Could not decode contract function call to {function_identifier} " f"with return data: {str(return_data)}, output_types: {output_types}" ) - raise BadFunctionCallOutput(msg) from e + raise BadFunctionCallOutput(msg) from e _normalizers = itertools.chain( BASE_RETURN_NORMALIZERS,