datahaven/operator/pallets/external-validators-rewards/runtime-api/Cargo.toml

29 lines
638 B
TOML
Raw Permalink Normal View History

feat(operator): Add External Validators Rewards Pallet (#72) This PR introduces and integrates the new `pallet-external-validators-rewards` into the operator runtimes. This pallet is responsible for managing and distributing rewards to external validators. The pallet was originally introduced by Tanssi. It was heavily modified to abstract the message building and sending with Snowbridge. ### Key Changes Related to `pallet-external-validators-rewards`: * **Pallet and Runtime API Addition:** * The `pallet-external-validators-rewards` has been added to `mainnet`, `stagenet`, and `testnet` runtimes * **Runtime Configuration (`operator/runtime/{mainnet,stagenet,testnet}/src/configs/mod.rs`):** * **`RewardsRegistryAddress` Parameter:** A new dynamic runtime parameter `RewardsRegistryAddress` (type `H160`) has been added to `runtime_params.rs`. This will hold the Ethereum address of the Rewards Registry contract. * **Author Rewards with `RewardsPoints`:** * A new struct `RewardsPoints` implements `pallet_authorship::EventHandler`. * Its `note_author` function rewards block authors (if they are not whitelisted validators) by calling `ExternalValidatorsRewards::reward_by_ids`. * The `EventHandler` in `pallet_authorship::Config` is updated to `(RewardsPoints, ImOnline)`. * **Integration with `pallet-external-validators`:** * The `OnEraStart` and `OnEraEnd` hooks in `pallet_external_validators::Config` are now set to `ExternalValidatorsRewards`, allowing the rewards pallet to react to era changes. * **`RewardsSendAdapter` for Ethereum Communication:** * A new struct `RewardsSendAdapter` implements `pallet_external_validators_rewards::types::SendMessage`. * `build()`: Constructs an `OutboundMessage` to call the `updateRewardsMerkleRoot(bytes32)` function on the `RewardsRegistryAddress` on Ethereum. The calldata includes the selector (hashed from `UpdateRewardsMerkleRootSignature`) and the `rewards_merkle_root`. * `validate()` and `deliver()`: Utilize `OutboundQueueV2` for message validation and delivery. * A constant `UpdateRewardsMerkleRootSignature` ( `b"updateRewardsMerkleRoot(bytes32)"`) is defined for this purpose. * **Runtime API (`operator/runtime/{mainnet,stagenet,testnet}/src/lib.rs`):** * The runtime implements `pallet_external_validators_rewards_runtime_api::ExternalValidatorsRewardsApi`. * This exposes two functions: * `generate_rewards_merkle_proof(account_id: AccountId, era_index: EraIndex) -> Option<MerkleProof>` * `verify_rewards_merkle_proof(merkle_proof: MerkleProof) -> bool` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a rewards system for external validators with era-based tracking, Merkle proof generation, and verification. - Added runtime APIs to generate and verify validator rewards Merkle proofs. - Enabled rewards distribution via outbound messaging to an external registry contract. - Configured runtime parameters for the rewards registry address. - Added fixed author reward points and integrated rewards logic into block authorship events. - Provided a mock runtime environment and benchmarking support for the rewards pallet. - **Tests** - Added comprehensive tests and benchmarks for validator rewards distribution and Merkle proof functionality. - **Chores** - Integrated new pallets and runtime APIs into mainnet, stagenet, and testnet configurations. - Updated dependencies and feature groups to include new rewards-related pallets. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Facundo Farall <37149322+ffarall@users.noreply.github.com>
2025-05-22 00:51:24 +00:00
[package]
name = "pallet-external-validators-rewards-runtime-api"
authors = { workspace = true }
description = "Runtime API definition of pallet-external-validators-rewards"
edition = "2021"
license = "GPL-3.0-only"
version = { workspace = true }
feat(operator): Add External Validators Rewards Pallet (#72) This PR introduces and integrates the new `pallet-external-validators-rewards` into the operator runtimes. This pallet is responsible for managing and distributing rewards to external validators. The pallet was originally introduced by Tanssi. It was heavily modified to abstract the message building and sending with Snowbridge. ### Key Changes Related to `pallet-external-validators-rewards`: * **Pallet and Runtime API Addition:** * The `pallet-external-validators-rewards` has been added to `mainnet`, `stagenet`, and `testnet` runtimes * **Runtime Configuration (`operator/runtime/{mainnet,stagenet,testnet}/src/configs/mod.rs`):** * **`RewardsRegistryAddress` Parameter:** A new dynamic runtime parameter `RewardsRegistryAddress` (type `H160`) has been added to `runtime_params.rs`. This will hold the Ethereum address of the Rewards Registry contract. * **Author Rewards with `RewardsPoints`:** * A new struct `RewardsPoints` implements `pallet_authorship::EventHandler`. * Its `note_author` function rewards block authors (if they are not whitelisted validators) by calling `ExternalValidatorsRewards::reward_by_ids`. * The `EventHandler` in `pallet_authorship::Config` is updated to `(RewardsPoints, ImOnline)`. * **Integration with `pallet-external-validators`:** * The `OnEraStart` and `OnEraEnd` hooks in `pallet_external_validators::Config` are now set to `ExternalValidatorsRewards`, allowing the rewards pallet to react to era changes. * **`RewardsSendAdapter` for Ethereum Communication:** * A new struct `RewardsSendAdapter` implements `pallet_external_validators_rewards::types::SendMessage`. * `build()`: Constructs an `OutboundMessage` to call the `updateRewardsMerkleRoot(bytes32)` function on the `RewardsRegistryAddress` on Ethereum. The calldata includes the selector (hashed from `UpdateRewardsMerkleRootSignature`) and the `rewards_merkle_root`. * `validate()` and `deliver()`: Utilize `OutboundQueueV2` for message validation and delivery. * A constant `UpdateRewardsMerkleRootSignature` ( `b"updateRewardsMerkleRoot(bytes32)"`) is defined for this purpose. * **Runtime API (`operator/runtime/{mainnet,stagenet,testnet}/src/lib.rs`):** * The runtime implements `pallet_external_validators_rewards_runtime_api::ExternalValidatorsRewardsApi`. * This exposes two functions: * `generate_rewards_merkle_proof(account_id: AccountId, era_index: EraIndex) -> Option<MerkleProof>` * `verify_rewards_merkle_proof(merkle_proof: MerkleProof) -> bool` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a rewards system for external validators with era-based tracking, Merkle proof generation, and verification. - Added runtime APIs to generate and verify validator rewards Merkle proofs. - Enabled rewards distribution via outbound messaging to an external registry contract. - Configured runtime parameters for the rewards registry address. - Added fixed author reward points and integrated rewards logic into block authorship events. - Provided a mock runtime environment and benchmarking support for the rewards pallet. - **Tests** - Added comprehensive tests and benchmarks for validator rewards distribution and Merkle proof functionality. - **Chores** - Integrated new pallets and runtime APIs into mainnet, stagenet, and testnet configurations. - Updated dependencies and feature groups to include new rewards-related pallets. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Facundo Farall <37149322+ffarall@users.noreply.github.com>
2025-05-22 00:51:24 +00:00
[package.metadata.docs.rs]
targets = [ "x86_64-unknown-linux-gnu" ]
[lints]
workspace = true
[dependencies]
parity-scale-codec = { workspace = true }
snowbridge-merkle-tree = { workspace = true }
sp-api = { workspace = true }
sp-core = { workspace = true }
[features]
default = [ "std" ]
std = [
"parity-scale-codec/std",
"snowbridge-merkle-tree/std",
"sp-api/std",
"sp-core/std",
]