USDT0
Polygon PoS ERC-20 Token0xc2132d05d31c914a87c6611c10748aeb04b58e8f
Proxy implementation: 0x90040487a6c9f949c4f07cadcfb0f3b8eeab4229
Solidity v0.6.6+commit.6c089d02
Fungible token following the ERC-20 standard.
🤖
Query this contract from your AI
Reference:
usdt-polygon
0xc2132d05d31c914a87c6611c10748aeb04b58e8f
Sample prompt:
“Tell me the current state of usdt-polygon”
No AI wired up yet? →
mcp.smarts.md
Admin & Risk
Who can change the rules?
Detected upgradeable, mintable, and role based controls from the verified ABI.
Upgradeable
Mintable
Role Based
Current controls
- Implementation
- 0x90040487a6c9f949c4f07cadcfb0f3b8eeab4229 ↗ Polygonscan → smarts proxy
Overview
Read Functions
24
Write Functions
24
Events
14
Read Functions
Block #87,395,556 · just now
BLOCK_ROLE()
view
→ 0xefe866497efea00aa7574b13e86f62ebb584dfdf8dd4654ccc38107eb91840b8
Returns
| Name | Type | Description |
|---|---|---|
| — | bytes32 |
DEFAULT_ADMIN_ROLE()
view
→ 0x0000000000000000000000000000000000000000000000000000000000000000
Returns
| Name | Type | Description |
|---|---|---|
| — | bytes32 |
DEPOSITOR_ROLE()
view
→ 0x8f4f2da22e8ac8f11e15f9fc141cddbb5deea8800186560abb6e68c5496619a9
Returns
| Name | Type | Description |
|---|---|---|
| — | bytes32 |
DOMAIN_SEPARATOR()
view
→ 0x7b43b7deae87806d0ace67d6c8e9e347fc85db8ad198e756e5c17d126fef9a05
Returns
| Name | Type | Description |
|---|---|---|
| — | bytes32 |
ERC712_VERSION()
view
→ 1
Returns
| Name | Type | Description |
|---|---|---|
| — | string |
PERMIT_TYPEHASH()
view
→ 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9
Returns
| Name | Type | Description |
|---|---|---|
| — | bytes32 |
USDT0_VERSION()
view
→ 1
Returns
| Name | Type | Description |
|---|---|---|
| — | uint256 |
allowance(owner: address, spender: address)
view
dev: See {IERC20-allowance}.
Parameters
| Name | Type | Description |
|---|---|---|
| owner | address | |
| spender | address |
Returns
| Name | Type | Description |
|---|---|---|
| — | uint256 |
balanceOf(account: address)
view
dev: See {IERC20-balanceOf}.
Parameters
| Name | Type | Description |
|---|---|---|
| account | address |
Returns
| Name | Type | Description |
|---|---|---|
| — | uint256 |
decimals()
view
→ 6
dev: Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.
Returns
| Name | Type | Description |
|---|---|---|
| — | uint8 |
getChainId()
pure
→ 137
Returns
| Name | Type | Description |
|---|---|---|
| — | uint256 |
getDomainSeperator()
view
→ 0x7b43b7deae87806d0ace67d6c8e9e347fc85db8ad198e756e5c17d126fef9a05
Returns
| Name | Type | Description |
|---|---|---|
| — | bytes32 |
getNonce(user: address)
view
Parameters
| Name | Type | Description |
|---|---|---|
| user | address |
Returns
| Name | Type | Description |
|---|---|---|
| nonce | uint256 |
getRoleAdmin(role: bytes32)
view
dev: Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.
Parameters
| Name | Type | Description |
|---|---|---|
| role | bytes32 |
Returns
| Name | Type | Description |
|---|---|---|
| — | bytes32 |
getRoleMember(role: bytes32, index: uint256)
view
dev: Returns one of the accounts that have `role`. `index` must be a value between 0 and {getRoleMemberCount}, non-inclusive. Role bearers are not sorted in any particular way, and their ordering may change at any point. WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure you perform all queries on the same block. See the following https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] for more information.
Parameters
| Name | Type | Description |
|---|---|---|
| role | bytes32 | |
| index | uint256 |
Returns
| Name | Type | Description |
|---|---|---|
| — | address |
getRoleMemberCount(role: bytes32)
view
dev: Returns the number of accounts that have `role`. Can be used together with {getRoleMember} to enumerate all bearers of a role.
Parameters
| Name | Type | Description |
|---|---|---|
| role | bytes32 |
Returns
| Name | Type | Description |
|---|---|---|
| — | uint256 |
hasRole(role: bytes32, account: address)
view
dev: Returns `true` if `account` has been granted `role`.
Parameters
| Name | Type | Description |
|---|---|---|
| role | bytes32 | |
| account | address |
Returns
| Name | Type | Description |
|---|---|---|
| — | bool |
isBlocked(address)
view
Parameters
| Name | Type | Description |
|---|---|---|
| — | address |
Returns
| Name | Type | Description |
|---|---|---|
| — | bool |
name()
view
→ USDT0
dev: Returns the name of the token.
Returns
| Name | Type | Description |
|---|---|---|
| — | string |
nonces(address)
view
Parameters
| Name | Type | Description |
|---|---|---|
| — | address |
Returns
| Name | Type | Description |
|---|---|---|
| — | uint256 |
oftContract()
view
→ 0x6ba10300f0dc58b7a1e4c0e41f5dabb7d7829e13
Returns the OFT contract address (the address with DEPOSITOR_ROLE)
Returns
| Name | Type | Description |
|---|---|---|
| — | address | The address of the OFT contract |
supportsInterface(interfaceId: bytes4)
view
dev: Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] to learn more about how these ids are created. This function call must use less than 30 000 gas.
Parameters
| Name | Type | Description |
|---|---|---|
| interfaceId | bytes4 |
Returns
| Name | Type | Description |
|---|---|---|
| — | bool |
symbol()
view
→ USDT0
dev: Returns the symbol of the token, usually a shorter version of the name.
Returns
| Name | Type | Description |
|---|---|---|
| — | string |
totalSupply()
view
→ 859,072,822.35 USDT0
dev: See {IERC20-totalSupply}.
Returns
| Name | Type | Description |
|---|---|---|
| — | uint256 |
Write Functions
addToBlockedList(_user: address)
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| _user | address |
approve(spender: address, amount: uint256)
nonpayable
dev: See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.
Parameters
| Name | Type | Description |
|---|---|---|
| spender | address | |
| amount | uint256 |
Returns
| Name | Type | Description |
|---|---|---|
| — | bool |
changeName(name_: string)
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| name_ | string |
changeSymbol(symbol_: string)
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| symbol_ | string |
crosschainBurn(user: address, amount: uint256)
nonpayable
Burn tokens through a crosschain transfer.
Parameters
| Name | Type | Description |
|---|---|---|
| user | address | user address for whom burn is being done |
| amount | uint256 | amount of tokens to burn |
crosschainMint(user: address, amount: uint256)
nonpayable
called when token is deposited on root chain
dev: Should be callable only by OAPP contract
Parameters
| Name | Type | Description |
|---|---|---|
| user | address | user address for whom deposit is being done |
| amount | uint256 | amount of tokens to mint |
decreaseAllowance(spender: address, subtractedValue: uint256)
nonpayable
dev: Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.
Parameters
| Name | Type | Description |
|---|---|---|
| spender | address | |
| subtractedValue | uint256 |
Returns
| Name | Type | Description |
|---|---|---|
| — | bool |
deposit(user: address, depositData: bytes)
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| user | address | |
| depositData | bytes |
destroyBlockedFunds(_blockedUser: address)
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| _blockedUser | address |
executeMetaTransaction(userAddress: address, functionSignature: bytes, sigR: bytes32, sigS: bytes32, sigV: uint8)
payable
Parameters
| Name | Type | Description |
|---|---|---|
| userAddress | address | |
| functionSignature | bytes | |
| sigR | bytes32 | |
| sigS | bytes32 | |
| sigV | uint8 |
Returns
| Name | Type | Description |
|---|---|---|
| — | bytes |
grantRole(role: bytes32, account: address)
nonpayable
dev: Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role.
Parameters
| Name | Type | Description |
|---|---|---|
| role | bytes32 | |
| account | address |
increaseAllowance(spender: address, addedValue: uint256)
nonpayable
dev: Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.
Parameters
| Name | Type | Description |
|---|---|---|
| spender | address | |
| addedValue | uint256 |
Returns
| Name | Type | Description |
|---|---|---|
| — | bool |
mint(_destination: address, _amount: uint256)
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| _destination | address | |
| _amount | uint256 |
multiTransfer(_recipients: address[], _values: uint256[])
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| _recipients | address[] | |
| _values | uint256[] |
permit(owner: address, spender: address, value: uint256, deadline: uint256, v: uint8, r: bytes32, s: bytes32)
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| owner | address | |
| spender | address | |
| value | uint256 | |
| deadline | uint256 | |
| v | uint8 | |
| r | bytes32 | |
| s | bytes32 |
redeem(_amount: uint256)
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| _amount | uint256 |
removeFromBlockedList(_user: address)
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| _user | address |
renounceRole(role: bytes32, account: address)
nonpayable
dev: Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.
Parameters
| Name | Type | Description |
|---|---|---|
| role | bytes32 | |
| account | address |
revokeRole(role: bytes32, account: address)
nonpayable
dev: Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.
Parameters
| Name | Type | Description |
|---|---|---|
| role | bytes32 | |
| account | address |
setOFTContract(_oftContract: address)
nonpayable
Sets the OFT contract address by granting it the DEPOSITOR_ROLE
dev: Can only be called by accounts with DEFAULT_ADMIN_ROLE
Parameters
| Name | Type | Description |
|---|---|---|
| _oftContract | address | The address of the OFT contract |
transfer(recipient: address, amount: uint256)
nonpayable
dev: See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.
Parameters
| Name | Type | Description |
|---|---|---|
| recipient | address | |
| amount | uint256 |
Returns
| Name | Type | Description |
|---|---|---|
| — | bool |
transferFrom(_sender: address, _recipient: address, _amount: uint256)
nonpayable
dev: See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.
Parameters
| Name | Type | Description |
|---|---|---|
| _sender | address | |
| _recipient | address | |
| _amount | uint256 |
Returns
| Name | Type | Description |
|---|---|---|
| — | bool |
upgradeToUSDT0(newAdmin: address, oftContract: address)
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| newAdmin | address | |
| oftContract | address |
withdraw(uint256)
nonpayable
Parameters
| Name | Type | Description |
|---|---|---|
| — | uint256 |
Events
Approval(owner: address, spender: address, value: uint256)
| Name | Type | Indexed | Description |
|---|---|---|---|
| owner | address | ✓ | |
| spender | address | ✓ | |
| value | uint256 |
BlockPlaced(_user: address)
| Name | Type | Indexed | Description |
|---|---|---|---|
| _user | address | ✓ |
BlockReleased(_user: address)
| Name | Type | Indexed | Description |
|---|---|---|---|
| _user | address | ✓ |
CrosschainBurn(from: address, amount: uint256, sender: address)
Emitted when a crosschain transfer burns tokens.
| Name | Type | Indexed | Description |
|---|---|---|---|
| from | address | ✓ | Address of the account tokens are being burned from. |
| amount | uint256 | Amount of tokens burned. | |
| sender | address | ✓ | Address of the caller (msg.sender) who invoked crosschainBurn. |
CrosschainMint(to: address, amount: uint256, sender: address)
Emitted when a crosschain transfer mints tokens.
| Name | Type | Indexed | Description |
|---|---|---|---|
| to | address | ✓ | Address of the account tokens are being minted for. |
| amount | uint256 | Amount of tokens minted. | |
| sender | address | ✓ | Address of the caller (msg.sender) who invoked crosschainMint. |
DestroyedBlockedFunds(_blockedUser: address, _balance: uint256)
| Name | Type | Indexed | Description |
|---|---|---|---|
| _blockedUser | address | ✓ | |
| _balance | uint256 |
LogSetOFTContract(oftContract: address)
| Name | Type | Indexed | Description |
|---|---|---|---|
| oftContract | address | ✓ |
MetaTransactionExecuted(userAddress: address, relayerAddress: address, functionSignature: bytes)
| Name | Type | Indexed | Description |
|---|---|---|---|
| userAddress | address | ✓ | |
| relayerAddress | address | ✓ | |
| functionSignature | bytes |
Mint(_destination: address, _amount: uint256)
| Name | Type | Indexed | Description |
|---|---|---|---|
| _destination | address | ✓ | |
| _amount | uint256 |
Redeem(_amount: uint256)
| Name | Type | Indexed | Description |
|---|---|---|---|
| _amount | uint256 |
RoleAdminChanged(role: bytes32, previousAdminRole: bytes32, newAdminRole: bytes32)
| Name | Type | Indexed | Description |
|---|---|---|---|
| role | bytes32 | ✓ | |
| previousAdminRole | bytes32 | ✓ | |
| newAdminRole | bytes32 | ✓ |
RoleGranted(role: bytes32, account: address, sender: address)
| Name | Type | Indexed | Description |
|---|---|---|---|
| role | bytes32 | ✓ | |
| account | address | ✓ | |
| sender | address | ✓ |
RoleRevoked(role: bytes32, account: address, sender: address)
| Name | Type | Indexed | Description |
|---|---|---|---|
| role | bytes32 | ✓ | |
| account | address | ✓ | |
| sender | address | ✓ |
Transfer(from: address, to: address, value: uint256)
| Name | Type | Indexed | Description |
|---|---|---|---|
| from | address | ✓ | |
| to | address | ✓ | |
| value | uint256 |