Cách code sử dụng thư viện SafeMath trong Solidity

Solidity là một ngôn ngữ lập trình hợp đồng thông minh được sử dụng để xây dựng các ứng dụng phi tập trung (DApps) trên Ethereum. Solidity cung cấp một số tính năng mạnh mẽ để phát triển các hợp đồng thông minh an toàn và hiệu quả. Một trong những tính năng này là thư viện SafeMath.

Công dụng của thư viện SafeMath

Thư viện SafeMath cung cấp các hàm và phương thức để thực hiện các phép toán số an toàn trong Solidity. Các phép toán số an toàn này giúp bảo vệ các hợp đồng thông minh khỏi các lỗi tràn số (overflows) và lỗi dưới số (underflows).

Bạn không cần thư viện SafeMath cho Solidity phiên bản 0.8+. Kể từ Solidity 0.8, việc kiểm tra overflows/underflows được triển khai ở cấp độ ngôn ngữ – nó bổ sung xác thực vào mã byte trong quá trình biên dịch. Bạn vẫn có thể sử dụng nó trong phiên bản này, nó sẽ chỉ thực hiện cùng một quá trình xác thực hai lần.

Và chúng tôi thực sự khuyên bạn nên sử dụng nó ở phiên bản 0.7, vì quá trình xác thực chưa được thực hiện ở cấp độ ngôn ngữ trong phiên bản này.

Cách sử dụng thư viện SafeMath

Để sử dụng thư viện SafeMath, bạn cần thêm thư viện vào hợp đồng thông minh của mình từ OpenZeppelin. Bạn có thể làm điều này bằng cách sử dụng câu lệnh import:

pragma solidity ^0.8.3;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol";
contract MyContract{

    //1st Method of calling solidity library function 
    using SafeMath for uint256;
    function addition(uint256 a, uint256 b) public payable returns (bool,uint256)
    { return a.tryAdd(b);}
    
    //2nd Method of calling solidity library function 
    function multiply(uint256 a, uint256 b) public payable returns (bool,uint256)
    { return SafeMath.tryMul(a,b);}
    
   
}

Trong Contract ví dụ bên trên này, chúng ta đã nhập thư viện SafeMath từ openzeppelin.

Ở đây, chúng ta cũng sẽ thấy hai cách gọi các hàm thư viện:

Trong phương pháp thứ nhất, chúng ta thấy rằng chúng ta chỉ truyền một đối số vào hàm thư viện “tryAdd” và đối số tiếp theo chúng ta đặt ở phía đầu tiên được theo sau bởi dấu “.”. Ở đây, solidity mặc định nhận diện hàm thư viện mà chúng ta đã viết “using SafeMath for uint256;”.

Trong phương pháp thứ hai, chúng ta thấy rằng chúng ta truyền hai đối số bên trong, khác với phương pháp thứ nhất vì chúng ta đã viết tên thư viện “SafeMath” theo sau bởi dấu “.”. Ở đây không cần viết “using SafeMath for uint256;”.

Các ví dụ khác được viết bằng cách thứ 2

Để thực hiện phép cộng an toàn, bạn có thể sử dụng hàm add():

uint256 a = 10;
uint256 b = 20;

uint256 result = SafeMath.add(a, b);

Kết quả của phép cộng này sẽ là 30.

Thêm ví dụ nha, dùng SafeMath để thực hiện phép cộng, phép trừ, phép nhân và phép chia an toàn:

pragma solidity ^0.8.0;

import "SafeMath.sol";

contract Example {

  function addition() public view returns (uint256) {
    uint256 a = 10;
    uint256 b = 20;

    return SafeMath.add(a, b);
  }

  function subtraction() public view returns (uint256) {
    uint256 a = 10;
    uint256 b = 20;

    return SafeMath.sub(a, b);
  }

  function multiplication() public view returns (uint256) {
    uint256 a = 10;
    uint256 b = 20;

    return SafeMath.mul(a, b);
  }

  function division() public view returns (uint256) {
    uint256 a = 10;
    uint256 b = 20;

    return SafeMath.div(a, b);
  }
}

Kết quả của các hàm addition(), subtraction(), multiplication()division() sẽ lần lượt là 30, 0, 200 và 0,5.

Thư viện SafeMath là một công cụ quan trọng để phát triển các hợp đồng thông minh an toàn trong Solidity. Bằng cách sử dụng thư viện này, các nhà phát triển có thể giảm thiểu nguy cơ xảy ra các lỗi tràn số và lỗi dưới số.

Vietnam Pham – Click Digital

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 *