MỚI: Helius mua lại Light Protocol
Xây dựng chương trình Solana bằng TypeScript với Poseidon
Blog/Phát triển

Poseidon: Xây dựng chương trình Solana bằng TypeScript

Cỗ máy ươm tạo nhân tài Solana.Team Turbin3 trên XTeam Turbin3 trên LinkedIn
Đọc trong 8 phút

Poseidon là một framework biên dịch chuyển đổi mới, giúp các nhà phát triển web tạo chương trình on-chain trên Solana (tức hợp đồng thông minh) chỉ bằng TypeScript, ngôn ngữ quen thuộc với hàng triệu người trên toàn thế giới. Framework này giảm đáng kể rào cản gia nhập lĩnh vực phát triển on-chain, giúp Solana tiếp cận được nhiều nhà phát triển hơn. Poseidon chuyển đổi trực tiếp mã TypeScript sang Anchor, framework phát triển chương trình được sử dụng rộng rãi nhất trên Solana.

Bài viết này sẽ đi sâu vào nguồn gốc, thiết kế kiến trúc, các tính năng chính và tác động tích cực tiềm năng của Poseidon đối với hệ sinh thái phát triển Solana. Ngoài ra, chúng ta sẽ xem qua một ví dụ thực tế về chương trình kho lưu trữ token đơn giản được viết bằng Poseidon, qua đó làm nổi bật một số khả năng của framework.

Bối cảnh

Cuối năm 2023, đội ngũ Turbin3 được Solana Foundation giao một thử thách đầy tham vọng: “Liệu các bạn có thể xây dựng một framework cho phép nhà phát triển tạo chương trình Solana bằng TypeScript không?” Phản ứng đầu tiên đương nhiên là hỏi: “Tại sao?”

TypeScript là một tập hợp mở rộng có kiểu tĩnh của JavaScript, giúp nhà phát triển phát hiện lỗi sớm hơn và viết mã dễ bảo trì hơn. Là tiêu chuẩn trên thực tế của phát triển web hiện đại, TypeScript và JavaScript đã tạo dựng một trong những cộng đồng nhà phát triển lớn nhất thế giới. Việc đưa TypeScript vào phát triển chương trình mở ra cơ hội lớn để mở rộng lực lượng nhà phát triển Solana mới và giảm rào cản tham gia xây dựng trên blockchain.

Làm chủ việc phát triển chương trình Solana khó hơn so với nhiều blockchain khác. Nhà phát triển mới phải đồng thời vượt qua hai thách thức: hiểu mô hình tài khoản của Solana và học Rust. Đây có thể là một quá trình học tập đầy khó khăn. Tại Turbin3, chúng tôi hiểu điều này hơn bất kỳ ai; 15% tổng số nhà phát triển Solana mới đến từ các chương trình của chúng tôi.

Bằng cách giới thiệu một framework TypeScript, nhà phát triển có thể tách riêng những thách thức này và tận dụng ngôn ngữ họ đã biết để triển khai chương trình đầu tiên lên testnet nhanh hơn. Lần đầu tiên, một framework dựa trên TypeScript dành cho phát triển chương trình on-chain cho phép nhà phát triển xây dựng liền mạch các ứng dụng Solana full-stack chỉ bằng một ngôn ngữ.

Giải pháp: Poseidon

Dự án khởi đầu với ý tưởng về một thư viện kiểu dữ liệu cơ bản và trình biên dịch chuyển đổi, nhưng nhanh chóng phát triển thành một giải pháp mạnh mẽ hơn nhiều sau giai đoạn tạo nguyên mẫu ban đầu và tiếp nhận phản hồi chuyên sâu từ các chuyên gia Solana và TypeScript. Sau nhiều tháng xây dựng, kiểm thử, khắc phục sự cố và tiếp nhận những ý kiến quý báu từ các chuyên gia trong ngành, Poseidon đã đạt một cột mốc quan trọng tại Breakpoint 2024 vào đầu năm nay, nơi chúng tôi giới thiệu thành quả tới đông đảo nhà phát triển tò mò. 

