Selene Chain
Selene Chain 是 Syndicate 可编程链上排序器的实时演示。
Selene Chain 是一个可编程链上排序器的实时演示,其规则由自然周期(在本例中为月相)决定。通过将交易排序锚定到月相周期,Selene 消除了人工干预,实现了一个既自主又有明确规则的系统。
基于 Syndicate 的基础设施,Selene 展示了如何将排序逻辑设计为具有表现力、基于时间且完全链上的系统,从而解锁权限管理、排序和自定义交易规则的新可能性。

截图:Selene Chain 演示界面,显示基于月相的交易提示。
工作原理:交易生命周期
- 提交: 用户通过 Selene 演示界面提交交易。
- 排序: 链上排序器模块确定当前的月相,并将相应的规则应用于交易。
- 验证: 如果交易符合当前月相的规则,则会被排序并记录在链上。如果不符合,则会被拒绝并记录日志。
- 反馈: 用户会立即收到反馈——成功时为交易哈希,失败时为拒绝消息。所有被拒绝的尝试都会存储在 PostgreSQL 数据库中,以便透明化和分析。
排序模块:月相权限
在 Syndicate 的可编程排序器中,模块是定义如何选择、排序和记录链上交易的可插拔组件。Selene 演示实现了一个自定义的以权限为中心的排序模块。所有交易包含规则均由排序器在链上定义和执行。每个月相都会激活一组独特的权限规则。例如,在残月期间,仅允许低价值交易。
这展示了开发者如何使用 Syndicate 构建具有动态、基于阶段的事务策略的表达性自主基础设施,这些策略直接在协议层强制执行。
月相计算与规则
该模块从时间戳计算当前的月相,并将其映射到 8 个规则集之一。
公式:
/// @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 函数中,以返回月相的名称:
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.js、TypeScript 和 Tailwind CSS 构建,UI 为用户提供交互式提示和实时反馈。
-
后端: 使用 PostgreSQL 进行事务日志记录,并通过 Drizzle ORM 访问数据库。
-
开发与测试: 使用 Foundry 进行合约开发和测试。
开始使用
准备好使用 Syndicate 构建您的应用链了吗?
- 探索代码库 以了解架构并扩展模块
- 查看链上排序模块 以开始自定义您的应用链的排序、权限和经济机制
- 联系 Syndicate 团队 以获取支持或分享您的实验!