wdrożyłem w pełni on-chain środowisko Pythona na Solanie teraz możesz uruchamiać natywne skrypty Pythona i bajtkod na Solanie adres programu: pythonKBk7JcXsbwYzMRy2tL8L9tZqUbgekxRfT1bTE frontend tutaj: kilka przykładów: print("Hello Solana!") >>> "Hello Solana!" print(math.sqrt(2.0)) >>> 1.414213 print(time.asctime()) "Czw Gru 18 19:26:15 2025"
Konta Solana są traktowane jak pliki co oznacza, że możesz czytać/zapisywać do kont Solana i wdrażać pakiety Pythona na kontach Solana co pozwala na użycie kodu Pythona, takiego jak: 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"
większość wbudowanych funkcji, base58/64, struktura, json, czas oraz pakiet matematyczny są dołączone istnieje pakiet solana z obsługą PDA, wywołań międzyłańcuchowych oraz większości wywołań systemowych solana pakiet czasu opakowuje zegar solana a program zwraca ostatnie niewykonane wyrażenie jako return_data, aby inne programy mogły wywołać program python i użyć wyniku
program w Pythonie obsługuje analizowanie, kompilowanie i wykonywanie kodu Python jednak analizowanie na łańcuchu jest bardzo kosztowne. wszelkie skomplikowane rekurencyjne skrypty Python szybko napotykają na limit 1,4M jednostek obliczeniowych dla bardziej skomplikowanych programów Python użytkownicy mogą skompilować skrypt do bajtowego kodu Python poza łańcuchem. skutkuje to oszczędnością gazu na poziomie ~10-100x i pozwala na wykonywanie znacznie bardziej skomplikowanych programów Python na łańcuchu prosty skrypt rekurencyjny, taki jak print(1+2+3), zużywa 1,328,442/1,399,700 jednostek obliczeniowych skompilowany do bajtowego kodu zużywa 13,579/1,339,700 jednostek obliczeniowych (100x taniej) frontend zawiera kompilator Python w wasm, więc użytkownicy mogą łatwo skompilować do bajtowego kodu i wykonać program na łańcuchu
Zacząłem kodować ten projekt podczas Święta Dziękczynienia, gdy zabijałem czas i natknąłem się na PikaPython: interpreter C w Pythonie, który działa tylko z 4KB RAM, bez żadnych zależności. Przypadkiem @solana ma stos 4KB (RAM), wspiera C i nie ma wielu standardowych zależności C. Projekt jest w 99% przeniesiony przez AI i tylko luźno testowany przeze mnie, więc proszę, nie używaj tego do żadnych operacji krytycznych ani z cennymi portfelami. Jednakże, to jest fajny plac zabaw do eksploracji Solany i nauki o tym, jak działa Solana. Ostatecznie, z większą liczbą pakietów i wsparciem dla aplikacji DeFi, to może stać się przydatnym narzędziem do analizy danych i prototypowania na Solanie.
musiałem wprowadzić kilka modyfikacji, aby przenieść projekt do Solana BPF - BPF nie obsługuje globalnego stanu zapisywalnego, więc musiałem przenieść wszystkie zmienne globalne do sterty - BPF nie obsługuje >5 argumentów funkcji (w narzędziu C), więc musiałem przekazywać funkcje z 5+ argumentami jako wskaźniki do struktur - wskaźniki do funkcji, które wskazują poza segment tekstowy, są zabronione, więc tablice wskaźników i inne "niebezpieczne" cele wywołań musiały zostać przekształcone - standardowe funkcje libc, takie jak printf, musiały zostać zaimplementowane na nowo - zoptymalizowano użycie stosu i przeniesiono duże struktury do sterty - zaimplementowano niestandardowy alokator, który wstępnie alokuje kilka dużych buforów - zaimplementowano sysout jako sol_log i zwrócono ostatnie niewykonane wyrażenie jako return_data o link do githuba poniżej. zachęcam do współpracy:
w tej chwili VM jest ograniczone do 1,4M jednostek obliczeniowych w przyszłości interpreter Pythona mógłby używać pakietów, aby zwiększyć limit CU do 12M limitu konta lub więcej wymagałoby to: - sprawdzenia zużycia CU wewnątrz interpretera - wstrzymania parsera i jednostki VM, gdy zaczyna zbliżać się do limitu 1,4M CU - zapisania stanu parsera/VM przechowywanego w stercie do konta - załadowania sterty, gdy interpreter wznowi działanie inne przyszłe rozszerzenia obejmowałyby implementację pakietów dla popularnych aplikacji DeFi, aby użytkownicy mogli łatwiej interagować z programami on-chain w Pythonie wsparcie dla Pyo3 lub Cython umożliwiłoby użytkownikom łatwe pisanie wydajnych pakietów Pythona, które rozszerzają istniejące biblioteki rust Solana na koniec, przeniesienie numpy, które jest wspierane przez PikaPython, byłoby fajnym projektem
projekt jest darmowy i open-source - nie ma tokena zrobiliśmy to z miłości do gry ciesz się - moonshiesty
134