我在 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 編譯器,因此使用者可以輕鬆編譯成字節碼並在鏈上執行程式
我在感恩節時開始為這個項目進行 vibe coding,當時我在打發時間,偶然發現了 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 解釋器可以使用捆綁包將 CU 限制擴展到 12M 帳戶限制或更高 這需要: - 檢查解釋器內的 CU 使用情況 - 當接近 1.4M CU 限制時,暫停解析器和虛擬機單元 - 將存儲在堆中的解析器/虛擬機狀態持久化到帳戶 - 當解釋器恢復時加載堆 其他未來擴展將是為流行的 DeFi 應用實現包,以便用戶可以更輕鬆地在 Python 中與鏈上程序互動 對 Pyo3 或 Cython 的支持將允許用戶輕鬆編寫高效的 Python 包,擴展現有的 Solana Rust 庫 最後,移植由 PikaPython 支持的 numpy 將是一個很酷的項目
這個項目是免費且開源的 - 沒有代幣 是出於對這個遊戲的熱愛而做的 享受吧 - moonshiesty
126