diff --git a/CHANGELOG.md b/CHANGELOG.md
index 15adf8efd3a..34b994dbcfe 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1593,3 +1593,13 @@ Detailed List of changes are mentioned under:
If there are any bugs, improvements, optimizations or any new feature proposal feel free to create github issue, or post a pull request for contributions.
## [Unreleased]
+
+### Fixed
+
+#### web3-eth-abi
+
+- Support for "decoding" indexed string event arguments (returns the keccak256 hash of the string value instead of the actual string value) (#6167)
+
+#### web3-eth-contract
+
+- Event filtering using non-indexed and indexed string event arguments (#6167)
diff --git a/fixtures/build/Basic.json b/fixtures/build/Basic.json
index bb293857c46..13871960a67 100644
--- a/fixtures/build/Basic.json
+++ b/fixtures/build/Basic.json
@@ -66,6 +66,31 @@
"name": "MultiValueIndexedEvent",
"type": "event"
},
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "string",
+ "name": "str",
+ "type": "string"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "val",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "bool",
+ "name": "flag",
+ "type": "bool"
+ }
+ ],
+ "name": "MultiValueIndexedEventWithStringIndexed",
+ "type": "event"
+ },
{
"anonymous": false,
"inputs": [
@@ -125,6 +150,29 @@
"stateMutability": "nonpayable",
"type": "function"
},
+ {
+ "inputs": [
+ {
+ "internalType": "string",
+ "name": "str",
+ "type": "string"
+ },
+ {
+ "internalType": "uint256",
+ "name": "val",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "flag",
+ "type": "bool"
+ }
+ ],
+ "name": "firesMultiValueIndexedEventWithStringIndexed",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -247,7 +295,7 @@
],
"evm": {
"bytecode": {
- "object": "60806040523480156200001157600080fd5b50604051620012a4380380620012a4833981810160405281019062000037919062000226565b8160008190555080600190816200004f9190620004cd565b505050620005b4565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b62000081816200006c565b81146200008d57600080fd5b50565b600081519050620000a18162000076565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000fc82620000b1565b810181811067ffffffffffffffff821117156200011e576200011d620000c2565b5b80604052505050565b60006200013362000058565b9050620001418282620000f1565b919050565b600067ffffffffffffffff821115620001645762000163620000c2565b5b6200016f82620000b1565b9050602081019050919050565b60005b838110156200019c5780820151818401526020810190506200017f565b60008484015250505050565b6000620001bf620001b98462000146565b62000127565b905082815260208101848484011115620001de57620001dd620000ac565b5b620001eb8482856200017c565b509392505050565b600082601f8301126200020b576200020a620000a7565b5b81516200021d848260208601620001a8565b91505092915050565b6000806040838503121562000240576200023f62000062565b5b6000620002508582860162000090565b925050602083015167ffffffffffffffff81111562000274576200027362000067565b5b6200028285828601620001f3565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002df57607f821691505b602082108103620002f557620002f462000297565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200035f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000320565b6200036b868362000320565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620003ae620003a8620003a2846200006c565b62000383565b6200006c565b9050919050565b6000819050919050565b620003ca836200038d565b620003e2620003d982620003b5565b8484546200032d565b825550505050565b600090565b620003f9620003ea565b62000406818484620003bf565b505050565b5b818110156200042e5762000422600082620003ef565b6001810190506200040c565b5050565b601f8211156200047d576200044781620002fb565b620004528462000310565b8101602085101562000462578190505b6200047a620004718562000310565b8301826200040b565b50505b505050565b600082821c905092915050565b6000620004a26000198460080262000482565b1980831691505092915050565b6000620004bd83836200048f565b9150826002028217905092915050565b620004d8826200028c565b67ffffffffffffffff811115620004f457620004f3620000c2565b5b620005008254620002c6565b6200050d82828562000432565b600060209050601f83116001811462000545576000841562000530578287015190505b6200053c8582620004af565b865550620005ac565b601f1984166200055586620002fb565b60005b828110156200057f5784890151825560018201915060208501945060208101905062000558565b868310156200059f57848901516200059b601f8916826200048f565b8355505b6001600288020188555050505b505050505050565b610ce080620005c46000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063844d6a3211610071578063844d6a3214610130578063939d7c4e1461013a578063ae012ede14610156578063b7a8238a14610160578063d7af8ac11461017c578063e8256ea014610198576100a9565b806319eb4a90146100ae5780632bfc4c69146100ce5780633bccbbc9146100ec5780635a018657146100f6578063828909bd14610112575b600080fd5b6100b66101b6565b6040516100c593929190610558565b60405180910390f35b6100d6610267565b6040516100e39190610596565b60405180910390f35b6100f46102f9565b005b610110600480360381019061010b9190610759565b610334565b005b61011a610374565b60405161012791906107c8565b60405180910390f35b61013861037d565b005b610154600480360381019061014f9190610759565b6103c0565b005b61015e610400565b005b61017a600480360381019061017591906107e3565b61040d565b005b6101966004803603810190610191919061082c565b610447565b005b6101a061047d565b6040516101ad919061089b565b60405180910390f35b60006060600080546001600260009054906101000a900460ff168180546101dc906108e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610208906108e5565b80156102555780601f1061022a57610100808354040283529160200191610255565b820191906000526020600020905b81548152906001019060200180831161023857829003601f168201915b50505050509150925092509250909192565b606060018054610276906108e5565b80601f01602080910402602001604051908101604052809291908181526020018280546102a2906108e5565b80156102ef5780601f106102c4576101008083540402835291602001916102ef565b820191906000526020600020905b8154815290600101906020018083116102d257829003601f168201915b5050505050905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032b90610962565b60405180910390fd5b7fa8297798732ff8a80a23cf22707934835a9d5b03536598708f7414646a1b95b383838360405161036793929190610982565b60405180910390a1505050565b60008054905090565b60006103be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b590610a0c565b60405180910390fd5b565b801515827f553c4a49a36d26504ba0880f2f9bfe9ac7db4b81a893bde296546cd96ae0b33c856040516103f39190610596565b60405180910390a3505050565b600061040b57600080fd5b565b7f617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab8160405161043c9190610596565b60405180910390a150565b82600081905550816001908161045d9190610bd8565b5080600260006101000a81548160ff021916908315150217905550505050565b6000600260009054906101000a900460ff16905090565b6000819050919050565b6104a781610494565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104e75780820151818401526020810190506104cc565b60008484015250505050565b6000601f19601f8301169050919050565b600061050f826104ad565b61051981856104b8565b93506105298185602086016104c9565b610532816104f3565b840191505092915050565b60008115159050919050565b6105528161053d565b82525050565b600060608201905061056d600083018661049e565b818103602083015261057f8185610504565b905061058e6040830184610549565b949350505050565b600060208201905081810360008301526105b08184610504565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61060e826104f3565b810181811067ffffffffffffffff8211171561062d5761062c6105d6565b5b80604052505050565b60006106406105b8565b905061064c8282610605565b919050565b600067ffffffffffffffff82111561066c5761066b6105d6565b5b610675826104f3565b9050602081019050919050565b82818337600083830152505050565b60006106a461069f84610651565b610636565b9050828152602081018484840111156106c0576106bf6105d1565b5b6106cb848285610682565b509392505050565b600082601f8301126106e8576106e76105cc565b5b81356106f8848260208601610691565b91505092915050565b61070a81610494565b811461071557600080fd5b50565b60008135905061072781610701565b92915050565b6107368161053d565b811461074157600080fd5b50565b6000813590506107538161072d565b92915050565b600080600060608486031215610772576107716105c2565b5b600084013567ffffffffffffffff8111156107905761078f6105c7565b5b61079c868287016106d3565b93505060206107ad86828701610718565b92505060406107be86828701610744565b9150509250925092565b60006020820190506107dd600083018461049e565b92915050565b6000602082840312156107f9576107f86105c2565b5b600082013567ffffffffffffffff811115610817576108166105c7565b5b610823848285016106d3565b91505092915050565b600080600060608486031215610845576108446105c2565b5b600061085386828701610718565b935050602084013567ffffffffffffffff811115610874576108736105c7565b5b610880868287016106d3565b925050604061089186828701610744565b9150509250925092565b60006020820190506108b06000830184610549565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806108fd57607f821691505b6020821081036109105761090f6108b6565b5b50919050565b7f5245564552544544205749544820524556455254000000000000000000000000600082015250565b600061094c6014836104b8565b915061095782610916565b602082019050919050565b6000602082019050818103600083015261097b8161093f565b9050919050565b6000606082019050818103600083015261099c8186610504565b90506109ab602083018561049e565b6109b86040830184610549565b949350505050565b7f5245564552544544205749544820524551554952450000000000000000000000600082015250565b60006109f66015836104b8565b9150610a01826109c0565b602082019050919050565b60006020820190508181036000830152610a25816109e9565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302610a8e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610a51565b610a988683610a51565b95508019841693508086168417925050509392505050565b6000819050919050565b6000610ad5610ad0610acb84610494565b610ab0565b610494565b9050919050565b6000819050919050565b610aef83610aba565b610b03610afb82610adc565b848454610a5e565b825550505050565b600090565b610b18610b0b565b610b23818484610ae6565b505050565b5b81811015610b4757610b3c600082610b10565b600181019050610b29565b5050565b601f821115610b8c57610b5d81610a2c565b610b6684610a41565b81016020851015610b75578190505b610b89610b8185610a41565b830182610b28565b50505b505050565b600082821c905092915050565b6000610baf60001984600802610b91565b1980831691505092915050565b6000610bc88383610b9e565b9150826002028217905092915050565b610be1826104ad565b67ffffffffffffffff811115610bfa57610bf96105d6565b5b610c0482546108e5565b610c0f828285610b4b565b600060209050601f831160018114610c425760008415610c30578287015190505b610c3a8582610bbc565b865550610ca2565b601f198416610c5086610a2c565b60005b82811015610c7857848901518255600182019150602085019450602081019050610c53565b86831015610c955784890151610c91601f891682610b9e565b8355505b6001600288020188555050505b50505050505056fea26469706673582212200b9ded6251f5065202c6109ba133d2a5cb3f5ddaeca0b4190e23f1e80c13989264736f6c63430008100033"
+ "object": "60806040523480156200001157600080fd5b5060405162001068380380620010688339818101604052810190620000379190620002e7565b816000819055508060019080519060200190620000569291906200005f565b505050620003b1565b8280546200006d906200037c565b90600052602060002090601f016020900481019282620000915760008555620000dd565b82601f10620000ac57805160ff1916838001178555620000dd565b82800160010185558215620000dd579182015b82811115620000dc578251825591602001919060010190620000bf565b5b509050620000ec9190620000f0565b5090565b5b808211156200010b576000816000905550600101620000f1565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620001388162000123565b81146200014457600080fd5b50565b60008151905062000158816200012d565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001b38262000168565b810181811067ffffffffffffffff82111715620001d557620001d462000179565b5b80604052505050565b6000620001ea6200010f565b9050620001f88282620001a8565b919050565b600067ffffffffffffffff8211156200021b576200021a62000179565b5b620002268262000168565b9050602081019050919050565b60005b838110156200025357808201518184015260208101905062000236565b8381111562000263576000848401525b50505050565b6000620002806200027a84620001fd565b620001de565b9050828152602081018484840111156200029f576200029e62000163565b5b620002ac84828562000233565b509392505050565b600082601f830112620002cc57620002cb6200015e565b5b8151620002de84826020860162000269565b91505092915050565b6000806040838503121562000301576200030062000119565b5b6000620003118582860162000147565b925050602083015167ffffffffffffffff8111156200033557620003346200011e565b5b6200034385828601620002b4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200039557607f821691505b602082108103620003ab57620003aa6200034d565b5b50919050565b610ca780620003c16000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063844d6a3211610071578063844d6a3214610157578063939d7c4e14610161578063ae012ede1461017d578063b7a8238a14610187578063d7af8ac1146101a3578063e8256ea0146101bf576100b4565b806319eb4a90146100b95780632bfc4c69146100d95780633bccbbc9146100f75780635a018657146101015780637cfbdcf01461011d578063828909bd14610139575b600080fd5b6100c16101dd565b6040516100d093929190610680565b60405180910390f35b6100e161028e565b6040516100ee91906106be565b60405180910390f35b6100ff610320565b005b61011b60048036038101906101169190610881565b61035b565b005b61013760048036038101906101329190610950565b61039b565b005b6101416103e9565b60405161014e91906109c4565b60405180910390f35b61015f6103f2565b005b61017b60048036038101906101769190610881565b610435565b005b610185610475565b005b6101a1600480360381019061019c91906109df565b610482565b005b6101bd60048036038101906101b89190610a28565b6104bc565b005b6101c76104f9565b6040516101d49190610a97565b60405180910390f35b60006060600080546001600260009054906101000a900460ff1681805461020390610ae1565b80601f016020809104026020016040519081016040528092919081815260200182805461022f90610ae1565b801561027c5780601f106102515761010080835404028352916020019161027c565b820191906000526020600020905b81548152906001019060200180831161025f57829003601f168201915b50505050509150925092509250909192565b60606001805461029d90610ae1565b80601f01602080910402602001604051908101604052809291908181526020018280546102c990610ae1565b80156103165780601f106102eb57610100808354040283529160200191610316565b820191906000526020600020905b8154815290600101906020018083116102f957829003601f168201915b5050505050905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035290610b5e565b60405180910390fd5b7fa8297798732ff8a80a23cf22707934835a9d5b03536598708f7414646a1b95b383838360405161038e93929190610b7e565b60405180910390a1505050565b8015158285856040516103af929190610bec565b60405180910390207f5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd560405160405180910390a450505050565b60008054905090565b6000610433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042a90610c51565b60405180910390fd5b565b801515827f553c4a49a36d26504ba0880f2f9bfe9ac7db4b81a893bde296546cd96ae0b33c8560405161046891906106be565b60405180910390a3505050565b600061048057600080fd5b565b7f617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab816040516104b191906106be565b60405180910390a150565b8260008190555081600190805190602001906104d9929190610510565b5080600260006101000a81548160ff021916908315150217905550505050565b6000600260009054906101000a900460ff16905090565b82805461051c90610ae1565b90600052602060002090601f01602090048101928261053e5760008555610585565b82601f1061055757805160ff1916838001178555610585565b82800160010185558215610585579182015b82811115610584578251825591602001919060010190610569565b5b5090506105929190610596565b5090565b5b808211156105af576000816000905550600101610597565b5090565b6000819050919050565b6105c6816105b3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156106065780820151818401526020810190506105eb565b83811115610615576000848401525b50505050565b6000601f19601f8301169050919050565b6000610637826105cc565b61064181856105d7565b93506106518185602086016105e8565b61065a8161061b565b840191505092915050565b60008115159050919050565b61067a81610665565b82525050565b600060608201905061069560008301866105bd565b81810360208301526106a7818561062c565b90506106b66040830184610671565b949350505050565b600060208201905081810360008301526106d8818461062c565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6107368261061b565b810181811067ffffffffffffffff82111715610755576107546106fe565b5b80604052505050565b60006107686106e0565b9050610774828261072d565b919050565b600067ffffffffffffffff821115610794576107936106fe565b5b61079d8261061b565b9050602081019050919050565b82818337600083830152505050565b60006107cc6107c784610779565b61075e565b9050828152602081018484840111156107e8576107e76106f9565b5b6107f38482856107aa565b509392505050565b600082601f8301126108105761080f6106f4565b5b81356108208482602086016107b9565b91505092915050565b610832816105b3565b811461083d57600080fd5b50565b60008135905061084f81610829565b92915050565b61085e81610665565b811461086957600080fd5b50565b60008135905061087b81610855565b92915050565b60008060006060848603121561089a576108996106ea565b5b600084013567ffffffffffffffff8111156108b8576108b76106ef565b5b6108c4868287016107fb565b93505060206108d586828701610840565b92505060406108e68682870161086c565b9150509250925092565b600080fd5b600080fd5b60008083601f8401126109105761090f6106f4565b5b8235905067ffffffffffffffff81111561092d5761092c6108f0565b5b602083019150836001820283011115610949576109486108f5565b5b9250929050565b6000806000806060858703121561096a576109696106ea565b5b600085013567ffffffffffffffff811115610988576109876106ef565b5b610994878288016108fa565b945094505060206109a787828801610840565b92505060406109b88782880161086c565b91505092959194509250565b60006020820190506109d960008301846105bd565b92915050565b6000602082840312156109f5576109f46106ea565b5b600082013567ffffffffffffffff811115610a1357610a126106ef565b5b610a1f848285016107fb565b91505092915050565b600080600060608486031215610a4157610a406106ea565b5b6000610a4f86828701610840565b935050602084013567ffffffffffffffff811115610a7057610a6f6106ef565b5b610a7c868287016107fb565b9250506040610a8d8682870161086c565b9150509250925092565b6000602082019050610aac6000830184610671565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610af957607f821691505b602082108103610b0c57610b0b610ab2565b5b50919050565b7f5245564552544544205749544820524556455254000000000000000000000000600082015250565b6000610b486014836105d7565b9150610b5382610b12565b602082019050919050565b60006020820190508181036000830152610b7781610b3b565b9050919050565b60006060820190508181036000830152610b98818661062c565b9050610ba760208301856105bd565b610bb46040830184610671565b949350505050565b600081905092915050565b6000610bd38385610bbc565b9350610be08385846107aa565b82840190509392505050565b6000610bf9828486610bc7565b91508190509392505050565b7f5245564552544544205749544820524551554952450000000000000000000000600082015250565b6000610c3b6015836105d7565b9150610c4682610c05565b602082019050919050565b60006020820190508181036000830152610c6a81610c2e565b905091905056fea2646970667358221220ca8ff7a2edb3cb30dd9de0ed5a0665fd7ee39e4680760776b264f55d8f5ef51c64736f6c634300080d0033"
}
}
}
diff --git a/fixtures/build/Basic.ts b/fixtures/build/Basic.ts
index a73e69e8935..f0e46a36550 100644
--- a/fixtures/build/Basic.ts
+++ b/fixtures/build/Basic.ts
@@ -17,8 +17,16 @@ along with web3.js. If not, see .
export const BasicAbi = [
{
inputs: [
- { internalType: 'uint256', name: '_val', type: 'uint256' },
- { internalType: 'string', name: '_stringValue', type: 'string' },
+ {
+ internalType: 'uint256',
+ name: '_val',
+ type: 'uint256',
+ },
+ {
+ internalType: 'string',
+ name: '_stringValue',
+ type: 'string',
+ },
],
stateMutability: 'nonpayable',
type: 'constructor',
@@ -26,9 +34,24 @@ export const BasicAbi = [
{
anonymous: false,
inputs: [
- { indexed: false, internalType: 'string', name: 'str', type: 'string' },
- { indexed: false, internalType: 'uint256', name: 'val', type: 'uint256' },
- { indexed: false, internalType: 'bool', name: 'flag', type: 'bool' },
+ {
+ indexed: false,
+ internalType: 'string',
+ name: 'str',
+ type: 'string',
+ },
+ {
+ indexed: false,
+ internalType: 'uint256',
+ name: 'val',
+ type: 'uint256',
+ },
+ {
+ indexed: false,
+ internalType: 'bool',
+ name: 'flag',
+ type: 'bool',
+ },
],
name: 'MultiValueEvent',
type: 'event',
@@ -36,24 +59,83 @@ export const BasicAbi = [
{
anonymous: false,
inputs: [
- { indexed: false, internalType: 'string', name: 'str', type: 'string' },
- { indexed: true, internalType: 'uint256', name: 'val', type: 'uint256' },
- { indexed: true, internalType: 'bool', name: 'flag', type: 'bool' },
+ {
+ indexed: false,
+ internalType: 'string',
+ name: 'str',
+ type: 'string',
+ },
+ {
+ indexed: true,
+ internalType: 'uint256',
+ name: 'val',
+ type: 'uint256',
+ },
+ {
+ indexed: true,
+ internalType: 'bool',
+ name: 'flag',
+ type: 'bool',
+ },
],
name: 'MultiValueIndexedEvent',
type: 'event',
},
{
anonymous: false,
- inputs: [{ indexed: false, internalType: 'string', name: 'str', type: 'string' }],
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'string',
+ name: 'str',
+ type: 'string',
+ },
+ {
+ indexed: true,
+ internalType: 'uint256',
+ name: 'val',
+ type: 'uint256',
+ },
+ {
+ indexed: true,
+ internalType: 'bool',
+ name: 'flag',
+ type: 'bool',
+ },
+ ],
+ name: 'MultiValueIndexedEventWithStringIndexed',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: 'string',
+ name: 'str',
+ type: 'string',
+ },
+ ],
name: 'StringEvent',
type: 'event',
},
{
inputs: [
- { internalType: 'string', name: 'str', type: 'string' },
- { internalType: 'uint256', name: 'val', type: 'uint256' },
- { internalType: 'bool', name: 'flag', type: 'bool' },
+ {
+ internalType: 'string',
+ name: 'str',
+ type: 'string',
+ },
+ {
+ internalType: 'uint256',
+ name: 'val',
+ type: 'uint256',
+ },
+ {
+ internalType: 'bool',
+ name: 'flag',
+ type: 'bool',
+ },
],
name: 'firesMultiValueEvent',
outputs: [],
@@ -62,9 +144,21 @@ export const BasicAbi = [
},
{
inputs: [
- { internalType: 'string', name: 'str', type: 'string' },
- { internalType: 'uint256', name: 'val', type: 'uint256' },
- { internalType: 'bool', name: 'flag', type: 'bool' },
+ {
+ internalType: 'string',
+ name: 'str',
+ type: 'string',
+ },
+ {
+ internalType: 'uint256',
+ name: 'val',
+ type: 'uint256',
+ },
+ {
+ internalType: 'bool',
+ name: 'flag',
+ type: 'bool',
+ },
],
name: 'firesMultiValueIndexedEvent',
outputs: [],
@@ -72,7 +166,36 @@ export const BasicAbi = [
type: 'function',
},
{
- inputs: [{ internalType: 'string', name: '_str', type: 'string' }],
+ inputs: [
+ {
+ internalType: 'string',
+ name: 'str',
+ type: 'string',
+ },
+ {
+ internalType: 'uint256',
+ name: 'val',
+ type: 'uint256',
+ },
+ {
+ internalType: 'bool',
+ name: 'flag',
+ type: 'bool',
+ },
+ ],
+ name: 'firesMultiValueIndexedEventWithStringIndexed',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ internalType: 'string',
+ name: '_str',
+ type: 'string',
+ },
+ ],
name: 'firesStringEvent',
outputs: [],
stateMutability: 'nonpayable',
@@ -81,21 +204,39 @@ export const BasicAbi = [
{
inputs: [],
name: 'getBoolValue',
- outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
+ outputs: [
+ {
+ internalType: 'bool',
+ name: '',
+ type: 'bool',
+ },
+ ],
stateMutability: 'view',
type: 'function',
},
{
inputs: [],
name: 'getIntValue',
- outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ ],
stateMutability: 'view',
type: 'function',
},
{
inputs: [],
name: 'getStringValue',
- outputs: [{ internalType: 'string', name: '', type: 'string' }],
+ outputs: [
+ {
+ internalType: 'string',
+ name: '',
+ type: 'string',
+ },
+ ],
stateMutability: 'view',
type: 'function',
},
@@ -103,9 +244,21 @@ export const BasicAbi = [
inputs: [],
name: 'getValues',
outputs: [
- { internalType: 'uint256', name: '', type: 'uint256' },
- { internalType: 'string', name: '', type: 'string' },
- { internalType: 'bool', name: '', type: 'bool' },
+ {
+ internalType: 'uint256',
+ name: '',
+ type: 'uint256',
+ },
+ {
+ internalType: 'string',
+ name: '',
+ type: 'string',
+ },
+ {
+ internalType: 'bool',
+ name: '',
+ type: 'bool',
+ },
],
stateMutability: 'view',
type: 'function',
@@ -124,12 +277,30 @@ export const BasicAbi = [
stateMutability: 'pure',
type: 'function',
},
- { inputs: [], name: 'reverts', outputs: [], stateMutability: 'pure', type: 'function' },
+ {
+ inputs: [],
+ name: 'reverts',
+ outputs: [],
+ stateMutability: 'pure',
+ type: 'function',
+ },
{
inputs: [
- { internalType: 'uint256', name: '_value', type: 'uint256' },
- { internalType: 'string', name: '_stringValue', type: 'string' },
- { internalType: 'bool', name: '_boolValue', type: 'bool' },
+ {
+ internalType: 'uint256',
+ name: '_value',
+ type: 'uint256',
+ },
+ {
+ internalType: 'string',
+ name: '_stringValue',
+ type: 'string',
+ },
+ {
+ internalType: 'bool',
+ name: '_boolValue',
+ type: 'bool',
+ },
],
name: 'setValues',
outputs: [],
@@ -138,4 +309,4 @@ export const BasicAbi = [
},
] as const;
export const BasicBytecode =
- '0x60806040523480156200001157600080fd5b50604051620012a4380380620012a4833981810160405281019062000037919062000226565b8160008190555080600190816200004f9190620004cd565b505050620005b4565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b62000081816200006c565b81146200008d57600080fd5b50565b600081519050620000a18162000076565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000fc82620000b1565b810181811067ffffffffffffffff821117156200011e576200011d620000c2565b5b80604052505050565b60006200013362000058565b9050620001418282620000f1565b919050565b600067ffffffffffffffff821115620001645762000163620000c2565b5b6200016f82620000b1565b9050602081019050919050565b60005b838110156200019c5780820151818401526020810190506200017f565b60008484015250505050565b6000620001bf620001b98462000146565b62000127565b905082815260208101848484011115620001de57620001dd620000ac565b5b620001eb8482856200017c565b509392505050565b600082601f8301126200020b576200020a620000a7565b5b81516200021d848260208601620001a8565b91505092915050565b6000806040838503121562000240576200023f62000062565b5b6000620002508582860162000090565b925050602083015167ffffffffffffffff81111562000274576200027362000067565b5b6200028285828601620001f3565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002df57607f821691505b602082108103620002f557620002f462000297565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200035f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000320565b6200036b868362000320565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620003ae620003a8620003a2846200006c565b62000383565b6200006c565b9050919050565b6000819050919050565b620003ca836200038d565b620003e2620003d982620003b5565b8484546200032d565b825550505050565b600090565b620003f9620003ea565b62000406818484620003bf565b505050565b5b818110156200042e5762000422600082620003ef565b6001810190506200040c565b5050565b601f8211156200047d576200044781620002fb565b620004528462000310565b8101602085101562000462578190505b6200047a620004718562000310565b8301826200040b565b50505b505050565b600082821c905092915050565b6000620004a26000198460080262000482565b1980831691505092915050565b6000620004bd83836200048f565b9150826002028217905092915050565b620004d8826200028c565b67ffffffffffffffff811115620004f457620004f3620000c2565b5b620005008254620002c6565b6200050d82828562000432565b600060209050601f83116001811462000545576000841562000530578287015190505b6200053c8582620004af565b865550620005ac565b601f1984166200055586620002fb565b60005b828110156200057f5784890151825560018201915060208501945060208101905062000558565b868310156200059f57848901516200059b601f8916826200048f565b8355505b6001600288020188555050505b505050505050565b610ce080620005c46000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063844d6a3211610071578063844d6a3214610130578063939d7c4e1461013a578063ae012ede14610156578063b7a8238a14610160578063d7af8ac11461017c578063e8256ea014610198576100a9565b806319eb4a90146100ae5780632bfc4c69146100ce5780633bccbbc9146100ec5780635a018657146100f6578063828909bd14610112575b600080fd5b6100b66101b6565b6040516100c593929190610558565b60405180910390f35b6100d6610267565b6040516100e39190610596565b60405180910390f35b6100f46102f9565b005b610110600480360381019061010b9190610759565b610334565b005b61011a610374565b60405161012791906107c8565b60405180910390f35b61013861037d565b005b610154600480360381019061014f9190610759565b6103c0565b005b61015e610400565b005b61017a600480360381019061017591906107e3565b61040d565b005b6101966004803603810190610191919061082c565b610447565b005b6101a061047d565b6040516101ad919061089b565b60405180910390f35b60006060600080546001600260009054906101000a900460ff168180546101dc906108e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610208906108e5565b80156102555780601f1061022a57610100808354040283529160200191610255565b820191906000526020600020905b81548152906001019060200180831161023857829003601f168201915b50505050509150925092509250909192565b606060018054610276906108e5565b80601f01602080910402602001604051908101604052809291908181526020018280546102a2906108e5565b80156102ef5780601f106102c4576101008083540402835291602001916102ef565b820191906000526020600020905b8154815290600101906020018083116102d257829003601f168201915b5050505050905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032b90610962565b60405180910390fd5b7fa8297798732ff8a80a23cf22707934835a9d5b03536598708f7414646a1b95b383838360405161036793929190610982565b60405180910390a1505050565b60008054905090565b60006103be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b590610a0c565b60405180910390fd5b565b801515827f553c4a49a36d26504ba0880f2f9bfe9ac7db4b81a893bde296546cd96ae0b33c856040516103f39190610596565b60405180910390a3505050565b600061040b57600080fd5b565b7f617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab8160405161043c9190610596565b60405180910390a150565b82600081905550816001908161045d9190610bd8565b5080600260006101000a81548160ff021916908315150217905550505050565b6000600260009054906101000a900460ff16905090565b6000819050919050565b6104a781610494565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104e75780820151818401526020810190506104cc565b60008484015250505050565b6000601f19601f8301169050919050565b600061050f826104ad565b61051981856104b8565b93506105298185602086016104c9565b610532816104f3565b840191505092915050565b60008115159050919050565b6105528161053d565b82525050565b600060608201905061056d600083018661049e565b818103602083015261057f8185610504565b905061058e6040830184610549565b949350505050565b600060208201905081810360008301526105b08184610504565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61060e826104f3565b810181811067ffffffffffffffff8211171561062d5761062c6105d6565b5b80604052505050565b60006106406105b8565b905061064c8282610605565b919050565b600067ffffffffffffffff82111561066c5761066b6105d6565b5b610675826104f3565b9050602081019050919050565b82818337600083830152505050565b60006106a461069f84610651565b610636565b9050828152602081018484840111156106c0576106bf6105d1565b5b6106cb848285610682565b509392505050565b600082601f8301126106e8576106e76105cc565b5b81356106f8848260208601610691565b91505092915050565b61070a81610494565b811461071557600080fd5b50565b60008135905061072781610701565b92915050565b6107368161053d565b811461074157600080fd5b50565b6000813590506107538161072d565b92915050565b600080600060608486031215610772576107716105c2565b5b600084013567ffffffffffffffff8111156107905761078f6105c7565b5b61079c868287016106d3565b93505060206107ad86828701610718565b92505060406107be86828701610744565b9150509250925092565b60006020820190506107dd600083018461049e565b92915050565b6000602082840312156107f9576107f86105c2565b5b600082013567ffffffffffffffff811115610817576108166105c7565b5b610823848285016106d3565b91505092915050565b600080600060608486031215610845576108446105c2565b5b600061085386828701610718565b935050602084013567ffffffffffffffff811115610874576108736105c7565b5b610880868287016106d3565b925050604061089186828701610744565b9150509250925092565b60006020820190506108b06000830184610549565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806108fd57607f821691505b6020821081036109105761090f6108b6565b5b50919050565b7f5245564552544544205749544820524556455254000000000000000000000000600082015250565b600061094c6014836104b8565b915061095782610916565b602082019050919050565b6000602082019050818103600083015261097b8161093f565b9050919050565b6000606082019050818103600083015261099c8186610504565b90506109ab602083018561049e565b6109b86040830184610549565b949350505050565b7f5245564552544544205749544820524551554952450000000000000000000000600082015250565b60006109f66015836104b8565b9150610a01826109c0565b602082019050919050565b60006020820190508181036000830152610a25816109e9565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302610a8e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610a51565b610a988683610a51565b95508019841693508086168417925050509392505050565b6000819050919050565b6000610ad5610ad0610acb84610494565b610ab0565b610494565b9050919050565b6000819050919050565b610aef83610aba565b610b03610afb82610adc565b848454610a5e565b825550505050565b600090565b610b18610b0b565b610b23818484610ae6565b505050565b5b81811015610b4757610b3c600082610b10565b600181019050610b29565b5050565b601f821115610b8c57610b5d81610a2c565b610b6684610a41565b81016020851015610b75578190505b610b89610b8185610a41565b830182610b28565b50505b505050565b600082821c905092915050565b6000610baf60001984600802610b91565b1980831691505092915050565b6000610bc88383610b9e565b9150826002028217905092915050565b610be1826104ad565b67ffffffffffffffff811115610bfa57610bf96105d6565b5b610c0482546108e5565b610c0f828285610b4b565b600060209050601f831160018114610c425760008415610c30578287015190505b610c3a8582610bbc565b865550610ca2565b601f198416610c5086610a2c565b60005b82811015610c7857848901518255600182019150602085019450602081019050610c53565b86831015610c955784890151610c91601f891682610b9e565b8355505b6001600288020188555050505b50505050505056fea26469706673582212200b9ded6251f5065202c6109ba133d2a5cb3f5ddaeca0b4190e23f1e80c13989264736f6c63430008100033';
+ '0x60806040523480156200001157600080fd5b5060405162001068380380620010688339818101604052810190620000379190620002e7565b816000819055508060019080519060200190620000569291906200005f565b505050620003b1565b8280546200006d906200037c565b90600052602060002090601f016020900481019282620000915760008555620000dd565b82601f10620000ac57805160ff1916838001178555620000dd565b82800160010185558215620000dd579182015b82811115620000dc578251825591602001919060010190620000bf565b5b509050620000ec9190620000f0565b5090565b5b808211156200010b576000816000905550600101620000f1565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620001388162000123565b81146200014457600080fd5b50565b60008151905062000158816200012d565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001b38262000168565b810181811067ffffffffffffffff82111715620001d557620001d462000179565b5b80604052505050565b6000620001ea6200010f565b9050620001f88282620001a8565b919050565b600067ffffffffffffffff8211156200021b576200021a62000179565b5b620002268262000168565b9050602081019050919050565b60005b838110156200025357808201518184015260208101905062000236565b8381111562000263576000848401525b50505050565b6000620002806200027a84620001fd565b620001de565b9050828152602081018484840111156200029f576200029e62000163565b5b620002ac84828562000233565b509392505050565b600082601f830112620002cc57620002cb6200015e565b5b8151620002de84826020860162000269565b91505092915050565b6000806040838503121562000301576200030062000119565b5b6000620003118582860162000147565b925050602083015167ffffffffffffffff8111156200033557620003346200011e565b5b6200034385828601620002b4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200039557607f821691505b602082108103620003ab57620003aa6200034d565b5b50919050565b610ca780620003c16000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063844d6a3211610071578063844d6a3214610157578063939d7c4e14610161578063ae012ede1461017d578063b7a8238a14610187578063d7af8ac1146101a3578063e8256ea0146101bf576100b4565b806319eb4a90146100b95780632bfc4c69146100d95780633bccbbc9146100f75780635a018657146101015780637cfbdcf01461011d578063828909bd14610139575b600080fd5b6100c16101dd565b6040516100d093929190610680565b60405180910390f35b6100e161028e565b6040516100ee91906106be565b60405180910390f35b6100ff610320565b005b61011b60048036038101906101169190610881565b61035b565b005b61013760048036038101906101329190610950565b61039b565b005b6101416103e9565b60405161014e91906109c4565b60405180910390f35b61015f6103f2565b005b61017b60048036038101906101769190610881565b610435565b005b610185610475565b005b6101a1600480360381019061019c91906109df565b610482565b005b6101bd60048036038101906101b89190610a28565b6104bc565b005b6101c76104f9565b6040516101d49190610a97565b60405180910390f35b60006060600080546001600260009054906101000a900460ff1681805461020390610ae1565b80601f016020809104026020016040519081016040528092919081815260200182805461022f90610ae1565b801561027c5780601f106102515761010080835404028352916020019161027c565b820191906000526020600020905b81548152906001019060200180831161025f57829003601f168201915b50505050509150925092509250909192565b60606001805461029d90610ae1565b80601f01602080910402602001604051908101604052809291908181526020018280546102c990610ae1565b80156103165780601f106102eb57610100808354040283529160200191610316565b820191906000526020600020905b8154815290600101906020018083116102f957829003601f168201915b5050505050905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035290610b5e565b60405180910390fd5b7fa8297798732ff8a80a23cf22707934835a9d5b03536598708f7414646a1b95b383838360405161038e93929190610b7e565b60405180910390a1505050565b8015158285856040516103af929190610bec565b60405180910390207f5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd560405160405180910390a450505050565b60008054905090565b6000610433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042a90610c51565b60405180910390fd5b565b801515827f553c4a49a36d26504ba0880f2f9bfe9ac7db4b81a893bde296546cd96ae0b33c8560405161046891906106be565b60405180910390a3505050565b600061048057600080fd5b565b7f617cf8a4400dd7963ed519ebe655a16e8da1282bb8fea36a21f634af912f54ab816040516104b191906106be565b60405180910390a150565b8260008190555081600190805190602001906104d9929190610510565b5080600260006101000a81548160ff021916908315150217905550505050565b6000600260009054906101000a900460ff16905090565b82805461051c90610ae1565b90600052602060002090601f01602090048101928261053e5760008555610585565b82601f1061055757805160ff1916838001178555610585565b82800160010185558215610585579182015b82811115610584578251825591602001919060010190610569565b5b5090506105929190610596565b5090565b5b808211156105af576000816000905550600101610597565b5090565b6000819050919050565b6105c6816105b3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156106065780820151818401526020810190506105eb565b83811115610615576000848401525b50505050565b6000601f19601f8301169050919050565b6000610637826105cc565b61064181856105d7565b93506106518185602086016105e8565b61065a8161061b565b840191505092915050565b60008115159050919050565b61067a81610665565b82525050565b600060608201905061069560008301866105bd565b81810360208301526106a7818561062c565b90506106b66040830184610671565b949350505050565b600060208201905081810360008301526106d8818461062c565b905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6107368261061b565b810181811067ffffffffffffffff82111715610755576107546106fe565b5b80604052505050565b60006107686106e0565b9050610774828261072d565b919050565b600067ffffffffffffffff821115610794576107936106fe565b5b61079d8261061b565b9050602081019050919050565b82818337600083830152505050565b60006107cc6107c784610779565b61075e565b9050828152602081018484840111156107e8576107e76106f9565b5b6107f38482856107aa565b509392505050565b600082601f8301126108105761080f6106f4565b5b81356108208482602086016107b9565b91505092915050565b610832816105b3565b811461083d57600080fd5b50565b60008135905061084f81610829565b92915050565b61085e81610665565b811461086957600080fd5b50565b60008135905061087b81610855565b92915050565b60008060006060848603121561089a576108996106ea565b5b600084013567ffffffffffffffff8111156108b8576108b76106ef565b5b6108c4868287016107fb565b93505060206108d586828701610840565b92505060406108e68682870161086c565b9150509250925092565b600080fd5b600080fd5b60008083601f8401126109105761090f6106f4565b5b8235905067ffffffffffffffff81111561092d5761092c6108f0565b5b602083019150836001820283011115610949576109486108f5565b5b9250929050565b6000806000806060858703121561096a576109696106ea565b5b600085013567ffffffffffffffff811115610988576109876106ef565b5b610994878288016108fa565b945094505060206109a787828801610840565b92505060406109b88782880161086c565b91505092959194509250565b60006020820190506109d960008301846105bd565b92915050565b6000602082840312156109f5576109f46106ea565b5b600082013567ffffffffffffffff811115610a1357610a126106ef565b5b610a1f848285016107fb565b91505092915050565b600080600060608486031215610a4157610a406106ea565b5b6000610a4f86828701610840565b935050602084013567ffffffffffffffff811115610a7057610a6f6106ef565b5b610a7c868287016107fb565b9250506040610a8d8682870161086c565b9150509250925092565b6000602082019050610aac6000830184610671565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610af957607f821691505b602082108103610b0c57610b0b610ab2565b5b50919050565b7f5245564552544544205749544820524556455254000000000000000000000000600082015250565b6000610b486014836105d7565b9150610b5382610b12565b602082019050919050565b60006020820190508181036000830152610b7781610b3b565b9050919050565b60006060820190508181036000830152610b98818661062c565b9050610ba760208301856105bd565b610bb46040830184610671565b949350505050565b600081905092915050565b6000610bd38385610bbc565b9350610be08385846107aa565b82840190509392505050565b6000610bf9828486610bc7565b91508190509392505050565b7f5245564552544544205749544820524551554952450000000000000000000000600082015250565b6000610c3b6015836105d7565b9150610c4682610c05565b602082019050919050565b60006020820190508181036000830152610c6a81610c2e565b905091905056fea2646970667358221220ca8ff7a2edb3cb30dd9de0ed5a0665fd7ee39e4680760776b264f55d8f5ef51c64736f6c634300080d0033';
diff --git a/fixtures/contracts/Basic.sol b/fixtures/contracts/Basic.sol
index cdb10b5ef1d..89b3a1c8a65 100644
--- a/fixtures/contracts/Basic.sol
+++ b/fixtures/contracts/Basic.sol
@@ -10,6 +10,7 @@ contract Basic {
event StringEvent(string str);
event MultiValueEvent(string str, uint256 val, bool flag);
event MultiValueIndexedEvent(string str, uint256 indexed val, bool indexed flag);
+ event MultiValueIndexedEventWithStringIndexed(string indexed str, uint256 indexed val, bool indexed flag);
constructor(uint256 _val, string memory _stringValue) {
intValue = _val;
@@ -61,4 +62,8 @@ contract Basic {
function firesStringEvent(string memory _str) public {
emit StringEvent(_str);
}
+
+ function firesMultiValueIndexedEventWithStringIndexed(string calldata str, uint256 val, bool flag) public {
+ emit MultiValueIndexedEventWithStringIndexed(str, val, flag);
+ }
}
diff --git a/packages/web3-eth-abi/CHANGELOG.md b/packages/web3-eth-abi/CHANGELOG.md
index 373b4d10c55..953d4f25a21 100644
--- a/packages/web3-eth-abi/CHANGELOG.md
+++ b/packages/web3-eth-abi/CHANGELOG.md
@@ -113,3 +113,7 @@ Documentation:
[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/)
## [Unreleased]
+
+### Fixed
+
+- Support for "decoding" indexed string event arguments (returns the keccak256 hash of the string value instead of the actual string value) (#6167)
diff --git a/packages/web3-eth-abi/src/api/logs_api.ts b/packages/web3-eth-abi/src/api/logs_api.ts
index e766f3f5532..677a4c50478 100644
--- a/packages/web3-eth-abi/src/api/logs_api.ts
+++ b/packages/web3-eth-abi/src/api/logs_api.ts
@@ -20,6 +20,9 @@ import { decodeParameter, decodeParametersWith } from './parameters_api.js';
const STATIC_TYPES = ['bool', 'string', 'int', 'uint', 'address', 'fixed', 'ufixed'];
+const _decodeParameter = (inputType: string, clonedTopic: string) =>
+ inputType === 'string' ? clonedTopic : decodeParameter(inputType, clonedTopic);
+
/**
* Decodes ABI-encoded log data and indexed topic data.
* @param inputs - A {@link AbiParameter} input array. See the [Solidity documentation](https://docs.soliditylang.org/en/develop/types.html) for a list of types.
@@ -90,7 +93,7 @@ export const decodeLog = (
const decodedIndexedInputs = Object.values(indexedInputs).map((input, index) =>
STATIC_TYPES.some(s => input.type.startsWith(s))
- ? decodeParameter(input.type, clonedTopics[index + offset])
+ ? _decodeParameter(input.type, clonedTopics[index + offset])
: clonedTopics[index + offset],
);
diff --git a/packages/web3-eth-contract/CHANGELOG.md b/packages/web3-eth-contract/CHANGELOG.md
index bb11afec23f..28b90e5eb21 100644
--- a/packages/web3-eth-contract/CHANGELOG.md
+++ b/packages/web3-eth-contract/CHANGELOG.md
@@ -273,3 +273,7 @@ Documentation:
[Migration Guide from 1.x](https://docs.web3js.org/guides/web3_upgrade_guide/x/)
## [Unreleased]
+
+### Fixed
+
+- Event filtering using non-indexed and indexed string event arguments (#6167)
diff --git a/packages/web3-eth-contract/src/contract.ts b/packages/web3-eth-contract/src/contract.ts
index c9f0a918305..7abe1d6c163 100644
--- a/packages/web3-eth-contract/src/contract.ts
+++ b/packages/web3-eth-contract/src/contract.ts
@@ -71,7 +71,7 @@ import {
Numbers,
Web3ValidationErrorObject,
} from 'web3-types';
-import { format, isDataFormat, toChecksumAddress } from 'web3-utils';
+import { format, isDataFormat, keccak256, toChecksumAddress } from 'web3-utils';
import {
isNullish,
validator,
@@ -735,22 +735,35 @@ export class Contract
const filter = options?.filter ?? {};
const filterKeys = Object.keys(filter);
- return eventName === 'allEvents' && filterKeys.length > 0
- ? decodedLogs.filter(log =>
- typeof log === 'string'
- ? true
- : filterKeys.every((k: string) =>
- Array.isArray(filter[k])
- ? (filter[k] as Numbers[]).some(
- (v: Numbers) =>
- String(log.returnValues[k]).toUpperCase() ===
- String(v).toUpperCase(),
- )
- : String(log.returnValues[k]).toUpperCase() ===
- String(filter[k]).toUpperCase(),
- ),
- )
- : decodedLogs;
+
+ if (filterKeys.length > 0) {
+ return decodedLogs.filter(log => {
+ if (typeof log === 'string') return true;
+
+ return filterKeys.every((key: string) => {
+ if (Array.isArray(filter[key])) {
+ return (filter[key] as Numbers[]).some(
+ (v: Numbers) =>
+ String(log.returnValues[key]).toUpperCase() ===
+ String(v).toUpperCase(),
+ );
+ }
+
+ const inputAbi = abi.inputs?.filter(input => input.name === key)[0];
+ if (inputAbi?.indexed && inputAbi.type === 'string') {
+ const hashedIndexedString = keccak256(filter[key] as string);
+ if (hashedIndexedString === String(log.returnValues[key])) return true;
+ }
+
+ return (
+ String(log.returnValues[key]).toUpperCase() ===
+ String(filter[key]).toUpperCase()
+ );
+ });
+ });
+ }
+
+ return decodedLogs;
}
private _parseAndSetAddress(value?: Address, returnFormat: DataFormat = DEFAULT_RETURN_FORMAT) {
diff --git a/packages/web3-eth-contract/src/encoding.ts b/packages/web3-eth-contract/src/encoding.ts
index 082a86c33eb..662b926231c 100644
--- a/packages/web3-eth-contract/src/encoding.ts
+++ b/packages/web3-eth-contract/src/encoding.ts
@@ -15,7 +15,7 @@ You should have received a copy of the GNU Lesser General Public License
along with web3.js. If not, see .
*/
-import { format, isNullish } from 'web3-utils';
+import { format, isNullish, keccak256 } from 'web3-utils';
import {
AbiConstructorFragment,
@@ -101,6 +101,8 @@ export const encodeEventABI = (
// TODO: deal properly with components
if (Array.isArray(value)) {
opts.topics.push(value.map(v => encodeParameter(input.type, v)));
+ } else if (input.type === 'string') {
+ opts.topics.push(keccak256(value as string));
} else {
opts.topics.push(encodeParameter(input.type, value));
}
diff --git a/packages/web3-eth-contract/test/integration/contract_filter_events.test.ts b/packages/web3-eth-contract/test/integration/contract_filter_events.test.ts
index 61b392815f1..e0c26a3b453 100644
--- a/packages/web3-eth-contract/test/integration/contract_filter_events.test.ts
+++ b/packages/web3-eth-contract/test/integration/contract_filter_events.test.ts
@@ -183,6 +183,9 @@ describe('contract getPastEvent filter', () => {
await contractDeployed.methods
.firesMultiValueIndexedEvent('str3', 3, true)
.send(sendOptions);
+ await contractDeployed.methods
+ .firesMultiValueIndexedEventWithStringIndexed('str4', 4, true)
+ .send(sendOptions);
});
it('should filter one event by address with event name and filter param', async () => {
@@ -238,5 +241,45 @@ describe('contract getPastEvent filter', () => {
expect(event1?.returnValues?.val).toBe(toBigInt(1));
expect(event3?.returnValues?.val).toBe(toBigInt(3));
});
+
+ it('should filter events using non-indexed string', async () => {
+ const res: EventLog[] = (await contractDeployed.getPastEvents(
+ 'MultiValueIndexedEvent',
+ {
+ fromBlock: 'earliest',
+ filter: {
+ str: 'str2',
+ },
+ },
+ )) as unknown as EventLog[];
+ expect(res).toHaveLength(1);
+
+ const event = res[0];
+ expect(event).toBeDefined();
+ expect(event.returnValues.str).toBe('str2');
+ expect(event.returnValues.val).toBe(BigInt(2));
+ expect(event.returnValues.flag).toBeFalsy();
+ });
+
+ it('should filter events using indexed string', async () => {
+ const res: EventLog[] = (await contractDeployed.getPastEvents(
+ 'MultiValueIndexedEventWithStringIndexed',
+ {
+ fromBlock: 'earliest',
+ filter: {
+ str: 'str4',
+ },
+ },
+ )) as unknown as EventLog[];
+ expect(res).toHaveLength(1);
+
+ const event = res[0];
+ expect(event).toBeDefined();
+ expect(event.returnValues.str).toBe(
+ '0x3f6d5d7b72c0059e2ecac56fd4adeefb2cff23aa41d13170f78ea6bf81e6e0ca',
+ );
+ expect(event.returnValues.val).toBe(BigInt(4));
+ expect(event.returnValues.flag).toBeTruthy();
+ });
});
});
diff --git a/packages/web3-eth-contract/test/unit/encode_event_abi.test.ts b/packages/web3-eth-contract/test/unit/encode_event_abi.test.ts
new file mode 100644
index 00000000000..6837cbc204f
--- /dev/null
+++ b/packages/web3-eth-contract/test/unit/encode_event_abi.test.ts
@@ -0,0 +1,205 @@
+/*
+This file is part of web3.js.
+
+web3.js is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+web3.js is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with web3.js. If not, see .
+*/
+import { AbiEventFragment } from 'web3-types';
+import { ContractOptions, encodeEventABI } from '../../src';
+
+const contractOptions: ContractOptions = {
+ address: '0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe',
+} as ContractOptions;
+const abiEventFragment: AbiEventFragment & { signature: string } = {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'string',
+ name: 'str',
+ type: 'string',
+ },
+ {
+ indexed: true,
+ internalType: 'uint256',
+ name: 'val',
+ type: 'uint256',
+ },
+ {
+ indexed: true,
+ internalType: 'bool',
+ name: 'flag',
+ type: 'bool',
+ },
+ ],
+ name: 'MultiValueIndexedEventWithStringIndexed',
+ type: 'event',
+ signature: '0x5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd5',
+};
+
+describe('encodeEventAbi', () => {
+ it('should format fromBlock for filter', () => {
+ const encodedEventFilter = encodeEventABI(contractOptions, abiEventFragment, {
+ fromBlock: 10,
+ });
+
+ expect(encodedEventFilter).toMatchObject({
+ fromBlock: '0xa',
+ address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae',
+ });
+ });
+
+ it('should format toBlock for filter', () => {
+ const encodedEventFilter = encodeEventABI(contractOptions, abiEventFragment, {
+ toBlock: 10,
+ });
+
+ expect(encodedEventFilter).toMatchObject({
+ toBlock: '0xa',
+ address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae',
+ });
+ });
+
+ it('should set topics array for filter to given topics array', () => {
+ const encodedEventFilter = encodeEventABI(contractOptions, abiEventFragment, {
+ topics: ['0x3f6d5d7b72c0059e2ecac56fd4adeefb2cff23aa41d13170f78ea6bf81e6e0ca'],
+ });
+
+ expect(encodedEventFilter).toMatchObject({
+ topics: ['0x3f6d5d7b72c0059e2ecac56fd4adeefb2cff23aa41d13170f78ea6bf81e6e0ca'],
+ address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae',
+ });
+ });
+
+ it('should set filter to get all events for address starting at fromBlock', () => {
+ const encodedEventFilter = encodeEventABI(
+ contractOptions,
+ {
+ anonymous: false,
+ name: 'ALLEVENTS',
+ type: 'event',
+ signature: '0x5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd5',
+ },
+ {
+ fromBlock: 1000,
+ },
+ );
+
+ expect(encodedEventFilter).toMatchObject({
+ fromBlock: '0x3e8',
+ address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae',
+ });
+ });
+
+ // This test fails because encoding of a dynamic sized array is not current supported
+ // Received error: AbiError: Parameter encoding error
+ it.skip('should set the filter topics to the keccak256 hash of the provided filter value', () => {
+ const _abiEventFragment: AbiEventFragment & { signature: string } = {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'uint256[]',
+ name: 'vals',
+ type: 'uint256[]',
+ },
+ ],
+ name: 'IndexedArrayEvent',
+ type: 'event',
+ signature: '0x71aefd401e4886a78931d42be506247958b9751348fa91aa2f9dbbd557e9208e',
+ };
+
+ encodeEventABI(contractOptions, _abiEventFragment, {
+ filter: {
+ vals: [1, 2, 3],
+ },
+ });
+ });
+
+ // This test fails because encoding of a dynamic sized array is not current supported
+ // Received error: AbiError: Parameter encoding error
+ it.skip('should set the filter topics', () => {
+ const _abiEventFragment: AbiEventFragment & { signature: string } = {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: 'uint256[]',
+ name: 'vals',
+ type: 'uint256[]',
+ },
+ {
+ indexed: true,
+ internalType: 'string[]',
+ name: 'strs',
+ type: 'string[]',
+ },
+ {
+ indexed: true,
+ internalType: 'bool[]',
+ name: 'flags',
+ type: 'bool[]',
+ },
+ ],
+ name: 'IndexedMultiValArrayEvent',
+ type: 'event',
+ signature: '0x9b5a12617e7ca791109ef5e09b8cc23cb4034e0e3dfb4aadac37b55fd28718f6',
+ };
+
+ encodeEventABI(contractOptions, _abiEventFragment, {
+ filter: {
+ vals: [1, 2, 3],
+ },
+ });
+ });
+
+ it('should filter by the keccak256 of the provided indexed string filter', () => {
+ const encodedEventFilter = encodeEventABI(contractOptions, abiEventFragment, {
+ filter: {
+ str: 'str4',
+ },
+ });
+
+ expect(encodedEventFilter).toMatchObject({
+ topics: [
+ '0x5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd5',
+ '0x3f6d5d7b72c0059e2ecac56fd4adeefb2cff23aa41d13170f78ea6bf81e6e0ca',
+ // eslint-disable-next-line no-null/no-null
+ null,
+ // eslint-disable-next-line no-null/no-null
+ null,
+ ],
+ address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae',
+ });
+ });
+
+ it('should filter by the provided bool filter', () => {
+ const encodedEventFilter = encodeEventABI(contractOptions, abiEventFragment, {
+ filter: {
+ flag: true,
+ },
+ });
+
+ expect(encodedEventFilter).toMatchObject({
+ topics: [
+ '0x5b5730af07e266d8b4845f404beb3b193085c686b0edd8e8e20cd4b3fc2b6cd5',
+ // eslint-disable-next-line no-null/no-null
+ null,
+ // eslint-disable-next-line no-null/no-null
+ null,
+ '0x0000000000000000000000000000000000000000000000000000000000000001',
+ ],
+ address: '0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae',
+ });
+ });
+});