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.
Blockchain Ethereum – Ví dụ về hàm Delegatecall trong solidity
Blockchain Ethereum (P4) – Kết Nối Các Node Sử Dụng Bootnode
Blockchain Ethereum (P3) – Cài Đặt Private Blockchain trên nền tảng Ethereum
Install web3 and nodejs
Sử dụng Virtual Box
Đọc sách 2021