• Sebastian Kunert's avatar
    PoV Reclaim (Clawback) Node Side (#1462) · 9a650c46
    Sebastian Kunert authored
    This PR provides the infrastructure for the pov-reclaim mechanism
    discussed in #209. The goal is to provide the current proof size to the
    runtime so it can be used to reclaim storage weight.
    
    ## New Host Function
    - A new host function is provided
    [here](https://github.com/skunert/polkadot-sdk/blob/5b317fda3be205f4136f10d4490387ccd4f9765d/cumulus/primitives/pov-reclaim/src/lib.rs#L23
    
    ).
    It returns the size of the current proof size to the runtime. If
    recording is not enabled, it returns 0.
    
    ## Implementation Overview
    - Implement option to enable proof recording during import in the
    client. This is currently enabled for `polkadot-parachain`,
    `parachain-template` and the cumulus test node.
    - Make the proof recorder ready for no-std. It was previously only
    enabled for std environments, but we need to record the proof size in
    `validate_block` too.
    - Provide a recorder implementation that only the records the size of
    incoming nodes and does not store the nodes itself.
    - Fix benchmarks that were broken by async backing changes
    - Provide new externalities extension that is registered by default if
    proof recording is enabled.
    - I think we should discuss the naming, pov-reclaim was more intuitive
    to me, but we could also go with clawback like in the issue.
    
    ## Impact of proof recording during import
    With proof recording: 6.3058 Kelem/s
    Without proof recording: 6.3427 Kelem/s
    
    The measured impact on the importing performance is quite low on my
    machine using the block import benchmark. With proof recording I am
    seeing a performance hit of 0.585%.
    
    ---------
    
    Co-authored-by: command-bot <>
    Co-authored-by: default avatarDavide Galassi <[email protected]>
    Co-authored-by: default avatarBastian Köcher <[email protected]>
    9a650c46