「The Ethernaut by Zeppelin Level 6. Delegation」を翻訳してみました(CryptoZombiesのように?)
原文はこちら
https://ethernaut.zeppelin.solutions
6. Delegationをクリック
6. Delegation
下記コードのインスタンス(コントラクト)のオーナーを自分自身のアドレスに変更することがこのレベルのクリア
回答の助けになるヒント
- デリゲートコールにおける低レベル関数がどのように動作するか、デリゲートする為にはどのように使用するか、Solidityのドキュメントを参照せよ。
- フォールバックメソッドについての理解
- メソッドid(s)についての理解
ソースコード
pragma solidity ^0.4.18;
contract Delegate {
address public owner;
function Delegate(address _owner) public {
owner = _owner;
}
function pwn() public {
owner = msg.sender;
}
}
contract Delegation {
address public owner;
Delegate delegate;
function Delegation(address _delegateAddress) public {
delegate = Delegate(_delegateAddress);
owner = msg.sender;
}
function() public {
if(delegate.delegatecall(msg.data)) {
this;
}
}
}