📌 项目地址:genlayerlabs/genlayer-project-boilerplate | ⭐ 15,885 颗星 | 🔧 TypeScript | 📜 未标注

先搞清楚这个仓库是什么

genlayerlabs/genlayer-project-boilerplate,15885 个 star。它是 GenLayer 的官方样板项目,用例是足球博彩:玩家对比赛结果下注,结算时合约自己上网抓比分,拿不准时让 LLM 判断。

用例本身不稀奇,稀奇的是“合约自己抓数据”这件事。以太坊合约读不到外部世界,要么靠预言机,要么靠多签的人提交结果。GenLayer 的思路是让合约在执行时直接访问网络和 LLM,再用一套共识机制兜底。这个仓库就是那个思路能跑起来的完整证据。

有个容易踩的误会:GitHub 把仓库语言标成 TypeScript,但合约部分是纯 Python(GenVM 的受限子集)。TypeScript 只在前端(Next.js 15)和部署脚本里出现。

真正值得抄的是测试分层

我看过不少合约模板,带完整测试分层的很少。这个仓库给了一条完整链路:

第一层:静态检查。 genvm-lint 在部署前扫代码:

genvm-lint check contracts/football_bets.py

它管 20 多条规则,几条核心的:

  • 禁止的导入和非确定性调用
  • 存储类型必须是 TreeMap、DynArray、u256 这类合法类型
  • 缺装饰器或返回类型标注
  • 等价原则块之外的非确定性操作

第四条是理解 GenLayer 的钥匙。传统链要求所有节点算出完全一致的结果,可合约一旦要抓网页、调 LLM,每次结果都可能不同。GenLayer 的解法是把这些操作限制在“等价原则块”里,块外的代码仍然必须确定性。linter 强制执行这条边界,位置写错直接报错。所以合约代码天然分两层:确定性的账本逻辑,加一层包裹起来的外部数据获取。

第二层:direct mode 测试。 不需要 Studio,合约跑在内存里,web 请求和 LLM 调用全部 mock,每个测试毫秒级:

pytest tests/direct/ -v

README 给的入口是 direct_deploy("contracts/file.py"),把合约部署进内存后就能像普通单元测试一样调方法、断言状态。tests/direct/ 下三个文件分工明确:test_create_bet.py 测下注创建,test_resolve_bet.py 测结算(带 mock),test_views.py 测只读视图方法。

写 Solidity 的人应该体会过反馈慢的痛苦。毫秒级单元测试能改变写代码的节奏,先快速迭代逻辑,再上链验证。

第三层:集成测试。 tests/integration/ 下对 GenLayer Studio 跑端到端,fixtures.py 存期望状态。CI(GitHub Actions)只跑 lint 加 direct 测试——快的在 CI 拦住大部分问题,慢的留给本地。

上手步骤

需要 Python >= 3.12,全局装 GenLayer CLI:

npm install -g genlayer

建虚拟环境:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

然后按 lint → direct 测试 → 集成测试的顺序走。集成测试和部署需要 GenLayer Studio,本地装或直接用托管版 studio.genlayer.com 都行。

目录结构

contracts/              # Python 智能合约
tests/direct/           # 内存快速测试,不需要 Studio
tests/integration/      # 对 Studio 的端到端测试
frontend/               # Next.js 15 + TanStack Query + Radix UI
deploy/                 # TypeScript 部署脚本
gltest.config.yaml      # 测试运行器网络配置

前端是 Next.js 15 加 TypeScript、TanStack Query、RadIX UI,README 称 production-ready,可以直接改造成自己的产品界面。只关心合约的话,忽略 frontend 目录。

三个坑

  • 合约语言是 Python 的受限子集,普通 Python 代码搬不进去,存储类型必须换用 GenVM 那套。被 linter 拦住时别奇怪,那是它在干活。
  • 许可证只在 README 里放了个 MIT 链接,没有正文细节,商用前自己确认。
  • direct 测试可以完全本地跑,但集成测试和部署绕不开 Studio。

谁该看

要在 GenLayer 上写第一个合约的人,这个模板比文档里的零散示例完整得多。做预测市场、保险这类依赖真实世界数据的应用,可以直接拿这套结构当起点——外部数据怎么安全地进合约、怎么测试,这里有现成答案。就算不打算用 GenLayer,这套“lint + 毫秒级 mock 测试 + 集成测试”的分层思路也值得搬到自己的项目里。

这篇文章对你有帮助吗?

发表回复