ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DataHaven AVS 智能合约指南:基于 EigenLayer 的验证者生命周期、跨链奖励与罚没实现

DataHaven AVS 智能合约指南:基于 EigenLayer 的验证者生命周期、跨链奖励与罚没实现 区块链存储Web3【免费下载链接】datahavenAn EVM compatible Substrate chain, powered by StorageHub and secured by EigenLayer项目地址https://gitcode.com/gh_mirrors/da/datahaven点击查看免费下载导读本文以 contracts/README.md 为主线系统讲解 DataHaven 作为由 EigenLayer 保护的 EVM 兼容 Substrate 链时其 AVS 智能合约层的设计、开发、配置与部署。你将掌握DataHavenServiceManager如何管理验证者注册、通过 Snowbridge 处理跨链奖励、执行罚没以及如何在 Anvil 本地与 Hoodi 测试网两条路径上完成部署。背景与定位DataHaven 是一条由 StorageHub 驱动、由 EigenLayer 保障安全的 EVM 兼容 Substrate 链。其合约层实现的是 Actively Validated ServiceAVS逻辑核心职责包括管理操作者operator / validator的注册生命周期通过 Snowbridge 桥接接收跨链奖励指令依据链上惩罚事件执行 EigenLayer 侧的罚没。项目结构contracts/ ├── src/ │ ├── DataHavenServiceManager.sol # Core AVS service manager │ ├── middleware/ # RewardsRegistry, Snowbridge helpers │ ├── interfaces/ # Contract interfaces │ └── libraries/ # Utility libraries ├── script/ # Deployment setup scripts ├── lib/ # External dependencies (EigenLayer, Snowbridge, OpenZeppelin) └── test/ # Foundry test suites当前仓库中该结构的实际布局为路径内容contracts/src/DataHavenServiceManager.sol核心 AVS 服务管理器继承ServiceManagerBase模式并实现IAVSRegistrarcontracts/src/interfaces/IDataHavenServiceManager.sol全部接口、事件与错误定义contracts/src/libraries/DataHavenSnowbridgeMessages.solSCALE 编码的消息构造库contracts/src/libraries/MerkleUtils.solMerkle 工具库contracts/script/deploy/部署脚本Local/Live 两条路径contracts/lib/EigenLayer、Snowbridge、forge-std 等外部依赖contracts/test/Foundry 测试套件Key ComponentsDataHavenServiceManagercontracts/src/DataHavenServiceManager.sol核心合约负责操作者生命周期继承ServiceManagerBase模式以OwnableUpgradeable 透明代理实现并通过IAVSRegistrar与 EigenLayerAllocationManager集成。RewardsRegistrysrc/middleware/RewardsRegistry.sol跟踪验证者表现并通过 Snowbridge 分发奖励。需要说明的是当前仓库contracts/src/下并未包含middleware/目录实际奖励分发逻辑位于DataHavenServiceManager.sol的submitRewards函数经RewardsCoordinator提交。开发环境要求需要安装 Foundry。编译与测试命令# Build and Test forge build forge test # Regenerate TS bindings (after contract changes) cd ../test bun generate:wagmiforge build依据 contracts/foundry.toml 中的 remappingseigenlayer-contracts/、snowbridge/、forge-std/、OpenZeppelin 升级版等解析依赖使用 Solidity 0.8.28 编译开启优化器optimizer_runs 200。forge test运行 contracts/test/ 下的测试套件覆盖消息编码MessageEncoding.t.sol、操作者地址映射OperatorAddressMappings.t.sol、奖励提交RewardsSubmitter.t.sol、罚没Slashing.t.sol、Snowbridge 集成SnowbridgeIntegration.t.sol、验证者集合选择与提交ValidatorSetSelection.t.sol、ValidatorSetSubmitter.t.sol。bun generate:wagmi在 test/ 目录中通过 test/package.json 的generate:wagmi脚本wagmi generate重新生成 TS 绑定test/contract-bindings/。配置部署参数EigenLayer 地址、初始验证者、所有者等定义在contracts/config/network.json。配置加载链位于 contracts/script/deploy/DeployParams.s.sol网络名称通过环境变量NETWORK指定默认anvil配置文件路径为config/NETWORK.json也可用AVS_OWNER_ADDRESS、DEV_MODE等环境变量覆盖部分配置所有配置字段的结构定义在 contracts/script/deploy/Config.sol 中。⚠️重要警告不要直接编辑Config.sol或DeployParams.s.sol它们只负责从 JSON 加载配置。部署前必须确保contracts/config/hoodi.json与目标环境匹配。配置参考contracts/config/example.jsonc该文件为带注释的示例Solidity 的 JSON 解析器不支持 JSONC使用前必须删除所有注释并改扩展名为.json。关键字段EigenLayer 相关参数参数示例值说明pausers/unpauser地址数组 / 单地址暂停机制的角色PauserRegistry 用rewardsUpdater0x90F7...b906负责在 RewardsCoordinator 更新奖励 Merkle 根的链下服务账户calculationIntervalSeconds86400奖励 Merkle 根的计算间隔秒maxRewardsDuration6048000可追溯应用的最大奖励时长maxRetroactiveLength7776000可追溯奖励最大长度maxFutureLength2592000可预支的未来奖励时长genesisRewardsTimestamp1710979200首次计算奖励的时间戳activationDelay7200发布根与可申领之间的延迟秒globalCommissionBips1000全局默认操作者分佣10%executorMultisig/operationsMultisig地址治理/运维多签minWithdrawalDelayBlocks50提款完成前的最小区块延迟deallocationDelay50取消分配完成的区块延迟allocationConfigurationDelay75分配配置生效的区块延迟delegationManager、strategyManager、avsDirectory、rewardsCoordinator、allocationManager、permissionController地址Hoodi 测试网已有 EigenLayer 合约地址本地部署无需配置beaconChainGenesisTimestamp1695902400信标链创世时间用于 slot↔timestamp 换算AVS 参数参数示例值说明avsOwner地址Service Manager 的 ownersnowbridgeInitiator地址授权发起奖励计算的账户EigenLayer 分发路径用目前项目直接通过 Agent 发送奖励validatorSetSubmitter地址授权提交验证者集合消息的账户validatorsStrategies地址数组验证者可质押的策略beaconChainETHStrategy虚拟地址0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0所有网络相同代表原生信标链 ETH。Hoodi 测试网另有 stETH0xf8a1...5fe0、WETH0x2457...420d主网策略见 contracts/config/example.jsonc 注释Snowbridge 参数参数示例值说明randaoCommitDelay4relayer 调用submitInitial与commitPrevRandao之间的最小区块数生产环境应设为MAX_SEED_LOOKAHEADrandaoCommitExpiration24超过 delay 后relayer 必须在多少区块内调用commitPrevRandao防止无限重掷骰子minNumRequiredSignatures2Randao commit 所需的最小签名数BFT 安全下为ceil(validators * 2/3)startBlock1初始 BEEFY 区块号BeefyClient 只接受大于它的 commitmentmessageOrigin32 字节关联到 Agent 的 origin即被允许提交奖励 Merkle 根或罚没的 Agent 合约initialValidatorSetId/nextValidatorSetId0/1初始与下一组 BEEFY 验证者集 ID来自 DataHaven 链上Beefy.ValidatorSetIdinitialValidatorHashes/nextValidatorHashesbytes32 数组由 BEEFY authority 公钥keccak256(ethereum_address)推导已有网络的配置示例contracts/config/anvil.json本地部署使用EigenLayer 部分仅需 pausers 等参数核心合约由DeployLocal全新部署contracts/config/testnet-hoodi.jsonstagenet-hoodi.json 类似引用 Hoodi 测试网已部署的 EigenLayer 合约地址DelegationManager、StrategyManager、AVSDirectory、RewardsCoordinator、AllocationManager、PermissionController并配置了真实 BEEFY 验证者集initialValidatorSetId: 2303、startBlock: 1381173、minNumRequiredSignatures: 5与三条验证者策略beaconChainETH、stETH、WETHcontracts/config/mainnet-ethereum.json主网配置模板README 声明当前仅支持hoodi尚无主网部署。部署存在两条部署路径LocalAnvil与TestnetHoodi。两者都会安装DataHaven AVS 合约ServiceManager、RewardsRegistry与SnowbridgeBeefyClient、Gateway、Agent区别仅在于 EigenLayer 的设置方式。LocalAnvilDeployLocal.s.sol 会完整引导一套 EigenLayer 核心部署DelegationManager、StrategyManager、AVSDirectory、RewardsCoordinator、AllocationManager、PermissionController、EigenPodManager、EigenStrategy、策略合约等并部署 DataHaven AVS 与 Snowbridge。anvil forge script script/deploy/DeployLocal.s.sol --rpc-url anvil --broadcast从源码看DeployLocal继承了 DeployBase.s.sol 的共享流程_executeSharedDeployment()_setupEigenLayerContracts部署 ProxyAdmin、PauserRegistry、EmptyContract随后部署各核心合约的代理与实现并通过upgradeAndCall初始化本地模式还会铸造TestTokenERC20PresetFixedSupply总量 1,000,000 ether并部署StrategyBaseTVLLimits策略且_fundServiceManagerWithTokens会将 500,000 tokens 转入 ServiceManager 用于奖励分发部署 SnowbridgeBeefyClient、AgentExecutor、Gateway 代理、Rewards Agent部署DataHavenServiceManager代理并初始化将部署结果写入 contracts/deployments/anvil.json 与anvil-agent-info.json。TestnetHoodiDeployLive.s.sol引用目标链上已有的 EigenLayer 合约地址来自contracts/config/network.json只部署 DataHaven AVS Snowbridge。部署前会通过_validateNetwork校验网络名并通过_validateContractExists检查extcodesize 0确认 EigenLayer 合约真实存在。NETWORKhoodi forge script script/deploy/DeployTestnet.s.sol \ --rpc-url hoodi \ --private-key $PRIVATE_KEY \ --broadcast支持的网络hoodistagenet-hoodi、testnet-hoodi同属 Hoodi 测试网、ethereum/mainnet-ethereum当前无主网配置部署产物 →contracts/deployments/network.json。例如 contracts/deployments/hoodi.json 中记录了 BeefyClient、AgentExecutor、Gateway、ServiceManager、RewardsAgent 及所有引用的 EigenLayer 合约地址与本地不同Live 路径会为 ServiceManager 单独创建 ProxyAdmin并将所有权转移给 AVS ownerproxyAdmin.transferOwnership(avsOwner)。运行前置RPC 端点定义在 contracts/foundry.toml 的[rpc_endpoints]hoodi ${RPC_HOODI}、mainnet ${RPC_MAINNET}、anvil http://localhost:8545因此运行前需设置RPC_HOODI等环境变量TX_EXECUTION环境变量控制 owner 交易是否自动执行DeployBase中vm.envOr(TX_EXECUTION, true)DATAHAVEN_VERSION环境变量由 TS 包装脚本传入作为initialize的initialVersion默认0.1.0。工作原理How It WorksREADME 描述的四步核心流程逐一对应源码实现Registration注册验证者通过DataHavenServiceManager向 EigenLayer 注册。源码层面DataHavenServiceManager.sol 实现IAVSRegistrar.registerOperator仅允许AllocationManager调用强制 operatorSetId 为VALIDATORS_SET_ID (0)、要求操作者在validatorsAllowlist白名单中并从data中解析 20 字节的 solochain 地址建立双向映射validatorEthAddressToSolochainAddress↔validatorSolochainAddressToEthAddress。deregisterOperator对称清理映射。Performance Tracking表现追踪DataHaven 计算奖励积分并通过 Snowbridge 将 Merkle 根发送到以太坊上的RewardsRegistry。在 submitRewards 中仅snowbridgeInitiator可调用把按 solochain 地址索引的OperatorDirectedRewardsSubmission翻译成 EigenLayer 操作者地址validatorSolochainAddressToEthAddress反向查找用插入排序数组上限 32 故最优按操作者地址升序排列safeIncreaseAllowance后调用RewardsCoordinator.createOperatorDirectedOperatorSetRewardsSubmission完成入账。Rewards Claims奖励申领验证者在以太坊上凭 Merkle 证明从RewardsRegistry申领奖励该步骤由 EigenLayerRewardsCoordinator的 Merkle 根机制承载当前合约直接调用RewardsCoordinator提交操作者定向奖励。Slashing罚没恶意行为触发罚没。slashValidatorsOperator 仅snowbridgeInitiator可调用将 solochain 地址反查为 EigenLayer 操作者构造SlashingParams后调用AllocationManager.slashOperator执行按wadsToSlash比例的罚没。验证者集合提交Validator Set Submission除 README 流程外仓库源码还体现了两条延伸能力README 中“How It Works”未详细展开但被test/README.md与测试套件覆盖sendNewValidatorSetForEra仅validatorSetSubmitter可调用构造当前 era 的验证者集合消息并经IGatewayV2.v2_sendMessage发送到 SnowbridgebuildNewValidatorSetMessageForEra从AllocationManager读取操作者集合成员与策略计算weightedStake Σ(allocatedStake[j] × multiplier[j])过滤无 solochain 映射或零质押的候选者用部分选择排序选出质押最高平局取地址更小者的min(MAX_ACTIVE_VALIDATORS, count)名验证者上限 32最终经 DataHavenSnowbridgeMessages.sol 的scaleEncodeNewValidatorSetMessagePayload编码为 SCALE 消息EL_MESSAGE_ID 0x70150038 V0 ReceiveValidators命令 compact u32 长度 地址列表 u64 era。权限与升级模型关键修饰符onlySnowbridgeInitiator、onlyValidatorAllocationManager.isMemberOfOperatorSet校验、onlyAllocationManager、onlyValidatorSetSubmitter、onlyOwner、onlyProxyAdminupdateVersion仅允许 EIP-1967 admin slot 中的 ProxyAdmin 调用确保版本更新始终与代理升级upgradeAndCall捆绑信任链为AVS owner → ProxyAdmin → updateVersion合约预留 42 个 slot 的__GAP以兼容后续升级且 contracts/storage-snapshots/DataHavenServiceManager.storage.json 与 contracts/scripts/check-storage-layout.sh 用于校验存储布局不变量另有check-storage-layout-negative.sh验证坏布局场景对应 contracts/script/fixtures/DataHavenServiceManagerBadLayout.sol。测试与验证单元/集成测试contracts/test/ 下每个*.t.sol针对单一功能面如Slashing.t.sol、SnowbridgeIntegration.t.sol、ValidatorSetSubmitter.t.sol测试工具包含 AVSDeployer.sol、SnowbridgeAndAVSDeployer.sol 与 TestUtils.sol存储布局contracts/test/storage/StorageLayout.t.sol 配合存储快照验证升级安全性端到端集成完整网络集成测试见test/README.md位于 test/README.md其中bun generate:wagmi负责在合约变更后重新生成 TS 绑定。部署产物与参考地址部署完成后产物位于 contracts/deployments/anvil.json本地部署地址含 ServiceManager、Gateway、RewardsAgent 及各 EigenLayer 核心合约hoodi.jsonHoodi 测试网部署地址当前已部署的 ServiceManager0xd69a...8f1B、Gateway0x0B13...C25、RewardsAgent0xeAd1...B1A8等anvil-agent-info.json/anvil-rewards-info.jsonAgent 与奖励相关信息metadata.jsonAVS 元数据与DATAHAVEN_AVS_METADATA常量指向的地址一致state-diff.json 与校验和部署状态差异快照。小结DataHaven 的 AVS 合约层以DataHavenServiceManager为枢纽一端对接 EigenLayer 的AllocationManager注册、策略与罚没与RewardsCoordinator奖励入账另一端通过 SnowbridgeGateway/Agent 与 DataHaven solochain 双向通信形成“注册 → 质押选验证者 → 跨链奖励 → 罚没”的完整闭环。部署与运维时只需注意配置以config/network.json为准勿改Config.sol/DeployParams.s.sol、本地用DeployLocal、测试网用DeployLive并确保 JSON 与目标链匹配即可完成从开发到测试网的全流程接入。赞分享区块链存储Web3【免费下载链接】datahavenAn EVM compatible Substrate chain, powered by StorageHub and secured by EigenLayer项目地址https://gitcode.com/gh_mirrors/da/datahaven点击查看免费下载相关推荐Solana 验证者罚没Slashing规则设计剖析基于 PoH 的投票锁定期机制与源码实现Solana 验证者罚没Slashing规则设计剖析基于 PoH 的投票锁定期机制与源码实现 本文是一篇技术研究型指南核心围绕 Solana 项目中的罚区块链后端分布式系统TypePHP 并行编译技巧完整 -j 参数与 CI 环境最优并发配置指南TypePHP 并行编译技巧完整 j 参数与 CI 环境最优并发配置指南 TypePHPTypePHP AOT 编译器是一款将 PHP 源码编译为原生机器编译器开发工具编程语言基于生成模型的智能奖励函数verl项目实战指南基于生成模型的智能奖励函数verl项目实战指南 在强化学习训练过程中传统奖励函数设计往往依赖人工规则难以应对复杂语义场景。verl项目通过集成生成模型能力人工智能大模型强化学习RLHF分布式训练微调上一篇anti-slop的no-module-mocking争议为什么测试应该禁用vi.mock和jest.mock下一篇4步构建智能引用系统解决多语言文档格式统一难题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表