Call Inner Contract
#
IntroductionPlaton has a built-in system contract,Support for SOLIDITY cross-contract calls, can be called by the following method:
<address>.call(...) returns (bool)
:
Low-level functions Call
, return false
, send all available GAS, adjustable.
<address>.callcode(...) returns (bool)
:
Low-level functions Callcode
, return false
, send all available GAS, adjustable.
<address>.delegatecall(...) returns (bool)
:
Emit a low-level function delegateCall
, return false
, send all available GAS, adjustable.
Or call the Call operating code by inline assembly.
#
Code examplepragma solidity ^0.5.13;
contract PlatonInner {
bytes returnValue;
function assemblyCallppos(bytes memory data,address addr) public { uint256 len = data.length; uint retsize; bytes memory resval; assembly { if iszero(call(gas, addr, 0, add(data, 0x20), len, 0, 0)) { invalid() } retsize := returndatasize() } resval = new bytes(retsize); assembly { returndatacopy(add(resval, 0x20), 0, returndatasize()) } returnValue = resval; }
function getReturnValue() public view returns(bytes memory ){ return returnValue; }
}
Note: The RLP codes are required for the parameters of the system contract, so it is recommended to complete it under the chain.