Trong một buổi trình bày trực tiếp, Shrinath, nhà phát triển chính của Poseidon, đã minh họa cách viết một chương trình Solana bằng TypeScript. Chỉ với một lệnh build, Poseidon chuyển đổi mã TypeScript thành cú pháp Anchor hoàn chỉnh ngay trước mắt khán giả. Cả căn phòng tràn ngập sự phấn khích và những lời thì thầm lan ra: “Điều này thực sự có thể hoạt động sao?”

Kể từ đó, kho mã nguồn mở của Poseidon đã phát triển nhanh chóng nhờ những đóng góp từ cộng đồng Poseidon Army ngày càng lớn mạnh trên X và Discord. Các thành viên cộng đồng đã xử lý sự cố, gửi pull request và cộng tác xây dựng các package mới, giúp Poseidon hoàn thiện hơn mỗi ngày. Những cải tiến bao gồm CLI được nâng cấp, hỗ trợ thêm các hàm của chương trình token và thông báo lỗi rõ ràng hơn. Dù vẫn đang ở giai đoạn đầu, tiềm năng của Poseidon là không thể phủ nhận.

Từ góc độ kỹ thuật, chúng tôi xem tiến trình phát triển của Poseidon qua bốn giai đoạn. Sau những cuộc trao đổi ban đầu, các buổi lên ý tưởng và quá trình thiết kế kiến trúc, chúng tôi phải đưa ra một số quyết định quan trọng. Đáng chú ý nhất gồm: 

  • Đưa ra giả định về các thư viện cần thiết
  • Suy ra tài khoản trong phần thân instruction bằng cách nối chuỗi các phương thức
  • Macro thủ tục (một khái niệm mới với nhiều nhà phát triển)

Sau đó, chúng tôi tập trung cao độ trong suốt giai đoạn xây dựng và lặp cải tiến trước khi ra mắt tại Breakpoint.  Khoảnh khắc công bố đầy ấn tượng đó đã mở đường cho giai đoạn hiện tại — chúng tôi đưa framework đến tay những người dùng tiên phong để họ thử nghiệm, khám phá và cải thiện nó.

Khi năm 2024 khép lại, chúng tôi tiếp tục thúc đẩy sự phát triển của framework, tập trung cải thiện chức năng cốt lõi, thu hút cộng đồng tham gia để mở rộng khả năng hỗ trợ, đồng thời xác định các hàm SPL và thư viện Anchor cần được hỗ trợ. Những mục tiêu này sẽ cho phép các nhà phát triển chủ chốt tập trung vào những cải tiến cốt lõi.

Hướng tới năm 2025, chúng tôi đang đẩy nhanh quá trình phát triển bằng cách khởi động khóa Turbin3 Poseidon Cohort đầu tiên vào cuối quý 1 (sắp công bố). Sáng kiến này sẽ thúc đẩy framework tiến xa hơn và tập trung tạo các package công khai, hướng dẫn cùng những tài nguyên giáo dục khác. Mục tiêu rất rõ ràng: đưa Poseidon trở thành công cụ hàng đầu để tăng tốc phát triển chương trình Solana bằng TypeScript.

Các tính năng chính

Poseidon cung cấp một số tính năng nổi bật:

  • Đơn giản hóa quá trình phát triển: Giao diện dựa trên TypeScript giảm thiểu thời gian học cho nhà phát triển web, giúp họ tập trung vào logic ứng dụng thay vì phải vật lộn với Rust
  • Tăng năng suất: Poseidon giúp nhà phát triển làm việc hiệu quả hơn bằng cách tận dụng các công cụ và quy trình quen thuộc, qua đó đẩy nhanh quá trình phát triển
  • Tăng cường bảo mật và hiệu năng: Framework đảm bảo mã Rust sau khi chuyển đổi tuân thủ các tiêu chuẩn nghiêm ngặt về bảo mật và hiệu năng của Solana, duy trì tính toàn vẹn của chương trình on-chain
  • Tích hợp liền mạch: Poseidon tích hợp liền mạch với hệ sinh thái Solana, cho phép nhà phát triển tận dụng các công cụ và thư viện hiện có

