我在 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