LoginSignup
0
1

More than 1 year has passed since last update.

Solidityのコントラクトからコントラクトを叩くまたは送金するコードの覚書

Posted at

特定のコントラクトのfunctionを叩く

Interfaceで実行したいコントラクトを定義して叩く方式
Interfaceで定義せずにabstractでも定義は可能

// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0 <0.9.0;

interface Telephone {
    function changeOwner(address _owner) external;
}

contract TelephoneAttack {
    address target = target contract address;
    function attack() external {
        Telephone(target).changeOwner(msg.sender);
    }
}

Abstractで定義する場合はこんな感じ

abstract contract Telephone {
    function changeOwner(address _owner) public virtual;
}

特定のコントラクトへ送金する

payableなアドレスに対してcallで送金を行う
Clientからコントラクトに対して実行するときは引数の後にoptionを指定するが、Solidityからコントラクトを実行する時は先にvalueなどを指定する。

この例では引数は無いため ("") となっているが引数がある場合はこのカッコ内で指定する

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Attacker {
    function attack (address payable target) external payable {
        (bool res,)  = target.call{value: msg.value}("");
        require(res, "failed");
    }
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1