Hiểu về Hợp đồng thông minh: Đọc, Viết và Kiểm tra

Nâng cao11/26/2023, 12:41:25 PM
Bài viết này bao gồm các kỹ thuật lập trình hợp đồng thông minh, bao gồm hướng dẫn đọc, viết và kiểm định. Hiểu cấu trúc và các khối mã của hợp đồng thông minh là bước đầu tiên để viết chúng bằng Solidity hoặc các ngôn ngữ khác. Với việc hợp đồng thông minh là trung tâm của Tài chính Phi tập trung (DeFi) và Ứng dụng Phi tập trung (DApps), đảm bảo tính an toàn và hoàn hảo của chúng là rất quan trọng, với việc kiểm định hợp đồng thông minh đóng một vai trò quan trọng.

Đọc hợp đồng thông minh

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.

Hiểu về hợp đồng thông minh: cơ bản và mục đích

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.

Hợp đồng thông minh và ý nghĩa của 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.

Đặc điểm của hợp đồng thông minh

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 có thể lập trình

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.

Không tin cậy

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.

Tự trị

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.

Bảo mật

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ó thể xác minh

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

Đọc hợp đồng thông minh dựa trên các đặc điểm

Đâ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.

Phần "có thể lập trình"

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.

Phần "không tin cậy"

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ã.

Phần “tự trị”

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ạn vượt qua $ 100, với số tiền vượt quá chuyển đến người thụ hưởng.

Phần 'secured'

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.

Phần "có thể xác minh"

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);

Đọc các phần khác của một hợp đồng thông minh

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.

Các yếu tố 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

DApps và hợp đồng thông minh: mối quan hệ

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.

Blockchains cho hợp đồng thông minh

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.

Ethereum

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.

Các chuỗi khối khác

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::prelude::*;) đạ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.

Tại sao bạn nên học đọc hợp đồng thông minh?

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:

  1. Khả năng tìm hiểu về sự phức tạp tự động hóa liên quan đến các ứng dụng DeFi.
  2. Phân tích các tiêu chuẩn sở hữu liên quan đến tài sản token hóa.
  3. Hiểu biết cáchCác tổ chức tự trị phi tập trung (DAO)chức năng.
  4. Hiểu và triển khai logic dựa trên trường hợp sử dụng liên quan đến bảo hiểm, tiếp cận nội dung, bỏ phiếuHệ thống, tiền bản quyền và các ngành khác.

Cách viết hợp đồng thông minh

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ữ.

Vai trò của lập trình

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.

EVM và hợp đồng thông minh: một cái nhìn tổng quan

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.

Ai cũng có thể viết một hợp đồng thông minh được không?

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:

  1. Bắt đầu bằng cách chọn nền tảng hoặc chuỗi mà bạn muốn làm việc với.
  2. Học ngôn ngữ lập trình liên quan đến chuỗi, như Solidity cho Ethereum.
  3. Tìm hiểu về việc sử dụng các công cụ phát triển như Môi trường Phát triển tích hợp như Remix.
  4. Bắt đầu bằng cách viết hợp đồng đầu tiên của bạn và sau đó thử nghiệm bằng cách sử dụng testnets.
  5. Khi bạn hài lòng với các yếu tố của mã, bạn có thể triển khai nó trên chuỗi. Hãy nhớ rằng việc triển khai hợp đồng trên chuỗi sẽ tốn phí dưới dạng phí gas.

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

Đào sâu vào lập trình

Đã đế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.

Tại sao 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:

  1. Pragmas hoặc phiên bản trình biên dịch
  2. Định nghĩa hợp đồng cho việc gán nhãn
  3. Biến trạng thái để lưu trữ dữ liệu
  4. Sự kiện cho việc đăng nhập EVM
  5. Các bộ chỉnh sửa để cung cấp quyền cụ thể cho các cơ quan cụ thể
  6. Chức năng hoặc các hoạt động của hợp đồng thông minh đang diễn ra
  7. Kế thừa cho tính tương tác
  8. Hiểu về cấu trúc điều khiển như if, else, vòng lặp for, kiểu dữ liệu như chuỗi, số nguyên và nhiều hơn nữa.

Viết và triển khai hợp đồng thông minh đầu tiên

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.

Căn bản

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.

Bước để viết và triển khai

