Bản chất của hợp đồng thông minh và Web 3

Đối với các lập trình viên chưa có nhiều kinh nghiệm làm việc với các ứng dụng truyền thống trong Web 2 thì bạn sẽ thấy các khái niệm trong lập trình blockchain khá mới. Tuy nhiên, về bản chất thì Web 3 và Web 2 cũng không khác nhau là mấy.

Bản chất của hợp đồng thông minh và Web 3
Photo by GuerrillaBuzz Crypto PR / Unsplash

Đã khá lâu kể từ lần cuối mình viết bài về chủ đề liên quan đến blockchain, thị trường tài chính nói chung và thị trường tiền ảo nói riêng trong thời gian qua đã có nhiều thăng trầm. Cũng từ đó mà mình mới có thời gian ngồi nhìn lại trải nghiệm của mình đối với công nghệ này. Sẽ không quá khi nói blockchain dường như đang dẫn trở thành bến đổ mới cho dân công nghệ và được đề cao hơn bao giờ hết kể cả trong giai đoạn thị trường "gấu" (bear market).

Vì cũng lẽ đó, cụm từ "nhà phát triển chuỗi khối" hay "nhà phát triển ứng dụng phi tập trung" khi được nhắc đến lại trở nên "trang trọng" đến lạ thường. Sau 1 năm làm việc và nghiên cứu các công nghệ trong blockchain, mình tự đúc kết được những điểm đáng chú ý mà hi vọng sẽ giúp ích khi bạn có mong mỏi tìm hiểu về blockchain.

Trong bài viết này, mình sẽ giả sử các bạn đã nắm được các định nghĩa phổ biến trong mảng blockchain nên mình sẽ không nêu qua ví dụ như định nghĩa của blockchain, hợp đồng thông minh, ứng dụng phi tập trung...


Web 3 về bản chất vẫn là Web 2

Đối với các lập trình viên chưa có nhiều kinh nghiệm làm việc với các ứng dụng truyền thống trong Web 2 thì bạn sẽ thấy các khái niệm trong lập trình blockchain khá mới. Tuy nhiên, về bản chất thì Web 3 và Web 2 cũng không khác nhau là mấy. Nếu trong Web 2, chúng ta sẽ chia ra là frontend (giao diện người dùng) và backend (nơi xử lý các logic trên máy chủ) thì đối với blockchain, kiến trúc này cũng tương tự.

Kiến trúc của Web 3 so với Web 2

Frontend ở Web 3 vẫn không khác gì Web 2 tuy nhiên các phần việc trên client sẽ nhiều hơn ở Web 2 một chút để giúp các ứng dụng phi tập trung có thể hoạt động trơn chu. Backend ở Web 3 lúc này thay vì là 1 server on-premise do bên phía người dùng quản lý hoặc sử dụng các dịch vụ điện toán đám mây như AWS Lambda Function hay AWS Amplify, các blockchain sẽ đóng vài trò là máy chủ kiêm luôn cơ sở dữ liệu chính của ứng dụng của bạn. Điều đó có nghĩa là, ngay khi bắt đầu, bạn đã có sẵn 1 máy chủ siêu mở rộng với kiến trúc phân tán và phi tập trung kiêm luôn một cơ sở dữ liệu không giới hạn VÔ ĐỊCH THIÊN HẠ 💪. Do đó ngay khi vừa bắt tay vào xây dựng ứng dụng, các nhà phát triển cũng không phải tốn quá nhiều thời gian để cài đặt, cấu hình và xây dựng môi trường cho các cơ sở dữ liệu và máy chủ. Bạn cũng không "bạc đầu" để suy nghĩ kiến trúc cùng với khả năng mở rộng cho backend của ứng dụng.

Điểm khiến Web 3 khác biệt với Web 2 có lẽ là sự tự do của người dùng trong việc quản lý thông tin và thực hiện giao dịch tiền tệ. Sẽ không có bất kì rào cản nào có thể ngăn bạn chuyển tiền cho 1 ai đó thông qua hợp đồng thông minh. Điều mà các ứng dụng truyền thống tốn rất nhiều tài nguyên vào việc xây dựng hệ thống thanh toán đa quốc gia.


HỢP ĐỒNG THÔNG MINH không thông minh như bạn tưởng

Hợp đồng thông minh về bản chất là một ứng dụng được viết bằng 1 ngôn ngữ lập trình được thiết kế riêng cho từng blockchain. Khi xây dựng 1 server backend, tuỳ dự án sẽ có 1 ngôn ngữ lập trình riêng ví dụ như Golang, Rust hay Java. Để phía frontend có thể giao tiếp được với backend server, các phương thức như gRPC, GraphQL hay REST API sẽ được sử dụng. Quay trở lại với hợp đồng thông minh, việc bạn cần làm chỉ là viết các phương thức để thiết lập tương tác giữa người dùng và blockchain. Sau đó các phương thúc này sẽ được VM (Virtual Machine) xử lý và biên dịch thành các mã hoặc định dạng cụ thể để giao tiếp với client. Theo cách đó, những gì bạn có thể làm được trong hợp đồng thông minh thậm chí còn giới hạn hơn cả các chương trình truyền thống.

Điểm hạn chế về ngôn ngữ lập trình của hợp đồng thông minh

