This repository contains the TrueUSD ERC20 contract and related contracts.
This is a high-level overview of the contracts. For more specifics, see the relevant .sol files.
These contracts are inspired by and roughly equivalent to the corresponding ERC20 token contracts from OpenZeppelin. The main difference is that they keep track of balances and allowances by using separate contracts (BalanceSheet.sol and AllowanceSheet.sol) instead of mappings in their own storage. ERCevents contract is used to ensure that events are still emitted from the original address even after contract update.
This makes it easier for users to burn tokens (i.e. redeem them for USD) by treating sends to 0x0 as burn operations.
This limits the minimum and maximum amount of tokens that can be burned (redeemed) at once.
If a new version of the TrueUSD contract is ever launched, these three contracts allow users to continue using the old version if they want and it will forward all basic transactions to the new one. see Delegation process.
This ensures that only users who have passed a KYC/AML check can receive newly minted tokens or trade on certain restricted exchanges. It also allows for blacklisting of bad actors in accordance with the TrueCoin Terms of Use.
This allows for transaction fees.
This is the top-level ERC20 contract tying together all the previously mentioned functionality.
This contract is the initial owner of TrueUSD.sol. Consists of an Owner key, Mint Pause Keys, Mint Key, and Mint Approval Keys. Also provides time delays on mint requests to ensure security.
This contract is the owner of TimeLockedController.sol. It turns every owner only functions into Multisig function that requires two approvals.
To delegate calls to new contract, first deploy a contract that implements DelegateBurnable. Configure fees, burn bounds, global pause etc. Also must implement setBalanceSheet(address) and SetAllowanceSheet(address) functions that can claim storage contracts.
Set registry instance for the new contract. Set totalSupply to equal to the current totalSupply of the old contract.
Transfer ownership of the new contract to TimeLockedController. Claim ownership of new contract with TimeLockedController.
If the new contract has function setDelegatedFrom, call the function with TrueUSD contract address as the parameter.
call delegateToNewContract(_newContractAddress, _balanceSheetAddress, _allowanceSheetAddress) to delegate to new contract.
Ensure the registry submodule is in the root directory
-rm -r registry
-git clone [email protected]:trusttoken/registry.git
To run the tests and generate a code coverage report:
npm install
./node_modules/.bin/solidity-coverage
Description | URL |
---|---|
Etherscan Page | https://etherscan.io/token/0x8dd5fbce2f6a956c3022ba3663759011dd51e73e |
Coinmarketcap | https://coinmarketcap.com/currencies/true-usd/ |
TrueUSD’s Terms of Use | https://www.trueusd.com/terms-of-use |
Pages | URL |
---|---|
Website | https://www.trueusd.com/ |
https://www.facebook.com/TrustToken/ | |
https://twitter.com/TrustToken | |
Telegram | https://t.me/joinchat/HihkMkTja1gIyBRM1J1_vg |
Exchanges | URL |
---|---|
Binance | https://www.binance.com/ |
Bittrex | https://bittrex.com |
CoinTiger | https://www.cointiger.pro |
Upbit | https://upbit.com/ |
HBUS | https://www.hbus.com/ |