iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 28
1
影片教學

Smart Contract 實戰教學系列 第 28

Example - ERC20 Token Exchange

當 ERC20 Token 越發越多了,有沒有辦法做一個跨 Token 的交易呢?答案是可以的!今天就讓我們來看看 Token Exchange 要怎麼做吧!

本次的 Example 一樣感謝我的朋友 polarjack 給予程式碼建議。

本日合約:

pragma solidity ^0.4.25;

import "browser/IERC20.sol";

contract TokenExchange {
    // From => UserA, TokenA
    address fromAddress;
    address fromToken;
    uint256 fromAmount;
    // To => UserB, TokenB
    address toToken;
    uint256 toAmount;
    
    // 假設 UserA 已經 Approve
    function CreateExchange(
        address _fromToken, uint256 _fromAmount,
        address _toToken, uint256 _toAmount) public {
            require(IERC20(_fromToken).transferFrom(msg.sender, this, _fromAmount));
            fromAddress = msg.sender;
            fromToken = _fromToken;
            fromAmount = _fromAmount;
            toToken = _toToken;
            toAmount = _toAmount;
        }
    
    function DoChange() public {
        require(IERC20(toToken).transferFrom(msg.sender, this, toAmount));
        IERC20(fromToken).transfer(msg.sender, fromAmount);
        IERC20(toToken).transfer(fromAddress, toAmount);
    }
}

本日影片:
https://youtu.be/1CvTpXEProc

Smart Contract 實戰教學播放清單:
https://www.youtube.com/playlist?list=PLHmOMPRfmOxSJcrlwyandWYiuP9ZAMYoF


上一篇
Example - 挖礦合資
下一篇
ICO Contract
系列文
Smart Contract 實戰教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
keep70327
iT邦新手 5 級 ‧ 2022-08-11 15:34:12

想請問為何是require(IERC20(_fromToken).transferFrom(msg.sender, this, _fromAmount))呢?

不太懂為何這裡require(IERC20(_fromToken)是這樣寫,想知道老師的邏輯思考方式,謝謝
想知道兩個問題:
1.為何需要寫require
2.(IERC20(_fromToken)這樣寫是什麼意思,為何這麼寫

hydai iT邦新手 4 級 ‧ 2022-08-11 15:47:14 檢舉

這個是用來檢查 transferFrom 的回傳值,確定他一定有成功,否則就直接終止。

keep70327 iT邦新手 5 級 ‧ 2022-08-11 18:17:27 檢舉

好的 我知道了,謝謝你了

我要留言

立即登入留言