Polymarket pUSD

Polygon PoS ERC-20 Token

0xc011a7e12a19f7b1f670d46f03b03f3342e82dfb

Solidity v0.8.34+commit.80d5c536

Fungible token following the ERC-20 standard.

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

Admin & Risk

Who can change the rules?

Block #87,395,608

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

Polymarket contract governance
Ask your AI who can pause, upgrade, or change roles on this Polymarket contract.
Upgradeable Mintable Ownable

Current controls

Owner
0x47ebfac3353314c788b96cdcbf41daadfe03629c ↗ Polygonscan → smarts
  • Upgradeability inferred from ABI/events; proxy storage resolution may be incomplete.

Architecture

Polymarket contract role

Polymarket pUSD

polymarket-pusd-polygon

Polymarket's user-facing collateral token. It sits in front of the CTF collateral path and is bridged through adapter contracts for market settlement.

Trader collateral pUSD Collateral adapter Market positions

Overview

Read Functions
17
Write Functions
22
Events
10

Read Functions

Block #87,395,608 · just now
DOMAIN_SEPARATOR() view → 0xa92e86110583510eaa97a8aaa7881d9a521b0db3f32432ef5bfb3512ab848dc0

Returns the EIP-712 domain separator used to verify off-chain permit signatures.✨ AI

dev: Returns the EIP-712 domain separator for the EIP-2612 permit.

Returns

Name Type Description
result bytes32 The EIP-712 domain separator (bytes32) used for signing and verifying permit messages.✨ AI
USDC() view → 0x3c499c542cef5e3811e1192ce70d8cc03d5c3359

Returns the USDC token address used as pUSD's underlying collateral.✨ AI

Returns

Name Type Description
address USDC ERC-20 token address used as pUSD's underlying collateral and adapter routing.✨ AI
USDCE() view → 0x2791bca1f2de4661ed88a30c99a7a9449aa84174

Get the ERC-20 address for the USDC token used as pUSD collateral.✨ AI

Returns

Name Type Description
address ERC-20 contract address of the USD Coin (USDC) token used by this collateral token.✨ AI
VAULT() view → 0xc417fd8e9661c0d2120b64a04bb3278c17e99db1

Return the address of the vault contract that receives and manages pUSD collateral.✨ AI

Returns

Name Type Description
address Vault contract address used to hold and manage pUSD collateral for markets.✨ AI
allowance(owner: address, spender: address) view

Return the remaining number of tokens that spender may transfer from owner.✨ AI

dev: Returns the amount of tokens that `spender` can spend on behalf of `owner`.

Parameters

Name Type Description
owner address Token holder address.✨ AI
spender address Address authorized to spend owner's tokens.✨ AI

Returns

Name Type Description
result uint256 Remaining token allowance (uint256) that spender can spend from owner.✨ AI
balanceOf(owner: address) view

Returns the pUSD token balance for the specified account.✨ AI

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

Parameters

Name Type Description
owner address Address to query the pUSD balance for.✨ AI

Returns

Name Type Description
result uint256 The pUSD balance of the address in smallest token units (uint256).✨ AI
decimals() pure → 6

Returns the token decimal precision

Returns

Name Type Description
uint8 The number of decimals (6)
hasAllRoles(user: address, roles: uint256) view

Checks whether a user holds all roles specified by the roles bitmask.✨ AI

dev: Returns whether `user` has all of `roles`.

Parameters

Name Type Description
user address Address of the user to check.✨ AI
roles uint256 Bitmask of roles; returns true only if the user has every role bit set.✨ AI

Returns

Name Type Description
bool True if the user has every role bit set in the provided bitmask, otherwise false.✨ AI
hasAnyRole(user: address, roles: uint256) view

Check whether the given address has any of the specified roles.✨ AI

dev: Returns whether `user` has any of `roles`.

Parameters

Name Type Description
user address Address to check for roles.✨ AI
roles uint256 Bitmask of role flags to test against the user's roles.✨ AI

Returns

Name Type Description
bool True if the user has at least one of the specified role flags; otherwise false.✨ AI
name() pure → Polymarket USD

Returns the token name

Returns

Name Type Description
string The token name string
nonces(owner: address) view

Returns the current nonce for an address used in permit signatures.✨ AI

dev: Returns the current nonce for `owner`. This value is used to compute the signature for EIP-2612 permit.

Parameters

Name Type Description
owner address The address to query the nonce for.✨ AI

Returns

Name Type Description
result uint256 The uint256 nonce for the owner, which increments to prevent signature replay.✨ AI
owner() view → 0x47ebfac3353314c788b96cdcbf41daadfe03629c

Returns the address of the contract owner.✨ AI

dev: Returns the owner of the contract.

Returns

Name Type Description
result address Owner address with administrative permissions for this token contract.✨ AI
ownershipHandoverExpiresAt(pendingOwner: address) view

Returns the UNIX timestamp when a pending ownership handover for the given address expires.✨ AI

