State Mutability trong Solidity là gì? Phân biệt view, pure, payable

1. Định nghĩa: State Mutability là gì?

Trong Solidity, State Mutability (tính chất thay đổi trạng thái) đề cập đến khả năng của một hàm để thay đổi trạng thái của các biến và các giá trị trong hợp đồng thông qua các giao dịch. Có ba loại tính chất thay đổi trạng thái khác nhau trong Solidity: “view”, “pure” và “payable”.

  1. View Functions: Hàm được đánh dấu với tính chất “view” chỉ đọc dữ liệu từ trạng thái và không thay đổi nó. Các hàm “view” không tốn phí gas để gọi và có thể được gọi từ bất kỳ hàm nào mà không gây thay đổi trạng thái.
  2. Pure Functions: Hàm có tính chất “pure” không chỉ đọc trạng thái cũng như không thay đổi trạng thái. Nó chỉ dựa vào thông tin mà nó nhận đầu vào và trả về kết quả dựa trên thông tin đó. Các hàm “pure” cũng không tốn phí gas khi gọi và có thể được gọi từ bất kỳ hàm nào mà không gây thay đổi trạng thái.
  3. Payable Functions: Hàm được đánh dấu với tính chất “payable” cho phép hợp đồng nhận Ether trong giao dịch. Điều này thường được sử dụng để thực hiện chức năng như mua bán hoặc trả tiền cho dịch vụ trong hợp đồng thông qua Ether.

Ngoài các tính chất trạng thái trên, các hàm mà không có bất kỳ tính chất thay đổi trạng thái nào có thể gọi từ bất kỳ hàm nào, bao gồm cả các hàm thay đổi trạng thái (không “view” hoặc “pure”).

2. Phân biệt viewpure

Cả hai tính chất “view” và “pure” trong Solidity đều chỉ định rằng một hàm không thay đổi trạng thái của hợp đồng và chỉ truy cập dữ liệu mà không thực hiện bất kỳ thay đổi nào trong trạng thái hoặc blockchain. Tuy nhiên, chúng có một số điểm khác nhau:

  1. View Functions:
    • Hàm “view” chỉ định rằng hàm không chỉ đọc trạng thái mà còn đọc trạng thái của các hợp đồng khác hoặc blockchain.
    • Hàm “view” có thể gọi các hàm khác có tính chất “view” hoặc “pure”.
    • Hàm “view” không tốn phí gas khi gọi và có thể được gọi từ bất kỳ hàm nào trong hợp đồng.
  2. Pure Functions:
    • Hàm “pure” chỉ định rằng hàm không chỉ đọc trạng thái mà còn không tham gia vào bất kỳ tác động nào đến dữ liệu ngoài hàm.
    • Hàm “pure” không thể gọi bất kỳ hàm nào khác ngoài các hàm “pure”.
    • Hàm “pure” cũng không tốn phí gas khi gọi và có thể được gọi từ bất kỳ hàm nào trong hợp đồng.

Cả hai tính chất “view” và “pure” đều đảm bảo rằng hàm không thay đổi trạng thái và không gây tác động đến dữ liệu ngoài hàm. Tuy nhiên, hàm “view” có thể truy cập đến trạng thái của các hợp đồng khác hoặc blockchain và có thể gọi các hàm khác có tính chất “view” hoặc “pure”, trong khi hàm “pure” không có khả năng này.

Click Digital xin phép đưa ra ví dụ về cả hai loại hàm viewpure trong Solidity:

pragma solidity ^0.8.0;

contract MathOperations {
    uint public storedNumber = 10;

    // Hàm view: Đọc trạng thái và tính toán, không thay đổi trạng thái
    function calculateSquare(uint _number) public view returns (uint) {
        return _number * _number + storedNumber;
    }

    // Hàm pure: Tính toán dựa trên đầu vào, không đọc cũng như thay đổi trạng thái
    function addNumbers(uint _a, uint _b) public pure returns (uint) {
        return _a + _b;
    }
}

Trong ví dụ trên, hàm calculateSquare được đánh dấu là “view” vì nó không chỉ tính toán dựa trên đầu vào mà còn truy cập vào biến storedNumber, một biến trạng thái của hợp đồng. Trong khi đó, hàm addNumbers được đánh dấu là “pure” vì nó chỉ thực hiện phép tính dựa trên đầu vào mà không truy cập trạng thái hoặc dữ liệu bên ngoài hàm.

Cả hai hàm này có thể được gọi từ các hàm khác trong hợp đồng mà không tốn phí gas, vì chúng không thay đổi trạng thái và không gây tác động đến blockchain.

Tóm lại, việc hiểu rõ tính chất thay đổi trạng thái (state mutability) trong Solidity là quan trọng để xác định cách mà hàm tương tác với dữ liệu trong hợp đồng và có thể được gọi từ những nơi nào trong hợp đồng mà không gây ra tình trạng không mong muốn.

Vietnam Pham – Click Digital

  • Đầu tư vào các công ty quảng cáo blockchain hàng đầu bằng cách MUA token Saigon (SGN) trên Pancakeswap: https://t.co/KJbk71cFe8 (đừng lo lắng về tính thanh khoản, hãy trở thành nhà đầu tư sớm)
  • Được hỗ trợ bởi Công ty Click Digital
  • Nâng cao kiến thức về blockchain và crypto
  • Lợi nhuận sẽ dùng để mua lại SGN hoặc đốt bớt nguồn cung SGN để đẩy giá SGN tăng.
  • Địa chỉ token trên mạng BSC: 0xa29c5da6673fd66e96065f44da94e351a3e2af65
  • Twitter: https://twitter.com/SaigonSGN135
  • Staking SGN: http://135web.net
Rate this post

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *