View Source: contracts/ZUSDToken.sol
↗ Extends: ZUSDTokenStorage, CheckContract, IZUSDToken, Ownable
ZUSDToken
Events
event TroveManagerAddressChanged(address _troveManagerAddress);
event StabilityPoolAddressChanged(address _newStabilityPoolAddress);
event BorrowerOperationsAddressChanged(address _newBorrowerOperationsAddress);
- initialize(address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress)
- mint(address _account, uint256 _amount)
- burn(address _account, uint256 _amount)
- sendToPool(address _sender, address _poolAddress, uint256 _amount)
- returnFromPool(address _poolAddress, address _receiver, uint256 _amount)
- totalSupply()
- balanceOf(address account)
- transfer(address recipient, uint256 amount)
- allowance(address owner, address spender)
- approve(address spender, uint256 amount)
- transferFrom(address sender, address recipient, uint256 amount)
- increaseAllowance(address spender, uint256 addedValue)
- decreaseAllowance(address spender, uint256 subtractedValue)
- domainSeparator()
- permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
- nonces(address owner)
- _chainID()
- _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version)
- _transfer(address sender, address recipient, uint256 amount)
- _mint(address account, uint256 amount)
- _burn(address account, uint256 amount)
- _approve(address owner, address spender, uint256 amount)
- _requireValidRecipient(address _recipient)
- _requireCallerIsBorrowerOperations()
- _requireCallerIsBOorTroveMorSP()
- _requireCallerIsStabilityPool()
- _requireCallerIsTroveMorSP()
- name()
- symbol()
- decimals()
- version()
- permitTypeHash()
function initialize(address _troveManagerAddress, address _stabilityPoolAddress, address _borrowerOperationsAddress) public nonpayable initializer onlyOwner
Arguments
Name | Type | Description |
---|---|---|
_troveManagerAddress | address | |
_stabilityPoolAddress | address | |
_borrowerOperationsAddress | address |
Source Code
function initialize(
address _troveManagerAddress,
address _stabilityPoolAddress,
address _borrowerOperationsAddress
) public initializer onlyOwner {
checkContract(_troveManagerAddress);
checkContract(_stabilityPoolAddress);
checkContract(_borrowerOperationsAddress);
troveManagerAddress = _troveManagerAddress;
emit TroveManagerAddressChanged(_troveManagerAddress);
stabilityPoolAddress = _stabilityPoolAddress;
emit StabilityPoolAddressChanged(_stabilityPoolAddress);
borrowerOperationsAddress = _borrowerOperationsAddress;
emit BorrowerOperationsAddressChanged(_borrowerOperationsAddress);
bytes32 hashedName = keccak256(bytes(_NAME));
bytes32 hashedVersion = keccak256(bytes(_VERSION));
_HASHED_NAME = hashedName;
_HASHED_VERSION = hashedVersion;
_CACHED_CHAIN_ID = _chainID();
_CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(_TYPE_HASH, hashedName, hashedVersion);
}
function mint(address _account, uint256 _amount) external nonpayable
Arguments
Name | Type | Description |
---|---|---|
_account | address | |
_amount | uint256 |
Source Code
function mint(address _account, uint256 _amount) external override {
_requireCallerIsBorrowerOperations();
_mint(_account, _amount);
}
function burn(address _account, uint256 _amount) external nonpayable
Arguments
Name | Type | Description |
---|---|---|
_account | address | |
_amount | uint256 |
Source Code
function burn(address _account, uint256 _amount) external override {
_requireCallerIsBOorTroveMorSP();
_burn(_account, _amount);
}
function sendToPool(address _sender, address _poolAddress, uint256 _amount) external nonpayable
Arguments
Name | Type | Description |
---|---|---|
_sender | address | |
_poolAddress | address | |
_amount | uint256 |
Source Code
function sendToPool(
address _sender,
address _poolAddress,
uint256 _amount
) external override {
_requireCallerIsStabilityPool();
_transfer(_sender, _poolAddress, _amount);
}
function returnFromPool(address _poolAddress, address _receiver, uint256 _amount) external nonpayable
Arguments
Name | Type | Description |
---|---|---|
_poolAddress | address | |
_receiver | address | |
_amount | uint256 |
Source Code
function returnFromPool(
address _poolAddress,
address _receiver,
uint256 _amount
) external override {
_requireCallerIsTroveMorSP();
_transfer(_poolAddress, _receiver, _amount);
}
function totalSupply() external view
returns(uint256)
Source Code
function totalSupply() external view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) external view
returns(uint256)
Arguments
Name | Type | Description |
---|---|---|
account | address |
Source Code
function balanceOf(address account) external view override returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) external nonpayable
returns(bool)
Arguments
Name | Type | Description |
---|---|---|
recipient | address | |
amount | uint256 |
Source Code
function transfer(address recipient, uint256 amount) external override returns (bool) {
_requireValidRecipient(recipient);
_transfer(msg.sender, recipient, amount);
return true;
}
function allowance(address owner, address spender) external view
returns(uint256)
Arguments
Name | Type | Description |
---|---|---|
owner | address | |
spender | address |
Source Code
function allowance(address owner, address spender) external view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) external nonpayable
returns(bool)
Arguments
Name | Type | Description |
---|---|---|
spender | address | |
amount | uint256 |
Source Code
function approve(address spender, uint256 amount) external override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) external nonpayable
returns(bool)
Arguments
Name | Type | Description |
---|---|---|
sender | address | |
recipient | address | |
amount | uint256 |
Source Code
function transferFrom(
address sender,
address recipient,
uint256 amount
) external override returns (bool) {
_requireValidRecipient(recipient);
_transfer(sender, recipient, amount);
_approve(
sender,
msg.sender,
_allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")
);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) external nonpayable
returns(bool)
Arguments
Name | Type | Description |
---|---|---|
spender | address | |
addedValue | uint256 |
Source Code
function increaseAllowance(address spender, uint256 addedValue)
external
override
returns (bool)
{
_approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) external nonpayable
returns(bool)
Arguments
Name | Type | Description |
---|---|---|
spender | address | |
subtractedValue | uint256 |
Source Code
function decreaseAllowance(address spender, uint256 subtractedValue)
external
override
returns (bool)
{
_approve(
msg.sender,
spender,
_allowances[msg.sender][spender].sub(
subtractedValue,
"ERC20: decreased allowance below zero"
)
);
return true;
}
function domainSeparator() public view
returns(bytes32)
Source Code
function domainSeparator() public view override returns (bytes32) {
if (_chainID() == _CACHED_CHAIN_ID) {
return _CACHED_DOMAIN_SEPARATOR;
} else {
return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
}
}
function permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external nonpayable
Arguments
Name | Type | Description |
---|---|---|
owner | address | |
spender | address | |
amount | uint256 | |
deadline | uint256 | |
v | uint8 | |
r | bytes32 | |
s | bytes32 |
Source Code
function permit(
address owner,
address spender,
uint256 amount,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external override {
require(deadline >= now, "ZUSD: expired deadline");
bytes32 digest = keccak256(
abi.encodePacked(
"\x19\x01",
domainSeparator(),
keccak256(
abi.encode(_PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner]++, deadline)
)
)
);
address recoveredAddress = ecrecover(digest, v, r, s);
require(recoveredAddress == owner, "ZUSD: invalid signature");
_approve(owner, spender, amount);
}
function nonces(address owner) external view
returns(uint256)
Arguments
Name | Type | Description |
---|---|---|
owner | address |
Source Code
function nonces(address owner) external view override returns (uint256) {
// FOR EIP 2612
return _nonces[owner];
}
function _chainID() private pure
returns(chainID uint256)
Source Code
function _chainID() private pure returns (uint256 chainID) {
assembly {
chainID := chainid()
}
}
function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view
returns(bytes32)
Arguments
Name | Type | Description |
---|---|---|
typeHash | bytes32 | |
name | bytes32 | |
version | bytes32 |
Source Code
function _buildDomainSeparator(
bytes32 typeHash,
bytes32 name,
bytes32 version
) private view returns (bytes32) {
return keccak256(abi.encode(typeHash, name, version, _chainID(), address(this)));
}
function _transfer(address sender, address recipient, uint256 amount) internal nonpayable
Arguments
Name | Type | Description |
---|---|---|
sender | address | |
recipient | address | |
amount | uint256 |
Source Code
function _transfer(
address sender,
address recipient,
uint256 amount
) internal {
assert(sender != address(0));
assert(recipient != address(0));
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
function _mint(address account, uint256 amount) internal nonpayable
Arguments
Name | Type | Description |
---|---|---|
account | address | |
amount | uint256 |
Source Code
function _mint(address account, uint256 amount) internal {
assert(account != address(0));
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal nonpayable
Arguments
Name | Type | Description |
---|---|---|
account | address | |
amount | uint256 |
Source Code
function _burn(address account, uint256 amount) internal {
assert(account != address(0));
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
function _approve(address owner, address spender, uint256 amount) internal nonpayable
Arguments
Name | Type | Description |
---|---|---|
owner | address | |
spender | address | |
amount | uint256 |
Source Code
function _approve(
address owner,
address spender,
uint256 amount
) internal {
assert(owner != address(0));
assert(spender != address(0));
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _requireValidRecipient(address _recipient) internal view
Arguments
Name | Type | Description |
---|---|---|
_recipient | address |
Source Code
function _requireValidRecipient(address _recipient) internal view {
require(
_recipient != address(0) && _recipient != address(this),
"ZUSD: Cannot transfer tokens directly to the ZUSD token contract or the zero address"
);
require(
_recipient != stabilityPoolAddress &&
_recipient != troveManagerAddress &&
_recipient != borrowerOperationsAddress,
"ZUSD: Cannot transfer tokens directly to the StabilityPool, TroveManager or BorrowerOps"
);
}
function _requireCallerIsBorrowerOperations() internal view
Source Code
function _requireCallerIsBorrowerOperations() internal view {
require(
msg.sender == borrowerOperationsAddress,
"ZUSDToken: Caller is not BorrowerOperations"
);
}
function _requireCallerIsBOorTroveMorSP() internal view
Source Code
function _requireCallerIsBOorTroveMorSP() internal view {
require(
msg.sender == borrowerOperationsAddress ||
msg.sender == troveManagerAddress ||
msg.sender == stabilityPoolAddress,
"ZUSD: Caller is neither BorrowerOperations nor TroveManager nor StabilityPool"
);
}
function _requireCallerIsStabilityPool() internal view
Source Code
function _requireCallerIsStabilityPool() internal view {
require(msg.sender == stabilityPoolAddress, "ZUSD: Caller is not the StabilityPool");
}
function _requireCallerIsTroveMorSP() internal view
Source Code
function _requireCallerIsTroveMorSP() internal view {
require(
msg.sender == troveManagerAddress || msg.sender == stabilityPoolAddress,
"ZUSD: Caller is neither TroveManager nor StabilityPool"
);
}
function name() external view
returns(string)
Source Code
function name() external view override returns (string memory) {
return _NAME;
}
function symbol() external view
returns(string)
Source Code
function symbol() external view override returns (string memory) {
return _SYMBOL;
}
function decimals() external view
returns(uint8)
Source Code
function decimals() external view override returns (uint8) {
return _DECIMALS;
}
function version() external view
returns(string)
Source Code
function version() external view override returns (string memory) {
return _VERSION;
}
function permitTypeHash() external view
returns(bytes32)
Source Code
function permitTypeHash() external view override returns (bytes32) {
return _PERMIT_TYPEHASH;
}
- ActivePool
- ActivePoolStorage
- BaseMath
- BorrowerOperations
- BorrowerOperationsScript
- BorrowerOperationsStorage
- BorrowerWrappersScript
- CheckContract
- CollSurplusPool
- CollSurplusPoolStorage
- console
- Context
- DefaultPool
- DefaultPoolStorage
- DocsCover
- DSAuth
- DSAuthEvents
- DSAuthority
- DSNote
- DSProxy
- DSProxyCache
- DSProxyFactory
- ERC20
- ETHTransferScript
- FeeDistributor
- FeeDistributorStorage
- GasPool
- HintHelpers
- HintHelpersStorage
- IActivePool
- IBalanceRedirectPresale
- IBorrowerOperations
- ICollSurplusPool
- IDefaultPool
- IERC20
- IERC2612
- IExternalPriceFeed
- IFeeDistributor
- IFeeSharingProxy
- ILiquityBase
- ILiquityBaseParams
- IMasset
- IMoCBaseOracle
- Initializable
- IPool
- IPriceFeed
- IRSKOracle
- ISortedTroves
- IStabilityPool
- ITroveManager
- IWrbtc
- IZUSDToken
- LiquityBase
- LiquityBaseParams
- LiquityMath
- LiquitySafeMath128
- MoCMedianizer
- MultiTroveGetter
- MultiTroveGetterStorage
- NueToken
- Ownable
- PriceFeed
- PriceFeedStorage
- ProxiableContract
- ProxiableContract2
- Proxy
- RskOracle
- SafeMath
- SortedTroves
- SortedTrovesStorage
- StabilityPool
- StabilityPoolScript
- StabilityPoolStorage
- Storage
- Storage2
- TokenScript
- TroveManager
- TroveManagerBase
- TroveManagerBase1MinuteBootstrap
- TroveManagerRedeemOps
- TroveManagerScript
- TroveManagerStorage
- UpgradableProxy
- ZUSDToken
- ZUSDTokenStorage