Kiến trúc hệ thống

Kiến trúc của Poseidon gồm một số thành phần chính:

  • Giao diện lập trình dựa trên TypeScript: Lớp này cung cấp cú pháp và công cụ quen thuộc để nhà phát triển viết chương trình Solana
  • Công cụ biên dịch chuyển đổi: Công cụ này chuyển đổi mã TypeScript thành mã Rust tương đương, tận dụng sức mạnh của hệ thống kiểu và các tính năng ngôn ngữ TypeScript
  • Tạo mã Anchor: Mã Rust đã chuyển đổi được xử lý thêm để tạo ra các chương trình Anchor hợp lệ, có thể được biên dịch và triển khai lên mạng Solana
  • Quản lý tài khoản: Poseidon cung cấp phương thức hợp lý hóa việc quản lý tài khoản và dữ liệu liên quan, giúp tương tác với blockchain Solana dễ dàng hơn

Trường hợp sử dụng

Poseidon được thiết kế để giúp nhà phát triển nhanh chóng hiểu mô hình tài khoản của Solana, qua đó giảm đáng kể thời gian cần thiết để nhà phát triển mới triển khai chương trình đầu tiên lên testnet. Do các ứng dụng blockchain có yêu cầu bảo mật nghiêm ngặt, hiện tại Poseidon không phù hợp để xây dựng ứng dụng mainnet cấp độ production. Những kỹ sư giao thức Solana đầy tham vọng cuối cùng vẫn cần học Anchor và Rust để hiểu rõ hơn kiến trúc nền tảng của Solana.

Có thể dùng framework này để khám phá và thử nghiệm nhiều loại ứng dụng phi tập trung, bao gồm:

  • Tài chính phi tập trung (DeFi): Phát triển các ứng dụng tài chính sáng tạo như giao thức cho vay, sàn giao dịch phi tập trung và nền tảng canh tác lợi suất
  • Token không thể thay thế (NFT): Tạo và quản lý tài sản số trên blockchain Solana
  • Trò chơi: Phát triển trò chơi và thế giới ảo dựa trên blockchain
  • Quản lý chuỗi cung ứng: Theo dõi và xác minh nguồn gốc của sản phẩm và nguyên vật liệu

Trước tiên, chúng tôi tập trung vào những chương trình nền tảng đứng sau gần như mọi ứng dụng blockchain: Counter, Vault và Escrow. Các khối xây dựng cốt lõi này là nền tảng của vô số giao thức, khiến chúng trở thành điểm khởi đầu hoàn hảo.

Chương trình Poseidon mẫu

Hãy đi sâu vào mã nguồn và xem xét chi tiết một chương trình vault mẫu được xây dựng bằng TypeScript với Poseidon, đồng thời phân tích chương trình thành các phần cấu thành. Bạn có thể tìm thấy mã nguồn hoàn chỉnh của chương trình này và các chương trình khác trong kho GitHub của Poseidon.

Import và khai báo chương trình

Chương trình được định nghĩa dưới dạng một lớp TypeScript với PROGRAM_ID tĩnh chỉ định ID chương trình. Package @solanaturbine/poseidon cung cấp các kiểu cần thiết để định nghĩa instruction, chẳng hạn như kiểu Rust (u8, u64, i8, i128, boolean, string), kiểu SPL (Pubkey, AssociatedTokenAccount, Mint, TokenAccount, TokenProgram) và kiểu tài khoản Anchor (Signer, UncheckedAccount, SystemAccount).

Mã
import { Account, Pubkey, Result, Signer, SystemAccount, SystemProgram, UncheckedAccount, u64, u8 } from "@solanaturbine/poseidon";

