Hợp đồng thông minh là các đoạn mã có thể lập trình thực thi chỉ khi một tập hợp các điều kiện được đáp ứng. Chúng đồng nghĩa với các hợp đồng thực tế có tính ràng buộc pháp lý; chỉ trong trường hợp này, mã là luật pháp. Khi hợp đồng thông minh đặt trên blockchain, chúng là bất biến — chúng không thể bị can thiệp. Đó là yếu tố bất biến này làm cho hợp đồng thông minh trở nên đặc biệt, ngoài những điều khác.
Hợp đồng thông minhđược thiết kế để tự động hóa các giao dịch cụ thể trên blockchain. Vì chúng là các hợp đồng điều kiện cụ thể, nên chúng không cần trung gian. Điều làm cho hợp đồng thông minh hữu ích là khả năng tương thích của chúng trên một loạt các trường hợp sử dụng, bao gồm các dịch vụ tài chính, quản lý chuỗi cung ứng và nhiều hơn nữa. Và khác với các đoạn mã truyền thống được lập trình một cách nhanh chóng, hợp đồng thông minh đòi hỏi các chiến lược cực kỳ an toàn và tốn thời gian.
Cách hợp đồng thông minh liên kết với công nghệ blockchain: BeInCrypto
“Từ khoá “web3” ngụ ý các thói quen lập trình lỏng lẻo, thiếu an toàn của web. Khi tiền điện tử hoặc hợp đồng thông minh được lập trình giống như một trang web, chúng sẽ bị định mệnh. Các chuỗi khối và ứng dụng của chúng thành công bền vững dựa trên các phương pháp lập trình an toàn, cẩn thận và chậm chạp hơn nhiều.”
Nick Szabo, nhà mật mã học và nhà khoa học máy tính: Twitter
Hợp đồng thông minh có thể hoạt động với các token cụ thể của blockchain, ví dụ như ERC-20 cho blockchain Ethereum, khuyến khích nỗ lực và di chuyển giao dịch. Vì liên quan đến mã code, điều kiện và chi phí, bạn nên cẩn thận khi đọc, viết và kiểm toán chúng.
Điều quan trọng thực sự của hợp đồng thông minh liên quan đến bản chất và vị trí của chúng. Đối với một tình huống cụ thể - ví dụ, một người A chuyển tiền cho người B khi B hoàn thành một dịch vụ - một bản sao của hợp đồng thông minh được lưu trữ và thực thi bởi các nút blockchain. Hợp đồng thông minh được lưu trữ dưới dạng mã hợp đồng trong chuỗi. Việc xác thực đa đường này là một đặc điểm trung tâm của blockchain và giữ cho mọi thứ an toàn.
Ngoài ra, còn tồn tại các hợp đồng thông minh tuần tự hoặc đồng bộ và hợp đồng thông minh không đồng bộnơi các nhiệm vụ được thực hiện song song. Do đó, loại và mục đích của một hợp đồng thông minh xác định cách nó được viết, đọc, hoặc thậm chí được kiểm toán.
Các hợp đồng truyền thống, giấy tờ tài sản, di chúc, vv. đều thuộc pháp luật tư nhân, được "soạn thảo bởi cá nhân tư nhân chứ không phải là chính trị gia hoặc các quan chức chính phủ." Hợp đồng thông minh là một dạng mới của việc đưa ra quy định phi tập trung như vậy.https://t.co/EU2Y28FznK
— Nick Szabo ( @NickSzabo4) 15 tháng 3 năm 2018
Hãy xem xét một hồ bơi thanh khoản được quản lý bằng hợp đồng thông minh tiêu chuẩn.
Hãy tưởng tượng rằng hồ bơi token có thể được sử dụng để giao dịch, và mỗi khi có một giao dịch thành công xảy ra, 0.3% giá trị giao dịch tổng được gửi đến nhà cung cấp thanh khoản đã làm cho giao dịch đó trở nên có thể hoặc đã thêm thanh khoản cho tài sản có thể giao dịch đó. Tất cả các điều kiện nổi bật về các tình huống giao dịch, phí giao dịch và điều kiện không tuân thủ và thất bại giao dịch được mã hóa thành một Hợp đồng thông minh, được lưu trữ trong chuỗi dữ liệu dưới dạng mã hợp đồng.
Chúng ta không thể đào sâu vào việc đọc, viết và kiểm toán hợp đồng nếu chúng ta không nhận biết được những đặc điểm của chúng. Dưới đây là những đặc điểm tiêu chuẩn của hợp đồng thông minh mà cần nhận thức.
Một số đặc điểm của một hợp đồng thông minh tiêu chuẩn: BeInCrypto
Hợp đồng thông minh chỉ là các đoạn mã. Bạn có thể viết hợp đồng thông minh để thực hiện các lệnh và kịch bản dựa trên các điều kiện cụ thể. Đây là lý do tại sao các nhà phát triển hợp đồng thông minh và lập trình viên hiện đang được tìm kiếm, vì hầu hết các DeFispace already relies on Hợp đồng thông minh to process complex instances like handling trading fees across liquidity pools, maintaining APYtỷ lệ, và nhiều hơn nữa.
Các hợp đồng thông minh đặt trên blockchain loại bỏ sự can thiệp của con người. Điều này khiến chúng hoàn toàn không cần tin cậy. Ví dụ, nếu một DeFiGiao thức, được quản lý bởi hợp đồng thông minh, đồng ý thanh lý tài sản của bạn khi giá trị giảm xuống dưới ngưỡng, không có can thiệp của con người nào có thể hoặc nên ngăn chặn nó. Mã xử lý thanh toán, hiệu suất, quản lý và thực thi quy định, khiến cho toàn bộ không gian trở nên hoàn toàn không tin cậy.
Như đã đề cập trước đó, hợp đồng thông minh được tải với các bộ chỉ thị tự thực thi. Trong thuật ngữ lập trình, điều này có nghĩa là có các vòng lặp được xây dựng trong mẫu mã cơ bản. Điều này đảm bảo rằng các nhiệm vụ như thanh toán, rút tiền, gửi tiền, xử phạt các nhà xác thực thông qua cắt giảm, và một số nhiệm vụ khác được xử lý tự động.
Và cuối cùng, vì hợp đồng thông minh được bảo vệ bằng mật mã, việc xâm nhập chúng là vô cùng khó khăn. Mà không có lỗ hổng tích hợp, vượt qua một hợp đồng thông minh sẽ có nghĩa là cố gắng xâm nhập vào nó trên mặt trận, trước mắt toàn bộ blockchain.
Các giao dịch được xử lý thông qua hợp đồng thông minh có thể tự xác minh. Điều này có nghĩa là việc thực hiện là bằng chứng đủ rằng giao dịch đã xảy ra từ ban đầu, vì không có yếu tố con người nào tham gia. Cơ chế tự xác minh này mang lại lợi thế cho hợp đồng thông minh so với các hợp đồng truyền thống quản lý các hệ thống ngân hàng cổ điển.
Vì vậy, lần tới khi bạn có kế hoạch đọc một hợp đồng thông minh, hãy đảm bảo rằng bản mẫu hoặc tài liệu có tất cả các đặc điểm được đề cập liên quan.
Một phiên bản đơn giản của hợp đồng thông minh: Reddit
Đây là một hợp đồng thông minh đơn giản đại diện cho một tài khoản ủy thác. Người dùng gửi tiền của họ vào tài khoản ủy thác, sau đó tài khoản chuyển số tiền đó cho người nhận sau một khoảng thời gian nhất định.
/ SPDX-License-Identifier: MITpragma solidity ^0.8.0;// Basic Smart Contract Boilerplatecontract SimpleTrustlessEscrow {// Biến trạng tháiđịa chỉ người gửi tiền công khai; // Tài khoản gửi etheraddress phải trả người thụ hưởng công cộng; // Tài khoản nhận etheruint256 phát hành công khaiTime; // Dấu thời gian để phát hành ether// Sự kiện xác minh hoạt động hợp đồngsự kiện Deposited(địa chỉ được lập chỉ mục _from, uint256 _value); sự kiện Released (địa chỉ được lập chỉ mục _to, uint256 _value);// Người xây dựng hợp đồng khởi tạo hợp đồng thông minh (địa chỉ phải trả _beneficiary, uint256 _releaseTime) { require(_releaseTime > block.timestamp, "Thời gian phát hành phải trong tương lai"); An toàn và không tin cậy: Hợp đồng ràng buộc người gửi tiền và người gửi tiền thụ hưởng = msg.sender; người thụ hưởng = _beneficiary; Thời gian phát hành = _releaseTime;}Hàm tiền gửi – thực thi tự động (hàm dự phòng)receive() bên ngoài phải trả {emit Deposited(msg.sender, msg.value);}Phát hành ether cho beneficiaryfunction release() public { // Lập trình: Chỉ có thể được thực thi sau khi releaseTime require(block.timestamp >= releaseTime, "Quá sớm để phát hành"); Tự chủ: Tự động thực hiện dựa trên điều kiện uint256 amount = address(this).balance; người thụ hưởng.transfer(số tiền); phát hành (người thụ hưởng, số tiền);}}
Trong khi chúng tôi sẽ giải mã và đọc hợp đồng thông minh này một cách cẩn thận, hãy kiểm tra xem nó có tuân thủ các đặc điểm hợp đồng đã đề cập hay không trước.
Xem xét kỹ hợp đồng cho đoạn mã này:
require(block.timestamp >= releaseTime, “Quá sớm để phát hành”);
uint256 số dư = địa chỉ(này).cân nặng;
beneficiary.transfer(amount);
Các quỹ chỉ được phát hành khi điều kiện thời gian phát hành cụ thể được đáp ứng, tạo ra các hợp đồng có thể lập trình được.
Dưới đây là một đoạn mã nhanh từ trên
depositor = msg.sender;
người hưởng lợi = _beneficiary;
releaseTime = _releaseTime;
Trong hợp đồng, mọi người đều bị ràng buộc bởi mã từ người gửi tiền đến người nhận tiền. Không ai cần phải tương tác hoặc tin tưởng vào người khác vì chức năng chuyển tiền được ràng buộc bởi releaseTime - một tham số dựa trên mã.
Dưới đây là phần “giải phóng quỹ” của mã code:
function release() public {require(block.timestamp >= releaseTime, “Quá sớm để phát hành”);uint256 amount = address(this).balance;beneficiary.transfer(amount);emit Released(beneficiary, amount);}
Toàn bộ quy trình là tự động, vì quỹ chỉ được phát hành khi thời gian phát hành đáp ứng một tiêu chí cụ thể. Lưu ý rằng mã không phải là có thể lập trình một phần mà là hoàn toàn tự động.
Các phần khác của mã hợp đồng thông minh, bao gồm cả chức năng gửi tiền, cũng có thể được thực hiện hoàn toàn tự động tùy thuộc vào các tính năng mà bạn muốn bao gồm. Ví dụ, bạn có thể bắt đầu một kế hoạch gửi tiền định kỳ mỗi khi người dùng của bạnví vượt qua $ 100, với số tiền vượt quá chuyển đến người thụ hưởng.
Lo lắng về yếu tố nào mà cho vay bảo mậtđến hợp đồng? Kiểm tra phần này của mã:
constructor(địa chỉ phải trả _beneficiary, uint256 _releaseTime) {require(_releaseTime > block.timestamp, "Thời gian phát hành phải trong tương lai"); người gửi tiền = msg.sender; người thụ hưởng = _beneficiary; Thời gian phát hành = _releaseTime;}
Chú ý là có một sự ưu tiên cố định của chức năng releaseTime liên quan đến dấu thời gian. Không có gì là ngẫu nhiên, và điều kiện phải được đáp ứng.
Mỗi giao dịch liên quan đến hợp đồng thông minh đều được ghi lại trong chuỗi, nhờ vào các yếu tố hoạt động nhật ký riêng biệt.
sự kiện Đã gửi (địa chỉ được lập chỉ mục _from, uint256 _value);
Sự kiện Phát hành(address indexed _to, uint256 _value);
emit Đã Gửi(msg.sender, msg.value);
emit Released(beneficiary, amount);
Bây giờ chúng ta đã xác định các yếu tố xác định đặc điểm của một hợp đồng thông minh, dưới đây là các yếu tố hợp đồng khác để giúp bạn hiểu rõ hơn vấn đề.
Pragma solidity ^0.8.0; – Phiên bản của ngôn ngữ lập trình Solidity cần thiết để viết hợp đồng thông minh này.
// SPDX-License-Identifier: MIT - Được gọi là Gói Dữ liệu Trao đổi Phần mềm, mã này xác định giấy phép của mã nguồn được phát hành. Đề xuất bao gồm mã này để cho mọi người biết liệu nó có phải mã nguồn mở và có thể được làm việc xung quanh hay không.
Contract TimeLock { – Gán tên cho hợp đồng thông minh, giống như một nhãn.
Địa chỉ công khai của người gửi tiền; - Khi hợp đồng liên quan đến người gửi tiền và người hưởng, đây là điểm mà địa chỉ công khai của người gửi tiền được đề cập. Biến này là Ví Ethereum địa chỉ và có thể xem công khai.
Địa chỉ công cộng có thể thanh toán của người hưởng; - Đây là địa chỉ công cộng của người hưởng nơi mà người giữ tiền chuyển tiền. Nó cũng có thể đọc được và tạo cảm giác minh bạch cho các hợp đồng thông minh được hỗ trợ bởi blockchain.
Uint256 public releaseTime; – Vì đây là một hợp đồng mang tính thời gian, uint256 sẽ gán biến được dựa vào thời gian cho hợp đồng. Điều này sẽ là khung thời gian theo đó việc phát hành quỹ sẽ diễn ra.
Trong Solidity, uint (số nguyên không dấu) là cách để gán các giá trị dựa trên số nguyên. Hậu tố 256 đại diện cho việc lưu trữ số lớn.
sau 5 năm viết hợp đồng thông minh, tôi chỉ nhận ra hôm nay rằng biểu tượng solidity chính là biểu tượng ethereum được mở ra 🤯pic.twitter.com/wlM369Eff9
— kaden.eth ( @0xKaden) Ngày 8 tháng 7 năm 2023
Bạn có thể xem xét đọc Tài liệu Solidityđể hiểu cú pháp, biểu thức và các yếu tố mã code khác.
constructor(address payable _beneficiary, uint256 _releaseTime) { – Hàm “Constructor” là một hàm đặc biệt chỉ được gọi một lần khi hợp đồng thông minh được triển khai. Nó đặt hợp đồng vào chuyển động. Lưu ý là tại điểm này, tất cả các biến địa chỉ mà chúng ta đã khai báo trước đó đều được gọi và khởi tạo.
Receive() external payable { – Đây là một hàm đặc biệt được gọi khi có quỹ chuyển đến địa chỉ hợp đồng từ bên ngoài. External cho biết từ bên ngoài, và “Payable” xác định tính chất của việc chuyển động, tức là, để nhận các token ERC-20.
Hàm release() công cộng { - Đây là một hàm công cộng xác định việc chuyển động của các token ERC-20 từ địa chỉ hợp đồng đến người hưởng. Hàm này phụ thuộc vào releaseTime.
Tất cả những yếu tố này đều là phần của hợp đồng Khoản đặt cọc giả định mà chúng ta đã thảo luận. Đảm bảo bạn đọc toàn bộ tài liệu Solidity để hiểu rõ hơn về ngôn ngữ.
Biết những yếu tố trước khi bạn lên kế hoạch viết hợp đồng thông minh: BeInCrypto
Hiện tại, bạn nên đã có một lợi thế trong việc đọc và hiểu một hợp đồng thông minh đã được viết sẵn. Và nhiều hợp đồng thông minh như những cái mà chúng tôi đã thảo luận tạo nên phần backend của một ứng dụng phi tập trung — một Blockchainphiên bản của một ứng dụng di động tiêu chuẩn.
Mọi đặc điểm của một hợp đồng thông minh, bao gồm bảo mật hợp đồng, thực thi tự động và có thể lập trình, tính không tin cậy của giao dịch, và nhiều hơn nữa, được triển khai một cách dễ dàng trong quá trình phát triển ứng dụng phi tập trung. Vì vậy, lần tới khi bạn gặp phải một DApp, hãy lưu ý rằng đó là một phần mềm backend được hỗ trợ bởi hợp đồng thông minh trên blockchain - giúp bạn khởi đầu nhiều nhiệm vụ mà không cần can thiệp của con người. Hợp đồng thông minh tạo nên logic của DApps.
Chúng ta biết rằng Ethereum cho phép bạn phát triển hợp đồng thông minh, giống như một giải pháp phần mềm khổng lồ. Tuy nhiên, đó không phải là giao thức blockchain duy nhất. Nếu bạn muốn đào sâu vào thế giới phát triển hợp đồng thông minh, bạn có thể muốn xem xét các blockchain khác. Các blockchain khác nhau có các thuật ngữ khác nhau khi đến việc xây dựng các hợp đồng.
Nhưng trước tiên, hãy thảo luận Ethereum — nền tảng được sử dụng phổ biến nhất cho hầu hết các nhà phát triển hợp đồng thông minh.
Hợp đồng thông minh trên Ethereum được viết bằng ngôn ngữ lập trình Solidity. Và giao diện token cho nền tảng phát triển hợp đồng thông minh này là ERC-20.
Bạn có thể quay trở lại hợp đồng thông minh dựa trên Escrow mà chúng ta đã thảo luận trước đó để xem hợp đồng thông minh dựa trên Etheruem tiêu chuẩn được viết như thế nào.
Ngay cả việc phát hành một token ERC-20 trên blockchain Ethereum cũng là một tính năng dựa trên hợp đồng thông minh, điều chúng ta sẽ thảo luận kỹ lưỡng khi viết một hợp đồng thông minh.
Dưới đây là cấu trúc mã cơ bản trông như thế nào, miễn là chúng ta có kế hoạch ra mắt một loại tiền điện tử mới là BIC.
Hãy coi đây như một kịch bản giả tưởng. Không chính xác là ra mắt một loại tiền điện tử BIC.
pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract BICToken is ERC20 { constructor(uint256 initialSupply) ERC20("BIC Token", "BIC") { _mint(msg.sender, initialSupply); }}
Chúng ta sẽ thảo luận về mọi yếu tố của đoạn mã này sau khi viết hợp đồng thông minh của chúng ta.
Như Ethereum, bạn cũng có thể tạo hợp đồng thông minh trên các nền tảng như Solana, sử dụng Rust và Cardano, sử dụng Plutus, một phần của Haskell — một ngôn ngữ lập trình hàm.
“Có phải Cordona có hợp đồng thông minh không?”
Jokes on you, pal. #CardanoADA pic.twitter.com/j8SXCu72Sd
- Willybot 🇦🇺 (@wilbot28)Tháng Bảy 9, 2023
Đây là cấu trúc mã trong Rust (Solana) trông giống như:
Lưu ý: Đó là một hợp đồng đơn giản nơi một bộ đếm được tăng lên.
use anchor_lang::prelude::*;declare_id!(“Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS”);#[program] pub mod hello_world {use super::*;pub fn initialize(ctx: Context<Initialize>) -> ProgramResult { let greeting_account = &mut ctx.accounts.greeting_account; greeting_account.counter = 0; Ok(())}pub fn increment(ctx: Context<Increment>) -> ProgramResult { let greeting_account = &mut ctx.accounts.greeting_account; greeting_account.counter += 1; Ok(())}}
Bạn có biết không? Trong khi Rust là ngôn ngữ lập trình để tạo các hợp đồng thông minh dựa trên Solana, Móc neolà khung phát triển hợp đồng thông minh được sử dụng. Để tạo các hợp đồng thông minh bằng Rust, các nhà phát triển cần kéo các module từ khung Anchor - điều gì đầu tiên trong mã mẫu của chúng tôi (sử dụng anchor_lang::*;) đại diện cho.
Tài liệu Solanasẽ giúp bạn hiểu ngôn ngữ hợp đồng thông minh cụ thể cho Rust.
Tương tự, Cardano tuân theo Plutus như lựa chọn ngôn ngữ, tiếp theo là ngôn ngữ Ink!Polkadot, TEAL cho Algorand, C# cho NEO, và nhiều hơn nữa. Việc học tài liệu theo chuỗi mạng chi tiết là đáng khuyến khích trước khi tiến hành viết hợp đồng thông minh tương thích.
Khả năng viết hợp đồng thông minh được công nhận cao, nhưng ngay cả việc đọc cũng mang lại nhiều lợi ích:
Bây giờ khi việc đọc hợp đồng thông minh đã qua, hãy tập trung vào việc viết hợp đồng thông minh. Trước khi bạn đào sâu vào, cần nhấn mạnh rằng các chuỗi khối khác nhau có thể có các tiêu chuẩn và ngôn ngữ khác nhau liên quan đến phát triển hợp đồng thông minh. Cần tập trung vào các tiêu chuẩn được xác định bởi bất kỳ chuỗi khối cụ thể nào, để bắt đầu viết và triển khai hợp đồng.
Đối với phần lớn cuộc thảo luận của chúng ta, chúng ta sẽ tập trung vào Ethereum như là chuỗi và Solidity như là ngôn ngữ.
Việc lập trình hợp đồng thông minh dễ dàng là phần quan trọng nhất của chu kỳ phát triển. Và để tham gia vào việc phát triển hợp đồng thông minh trên Ethereum hoặc bất kỳ blockchain nào khác, bạn nên có một số kinh nghiệm với các ngôn ngữ lập trình non-blockchain như Javascript.
Các chuỗi khối khác nhau và ngôn ngữ để viết hợp đồng thông minh: BeInCrypto
Khả năng lập trình một hợp đồng thông minh cho phép bạn triển khai logic, xử lý các yếu tố bảo mật của nó, tối ưu hóa mã cho phí gas, tùy chỉnh cùng, và thậm chí làm cho chúng tương thích nếu cần thiết.
Bất kỳ ai đang có kế hoạch viết hợp đồng thông minh trên Ethereum cần hiểu Ethereum Virtual Machine (EVM) là gì và làm thế nào nó hoạt động với hợp đồng thông minh. Đầu tiên, EVM là một thành phần của Ethereum cung cấp môi trường cách ly và kiểm soát cho chương trình hoạt động. Hãy xem xét đây là một máy tính toàn cầu chứa mọi đoạn mã hợp đồng trên Ethereum. Mỗi nodetrên mạng Ethereum chạy EVM.
Nếu bạn đang ấp ủ trở thành một nhà phát triển hợp đồng thông minh, đây là những gì bạn cần biết về hợp đồng thông minh và EVM.
Sau khi bạn viết chương trình bằng Solidity, đây là một ngôn ngữ cấp cao, bạn cần biên dịch nó thành bytecode - một định dạng cấp thấp mà máy tính có thể hiểu được. Bytecode này sẽ được đưa vào blockchain Ethereum và lưu trữ ở đó. Bất kỳ ai tương tác với hợp đồng thông minh đều cần gửi một giao dịch đến địa chỉ của hợp đồng.
Mọi nút với EVM được cài đặt có thể thấy giao dịch này, và một khi các nhà xác minh chấp nhận điều này, mã hợp đồng thông minh sẽ được thực thi. Khi mỗi nút có khả năng nhìn thấy giao dịch, không có gì có thể bị can thiệp, và mã được thực thi như đã được viết. Và khi mã được thực thi, trạng thái của blockchain thay đổi, làm cho quy trình trở nên toàn diện và hoàn toàn minh bạch.
Viết hợp đồng thông minh đòi hỏi kiến thức kỹ thuật. Nhưng đó chưa phải là tất cả. Bạn cũng cần hiểu rõ cách công nghệ blockchain hoạt động, những nhu cầu cụ thể về ngôn ngữ liên quan đến blockchain mà bạn đang nhắm tới, tính tương tác, và nhiều hơn nữa. Ngoài ra, bạn cũng nên biết một phần không nhỏ về các lỗ hổng của hợp đồng thông minh — những điều cần tránh khi viết mã. Và cuối cùng, kiến thức về kiểm thử hợp đồng và triển khai hợp đồng cũng là điều cần thiết.
Tất cả những điều đó có thể trở nên áp đảo. Vì vậy đây là một tờ ghi nhớ nhanh để bắt đầu:
Dưới đây là một chuỗi nhanh với một số mẹo để viết hợp đồng thông minh tốt hơn:
🥧 FREI-PI
‼️ Tại sao các nhà phát triển hợp đồng thông minh CẦN phải biết điều này!
Chức năng:
– Yêu cầu
– Hiệu ứng
– Tương tác
Giao thức
– Invariants
Đây là mẫu bạn nên suy nghĩ khi xây dựng hợp đồng thông minh.
Đây là lý do tại sao 👇
— Patrick Collins ( @PatrickAlphaC)6 tháng 7 năm 2023
Đã đến lúc bắt đầu vào các khía cạnh kỹ thuật của việc phát triển hợp đồng thông minh. Mặc dù các chuỗi như Solana và Cardano cho phép bạn phát triển hợp đồng thông minh, Ethereum vẫn tiếp tục là nền tảng phát triển hợp đồng thông minh phổ biến nhất.
Bạn có biết không? Chỉ trong năm 2022, đã có hơn 100.000 ứng dụng phi tập trung được đưa lên mạng lưới Ethereum.
Ethereum có một cộng đồng lớn của các nhà phát triển. Mọi thứ bạn phát triển sẽ ngay lập tức thu hút sự chú ý. Ngoài ra, ngôn ngữ bản địa của nó, Solidity, khá dễ dàng đối với những người biết cách sử dụng Python hoặc JavaScript. Cuối cùng, phần mềm toàn cầu của Ethereum, EVM, giúp thực hiện hợp đồng một cách mượt mà.
Nếu bạn thuộc đa số và thích sử dụng Ethereum và Solidity, đây là một danh sách nhanh về những điều bạn cần theo dõi trước khi bắt đầu phát triển hợp đồng thông minh:
Bây giờ chúng ta đã biết cách mọi thứ diễn ra trên chuỗi, hãy bắt đầu viết và triển khai hợp đồng thông minh đầu tiên. Mặc dù “Xin chào thế giới” vẫn là bước đầu tiên, chúng ta sẽ bắt đầu bằng cách tạo một hợp đồng thông minh để phát hành một token BIC giả định với nguồn cung 100% mở khóa là 1 triệu.
Bước đầu tiên là cài đặt phiên bản mới nhất của Node.js và NPM hoặc Node Package Manager. Điều này giải quyết các công cụ phát triển và môi trường cục bộ cho việc phát triển. Ngoài ra, Node.js và NPM cho phép bạn thiết lập giao diện web cho hợp đồng thông minh của bạn.
Bây giờ, bạn cần thiết lập một IDE để viết mã hợp đồng. Để làm điều đó, bạn có thể nhanh chóng cài đặt Visual Studio Code. Hoặc bạn có thể cắt bớt rốihop trên Alchemy - một nền tảng phát triển blockchain. Với Alchemy, bạn có thể nhận được một số ETH testnet. Điều này sẽ bao gồm phí gas khi bạn triển khai hợp đồng thông minh cho testnet Goerli hoặc thậm chí là testnet Sepolia.
Lưu ý rằng Sepolia là một testnet trẻ hơn và do đó tốn ít không gian ổ đĩa hơn khi triển khai node.
Hiện tại, chúng tôi sẽ tiếp tục với Goerli testnet vì nó có số lượng ứng dụng triển khai lớn hơn.
Với mạng thử nghiệm và ETH giả sẵn sàng, hãy chuyển sang viết cụ thể hợp đồng thông minh. Đây là đoạn mã để tạo token BIC với nguồn cung cố định 1 triệu.
Lưu ý: Chúng tôi sẽ triển khai hợp đồng thông minh của mình cục bộ trên MacOS và không phải là mạng thử nghiệm. Đối với việc triển khai hợp đồng thông minh trên mạng thử nghiệm và mạng chính, chúng tôi sẽ có một phần riêng, nằm ngoài phạm vi của cuộc thảo luận này.
Đây là đoạn mã đơn giản cho token giả định:
pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract BICToken is ERC20 { constructor() ERC20("BIC Token", "BIC") { _mint(msg.sender, 1000000 * 10 ** decimals()); }}
Nếu bạn hiểu về cú pháp, bạn sẽ biết mỗi thành phần mã có ý nghĩa gì. Còn về OpenzepplinTrong một phần, đó là thư viện được sử dụng để nhập các hợp đồng thông minh ERC-20. Thư viện này cung cấp các tiêu chuẩn vận hành cơ bản cho các token ERC-20.
Hàm mint đề cập đến nguồn cung ban đầu, được triển khai đến địa chỉ hợp đồng thông minh hoặc msg.sender.
Để thiết lập mã này địa phương và kiểm tra nó, chúng ta sẽ cần ba thành phần:
Nếu bạn đã trải qua quá trình chi tiết viết một hợp đồng thông minh, việc biết một chút về việc thực thi hợp đồng là cực kỳ quan trọng. Đó là quá trình mà mã hợp đồng thông minh được thực thi trên một chuỗi bởi các nút.
Đó là sự đồng nhất liên quan đến việc thực hiện hợp đồng thông minh làm cho chúng minh bạch và bất biến. Bây giờ hãy hiểu quy trình bước đơn liên quan đến việc thực hiện hợp đồng:
Các đoạn mã mà chúng ta đã viết cần được thực thi ở một nơi nào đó. Trong trường hợp của hợp đồng thông minh, nơi thực thi là blockchain. Các nút hoặc các thành viên tham gia của chuỗi giúp thực thi hợp đồng.
Các nút chấp nhận trách nhiệm thực hiện các khối mã hợp đồng để đổi lấy các động lực liên quan đến chuỗi. Mọi lệnh hoặc hành động diễn ra trong chuỗi đều được dẫn dắt bởi các hợp đồng thông minh.
Mỗi hợp đồng thông minh đều có một địa chỉ cụ thể. Để thực thi hợp đồng, các giao dịch được gửi đến địa chỉ hợp đồng đó. Lưu ý rằng mỗi nút chạy EVM, sau đó có một bản sao của mã hợp đồng thông minh, làm cho việc kiểm tra tính xác thực của các giao dịch trở nên dễ dàng hơn.
Các giao dịch được nhắm đến hợp đồng thông minh được lựa chọn bởi các máy chủ xác thực, sau đó bao gồm chúng vào các khối cụ thể.
Khi giao dịch được đưa qua và được xác thực thành công, nó trở thành một phần của blockchain. Chức năng hợp đồng thông minh liên quan đến giao dịch sau đó được gọi và thực thi trên các nút của blockchain.
Mỗi nút thực thi hợp đồng thông minh nên đạt được một kết luận xác định — cùng một kết quả cho cùng một bộ dữ liệu đầu vào — làm cho bản chất của các hợp đồng hoàn toàn không tin cậy và minh bạch.
Lưu ý: Bất kỳ lỗi nào liên quan đến việc thực thi mã hoặc vấn đề liên quan đến phí gas đều đảo ngược các giao dịch. Điều này có nghĩa là giao dịch dựa trên mã hợp đồng thông minh cụ thể sẽ ngừng tồn tại. Đây chính xác là điều xảy ra với vay flashkhi không thể tuân thủ các quy định cụ thể dẫn đến việc đảo ngược toàn bộ giao dịch, dường như tạo ra ấn tượng rằng tiền không hề di chuyển từ đầu.
Mọi thay đổi trạng thái liên quan đến hợp đồng thông minh sẽ được ghi lại trên blockchain và trở thành một phần không thể thay đổi của nó.
Bây giờ bạn đã biết một chút về hợp đồng thông minh, dưới đây là một số chỉ dẫn để bắt đầu phát triển hợp đồng:
Mỗi trong những phương pháp được đề cập ở trên đều giúp tối ưu hóa mã và triển khai cụ thể về bảo mật. Tuy nhiên, có một số phương pháp cụ thể cho hợp đồng mà bạn phải tuân theo và triển khai để chăm sóc sự bền vững của mã. Điều này nhằm mục đích giữ cho mã hợp đồng nhẹ và có thể sử dụng để mà mọi node chạy và thực thi không cần phải dành nhiều năng lực tính toán cho cùng một điều.
Mặc dù tuân thủ các quy tắc tốt nhất khi viết và phát triển hợp đồng thông minh, nhưng cần tập trung vào các lỗ hổng bảo mật của hợp đồng khi đưa chúng lên mainnet.
Mọi hợp đồng thông minh có mặt trên mainnet cần được đánh giá về hiệu suất mã, bảo mật và các đặc tính khác. Đây là nơi kiểm toán - một quy trình kiểm thử hợp đồng chặt chẽ - đến nổi, cho phép bạn phát hiện ra những lỗ hổng và điểm yếu tiềm ẩn của hợp đồng.
Đây là một danh sách kiểm tra kiểm toán nhanh để bắt đầu:
Danh sách kiểm tra đáng kinh ngạc cho Hợp đồng thông minh😈
Đảm bảo kiểm tra chúng trong cuộc kiểm toán tiếp theo của bạn✅
Tôi đánh giá cao một retweet, truyền bá kiến thức🫡https://t.co/ILx0C67kf8
- Cholakov (@cholakovv) 7 Tháng 7, 2023
Khi đọc và viết hợp đồng thông minh thường được kết hợp khi phát triển các đoạn mã thông minh, kiểm toán có một vị trí đặc biệt và liên quan đến việc kiểm tra logic ở vị trí đầu tiên. Khi thực hiện mã nguồn dựa trên blockchain, mọi thứ là bất biến, và bất cứ điều gì tai hại có thể gây ra hậu quả không thể đảo ngược khi thực thi hợp đồng. Đó chính là lý do tại sao việc kiểm tra kỹ lưỡng mã hợp đồng và các khía cạnh khác thông qua việc kiểm toán là cần thiết.
Có thể có một số lượng lớn lỗ hổng hợp đồngmà cuộc kiểm tra hợp đồng thông minh chi tiết có thể xác định. Những điều này bao gồm việc kiểm tra các cuộc tấn công tái nhập, tràn hoặc tràn dữ liệu, các vấn đề liên quan đến kiểm soát truy cập, và nhiều hơn nữa. Khi xác định chính xác bản chất của vấn đề, người kiểm toán viên có thể đề xuất các phương pháp tốt nhất để sửa chữa vấn đề đó.
Vẫn chưa chắc chắn về việc kiểm tra hợp đồng thông minh có thể giúp ích như thế nào? Vâng, hãy quay lại với câu chuyện nổi tiếng vềDAO hack vào năm 2016, khai thác vấn đề tái cấu trúc và gây thiệt hại gần 3,6 triệu ETH. Tương tự, đã có vụ hack hợp đồng ví Parity vào năm 2017, dẫn đến mất gần 500.000 ETH. Những vấn đề này có thể tránh được với bộ kiểm toán phù hợp.
Sơ đồ hack DAO: BeInCrypto
Có nhiều chiến lược để kiểm tra hợp đồng thông minh. Một số chiến lược phổ biến bao gồm:
Các công cụ này hoạt động như là bộ phòng thủ đầu tiên và được sử dụng tốt nhất để xác định các lỗ hổng phổ biến. Một số công cụ phổ biến khác bao gồm Securify, Mythril, và nhiều công cụ khác — có khả năng thực hiện phân tích tĩnh của mã, phát hiện mẫu vi phạm, và giúp bắt đầu bảo mật một cách chuyên sâu.
Công cụ để kiểm tra hợp đồng thông minh: BeInCrypto
Đây là nơi mà những người xem mã code thủ công xuất hiện, kiểm tra kỹ lưỡng cơ sở mã và xác định những lỗ hổng phức tạp, nếu có. Một bản xem xét thủ công có thể giúp quan tâm đến logic kinh doanh, ngữ cảnh và mẫu sử dụng.
Dưới đây là cách đánh giá mã thủ công giúp bạn xác định các mối đe dọa:
Một câu hỏi nhỏ cho các kiểm toán viên mới vào nghề của chúng tôi!
Hãy đi và retweet nếu bạn tìm thấy lỗi!pic.twitter.com/i14YtweXcz
— CharlesPaladin (@PaladinCharles) July 8, 2023
Công cụ như Snyk và GuardRails giúp quét hợp đồng tự động - một cách triển khai bảo mật được kích hoạ mỗi khi mã được cập nhật. Hình thức kiểm toán này đảm bảo rằng các thay đổi mới được thực hiện trên mã là an toàn và không xâm phạm tính chất.
Đây là một quá trình phức tạp chỉ dựa vào việc kiểm tra logic nghiệp vụ của mã. Xin lưu ý rằng xác minh chính thức không thực sự có nghĩa là để xác minh cú pháp mà chỉ là logic để xem mã có thực thi như mong muốn hay không.
Ngoài các chiến lược đã đề cập, việc kiểm tra hợp đồng thông minh cũng có thể được khởi xướng bằng cách sử dụng đánh giá từ đồng nghiệp, chương trình bug bounty và bảo phủ kiểm thử thông qua các công cụ như Solidity Coverage để tối đa hóa hiệu quả.
Cách đơn giản để kiểm toán hợp đồng thông minh: BeInCrypto Việt Nam
Nếu bạn chưa quen với kiểm toán hợp đồng thông minh, điều quan trọng cần lưu ý là có hai cách phân tích rộng rãi mã và xác định các vấn đề. Chúng bao gồm:
Loại phân tích mã này giúp xác định các lỗ hổng bảo mật cơ bản, lỗi mã hóa và các vấn đề khác theo các tiêu chuẩn mã hóa và quy ước nhất định. Những mối đe dọa như cuộc gọi không kiểm tra đến các nguồn bên ngoài, tràn số nguyên và nhiều hơn nữa có thể được nêu bật bằng cách sử dụng phân tích tĩnh. Điều tốt nhất về phân tích tĩnh là mã không cần được thực thi để kiểm tra nó.
Phương pháp này đối với việc kiểm tra phù hợp của mã với EVM. Thay vì chỉ kiểm tra mã, phân tích động chéo kiểm tra phản ứng của hợp đồng thông minh với một loạt các đầu vào. Phân tích động có thể xác định các vấn đề như tiêu thụ gas không nhất quán và thậm chí logic hợp đồng sai lầm. Môi trường blockchain cá nhân như Ganache có thể hoạt động như các nền tảng phân tích động, cho phép các nhà phát triển thực hiện giao dịch, thực thi lệnh, và làm nhiều việc khác nữa với hợp đồng của họ.
Dưới đây là đoạn mã hợp đồng thông minh hoạt động như một kho lưu trữ quỹ, có chức năng rút tiền:
pragma solidity ^0.6.1;contract VulnerableContract { mapping(address => uint256) public balances; function deposit() public payable { balances[msg.sender] += msg.value; } function withdraw(uint256 _amount) public { require(balances[msg.sender] >= _amount, "Insufficient balance."); (bool success, ) = msg.sender.call{value: _amount}(""); require(success, "Transfer failed."); balances[msg.sender] -= _amount; }}
Nếu bạn nhìn kỹ vào mã, có một lỗ hổng chính:
Trong trường hợp trước, chức năng “withdraw” có thể được gọi lại nếu người dùng nhận tiền cũng là một hợp đồng thông minh, dù có thể là độc hại. Do đó, trước khi chức năng cuối cùng hoặc cập nhật số dư xảy ra, một cuộc tấn công reentrancy có thể được khởi xướng để chuyển thêm tiền. Các kiểm toán viên kinh nghiệm nhận diện loại lỗ hổng này.
Đây là mã đã sửa cho cùng một điều:
function withdraw(uint256 _amount) public { require(balances[msg.sender] >= _amount, "Số dư không đủ."); balances[msg.sender] -= _amount; (bool success, ) = msg.sender.call{value: _amount}("");
require(success, “Chuyển khoản thất bại.”);}
Kiểm tra cách hàm cập nhật số dư được gọi trước và sau đó mới di chuyển đến người dùng đầu tiên. Thay đổi thứ tự hoạt động này là điều sửa lỗi hợp đồng.
Thế giới của các ứng dụng phi tập trung và hợp đồng thông minh đã vượt xa Ethereum. Mặc dù phần lớn hoạt động vẫn diễn ra trong hệ sinh thái Ethereum, có các chuỗi khác như Cardano, Solana và nhiều chuỗi khác hỗ trợ hợp đồng thông minh và yêu cầu tiêu chuẩn kiểm toán khác nhau.
Các chuỗi khối khác nhau sử dụng các ngôn ngữ lập trình khác nhau. Tính chất, cú pháp và thuộc tính của mã khác nhau, làm cho hợp đồng thông minh phản ứng với các thực hành viết và kiểm toán khác nhau. Ví dụ, Ethereum sử dụng Solidity, trong khi Polkadotsử dụng Ink và Rust — làm cho nó phản ứng với các tiêu chuẩn kiểm toán cụ thể.
Bây giờ nếu bạn muốn tiến xa hơn Ethereum, có một số công cụ kiểm định chuyên biệt để giúp bạn bắt đầu. Ví dụ, với Cardano, có bộ Marlowe cho xác minh hình thức và kiểm định. Khi đến với Solana, thư viện cụ thể của Rust và cargo-fuzz được thiết kế cho việc kiểm định và kiểm thử hợp đồng. Một kiểm định đa chuỗi phải hiểu rõ những khái niệm này để ngăn chặn các lỗ hổng hợp đồng.
Chỉ để nhắc lại, bạn có thể phân loại việc kiểm định hợp đồng thông minh thành ba loại: thủ công, tự động và kết hợp. Hãy lưu ý rằng mọi người ưa thích các chiến lược kiểm định kết hợp cho các hợp đồng phức tạp có logic kinh doanh sâu vì chúng là phương pháp toàn diện nhất.
Các tổ chức và cá nhân có kiến thức mã hóa tối thiểu thường thuê ngoài các yêu cầu viết và kiểm toán của họ cho các công ty có uy tín. Khi nói đến kiểm toán, việc lựa chọn đúng công ty trở nên quan trọng hơn mặc dù Công cụ AIthíchChatGPTcó thể giúp viết mã hợp đồng thông minh, kiểm tra cùng yêu cầu hiểu biết bằng tay.
Ngoài ra, đây là những yếu tố cần lưu ý khi giao việc kiểm toán cho bên ngoài:
Trước khi quyết định chọn công ty ngoại vi phù hợp, việc kiểm tra các báo cáo kiểm toán trước đó, đánh giá kinh nghiệm, và thậm chí tập trung vào các thành viên chính của nhóm là rất quan trọng.
Trước khi thuê, hãy chú ý đến chi phí và dịch vụ liên quan đến việc kiểm toán. Quan trọng nhất là phải hiểu rõ tính chất của các dịch vụ được cung cấp - như việc xác định vấn đề, giải quyết vấn đề, và nhiều hơn nữa. Bạn cũng phải kiểm tra xem liệu việc kiểm toán lại cũng được cung cấp sau khi triển khai dòng lệnh sửa lỗi đầu tiên không. Chi phí của việc kiểm toán hợp đồng thông minh có thể thay đổi tùy thuộc vào các dịch vụ, vì vậy, việc theo dõi mọi yêu cầu và ưu đãi trước khi tiếp tục là cần thiết.
Trong trường hợp bạn muốn từ bỏ một công ty và kiểm tra hợp đồng thông minh một cách tự mình, đây là những chiến lược và thực hành tốt nhất mà bạn nên nhớ:
Trí tuệ nhân tạo thực sự giúp việc viết hợp đồng thông minh dễ dàng hơn. Tuy nhiên, bất kể sự đổi mới của trí tuệ nhân tạo, khả năng kiểm toán hợp đồng thông minh một cách tốt nhất vẫn đòi hỏi sự can thiệp của con người. Do đó, nếu bạn dự định xây dựng sản phẩm web3 tiếp theo của mình nhấn mạnh vào hợp đồng thông minh và ứng dụng phi tập trung, quan trọng là tập trung tận tâm vào các nguồn lực kiểm toán tốt nhất cho hợp đồng thông minh của bạn. Với các vụ hack và vi phạm tiền điện tử xuất hiện mỗi ngày và hacker lên kế hoạch các chiến lược mới để xâm nhập, kiểm toán một hợp đồng đến hoàn thiện chắc chắn là một trong những kỹ năng quan trọng nhất trong thời đại hiện đại.
Bagikan
Hợp đồng thông minh là các đoạn mã có thể lập trình thực thi chỉ khi một tập hợp các điều kiện được đáp ứng. Chúng đồng nghĩa với các hợp đồng thực tế có tính ràng buộc pháp lý; chỉ trong trường hợp này, mã là luật pháp. Khi hợp đồng thông minh đặt trên blockchain, chúng là bất biến — chúng không thể bị can thiệp. Đó là yếu tố bất biến này làm cho hợp đồng thông minh trở nên đặc biệt, ngoài những điều khác.
Hợp đồng thông minhđược thiết kế để tự động hóa các giao dịch cụ thể trên blockchain. Vì chúng là các hợp đồng điều kiện cụ thể, nên chúng không cần trung gian. Điều làm cho hợp đồng thông minh hữu ích là khả năng tương thích của chúng trên một loạt các trường hợp sử dụng, bao gồm các dịch vụ tài chính, quản lý chuỗi cung ứng và nhiều hơn nữa. Và khác với các đoạn mã truyền thống được lập trình một cách nhanh chóng, hợp đồng thông minh đòi hỏi các chiến lược cực kỳ an toàn và tốn thời gian.
Cách hợp đồng thông minh liên kết với công nghệ blockchain: BeInCrypto
“Từ khoá “web3” ngụ ý các thói quen lập trình lỏng lẻo, thiếu an toàn của web. Khi tiền điện tử hoặc hợp đồng thông minh được lập trình giống như một trang web, chúng sẽ bị định mệnh. Các chuỗi khối và ứng dụng của chúng thành công bền vững dựa trên các phương pháp lập trình an toàn, cẩn thận và chậm chạp hơn nhiều.”
Nick Szabo, nhà mật mã học và nhà khoa học máy tính: Twitter
Hợp đồng thông minh có thể hoạt động với các token cụ thể của blockchain, ví dụ như ERC-20 cho blockchain Ethereum, khuyến khích nỗ lực và di chuyển giao dịch. Vì liên quan đến mã code, điều kiện và chi phí, bạn nên cẩn thận khi đọc, viết và kiểm toán chúng.
Điều quan trọng thực sự của hợp đồng thông minh liên quan đến bản chất và vị trí của chúng. Đối với một tình huống cụ thể - ví dụ, một người A chuyển tiền cho người B khi B hoàn thành một dịch vụ - một bản sao của hợp đồng thông minh được lưu trữ và thực thi bởi các nút blockchain. Hợp đồng thông minh được lưu trữ dưới dạng mã hợp đồng trong chuỗi. Việc xác thực đa đường này là một đặc điểm trung tâm của blockchain và giữ cho mọi thứ an toàn.
Ngoài ra, còn tồn tại các hợp đồng thông minh tuần tự hoặc đồng bộ và hợp đồng thông minh không đồng bộnơi các nhiệm vụ được thực hiện song song. Do đó, loại và mục đích của một hợp đồng thông minh xác định cách nó được viết, đọc, hoặc thậm chí được kiểm toán.
Các hợp đồng truyền thống, giấy tờ tài sản, di chúc, vv. đều thuộc pháp luật tư nhân, được "soạn thảo bởi cá nhân tư nhân chứ không phải là chính trị gia hoặc các quan chức chính phủ." Hợp đồng thông minh là một dạng mới của việc đưa ra quy định phi tập trung như vậy.https://t.co/EU2Y28FznK
— Nick Szabo ( @NickSzabo4) 15 tháng 3 năm 2018
Hãy xem xét một hồ bơi thanh khoản được quản lý bằng hợp đồng thông minh tiêu chuẩn.
Hãy tưởng tượng rằng hồ bơi token có thể được sử dụng để giao dịch, và mỗi khi có một giao dịch thành công xảy ra, 0.3% giá trị giao dịch tổng được gửi đến nhà cung cấp thanh khoản đã làm cho giao dịch đó trở nên có thể hoặc đã thêm thanh khoản cho tài sản có thể giao dịch đó. Tất cả các điều kiện nổi bật về các tình huống giao dịch, phí giao dịch và điều kiện không tuân thủ và thất bại giao dịch được mã hóa thành một Hợp đồng thông minh, được lưu trữ trong chuỗi dữ liệu dưới dạng mã hợp đồng.
Chúng ta không thể đào sâu vào việc đọc, viết và kiểm toán hợp đồng nếu chúng ta không nhận biết được những đặc điểm của chúng. Dưới đây là những đặc điểm tiêu chuẩn của hợp đồng thông minh mà cần nhận thức.
Một số đặc điểm của một hợp đồng thông minh tiêu chuẩn: BeInCrypto
Hợp đồng thông minh chỉ là các đoạn mã. Bạn có thể viết hợp đồng thông minh để thực hiện các lệnh và kịch bản dựa trên các điều kiện cụ thể. Đây là lý do tại sao các nhà phát triển hợp đồng thông minh và lập trình viên hiện đang được tìm kiếm, vì hầu hết các DeFispace already relies on Hợp đồng thông minh to process complex instances like handling trading fees across liquidity pools, maintaining APYtỷ lệ, và nhiều hơn nữa.
Các hợp đồng thông minh đặt trên blockchain loại bỏ sự can thiệp của con người. Điều này khiến chúng hoàn toàn không cần tin cậy. Ví dụ, nếu một DeFiGiao thức, được quản lý bởi hợp đồng thông minh, đồng ý thanh lý tài sản của bạn khi giá trị giảm xuống dưới ngưỡng, không có can thiệp của con người nào có thể hoặc nên ngăn chặn nó. Mã xử lý thanh toán, hiệu suất, quản lý và thực thi quy định, khiến cho toàn bộ không gian trở nên hoàn toàn không tin cậy.
Như đã đề cập trước đó, hợp đồng thông minh được tải với các bộ chỉ thị tự thực thi. Trong thuật ngữ lập trình, điều này có nghĩa là có các vòng lặp được xây dựng trong mẫu mã cơ bản. Điều này đảm bảo rằng các nhiệm vụ như thanh toán, rút tiền, gửi tiền, xử phạt các nhà xác thực thông qua cắt giảm, và một số nhiệm vụ khác được xử lý tự động.
Và cuối cùng, vì hợp đồng thông minh được bảo vệ bằng mật mã, việc xâm nhập chúng là vô cùng khó khăn. Mà không có lỗ hổng tích hợp, vượt qua một hợp đồng thông minh sẽ có nghĩa là cố gắng xâm nhập vào nó trên mặt trận, trước mắt toàn bộ blockchain.
Các giao dịch được xử lý thông qua hợp đồng thông minh có thể tự xác minh. Điều này có nghĩa là việc thực hiện là bằng chứng đủ rằng giao dịch đã xảy ra từ ban đầu, vì không có yếu tố con người nào tham gia. Cơ chế tự xác minh này mang lại lợi thế cho hợp đồng thông minh so với các hợp đồng truyền thống quản lý các hệ thống ngân hàng cổ điển.
Vì vậy, lần tới khi bạn có kế hoạch đọc một hợp đồng thông minh, hãy đảm bảo rằng bản mẫu hoặc tài liệu có tất cả các đặc điểm được đề cập liên quan.
Một phiên bản đơn giản của hợp đồng thông minh: Reddit
Đây là một hợp đồng thông minh đơn giản đại diện cho một tài khoản ủy thác. Người dùng gửi tiền của họ vào tài khoản ủy thác, sau đó tài khoản chuyển số tiền đó cho người nhận sau một khoảng thời gian nhất định.
/ SPDX-License-Identifier: MITpragma solidity ^0.8.0;// Basic Smart Contract Boilerplatecontract SimpleTrustlessEscrow {// Biến trạng tháiđịa chỉ người gửi tiền công khai; // Tài khoản gửi etheraddress phải trả người thụ hưởng công cộng; // Tài khoản nhận etheruint256 phát hành công khaiTime; // Dấu thời gian để phát hành ether// Sự kiện xác minh hoạt động hợp đồngsự kiện Deposited(địa chỉ được lập chỉ mục _from, uint256 _value); sự kiện Released (địa chỉ được lập chỉ mục _to, uint256 _value);// Người xây dựng hợp đồng khởi tạo hợp đồng thông minh (địa chỉ phải trả _beneficiary, uint256 _releaseTime) { require(_releaseTime > block.timestamp, "Thời gian phát hành phải trong tương lai"); An toàn và không tin cậy: Hợp đồng ràng buộc người gửi tiền và người gửi tiền thụ hưởng = msg.sender; người thụ hưởng = _beneficiary; Thời gian phát hành = _releaseTime;}Hàm tiền gửi – thực thi tự động (hàm dự phòng)receive() bên ngoài phải trả {emit Deposited(msg.sender, msg.value);}Phát hành ether cho beneficiaryfunction release() public { // Lập trình: Chỉ có thể được thực thi sau khi releaseTime require(block.timestamp >= releaseTime, "Quá sớm để phát hành"); Tự chủ: Tự động thực hiện dựa trên điều kiện uint256 amount = address(this).balance; người thụ hưởng.transfer(số tiền); phát hành (người thụ hưởng, số tiền);}}
Trong khi chúng tôi sẽ giải mã và đọc hợp đồng thông minh này một cách cẩn thận, hãy kiểm tra xem nó có tuân thủ các đặc điểm hợp đồng đã đề cập hay không trước.
Xem xét kỹ hợp đồng cho đoạn mã này:
require(block.timestamp >= releaseTime, “Quá sớm để phát hành”);
uint256 số dư = địa chỉ(này).cân nặng;
beneficiary.transfer(amount);
Các quỹ chỉ được phát hành khi điều kiện thời gian phát hành cụ thể được đáp ứng, tạo ra các hợp đồng có thể lập trình được.
Dưới đây là một đoạn mã nhanh từ trên
depositor = msg.sender;
người hưởng lợi = _beneficiary;
releaseTime = _releaseTime;
Trong hợp đồng, mọi người đều bị ràng buộc bởi mã từ người gửi tiền đến người nhận tiền. Không ai cần phải tương tác hoặc tin tưởng vào người khác vì chức năng chuyển tiền được ràng buộc bởi releaseTime - một tham số dựa trên mã.
Dưới đây là phần “giải phóng quỹ” của mã code:
function release() public {require(block.timestamp >= releaseTime, “Quá sớm để phát hành”);uint256 amount = address(this).balance;beneficiary.transfer(amount);emit Released(beneficiary, amount);}
Toàn bộ quy trình là tự động, vì quỹ chỉ được phát hành khi thời gian phát hành đáp ứng một tiêu chí cụ thể. Lưu ý rằng mã không phải là có thể lập trình một phần mà là hoàn toàn tự động.
Các phần khác của mã hợp đồng thông minh, bao gồm cả chức năng gửi tiền, cũng có thể được thực hiện hoàn toàn tự động tùy thuộc vào các tính năng mà bạn muốn bao gồm. Ví dụ, bạn có thể bắt đầu một kế hoạch gửi tiền định kỳ mỗi khi người dùng của bạnví vượt qua $ 100, với số tiền vượt quá chuyển đến người thụ hưởng.
Lo lắng về yếu tố nào mà cho vay bảo mậtđến hợp đồng? Kiểm tra phần này của mã:
constructor(địa chỉ phải trả _beneficiary, uint256 _releaseTime) {require(_releaseTime > block.timestamp, "Thời gian phát hành phải trong tương lai"); người gửi tiền = msg.sender; người thụ hưởng = _beneficiary; Thời gian phát hành = _releaseTime;}
Chú ý là có một sự ưu tiên cố định của chức năng releaseTime liên quan đến dấu thời gian. Không có gì là ngẫu nhiên, và điều kiện phải được đáp ứng.
Mỗi giao dịch liên quan đến hợp đồng thông minh đều được ghi lại trong chuỗi, nhờ vào các yếu tố hoạt động nhật ký riêng biệt.
sự kiện Đã gửi (địa chỉ được lập chỉ mục _from, uint256 _value);
Sự kiện Phát hành(address indexed _to, uint256 _value);
emit Đã Gửi(msg.sender, msg.value);
emit Released(beneficiary, amount);
Bây giờ chúng ta đã xác định các yếu tố xác định đặc điểm của một hợp đồng thông minh, dưới đây là các yếu tố hợp đồng khác để giúp bạn hiểu rõ hơn vấn đề.
Pragma solidity ^0.8.0; – Phiên bản của ngôn ngữ lập trình Solidity cần thiết để viết hợp đồng thông minh này.
// SPDX-License-Identifier: MIT - Được gọi là Gói Dữ liệu Trao đổi Phần mềm, mã này xác định giấy phép của mã nguồn được phát hành. Đề xuất bao gồm mã này để cho mọi người biết liệu nó có phải mã nguồn mở và có thể được làm việc xung quanh hay không.
Contract TimeLock { – Gán tên cho hợp đồng thông minh, giống như một nhãn.
Địa chỉ công khai của người gửi tiền; - Khi hợp đồng liên quan đến người gửi tiền và người hưởng, đây là điểm mà địa chỉ công khai của người gửi tiền được đề cập. Biến này là Ví Ethereum địa chỉ và có thể xem công khai.
Địa chỉ công cộng có thể thanh toán của người hưởng; - Đây là địa chỉ công cộng của người hưởng nơi mà người giữ tiền chuyển tiền. Nó cũng có thể đọc được và tạo cảm giác minh bạch cho các hợp đồng thông minh được hỗ trợ bởi blockchain.
Uint256 public releaseTime; – Vì đây là một hợp đồng mang tính thời gian, uint256 sẽ gán biến được dựa vào thời gian cho hợp đồng. Điều này sẽ là khung thời gian theo đó việc phát hành quỹ sẽ diễn ra.
Trong Solidity, uint (số nguyên không dấu) là cách để gán các giá trị dựa trên số nguyên. Hậu tố 256 đại diện cho việc lưu trữ số lớn.
sau 5 năm viết hợp đồng thông minh, tôi chỉ nhận ra hôm nay rằng biểu tượng solidity chính là biểu tượng ethereum được mở ra 🤯pic.twitter.com/wlM369Eff9
— kaden.eth ( @0xKaden) Ngày 8 tháng 7 năm 2023
Bạn có thể xem xét đọc Tài liệu Solidityđể hiểu cú pháp, biểu thức và các yếu tố mã code khác.
constructor(address payable _beneficiary, uint256 _releaseTime) { – Hàm “Constructor” là một hàm đặc biệt chỉ được gọi một lần khi hợp đồng thông minh được triển khai. Nó đặt hợp đồng vào chuyển động. Lưu ý là tại điểm này, tất cả các biến địa chỉ mà chúng ta đã khai báo trước đó đều được gọi và khởi tạo.
Receive() external payable { – Đây là một hàm đặc biệt được gọi khi có quỹ chuyển đến địa chỉ hợp đồng từ bên ngoài. External cho biết từ bên ngoài, và “Payable” xác định tính chất của việc chuyển động, tức là, để nhận các token ERC-20.
Hàm release() công cộng { - Đây là một hàm công cộng xác định việc chuyển động của các token ERC-20 từ địa chỉ hợp đồng đến người hưởng. Hàm này phụ thuộc vào releaseTime.
Tất cả những yếu tố này đều là phần của hợp đồng Khoản đặt cọc giả định mà chúng ta đã thảo luận. Đảm bảo bạn đọc toàn bộ tài liệu Solidity để hiểu rõ hơn về ngôn ngữ.
Biết những yếu tố trước khi bạn lên kế hoạch viết hợp đồng thông minh: BeInCrypto
Hiện tại, bạn nên đã có một lợi thế trong việc đọc và hiểu một hợp đồng thông minh đã được viết sẵn. Và nhiều hợp đồng thông minh như những cái mà chúng tôi đã thảo luận tạo nên phần backend của một ứng dụng phi tập trung — một Blockchainphiên bản của một ứng dụng di động tiêu chuẩn.
Mọi đặc điểm của một hợp đồng thông minh, bao gồm bảo mật hợp đồng, thực thi tự động và có thể lập trình, tính không tin cậy của giao dịch, và nhiều hơn nữa, được triển khai một cách dễ dàng trong quá trình phát triển ứng dụng phi tập trung. Vì vậy, lần tới khi bạn gặp phải một DApp, hãy lưu ý rằng đó là một phần mềm backend được hỗ trợ bởi hợp đồng thông minh trên blockchain - giúp bạn khởi đầu nhiều nhiệm vụ mà không cần can thiệp của con người. Hợp đồng thông minh tạo nên logic của DApps.
Chúng ta biết rằng Ethereum cho phép bạn phát triển hợp đồng thông minh, giống như một giải pháp phần mềm khổng lồ. Tuy nhiên, đó không phải là giao thức blockchain duy nhất. Nếu bạn muốn đào sâu vào thế giới phát triển hợp đồng thông minh, bạn có thể muốn xem xét các blockchain khác. Các blockchain khác nhau có các thuật ngữ khác nhau khi đến việc xây dựng các hợp đồng.
Nhưng trước tiên, hãy thảo luận Ethereum — nền tảng được sử dụng phổ biến nhất cho hầu hết các nhà phát triển hợp đồng thông minh.
Hợp đồng thông minh trên Ethereum được viết bằng ngôn ngữ lập trình Solidity. Và giao diện token cho nền tảng phát triển hợp đồng thông minh này là ERC-20.
Bạn có thể quay trở lại hợp đồng thông minh dựa trên Escrow mà chúng ta đã thảo luận trước đó để xem hợp đồng thông minh dựa trên Etheruem tiêu chuẩn được viết như thế nào.
Ngay cả việc phát hành một token ERC-20 trên blockchain Ethereum cũng là một tính năng dựa trên hợp đồng thông minh, điều chúng ta sẽ thảo luận kỹ lưỡng khi viết một hợp đồng thông minh.
Dưới đây là cấu trúc mã cơ bản trông như thế nào, miễn là chúng ta có kế hoạch ra mắt một loại tiền điện tử mới là BIC.
Hãy coi đây như một kịch bản giả tưởng. Không chính xác là ra mắt một loại tiền điện tử BIC.
pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract BICToken is ERC20 { constructor(uint256 initialSupply) ERC20("BIC Token", "BIC") { _mint(msg.sender, initialSupply); }}
Chúng ta sẽ thảo luận về mọi yếu tố của đoạn mã này sau khi viết hợp đồng thông minh của chúng ta.
Như Ethereum, bạn cũng có thể tạo hợp đồng thông minh trên các nền tảng như Solana, sử dụng Rust và Cardano, sử dụng Plutus, một phần của Haskell — một ngôn ngữ lập trình hàm.
“Có phải Cordona có hợp đồng thông minh không?”
Jokes on you, pal. #CardanoADA pic.twitter.com/j8SXCu72Sd
- Willybot 🇦🇺 (@wilbot28)Tháng Bảy 9, 2023
Đây là cấu trúc mã trong Rust (Solana) trông giống như:
Lưu ý: Đó là một hợp đồng đơn giản nơi một bộ đếm được tăng lên.
use anchor_lang::prelude::*;declare_id!(“Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS”);#[program] pub mod hello_world {use super::*;pub fn initialize(ctx: Context<Initialize>) -> ProgramResult { let greeting_account = &mut ctx.accounts.greeting_account; greeting_account.counter = 0; Ok(())}pub fn increment(ctx: Context<Increment>) -> ProgramResult { let greeting_account = &mut ctx.accounts.greeting_account; greeting_account.counter += 1; Ok(())}}
Bạn có biết không? Trong khi Rust là ngôn ngữ lập trình để tạo các hợp đồng thông minh dựa trên Solana, Móc neolà khung phát triển hợp đồng thông minh được sử dụng. Để tạo các hợp đồng thông minh bằng Rust, các nhà phát triển cần kéo các module từ khung Anchor - điều gì đầu tiên trong mã mẫu của chúng tôi (sử dụng anchor_lang::*;) đại diện cho.
Tài liệu Solanasẽ giúp bạn hiểu ngôn ngữ hợp đồng thông minh cụ thể cho Rust.
Tương tự, Cardano tuân theo Plutus như lựa chọn ngôn ngữ, tiếp theo là ngôn ngữ Ink!Polkadot, TEAL cho Algorand, C# cho NEO, và nhiều hơn nữa. Việc học tài liệu theo chuỗi mạng chi tiết là đáng khuyến khích trước khi tiến hành viết hợp đồng thông minh tương thích.
Khả năng viết hợp đồng thông minh được công nhận cao, nhưng ngay cả việc đọc cũng mang lại nhiều lợi ích:
Bây giờ khi việc đọc hợp đồng thông minh đã qua, hãy tập trung vào việc viết hợp đồng thông minh. Trước khi bạn đào sâu vào, cần nhấn mạnh rằng các chuỗi khối khác nhau có thể có các tiêu chuẩn và ngôn ngữ khác nhau liên quan đến phát triển hợp đồng thông minh. Cần tập trung vào các tiêu chuẩn được xác định bởi bất kỳ chuỗi khối cụ thể nào, để bắt đầu viết và triển khai hợp đồng.
Đối với phần lớn cuộc thảo luận của chúng ta, chúng ta sẽ tập trung vào Ethereum như là chuỗi và Solidity như là ngôn ngữ.
Việc lập trình hợp đồng thông minh dễ dàng là phần quan trọng nhất của chu kỳ phát triển. Và để tham gia vào việc phát triển hợp đồng thông minh trên Ethereum hoặc bất kỳ blockchain nào khác, bạn nên có một số kinh nghiệm với các ngôn ngữ lập trình non-blockchain như Javascript.
Các chuỗi khối khác nhau và ngôn ngữ để viết hợp đồng thông minh: BeInCrypto
Khả năng lập trình một hợp đồng thông minh cho phép bạn triển khai logic, xử lý các yếu tố bảo mật của nó, tối ưu hóa mã cho phí gas, tùy chỉnh cùng, và thậm chí làm cho chúng tương thích nếu cần thiết.
Bất kỳ ai đang có kế hoạch viết hợp đồng thông minh trên Ethereum cần hiểu Ethereum Virtual Machine (EVM) là gì và làm thế nào nó hoạt động với hợp đồng thông minh. Đầu tiên, EVM là một thành phần của Ethereum cung cấp môi trường cách ly và kiểm soát cho chương trình hoạt động. Hãy xem xét đây là một máy tính toàn cầu chứa mọi đoạn mã hợp đồng trên Ethereum. Mỗi nodetrên mạng Ethereum chạy EVM.
Nếu bạn đang ấp ủ trở thành một nhà phát triển hợp đồng thông minh, đây là những gì bạn cần biết về hợp đồng thông minh và EVM.
Sau khi bạn viết chương trình bằng Solidity, đây là một ngôn ngữ cấp cao, bạn cần biên dịch nó thành bytecode - một định dạng cấp thấp mà máy tính có thể hiểu được. Bytecode này sẽ được đưa vào blockchain Ethereum và lưu trữ ở đó. Bất kỳ ai tương tác với hợp đồng thông minh đều cần gửi một giao dịch đến địa chỉ của hợp đồng.
Mọi nút với EVM được cài đặt có thể thấy giao dịch này, và một khi các nhà xác minh chấp nhận điều này, mã hợp đồng thông minh sẽ được thực thi. Khi mỗi nút có khả năng nhìn thấy giao dịch, không có gì có thể bị can thiệp, và mã được thực thi như đã được viết. Và khi mã được thực thi, trạng thái của blockchain thay đổi, làm cho quy trình trở nên toàn diện và hoàn toàn minh bạch.
Viết hợp đồng thông minh đòi hỏi kiến thức kỹ thuật. Nhưng đó chưa phải là tất cả. Bạn cũng cần hiểu rõ cách công nghệ blockchain hoạt động, những nhu cầu cụ thể về ngôn ngữ liên quan đến blockchain mà bạn đang nhắm tới, tính tương tác, và nhiều hơn nữa. Ngoài ra, bạn cũng nên biết một phần không nhỏ về các lỗ hổng của hợp đồng thông minh — những điều cần tránh khi viết mã. Và cuối cùng, kiến thức về kiểm thử hợp đồng và triển khai hợp đồng cũng là điều cần thiết.
Tất cả những điều đó có thể trở nên áp đảo. Vì vậy đây là một tờ ghi nhớ nhanh để bắt đầu:
Dưới đây là một chuỗi nhanh với một số mẹo để viết hợp đồng thông minh tốt hơn:
🥧 FREI-PI
‼️ Tại sao các nhà phát triển hợp đồng thông minh CẦN phải biết điều này!
Chức năng:
– Yêu cầu
– Hiệu ứng
– Tương tác
Giao thức
– Invariants
Đây là mẫu bạn nên suy nghĩ khi xây dựng hợp đồng thông minh.
Đây là lý do tại sao 👇
— Patrick Collins ( @PatrickAlphaC)6 tháng 7 năm 2023
Đã đến lúc bắt đầu vào các khía cạnh kỹ thuật của việc phát triển hợp đồng thông minh. Mặc dù các chuỗi như Solana và Cardano cho phép bạn phát triển hợp đồng thông minh, Ethereum vẫn tiếp tục là nền tảng phát triển hợp đồng thông minh phổ biến nhất.
Bạn có biết không? Chỉ trong năm 2022, đã có hơn 100.000 ứng dụng phi tập trung được đưa lên mạng lưới Ethereum.
Ethereum có một cộng đồng lớn của các nhà phát triển. Mọi thứ bạn phát triển sẽ ngay lập tức thu hút sự chú ý. Ngoài ra, ngôn ngữ bản địa của nó, Solidity, khá dễ dàng đối với những người biết cách sử dụng Python hoặc JavaScript. Cuối cùng, phần mềm toàn cầu của Ethereum, EVM, giúp thực hiện hợp đồng một cách mượt mà.
Nếu bạn thuộc đa số và thích sử dụng Ethereum và Solidity, đây là một danh sách nhanh về những điều bạn cần theo dõi trước khi bắt đầu phát triển hợp đồng thông minh:
Bây giờ chúng ta đã biết cách mọi thứ diễn ra trên chuỗi, hãy bắt đầu viết và triển khai hợp đồng thông minh đầu tiên. Mặc dù “Xin chào thế giới” vẫn là bước đầu tiên, chúng ta sẽ bắt đầu bằng cách tạo một hợp đồng thông minh để phát hành một token BIC giả định với nguồn cung 100% mở khóa là 1 triệu.
Bước đầu tiên là cài đặt phiên bản mới nhất của Node.js và NPM hoặc Node Package Manager. Điều này giải quyết các công cụ phát triển và môi trường cục bộ cho việc phát triển. Ngoài ra, Node.js và NPM cho phép bạn thiết lập giao diện web cho hợp đồng thông minh của bạn.
Bây giờ, bạn cần thiết lập một IDE để viết mã hợp đồng. Để làm điều đó, bạn có thể nhanh chóng cài đặt Visual Studio Code. Hoặc bạn có thể cắt bớt rốihop trên Alchemy - một nền tảng phát triển blockchain. Với Alchemy, bạn có thể nhận được một số ETH testnet. Điều này sẽ bao gồm phí gas khi bạn triển khai hợp đồng thông minh cho testnet Goerli hoặc thậm chí là testnet Sepolia.
Lưu ý rằng Sepolia là một testnet trẻ hơn và do đó tốn ít không gian ổ đĩa hơn khi triển khai node.
Hiện tại, chúng tôi sẽ tiếp tục với Goerli testnet vì nó có số lượng ứng dụng triển khai lớn hơn.
Với mạng thử nghiệm và ETH giả sẵn sàng, hãy chuyển sang viết cụ thể hợp đồng thông minh. Đây là đoạn mã để tạo token BIC với nguồn cung cố định 1 triệu.
Lưu ý: Chúng tôi sẽ triển khai hợp đồng thông minh của mình cục bộ trên MacOS và không phải là mạng thử nghiệm. Đối với việc triển khai hợp đồng thông minh trên mạng thử nghiệm và mạng chính, chúng tôi sẽ có một phần riêng, nằm ngoài phạm vi của cuộc thảo luận này.
Đây là đoạn mã đơn giản cho token giả định:
pragma solidity ^0.8.0;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";contract BICToken is ERC20 { constructor() ERC20("BIC Token", "BIC") { _mint(msg.sender, 1000000 * 10 ** decimals()); }}
Nếu bạn hiểu về cú pháp, bạn sẽ biết mỗi thành phần mã có ý nghĩa gì. Còn về OpenzepplinTrong một phần, đó là thư viện được sử dụng để nhập các hợp đồng thông minh ERC-20. Thư viện này cung cấp các tiêu chuẩn vận hành cơ bản cho các token ERC-20.
Hàm mint đề cập đến nguồn cung ban đầu, được triển khai đến địa chỉ hợp đồng thông minh hoặc msg.sender.
Để thiết lập mã này địa phương và kiểm tra nó, chúng ta sẽ cần ba thành phần:
Nếu bạn đã trải qua quá trình chi tiết viết một hợp đồng thông minh, việc biết một chút về việc thực thi hợp đồng là cực kỳ quan trọng. Đó là quá trình mà mã hợp đồng thông minh được thực thi trên một chuỗi bởi các nút.
Đó là sự đồng nhất liên quan đến việc thực hiện hợp đồng thông minh làm cho chúng minh bạch và bất biến. Bây giờ hãy hiểu quy trình bước đơn liên quan đến việc thực hiện hợp đồng:
Các đoạn mã mà chúng ta đã viết cần được thực thi ở một nơi nào đó. Trong trường hợp của hợp đồng thông minh, nơi thực thi là blockchain. Các nút hoặc các thành viên tham gia của chuỗi giúp thực thi hợp đồng.
Các nút chấp nhận trách nhiệm thực hiện các khối mã hợp đồng để đổi lấy các động lực liên quan đến chuỗi. Mọi lệnh hoặc hành động diễn ra trong chuỗi đều được dẫn dắt bởi các hợp đồng thông minh.
Mỗi hợp đồng thông minh đều có một địa chỉ cụ thể. Để thực thi hợp đồng, các giao dịch được gửi đến địa chỉ hợp đồng đó. Lưu ý rằng mỗi nút chạy EVM, sau đó có một bản sao của mã hợp đồng thông minh, làm cho việc kiểm tra tính xác thực của các giao dịch trở nên dễ dàng hơn.
Các giao dịch được nhắm đến hợp đồng thông minh được lựa chọn bởi các máy chủ xác thực, sau đó bao gồm chúng vào các khối cụ thể.
Khi giao dịch được đưa qua và được xác thực thành công, nó trở thành một phần của blockchain. Chức năng hợp đồng thông minh liên quan đến giao dịch sau đó được gọi và thực thi trên các nút của blockchain.
Mỗi nút thực thi hợp đồng thông minh nên đạt được một kết luận xác định — cùng một kết quả cho cùng một bộ dữ liệu đầu vào — làm cho bản chất của các hợp đồng hoàn toàn không tin cậy và minh bạch.
Lưu ý: Bất kỳ lỗi nào liên quan đến việc thực thi mã hoặc vấn đề liên quan đến phí gas đều đảo ngược các giao dịch. Điều này có nghĩa là giao dịch dựa trên mã hợp đồng thông minh cụ thể sẽ ngừng tồn tại. Đây chính xác là điều xảy ra với vay flashkhi không thể tuân thủ các quy định cụ thể dẫn đến việc đảo ngược toàn bộ giao dịch, dường như tạo ra ấn tượng rằng tiền không hề di chuyển từ đầu.
Mọi thay đổi trạng thái liên quan đến hợp đồng thông minh sẽ được ghi lại trên blockchain và trở thành một phần không thể thay đổi của nó.
Bây giờ bạn đã biết một chút về hợp đồng thông minh, dưới đây là một số chỉ dẫn để bắt đầu phát triển hợp đồng:
Mỗi trong những phương pháp được đề cập ở trên đều giúp tối ưu hóa mã và triển khai cụ thể về bảo mật. Tuy nhiên, có một số phương pháp cụ thể cho hợp đồng mà bạn phải tuân theo và triển khai để chăm sóc sự bền vững của mã. Điều này nhằm mục đích giữ cho mã hợp đồng nhẹ và có thể sử dụng để mà mọi node chạy và thực thi không cần phải dành nhiều năng lực tính toán cho cùng một điều.
Mặc dù tuân thủ các quy tắc tốt nhất khi viết và phát triển hợp đồng thông minh, nhưng cần tập trung vào các lỗ hổng bảo mật của hợp đồng khi đưa chúng lên mainnet.
Mọi hợp đồng thông minh có mặt trên mainnet cần được đánh giá về hiệu suất mã, bảo mật và các đặc tính khác. Đây là nơi kiểm toán - một quy trình kiểm thử hợp đồng chặt chẽ - đến nổi, cho phép bạn phát hiện ra những lỗ hổng và điểm yếu tiềm ẩn của hợp đồng.
Đây là một danh sách kiểm tra kiểm toán nhanh để bắt đầu:
Danh sách kiểm tra đáng kinh ngạc cho Hợp đồng thông minh😈
Đảm bảo kiểm tra chúng trong cuộc kiểm toán tiếp theo của bạn✅
Tôi đánh giá cao một retweet, truyền bá kiến thức🫡https://t.co/ILx0C67kf8
- Cholakov (@cholakovv) 7 Tháng 7, 2023
Khi đọc và viết hợp đồng thông minh thường được kết hợp khi phát triển các đoạn mã thông minh, kiểm toán có một vị trí đặc biệt và liên quan đến việc kiểm tra logic ở vị trí đầu tiên. Khi thực hiện mã nguồn dựa trên blockchain, mọi thứ là bất biến, và bất cứ điều gì tai hại có thể gây ra hậu quả không thể đảo ngược khi thực thi hợp đồng. Đó chính là lý do tại sao việc kiểm tra kỹ lưỡng mã hợp đồng và các khía cạnh khác thông qua việc kiểm toán là cần thiết.
Có thể có một số lượng lớn lỗ hổng hợp đồngmà cuộc kiểm tra hợp đồng thông minh chi tiết có thể xác định. Những điều này bao gồm việc kiểm tra các cuộc tấn công tái nhập, tràn hoặc tràn dữ liệu, các vấn đề liên quan đến kiểm soát truy cập, và nhiều hơn nữa. Khi xác định chính xác bản chất của vấn đề, người kiểm toán viên có thể đề xuất các phương pháp tốt nhất để sửa chữa vấn đề đó.
Vẫn chưa chắc chắn về việc kiểm tra hợp đồng thông minh có thể giúp ích như thế nào? Vâng, hãy quay lại với câu chuyện nổi tiếng vềDAO hack vào năm 2016, khai thác vấn đề tái cấu trúc và gây thiệt hại gần 3,6 triệu ETH. Tương tự, đã có vụ hack hợp đồng ví Parity vào năm 2017, dẫn đến mất gần 500.000 ETH. Những vấn đề này có thể tránh được với bộ kiểm toán phù hợp.
Sơ đồ hack DAO: BeInCrypto
Có nhiều chiến lược để kiểm tra hợp đồng thông minh. Một số chiến lược phổ biến bao gồm:
Các công cụ này hoạt động như là bộ phòng thủ đầu tiên và được sử dụng tốt nhất để xác định các lỗ hổng phổ biến. Một số công cụ phổ biến khác bao gồm Securify, Mythril, và nhiều công cụ khác — có khả năng thực hiện phân tích tĩnh của mã, phát hiện mẫu vi phạm, và giúp bắt đầu bảo mật một cách chuyên sâu.
Công cụ để kiểm tra hợp đồng thông minh: BeInCrypto
Đây là nơi mà những người xem mã code thủ công xuất hiện, kiểm tra kỹ lưỡng cơ sở mã và xác định những lỗ hổng phức tạp, nếu có. Một bản xem xét thủ công có thể giúp quan tâm đến logic kinh doanh, ngữ cảnh và mẫu sử dụng.
Dưới đây là cách đánh giá mã thủ công giúp bạn xác định các mối đe dọa:
Một câu hỏi nhỏ cho các kiểm toán viên mới vào nghề của chúng tôi!
Hãy đi và retweet nếu bạn tìm thấy lỗi!pic.twitter.com/i14YtweXcz
— CharlesPaladin (@PaladinCharles) July 8, 2023
Công cụ như Snyk và GuardRails giúp quét hợp đồng tự động - một cách triển khai bảo mật được kích hoạ mỗi khi mã được cập nhật. Hình thức kiểm toán này đảm bảo rằng các thay đổi mới được thực hiện trên mã là an toàn và không xâm phạm tính chất.
Đây là một quá trình phức tạp chỉ dựa vào việc kiểm tra logic nghiệp vụ của mã. Xin lưu ý rằng xác minh chính thức không thực sự có nghĩa là để xác minh cú pháp mà chỉ là logic để xem mã có thực thi như mong muốn hay không.
Ngoài các chiến lược đã đề cập, việc kiểm tra hợp đồng thông minh cũng có thể được khởi xướng bằng cách sử dụng đánh giá từ đồng nghiệp, chương trình bug bounty và bảo phủ kiểm thử thông qua các công cụ như Solidity Coverage để tối đa hóa hiệu quả.
Cách đơn giản để kiểm toán hợp đồng thông minh: BeInCrypto Việt Nam
Nếu bạn chưa quen với kiểm toán hợp đồng thông minh, điều quan trọng cần lưu ý là có hai cách phân tích rộng rãi mã và xác định các vấn đề. Chúng bao gồm:
Loại phân tích mã này giúp xác định các lỗ hổng bảo mật cơ bản, lỗi mã hóa và các vấn đề khác theo các tiêu chuẩn mã hóa và quy ước nhất định. Những mối đe dọa như cuộc gọi không kiểm tra đến các nguồn bên ngoài, tràn số nguyên và nhiều hơn nữa có thể được nêu bật bằng cách sử dụng phân tích tĩnh. Điều tốt nhất về phân tích tĩnh là mã không cần được thực thi để kiểm tra nó.
Phương pháp này đối với việc kiểm tra phù hợp của mã với EVM. Thay vì chỉ kiểm tra mã, phân tích động chéo kiểm tra phản ứng của hợp đồng thông minh với một loạt các đầu vào. Phân tích động có thể xác định các vấn đề như tiêu thụ gas không nhất quán và thậm chí logic hợp đồng sai lầm. Môi trường blockchain cá nhân như Ganache có thể hoạt động như các nền tảng phân tích động, cho phép các nhà phát triển thực hiện giao dịch, thực thi lệnh, và làm nhiều việc khác nữa với hợp đồng của họ.
Dưới đây là đoạn mã hợp đồng thông minh hoạt động như một kho lưu trữ quỹ, có chức năng rút tiền:
pragma solidity ^0.6.1;contract VulnerableContract { mapping(address => uint256) public balances; function deposit() public payable { balances[msg.sender] += msg.value; } function withdraw(uint256 _amount) public { require(balances[msg.sender] >= _amount, "Insufficient balance."); (bool success, ) = msg.sender.call{value: _amount}(""); require(success, "Transfer failed."); balances[msg.sender] -= _amount; }}
Nếu bạn nhìn kỹ vào mã, có một lỗ hổng chính:
Trong trường hợp trước, chức năng “withdraw” có thể được gọi lại nếu người dùng nhận tiền cũng là một hợp đồng thông minh, dù có thể là độc hại. Do đó, trước khi chức năng cuối cùng hoặc cập nhật số dư xảy ra, một cuộc tấn công reentrancy có thể được khởi xướng để chuyển thêm tiền. Các kiểm toán viên kinh nghiệm nhận diện loại lỗ hổng này.
Đây là mã đã sửa cho cùng một điều:
function withdraw(uint256 _amount) public { require(balances[msg.sender] >= _amount, "Số dư không đủ."); balances[msg.sender] -= _amount; (bool success, ) = msg.sender.call{value: _amount}("");
require(success, “Chuyển khoản thất bại.”);}
Kiểm tra cách hàm cập nhật số dư được gọi trước và sau đó mới di chuyển đến người dùng đầu tiên. Thay đổi thứ tự hoạt động này là điều sửa lỗi hợp đồng.
Thế giới của các ứng dụng phi tập trung và hợp đồng thông minh đã vượt xa Ethereum. Mặc dù phần lớn hoạt động vẫn diễn ra trong hệ sinh thái Ethereum, có các chuỗi khác như Cardano, Solana và nhiều chuỗi khác hỗ trợ hợp đồng thông minh và yêu cầu tiêu chuẩn kiểm toán khác nhau.
Các chuỗi khối khác nhau sử dụng các ngôn ngữ lập trình khác nhau. Tính chất, cú pháp và thuộc tính của mã khác nhau, làm cho hợp đồng thông minh phản ứng với các thực hành viết và kiểm toán khác nhau. Ví dụ, Ethereum sử dụng Solidity, trong khi Polkadotsử dụng Ink và Rust — làm cho nó phản ứng với các tiêu chuẩn kiểm toán cụ thể.
Bây giờ nếu bạn muốn tiến xa hơn Ethereum, có một số công cụ kiểm định chuyên biệt để giúp bạn bắt đầu. Ví dụ, với Cardano, có bộ Marlowe cho xác minh hình thức và kiểm định. Khi đến với Solana, thư viện cụ thể của Rust và cargo-fuzz được thiết kế cho việc kiểm định và kiểm thử hợp đồng. Một kiểm định đa chuỗi phải hiểu rõ những khái niệm này để ngăn chặn các lỗ hổng hợp đồng.
Chỉ để nhắc lại, bạn có thể phân loại việc kiểm định hợp đồng thông minh thành ba loại: thủ công, tự động và kết hợp. Hãy lưu ý rằng mọi người ưa thích các chiến lược kiểm định kết hợp cho các hợp đồng phức tạp có logic kinh doanh sâu vì chúng là phương pháp toàn diện nhất.
Các tổ chức và cá nhân có kiến thức mã hóa tối thiểu thường thuê ngoài các yêu cầu viết và kiểm toán của họ cho các công ty có uy tín. Khi nói đến kiểm toán, việc lựa chọn đúng công ty trở nên quan trọng hơn mặc dù Công cụ AIthíchChatGPTcó thể giúp viết mã hợp đồng thông minh, kiểm tra cùng yêu cầu hiểu biết bằng tay.
Ngoài ra, đây là những yếu tố cần lưu ý khi giao việc kiểm toán cho bên ngoài:
Trước khi quyết định chọn công ty ngoại vi phù hợp, việc kiểm tra các báo cáo kiểm toán trước đó, đánh giá kinh nghiệm, và thậm chí tập trung vào các thành viên chính của nhóm là rất quan trọng.
Trước khi thuê, hãy chú ý đến chi phí và dịch vụ liên quan đến việc kiểm toán. Quan trọng nhất là phải hiểu rõ tính chất của các dịch vụ được cung cấp - như việc xác định vấn đề, giải quyết vấn đề, và nhiều hơn nữa. Bạn cũng phải kiểm tra xem liệu việc kiểm toán lại cũng được cung cấp sau khi triển khai dòng lệnh sửa lỗi đầu tiên không. Chi phí của việc kiểm toán hợp đồng thông minh có thể thay đổi tùy thuộc vào các dịch vụ, vì vậy, việc theo dõi mọi yêu cầu và ưu đãi trước khi tiếp tục là cần thiết.
Trong trường hợp bạn muốn từ bỏ một công ty và kiểm tra hợp đồng thông minh một cách tự mình, đây là những chiến lược và thực hành tốt nhất mà bạn nên nhớ:
Trí tuệ nhân tạo thực sự giúp việc viết hợp đồng thông minh dễ dàng hơn. Tuy nhiên, bất kể sự đổi mới của trí tuệ nhân tạo, khả năng kiểm toán hợp đồng thông minh một cách tốt nhất vẫn đòi hỏi sự can thiệp của con người. Do đó, nếu bạn dự định xây dựng sản phẩm web3 tiếp theo của mình nhấn mạnh vào hợp đồng thông minh và ứng dụng phi tập trung, quan trọng là tập trung tận tâm vào các nguồn lực kiểm toán tốt nhất cho hợp đồng thông minh của bạn. Với các vụ hack và vi phạm tiền điện tử xuất hiện mỗi ngày và hacker lên kế hoạch các chiến lược mới để xâm nhập, kiểm toán một hợp đồng đến hoàn thiện chắc chắn là một trong những kỹ năng quan trọng nhất trong thời đại hiện đại.