Smart Contract và Remix IDE
Bài đăng này đã không được cập nhật trong 6 năm
Xin chào các bạn, mưa quá. Cũng có chút không khi của mùa đông rồi. Hôm nay mình sẽ giới thiệu đến các bạn một công cụ để lập trình Smart Contract theo kiểu mì ăn liền đó là Remix IDE(Các bạn hãy nhớ gõ thêm IDE vào nhé. Gõ Remix không nó chỉ ra nhạc thôi ).
1. Smart Contract
Hợp đồng thông minh(Smart Contract) là một giao thức quản lý hợp đồng Smart contract là một bộ giao thức đặc biệt với mục tiêu là để đóng góp, xác nhận hay tiến hành quá trình đàm phán hay thực hiện hợp đồng. Smart contract giúp chúng ta thực hiện giao dịch mà không phải thông qua một kênh thứ 3. Nhưng giao dịch này hoàn toàn dễ dàng truy dấu và không thể bị can thiệp hoặc bị đảo chiều. Smart contract chứa trong mình toàn bộ những thông tin chi tiết về các điều khoản và cách thưc hiện chúng một cách tự động.
2. Smart Contract hoạt động như thế nào?
Smart Contract có các vận hành giống như những auto-robot. Hay cũng có thể nói các hợp đồng này hoạt động rất giống với lĩnh vực RPA(Robotic Process Automation). Mọi thứ được lập trình sẵn và sẽ tự động vận hành mà không có tác động của bất kì bên nào. Đầu tiên, tài sản và các điều khoản được mã hóa vào một block thuộc Blockchain. Smart Contract này sẽ phân phối và sao chép lại bởi các node hoạt động trên nền tảng đó. Sau khi được triển khai thì hợp đồng sẽ được triển khai theo đúng các điều khoản định sẵn. Đồng thời Smart Contract cũng sẽ tự động kiểm tra quá trình thực hiện những cam kết nêu trong hợp đồng.
3. Những điều cần có để lập nên một smart-contract
• Chủ thể hợp đồng: Chương trình phải được cấp khả năng truy cập đến sản phẩm/dịch vụ liệt kê trong hợp đồng để có thể tự động khóa hay mở khóa chúng.
• Chữ kí điện tử: Tất cả các bên tham gia đồng ý triển khai thỏa thuận bằng các khóa cá nhận của họ(private keys).
• Điều khoản hợp đồng: Điều khoản của smart contract có dạng một chuỗi các hoạt động. Các bên tham gia hợp đồng đều phải ký chấp nhận nó. Smart contract sau khi hoàn tất sẽ được tải lên Blockchain của nên tảng phần quyền tương ứng và được phần phối về cho các node của nền tảng ấy.
4. Ưu - nhược điểm của Smart contract
Smart contract đã sử dụng được tất cả những điểm mạnh của công nghệ Blockchain
• Tính bảo mật Smart contract được mã hóa và phần phối về cho các node. Các thứ này bảo đảm nó sẽ không bị thất lạc hay sửa đổi mà không được bạn cho phép.
• Hiệu quả về kinh tế và nhanh gọn Hầu hết các công đoạn đều được tư động hóa, và gần như loại bỏ bên trung gian.
• Tiêu chuẩn hóa
Tuy nhiên vẫn có những nhược điểm :
• Nhân tố con người Vì toàn bộ phần mã được soạn thảo bởi con người và họ vẫn có thể mắc lỗi. Nếu smart contract đã được tải lên Blockchain, các nhà lập trình sẽ không thể nào thay đổi được nó. Một ví dụ nổi tiếng về nhận tố con người đó chính là sự kiện DAO. Lỗi lập trình đã bị một số tin tặc phát hiện và tận dụng, từ đó cướp đoạt đến 60 triệu tiền vốn của người dung.
• Tình trạng pháp lý chưa rõ ràng Hiện tại, Smart Contract vẫn chưa được quản lí bởi bất kì chính phủ nào cả. Vì thế cho nên vẫn tiềm ẩn khả năng xuất hiện mâu thuẫn nếu như các thể chế quả lí quyết định xây dựng bộ khung pháp lý dành cho hình thức smart contract còn khá mới mẻ này.
• Chi phí thực hiện Smart Contract không thể nào được lập nên mà không cần thông qua công đoạn lập trình. Do đó, điều cần thiết là phải có một chuyên gia lập trình dày dạn kinh nghiệm trong đội ngũ phát triển để hạn chế tối đa những sai sót có thể xảy ra đối với hợp đồng và bảo đảm cơ sở hạ tầng của công ty tương thích được với công nghệ Blockchain.
5. Tại sao cần Smart Contract
Trong thực tế, việc sử dụng một bên thứ ba đứng ra giải quyết các công việc đang rất phổ biến hiện nay. Tuy nhiên, việc đảm bảo các điều khoản trong hợp đồng có được người thứ ba giải quyết đúng không lại là một chuyện khác. Đó là lí do ra đời của Smart Contract. Các điều khoản hợp đồng được mã hóa và đưa lên chuỗi khối. Điều này có nghĩa là mọi thứ được minh bạch và không thể thay đổi. Cả hai bên đều có thể theo dõi và quan sát quá trình hoạt động của Smart Contract.
Ví dụ :
Quá trình mua bán trên mạng, khi bạn muốn mua một sản phẩm có giá trị. Người yêu cầu muốn bạn đặt cọc một số tiền để chắc chắn bạn mua trước khi chuyển hàng.
Khi đó bạn có thể chuyển khoản trực tiếp cho người bán(rủi ro khi người bán ôm luôn tiền cọc biến mất) hoặc có thể nhờ một bên trung gian cầm hộ tiền và nhận hộ hàng, sau đó người này sẽ giao lại tiền cho người bán và hàng cho bạn(cũng rủi ro nha khi mà lòng tham lên tiếng),...
Với Smart Contract, bạn đơn giản có thể lập trình một contract cho việc mua bán này theo concept như sau. Sử dụng tiền điện tử làm đơn vị tiền để giao dịch. Khi bạn chấp nhận mua hàng, tiền điện tử(tương ứng với giá trị sản phẩm sẽ được gửi lên Smart Contract). Sau thời gian giao hàng mà không có xác nhận của bạn, số tiền sẽ tự động quay trở lại ví của bạn. Nếu hàng giao đến nơi an toàn, bạn gửi xác nhận lên Smart Contract và tiền trên Smart Contract sẽ chuyển qua tài khoản của người bán an toàn. Toàn bộ code Smart Contract đều được public để các bạn kiểm tra luồng hoạt động của quá trình.
Tuy đây là một ví dụ đơn giản chưa thể giải quyết được hết các trường hợp rủi ro của mua bán online, thương mai điện tử nhưng rõ ràng là nó đã an toàn hơn phương pháp truyền thống rất nhiều.
Một ví dụ khác nữa là Game CrytoKitties. Bạn chơi game mua, bán, cho hai con mèo xxx để ra một con mèo mới,... tất cả code liên quan đến luồng hoạt động của game bạn đều có thể xem tại (https://etherscan.io/address/0x06012c8cf97bead5deae237070f9587f8e7a266d#code). Bạn có thể xem các giao dịch trong game đã xảy ra(Tất nhiên ai là người thực hiện giao dịch này được bảo mật), có thể xem full code, các loại token được dùng cho Game. Một trò chơi đột phá khi ứng dụng Smart Contract, chuẩn token ERC721.
6. Lập trình Smart Contract - Remix IDE
“Tại sao lại phải Solidity? Javascript chẳng phải gần như làm được mọi thứ sao?”. Về căn bản đúng là như thế, tuy nhiên những gì bạn viết và chạy trên Javascript hay những ngôn ngữ truyền thống như: C#, ASP.NET,… đều là “centralization”. Tức là bạn có quyền điều khiển những số liệu và bạn có thay đổi thì cũng không ai biết được. Còn Solidity không cho phép điều đó. Về ngôn ngữ Solidity thì đối với các bạn có nền tảng Javascript sẽ có thể học nhanh hơn vì đây là ngôn ngữ kết hợp giữa Javascript và hướng đối tượng.
Remix IDE là một công cụ online hỗ trợ các bạn muốn lập trình Smart Contract ngay lập tức tại trang web: https://remix.ethereum.org.
Trang web hỗ trợ bạn tạo file với đuôi .sol.
Compile với các phiên bản từ cũ nhất đến mới nhất của solidity. Có phần console log các lỗi cú pháp, fomat code,... các cảnh báo và các phần compile thành công
Hỗ trợ các bạn deploy Smart Contract với:
- JavaScriptVM
- Injected Web3
- Web3 Provider
Nếu việc deploy thành công, bạn hoàn toàn có thể test các function của mình một cách dễ dàng ở phần bên dưới và theo dõi quá trình hoạt động của các transaction với console log.
7. Thực hành một chút nào
Hãy truy cập vào trang chủ của Remix nhé
Đây sẽ là giao diện khi bạn vào
Cột bên trái sẽ là nơi quản lí file của các bạn. Sẽ không có phần tạo folder nên nếu tạo quá nhiều file trông sẽ hơi lom nhom. Solidity là ngôn ngữ hướng đối tượng nên bạn có thể implement các file vào một file nhé.
Ở phía giữa là phần Code và console log khi chạy các function
Phía bên phải bao gồm rất nhiều chức năng nhưng mình sẽ chỉ nói đến hai phần dùng nhiều nhất đó là Compile và Run
Khi đang ở tab Compile, bạn có thể chọn các phiên bản từ cũ mốc meo đến các phiên bản mới nhất để compile.
Có các tùy chọn như Auto compile (bất kể là sửa cái gì hoặc gõ dấu cách vào cũng compile), hide warning(Đôi khi có quá nhiều cảnh báo kiến bạn khó chịu, mặc dù code vẫn chạy ok, hãy ẩn đi bằng chức năng này), Enable Optimization
Phía dưới đó bạn có thể chọn Smart Contract bạn muốn compile
Cuối cùng là phần show log khi compile.
Khi ở tab Run, bạn có thể chọn các kiểu môi trường để deploy Smart Contract. Mình sẽ sử dụng luôn 2 file sample của Remix để demo phần này.
Chọn môi trường là Injected Web3 để liên kết với ví điện tử tại Metamask.
Do việc deploy Smart Contract cần tốn một ít phí. Nên mình sẽ sử dụng tài khoản tại testnet Ropsten. Các bạn có thể claim ETH free cho việc test ở đây(https://faucet.metamask.io/). Điều này rất quan trọng khi bạn phải test Smart Contract trước khi deploy lên mainnet. Sau khi bạn đăng nhập vào Metamask trang web Remix sẽ tự động load lại nhé. Khi đó phía dưới phần chọn mội trường sẽ xuất hiện các tài khoản trong ví điện tử của Metamask.
Phía dưới nữa là phần chọn Smart Contract sẽ deploy. Khi nhấn vào button deploy sẽ tiền hành tạo giao dịch cần xác nhận để deploy Smart Contract lên hệ thống. Tuy nhiên trong hình,bên cạnh button deploy còn có một phần textinput nữa là do Smart Contract sample này yêu cầu nhập đối số để khởi tạo. Bạn cứ nhập một số bất kì vào nhé. Về các kiểu dữ liệu trong solidity các bạn có thể tìm trên mạng để hiểu thêm. Nếu deploy thành công sẽ có giao diện như sau:
Phía bên dưới xuất hiện các function tương ứng của Smart Contract. Các function có button màu hường khi thực hiện sẽ yêu cầu xác nhận giao dịch và mất phí. Các function có button màu xanh nhạt sẽ không tạo giao dịch yêu cầu xác nhận. Các bạn có thể tiền hành thay đổi các đối số để test function hoạt động có ổn không.
Đây là IDE khá tốt cho việc học lập trình solidity và Smart Contract. Tuy nhiên khi ứng dụng Smart Contract vào các ứng dụng có giao diện có phức tạp hơn một chút khi bạn phải liên kết các tương tác giữa các phần: giao diện, Smart Contract, ví điện tử.
Smart Contrac hiện đang đem đến nhiều hứa hẹn giúp giải quyết nhiều bài toán trong thực tế. Còn các bạn nghĩ gì về nó?
Cảm ơn mọi người đã đọc bài viết của mình.
Bài viết có tham khảo các định nghĩa tại: https://cafebitcoin.info/huong-dan/smart-contract-la-gi/ (trong link này có một số thứ hay ho về Smart Contract nữa các bạn có thể vào đọc nhé)
All rights reserved