Contract

0x7739089d4AcD765f0968c93149C54FB3366F2457

Overview
0.0000 Trust Bitcoin
$0.0000
More Info
 
Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : TUSD.sol

// SPDX-License-Identifier: Unlicensed pragma solidity 0.8.10; /// @title Ownable - Basic ownership control mechanism /// @notice Provides a modifier to restrict function access to the contract owner contract Ownable { /// @notice The address of the contract owner address public owner; /// @notice Restricts function access to only the current owner modifier onlyOwner() { require(msg.sender == owner); _; } /// @notice Transfers ownership to a new address /// @param newOwner The address to be assigned as the new owner function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "New owner is zero address"); owner = newOwner; } } /// @title ITBC20 - Interface for ERC-20 like token /// @notice Describes the standard ERC-20 token functions and events interface ITBC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /// @notice Emitted when tokens are transferred between addresses event Transfer(address indexed from, address indexed to, uint256 value); /// @notice Emitted when an approval is made for a spender event Approval(address indexed owner, address indexed spender, uint256 value); } /// @title TBC20Basic - A basic TBC-20 implementation with minting and ownership /// @notice Implements the ITBC20 interface with additional mint functionality contract TBC20Basic is ITBC20, Ownable { /// @notice Tracks the current total circulating supply uint256 circulatingSupply; /// @notice Mapping of user balances mapping(address => uint256) balances; /// @notice Nested mapping to track allowances mapping(address => mapping (address => uint256)) allowed; /// @notice Returns the total number of tokens in circulation /// @return The circulating token supply function totalSupply() public override view returns (uint256) { return circulatingSupply ; } /// @notice Gets the token balance of a specific address /// @param tokenOwner The address to query /// @return The balance of the queried address function balanceOf(address tokenOwner) public override view returns (uint256) { return balances[tokenOwner]; } /// @notice Transfers tokens to a specified address /// @param receiver The address to receive the tokens /// @param numTokens The number of tokens to transfer /// @return True if the transfer was successful function transfer(address receiver, uint256 numTokens) public override returns (bool) { require(numTokens <= balances[msg.sender], "Transfer amount exceeds balance"); require(receiver != address(0), "Transfer from the zero address"); balances[address(msg.sender)] -= numTokens; balances[address(receiver)] += numTokens; emit Transfer(address(msg.sender), address(receiver), numTokens); return true; } /// @notice Approves a spender to transfer tokens on your behalf /// @param spender The address authorized to spend /// @param numTokens The number of tokens to approve /// @return True if the approval was successful function approve(address spender, uint256 numTokens) public override returns (bool) { allowed[address(msg.sender)][address(spender)] = numTokens; emit Approval(address(msg.sender), address(spender), numTokens); return true; } /// @notice Returns the remaining number of tokens that a spender can spend /// @param owner The address which owns the tokens /// @param spender The address which will spend the tokens /// @return The remaining allowance function allowance(address owner, address spender) public override view returns (uint) { return allowed[address(owner)][address(spender)]; } /// @notice Transfers tokens on behalf of another address /// @param sender The address to send tokens from /// @param receiver The address to transfer tokens to /// @param numTokens The number of tokens to transfer /// @return True if the transfer was successful function transferFrom(address sender, address receiver, uint256 numTokens) public override returns (bool) { require(numTokens <= balances[sender], "Transfer amount exceeds balance"); require(numTokens <= allowed[sender][msg.sender], "Transfer amount exceeds allowance"); require(receiver != address(0), "Transfer to the zero address"); balances[address(sender)] -= numTokens; balances[address(receiver)] += numTokens; allowed[address(sender)][address(msg.sender)] -= numTokens; emit Transfer(address(sender), address(receiver), numTokens); return true; } /// @notice Mints new tokens to the owner's balance /// @dev Can only be called by the contract owner /// @param numTokens The number of tokens to mint function mint(uint256 numTokens) public onlyOwner { require(numTokens + circulatingSupply <= 2100000000 * 10**18, "Mint limit exceeds"); circulatingSupply += numTokens; balances[address(msg.sender)] += numTokens; emit Transfer(address(0), address(msg.sender), numTokens); } } /// @title TUSD Token Contract /// @notice TBC-20 compatible token with an initial supply and minting ability contract TUSD is TBC20Basic { /// @notice The name of the token string public constant name = "Trust USD"; /// @notice The token symbol string public constant symbol = "TUSD"; /// @notice Number of decimals used by the token uint8 public constant decimals = 18; /// @notice Initializes the token with a predefined supply assigned to the given receiver /// @param receiver The address that receives the initial supply and becomes the owner constructor(address receiver) { require(receiver != address(0), "Receiver is zero address"); owner = address(receiver); circulatingSupply = 210000000 * 10**18; balances[address(receiver)] = circulatingSupply; emit Transfer(address(0), address(receiver), circulatingSupply); } }
ABI Code (Solidity Standard Json-Input format)