dev: Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`.

Parameters

Name Type Description
pendingOwner address Address of the pending owner to query.✨ AI

Returns

Name Type Description
result uint256 Expiry time as a Unix timestamp in seconds; returns 0 if no handover is pending.✨ AI
proxiableUUID() view reverted

Return the proxiable UUID used by the token's UUPS proxy.✨ AI

dev: Returns the storage slot used by the implementation, as specified in [ERC1822](https://eips.ethereum.org/EIPS/eip-1822). Note: The `notDelegated` modifier prevents accidental upgrades to an implementation that is a proxy contract.

Returns

Name Type Description
bytes32 bytes32 UUID used by the UUPS proxy to verify the implementation storage slot.✨ AI
rolesOf(user: address) view

Return a uint256 bitmask describing roles assigned to the given user address.✨ AI

dev: Returns the roles of `user`.

Parameters

Name Type Description
user address The address whose roles are being queried.✨ AI

Returns

Name Type Description
roles uint256 A uint256 bitmask where each set bit represents a role assigned to the user.✨ AI
symbol() pure → pUSD

Returns the token symbol

Returns

Name Type Description
string The token symbol string
totalSupply() view → 374,271,655.59 pUSD

Returns the total circulating supply of pUSD tokens.✨ AI

dev: Returns the amount of tokens in existence.

Returns

Name Type Description
result uint256 Total pUSD token supply as a uint256 in base units (smallest token unit).✨ AI

Write Functions

addMinter(_minter: address) nonpayable

Grants minter role to an address

Parameters

Name Type Description
_minter address Address to grant minter role
addWrapper(_wrapper: address) nonpayable

Grants wrapper role to an address

Parameters

Name Type Description
_wrapper address Address to grant wrapper role
approve(spender: address, amount: uint256) nonpayable

Set allowance for spender to transfer up to amount of the caller's pUSD.✨ AI

dev: Sets `amount` as the allowance of `spender` over the caller's tokens. Emits a {Approval} event.

Parameters

Name Type Description
spender address Address permitted to transfer tokens on behalf of the caller.✨ AI
amount uint256 Maximum number of pUSD tokens the spender is allowed to transfer.✨ AI

Returns

Name Type Description
bool True if the approval succeeded, false otherwise.✨ AI
burn(_amount: uint256) nonpayable

Burns a collateral token

dev: The caller must have the MINTER_ROLE

Parameters

Name Type Description
_amount uint256 The amount of collateral token to burn
cancelOwnershipHandover() payable

Cancel a pending ownership handover request and reset the handover state.✨ AI

dev: Cancels the two-step ownership handover to the caller, if any.
completeOwnershipHandover(pendingOwner: address) payable

Finalize the ownership transfer and set the pending owner as the new contract owner.✨ AI

dev: Allows the owner to complete the two-step ownership handover to `pendingOwner`. Reverts if there is no existing ownership handover requested by `pendingOwner`.

Parameters

Name Type Description
pendingOwner address Address that will become the new owner once handover completes.✨ AI
grantRoles(user: address, roles: uint256) payable

Grant a set of role flags to a user address to control permissions for pUSD operations.✨ AI

dev: Allows the owner to grant `user` `roles`. If the `user` already has a role, then it will be an no-op for the role.

Parameters

Name Type Description
user address Address to receive the granted roles.✨ AI
roles uint256 Bitmask representing role flags to assign.✨ AI
initialize(_owner: address) nonpayable

Initializes the contract with the given owner.

dev: This replaces the constructor for upgradeable contracts.

Parameters

Name Type Description
_owner address The address to set as the owner of the contract.
mint(_to: address, _amount: uint256) nonpayable

Mints a new collateral token

dev: The caller must have the MINTER_ROLE

Parameters

Name Type Description
_to address The address to mint the collateral token to
_amount uint256 The amount of collateral token to mint
permit(owner: address, spender: address, value: uint256, deadline: uint256, v: uint8, r: bytes32, s: bytes32) nonpayable

Allow a spender to use the owner's tokens by submitting an off-chain EIP-2612 signature.✨ AI

dev: Sets `value` as the allowance of `spender` over the tokens of `owner`, authorized by a signed approval by `owner`. Emits a {Approval} event.

Parameters

Name Type Description
owner address Token owner whose approval is being set.✨ AI
spender address Address approved to spend the owner's tokens.✨ AI
value uint256 Allowance amount in token base units (uint256).✨ AI
deadline uint256 Unix timestamp after which the signature becomes invalid.✨ AI
v uint8 ECDSA signature recovery byte (uint8).✨ AI
r bytes32 First 32 bytes of the ECDSA signature.✨ AI
s bytes32 Second 32 bytes of the ECDSA signature.✨ AI
removeMinter(_minter: address) nonpayable

Revokes minter role from an address

Parameters

Name Type Description
_minter address Address to revoke minter role from
removeWrapper(_wrapper: address) nonpayable

Revokes wrapper role from an address

Parameters

Name Type Description
_wrapper address Address to revoke wrapper role from
renounceOwnership() payable

Permanently relinquish the contract owner role, setting the owner address to the zero address.✨ AI

dev: Allows the owner to renounce their ownership.
renounceRoles(roles: uint256) payable

Renounce the specified roles held by the caller.✨ AI

dev: Allow the caller to remove their own roles. If the caller does not have a role, then it will be an no-op for the role.

Parameters

Name Type Description
roles uint256 Bitmask of roles to renounce from the caller's account.✨ AI
requestOwnershipHandover() payable

Request ownership handover to begin transferring contract ownership.✨ AI

dev: Request a two-step ownership handover to the caller. The request will automatically expire in 48 hours (172800 seconds) by default.
revokeRoles(user: address, roles: uint256) payable

Revoke specified roles from a user account.✨ AI

dev: Allows the owner to remove `user` `roles`. If the `user` does not have a role, then it will be an no-op for the role.

Parameters

Name Type Description
user address Address whose roles will be revoked.✨ AI
roles uint256 Bitmask specifying which roles to revoke.✨ AI
transfer(to: address, amount: uint256) nonpayable

Transfer pUSD tokens from the caller to the recipient address.✨ AI

dev: Transfer `amount` tokens from the caller to `to`. Requirements: - `from` must at least have `amount`. Emits a {Transfer} event.

Parameters

Name Type Description
to address Recipient address receiving the tokens.✨ AI
amount uint256 Number of tokens to transfer, specified in the token's smallest unit.✨ AI

Returns

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

Move tokens from one account to another using the caller's allowance.✨ AI

dev: Transfers `amount` tokens from `from` to `to`. Note: Does not update the allowance if it is the maximum uint256 value. Requirements: - `from` must at least have `amount`. - The caller must have at least `amount` of allowance to transfer the tokens of `from`. Emits a {Transfer} event.

Parameters

Name Type Description
from address Source account whose balance will be decreased.✨ AI
to address Destination account whose balance will be increased.✨ AI
amount uint256 Number of tokens to transfer, expressed in the token's smallest units.✨ AI

Returns

Name Type Description
bool True if the transfer succeeded; otherwise the call reverts.✨ AI
transferOwnership(newOwner: address) payable

Transfers contract ownership from the current owner to the provided newOwner address.✨ AI

dev: Allows the owner to transfer the ownership to `newOwner`.

Parameters

Name Type Description
newOwner address Address that will receive ownership of the contract.✨ AI
unwrap(_asset: address, _to: address, _amount: uint256, _callbackReceiver: address, _data: bytes) nonpayable

The asset must be a supported asset

dev: The asset must be transferred into this contract either before calling this function or in the callback

Parameters

Name Type Description
_asset address The asset to unwrap
_to address The address to unwrap the asset to
_amount uint256 The amount of asset to unwrap
_callbackReceiver address Address to receive the callback, or address(0) to skip callback
_data bytes Callback data
upgradeToAndCall(newImplementation: address, data: bytes) payable

Upgrade the token implementation to a new contract and execute an initialization call; function is payable.✨ AI

dev: Upgrades the proxy's implementation to `newImplementation`. Emits a {Upgraded} event. Note: Passing in empty `data` skips the delegatecall to `newImplementation`.

Parameters

Name Type Description
newImplementation address Address of the new implementation contract to set for the proxy.✨ AI
data bytes Encoded calldata to execute on the new implementation immediately after upgrade.✨ AI
wrap(_asset: address, _to: address, _amount: uint256, _callbackReceiver: address, _data: bytes) nonpayable

The asset must be a supported asset

dev: The asset must be transferred into this contract either before calling this function or in the callback

Parameters

Name Type Description
_asset address The asset to wrap
_to address The address to wrap the asset to
_amount uint256 The amount of asset to wrap
_callbackReceiver address Address to receive the callback, or address(0) to skip callback
_data bytes Callback data

Events

Approval(owner: address, spender: address, amount: uint256)
Name Type Indexed Description
owner address
spender address
amount uint256
Initialized(version: uint64)
Name Type Indexed Description
version uint64
OwnershipHandoverCanceled(pendingOwner: address)
Name Type Indexed Description
pendingOwner address
OwnershipHandoverRequested(pendingOwner: address)
Name Type Indexed Description
pendingOwner address
OwnershipTransferred(oldOwner: address, newOwner: address)
Name Type Indexed Description
oldOwner address
newOwner address
RolesUpdated(user: address, roles: uint256)
Name Type Indexed Description
user address
roles uint256
Transfer(from: address, to: address, amount: uint256)
Name Type Indexed Description
from address
to address
amount uint256
Unwrapped(caller: address, asset: address, to: address, amount: uint256)

Emitted when collateral is unwrapped to an asset

Name Type Indexed Description
caller address Address that initiated the unwrap
asset address The underlying asset address
to address Recipient of the unwrapped asset
amount uint256 Amount of collateral burned
Upgraded(implementation: address)
Name Type Indexed Description
implementation address
Wrapped(caller: address, asset: address, to: address, amount: uint256)

Emitted when an asset is wrapped into collateral

Name Type Indexed Description
caller address Address that initiated the wrap
asset address The underlying asset address
to address Recipient of the minted collateral
amount uint256 Amount of collateral minted