Blockchain Ethereum – Ví dụ về hàm Delegatecall trong solidity

Trong loạt bài tự học về Blockchain Ethereum hôm nay chúng ta cùng tìm hiểu về hàm Delegatecall trong Solidity.

Delegatecall là một trong những cách gọi low-level từ Contract này qua Contract khác trong Solidity. Khi 1 Contract A Delegatecall() đến Contract B nghĩa là Contract A thực thi logic của Contract B nhưng dưới Context và Storage ở Contract A.

Ví dụ Contract A thực thi gọi Delegatecall Contract B thực thi 1 tính toán như sau:

pragma solidity >=0.6.0 <0.8.0;

contract A {
    
   uint256 result;
    function delegateCallOperators(address _contractLogic, uint256 _number1,uint256 _number2) external {
        (bool success, ) =  _contractLogic.delegatecall(abi.encodePacked(bytes4(keccak256("Operators(uint256,uint256)")), _number1,_number2));
        require(success, "Delegatecall failed");
    }
    function getResult() public view returns (uint256){
        return result;
    }
}

Contract B thực thi toán tự cộng như sau:

pragma solidity >=0.6.0 <0.8.0;

contract B{
    
    uint256 result;
    function Operators(uint256 _number1,uint256 _number2) external{
        result=_number1+_number2;
    }

Sử dụng Ethereum remix Deploy Contract A và Contract B, sau đó đứng ở Contract A gọi hàm DelegatecallOperators(Contract Address của B, 2,5). Lúc này Result=7

Tiếp tục tạo Contract C thực thi toán tử nhân như sau:

pragma solidity >=0.6.0 <0.8.0;

contract C{
    
    uint256 result;
    function Operators(uint256 _number1 , uint256 _number2) external{
        result=_number1 * _number2;
    }
}

Sử dụng Ethereum remix Deploy Contract A và Contract C, sau đó đứng ở Contract A gọi hàm DelegateCallOperators(Contract Address của B, 2,5). Lúc này Result=10

Kết luận

Như vậy DelegateCall trong Solidity giúp chúng ta có thể mở rộng Contract ban đầu bằng cách implement thêm logic trong Contract được gọi tới.

Trả lời

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 *