Lập trình Ethereum #2: Smart Contract, Solidity và IDE

Trong bài viết hôm nay, mình sẽ giới thiệu tới các bạn hợp đồng thông minh, ngôn ngữ lập trình (Solidity) cũng như là môi trường phát triển của Ethereum (Remix IDE).

Lập trình Ethereum #2: Smart Contract, Solidity và IDE

Tiếp nối tập trước của series Lập trình Ethereum sau 2 tuần vật vã với công việc, mình đã quay trở lại rồi đây 😅. Trong tập này, chúng ta đã đi qua các khái niệm cần thiết trước khi bắt đầu với hệ sinh thái của Ethereum. Nếu các bạn chưa đọc tập trước, hãy ủng hộ mình qua bài viết này nhé.

Lập trình Ethereum #1: Vạn sự khởi đầu nan
Với sự phổ biến của blockchain trong hiện tại cùng với sự đổ bộ của Web 3.0., Ethereum là một trong các đồng tiền mã hóa được quan tâm nhiều trên toàn cầu. Hãy cùng mình bắt đầu hành trình lập trình Ethereum nhé.

Trong bài viết hôm nay, mình sẽ giới thiệu tới các bạn hợp đồng thông minh, ngôn ngữ lập trình (Solidity) cũng như là môi trường phát triển của Ethereum (Remix IDE).


Hợp đồng thông minh là gì?

Khi lập trình Ethereum, có thể nói theo một cách khác, đó là bạn đang viết các hợp đồng thông minh nhằm thiết lập sự vận hành tự động của ứng dụng phi tập trung của bạn và mạng lưới blockchain. Hợp đồng thông minh (Smart contract) là một giao thức hay một chương trình máy tính, được vận hành tự động dựa trên các điều kiện được chấp thuận đến từ hai phía (người dùng và ứng dụng).

Khác với các bản hợp đồng vật lý thông thường, hợp đồng thông minh không phụ thuộc vào bất kỳ bên trung gian nào. Ví dụ như khi bạn ký vào một bản hợp đồng bảo hiểm, mặc dù đã đạt các yêu cầu trong hợp đồng để nhận được quyền lợi nhưng công ty bảo hiểm lại trở mặt từ chối bạn. Lúc này, bạn sẽ phải thông qua một bên thứ ba đó là pháp luật để giải quyết vấn đề đó. Với hợp đồng thông minh, mọi hoạt động đều được giám sát bởi mạng ngang hàng và xác thực bởi mạng lưới blockchain. Bạn sẽ không cần phải đặt ra câu hỏi "Liệu tổ chức này có đáng tin hay không?".


Các vấn đề bảo mật của hợp đồng thông minh

Tuy nhiên, vì các hợp đồng thông minh, nói theo một cách đơn giản, cũng chỉ là các mã code được viết nên bởi con người, trong một số trường hợp sẽ bị tấn công bằng các thủ thuật khác nhau như là Backdoor hay Reentrancy. Với Backdoor, hiểu nôm na là một vài công ty crypto khi đã lấy được lòng tin và có được một lượng lớn người đầu tư, họ sử dụng "cửa hậu" (backdoor) trong các mã code của hợp đồng thông minh nhằm đánh cắp số lượng tiền mã hóa từ các nhà đầu tư nhằm bán ra khi giá đồng token đang cao.  

Are You Sure There is No Backdoor to Your Coins?
Backdoors aren’t ever noticed by the everyday users of a cryptocurrency/platform. There are still plenty of points at which centralisation can re-enter and exert control.
https://cryptonews.com/exclusives/are-you-sure-there-is-no-backdoor-to-your-coins-2415.htm

Với Reentrancy các bạn có thể tham khảo thêm qua bài viết này

Known Attacks - Ethereum Smart Contract Best Practices
Ethereum Smart Contract Security Best Practices
https://consensys.github.io/smart-contract-best-practices/known_attacks/

Solidity là gì?

Solidity là ngôn ngữ lập trình bậc cao (high-level programming language) được phát triển bởi Ethereum Foundation nhằm mục địch phát triển các hợp đồng thông minh. Solidity có cú pháp khá tương đồng với Javascript. Các nhà phát triển có kinh nghiệm với Javascript và Java từ trước sẽ thấy Solidity rất dễ để tiếp cận. Các chương trình được biên dịch từ Solidity sẽ được chạy trên nền EVM hay Ethereum Virtual Machine.

Bên cạnh Solidity, còn một số ngôn ngữ lập trình khác được sử dụng trên EVM như là Vyper hay Yul (tiền thân của Solidity, là ngông ngữ bậc thấp nhằm tối ưu các chương trình chạy trên EVM). Vì mình chỉ biết mỗi Solidity nên mình sẽ không để cập đến 2 thằng "anh em" kia trong series này nhé 😁

Smart contract languages | ethereum.org
An overview and comparison of the two main smart contract languages – Solidity and Vyper.

Với mỗi hệ sinh thái khác nhau, sẽ có các ngôn ngữ khác nhau được sử dụng để viết hợp đồng. Trong Ethereum thì là Solidity, trong Cosmos thì là Rust. Ít nhất cho đến hiện tại, Solidity được sử dụng kha khá bởi một số mạng blockchain, sở dĩ một số các mạng lưới blockchain về sau được xây dựng từ mã nguồn của Ethereum hoặc được xây dụng nhằm tương thích với EVM. Có thể kể đến như là Binanace Smart Chain, Ethereum Classic, Tron...


Môi trường phát triển (IDE)

Integrated Development Environment (IDE) hay môi trường phát triển tích hợp là công cụ cần thiết để phát triển bất cứ ứng dụng hay chương trình máy tính nào. Với Solidity, có rất nhiều IDE hỗ trợ lập trình viên làm việc. Có thể kể đến Remix IDE, một IDE trực tuyến được phát triển bởi Ethereum. Một số lợi ích mà Remix IDE mang lại có thể kể đến như là compile, deploy mã Solidity hay tích hợp testnet cùng với Web3. Vì làm việc trực tiếp ngay trên trình duyệt, lập trình viên cũng có thể làm việc với ví MetaMask (mình sẽ giới thiệu về các ví tiền ảo ở tập sau nhé).

Giao diện của Remix IDE cùng với MetaMask

Để làm quen với Solidity, các bạn nên sử dụng Remix IDE nhằm tiết kiệm thời gian cấu hình môi trường. Tuy nhiên, trong các dự án thực tế, để có thể phát triển được một ứng dụng hoàn chỉnh thì Solidity chỉ là một phần nhỏ, chúng ta còn phải làm việc với các phần như front-end và back-end, mình khuyến khích các bạn sử dụng Microsoft Visual Studio Code khi đã làm quen với Solidity.

Extension của Solidity trên VS Code

Ở bài viết sau, chúng ta sẽ cùng đào sâu vào ngôn ngữ Solidity trên Remix IDE. Sau một vài tập đầu của bài viết, mình hi vọng các bạn sẽ thích bài viết này và ủng hộ Góc Của Chung để mình có động lực viết các bài viết chất lượng hơn nhé ♥🤟.

Subscribe to Tin Chung's Blog

Sign up now to get access to the library of members-only issues.
Jamie Larson
Subscribe