export default class VaultProgram {
    static PROGRAM_ID = new Pubkey("11111111111111111111111111111111");

Instruction

Thông thường, chúng tôi định nghĩa các phương thức bên trong lớp chương trình để xác định instruction bằng Poseidon. Ngữ cảnh của mỗi instruction được ngầm định trong các tham số của phương thức. Để định nghĩa một tài khoản dưới dạng địa chỉ dẫn xuất từ chương trình (PDA) bằng @solanaturbine/poseidon, chúng tôi sử dụng phương thức derive để chỉ định seed làm tham số đầu tiên trong một mảng.

Mã
    initialize(
        owner: Signer,
        state: Vault,
        auth: UncheckedAccount,
        vault: SystemAccount
    ): Result {

        auth.derive(['auth', state.key])
        state.derive(['state', owner.key]).init(owner)
        vault.derive(['vault', auth.key])

        // assign an argument of type Pubkey by calling the key property
        state.owner = owner.key;

        // to store bumps in the custom_Acc(state), we can simply call getBump
        state.stateBump = state.getBump()
        state.authBump = auth.getBump()
        state.vaultBump = vault.getBump()
    }

    deposit(
        owner: Signer,
        state: Vault,
        auth: UncheckedAccount,
        vault: SystemAccount,
        amount: u64
    ) {
        state.deriveWithBump(['state', owner.key], state.stateBump)
        auth.deriveWithBump(['auth', state.key], state.authBump)
        vault.deriveWithBump(['vault', auth.key], state.vaultBump)

        SystemProgram.transfer(
            owner, // from
            vault, // to
            amount // amount to be sent
        )
    }

    withdraw(
        owner: Signer,
        state: Vault,
        auth: UncheckedAccount,
        vault: SystemAccount,
        amount: u64
    ) {
        state.deriveWithBump(['state', owner.key], state.stateBump)
        auth.deriveWithBump(['auth', state.key], state.authBump)
        vault.deriveWithBump(['vault', auth.key], state.vaultBump)

        SystemProgram.transfer(
            vault,
            owner,
            amount,
            ['vault', state.key, state.authBump]
        )
    }
}

Trạng thái tài khoản

Các tài khoản trạng thái tùy chỉnh được định nghĩa dưới dạng một interface mở rộng Account. Các trường của tài khoản trạng thái tùy chỉnh có thể được định nghĩa bằng các kiểu từ package @solanaturbine/Poseidon.

Mã
export interface Vault extends Account {
    owner: Pubkey
    stateBump: u8
    authBump: u8
    vaultBump: u8
}

Tác động của Poseidon

Poseidon có tiềm năng tác động đến lĩnh vực phát triển blockchain bằng cách:

  • Mở rộng cộng đồng nhà phát triển Solana: Thu hút thêm nhiều nhà phát triển tham gia hệ sinh thái Solana
  • Đẩy nhanh quá trình phát triển: Giảm thời gian và công sức phát triển các dự án Solana
  • Cải thiện trải nghiệm nhà phát triển: Mang lại trải nghiệm phát triển trực quan và hiệu quả hơn

Định hướng tương lai

Trong tương lai, Poseidon hướng đến việc nâng cao hơn nữa các khả năng bằng cách:

  • Mở rộng hỗ trợ ngôn ngữ: Hỗ trợ thêm các ngôn ngữ như JavaScript và Python
  • Cải thiện hiệu năng: Tối ưu hóa quá trình biên dịch chuyển đổi và mã Rust được tạo ra
  • Tăng cường bảo mật: Kiểm thử nghiêm ngặt framework và mã được tạo ra để phát hiện lỗ hổng

Kết luận

Poseidon đánh dấu một bước tiến lớn trong việc giúp nhiều người tiếp cận hơn với quá trình phát triển chương trình Solana. Bằng cách thu hẹp khoảng cách giữa phát triển web và lập trình blockchain, Poseidon cho phép nhà phát triển tạo ra các ứng dụng sáng tạo và có sức ảnh hưởng trên blockchain Solana. Khi lĩnh vực blockchain tiếp tục phát triển, Poseidon có tiềm năng trở thành công cụ thiết yếu cho các nhà phát triển Solana mới vào nghề.

Tài nguyên bổ sung

‍

Đăng ký nhận tin từ Helius

Luôn cập nhật những thông tin mới nhất về phát triển Solana và nhận thông báo khi chúng tôi đăng bài

Hình ảnh phóng to