Hợp đồng thông minh có rất nhiều hạn chế về mặt kỹ thuật so với các chương trình thông thường. Thứ nhất, vì các hợp đồng thông minh của mỗi blockchain được viết bằng các ngôn ngữ khác nhau, do đó chương trình của hợp đồng thông minh sẽ bị hạn chế về mặt ngôn ngữ. Lấy ví dụ lập trình Solana và lập trình Aptos, trong khi Solana sử dụng Rust làm ngôn ngữ lõi cho các hợp đồng thông minh, một ngôn ngữ đã có nhiều năm chinh chiến trong cộng đồng, thì Aptos lại sử dụng Move, ngôn ngữ còn rất mới và chưa hoàn thiện để có thể xử lý các tác vụ lập trình phức tạp.

Điển hình như Move không hỗ trợ vòng lặp for và chỉ hỗ trợ duy nhất vòng lặp while, hay mặc dù Move là ngôn ngữ chặt chẽ về kiểu dữ liệu, tuy nhưng Move thậm chí còn không có i32 hay i64. Điều này khiến việc lập trình với các số âm trở nên phức tạp hơn.

Thống kê một số thông tin của các Blockchain

Tham khảo bảng số liệu trên (bảng số liệu này không hoàn toàn chính xác vì đã có thay đổi theo thời gian), có thể thấy, với Rust của Solana, vì cộng đồng lập trình viên sử dụng Rust đã phát triển rất mạnh, việc thích nghi với các khái niệm lập trình Solana cũng sẽ đơn giản hơn. Trong khi đó, Stacks lại sử dụng một ngôn ngữ không mấy là phổ biến - Clarity. Điều này sẽ khiến cho blockchain kén nhà phát triển hơn. Do đó, khi mới bắt đầu với phát triển ứng dụng blockchain, việc lựa chọn blockchain với tài nguyên phù hợp (ngôn ngữ, hỗ trợ từ cộng đồng...) cũng quan trọng không kém.

Giới hạn về sức mạnh điện toán (Computing Power)

Để xây dựng ứng dụng phi tập trung hoàn chỉnh trên các blockchain, bên cạnh yếu tố về ngôn ngữ được kể trên, các nhà phát triển cũng cần các kiến thức nền tảng về cấu trúc dữ liệu bộ nhớ như Stack hay Heap, và khả năng tính toán cũng như tối ưu hợp đồng thông minh. Vì đối với hợp đồng thông minh, 2 điều cần lưu ý nhất là bảo mật và phí. Mỗi dòng code bạn viết ra sẽ đều tốn phí khi deploy hợp đồng thông minh lên mạng blockchain. Do đó, hiểu về độ phức tạp thuật toán và cấu trúc dữ liệu là rất cần thiết để tối ưu hợp đồng.

Và vì sao minh lại bảo blockchain có các giới hạn sức mạnh điện toán? Về bản chất, blockchain được cấu tạo thành từ vô số các máy tính liên kết với nhau tương ứng với nhau. Do đó, mỗi blockchain cũng sẽ đặt ra giới hạn về sức mạnh điện toán được sử dụng để thực thi các phương thức trong hợp đồng thông minh. Phí giao dịch đóng vai trò như tiền tệ đổi lấy sức mạnh điện toán. Thế nên, các chương trình trên blockchain sẽ không thể thực thi các thuật toán quá phức tạp.


Làm sao để lập trình trong Blockchain một cách "đúng đắn"

Tối đa hoá lợi ích các tài nguyên mà cộng đồng mang lại

Một lợi thế của blockchain so với các mảng khác là hầu như tất cả thông tin, công cụ, thư viện đều miễn phí và mã nguồn mở. Việc thành thạo nền tảng như Github là một lợi thế rất lớn cho bạn. Thành thạo ở đây ý mình là bạn có khả năng đọc các dự án và thư viện mã nguồn mở để giải quyết được vấn đề mà bạn đang gặp phải. Hãy sử dụng "không ngại ngần" chức năng Issues mà Github cung cấp để đặt các câu hỏi mà bạn gặp phải. Ngoài ra có một trick mà mình hay sử dụng để tra cứu thông tin trên Github dễ dàng hơn là sử dụng Github Dev.

GitHub - github/dev: Press the . key on any repo
Press the . key on any repo. Contribute to github/dev development by creating an account on GitHub.
Cách chuyển sang chế độ Github Dev

Bằng cách chuyển sang chế độ Github Dev, bạn có thể tìm kiếm thông tin dễ dàng không khác gì khi bạn làm việc với code trên editor như VSCode hay Atom.

Discord sẽ là ngôi nhà thứ hai của bạn bên cạnh Github

Từ những trải nghiệm của bản thân, mình có thể kết luận rằng, hợp đồng thông minh chỉ là một phần nhỏ khi làm việc với blockchain. Khi tham gia vào một dự án phi tập trung, thiết yếu nhất là khả năng đọc hiểu mã nguồn và thấu hiểu các khái niệm của blockchain nền tảng bạn đang xây dựng trên. Ngoài ra, Discord cũng là nơi mà các dự án thông báo, bàn luận về những vấn đề xảy ra trên blockchain đó. Từ đó, bạn nên tập làm quen với cách đặt câu hỏi và tra cứu thông tin thông qua Discord.

Tận dụng lợi ích của cộng đồng blockchain (ví dụ discord của Anchor/Solana)

Đối với các blockchain phổ biến như Ethereum, Stackoverflow hay Google có thể đã xuất hiện nhiều câu hỏi để bạn tham khảo. Tuy nhiên, với các blockchain khó tiếp cận hơn như Aptos hay Polkadot (về mặt công nghệ), tin mình đi, bạn sẽ không thể trông đợi gì vào Google.


Và đó là một số kinh nghiệm mình đúc kết được từ quá trình làm việc và nghiên cứu về blockchain. Hi vọng bài viết sẽ hữu ích với các bạn trong quá trình tìm hiểu về công nghệ này.