USDC

Base ERC-20 Token

0x833589fcd6edb6e08f4c7c32d4f71b54bda02913

Proxy implementation: 0x2ce6311ddae708829bc0784c967b7d77d19fd779

Solidity v0.6.12+commit.27d51765

Fungible token following the ERC-20 standard.

🤖
Query this contract from your AI
Reference: usdc-base 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913
Sample prompt: “Tell me the current state of usdc-base”
No AI wired up yet? → mcp.smarts.md

Admin & Risk

Who can change the rules?

Block #46,446,194

Detected upgradeable, mintable, pausable, blacklistable, and ownable controls from the verified ABI.

Upgradeable Mintable Pausable Blacklistable Ownable

Current controls

Implementation
0x2ce6311ddae708829bc0784c967b7d77d19fd779 ↗ Basescan → smarts proxy
Paused
false
Owner
0x3abd6f64a422225e61e435bae41db12096106df7 ↗ Basescan → smarts
Master minter
0x2230393edad0299b7e7b59f20aa856cd1bed52e1 ↗ Basescan → smarts
Pauser
0xd3571b3bc51cecff49194ad67afffc648d5e07b4 ↗ Basescan → smarts
Blacklister
0x1f2e3a640175d20ac31ed523b6733b977173e277 ↗ Basescan → smarts
Rescuer
0x0000000000000000000000000000000000000000 (none)

Recent governance

2 privileged events loaded. Latest: MinterConfigured at block #46,378,853.

Overview

Read Functions
24
Write Functions
31
Events
17

Read Functions

Block #46,446,195 · just now
CANCEL_AUTHORIZATION_TYPEHASH() view → 0x158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a1597429

Returns the EIP-712 type hash used when canceling authorizations.✨ AI

Returns

Name Type Description
bytes32 The bytes32 EIP-712 type hash for the CancelAuthorization struct, used to verify cancelAuthorization signatures.✨ AI
DOMAIN_SEPARATOR() view → 0x02fa7265e7c5d81118673727957699e4d68f74cd74b7db77da710fe8a2c7834f

Get the EIP712 Domain Separator.

Returns

Name Type Description
bytes32 The bytes32 EIP712 domain separator.
PERMIT_TYPEHASH() view → 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9

Returns the EIP-2612 PERMIT_TYPEHASH used to verify permit signatures.✨ AI

Returns

Name Type Description
bytes32 The bytes32 keccak256 typehash used in permit (EIP-2612) signature domain.✨ AI
RECEIVE_WITH_AUTHORIZATION_TYPEHASH() view → 0xd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de8

Returns the EIP-712 type hash used for receiveWithAuthorization messages.✨ AI

Returns

Name Type Description
bytes32 The EIP-712 type hash (bytes32) used to sign receiveWithAuthorization authorizations.✨ AI
TRANSFER_WITH_AUTHORIZATION_TYPEHASH() view → 0x7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a2267

Returns the EIP-712 type hash used to authorize off-chain transferWithAuthorization messages.✨ AI

Returns

Name Type Description
bytes32 The bytes32 EIP-712 type hash for transferWithAuthorization.✨ AI
allowance(owner: address, spender: address) view

Return the remaining token allowance that owner granted to spender.✨ AI

dev: Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.

Parameters

Name Type Description
owner address Address that granted the allowance.✨ AI
spender address Address authorized to spend tokens from the owner's balance.✨ AI

Returns

Name Type Description
uint256 Remaining allowance as a uint256 representing how many tokens spender may transfer from owner.✨ AI
authorizationState(authorizer: address, nonce: bytes32) view

Returns the state of an authorization

dev: Nonces are randomly generated 32-byte data unique to the authorizer's address

Parameters

Name Type Description
authorizer address Authorizer's address
nonce bytes32 Nonce of the authorization

Returns

Name Type Description
bool True if the nonce is used
balanceOf(account: address) view

