#brainfuck #arbitrum #stylus #ethereum

应用程序 stylus-sdk-bf

Arbitrum Stylus的Brainfuck支持

2个版本

0.1.1 2023年8月31日
0.1.0 2023年8月6日

#2529 in 神奇豆子

MIT/Apache

20KB
151 代码行


Logo

Stylus SDK

Arbitrum上的Bf合约:

概述

Bf 是一种幽默的、晦涩的编程语言,以其简洁性、难度和能够为最简单的程序生成难以理解的代码而著称。例如,以下是KSab编写的已知最短的Hello World实现。

+[>>>->-[>->----<<<]>>]>.---.>+..+++.>>.<.>>---.<<<.+++.------.<-.>>+.

上面看到的8个符号构成了Bf编程语言的全部。因为它们的操作模拟了一个图灵机,所以Bf可以用来编写任何可计算函数。也就是说,你可以在C、Rust等语言中做到的事情,你同样可以用Bf做到——如果你能想出如何编写它的话!

对于好坏,这个仓库包含了一个Bf到WebAssembly的编译器,这使得Bf程序可以在Arbitrum链上以接近原生的速度运行。符号被解释如下。

操作 效果
> 将机器头向右移动1个单元格。
< 将机器头向左移动1个单元格。
+ 增加当前单元格中存储的字节。
- 减少当前单元格中存储的字节。
. 将当前单元格的字节附加到EVM返回数据。
, 将calldata的下一个字节读入当前单元格。
[ 如果当前单元格的字节是0,则跳转到匹配的]
] 如果当前单元格的字节不是0,则跳转到匹配的[

用法

要调用编译器,请运行:

cargo run <input.b> -o <output.wat>

要将 .wat 上传到支持 Stylus 的 Arbitrum 链,请参阅 cargo stylus

为什么会有这个东西存在?

虽然看起来只是好玩,但我们希望这个仓库对框架开发者具有教育价值。为新语言创建 Stylus SDK 非常简单,并且使用了在由这个 Bf 编译器生成的 .wat 文件中看到的相同的构建模块。甚至可以使用在 prelude.wat 中看到的导入来部署手写的 .wat 文件;

(module
    (import "vm_hooks" "read_args"    (func $read_args   (param i32    )))
    (import "vm_hooks" "write_result" (func $return_data (param i32 i32)))

    (func $main (export "user_entrypoint") (param $args_len i32) (result i32)
        ;; your code here
    )
)

只需要一个支持 WebAssembly 的编译器和一些导入,完整列表可以在 这里 找到。下表包括我们基于相同理念构建的官方 SDK。

仓库 用例 许可协议
Rust SDK 一切! Apache 2.0 或 MIT
C/C++ SDK 密码学和算法 Apache 2.0 或 MIT
Bf SDK 教育用途 Apache 2.0 或 MIT

想要自己写吗?加入我们在 #stylus 频道上的讨论吧!discord

许可协议

© 2022-2023 Offchain Labs, Inc.

本项目许可协议为以下之一

任选其一。

本项目的 SPDX 许可协议标识符为 MIT OR Apache-2.0

依赖项

~5–16MB
~215K SLoC