4aa5d0b26a
* release: v0.10.0-alpha changelog (#891) * release: v0.10.0-alpha changelog * deps: IBC v3 alpha2 (#892) * release: v0.10.0-alpha2 (#923) * deps: IBC v3 alpha2 (#892) * Problem: newPendingTransactions filter don't return ethereum tx hash (#900) * impr: support batch eth txs (#901) * support batch eth tx Closes: 896 Allow multiple MsgEthereumTx in single tx * fix transaction receipt api * fix tx receipt api and accumulate tx gas used * fix lint * fix test * fix rpc test * cleanup * fix cumulativeGasUsed and gasUsed * fix lint * Update app/ante/eth.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update app/ante/eth.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update rpc/ethereum/backend/utils.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * pr suggestions * typo * fix lint Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * build(deps): bump follow-redirects in /tests/solidity (#909) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.4 to 1.14.7. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.4...v1.14.7) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * rpc: make trace transaction api work with batch tx (#907) * make trace transaction api work with batch tx Closes: #906 fix linter * review suggestion Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix insufficient fee error message (#911) * server: add `api.enable` flag for Cosmos SDK API server (#908) * add api.enable flag for Cosmos SDK Rest server * update changelog Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * deps: bump Cosmos SDK version to `v0.45.0` (#912) * deps: bump SDK version to v0.45.0 * changelog * deprecation fix * deprecation fix 2 * Integration tests (#913) * ci: semgrep config (#917) * ci: enable semgrep config * fix config * ignore grpc web * fix: default base fee state in genesis (#919) * fix defualt base fee state in genesis Closes: #918 Solution: - initialise the default base fee value in genesis * changelog * fix: minimal-gas-prices and baseFeePerGas conflicts (#916) * Problem: minimal-gas-prices and baseFeePerGas conflicts Closes: #915 Solution: - Don't check min-gas-price for evm tx if london hardfork and feemarket enabled. comments and cleanup changelog * fix zero fee coins Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Co-authored-by: yihuang <huang@crypto.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: crypto-facs <84574577+crypto-facs@users.noreply.github.com> * release: v0.10.0-beta1 changelog (#941) * deps: IBC v3 alpha2 (#892) * Problem: newPendingTransactions filter don't return ethereum tx hash (#900) * impr: support batch eth txs (#901) * support batch eth tx Closes: 896 Allow multiple MsgEthereumTx in single tx * fix transaction receipt api * fix tx receipt api and accumulate tx gas used * fix lint * fix test * fix rpc test * cleanup * fix cumulativeGasUsed and gasUsed * fix lint * Update app/ante/eth.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update app/ante/eth.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update rpc/ethereum/backend/utils.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * pr suggestions * typo * fix lint Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * build(deps): bump follow-redirects in /tests/solidity (#909) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.4 to 1.14.7. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.4...v1.14.7) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * rpc: make trace transaction api work with batch tx (#907) * make trace transaction api work with batch tx Closes: #906 fix linter * review suggestion Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix insufficient fee error message (#911) * server: add `api.enable` flag for Cosmos SDK API server (#908) * add api.enable flag for Cosmos SDK Rest server * update changelog Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * deps: bump Cosmos SDK version to `v0.45.0` (#912) * deps: bump SDK version to v0.45.0 * changelog * deprecation fix * deprecation fix 2 * Integration tests (#913) * ci: semgrep config (#917) * ci: enable semgrep config * fix config * ignore grpc web * fix: default base fee state in genesis (#919) * fix defualt base fee state in genesis Closes: #918 Solution: - initialise the default base fee value in genesis * changelog * fix: minimal-gas-prices and baseFeePerGas conflicts (#916) * Problem: minimal-gas-prices and baseFeePerGas conflicts Closes: #915 Solution: - Don't check min-gas-price for evm tx if london hardfork and feemarket enabled. comments and cleanup changelog * fix zero fee coins Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * build(deps): bump github.com/cosmos/ibc-go/v3 (#925) * build(deps): bump simple-get from 2.8.1 to 2.8.2 in /tests/solidity (#927) * build(deps): bump github.com/cosmos/cosmos-sdk from 0.45.0 to 0.45.1 (#926) Bumps [github.com/cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) from 0.45.0 to 0.45.1. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/v0.45.1/CHANGELOG.md) - [Commits](https://github.com/cosmos/cosmos-sdk/compare/v0.45.0...v0.45.1) --- updated-dependencies: - dependency-name: github.com/cosmos/cosmos-sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ci: separate out rpc and integration tests (#931) Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix: wrong comment in EthGasConsumeDecorator (#929) * fix newPendingTransactions subscription deadlock issue (#933) * remove unused parameters from evm spec (#934) * build(deps): bump follow-redirects in /tests/solidity (#939) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * deps: upgrade geth to v1.10.15 (#935) * upgrade geth to v1.10.15 * fix lint * fix imports * revert makefile change * update changelog * Update CHANGELOG.md Co-authored-by: Guillermo Paoletti <guillermo.paoletti@gmail.com> * update chain config * add getblockvalue for chain config fork Co-authored-by: Guillermo Paoletti <guillermo.paoletti@gmail.com> Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix: base fee check logic in state transition (#932) * fix base fee check logic in state transition - should check london hardfork first, otherwise it panic if feemarket not registered. * fix lint Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * add release v0.10.0-beta1 CHANGELOG Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Co-authored-by: yihuang <huang@crypto.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: crypto-facs <84574577+crypto-facs@users.noreply.github.com> Co-authored-by: Prajjwol Gautam <not@acyb.org> Co-authored-by: HaeSung <hea9549.github@gmail.com> Co-authored-by: Guillermo Paoletti <guillermo.paoletti@gmail.com> * release: v0.10.0 final (#959) * deps: IBC v3 alpha2 (#892) * Problem: newPendingTransactions filter don't return ethereum tx hash (#900) * impr: support batch eth txs (#901) * support batch eth tx Closes: 896 Allow multiple MsgEthereumTx in single tx * fix transaction receipt api * fix tx receipt api and accumulate tx gas used * fix lint * fix test * fix rpc test * cleanup * fix cumulativeGasUsed and gasUsed * fix lint * Update app/ante/eth.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update app/ante/eth.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update rpc/ethereum/backend/utils.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * pr suggestions * typo * fix lint Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * build(deps): bump follow-redirects in /tests/solidity (#909) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.4 to 1.14.7. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.4...v1.14.7) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * rpc: make trace transaction api work with batch tx (#907) * make trace transaction api work with batch tx Closes: #906 fix linter * review suggestion Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix insufficient fee error message (#911) * server: add `api.enable` flag for Cosmos SDK API server (#908) * add api.enable flag for Cosmos SDK Rest server * update changelog Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * deps: bump Cosmos SDK version to `v0.45.0` (#912) * deps: bump SDK version to v0.45.0 * changelog * deprecation fix * deprecation fix 2 * Integration tests (#913) * ci: semgrep config (#917) * ci: enable semgrep config * fix config * ignore grpc web * fix: default base fee state in genesis (#919) * fix defualt base fee state in genesis Closes: #918 Solution: - initialise the default base fee value in genesis * changelog * fix: minimal-gas-prices and baseFeePerGas conflicts (#916) * Problem: minimal-gas-prices and baseFeePerGas conflicts Closes: #915 Solution: - Don't check min-gas-price for evm tx if london hardfork and feemarket enabled. comments and cleanup changelog * fix zero fee coins Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * build(deps): bump github.com/cosmos/ibc-go/v3 (#925) * build(deps): bump simple-get from 2.8.1 to 2.8.2 in /tests/solidity (#927) * build(deps): bump github.com/cosmos/cosmos-sdk from 0.45.0 to 0.45.1 (#926) Bumps [github.com/cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) from 0.45.0 to 0.45.1. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/v0.45.1/CHANGELOG.md) - [Commits](https://github.com/cosmos/cosmos-sdk/compare/v0.45.0...v0.45.1) --- updated-dependencies: - dependency-name: github.com/cosmos/cosmos-sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ci: separate out rpc and integration tests (#931) Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix: wrong comment in EthGasConsumeDecorator (#929) * fix newPendingTransactions subscription deadlock issue (#933) * remove unused parameters from evm spec (#934) * build(deps): bump follow-redirects in /tests/solidity (#939) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * deps: upgrade geth to v1.10.15 (#935) * upgrade geth to v1.10.15 * fix lint * fix imports * revert makefile change * update changelog * Update CHANGELOG.md Co-authored-by: Guillermo Paoletti <guillermo.paoletti@gmail.com> * update chain config * add getblockvalue for chain config fork Co-authored-by: Guillermo Paoletti <guillermo.paoletti@gmail.com> Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix: base fee check logic in state transition (#932) * fix base fee check logic in state transition - should check london hardfork first, otherwise it panic if feemarket not registered. * fix lint Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * danburck/release changelog (#942) * release: v0.10.0-alpha changelog (#891) * release: v0.10.0-alpha changelog * deps: IBC v3 alpha2 (#892) * release: v0.10.0-alpha2 (#923) * deps: IBC v3 alpha2 (#892) * Problem: newPendingTransactions filter don't return ethereum tx hash (#900) * impr: support batch eth txs (#901) * support batch eth tx Closes: 896 Allow multiple MsgEthereumTx in single tx * fix transaction receipt api * fix tx receipt api and accumulate tx gas used * fix lint * fix test * fix rpc test * cleanup * fix cumulativeGasUsed and gasUsed * fix lint * Update app/ante/eth.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update app/ante/eth.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update rpc/ethereum/backend/utils.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * pr suggestions * typo * fix lint Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * build(deps): bump follow-redirects in /tests/solidity (#909) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.4 to 1.14.7. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.4...v1.14.7) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * rpc: make trace transaction api work with batch tx (#907) * make trace transaction api work with batch tx Closes: #906 fix linter * review suggestion Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix insufficient fee error message (#911) * server: add `api.enable` flag for Cosmos SDK API server (#908) * add api.enable flag for Cosmos SDK Rest server * update changelog Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * deps: bump Cosmos SDK version to `v0.45.0` (#912) * deps: bump SDK version to v0.45.0 * changelog * deprecation fix * deprecation fix 2 * Integration tests (#913) * ci: semgrep config (#917) * ci: enable semgrep config * fix config * ignore grpc web * fix: default base fee state in genesis (#919) * fix defualt base fee state in genesis Closes: #918 Solution: - initialise the default base fee value in genesis * changelog * fix: minimal-gas-prices and baseFeePerGas conflicts (#916) * Problem: minimal-gas-prices and baseFeePerGas conflicts Closes: #915 Solution: - Don't check min-gas-price for evm tx if london hardfork and feemarket enabled. comments and cleanup changelog * fix zero fee coins Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Co-authored-by: yihuang <huang@crypto.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: crypto-facs <84574577+crypto-facs@users.noreply.github.com> * release: v0.10.0-beta1 changelog (#941) * deps: IBC v3 alpha2 (#892) * Problem: newPendingTransactions filter don't return ethereum tx hash (#900) * impr: support batch eth txs (#901) * support batch eth tx Closes: 896 Allow multiple MsgEthereumTx in single tx * fix transaction receipt api * fix tx receipt api and accumulate tx gas used * fix lint * fix test * fix rpc test * cleanup * fix cumulativeGasUsed and gasUsed * fix lint * Update app/ante/eth.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update app/ante/eth.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * Update rpc/ethereum/backend/utils.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * pr suggestions * typo * fix lint Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * build(deps): bump follow-redirects in /tests/solidity (#909) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.4 to 1.14.7. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.4...v1.14.7) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * rpc: make trace transaction api work with batch tx (#907) * make trace transaction api work with batch tx Closes: #906 fix linter * review suggestion Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix insufficient fee error message (#911) * server: add `api.enable` flag for Cosmos SDK API server (#908) * add api.enable flag for Cosmos SDK Rest server * update changelog Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * deps: bump Cosmos SDK version to `v0.45.0` (#912) * deps: bump SDK version to v0.45.0 * changelog * deprecation fix * deprecation fix 2 * Integration tests (#913) * ci: semgrep config (#917) * ci: enable semgrep config * fix config * ignore grpc web * fix: default base fee state in genesis (#919) * fix defualt base fee state in genesis Closes: #918 Solution: - initialise the default base fee value in genesis * changelog * fix: minimal-gas-prices and baseFeePerGas conflicts (#916) * Problem: minimal-gas-prices and baseFeePerGas conflicts Closes: #915 Solution: - Don't check min-gas-price for evm tx if london hardfork and feemarket enabled. comments and cleanup changelog * fix zero fee coins Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * build(deps): bump github.com/cosmos/ibc-go/v3 (#925) * build(deps): bump simple-get from 2.8.1 to 2.8.2 in /tests/solidity (#927) * build(deps): bump github.com/cosmos/cosmos-sdk from 0.45.0 to 0.45.1 (#926) Bumps [github.com/cosmos/cosmos-sdk](https://github.com/cosmos/cosmos-sdk) from 0.45.0 to 0.45.1. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/v0.45.1/CHANGELOG.md) - [Commits](https://github.com/cosmos/cosmos-sdk/compare/v0.45.0...v0.45.1) --- updated-dependencies: - dependency-name: github.com/cosmos/cosmos-sdk dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ci: separate out rpc and integration tests (#931) Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix: wrong comment in EthGasConsumeDecorator (#929) * fix newPendingTransactions subscription deadlock issue (#933) * remove unused parameters from evm spec (#934) * build(deps): bump follow-redirects in /tests/solidity (#939) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * deps: upgrade geth to v1.10.15 (#935) * upgrade geth to v1.10.15 * fix lint * fix imports * revert makefile change * update changelog * Update CHANGELOG.md Co-authored-by: Guillermo Paoletti <guillermo.paoletti@gmail.com> * update chain config * add getblockvalue for chain config fork Co-authored-by: Guillermo Paoletti <guillermo.paoletti@gmail.com> Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix: base fee check logic in state transition (#932) * fix base fee check logic in state transition - should check london hardfork first, otherwise it panic if feemarket not registered. * fix lint Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * add release v0.10.0-beta1 CHANGELOG Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Co-authored-by: yihuang <huang@crypto.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: crypto-facs <84574577+crypto-facs@users.noreply.github.com> Co-authored-by: Prajjwol Gautam <not@acyb.org> Co-authored-by: HaeSung <hea9549.github@gmail.com> Co-authored-by: Guillermo Paoletti <guillermo.paoletti@gmail.com> Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Co-authored-by: yihuang <huang@crypto.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: crypto-facs <84574577+crypto-facs@users.noreply.github.com> Co-authored-by: Prajjwol Gautam <not@acyb.org> Co-authored-by: HaeSung <hea9549.github@gmail.com> Co-authored-by: Guillermo Paoletti <guillermo.paoletti@gmail.com> * build(deps): bump github.com/gorilla/websocket from 1.4.2 to 1.5.0 (#944) Bumps [github.com/gorilla/websocket](https://github.com/gorilla/websocket) from 1.4.2 to 1.5.0. - [Release notes](https://github.com/gorilla/websocket/releases) - [Commits](https://github.com/gorilla/websocket/compare/v1.4.2...v1.5.0) --- updated-dependencies: - dependency-name: github.com/gorilla/websocket dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * deps: bump IBC v3-rc0 (#947) * deps: bump IBC v3-rc0 * rm strict * imp: redirect go-ethereum's logs to cosmos logger (#948) * redirect go-ethereum's logs to cosmos logger Closes: #862 Map go-ethereum's log levels to cosmos ones: trace -> debug debug -> debug info -> info warn -> info error -> error crit -> error * changelog * Apply suggestions from code review * Apply suggestions from code review * build(deps): bump github.com/ethereum/go-ethereum from 1.10.15 to 1.10.16 (#945) * build(deps): bump github.com/ethereum/go-ethereum Bumps [github.com/ethereum/go-ethereum](https://github.com/ethereum/go-ethereum) from 1.10.15 to 1.10.16. - [Release notes](https://github.com/ethereum/go-ethereum/releases) - [Commits](https://github.com/ethereum/go-ethereum/compare/v1.10.15...v1.10.16) --- updated-dependencies: - dependency-name: github.com/ethereum/go-ethereum dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> * add extra param to config rules * update changelog * update comments Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Freddy Caceres <freddy.caceres@crypto.com> * feemarket: change basefee to be a module param (#943) * change basefee to a module params * add changelog and fix linter * change params type of basefee and remove default base fee * restaure event * clean code * fix proto * fix protos * fix logic * update rpc tests * fix comment Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * build(deps): bump github.com/tendermint/tm-db from 0.6.4 to 0.6.7 (#949) Bumps [github.com/tendermint/tm-db](https://github.com/tendermint/tm-db) from 0.6.4 to 0.6.7. - [Release notes](https://github.com/tendermint/tm-db/releases) - [Changelog](https://github.com/tendermint/tm-db/blob/master/CHANGELOG.md) - [Commits](https://github.com/tendermint/tm-db/compare/v0.6.4...v0.6.7) --- updated-dependencies: - dependency-name: github.com/tendermint/tm-db dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * docs: add spec for feemarket module (#889) * add spec for feemarket * update spec from comments * update spec * update abstract * update with grpc query * add more content for tip section * update specs with latest behavior * cleanup unused store prefix * Update x/feemarket/spec/01_concepts.md * Apply suggestions from code review Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * rpc: add support for `eth_signedTypedData` (#953) * add signTypedData api * fix typo * fix lint issues * add crypto recovery offset * Apply suggestions from code review * add changelog Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * build(deps): bump actions/setup-node from 2.5.1 to 3 (#957) Bumps [actions/setup-node](https://github.com/actions/setup-node) from 2.5.1 to 3. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](https://github.com/actions/setup-node/compare/v2.5.1...v3) --- updated-dependencies: - dependency-name: actions/setup-node dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: websocket client duplicated messages (#955) * Problem: websocket client get duplicated messages Closes: #954 Solution: - localize the subscription management within current connection * changelog * fix linter * fix test building Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * ante: EIP712 support (#950) * code migrated * signed_data ported to avoid conficting dependency * correct payload * eip712 working with evmos.me * use geth TypedData types * fix linter * minor refactor * test first try * fix test * fix tests * enforce fee delegated eip712 * verify signature refactor * SignedTypedData api refactor * add AnteHandler test for EIP712 * remove comment * code clean up * return more detailed error messages * fix linter * remove unnecesary global vars * Update app/ante/eip712.go Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> * fix pr comments * remove hardcoded value * add more tests * add changelog * use sdk errors * add MsgDelegate test Co-authored-by: Freddy Caceres <freddy.caceres@crypto.com> Co-authored-by: Federico Kunze Küllmer <federico.kunze94@gmail.com> Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Co-authored-by: crypto-facs <84574577+crypto-facs@users.noreply.github.com> Co-authored-by: yihuang <huang@crypto.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: crypto-facs <84574577+crypto-facs@users.noreply.github.com> Co-authored-by: Prajjwol Gautam <not@acyb.org> Co-authored-by: HaeSung <hea9549.github@gmail.com> Co-authored-by: Guillermo Paoletti <guillermo.paoletti@gmail.com> Co-authored-by: Daniel Burckhardt <daniel.m.burckhardt@gmail.com> Co-authored-by: Freddy Caceres <freddy.caceres@crypto.com> Co-authored-by: Thomas Nguy <81727899+thomas-nguy@users.noreply.github.com> * add returnValue message on tracing * Update x/evm/keeper/grpc_query.go * changelog 2 Co-authored-by: Federico Kunze Küllmer <31522760+fedekunze@users.noreply.github.com> Co-authored-by: yihuang <huang@crypto.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Daniel Burckhardt <daniel.m.burckhardt@gmail.com> Co-authored-by: Prajjwol Gautam <not@acyb.org> Co-authored-by: HaeSung <hea9549.github@gmail.com> Co-authored-by: Guillermo Paoletti <guillermo.paoletti@gmail.com> Co-authored-by: Thomas Nguy <81727899+thomas-nguy@users.noreply.github.com> Co-authored-by: Federico Kunze Küllmer <federico.kunze94@gmail.com>
572 lines
16 KiB
Go
572 lines
16 KiB
Go
package keeper
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"math/big"
|
|
"time"
|
|
|
|
"github.com/ethereum/go-ethereum/eth/tracers/logger"
|
|
|
|
"github.com/ethereum/go-ethereum/eth/tracers"
|
|
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
|
"github.com/ethereum/go-ethereum/core"
|
|
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
|
"github.com/ethereum/go-ethereum/core/vm"
|
|
ethparams "github.com/ethereum/go-ethereum/params"
|
|
|
|
ethermint "github.com/tharsis/ethermint/types"
|
|
"github.com/tharsis/ethermint/x/evm/statedb"
|
|
"github.com/tharsis/ethermint/x/evm/types"
|
|
)
|
|
|
|
var _ types.QueryServer = Keeper{}
|
|
|
|
const (
|
|
defaultTraceTimeout = 5 * time.Second
|
|
)
|
|
|
|
// Account implements the Query/Account gRPC method
|
|
func (k Keeper) Account(c context.Context, req *types.QueryAccountRequest) (*types.QueryAccountResponse, error) {
|
|
if req == nil {
|
|
return nil, status.Error(codes.InvalidArgument, "empty request")
|
|
}
|
|
|
|
if err := ethermint.ValidateAddress(req.Address); err != nil {
|
|
return nil, status.Error(
|
|
codes.InvalidArgument, err.Error(),
|
|
)
|
|
}
|
|
|
|
addr := common.HexToAddress(req.Address)
|
|
|
|
ctx := sdk.UnwrapSDKContext(c)
|
|
acct := k.GetAccountOrEmpty(ctx, addr)
|
|
|
|
return &types.QueryAccountResponse{
|
|
Balance: acct.Balance.String(),
|
|
CodeHash: common.BytesToHash(acct.CodeHash).Hex(),
|
|
Nonce: acct.Nonce,
|
|
}, nil
|
|
}
|
|
|
|
func (k Keeper) CosmosAccount(c context.Context, req *types.QueryCosmosAccountRequest) (*types.QueryCosmosAccountResponse, error) {
|
|
if req == nil {
|
|
return nil, status.Error(codes.InvalidArgument, "empty request")
|
|
}
|
|
|
|
if err := ethermint.ValidateAddress(req.Address); err != nil {
|
|
return nil, status.Error(
|
|
codes.InvalidArgument, err.Error(),
|
|
)
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(c)
|
|
|
|
ethAddr := common.HexToAddress(req.Address)
|
|
cosmosAddr := sdk.AccAddress(ethAddr.Bytes())
|
|
|
|
account := k.accountKeeper.GetAccount(ctx, cosmosAddr)
|
|
res := types.QueryCosmosAccountResponse{
|
|
CosmosAddress: cosmosAddr.String(),
|
|
}
|
|
|
|
if account != nil {
|
|
res.Sequence = account.GetSequence()
|
|
res.AccountNumber = account.GetAccountNumber()
|
|
}
|
|
|
|
return &res, nil
|
|
}
|
|
|
|
func (k Keeper) ValidatorAccount(c context.Context, req *types.QueryValidatorAccountRequest) (*types.QueryValidatorAccountResponse, error) {
|
|
if req == nil {
|
|
return nil, status.Error(codes.InvalidArgument, "empty request")
|
|
}
|
|
|
|
consAddr, err := sdk.ConsAddressFromBech32(req.ConsAddress)
|
|
if err != nil {
|
|
return nil, status.Error(
|
|
codes.InvalidArgument, err.Error(),
|
|
)
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(c)
|
|
|
|
validator, found := k.stakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
|
|
if !found {
|
|
return nil, nil
|
|
}
|
|
|
|
accAddr := sdk.AccAddress(validator.GetOperator())
|
|
|
|
res := types.QueryValidatorAccountResponse{
|
|
AccountAddress: accAddr.String(),
|
|
}
|
|
|
|
account := k.accountKeeper.GetAccount(ctx, accAddr)
|
|
if account != nil {
|
|
res.Sequence = account.GetSequence()
|
|
res.AccountNumber = account.GetAccountNumber()
|
|
}
|
|
|
|
return &res, nil
|
|
}
|
|
|
|
// Balance implements the Query/Balance gRPC method
|
|
func (k Keeper) Balance(c context.Context, req *types.QueryBalanceRequest) (*types.QueryBalanceResponse, error) {
|
|
if req == nil {
|
|
return nil, status.Error(codes.InvalidArgument, "empty request")
|
|
}
|
|
|
|
if err := ethermint.ValidateAddress(req.Address); err != nil {
|
|
return nil, status.Error(
|
|
codes.InvalidArgument,
|
|
types.ErrZeroAddress.Error(),
|
|
)
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(c)
|
|
|
|
balanceInt := k.GetBalance(ctx, common.HexToAddress(req.Address))
|
|
|
|
return &types.QueryBalanceResponse{
|
|
Balance: balanceInt.String(),
|
|
}, nil
|
|
}
|
|
|
|
// Storage implements the Query/Storage gRPC method
|
|
func (k Keeper) Storage(c context.Context, req *types.QueryStorageRequest) (*types.QueryStorageResponse, error) {
|
|
if req == nil {
|
|
return nil, status.Error(codes.InvalidArgument, "empty request")
|
|
}
|
|
|
|
if err := ethermint.ValidateAddress(req.Address); err != nil {
|
|
return nil, status.Error(
|
|
codes.InvalidArgument,
|
|
types.ErrZeroAddress.Error(),
|
|
)
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(c)
|
|
|
|
address := common.HexToAddress(req.Address)
|
|
key := common.HexToHash(req.Key)
|
|
|
|
state := k.GetState(ctx, address, key)
|
|
stateHex := state.Hex()
|
|
|
|
return &types.QueryStorageResponse{
|
|
Value: stateHex,
|
|
}, nil
|
|
}
|
|
|
|
// Code implements the Query/Code gRPC method
|
|
func (k Keeper) Code(c context.Context, req *types.QueryCodeRequest) (*types.QueryCodeResponse, error) {
|
|
if req == nil {
|
|
return nil, status.Error(codes.InvalidArgument, "empty request")
|
|
}
|
|
|
|
if err := ethermint.ValidateAddress(req.Address); err != nil {
|
|
return nil, status.Error(
|
|
codes.InvalidArgument,
|
|
types.ErrZeroAddress.Error(),
|
|
)
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(c)
|
|
|
|
address := common.HexToAddress(req.Address)
|
|
acct := k.GetAccountWithoutBalance(ctx, address)
|
|
|
|
var code []byte
|
|
if acct != nil && acct.IsContract() {
|
|
code = k.GetCode(ctx, common.BytesToHash(acct.CodeHash))
|
|
}
|
|
|
|
return &types.QueryCodeResponse{
|
|
Code: code,
|
|
}, nil
|
|
}
|
|
|
|
// Params implements the Query/Params gRPC method
|
|
func (k Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) {
|
|
ctx := sdk.UnwrapSDKContext(c)
|
|
params := k.GetParams(ctx)
|
|
|
|
return &types.QueryParamsResponse{
|
|
Params: params,
|
|
}, nil
|
|
}
|
|
|
|
// EthCall implements eth_call rpc api.
|
|
func (k Keeper) EthCall(c context.Context, req *types.EthCallRequest) (*types.MsgEthereumTxResponse, error) {
|
|
if req == nil {
|
|
return nil, status.Error(codes.InvalidArgument, "empty request")
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(c)
|
|
|
|
var args types.TransactionArgs
|
|
err := json.Unmarshal(req.Args, &args)
|
|
if err != nil {
|
|
return nil, status.Error(codes.InvalidArgument, err.Error())
|
|
}
|
|
|
|
cfg, err := k.EVMConfig(ctx)
|
|
if err != nil {
|
|
return nil, status.Error(codes.Internal, err.Error())
|
|
}
|
|
|
|
// ApplyMessageWithConfig expect correct nonce set in msg
|
|
nonce := k.GetNonce(ctx, args.GetFrom())
|
|
args.Nonce = (*hexutil.Uint64)(&nonce)
|
|
|
|
msg, err := args.ToMessage(req.GasCap, cfg.BaseFee)
|
|
if err != nil {
|
|
return nil, status.Error(codes.InvalidArgument, err.Error())
|
|
}
|
|
|
|
txConfig := statedb.NewEmptyTxConfig(common.BytesToHash(ctx.HeaderHash()))
|
|
|
|
// pass false to not commit StateDB
|
|
res, err := k.ApplyMessageWithConfig(ctx, msg, nil, false, cfg, txConfig)
|
|
if err != nil {
|
|
return nil, status.Error(codes.Internal, err.Error())
|
|
}
|
|
|
|
return res, nil
|
|
}
|
|
|
|
// EstimateGas implements eth_estimateGas rpc api.
|
|
func (k Keeper) EstimateGas(c context.Context, req *types.EthCallRequest) (*types.EstimateGasResponse, error) {
|
|
if req == nil {
|
|
return nil, status.Error(codes.InvalidArgument, "empty request")
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(c)
|
|
|
|
if req.GasCap < ethparams.TxGas {
|
|
return nil, status.Error(codes.InvalidArgument, "gas cap cannot be lower than 21,000")
|
|
}
|
|
|
|
var args types.TransactionArgs
|
|
err := json.Unmarshal(req.Args, &args)
|
|
if err != nil {
|
|
return nil, status.Error(codes.InvalidArgument, err.Error())
|
|
}
|
|
|
|
// Binary search the gas requirement, as it may be higher than the amount used
|
|
var (
|
|
lo = ethparams.TxGas - 1
|
|
hi uint64
|
|
cap uint64
|
|
)
|
|
|
|
// Determine the highest gas limit can be used during the estimation.
|
|
if args.Gas != nil && uint64(*args.Gas) >= ethparams.TxGas {
|
|
hi = uint64(*args.Gas)
|
|
} else {
|
|
// Query block gas limit
|
|
params := ctx.ConsensusParams()
|
|
if params != nil && params.Block != nil && params.Block.MaxGas > 0 {
|
|
hi = uint64(params.Block.MaxGas)
|
|
} else {
|
|
hi = req.GasCap
|
|
}
|
|
}
|
|
|
|
// TODO: Recap the highest gas limit with account's available balance.
|
|
|
|
// Recap the highest gas allowance with specified gascap.
|
|
if req.GasCap != 0 && hi > req.GasCap {
|
|
hi = req.GasCap
|
|
}
|
|
cap = hi
|
|
|
|
cfg, err := k.EVMConfig(ctx)
|
|
if err != nil {
|
|
return nil, status.Error(codes.Internal, "failed to load evm config")
|
|
}
|
|
|
|
// ApplyMessageWithConfig expect correct nonce set in msg
|
|
nonce := k.GetNonce(ctx, args.GetFrom())
|
|
args.Nonce = (*hexutil.Uint64)(&nonce)
|
|
|
|
txConfig := statedb.NewEmptyTxConfig(common.BytesToHash(ctx.HeaderHash().Bytes()))
|
|
|
|
// Create a helper to check if a gas allowance results in an executable transaction
|
|
executable := func(gas uint64) (vmerror bool, rsp *types.MsgEthereumTxResponse, err error) {
|
|
args.Gas = (*hexutil.Uint64)(&gas)
|
|
|
|
msg, err := args.ToMessage(req.GasCap, cfg.BaseFee)
|
|
if err != nil {
|
|
return false, nil, err
|
|
}
|
|
|
|
// pass false to not commit StateDB
|
|
rsp, err = k.ApplyMessageWithConfig(ctx, msg, nil, false, cfg, txConfig)
|
|
if err != nil {
|
|
if errors.Is(err, core.ErrIntrinsicGas) {
|
|
return true, nil, nil // Special case, raise gas limit
|
|
}
|
|
return true, nil, err // Bail out
|
|
}
|
|
return len(rsp.VmError) > 0, rsp, nil
|
|
}
|
|
|
|
// Execute the binary search and hone in on an executable gas limit
|
|
hi, err = types.BinSearch(lo, hi, executable)
|
|
if err != nil {
|
|
return nil, status.Error(codes.Internal, err.Error())
|
|
}
|
|
|
|
// Reject the transaction as invalid if it still fails at the highest allowance
|
|
if hi == cap {
|
|
failed, result, err := executable(hi)
|
|
if err != nil {
|
|
return nil, status.Error(codes.Internal, err.Error())
|
|
}
|
|
if failed {
|
|
if result != nil && result.VmError != vm.ErrOutOfGas.Error() {
|
|
if result.VmError == vm.ErrExecutionReverted.Error() {
|
|
return nil, types.NewExecErrorWithReason(result.Ret)
|
|
}
|
|
return nil, status.Error(codes.Internal, result.VmError)
|
|
}
|
|
// Otherwise, the specified gas cap is too low
|
|
return nil, status.Error(codes.Internal, fmt.Sprintf("gas required exceeds allowance (%d)", cap))
|
|
}
|
|
}
|
|
return &types.EstimateGasResponse{Gas: hi}, nil
|
|
}
|
|
|
|
// TraceTx configures a new tracer according to the provided configuration, and
|
|
// executes the given message in the provided environment. The return value will
|
|
// be tracer dependent.
|
|
func (k Keeper) TraceTx(c context.Context, req *types.QueryTraceTxRequest) (*types.QueryTraceTxResponse, error) {
|
|
if req == nil {
|
|
return nil, status.Error(codes.InvalidArgument, "empty request")
|
|
}
|
|
|
|
if req.TraceConfig != nil && req.TraceConfig.Limit < 0 {
|
|
return nil, status.Errorf(codes.InvalidArgument, "output limit cannot be negative, got %d", req.TraceConfig.Limit)
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(c)
|
|
ctx = ctx.WithBlockHeight(req.BlockNumber)
|
|
ctx = ctx.WithBlockTime(req.BlockTime)
|
|
ctx = ctx.WithHeaderHash(common.Hex2Bytes(req.BlockHash))
|
|
|
|
cfg, err := k.EVMConfig(ctx)
|
|
if err != nil {
|
|
return nil, status.Errorf(codes.Internal, "failed to load evm config: %s", err.Error())
|
|
}
|
|
signer := ethtypes.MakeSigner(cfg.ChainConfig, big.NewInt(ctx.BlockHeight()))
|
|
|
|
txConfig := statedb.NewEmptyTxConfig(common.BytesToHash(ctx.HeaderHash().Bytes()))
|
|
for i, tx := range req.Predecessors {
|
|
ethTx := tx.AsTransaction()
|
|
msg, err := ethTx.AsMessage(signer, cfg.BaseFee)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
txConfig.TxHash = ethTx.Hash()
|
|
txConfig.TxIndex = uint(i)
|
|
rsp, err := k.ApplyMessageWithConfig(ctx, msg, types.NewNoOpTracer(), true, cfg, txConfig)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
txConfig.LogIndex += uint(len(rsp.Logs))
|
|
}
|
|
|
|
tx := req.Msg.AsTransaction()
|
|
txConfig.TxHash = tx.Hash()
|
|
txConfig.TxIndex++
|
|
result, _, err := k.traceTx(ctx, cfg, txConfig, signer, tx, req.TraceConfig, false)
|
|
if err != nil {
|
|
// error will be returned with detail status from traceTx
|
|
return nil, err
|
|
}
|
|
|
|
resultData, err := json.Marshal(result)
|
|
if err != nil {
|
|
return nil, status.Error(codes.Internal, err.Error())
|
|
}
|
|
|
|
return &types.QueryTraceTxResponse{
|
|
Data: resultData,
|
|
}, nil
|
|
}
|
|
|
|
// TraceBlock configures a new tracer according to the provided configuration, and
|
|
// executes the given message in the provided environment for all the transactions in the queried block.
|
|
// The return value will be tracer dependent.
|
|
func (k Keeper) TraceBlock(c context.Context, req *types.QueryTraceBlockRequest) (*types.QueryTraceBlockResponse, error) {
|
|
if req == nil {
|
|
return nil, status.Error(codes.InvalidArgument, "empty request")
|
|
}
|
|
|
|
if req.TraceConfig != nil && req.TraceConfig.Limit < 0 {
|
|
return nil, status.Errorf(codes.InvalidArgument, "output limit cannot be negative, got %d", req.TraceConfig.Limit)
|
|
}
|
|
|
|
ctx := sdk.UnwrapSDKContext(c)
|
|
ctx = ctx.WithBlockHeight(req.BlockNumber)
|
|
ctx = ctx.WithBlockTime(req.BlockTime)
|
|
ctx = ctx.WithHeaderHash(common.Hex2Bytes(req.BlockHash))
|
|
|
|
cfg, err := k.EVMConfig(ctx)
|
|
if err != nil {
|
|
return nil, status.Error(codes.Internal, "failed to load evm config")
|
|
}
|
|
signer := ethtypes.MakeSigner(cfg.ChainConfig, big.NewInt(ctx.BlockHeight()))
|
|
txsLength := len(req.Txs)
|
|
results := make([]*types.TxTraceResult, 0, txsLength)
|
|
|
|
txConfig := statedb.NewEmptyTxConfig(common.BytesToHash(ctx.HeaderHash().Bytes()))
|
|
for i, tx := range req.Txs {
|
|
result := types.TxTraceResult{}
|
|
ethTx := tx.AsTransaction()
|
|
txConfig.TxHash = ethTx.Hash()
|
|
txConfig.TxIndex = uint(i)
|
|
traceResult, logIndex, err := k.traceTx(ctx, cfg, txConfig, signer, ethTx, req.TraceConfig, true)
|
|
if err != nil {
|
|
result.Error = err.Error()
|
|
continue
|
|
}
|
|
txConfig.LogIndex = logIndex
|
|
result.Result = traceResult
|
|
results = append(results, &result)
|
|
}
|
|
|
|
resultData, err := json.Marshal(results)
|
|
if err != nil {
|
|
return nil, status.Error(codes.Internal, err.Error())
|
|
}
|
|
|
|
return &types.QueryTraceBlockResponse{
|
|
Data: resultData,
|
|
}, nil
|
|
}
|
|
|
|
// traceTx do trace on one transaction, it returns a tuple: (traceResult, nextLogIndex, error).
|
|
func (k *Keeper) traceTx(
|
|
ctx sdk.Context,
|
|
cfg *types.EVMConfig,
|
|
txConfig statedb.TxConfig,
|
|
signer ethtypes.Signer,
|
|
tx *ethtypes.Transaction,
|
|
traceConfig *types.TraceConfig,
|
|
commitMessage bool,
|
|
) (*interface{}, uint, error) {
|
|
// Assemble the structured logger or the JavaScript tracer
|
|
var (
|
|
tracer vm.EVMLogger
|
|
overrides *ethparams.ChainConfig
|
|
err error
|
|
)
|
|
|
|
msg, err := tx.AsMessage(signer, cfg.BaseFee)
|
|
if err != nil {
|
|
return nil, 0, status.Error(codes.Internal, err.Error())
|
|
}
|
|
|
|
if traceConfig != nil && traceConfig.Overrides != nil {
|
|
overrides = traceConfig.Overrides.EthereumConfig(cfg.ChainConfig.ChainID)
|
|
}
|
|
|
|
switch {
|
|
case traceConfig != nil && traceConfig.Tracer != "":
|
|
timeout := defaultTraceTimeout
|
|
// TODO: change timeout to time.duration
|
|
// Used string to comply with go ethereum
|
|
if traceConfig.Timeout != "" {
|
|
timeout, err = time.ParseDuration(traceConfig.Timeout)
|
|
if err != nil {
|
|
return nil, 0, status.Errorf(codes.InvalidArgument, "timeout value: %s", err.Error())
|
|
}
|
|
}
|
|
|
|
tCtx := &tracers.Context{
|
|
BlockHash: txConfig.BlockHash,
|
|
TxIndex: int(txConfig.TxIndex),
|
|
TxHash: txConfig.TxHash,
|
|
}
|
|
|
|
// Construct the JavaScript tracer to execute with
|
|
if tracer, err = tracers.New(traceConfig.Tracer, tCtx); err != nil {
|
|
return nil, 0, status.Error(codes.Internal, err.Error())
|
|
}
|
|
|
|
// Handle timeouts and RPC cancellations
|
|
deadlineCtx, cancel := context.WithTimeout(ctx.Context(), timeout)
|
|
defer cancel()
|
|
|
|
go func() {
|
|
<-deadlineCtx.Done()
|
|
if errors.Is(deadlineCtx.Err(), context.DeadlineExceeded) {
|
|
tracer.(tracers.Tracer).Stop(errors.New("execution timeout"))
|
|
}
|
|
}()
|
|
|
|
case traceConfig != nil:
|
|
logConfig := logger.Config{
|
|
EnableMemory: traceConfig.EnableMemory,
|
|
DisableStorage: traceConfig.DisableStorage,
|
|
DisableStack: traceConfig.DisableStack,
|
|
EnableReturnData: traceConfig.EnableReturnData,
|
|
Debug: traceConfig.Debug,
|
|
Limit: int(traceConfig.Limit),
|
|
Overrides: overrides,
|
|
}
|
|
tracer = logger.NewStructLogger(&logConfig)
|
|
default:
|
|
tracer = types.NewTracer(types.TracerStruct, msg, cfg.ChainConfig, ctx.BlockHeight())
|
|
}
|
|
|
|
res, err := k.ApplyMessageWithConfig(ctx, msg, tracer, commitMessage, cfg, txConfig)
|
|
if err != nil {
|
|
return nil, 0, status.Error(codes.Internal, err.Error())
|
|
}
|
|
|
|
var result interface{}
|
|
|
|
// Depending on the tracer type, format and return the trace result data.
|
|
switch tracer := tracer.(type) {
|
|
case *logger.StructLogger:
|
|
returnVal := ""
|
|
revert := res.Revert()
|
|
if len(revert) > 0 {
|
|
returnVal = fmt.Sprintf("%x", revert)
|
|
} else {
|
|
returnVal = fmt.Sprintf("%x", res.Return())
|
|
}
|
|
result = types.ExecutionResult{
|
|
Gas: res.GasUsed,
|
|
Failed: res.Failed(),
|
|
ReturnValue: returnVal,
|
|
StructLogs: types.FormatLogs(tracer.StructLogs()),
|
|
}
|
|
case tracers.Tracer:
|
|
result, err = tracer.GetResult()
|
|
if err != nil {
|
|
return nil, 0, status.Error(codes.Internal, err.Error())
|
|
}
|
|
|
|
default:
|
|
return nil, 0, status.Errorf(codes.InvalidArgument, "invalid tracer type %T", tracer)
|
|
}
|
|
|
|
return &result, txConfig.LogIndex + uint(len(res.Logs)), nil
|
|
}
|