Returns the token balance of the specified account.✨ AI

dev: Returns the amount of tokens owned by `account`.

Parameters

Name Type Description
account address Address whose token balance to query.✨ AI

Returns

Name Type Description
uint256 The account's token balance as a uint256.✨ AI
blacklister() view → 0x1f2e3a640175d20ac31ed523b6733b977173e277

Returns the address authorized to manage the contract's blacklist.✨ AI

Returns

Name Type Description
address The address currently designated as the blacklister.✨ AI
currency() view → USD

Returns the token's currency identifier string used for display and accounting.✨ AI

Returns

Name Type Description
string The token's currency identifier string (for example, USD).✨ AI
decimals() view → 6

Return the number of decimal places used for token amounts and UI display.✨ AI

Returns

Name Type Description
uint8 Number of decimal places the token uses, as a uint8 (e.g., 2 means amounts have two decimal places).✨ AI
isBlacklisted(_account: address) view

Checks if account is blacklisted.

Parameters

Name Type Description
_account address The address to check.

Returns

Name Type Description
bool True if the account is blacklisted, false if the account is not blacklisted.
isMinter(account: address) view

Checks if an account is a minter.

Parameters

Name Type Description
account address The address to check.

Returns

Name Type Description
bool True if the account is a minter, false if the account is not a minter.
masterMinter() view → 0x2230393edad0299b7e7b59f20aa856cd1bed52e1

Returns the address of the current master minter.✨ AI

Returns

Name Type Description
address The address that holds the master minter role and can assign or revoke minters.✨ AI
minterAllowance(minter: address) view

Gets the minter allowance for an account.

Parameters

Name Type Description
minter address The address to check.

Returns

Name Type Description
uint256 The remaining minter allowance for the account.
name() view → USD Coin

Returns the token's name.✨ AI

Returns

Name Type Description
string The token's name as a string.✨ AI
nonces(owner: address) view

Nonces for permit

Parameters

Name Type Description
owner address Token owner's address (Authorizer)

Returns

Name Type Description
uint256 Next nonce
owner() view → 0x3abd6f64a422225e61e435bae41db12096106df7

Returns the address of the contract owner.✨ AI

dev: Tells the address of the owner

Returns

Name Type Description
address the address of the owner
paused() view → false

Check whether token transfers and other restricted operations are currently paused.✨ AI

Returns

Name Type Description
bool True if the contract is paused (restricted operations disabled); false if it is active.✨ AI
pauser() view → 0xd3571b3bc51cecff49194ad67afffc648d5e07b4

Returns the address that currently holds the token pauser role.✨ AI

Returns

Name Type Description
address The account address authorized to pause or unpause token transfers.✨ AI
rescuer() view → 0x0000000000000000000000000000000000000000

Returns current rescuer

Returns

Name Type Description
address Rescuer's address
symbol() view → USDC

Returns the token's symbol string.✨ AI

Returns

Name Type Description
string The token symbol (e.g., "USDC").✨ AI
totalSupply() view → 4,208,983,175.15 USDC

Returns the total number of tokens in circulation for this ERC-20 token.✨ AI

dev: Returns the amount of tokens in existence.

Returns

Name Type Description
uint256 Total token supply expressed in the token's smallest unit (uint256).✨ AI
version() pure → 2

Version string for the EIP712 domain separator

Returns

Name Type Description
string Version string

Write Functions

approve(spender: address, value: uint256) nonpayable

Set allowance for spender to transfer up to value tokens from the caller's account.✨ AI

dev: Sets `amount` as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.

Parameters

Name Type Description
spender address Address granted permission to spend tokens on behalf of the caller.✨ AI
value uint256 Maximum number of tokens the spender is allowed to transfer.✨ AI

Returns

Name Type Description
bool True if the approval was set successfully, false otherwise.✨ AI
blacklist(_account: address) nonpayable

Adds account to blacklist.

