delegatecall is a low level function similar to call.
delegatecall은 저수준의 함수이고 call과 비슷합니다.
When contract A executes delegatecall to contract B, B's code is executed with contract A's storage, msg.sender and msg.value.
스마트컨트랙트 A가 스마트컨트랙트 B에 대한 delegatecall을 실행하면 스마트 컨트랙트 B의 코드는 스마트컨트랙트 A의 storage, msg.sender 및 msg.value로 실행된다.
A가 B에 대한 델리게이트 콜을 실행하면
B는 A의 스토리지와 msg.sender, msg.value로 실행됨
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
// NOTE: Deploy this contract first
contract B {
// NOTE: storage layout must be the same as contract A
uint public num;
address public sender;
uint public value;
function setVars(uint _num) public payable {
num = _num;
sender = msg.sender;
value = msg.value;
}
}
contract A {
uint public num;
address public sender;
uint public value;
function setVars(address _contract, uint _num) public payable {
// A's storage is set, B is not modified.
(bool success, bytes memory data) = _contract.delegatecall(
abi.encodeWithSignature("setVars(uint256)", _num)
);
}
}
delegate는 무슨 뜻일까요? delegate의 뜻은 다음과 같습니다.
명사
1. 대표(집단 의사를 대표하는 대표, 대표자)
동사
2. (권한 업무등을 ) 위임하다.
타동사
3. 뽑다, 선정하다. (대표를 뽑다, 대표를 선정하다.)
Solidity - Calling Other Contract (0) | 2023.01.25 |
---|---|
Solidity - Function Selector (0) | 2023.01.19 |
Solidity - Call (0) | 2023.01.17 |
Solidity - Fallback (0) | 2023.01.13 |
Solidity - Interface (0) | 2023.01.05 |