Giới thiệu Motoko Playground
Motoko Playground cho phép người dùng xây dựng và triển khai các hợp đồng thông minh canister trực tiếp trong trình duyệt web.
– Yan Chen, Senior Software Engineer | DFINITY
Để đơn giản hóa trải nghiệm của các nhà phát triển khi tham gia vào Internet Computer, DFINITY Foundation’s languages team công bố bản phát hành mã nguồn mở của Motoko Playground, một môi trường phát triển tích hợp (IDE) chạy trên chuỗi khối Internet Computer.
Sử dụng Motoko, một ngôn ngữ lập trình được thiết kế để hỗ trợ liền mạch mô hình lập trình của Internet Computer, Motoko Playground cho phép người dùng xây dựng và triển khai các hợp đồng thông minh canister trực tiếp trong trình duyệt web mà không cần tải xuống DFINITY Canister SDK hoặc thiết lập wallet. Bởi vì các nhà phát triển không cần phải thiết lập môi trường phát triển của riêng họ, trải nghiệm đầy đủ trong trình duyệt này cho phép bất kỳ ai cũng có thể khám phá và học Motoko trong khi thử nghiệm lập trình trên Internet Computer từ bất kỳ đâu.
Bắt đầu với Motoko Playground
Khi vào dapp , bạn có thể chọn dự án bạn muốn làm việc và triển khai với Internet Computer. Dưới đây là quy trình làm việc ví dụ về việc sử dụng Motoko Playground.
Bước # 1: Chọn một dự án mẫu.
Để giúp các nhà phát triển mới nhanh chóng bắt đầu, một số dự án Motoko được chọn trước từ kho examples DFINITY, chẳng hạn như phone book, random maze và publisher/subscriber service. Bạn cũng có thể nhập bất kỳ mã Motoko nào từ Github.
Giả sử ví dụ Counter được chọn từ danh sách trên. Dưới liên kết “Main.mo” trong điều hướng, bạn có thể xem mã.
Bước # 2: Sau khi chọn một dự án, hãy nhấp vào nút “Deploy” ở góc trên bên phải để xây dựng và triển khai hộp trên Internet Computer.
Sau khi nhấp vào “Deploy”, hãy chỉ định tên của hộp mà bạn muốn triển khai. Trong trường hợp này, tên của hộp mà bạn muốn triển khai là “Main”. Quá trình triển khai mất vài giây, vì nó cần tìm nạp ID hộp miễn phí từ Internet Computer và cài đặt WebAssembly (Wasm) module đã biên dịch.
Bước # 3 : Sau khi hộp được triển khai, Candid UI ở phía bên phải có thể được sử dụng để kiểm tra mã.
Sử dụng giao diện Candid UI, bạn có thể giao tiếp với hộp thông qua trình duyệt – bạn có thể truy vấn giá trị ban đầu, tăng bộ đếm, v.v. (Nếu muốn, bạn cũng có thể sử dụng các công cụ giao diện dòng lệnh, chẳng hạn như dfx hoặc ic-repl, để tương tác với canister.)
Bước # 4: Nếu bạn muốn thực hiện bất kỳ thay đổi nào đối với mã, bạn có thể thực hiện việc này trong trình chỉnh sửa. Ví dụ, bên dưới chúng tôi đã thay đổi phương thức thành get2()
.
Bước # 5: Để triển khai lại, hãy nhấn lại vào nút “Deploy”. Bởi vì hệ thống đã biết rằng bạn có một ống đựng tên là “Main”, bạn phải chỉ định xem bạn có muốn nâng cấp canister hiện có hay không hoặc lắp đặt hoàn toàn một canister mới. Với ví dụ dưới đây, chúng tôi sẽ nâng cấp canister hiện có.
Bước # 6: Bởi vì bộ đếm nằm trong bộ nhớ ổn định, sau khi nâng cấp, khi bạn gọi phương thức get2 mới, nó sẽ trả về bộ đếm từ lần trước (thay vì 0) như một giá trị ban đầu.
Bước # 7: Motoko playground hỗ trợ các đối số cài đặt. Trong ví dụ dưới đây, bạn có thể thêm một lớp actor class cho bộ đếm.
Bước # 8: Khi bạn cố gắng triển khai canister của mình, hệ thống biết rằng có một đối số cài đặt và sẽ yêu cầu giá trị bắt đầu của bộ đếm. Trong ví dụ, giá trị bắt đầu bây giờ là 42 và bạn có thể cài đặt lại canister.
Bước # 9: Bây giờ, khi bạn truy vấn giá trị ban đầu, bộ đếm sẽ trả về giá trị 42, như bạn đã chỉ định trong quá trình triển khai.
Đối với các dự án lớn, các nhà phát triển thường cần sử dụng thư viện Motoko của bên thứ ba. Motoko Playground hỗ trợ vessel package set, một bộ thư viện Motoko do cộng đồng duy trì. Bạn có thể nhập các thư viện này, chẳng hạn như phân tích cú pháp, SHA256 và các thư viện cấu trúc dữ liệu khác nhau, bằng cách nhấp vào nút “+” trong phần gói ở cột bên trái.
Motoko Playground hỗ trợ các tính năng tương tự như môi trường phát triển cục bộ của bạn, chẳng hạn như lệnh gọi giữa các canister, nâng cấp canister, cài đặt lớp actor class với các đối số khởi tạo và thư viện của bên thứ ba. Đây là một bài tập thú vị, các nhà phát triển được khuyến khích nhập kho lưu trữ CanCan, thêm thư viện “sequence” từ phần gói và xây dựng canister chứa back-end trong Motoko Playground, tất cả đều nằm trong trình duyệt web.
Bên cạnh phiên bản độc lập của Motoko Playground, còn có một phiên bản nhúng được sử dụng trong Motoko language manual. Đây là phiên bản nhẹ của Motoko Playground, nơi người dùng có thể tương tác thay đổi mã trong tài liệu và chạy (diễn giải) mã ngay lập tức trong trình duyệt mà không cần cài đặt mã trên Internet Computer.
Cách hoạt động của Motoko Playground
Tất cả mã nguồn của Motoko Playground hiện đã được công khai. Một nhà phát triển xem qua mã sẽ tìm thấy một dapp web đầy đủ với giao diện người dùng JavaScript và hộp đựng phụ kiện quản lý các chu trình miễn phí được viết bằng cả Motoko và Rust.
Trái ngược với hầu hết các IDE trực tuyến, trình biên dịch Motoko được lưu trữ ở giao diện người dùng, nhờ vào trình biên dịch js-of-ocaml. Điều này tự động giải quyết các mối quan tâm về bảo mật và khả năng mở rộng, vì trình biên dịch được chạy trong trình duyệt của người dùng thay vì một máy chủ từ xa. Cụ thể, giao diện người dùng bao gồm các thành phần sau:
- Một trình biên dịch Motoko do js-of-ocaml sản xuất, chạy trên web worker.
- Một trình soạn thảo Monaco (VSCode) hỗ trợ đánh dấu và xác thực cú pháp Motoko.
- Trình quản lý gói tàu tải các thư viện của bên thứ ba từ tập hợp vessel package set.
- Một mô-đun triển khai tích hợp cài đặt / nâng cấp canister, actor class và giao diện người dùng Candid.
- Một mô-đun nhập mã cho phép nhập bất kỳ mã Motoko nào từ Github.
Free cycles và the back end
Để hỗ trợ nhà phát triển chấp nhận, DFINITY đang cung cấp free cycles cho các canister được triển khai từ Motoko Playground, để người dùng mới không phải thiết lập cycle wallet để khám phá Motoko và Internet Computer.
back-end canister được viết bằng Motoko và quản lý free cycles được sử dụng bởi các canister được triển khai. Để đảm bảo việc sử dụng hợp lý free cycles này, có một số hạn chế đối với các canister được triển khai: mỗi canister có số dư cycles ban đầu là 0,5T và chỉ có thể chạy trong 10 phút. Chuyển cycles qua các canister cũng không được phép.
Cụ thể, khi giao diện người dùng yêu cầu một canister mới, thì front end sẽ tìm một canister miễn phí trong bể chứa canister của nó, tăng cycles của nó và đặt thời gian hết hạn của canister này. Sau thời gian hết hạn, back end có thể đưa canister này cho người dùng khác yêu cầu triển khai. Để ngăn một người chiếm giữ quá nhiều canister, cần phải có bằng chứng về công việc khi người dùng yêu cầu một canister mới.
Để đảm bảo sự công bằng về tài nguyên, chúng tôi muốn tránh việc người dùng chuyển một lượng lớn cycles vào canister của riêng họ. Ví dụ, người ta có thể dễ dàng chuyển tất cả các cycles có sẵn trong canister được triển khai ở Playground sang canister đích bằng cách gọi deposit_cycles
phương thức trong management canister. Để ngăn chặn cuộc tấn công này, chúng tôi kiểm tra tất cả các mô-đun Wasm đã gửi và xóa các hướng dẫn chuyển cycles ở cấp độ Wasm. Vì Motoko hiện không có thư viện phân tích cú pháp Wasm, nên một Rust canister được sử dụng để đạt được mục tiêu này. Mỗi khi phần cuối của Motoko nhận được yêu cầu cài đặt, nó sẽ chuyển tiếp mô-đun Wasm đến Rust canister để kiểm tra. Đây thực sự là một mẫu thú vị bắt chước hỗ trợ FFI trong Motoko.
Trong tương lai, những hạn chế này sẽ được nới lỏng khi người dùng cung cấp ví riêng của họ để triển khai, điều này cho phép các trường hợp sử dụng nâng cao hơn.
Chúng tôi có kế hoạch bổ sung nhiều tính năng khác để biến Motoko Playground trở thành một IDE web đầy đủ tính năng cho Internet Computer. Sự đóng góp của cộng đồng rất được hoan nghênh!
Trong khi đó, chúng tôi hy vọng bạn thích khám phá một cách thuận tiện Motoko, ngôn ngữ mẹ đẻ của Internet Computer, trực tiếp trong trình duyệt web mà không cần phải tải xuống SDK. Các nhà phát triển quan tâm cũng được khuyến khích xem lại mã nguồn mở của Motoko Playground.
Nguồn: A DFINITY Foundation Resource