Selene Chain

Selene Chain 是 Syndicate 可编程链上排序器的实时演示。

Selene Chain 是一个可编程链上排序器的实时演示,其规则由自然周期(在本例中为月相)决定。通过将交易排序锚定到月相周期,Selene 消除了人工干预,实现了一个既自主又有明确规则的系统。

基于 Syndicate 的基础设施,Selene 展示了如何将排序逻辑设计为具有表现力、基于时间且完全链上的系统,从而解锁权限管理、排序和自定义交易规则的新可能性。

Selene 演示网站

截图:Selene Chain 演示界面,显示基于月相的交易提示。

工作原理:交易生命周期

  1. 提交: 用户通过 Selene 演示界面提交交易。
  2. 排序: 链上排序器模块确定当前的月相,并将相应的规则应用于交易。
  3. 验证: 如果交易符合当前月相的规则,则会被排序并记录在链上。如果不符合,则会被拒绝并记录日志。
  4. 反馈: 用户会立即收到反馈——成功时为交易哈希,失败时为拒绝消息。所有被拒绝的尝试都会存储在 PostgreSQL 数据库中,以便透明化和分析。

排序模块:月相权限

在 Syndicate 的可编程排序器中,模块是定义如何选择、排序和记录链上交易的可插拔组件。Selene 演示实现了一个自定义的以权限为中心的排序模块。所有交易包含规则均由排序器在链上定义和执行。每个月相都会激活一组独特的权限规则。例如,在残月期间,仅允许低价值交易。

这展示了开发者如何使用 Syndicate 构建具有动态、基于阶段的事务策略的表达性自主基础设施,这些策略直接在协议层强制执行。

月相计算与规则

该模块从时间戳计算当前的月相,并将其映射到 8 个规则集之一。

公式:

Elapsed Time=timestamp947182440Phase Time=Elapsed Timemod2551443Phase Index=Phase Time×302551443\begin{aligned} \text{Elapsed Time} &= \text{timestamp} - 947182440 \\ \text{Phase Time} &= \text{Elapsed Time} \bmod 2551443 \\ \text{Phase Index} &= \left\lfloor \frac{\text{Phase Time} \times 30}{2551443} \right\rfloor \end{aligned}
MoonphasePermissionModule.sol
  /// @notice Computes the phase index for a given timestamp
  /// @param timestamp The timestamp to compute the phase index for
  /// @return phaseIndex The phase index
  function getPhaseIndex(uint256 timestamp) internal pure returns (uint8 phaseIndex) {
      // Known new moon: Jan 6, 2000 at 18:14 UTC
      uint256 synodicMonth = 2551443; // seconds in a synodic month (~29.5306 days)
      uint256 newMoonReference = 947182440; // reference new moon timestamp
      uint256 elapsed = timestamp - newMoonReference;
      uint256 phaseTime = elapsed % synodicMonth;

      // Calculate the phase from 0 to 29
      return uint8((phaseTime * 30) / synodicMonth);
  }

然后我们将 phaseIndex 传递到 getPhaseName 函数中,以返回月相的名称:

MoonphasePermissionModule.sol
  function getPhaseName(uint8 phase) internal pure returns (string memory name) {
      if (phase == 0 || phase == 29) return "New Moon";
      if (phase >= 1 && phase <= 6) return "Waxing Crescent";
      if (phase == 7) return "First Quarter";
      if (phase >= 8 && phase <= 13) return "Waxing Gibbous";
      if (phase >= 14 && phase <= 15) return "Full Moon";
      if (phase >= 16 && phase <= 21) return "Waning Gibbous";
      if (phase == 22) return "Last Quarter";
      if (phase >= 23 && phase <= 28) return "Waning Crescent";
  }

规则表:

月相规则描述
新月优先选择较小的 calldata 大小
娥眉月仅广播到允许的合约
上弦月需要天使数字捐赠(例如,111、333 等)
盈凸月仅允许调用 waxingGibbous() 函数
满月仅允许代币交互(ERC20、ERC721、ERC1155)
亏凸月需要高 gas 限制(≥ 21k)
下弦月强制执行 calldata/gas 限制比率 ≥ 16
残月仅允许低价值交易(≤ 0.01 ETH)

这些规则中的每一条都在 MoonphasePermissionModule.sol 中实现,并在排序层强制执行。

演示架构与技术栈

Selene Chain 采用模块化、可扩展的架构,展示了如何在链上强制执行月相逻辑并在现代 Web 应用程序中呈现。以下是各部分的组合方式:

  • 排序器: 去中心化的链上排序

  • 排序模块: 所有月相逻辑通过 Solidity 模块(MoonphasePermissionModule.sol)在链上强制执行,这些模块根据当前月相确定交易的有效性。

  • 前端: 使用 Next.jsTypeScriptTailwind CSS 构建,UI 为用户提供交互式提示和实时反馈。

  • 后端: 使用 PostgreSQL 进行事务日志记录,并通过 Drizzle ORM 访问数据库。

  • 开发与测试: 使用 Foundry 进行合约开发和测试。

开始使用

准备好使用 Syndicate 构建您的应用链了吗?

  1. 探索代码库 以了解架构并扩展模块
  2. 查看链上排序模块 以开始自定义您的应用链的排序、权限和经济机制
  3. 联系 Syndicate 团队 以获取支持或分享您的实验!