Đâ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:

  1. Node.js và NPM (đã thảo luận): Hoạt động như một bộ máy để cung cấp năng lượng cho hợp đồng thông minh của bạn
  2. Truffle: Hoạt động như một hộp công cụ, giúp bạn tổ chức mã, script và các phần khác của một hợp đồng
  3. Ganache: Hoạt động giống như một sân chơi ảo trên thiết bị. Hãy nghĩ đến nó như một blockchain cá nhân.

Điều gì là thực hiện hợp đồng?

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:

Bước 1

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.

Bước 2

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.

Bước 3

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.

Bước 4

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ể.

Bước 5

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.

Bước 6

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ó.

Phát triển hợp đồng thông minh và các phương pháp tốt nhất

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:

  1. Khi viết hợp đồng, việc tin tưởng vào thư viện đáng tin cậy như các thư viện tại OpenZeppelin để tuân thủ các tiêu chuẩn tối ưu hóa mã code và bảo mật mong muốn là một lời khuyên hữu ích.
  2. Ý tưởng là giữ cho hợp đồng mô đun và đơn giản hơn - làm cho việc kiểm tra và xem xét dễ dàng hơn.
  3. Một ý tưởng tốt là triển khai kiểm soát truy cập cụ thể cho hợp đồng. Điều này có nghĩa là khai báo các đoạn mã chỉ một người hoặc thực thể cụ thể mới có thể thay đổi các đặc điểm quan trọng của hợp đồng. Kiểm soát truy cập giúp việc giữ an toàn cho các hợp đồng thông minh dễ dàng hơn.
  4. Khi viết hợp đồng, luôn phải có quy định để xử lý các trường hợp đặc biệt và ngoại lệ — tất cả đều trong quá trình viết nhiều bài kiểm tra.

Chăm sóc tính bền vững của mã nguồn

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.

  1. Xử lý lưu trữ một cách hiệu quả bằng cách sử dụng các tập dữ liệu nhỏ hơn. Ví dụ, khi viết một hợp đồng, hãy sử dụng uint8 làm giá trị hoạt động thay vì uint256.
  2. Khi viết một hợp đồng, nên tối ưu mã bằng cách kết hợp nhiều hoạt động thành một. Chúng tôi sẽ đi sâu hơn vào điều này trong bài viết chi tiết của chúng tôi về “viết hợp đồng thông minh.”
  3. Một ý tưởng tốt là sử dụng đánh giá lười biếng đối với việc thực thi hợp đồng thông minh. Điều này giúp bạn chỉ cần thực thi một hàm khi cần và không phải mỗi khi có điều gì đó được đẩy đến địa chỉ hợp đồng thông minh.
  4. Cuối cùng, dựa vào tính toán ngoại chuỗi cũng là một cách tốt để tập trung vào sự bền vững. Điều này giúp giảm yêu cầu phí gas và thậm chí có thể tăng tốc thực thi hợp đồng.

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.

Làm thế nào để kiểm tra hợp đồng thông minh?

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

Mối quan hệ giữa việc đọc, viết và kiểm toán: tại sao cần kiểm toán hợp đồng thông minh?

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.

Lỗ hổng hợp đồng và các biện pháp khắc phục

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 đề đó.

Vi phạm đúng phương pháp nghiên cứu và học hỏi

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

Chiến lược kiểm toán hợp đồng thông minh

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ông cụ kiểm toán

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

Đánh giá mã

Đâ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

Quét tự động

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.

Xác minh chính thức

Đâ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

Làm thế nào để xem lại mã đúng?

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:

Phân tích tĩnh

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ân tích động

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ọ.

Kiểm thử một đoạn mã thực tế

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.

Các chuỗi và mã không phải là Ethereum và xem xét mã

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.

Tại sao mỗi nền tảng đều độc đáo?

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ể.

Công cụ để chuyển sang không phải Ethereum

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.

Có những loại kiểm toán hợp đồng thông minh nào?

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.

Outsourcing các cuộc kiểm toán của bạn

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:

Chọn đúng công ty

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.

Hiểu rõ trách nhiệm, chi phí và chi phí quản lý

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.