File 1 of 1 : ABI.json

[ { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenOwner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "numTokens", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
Contract Creation Code
0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b1461018257806395d89b41146101ad578063a0712d68146101d0578063a9059cbb146101e5578063dd62ed3e146101f8578063f2fde38b1461023157600080fd5b806306fdde03146100b9578063095ea7b3146100f757806318160ddd1461011a57806323b872dd1461012c578063313ce5671461013f57806370a0823114610159575b600080fd5b6100e160405180604001604052806009815260200168151c9d5cdd081554d160ba1b81525081565b6040516100ee9190610798565b60405180910390f35b61010a610105366004610809565b610244565b60405190151581526020016100ee565b6001545b6040519081526020016100ee565b61010a61013a366004610833565b6102b0565b610147601281565b60405160ff90911681526020016100ee565b61011e61016736600461086f565b6001600160a01b031660009081526002602052604090205490565b600054610195906001600160a01b031681565b6040516001600160a01b0390911681526020016100ee565b6100e160405180604001604052806004815260200163151554d160e21b81525081565b6101e36101de366004610891565b6104db565b005b61010a6101f3366004610809565b6105c6565b61011e6102063660046108aa565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6101e361023f36600461086f565b610709565b3360008181526003602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061029f9086815260200190565b60405180910390a350600192915050565b6001600160a01b03831660009081526002602052604081205482111561031d5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220616d6f756e7420657863656564732062616c616e63650060448201526064015b60405180910390fd5b6001600160a01b038416600090815260036020908152604080832033845290915290205482111561039a5760405162461bcd60e51b815260206004820152602160248201527f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636044820152606560f81b6064820152608401610314565b6001600160a01b0383166103f05760405162461bcd60e51b815260206004820152601c60248201527f5472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610314565b6001600160a01b038416600090815260026020526040812080548492906104189084906108f3565b90915550506001600160a01b0383166000908152600260205260408120805484929061044590849061090a565b90915550506001600160a01b03841660009081526003602090815260408083203384529091528120805484929061047d9084906108f3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516104c991815260200190565b60405180910390a35060019392505050565b6000546001600160a01b031633146104f257600080fd5b6b06c9144c1c690d4cb40000006001548261050d919061090a565b11156105505760405162461bcd60e51b81526020600482015260126024820152714d696e74206c696d6974206578636565647360701b6044820152606401610314565b8060016000828254610562919061090a565b9091555050336000908152600260205260408120805483929061058690849061090a565b909155505060405181815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b336000908152600260205260408120548211156106255760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220616d6f756e7420657863656564732062616c616e6365006044820152606401610314565b6001600160a01b03831661067b5760405162461bcd60e51b815260206004820152601e60248201527f5472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610314565b336000908152600260205260408120805484929061069a9084906108f3565b90915550506001600160a01b038316600090815260026020526040812080548492906106c790849061090a565b90915550506040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161029f565b6000546001600160a01b0316331461072057600080fd5b6001600160a01b0381166107765760405162461bcd60e51b815260206004820152601960248201527f4e6577206f776e6572206973207a65726f2061646472657373000000000000006044820152606401610314565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600060208083528351808285015260005b818110156107c5578581018301518582016040015282016107a9565b818111156107d7576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461080457600080fd5b919050565b6000806040838503121561081c57600080fd5b610825836107ed565b946020939093013593505050565b60008060006060848603121561084857600080fd5b610851846107ed565b925061085f602085016107ed565b9150604084013590509250925092565b60006020828403121561088157600080fd5b61088a826107ed565b9392505050565b6000602082840312156108a357600080fd5b5035919050565b600080604083850312156108bd57600080fd5b6108c6836107ed565b91506108d4602084016107ed565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b600082821015610905576109056108dd565b500390565b6000821982111561091d5761091d6108dd565b50019056fea264697066735822122024779bb61aa04207e0b9845bef36836d6ca5e981a89cfc99e47fb181f0798f8164736f6c634300080a0033
1. allowance

2. balanceOf

3. decimals

4. name

5. owner

6. symbol

7. totalSupply

1. approve
2. mint
3. transfer
4. transferFrom
5. transferOwnership

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met.