Parameters

Name Type Description
_account address The address to blacklist.
burn(_amount: uint256) nonpayable

Allows a minter to burn some of its own tokens.

dev: The caller must be a minter, must not be blacklisted, and the amount to burn should be less than or equal to the account's balance.

Parameters

Name Type Description
_amount uint256 the amount of tokens to be burned.
cancelAuthorization(authorizer: address, nonce: bytes32, v: uint8, r: bytes32, s: bytes32) nonpayable

Attempt to cancel an authorization

dev: Works only if the authorization is not yet used. EOA wallet signatures should be packed in the order of r, s, v.

Parameters

Name Type Description
authorizer address Authorizer's address
nonce bytes32 Nonce of the authorization
v uint8
r bytes32
s bytes32
cancelAuthorization(authorizer: address, nonce: bytes32, signature: bytes) nonpayable

Attempt to cancel an authorization

dev: Works only if the authorization is not yet used. EOA wallet signatures should be packed in the order of r, s, v.

Parameters

Name Type Description
authorizer address Authorizer's address
nonce bytes32 Nonce of the authorization
signature bytes Signature bytes signed by an EOA wallet or a contract wallet
configureMinter(minter: address, minterAllowedAmount: uint256) nonpayable

Adds or updates a new minter with a mint allowance.

Parameters

Name Type Description
minter address The address of the minter.
minterAllowedAmount uint256 The minting amount allowed for the minter.

Returns

Name Type Description
bool True if the operation was successful.
decreaseAllowance(spender: address, decrement: uint256) nonpayable

Decrease the allowance by a given decrement

Parameters

Name Type Description
spender address Spender's address
decrement uint256 Amount of decrease in allowance

Returns

Name Type Description
bool True if successful
increaseAllowance(spender: address, increment: uint256) nonpayable

Increase the allowance by a given increment

Parameters

Name Type Description
spender address Spender's address
increment uint256 Amount of increase in allowance

Returns

Name Type Description
bool True if successful
initialize(tokenName: string, tokenSymbol: string, tokenCurrency: string, tokenDecimals: uint8, newMasterMinter: address, newPauser: address, newBlacklister: address, newOwner: address) nonpayable

Initializes the fiat token contract.

Parameters

Name Type Description
tokenName string The name of the fiat token.
tokenSymbol string The symbol of the fiat token.
tokenCurrency string The fiat currency that the token represents.
tokenDecimals uint8 The number of decimals that the token uses.
newMasterMinter address The masterMinter address for the fiat token.
newPauser address The pauser address for the fiat token.
newBlacklister address The blacklister address for the fiat token.
newOwner address The owner of the fiat token.
initializeV2(newName: string) nonpayable

Initialize v2

Parameters

Name Type Description
newName string New token name
initializeV2_1(lostAndFound: address) nonpayable

Initialize v2.1

Parameters

Name Type Description
lostAndFound address The address to which the locked funds are sent
initializeV2_2(accountsToBlacklist: address[], newSymbol: string) nonpayable

Initialize v2.2

Parameters

Name Type Description
accountsToBlacklist address[] A list of accounts to migrate from the old blacklist
newSymbol string New token symbol data structure to the new blacklist data structure.
mint(_to: address, _amount: uint256) nonpayable

Mints fiat tokens to an address.

Parameters

Name Type Description
_to address The address that will receive the minted tokens.
_amount uint256 The amount of tokens to mint. Must be less than or equal to the minterAllowance of the caller.

Returns

Name Type Description
bool True if the operation was successful.
pause() nonpayable

Pauses token transfers and other actions that require the contract to be unpaused.✨ AI

dev: called by the owner to pause, triggers stopped state
permit(owner: address, spender: address, value: uint256, deadline: uint256, signature: bytes) nonpayable

Update allowance with a signed permit

dev: EOA wallet signatures should be packed in the order of r, s, v.

