Skip to content

Instantly share code, notes, and snippets.

@fbslo
Last active July 5, 2021 21:56
Show Gist options
  • Save fbslo/f9a19d594c639ebb0ce73d7daa116c60 to your computer and use it in GitHub Desktop.
Save fbslo/f9a19d594c639ebb0ce73d7daa116c60 to your computer and use it in GitHub Desktop.
//SPDX-License-Identifier: MIT
//2021, @fbsloXBT
pragma solidity ^0.8.4;
interface IUSDC {
function transfer(address to, uint256 amount) external returns(bool);
function transferFrom(address sender, address receiver, uint256 amount) external returns(bool);
}
interface IMM {
function transfer(address to, uint256 amount) external returns(bool);
function transferFrom(address sender, address receiver, uint256 amount) external returns(bool);
}
contract MM_Redeemer {
//USDC
IUSDC public USDC = IUSDC(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
//MillionToken
IMM public MM = IMM(0x6B4c7A5e3f0B99FCD83e9c089BDDD6c7FCe5c611);
//Event
event Redemption(address user, uint256 amount);
event Buy(address user, uint256 amount);
function redeem(uint256 amount) external {
//Transfre MM from user and USDC to user
bool mmTransfer = MM.transferFrom(msg.sender, address(this), amount);
bool usdcTransfer = USDC.transfer(msg.sender, amount);
//Make sure both transfers were successful
require(mmTransfer && usdcTransfer, 'Transfer failed');
emit Redemption(msg.sender, amount);
}
function buy(uint256 amount) external {
//Transfer USDC from user and MM to user
bool usdcTransfer = USDC.transferFrom(msg.sender, address(this), amount);
bool mmTransfer = MM.transfer(msg.sender, amount);
//Make sure both transfers were successful
require(mmTransfer && usdcTransfer, 'Transfer failed');
emit Buy(msg.sender, amount);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment