Skip to content
Snippets Groups Projects
  1. Feb 07, 2025
  2. Feb 06, 2025
    • PG Herveou's avatar
      [pallet-revive] tx fee fixes (#7463) · 917052e5
      PG Herveou authored
      
      Apply some fixes to properly estimate ethereum tx fees:
      
      - Set the `extension_weight` on the dispatch_info to properly calculate
      the fee with pallet_transaction_payment
      - Expose the gas_price through Runtime API, just in case we decide to
      tweak the value in future updates, it should be read from the chain
      rather than be a shared constant exposed by the crate
      - add a `evm_gas_to_fee` utility function to properly convert gas to
      substrate fee
      - Fix some minor gas encoding for edge cases
      
      ---------
      
      Co-authored-by: default avatarcmd[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  3. Jan 28, 2025
  4. Jan 24, 2025
  5. Jan 23, 2025
    • PG Herveou's avatar
      [pallet-revive] fee estimation fixes (#7281) · 5772b9db
      PG Herveou authored
      - Fix the EVM fee cost estimation.
      The estimation shown in EVM wallet was using Native instead of EVM
      decimals
      - Remove the precise code length estimation in dry run call.
      Over-estimating is fine, since extra gas is refunded anyway.
      - Ensure that the estimated fee calculated from gas_price x gas use the
      encoded weight & deposit limit instead of the exact one calculated by
      the dry-run. Else we can end up with a fee that is lower than the actual
      fee paid by the user
      
      ---------
      
      Co-authored-by: command-bot <>
  6. Jan 20, 2025
  7. Jan 17, 2025
  8. Jan 15, 2025
  9. Jan 14, 2025
    • PG Herveou's avatar
      [pallet-revive-eth-rpc] persist eth transaction hash (#6836) · 023763da
      PG Herveou authored
      Add an option to persist EVM transaction hash to a SQL db.
      This should make it possible to run a full archive ETH RPC node
      (assuming the substrate node is also a full archive node)
      
      Some queries such as eth_getTransactionByHash,
      eth_getBlockTransactionCountByHash, and other need to work with a
      transaction hash indexes, which are not stored in Substrate and need to
      be stored by the eth-rpc proxy.
      
      The refactoring break down the Client into a `BlockInfoProvider` and
      `ReceiptProvider`
      - BlockInfoProvider does not need any persistence data, as we can fetch
      all block info from the source substrate chain
      - ReceiptProvider comes in two flavor, 
        - An in memory cache implementation - This is the one we had so far.
      - A DB implementation - This one persist rows with the block_hash, the
      transaction_index and the transaction_hash, so that we can later fetch
      the block and extrinsic for that receipt and reconstruct the ReceiptInfo
      object.
      
      This PR also adds ...
  10. Jan 13, 2025
    • PG Herveou's avatar
      [pallet-revive] Update gas encoding (#6689) · ba572ae8
      PG Herveou authored
      
      Update the current approach to attach the `ref_time`, `pov` and
      `deposit` parameters to an Ethereum transaction.
      Previously we will pass these 3 parameters along with the signed
      payload, and check that the fees resulting from `gas x gas_price` match
      the actual fees paid by the user for the extrinsic.
      
      This approach unfortunately can be attacked. A malicious actor could
      force such a transaction to fail by injecting low values for some of
      these extra parameters as they are not part of the signed payload.
      
      The new approach encodes these 3 extra parameters in the lower digits of
      the transaction gas, approximating the the log2 of the actual values to
      encode each components on 2 digits
      
      ---------
      
      Co-authored-by: default avatarGitHub Action <action@github.com>
      Co-authored-by: command-bot <>
  11. Jan 02, 2025
  12. Dec 20, 2024
    • Xavier Lau's avatar
      Reorder dependencies' keys (#6967) · a843d15e
      Xavier Lau authored
      
      It doesn't make sense to only reorder the features array.
      
      For example:
      
      This makes it hard for me to compare the dependencies and features,
      especially some crates have a really really long dependencies list.
      ```toml​
      [dependencies]
      c = "*"
      a = "*"
      b = "*"
      
      [features]
      std = [
        "a",
        "b",
        "c",
      ]
      ```
      
      This makes my life easier.
      ```toml​
      [dependencies]
      a = "*"
      b = "*"
      c = "*"
      
      [features]
      std = [
        "a",
        "b",
        "c",
      ]
      ```
      
      ---------
      
      Co-authored-by: default avatarBastian Köcher <git@kchr.de>
      Co-authored-by: command-bot <>
  13. Dec 18, 2024
  14. Dec 17, 2024
  15. Dec 11, 2024
  16. Dec 01, 2024
    • PG Herveou's avatar
      [pallet-revive] eth-prc fix geth diff (#6608) · d1fafa85
      PG Herveou authored
      
      * Add a bunch of differential tests to ensure that responses from
      eth-rpc matches the one from `geth`
      - These
      [tests](https://github.com/paritytech/polkadot-sdk/blob/pg/fix-geth-diff/substrate/frame/revive/rpc/examples/js/src/geth-diff.test.ts)
      are not run in CI for now but can be run locally with
      ```bash
      cd revive/rpc/examples/js
      bun test
      ```
      
      * EVM RPC server will not fail gas_estimation if no gas is specified, I
      updated pallet-revive to add an extra `skip_transfer` boolean check to
      replicate this behavior in our pallet
      
      * `eth_transact` and `bare_eth_transact` api have been updated to use
      `GenericTransaction` directly as this is what is used by
      `eth_estimateGas` and `eth_call`
      
      ## TODO
      
      - [ ]  Add tests the new `skip_transfer` flag
      
      ---------
      
      Co-authored-by: default avatarGitHub Action <action@github.com>
      Co-authored-by: default avatarAlexander Theißen <alex.theissen@me.com>
  17. Nov 29, 2024
    • Alexander Theißen's avatar
      pallet_revive: Switch to 64bit RISC-V (#6565) · 447902ef
      Alexander Theißen authored
      
      This PR updates pallet_revive to the newest PolkaVM version and adapts
      the test fixtures and syscall interface to work under 64bit.
      
      Please note that after this PR no 32bit contracts can be deployed (they
      will be rejected at deploy time). Pre-deployed 32bit contracts are now
      considered defunct since we changes how parameters are passed for
      functions with more than 6 arguments.
      
      ## Fixtures
      
      The fixtures are now built for the 64bit target. I also removed the
      temporary directory mechanism that triggered a full rebuild every time.
      It also makes it easier to find the compiled fixtures since they are now
      always in `target/pallet-revive-fixtures`.
      
      ## Syscall interface
      
      ### Passing pointer
      
      Registers and pointers are now 64bit wide. This allows us to pass u64
      arguments in a single register. Before we needed two registers to pass
      them. This means that just as before we need one register per pointer we
      pass. We keep pointers as `u32` argument by truncating the register.
      This is done since the memory space of PolkaVM is 32bit.
      
      ### Functions with more than 6 arguments
      
      We only have 6 registers to pass arguments. This is why we pass a
      pointer to a struct when we need more than 6. Before this PR we expected
      a packed struct and interpreted it as SCALE encoded tuple. However, this
      was buggy because the `MaxEncodedLen` returned something that was larger
      than the packed size of the structure. This wasn't a problem before. But
      now the memory space changed in a way that things were placed at the
      edges of the memory space and those extra bytes lead to an out of bound
      access.
      
      This is why this PR drops SCALE and expects the arguments to be passed
      as a pointer to a `C` aligned struct. This avoids unaligned accesses.
      However, revive needs to adapt its codegen to properly align the
      structure fields.
      
      ## TODO
      - [ ] Add multi block migration that wipes all existing contracts as we
      made breaking changes to the syscall interface
      
      ---------
      
      Co-authored-by: default avatarGitHub Action <action@github.com>
  18. Nov 21, 2024
  19. Nov 15, 2024
  20. Nov 14, 2024
  21. Nov 12, 2024
  22. Nov 05, 2024
  23. Nov 04, 2024
    • PG Herveou's avatar
      [eth-rpc] Fixes (#6317) · 7f80f452
      PG Herveou authored
      
      Various fixes for the release of eth-rpc & ah-westend-runtime
      
      - Bump asset-hub westend spec version
      - Fix the status of the Receipt to properly report failed transactions
      - Fix value conversion between native and eth decimal representation
      
      ---------
      
      Co-authored-by: default avatarGitHub Action <action@github.com>
  24. Oct 31, 2024
  25. Oct 30, 2024
  26. Oct 28, 2024