Các phương pháp kiểm định hợp đồng thông minh tốt nhấ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ớ:

  1. Luôn tập trung vào việc xem xét mã nguồn kỹ lưỡng, bao gồm cả cú pháp và logic
  2. Bắt đầu bằng cách chọn các lỗ hổng phổ biến bằng các công cụ như Slither, MythX, v.v.
  3. Duyệt qua Register Phân loại Lỗ hổng Hợp đồng Thông minh hoặc SWC để xác định các lỗ hổng đã biết và kiểm tra chúng trước.
  4. Kiểm thử kỹ lưỡng các hợp đồng thông minh, bao gồm kiểm thử tích hợp, kiểm thử đơn vị, và nhiều hơn nữa, để thử nghiệm mã nguồn trên một loạt các tình huống khác nhau.
  5. Quan trọng là kiểm tra khả năng tấn công tái nhập cụ thể. Cách tốt nhất để chống lại điều này là kiểm tra các cuộc gọi đệ quy mà hacker có thể gọi trước hàm hợp đồng thông minh đầu tiên.
  6. Tập trung vào các chức năng dẫn đến các cuộc gọi bên ngoài. Một lỗi trong vấn đề này có thể làm thay đổi trạng thái và luồng kiểm soát, điều này không mong muốn.
  7. Luôn luôn chú ý đến các phần mã mà trỏ đến việc sử dụng gas. Bạn không muốn hợp đồng của mình bắt đầu tương tác mà rất tốn kém.

Phát triển hợp đồng thông minh và AI: tương lai

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.

Tuyên bố từ chối trách nhiệm:

  1. Bài viết này được sao chép từ [ Beincrypto], và bản quyền thuộc về tác giả gốc [Ananda Banerjee]. Nếu có ý kiến ​​phản đối về việc sao chép, vui lòng liên hệ với nhóm Gate Learn, và nhóm sẽ xử lý ngay theo quy trình liên quan.
  2. Tuyên bố từ chối trách nhiệm: Các quan điểm và ý kiến được thể hiện trong bài viết này chỉ đại diện cho quan điểm cá nhân của tác giả và không hình thành bất kỳ lời khuyên đầu tư nào.
  3. Các phiên bản ngôn ngữ khác của bài viết được dịch bởi nhóm Gate Learn. Không được sao chép, phổ biến hoặc đạo văn các bài viết đã dịch mà không đề cập đến Gate.io.

Bagikan

Hiểu về Hợp đồng thông minh: Đọc, Viết và Kiểm tra

Nâng cao11/26/2023, 12:41:25 PM
Bài viết này bao gồm các kỹ thuật lập trình hợp đồng thông minh, bao gồm hướng dẫn đọc, viết và kiểm định. Hiểu cấu trúc và các khối mã của hợp đồng thông minh là bước đầu tiên để viết chúng bằng Solidity hoặc các ngôn ngữ khác. Với việc hợp đồng thông minh là trung tâm của Tài chính Phi tập trung (DeFi) và Ứng dụng Phi tập trung (DApps), đảm bảo tính an toàn và hoàn hảo của chúng là rất quan trọng, với việc kiểm định hợp đồng thông minh đóng một vai trò quan trọng.

Đọc hợp đồng thông minh

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.

Hiểu về hợp đồng thông minh: cơ bản và mục đích

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.

Hợp đồng thông minh và ý nghĩa của 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.

Đặc điểm của hợp đồng thông minh

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 có thể lập trình

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.

Không tin cậy

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.

Tự trị

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.

Bảo mật

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ó thể xác minh

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

Đọc hợp đồng thông minh dựa trên các đặc điểm

Đâ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.

Phần "có thể lập trình"

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.

Phần "không tin cậy"

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ã.

Phần “tự trị”

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ạn vượt qua $ 100, với số tiền vượt quá chuyển đến người thụ hưởng.

Phần 'secured'

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.

Phần "có thể xác minh"

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);

Đọc các phần khác của một hợp đồng thông minh

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.

Các yếu tố 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

DApps và hợp đồng thông minh: mối quan hệ

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.

Blockchains cho hợp đồng thông minh

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.

Ethereum

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.

Các chuỗi khối khác

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::prelude::*;) đạ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.

Tại sao bạn nên học đọc hợp đồng thông minh?

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:

  1. Khả năng tìm hiểu về sự phức tạp tự động hóa liên quan đến các ứng dụng DeFi.
  2. Phân tích các tiêu chuẩn sở hữu liên quan đến tài sản token hóa.
  3. Hiểu biết cáchCác tổ chức tự trị phi tập trung (DAO)chức năng.
  4. Hiểu và triển khai logic dựa trên trường hợp sử dụng liên quan đến bảo hiểm, tiếp cận nội dung, bỏ phiếuHệ thống, tiền bản quyền và các ngành khác.

