ZRC20
Git Source (opens in a new tab)
Inherits: IZRC20Metadata, ZRC20Errors, ZRC20Events
State Variables
FUNGIBLE_MODULE_ADDRESS
Fungible address is always the same, maintained at the protocol level
address public constant FUNGIBLE_MODULE_ADDRESS = 0x735b14BB79463307AAcBED86DAf3322B1e6226aB;
CHAIN_ID
Chain id.abi
uint256 public immutable CHAIN_ID;
COIN_TYPE
Coin type, checkout Interfaces.sol.
CoinType public immutable COIN_TYPE;
SYSTEM_CONTRACT_ADDRESS
System contract address.
Name is in upper case to maintain compatibility with ZRC20.sol v1
address public SYSTEM_CONTRACT_ADDRESS;
GAS_LIMIT
Gas limit.
Name is in upper case to maintain compatibility with ZRC20.sol v1
uint256 public GAS_LIMIT;
PROTOCOL_FLAT_FEE
Protocol flat fee.
Name is in upper case to maintain compatibility with ZRC20.sol v1
uint256 public override PROTOCOL_FLAT_FEE;
_balances
mapping(address => uint256) private _balances;
_allowances
mapping(address => mapping(address => uint256)) private _allowances;
_totalSupply
uint256 private _totalSupply;
_name
string private _name;
_symbol
string private _symbol;
_decimals
uint8 private _decimals;
gatewayAddress
Gateway contract address.
This variable is added at last position to maintain storage layout with ZRC20.sol v1
address public gatewayAddress;
Functions
_msgSender
function _msgSender() internal view virtual returns (address);
onlyFungible
Only fungible module modifier.
modifier onlyFungible();
constructor
The only one allowed to deploy new ZRC20 is fungible address.
constructor(
string memory name_,
string memory symbol_,
uint8 decimals_,
uint256 chainid_,
CoinType coinType_,
uint256 gasLimit_,
address systemContractAddress_,
address gatewayAddress_
);
name
ZRC20 name
function name() public view virtual override returns (string memory);
Returns
Name | Type | Description |
---|---|---|
<none> | string | name as string |
setName
Name can be updated by fungible module account.
function setName(string memory newName) external override onlyFungible;
setSymbol
Symbol can be updated by fungible module account.
function setSymbol(string memory newSymbol) external override onlyFungible;
symbol
ZRC20 symbol.
function symbol() public view virtual override returns (string memory);
Returns
Name | Type | Description |
---|---|---|
<none> | string | symbol as string. |
decimals
ZRC20 decimals.
function decimals() public view virtual override returns (uint8);
Returns
Name | Type | Description |
---|---|---|
<none> | uint8 | returns uint8 decimals. |
totalSupply
ZRC20 total supply.
function totalSupply() public view virtual override returns (uint256);
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | returns uint256 total supply. |
balanceOf
Returns ZRC20 balance of an account.
function balanceOf(address account) public view virtual override returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
account | address |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 account balance. |
transfer
Returns ZRC20 balance of an account.
function transfer(address recipient, uint256 amount) public virtual override returns (bool);
Parameters
Name | Type | Description |
---|---|---|
recipient | address | |
amount | uint256 |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | true/false if transfer succeeded/failed. |
allowance
Returns token allowance from owner to spender.
function allowance(address owner, address spender) public view virtual override returns (uint256);
Parameters
Name | Type | Description |
---|---|---|
owner | address | |
spender | address |
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | uint256 allowance. |
approve
Approves amount transferFrom for spender.
function approve(address spender, uint256 amount) public virtual override returns (bool);
Parameters
Name | Type | Description |
---|---|---|
spender | address | |
amount | uint256 |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | true/false if succeeded/failed. |
transferFrom
Transfers tokens from sender to recipient.
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool);
Parameters
Name | Type | Description |
---|---|---|
sender | address | |
recipient | address | |
amount | uint256 |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | true/false if succeeded/failed. |
burn
Burns an amount of tokens.
function burn(uint256 amount) external override returns (bool);
Parameters
Name | Type | Description |
---|---|---|
amount | uint256 |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | true/false if succeeded/failed. |
_transfer
function _transfer(address sender, address recipient, uint256 amount) internal virtual;
_mint
function _mint(address account, uint256 amount) internal virtual;
_burn
function _burn(address account, uint256 amount) internal virtual;
_approve
function _approve(address owner, address spender, uint256 amount) internal virtual;
deposit
Deposits corresponding tokens from external chain, only callable by Fungible module.
function deposit(address to, uint256 amount) external override returns (bool);
Parameters
Name | Type | Description |
---|---|---|
to | address | |
amount | uint256 |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | true/false if succeeded/failed. |
withdrawGasFee
Withdraws gas fees.
function withdrawGasFee() public view override returns (address, uint256);
Returns
Name | Type | Description |
---|---|---|
<none> | address | returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for withdraw() |
<none> | uint256 |
withdrawGasFeeWithGasLimit
Withdraws gas fees with specified gasLimit
function withdrawGasFeeWithGasLimit(uint256 gasLimit) public view override returns (address, uint256);
Returns
Name | Type | Description |
---|---|---|
<none> | address | returns the ZRC20 address for gas on the same chain of this ZRC20, and calculates the gas fee for withdraw() |
<none> | uint256 |
withdraw
Withraws ZRC20 tokens to external chains, this function causes cctx module to send out outbound tx to the outbound chain this contract should be given enough allowance of the gas ZRC20 to pay for outbound tx gas fee.
function withdraw(bytes memory to, uint256 amount) external override returns (bool);
Parameters
Name | Type | Description |
---|---|---|
to | bytes | |
amount | uint256 |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | true/false if succeeded/failed. |
updateSystemContractAddress
Updates system contract address. Can only be updated by the fungible module.
function updateSystemContractAddress(address addr) external onlyFungible;
Parameters
Name | Type | Description |
---|---|---|
addr | address |
updateGatewayAddress
Updates gateway contract address. Can only be updated by the fungible module.
function updateGatewayAddress(address addr) external onlyFungible;
Parameters
Name | Type | Description |
---|---|---|
addr | address |
updateGasLimit
Updates gas limit. Can only be updated by the fungible module.
function updateGasLimit(uint256 gasLimit_) external onlyFungible;
Parameters
Name | Type | Description |
---|---|---|
gasLimit_ | uint256 |
updateProtocolFlatFee
Updates protocol flat fee. Can only be updated by the fungible module.
function updateProtocolFlatFee(uint256 protocolFlatFee_) external onlyFungible;
Parameters
Name | Type | Description |
---|---|---|
protocolFlatFee_ | uint256 |