Skip to content

Instantly share code, notes, and snippets.

@ravachol70
Created April 28, 2023 12:03
Show Gist options
  • Select an option

  • Save ravachol70/6472879d2e3c165c8d7cda2a350c8ca5 to your computer and use it in GitHub Desktop.

Select an option

Save ravachol70/6472879d2e3c165c8d7cda2a350c8ca5 to your computer and use it in GitHub Desktop.
TFT Token ERC20 Interface
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract TFTToken {
string public name;
string public symbol;
uint8 public decimals;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
address public masterComparator;
address public comparatorAlpha;
address public comparatorOmega;
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
constructor(string memory _name, string memory _symbol, uint8 _decimals, uint256 _initialSupply, address _masterComparator) {
name = _name;
symbol = _symbol;
decimals = _decimals;
totalSupply = _initialSupply * (10 ** uint256(decimals));
balanceOf[msg.sender] = totalSupply;
masterComparator = _masterComparator;
emit Transfer(address(0), msg.sender, totalSupply);
}
function setComparators(address _comparatorAlpha, address _comparatorOmega) external {
require(msg.sender == masterComparator, "TFTToken: caller is not the Master Comparator");
comparatorAlpha = _comparatorAlpha;
comparatorOmega = _comparatorOmega;
}
function transfer(address _to, uint256 _value) external returns (bool success) {
_transfer(msg.sender, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) external returns (bool success) {
allowance[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) external returns (bool success) {
require(_value <= balanceOf[_from], "TFTToken: transfer amount exceeds balance");
require(_value <= allowance[_from][msg.sender], "TFTToken: transfer amount exceeds allowance");
allowance[_from][msg.sender] -= _value;
_transfer(_from, _to, _value);
return true;
}
function compareSelectedInflections(uint256 _inflectionBitmap, uint256 _tokenId) external {
require(msg.sender == comparatorAlpha || msg.sender == comparatorOmega, "TFTToken: caller is not a Comparator");
// Do the comparison logic here
// ...
}
function _transfer(address _from, address _to, uint256 _value) internal {
require(_to != address(0), "TFTToken: transfer to the zero address");
require(_value <= balanceOf[_from], "TFTToken: transfer amount exceeds balance");
balanceOf[_from] -= _value;
balanceOf[_to] += _value;
emit Transfer(_from, _to, _value);
// Call the Comparator contract to compare inflections
uint256 inflectionBitmap = 0; // Replace with actual inflection bitmap
uint256 tokenId = 0; // Replace with actual token ID
if (comparatorAlpha != address(0)) {
comparatorAlpha.call(abi.encodeWithSignature("compareSelectedInflections(uint256,uint256)", inflectionBitmap, tokenId));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment