永久编程:实现前端与逻辑的完全链上化

  • z0r0zzz
  • 发布于 5天前
  • 阅读 10

文章讨论了“Permanent Programming(永久编程)”的概念:把前端和应用逻辑也放到区块链上,让代码通过智能合约永久保存、可公开读取,并尽量做到不可篡改。作者以 zSwap 为例,展示了一个完全链上的 DEX 前端,UI、样式、路由与钱包交互都由以太坊合约承载,并结合 SSTORE2、ERC-4804/5219 等机制实现代码分发与访问。文章强调这种方式能显著缩小攻击面,降低依赖和 API 被篡改带来的风险,使“应用本身就是合约”。

Image

永久编程

区块链通常只被认为适用于金融应用。它们独特的价值主张——数字永久性——同样也延伸到了软件领域。

最明显的例子,就是运行 token ledger 和 network gas 的代码。这些“smart contracts”会严格按照程序运行,并且可以通过其独特的 public key “address”被全局访问。

在支持 smart contracts 的区块链上,比如 Ethereum,这些程序可以被设为不可变——冻结——也可以设为可变*——受管理控制。以这种方式,它们提供了其他任何软件范式都从未拥有过的东西:一个能够永久保存代码的 address。但同样常被低估的一点是,smart contracts 也可以是只读的,并返回持久化数据。

(*本文将聚焦前一种(不可变)情况,因为它是区块链代码所独有的,并且最能体现 smart contracts 的特性。可管理的链上数据依然很酷。)

不可变 smart contracts 不仅可以用来运行去中心化服务(例如 swap routing)的金融程序,也可以同样完美地承载面向终端用户的代码,例如 swap frontend。

这意味着,你可以调用一个 smart contract,让它每次都返回相同的 UI。而这个 UI 也可以被设计成每次都以相同方式准备对固定 smart contracts 的调用,从而闭合外部依赖的循环,并提供一整套永久代码。

我谨慎地说:不可黑客攻击的* Frontends。

(*或者防篡改——交付方式始终需要检查)

这解决了什么问题?

smart contract 服务的好坏取决于它们的 frontend。尤其是在 swap 场景中,你只需点击一次,恶意更新就可能把你的 swap 输出替换为攻击者地址。

因此,将代码部署到一种天然具备抗劫持能力,甚至免疫劫持的格式和底层之中,正变得越来越必要。

通过最小化实现安全

攻击正在增加。随着 AI 的普及带来更奇特的漏洞,程序员必须认真考虑其代码的攻击面。同时也要意识到,即使你维护着自己纯净的系统,一个被攻破的 API 或依赖项也同样可能毁掉你的安全。

考虑到这一点,尽可能缩小代码表面实际上很有意义。缩小到一种用户及其 agents 都能轻松验证的程度。而且随着代码变得更小,把它托管到区块链上也变得更可行,从而让“代码冻结”真正成为永久的。

概念验证:zSwap

zSwap 是一个由 smart contract 返回的不可变 html 应用,部署在 Ethereum 上,公开 address 为 0x000000000A4A4F895734cF70700b6F84AadbcA6C

Image

对 html() 函数的调用会返回你所期望的内容:你可以在自己的机器上运行的 frontend 代码。

Image

这段代码共有 374 行(24,549 bytes),刚好处于 contract code size limit 之内。出于这个原因(以及未来扩展的需要),使用了 SSTORE2 method 将 dapp 以 bytecode 的形式编码进一个 conjoined contract

整个 dapp——UI、样式、swap logic、quoter integration、wallet handling——都是保存在 Ethereum 上的 bytes。这个 contract 还支持 ERC-4804ERC-5219,以更统一和标准的方式来消费其代码。

像这样的完全 onchain 应用也比 IPFS 更好,因为 IPFS 代码只会在有人愿意 pin 它时才持续存在。

在这里,zSwap 只要 Ethereum 还在,就会一直运行。部署成本 0.002064088654899456 ETH ($4.79)

你可以通过这些 public web3 gateways 查看它:

https://0x000000000A4A4F895734cF70700b6F84AadbcA6C.1.w3link.io/

https://0x000000000A4A4F895734cF70700b6F84AadbcA6C.w3eth.io/

获取到的代码(zSwap.html)提供了一个 DEX frontend,这个 frontend 也完全运行在区块链上,通过 zQuoterzFi API),它使用 Solidity code 扫描并返回最热门 AMMs 中的最佳路径。所以在这个特定示例中,确实从头到尾都是 smart contracts。

下面是运行这段代码的一些便捷方式:

通过 web3 browser,例如

EVM Browser

,web3://0x000000000A4A4F895734cF70700b6F84AadbcA6C/

cast call 0x000000000A4A4F895734cF70700b6F84AadbcA6C 'html()(string)' -r

https://eth.drpc.org

| jq -r . > /tmp/index.html && (cd /tmp && python3 -m http.server 8000) & sleep 1 && open http://localhost:8000

Image

contract 就是 application

这种 Permanent Programming 还只是刚刚开始。这里有许多非常有用的发展方向,无论是像 zSwap v0.1 这样可以通过 web3 browsers 按其唯一 public addresses 直接获取的独立实例,还是可以由 singleton 提供服务的、更标准的迭代格式。

我猜这比人们想象的要简单得多。尤其是在这些旨在服务 smart contracts 本身的 meta“perma” dapps 的语境中,代码表面本来就已经理想地很小:一个向特定 smart contract 或一组精选 smart contracts 提交交易的表单。因此,大多数现代协议都可以轻松拥有链上托管的 fallback 或 mini frontends,用来覆盖其核心用户需求(例如 withdrawals),而无需对 UI 安全性有任何疑问。

这可以促成一种基于托管格式、可证明安全的软件代码的出现,并让区块链代表安全,而不仅仅是风险。

如果这个话题引起你的兴趣,请留言。zSwap 和类似实例将会在 zFi 上公开构建,Github

~zzz

  • 原文链接: x.com/z0r0zzz/status/204...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
z0r0zzz
z0r0zzz
江湖只有他的大名,没有他的介绍。