M20

CertiKFiles named in the report

CertiK reviewed M20 on 17 Oct 2023: 19 findings, 0 critical; 12 marked fixed, 7 open.

No open critical findings
Open the reportOpen M20’s security record

Report hosted on skynet.certik.com.

Trustblock does not review code.

Findings19

Statuses are the security firm’s own, from its report.

SeverityOpenAcknowledgedFixed
Critical000
High005
Medium002
Low705
LowMap Iteration Be A Possible Source Of Non-determiOpen

Repository: - mcoin-evm Commit hash: - [`557f8d07f7b84fb77002e4d39e7c701ebc1f9416`](https://github.com/metherdev/mcoin-evm/tree/557f8d07f7b84fb77002e4d39e7c701ebc1f9416) Files: - app/app.go - tests/e2e/upgrade/manager.go When iterating over a map, the order in which the elements are returned may not be deterministic. It means that it could not rely on the value returned which could introduce non-determinism which is a very critical issue if it is involved in the consensus process, resulting in consensus breaking. The codebase has been examined, and it appears that the files mentioned above utilize map iteration in a correct manner. However, it has been observed that the underlying function calls or methods do not directly affect the key process. As a result, the severity of any potential issues is considered informational, serving as a warning for awareness. Although the severity is low, it is still advisable to make some adjustments to these code sections if possible. This can help ensure code clarity, maintainability, and to avoid potential issues that may arise in the future.

LowMissing Balance Check Of The Vesting Account WhenOpen

Repository: - mcoin-evm Commit hash: - [`557f8d07f7b84fb77002e4d39e7c701ebc1f9416`](https://github.com/metherdev/mcoin-evm/tree/557f8d07f7b84fb77002e4d39e7c701ebc1f9416) Files: - app/ante/vesting.go The `VestingDelegationDecorator` is used to check the vested coins being delegated especially for the vesting account. However, lack the check of the account balance towards the unvested coins during period scan could lead to some outcome unexpectedly. Only the coins in the account balance could be taken as spendable rather than the amount vested already. In the commit, some references has been removed, and the code volatile currently, recommend to refactor this code at first before further actions.

LowNot Check if `DeveloperShares` is zeroOpen

Repository: - mcoin-evm Commit hash: - [`557f8d07f7b84fb77002e4d39e7c701ebc1f9416`](https://github.com/metherdev/mcoin-evm/tree/557f8d07f7b84fb77002e4d39e7c701ebc1f9416) Files: - x/revenue/keeper/evm_hooks.go The function `PostTxProcessing()` does not check if `params.DeveloperShares` is zero, if `params.DeveloperShares` is zero `PostTxProcessing()` can return directly without calculating the developer fee.

LowRedundant Statements In Claims GenesisOpen

Repository: - mcoin-evm Commit hash: - [`557f8d07f7b84fb77002e4d39e7c701ebc1f9416`](https://github.com/metherdev/mcoin-evm/tree/557f8d07f7b84fb77002e4d39e7c701ebc1f9416) Files: - x/claims/genesis.go `totalEscrowed` will be assigned 10000 at L35 directly, so the linked statements do not affect the functionality of the codebase and appear to be either remnants of test code or older functionality. ```go=15 func InitGenesis(ctx sdk.Context, k keeper.Keeper, data types.GenesisState) { totalEscrowed := sdk.ZeroInt() sumUnclaimed := sdk.ZeroInt() numActions := sdk.NewInt(4) // ensure claim module account is set on genesis if acc := k.GetModuleAccount(ctx); acc == nil { panic("the claim module account has not been set") } // set the start time to the current block time by default if data.Params.AirdropStartTime.IsZero() { data.Params.AirdropStartTime = ctx.BlockTime() } k.SetParams(ctx, data.Params) escrowedCoins := k.GetModuleAccountBalances(ctx) if escrowedCoins != nil { totalEscrowed = escrowedCoins.AmountOfNoDenomValidation(data.Params.ClaimsDenom) } totalEscrowed = sdk.NewInt(10000) //... }

LowTesting FailureOpen

Repository: - mcoin-evm Commit hash: - [`557f8d07f7b84fb77002e4d39e7c701ebc1f9416`](https://github.com/metherdev/mcoin-evm/tree/557f8d07f7b84fb77002e4d39e7c701ebc1f9416) Files: - ./.../*test.go The test coverage for this project is relatively low and a large number of test cases run failed, which may bring unexpected errors in mainnet network.

LowTypedEvents Not Safe Due To An Unforeseen Bug InOpen

Repository: - mcoin-evm Commit hash: - [`557f8d07f7b84fb77002e4d39e7c701ebc1f9416`](https://github.com/metherdev/mcoin-evm/tree/557f8d07f7b84fb77002e4d39e7c701ebc1f9416) Files: - x/erc20/keeper/msg_server.go - x/erc20/proposal_handler.go - x/revenue/keeper/evm_hooks.go - x/revenue/keeper/msg_server.go - x/vesting/keeper/msg_server.go The `TypedEvents` implementation for event emitting is not so safe due to the bug in Ethermint RPCs, it is recommended to use the `EmitEvents` before further investigation.

LowUpdate Ledger Supported Algorithms to Consist ofOpen

Repository: - mcoin-evm Commit hash: - [`557f8d07f7b84fb77002e4d39e7c701ebc1f9416`](https://github.com/metherdev/mcoin-evm/tree/557f8d07f7b84fb77002e4d39e7c701ebc1f9416) Files: - crypto/keyring/options.go The `sdkhd.Secp256k1` is a built-in algorithm from Cosmos SDK. Since Ethermint's client module is used, Update SupportedAlgosLedger values to `hd.EthSecp256k1` can be more friendly and portable to Ethereum. References: - https://github.com/evmos/evmos/pull/1165/files

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Repository and files the report names (207)

  • x/claims/genesis.go
  • app/upgrades/v9/accounts.go
  • x/inflation/client/cli/query.go
  • app/sigverify.go
  • cmd/mcoind/root.go
  • x/incentives/keeper/evm_hooks.go
  • x/vesting/keeper/msg_server.go
  • client/docs/statik/init.go
  • x/incentives/types/proposal.go
  • x/incentives/keeper/distribution.go
  • x/inflation/keeper/periods.go
  • x/incentives/keeper/proposals.go
  • x/erc20/keeper/params.go
  • x/incentives/module.go
  • x/vesting/client/cli/query.go
  • app/upgrades/v10/constants.go
  • x/claims/keeper/claims_records.go
  • x/claims/keeper/grpc_query.go
  • x/epochs/client/cli/query.go
  • x/vesting/types/keys.go
  • x/claims/types/params.go
  • x/vesting/client/cli/utils.go
  • x/incentives/proposal_handler.go
  • cmd/mcoind/init.go
  • cmd/mcoind/main.go
  • app/upgrades/v8_1/upgrades.go
  • x/vesting/client/cli/tx.go
  • x/vesting/module.go
  • x/revenue/types/msg.go
  • app/upgrades/v8_1/constants.go
  • x/erc20/types/events.go
  • app/ante/doc.go
  • x/vesting/handler.go
  • x/inflation/types/params.go
  • x/inflation/keeper/params.go
  • x/erc20/client/cli/tx.go
  • x/erc20/keeper/evm.go
  • app/upgrades/v8/constants.go
  • x/incentives/keeper/params.go
  • contracts/ERC20Burnable.sol
  • x/revenue/keeper/msg_server.go
  • x/erc20/keeper/grpc_query.go
  • x/recovery/types/genesis.go
  • x/revenue/keeper/revenues.go
  • x/revenue/genesis.go
  • app/ante/interfaces.go
  • x/ibc/transfer/types/interfaces.go
  • app/upgrades/v8_2/upgrades.go
  • x/epochs/keeper/keeper.go
  • x/incentives/types/events.go
  • x/vesting/types/errors.go
  • x/incentives/client/proposal_handler.go
  • x/vesting/types/interfaces.go
  • x/recovery/keeper/grpc_query.go
  • x/erc20/keeper/token_pairs.go
  • x/incentives/keeper/incentives.go
  • x/claims/handler.go
  • x/erc20/types/params.go
  • app/upgrades/v9/upgrades.go
  • app/ante/vesting.go
  • x/claims/keeper/hooks.go
  • x/recovery/genesis.go
  • app/ante/ante.go
  • x/recovery/ibc_middleware.go
  • x/claims/types/events.go
  • x/erc20/types/proposal.go
  • x/erc20/handler.go
  • x/revenue/types/events.go
  • app/app.go
  • x/erc20/ibc_middleware.go
  • x/claims/keeper/migrations.go
  • app/upgrades/v10/upgrades.go
  • x/recovery/keeper/ibc_callbacks.go
  • x/claims/types/errors.go
  • x/erc20/client/cli/utils.go
  • app/upgrades/v8/upgrades.go
  • x/incentives/types/interfaces.go
  • x/epochs/types/interfaces.go
  • x/revenue/keeper/grpc_query.go
  • x/recovery/keeper/params.go
  • x/claims/keeper/keeper.go
  • x/revenue/handler.go
  • app/forks.go
  • app/upgrades/v9/constants.go
  • app/export.go
  • x/epochs/types/genesis.go
  • x/recovery/types/events.go
  • x/inflation/module.go
  • x/vesting/types/utils.go
  • x/vesting/keeper/keeper.go
  • x/incentives/genesis.go
  • x/recovery/client/cli/query.go
  • x/erc20/keeper/migrations.go
  • x/revenue/types/interfaces.go
  • x/inflation/keeper/keeper.go
  • cmd/config/config.go
  • x/inflation/types/interfaces.go
  • x/inflation/keeper/epoch_info.go
  • x/claims/keeper/invariants.go
  • x/incentives/types/keys.go
  • x/ibc/transfer/ibc_module.go
  • x/revenue/types/keys.go
  • app/upgrades/v8_2/constants.go
  • x/revenue/client/cli/tx.go
  • x/revenue/keeper/params.go
  • x/claims/keeper/claim.go
  • x/incentives/keeper/allocation_meters.go
  • x/inflation/keeper/epoch_mint_provisions.go
  • app/upgrades/v9_1/upgrades.go
  • contracts/erc20DirectBalanceManipulation.go
  • app/ante/handler_options.go
  • x/incentives/types/genesis.go
  • x/epochs/keeper/abci.go
  • contracts/ERC20MinterBurnerDecimals.sol
  • x/inflation/keeper/hooks.go
  • x/erc20/proposal_handler.go
  • x/inflation/keeper/inflation.go
  • x/epochs/keeper/epoch_infos.go
  • x/erc20/types/keys.go
  • x/claims/client/cli/query.go
  • x/vesting/keeper/grpc_query.go
  • x/revenue/client/cli/query.go
  • x/claims/keeper/abci.go
  • x/incentives/keeper/migrations.go
  • x/recovery/keeper/keeper.go
  • x/epochs/keeper/hooks.go
  • x/ibc/transfer/module.go
  • x/epochs/keeper/grpc_query.go
  • contracts/ERC20DirectBalanceManipulation.sol
  • x/recovery/types/params.go
  • x/epochs/genesis.go
  • x/revenue/types/revenue.go
  • x/erc20/keeper/keeper.go
  • x/erc20/types/msg.go
  • x/inflation/keeper/migrations.go
  • x/vesting/types/clawback_vesting_account.go
  • x/erc20/keeper/evm_hooks.go
  • x/erc20/client/cli/query.go
  • x/epochs/types/events.go
  • crypto/keyring/options.go
  • types/errors.go
  • x/erc20/keeper/mint.go
  • x/revenue/module.go
  • x/erc20/genesis.go
  • contracts/ERC20MaliciousDelayed.sol
  • x/inflation/types/keys.go
  • x/revenue/types/genesis.go
  • client/docs/statik/statik.go
  • x/vesting/types/msg.go
  • x/ibc/transfer/keeper/keeper.go
  • cmd/config/observability.go
  • x/erc20/types/evm.go
  • x/erc20/migrations/v2/migration.go
  • x/erc20/client/proposal_handler.go
  • x/incentives/types/gas_meter.go
  • x/recovery/types/interfaces.go
  • x/revenue/keeper/keeper.go
  • x/erc20/types/token_pair.go
  • contracts/erc20.go
  • types/utils.go
  • x/revenue/types/params.go
  • x/incentives/keeper/keeper.go
  • x/erc20/keeper/msg_server.go
  • x/vesting/types/schedule.go
  • contracts/erc20burnable.go
  • x/erc20/keeper/proposals.go
  • x/claims/types/genesis.go
  • x/inflation/types/inflation.pb.go
  • x/incentives/types/params.go
  • x/inflation/types/genesis.go
  • x/incentives/client/cli/tx.go
  • x/recovery/types/keys.go
  • x/inflation/genesis.go
  • x/epochs/types/identifier.go
  • cmd/mcoind/genaccounts.go
  • x/incentives/types/incentive.go
  • ibc/utils.go
  • contracts/erc20maliciousdelayed.go
  • x/claims/ibc_middleware.go
  • x/incentives/keeper/epoch_hooks.go
  • x/incentives/keeper/gas_meters.go
  • app/upgrades/v9_1/constants.go
  • x/inflation/types/inflation_calculation.go
  • x/claims/keeper/params.go
  • x/incentives/keeper/grpc_query.go
  • x/claims/keeper/ibc_callbacks.go
  • x/erc20/types/utils.go
  • x/epochs/types/epoch_info.go
  • x/claims/types/interfaces.go
  • x/erc20/types/genesis.go
  • x/claims/types/keys.go
  • x/epochs/types/keys.go
  • version/version.go
  • x/erc20/keeper/ibc_callbacks.go
  • x/inflation/types/events.go
  • x/revenue/keeper/evm_hooks.go
  • app/gas.go
  • app/tps_counter.go
  • cmd/mcoind/migrate.go
  • x/ibc/transfer/keeper/msg_server.go

Part of M20’s security record

M20
Audits1 audit by 1 firmLast audit Oct 2023, by CertiK.
Critical findingsNo open critical findingsIn 1 report.
Open M20’s security record

Security firm

CertiK

1,044 projects reviewed · 1,375 reports · latest May 2025

See CertiK’s audits

Something wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.

Tell us