Parameters

Name Type Description
owner address Token owner's address (Authorizer)
spender address Spender's address
value uint256 Amount of allowance
deadline uint256 The time at which the signature expires (unix time), or max uint256 value to signal no expiration
signature bytes Signature bytes signed by an EOA wallet or a contract wallet
permit(owner: address, spender: address, value: uint256, deadline: uint256, v: uint8, r: bytes32, s: bytes32) nonpayable

Update allowance with a signed permit

dev: EOA wallet signatures should be packed in the order of r, s, v.

Parameters

Name Type Description
owner address Token owner's address (Authorizer)
spender address Spender's address
value uint256 Amount of allowance
deadline uint256 The time at which the signature expires (unix time), or max uint256 value to signal no expiration
v uint8
r bytes32
s bytes32
receiveWithAuthorization(from: address, to: address, value: uint256, validAfter: uint256, validBefore: uint256, nonce: bytes32, signature: bytes) nonpayable

Receive a transfer with a signed authorization from the payer

dev: This has an additional check to ensure that the payee's address matches the caller of this function to prevent front-running attacks. EOA wallet signatures should be packed in the order of r, s, v.

Parameters

Name Type Description
from address Payer's address (Authorizer)
to address Payee's address
value uint256 Amount to be transferred
validAfter uint256 The time after which this is valid (unix time)
validBefore uint256 The time before which this is valid (unix time)
nonce bytes32 Unique nonce
signature bytes Signature bytes signed by an EOA wallet or a contract wallet
receiveWithAuthorization(from: address, to: address, value: uint256, validAfter: uint256, validBefore: uint256, nonce: bytes32, v: uint8, r: bytes32, s: bytes32) nonpayable

Receive a transfer with a signed authorization from the payer

dev: This has an additional check to ensure that the payee's address matches the caller of this function to prevent front-running attacks. EOA wallet signatures should be packed in the order of r, s, v.

Parameters

Name Type Description
from address Payer's address (Authorizer)
to address Payee's address
value uint256 Amount to be transferred
validAfter uint256 The time after which this is valid (unix time)
validBefore uint256 The time before which this is valid (unix time)
nonce bytes32 Unique nonce
v uint8
r bytes32
s bytes32
removeMinter(minter: address) nonpayable

Removes a minter.

Parameters

Name Type Description
minter address The address of the minter to remove.

Returns

Name Type Description
bool True if the operation was successful.
rescueERC20(tokenContract: address, to: address, amount: uint256) nonpayable

Rescue ERC20 tokens locked up in this contract.

Parameters

Name Type Description
tokenContract address ERC20 token contract address
to address Recipient address
amount uint256 Amount to withdraw
transfer(to: address, value: uint256) nonpayable

Transfer tokens from the caller's account to the specified recipient address.✨ AI

dev: Moves `amount` tokens from the caller's account to `recipient`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.

Parameters

Name Type Description
to address Recipient address that will receive the tokens.✨ AI
value uint256 Amount of tokens to transfer, in the token's smallest unit.✨ AI

Returns

Name Type Description
bool True if the transfer succeeded.✨ AI
transferFrom(from: address, to: address, value: uint256) nonpayable

Transfer tokens from a source account to a destination using the caller's allowance.✨ AI

dev: Moves `amount` tokens from `sender` to `recipient` using the allowance mechanism. `amount` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.

Parameters

Name Type Description
from address Address whose token balance will be reduced.✨ AI
to address Address whose token balance will be increased.✨ AI
value uint256 Number of tokens to transfer, expressed in the token's smallest unit.✨ AI

Returns

Name Type Description
bool Boolean indicating whether the transfer succeeded and the caller's allowance was updated.✨ AI
transferOwnership(newOwner: address) nonpayable

Transfers contract ownership to the specified new owner address.✨ AI

dev: Allows the current owner to transfer control of the contract to a newOwner.