Cách viết hợp đồng thông minh

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ữ.

Vai trò của lập trình

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.

EVM và hợp đồng thông minh: một cái nhìn tổng quan

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.

Ai cũng có thể viết một hợp đồng thông minh được không?

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:

  1. Bắt đầu bằng cách chọn nền tảng hoặc chuỗi mà bạn muốn làm việc với.
  2. Học ngôn ngữ lập trình liên quan đến chuỗi, như Solidity cho Ethereum.
  3. Tìm hiểu về việc sử dụng các công cụ phát triển như Môi trường Phát triển tích hợp như Remix.
  4. Bắt đầu bằng cách viết hợp đồng đầu tiên của bạn và sau đó thử nghiệm bằng cách sử dụng testnets.
  5. Khi bạn hài lòng với các yếu tố của mã, bạn có thể triển khai nó trên chuỗi. Hãy nhớ rằng việc triển khai hợp đồng trên chuỗi sẽ tốn phí dưới dạng phí gas.

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

Đào sâu vào lập trình

Đã đế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.

Tại sao 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:

  1. Pragmas hoặc phiên bản trình biên dịch
  2. Định nghĩa hợp đồng cho việc gán nhãn
  3. Biến trạng thái để lưu trữ dữ liệu
  4. Sự kiện cho việc đăng nhập EVM
  5. Các bộ chỉnh sửa để cung cấp quyền cụ thể cho các cơ quan cụ thể
  6. Chức năng hoặc các hoạt động của hợp đồng thông minh đang diễn ra
  7. Kế thừa cho tính tương tác
  8. Hiểu về cấu trúc điều khiển như if, else, vòng lặp for, kiểu dữ liệu như chuỗi, số nguyên và nhiều hơn nữa.

Viết và triển khai hợp đồng thông minh đầu tiên

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.

Căn bản

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.

Bước để viết và triển khai

Đâ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:

  1. Node.js và NPM (đã thảo luận): Hoạt động như một bộ máy để cung cấp năng lượng cho hợp đồng thông minh của bạn
  2. Truffle: Hoạt động như một hộp công cụ, giúp bạn tổ chức mã, script và các phần khác của một hợp đồng
  3. Ganache: Hoạt động giống như một sân chơi ảo trên thiết bị. Hãy nghĩ đến nó như một blockchain cá nhân.

Điều gì là thực hiện hợp đồng?

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:

Bước 1

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.

Bước 2

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.

Bước 3

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.

Bước 4

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ể.

Bước 5

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.

Bước 6

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ó.

Phát triển hợp đồng thông minh và các phương pháp tốt nhất

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:

  1. Khi viết hợp đồng, việc tin tưởng vào thư viện đáng tin cậy như các thư viện tại OpenZeppelin để tuân thủ các tiêu chuẩn tối ưu hóa mã code và bảo mật mong muốn là một lời khuyên hữu ích.
  2. Ý tưởng là giữ cho hợp đồng mô đun và đơn giản hơn - làm cho việc kiểm tra và xem xét dễ dàng hơn.
  3. Một ý tưởng tốt là triển khai kiểm soát truy cập cụ thể cho hợp đồng. Điều này có nghĩa là khai báo các đoạn mã chỉ một người hoặc thực thể cụ thể mới có thể thay đổi các đặc điểm quan trọng của hợp đồng. Kiểm soát truy cập giúp việc giữ an toàn cho các hợp đồng thông minh dễ dàng hơn.
  4. Khi viết hợp đồng, luôn phải có quy định để xử lý các trường hợp đặc biệt và ngoại lệ — tất cả đều trong quá trình viết nhiều bài kiểm tra.

