热门话题
#
Bonk 生态迷因币展现强韧势头
#
有消息称 Pump.fun 计划 40 亿估值发币,引发市场猜测
#
Solana 新代币发射平台 Boop.Fun 风头正劲
我在 Solana 上部署了一个完全链上的 Python 环境
现在你可以在 Solana 上运行原生 Python 脚本和字节码
程序地址:pythonKBk7JcXsbwYzMRy2tL8L9tZqUbgekxRfT1bTE
前端在这里:
几个示例:
print("Hello Solana!")
>>> "Hello Solana!"
print(math.sqrt(2.0))
>>> 1.414213
print(time.asctime())
"2025年12月18日 星期四 19:26:15"

Solana 账户被视为文件
这意味着您可以读取/写入 Solana 账户,并将 Python 包部署到 Solana 账户
这允许使用如下 Python 代码:
f = open("/sol/1", "w")
f.write("def greet(name):\n return 'Hello ' + name")
import sol_1 as my_package
print(my_package.greet("Solana"))
>> "Hello Solana"

大多数内置函数、base58/64、结构体、json、时间和数学包都已包含
有一个支持PDA、跨链调用和大多数solana系统调用的solana包
时间包封装了solana时钟
程序返回最后一个未评估的语句作为return_data,以便其他程序可以调用python程序并使用结果

该 Python 程序支持解析、编译和执行 Python 代码
然而,在链上解析是非常昂贵的。任何复杂的递归 Python 脚本很快就会遇到 1.4M 计算单位的限制
对于更复杂的 Python 程序,用户可以将脚本编译成链下的 Python 字节码。这将节省 ~10-100 倍的燃气费用,并允许更复杂的 Python 程序在链上执行
像 print(1+2+3) 这样的简单递归脚本消耗 1,328,442/1,399,700 计算单位
编译成字节码后,它消耗 13,579/1,339,700 计算单位(便宜 100 倍)
前端包含一个 wasm Python 编译器,因此用户可以轻松地编译成字节码并在链上执行程序


我在感恩节时开始为这个项目编写代码,当时我在打发时间,偶然发现了PikaPython:一个仅需4KB RAM、零依赖的C语言Python解释器。
巧合的是,@solana有一个4KB的堆栈(RAM),支持C语言,并且没有很多标准C语言依赖。
这个项目99%是由AI移植的,只有我进行了松散的测试,所以请不要将其用于任何关键任务操作或与有价值的钱包一起使用。
然而,这是一个探索Solana和了解Solana工作原理的有趣游乐场。
最终,随着更多包和DeFi应用的包支持,这可能成为在Solana上进行数据分析和原型设计的有用工具。
我必须对项目进行多次修改,以便将其移植到 Solana BPF
- BPF 不支持全局可写状态,因此我必须将所有全局变量移到堆中
- BPF 不支持超过 5 个函数参数(在 C 工具链上),因此必须将具有 5 个以上参数的函数作为指向结构体的指针传递
- 指向文本段外的函数指针是不允许的,因此指针数组和其他 "不安全" 的调用目标必须重构
- 像 printf 这样的标准 libc 函数必须重新实现
- 优化堆栈使用并将大型结构体移到堆中
- 实现了一个自定义分配器,预分配了几个大型缓冲区
- 将 sysout 实现为 sol_log,并将最后一个未评估的语句作为 return_data 返回
下面是 github 链接。欢迎贡献:

现在,虚拟机的计算单元限制为1.4M
未来,Python 解释器可以使用捆绑包将计算单元限制扩展到12M账户限制或更高
这将需要:
- 检查解释器内部的计算单元使用情况
- 当接近1.4M计算单元限制时,暂停解析器和虚拟机单元
- 将存储在堆中的解析器/虚拟机状态持久化到账户
- 当解释器恢复时加载堆
其他未来的扩展将是为流行的DeFi应用程序实现包,以便用户可以更轻松地与链上程序进行Python交互
对Pyo3或Cython的支持将允许用户轻松编写高效的Python包,从而扩展现有的Solana Rust库
最后,移植由PikaPython支持的numpy将是一个很酷的项目
项目是免费的,开源的 - 没有代币
出于对游戏的热爱而做
享受吧 - moonshiesty
125
热门
排行
收藏