Parameters

Name Type Description
newOwner address The address to transfer ownership to.
transferWithAuthorization(from: address, to: address, value: uint256, validAfter: uint256, validBefore: uint256, nonce: bytes32, signature: bytes) nonpayable

Execute a transfer with a signed authorization

dev: EOA wallet signatures should be packed in the order of r, s, v.

Parameters

Name Type Description
from address Payer's address (Authorizer)
to address Payee's address
value uint256 Amount to be transferred
validAfter uint256 The time after which this is valid (unix time)
validBefore uint256 The time before which this is valid (unix time)
nonce bytes32 Unique nonce
signature bytes Signature bytes signed by an EOA wallet or a contract wallet
transferWithAuthorization(from: address, to: address, value: uint256, validAfter: uint256, validBefore: uint256, nonce: bytes32, v: uint8, r: bytes32, s: bytes32) nonpayable

Execute a transfer with a signed authorization

dev: EOA wallet signatures should be packed in the order of r, s, v.

Parameters

Name Type Description
from address Payer's address (Authorizer)
to address Payee's address
value uint256 Amount to be transferred
validAfter uint256 The time after which this is valid (unix time)
validBefore uint256 The time before which this is valid (unix time)
nonce bytes32 Unique nonce
v uint8
r bytes32
s bytes32
unBlacklist(_account: address) nonpayable

Removes account from blacklist.

Parameters

Name Type Description
_account address The address to remove from the blacklist.
unpause() nonpayable

Unpauses the contract and resumes token transfers and other paused operations.✨ AI

dev: called by the owner to unpause, returns to normal state
updateBlacklister(_newBlacklister: address) nonpayable

Updates the blacklister address.

Parameters

Name Type Description
_newBlacklister address The address of the new blacklister.
updateMasterMinter(_newMasterMinter: address) nonpayable

Updates the master minter address.

Parameters

Name Type Description
_newMasterMinter address The address of the new master minter.
updatePauser(_newPauser: address) nonpayable

Updates the pauser address.

Parameters

Name Type Description
_newPauser address The address of the new pauser.
updateRescuer(newRescuer: address) nonpayable

Updates the rescuer address.

Parameters

Name Type Description
newRescuer address The address of the new rescuer.

Events

Approval(owner: address, spender: address, value: uint256)
Name Type Indexed Description
owner address
spender address
value uint256
AuthorizationCanceled(authorizer: address, nonce: bytes32)
Name Type Indexed Description
authorizer address
nonce bytes32
AuthorizationUsed(authorizer: address, nonce: bytes32)
Name Type Indexed Description
authorizer address
nonce bytes32
Blacklisted(_account: address)
Name Type Indexed Description
_account address
BlacklisterChanged(newBlacklister: address)
Name Type Indexed Description
newBlacklister address
Burn(burner: address, amount: uint256)
Name Type Indexed Description
burner address
amount uint256
MasterMinterChanged(newMasterMinter: address)
Name Type Indexed Description
newMasterMinter address
Mint(minter: address, to: address, amount: uint256)
Name Type Indexed Description
minter address
to address
amount uint256
MinterConfigured(minter: address, minterAllowedAmount: uint256)
Name Type Indexed Description
minter address
minterAllowedAmount uint256
MinterRemoved(oldMinter: address)
Name Type Indexed Description
oldMinter address
OwnershipTransferred(previousOwner: address, newOwner: address)
Name Type Indexed Description
previousOwner address representing the address of the previous owner
newOwner address representing the address of the new owner
Pause()
PauserChanged(newAddress: address)
Name Type Indexed Description
newAddress address
RescuerChanged(newRescuer: address)
Name Type Indexed Description
newRescuer address
Transfer(from: address, to: address, value: uint256)
Name Type Indexed Description
from address
to address
value uint256
UnBlacklisted(_account: address)
Name Type Indexed Description
_account address
Unpause()