Chăm sóc tính bền vững của mã nguồn

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.

  1. Xử lý lưu trữ một cách hiệu quả bằng cách sử dụng các tập dữ liệu nhỏ hơn. Ví dụ, khi viết một hợp đồng, hãy sử dụng uint8 làm giá trị hoạt động thay vì uint256.
  2. Khi viết một hợp đồng, nên tối ưu mã bằng cách kết hợp nhiều hoạt động thành một. Chúng tôi sẽ đi sâu hơn vào điều này trong bài viết chi tiết của chúng tôi về “viết hợp đồng thông minh.”
  3. Một ý tưởng tốt là sử dụng đánh giá lười biếng đối với việc thực thi hợp đồng thông minh. Điều này giúp bạn chỉ cần thực thi một hàm khi cần và không phải mỗi khi có điều gì đó được đẩy đến địa chỉ hợp đồng thông minh.
  4. Cuối cùng, dựa vào tính toán ngoại chuỗi cũng là một cách tốt để tập trung vào sự bền vững. Điều này giúp giảm yêu cầu phí gas và thậm chí có thể tăng tốc thực thi hợp đồng.

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.

Làm thế nào để kiểm tra hợp đồng thông minh?

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

Mối quan hệ giữa việc đọc, viết và kiểm toán: tại sao cần kiểm toán hợp đồng thông minh?

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.

Lỗ hổng hợp đồng và các biện pháp khắc phục

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 đề đó.

Vi phạm đúng phương pháp nghiên cứu và học hỏi

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

Chiến lược kiểm toán hợp đồng thông minh

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ông cụ kiểm toán

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

Đánh giá mã

Đâ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

Quét tự động

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.

Xác minh chính thức

Đâ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

Làm thế nào để xem lại mã đúng?

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:

Phân tích tĩnh

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ân tích động

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ọ.

Kiểm thử một đoạn mã thực tế

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.

Các chuỗi và mã không phải là Ethereum và xem xét mã

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.

Tại sao mỗi nền tảng đều độc đáo?

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ể.

Công cụ để chuyển sang không phải Ethereum

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.

Có những loại kiểm toán hợp đồng thông minh nào?

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.

Outsourcing các cuộc kiểm toán của bạn

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:

Chọn đúng công ty

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.

Hiểu rõ trách nhiệm, chi phí và chi phí quản lý

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.

Các phương pháp kiểm định hợp đồng thông minh tốt nhấ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ớ:

  1. Luôn tập trung vào việc xem xét mã nguồn kỹ lưỡng, bao gồm cả cú pháp và logic
  2. Bắt đầu bằng cách chọn các lỗ hổng phổ biến bằng các công cụ như Slither, MythX, v.v.
  3. Duyệt qua Register Phân loại Lỗ hổng Hợp đồng Thông minh hoặc SWC để xác định các lỗ hổng đã biết và kiểm tra chúng trước.
  4. Kiểm thử kỹ lưỡng các hợp đồng thông minh, bao gồm kiểm thử tích hợp, kiểm thử đơn vị, và nhiều hơn nữa, để thử nghiệm mã nguồn trên một loạt các tình huống khác nhau.
  5. Quan trọng là kiểm tra khả năng tấn công tái nhập cụ thể. Cách tốt nhất để chống lại điều này là kiểm tra các cuộc gọi đệ quy mà hacker có thể gọi trước hàm hợp đồng thông minh đầu tiên.
  6. Tập trung vào các chức năng dẫn đến các cuộc gọi bên ngoài. Một lỗi trong vấn đề này có thể làm thay đổi trạng thái và luồng kiểm soát, điều này không mong muốn.
  7. Luôn luôn chú ý đến các phần mã mà trỏ đến việc sử dụng gas. Bạn không muốn hợp đồng của mình bắt đầu tương tác mà rất tốn kém.

Phát triển hợp đồng thông minh và AI: tương lai

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.

Tuyên bố từ chối trách nhiệm:

  1. Bài viết này được sao chép từ [ Beincrypto], và bản quyền thuộc về tác giả gốc [Ananda Banerjee]. Nếu có ý kiến ​​phản đối về việc sao chép, vui lòng liên hệ với nhóm Gate Learn, và nhóm sẽ xử lý ngay theo quy trình liên quan.
  2. Tuyên bố từ chối trách nhiệm: Các quan điểm và ý kiến được thể hiện trong bài viết này chỉ đại diện cho quan điểm cá nhân của tác giả và không hình thành bất kỳ lời khuyên đầu tư nào.
  3. Các phiên bản ngôn ngữ khác của bài viết được dịch bởi nhóm Gate Learn. Không được sao chép, phổ biến hoặc đạo văn các bài viết đã dịch mà không đề cập đến Gate.io.
Mulai Sekarang
Daftar dan dapatkan Voucher
$100
!