Tôi đã triển khai một môi trường python hoàn toàn trên chuỗi trên Solana Bây giờ bạn có thể chạy các script python và bytecode gốc trên Solana Địa chỉ chương trình: pythonKBk7JcXsbwYzMRy2tL8L9tZqUbgekxRfT1bTE Giao diện người dùng ở đây: Một vài ví dụ: print("Hello Solana!") >>> "Hello Solana!" print(math.sqrt(2.0)) >>> 1.414213 print(time.asctime()) "Thu Dec 18 19:26:15 2025"
Các tài khoản Solana được coi như các tệp điều này có nghĩa là bạn có thể đọc/ghi vào các tài khoản Solana và triển khai các gói Python vào các tài khoản Solana điều này cho phép mã Python như sau: 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"
hầu hết các builtins, base58/64, struct, json, time và một gói toán học đều được bao gồm có một gói solana với hỗ trợ cho PDAs, gọi chéo chuỗi và hầu hết các syscalls của solana gói time bọc đồng hồ solana và chương trình trả về câu lệnh chưa được đánh giá cuối cùng dưới dạng return_data để các chương trình khác có thể gọi chương trình python và sử dụng kết quả
chương trình python hỗ trợ phân tích, biên dịch và thực thi mã python tuy nhiên, việc phân tích trên chuỗi rất tốn kém. bất kỳ kịch bản python đệ quy phức tạp nào cũng nhanh chóng gặp phải giới hạn 1,4 triệu đơn vị tính toán đối với các chương trình python phức tạp hơn, người dùng có thể biên dịch kịch bản thành bytecode python ngoài chuỗi. điều này dẫn đến việc tiết kiệm gas khoảng ~10-100 lần và cho phép các chương trình python phức tạp hơn thực thi trên chuỗi một kịch bản đệ quy đơn giản như print(1+2+3) tiêu tốn 1,328,442/1,399,700 đơn vị tính toán khi được biên dịch thành bytecode, nó tiêu tốn 13,579/1,339,700 đơn vị tính toán (rẻ hơn 100 lần) giao diện người dùng chứa một trình biên dịch python wasm để người dùng có thể dễ dàng biên dịch thành bytecode và thực thi chương trình trên chuỗi
Tôi đã bắt đầu lập trình dự án này trong kỳ nghỉ lễ Tạ ơn khi tôi đang giết thời gian và tình cờ phát hiện ra PikaPython: một trình thông dịch C python chỉ chạy với 4KB RAM, không có phụ thuộc nào. Trùng hợp là @solana có một ngăn xếp 4KB (RAM), hỗ trợ C và không có nhiều phụ thuộc tiêu chuẩn của C. Dự án này đã được 99% chuyển đổi bởi AI, và chỉ được tôi kiểm tra một cách lỏng lẻo, vì vậy xin đừng sử dụng nó cho bất kỳ hoạt động quan trọng nào hoặc với các ví có giá trị. Tuy nhiên, đây là một sân chơi thú vị để khám phá solana và tìm hiểu về cách solana hoạt động. Cuối cùng, với nhiều gói và hỗ trợ gói cho các ứng dụng DeFi, điều này có thể trở thành một công cụ hữu ích cho phân tích dữ liệu và tạo mẫu trên solana.
Tôi đã phải thực hiện một số sửa đổi để chuyển dự án sang BPF của Solana - BPF không hỗ trợ trạng thái có thể ghi toàn cục nên tôi đã phải di chuyển tất cả các biến toàn cục vào heap - BPF không hỗ trợ >5 tham số hàm (trên công cụ C) nên tôi đã phải truyền các hàm có 5+ tham số dưới dạng con trỏ đến các struct - Các con trỏ hàm trỏ ra ngoài đoạn văn bản bị cấm nên các mảng con trỏ và các mục gọi "không an toàn" khác đã phải được tái cấu trúc - Các hàm libc tiêu chuẩn như printf đã phải được triển khai lại - Tối ưu hóa việc sử dụng stack và di chuyển các struct lớn vào heap - Triển khai một bộ cấp phát tùy chỉnh mà tiền cấp phát một số bộ đệm lớn - Triển khai sysout như sol_log và trả về câu lệnh chưa được đánh giá cuối cùng như return_data Liên kết github bên dưới. Hãy thoải mái đóng góp:
hiện tại VM bị giới hạn ở 1,4 triệu đơn vị tính toán trong tương lai, trình thông dịch python có thể sử dụng các gói để mở rộng giới hạn CU lên đến giới hạn tài khoản 12 triệu hoặc hơn điều này sẽ yêu cầu: - kiểm tra việc sử dụng CU bên trong trình thông dịch - tạm dừng phân tích cú pháp và đơn vị VM khi nó bắt đầu tiếp cận giới hạn 1,4 triệu CU - lưu trạng thái phân tích cú pháp/VM được lưu trữ trong heap vào một tài khoản - tải lại heap khi trình thông dịch tiếp tục các mở rộng trong tương lai khác sẽ là triển khai các gói cho các ứng dụng DeFi phổ biến để người dùng có thể dễ dàng tương tác với các chương trình trên chuỗi bằng python hỗ trợ cho Pyo3 hoặc Cython sẽ cho phép người dùng dễ dàng viết các gói python hiệu quả mở rộng các thư viện rust solana hiện có cuối cùng, việc chuyển numpy được hỗ trợ bởi PikaPython sẽ là một dự án thú vị
dự án là miễn phí và mã nguồn mở - không có token làm điều này vì tình yêu với trò chơi thưởng thức - moonshiesty
131