Call | Delegatecall in solidity


Thanks to Deniz !


Other Source:

Aim: To understand call and delegatecall functions


We deploy “SomeContract

We deploy “OtherContract” and we take address.

We paste this address to the “simpleCall” function in “SomeContract” and fill the other 2 variable.

To use call you need to send encoded data as the param. The data will have the function signature and params encoded together.

contract SomeContract{

function simpleCall(address otherContract,uint256 setInt,string memory setString) public {

(bool success,)“setVal(uint256,string)”,setInt,setString));

Look at the otherContract.sol

function setVal(uint256 setInt,string calldata setString) public {

intVal = setInt;

stringVal = setString;


This is result in the OtherContract

It is possible to supply amount of gas and ether to the call method.{value: 1 ether, gas: 1000000}(abi.encodeWithSignature(“setVal(uint256,string)”,setInt,setString));

If you are sending ether to the call method, setVal should be a payable function. Otherwise the call will fail.


delegatecall is used to call a function of otherContract from someContract with someContract’s storage, balance and address supplied to the function. This is done for the purpose of using the function in otherContract as library code. Since the function will behave as it was a function of someContract itself.

We use simpleDelegateCall function in SomeContract . We put othercontract address and other 2 variables values. When we control the intVal and stringVal, we see that otherContract’ setVal function is used in SomeContract.

Dr. Engin YILMAZ