Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update bridged USDC standard #458

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 39 additions & 36 deletions doc/bridged_USDC_standard.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,29 +93,24 @@ the token proxy.

Using identical code facilitates trustless contract verification by Circle and
supports a seamless integration with existing USDC services. To facilitate this,
the third-party team may choose one of the following:

- Copy previously deployed bytecode from a recent, native USDC token contract
deployment (both proxy and implementation) on an EVM blockchain, for example
[Arbitrum](https://arbiscan.io/token/0xaf88d065e77c8cc2239327c5edb3a432268e5831),
[Base](https://basescan.org/token/0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913),
[OP Mainnet](https://optimistic.etherscan.io/token/0x0b2c639c533813f4aa9d7837caf62653d097ff85),
or
[Polygon PoS](https://polygonscan.com/token/0x3c499c542cef5e3811e1192ce70d8cc03d5c3359).
Note that you must supply different constructor and initializer parameters
where needed.
- For EURC, please reference the bytecode from the
[Ethereum](https://etherscan.io/token/0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c)
implementation
- Build the
[FiatToken contracts](https://github.com/circlefin/stablecoin-evm#contracts)
from source. In this case, the compiler
[metadata](https://docs.soliditylang.org/en/latest/metadata.html) must be
published or made available to support full contract verification. Various
suggested compiler settings that Circle uses can be found
[here](https://github.com/circlefin/stablecoin-evm/blob/35d66ae39f7038e30f04f87635f8bca6f8e38b04/truffle-config.js#L34-L45),
which will allow the third-party team to reach the same bytecode if followed
consistently.
the third-party team should:

1. Build the [FiatToken contracts](../README.md#contracts) from source. Various
suggested compiler settings that Circle uses can be found
[here](../foundry.toml), which will allow the third-party team to reach the
same bytecode if followed consistently.
2. Deploy the locally compiled FiatToken contracts. An overview of the
deployment process can be found [here](./deployment.md).
3. Extract the compiler metadata used to generate the deployed contract's
bytecode and make it available to Circle to support the contract verification
process. The
[compiler metadata](https://docs.soliditylang.org/en/v0.6.12/metadata.html#contract-metadata)
is an autogenerated JSON file that can typically be found in the build
directory on the local machine.

Circle’s repository is equipped with build tools and scripts that streamline the
process above. The third-party team may refer to the steps listed
[here](../README.md#deployment) to run the deployment.

### Token Naming

Expand Down Expand Up @@ -185,7 +180,7 @@ may want to explore the Controller and `MinterController`
[contracts](https://github.com/circlefin/stablecoin-evm/tree/35d66ae39f7038e30f04f87635f8bca6f8e38b04/contracts/minting),
which come together to form the `MasterMinter` pattern.

**Transferring the roles to Circle**
#### Transferring the roles to Circle

There are several USDC roles that will be transferred to a Circle-owned address
at the time of the upgrade. Specifically these are:
Expand All @@ -204,26 +199,34 @@ It is up to the third-party team as to how they will secure and manage these
roles as part of their original bridged USDC deployment and its ongoing use
before a potential upgrade. For instance, the roles could be assigned to a
secure multi-sig, or assigned to a smart contract (like the bridge), which can
simplify the role transfer process.
simplify the role transfer process. Some teams have opted to assign the
ProxyAdmin role to a secure EOA / multi-sig wallet and assign the USDC roles to
the bridge contract itself.

Some teams have opted to assign the ProxyAdmin role to a secure EOA / multi-sig
wallet and assign the USDC roles to the bridge contract itself.

If they are assigned to a smart contract, the contract must expose a function
that Circle can call through a smart contract interaction to perform the role
transfer at upgrade time. Automating this interaction can reduce manual errors
and can enable atomic before and after checks that facilitate a smooth transfer.
If the roles are assigned to a smart contract, the contract must expose a
function that Circle can call through a smart contract interaction to perform
the role transfer at upgrade time. Automating this interaction can reduce manual
errors and can enable atomic before and after checks that facilitate a smooth
transfer.

This function must have the following signature:

```
function transferUSDCRoles(address owner) external;
```

The function implementation details are left up to the partner, but it must: 1)
only be callable by a Circle-owned address and 2) transfer the Implementation
Owner role and the ProxyAdmin role to the function caller (if both are assigned
to the bridge).
The function implementation details are left up to the partner, but it must:

1. Be only callable by an address that Circle specifies closer to the time of
the upgrade.
2. Transfer the Implementation Owner role to the address specified in the
`owner` parameter.
3. Transfer the ProxyAdmin role to the function caller (if it is assigned to the
bridge).

If the ProxyAdmin role is not assigned to the bridge contract, the partner
should transfer the role to an address that Circle specifies closer to the time
of the upgrade.

Additionally, the partner is expected to remove all configured minters prior to
(or concurrently with) transferring the roles to Circle.
Expand Down
Loading