Mint Tokens (without dApp or Batch-Capable Wallet)

How to Mint Swap Token and Principal Token using a wallet that does not support atomic batch transactions

Provide cover by depositing collateral assets into a Cork Pool to mint shares of Cork Principal Token (cPT) and Cork Swap Token (cST), without using our dApp.

This "Mint" operation on Cork:

  • deposits Collateral Asset into one of many Cork Pools

  • mints share tokens (i.e. increases circulating supply of cPT & cST tokens of that Cork Pool)


How to Mint Shares of a Cork Pool via an Escrowed Deposit

circle-info

You will be performing a trust-minimized escrowed operation. This is enforced by our escrow smart contract (CorkAdapter) to ensure that the end-user's desired intent is fulfilled properly with the expected outcomes. A deadline also ensures that your tokens are never stuck in an inconsistent state.

Prerequisites:


circle-info

These instructions are for wallets that do not support atomic batch transactions. If you have an atomic EIP-5792 capable wallet such as SAFE Wallet by safe.global (previously Gnosis SAFE), it is recommended to use this guide instead as it requires fewer steps and saves gas.

Step 1: Open your Chain Explorer's Transaction Builder

Before we begin, check that you’re using the latest version of your browser by visiting whatismybrowser.comarrow-up-right. If it’s not up to date, please update your browser to the latest version before continuing.

Connect your wallet to a Blockchain Explorer's Transaction Builder through this link: https://eth.blockscout.com/token/0x9D39A5DE30e57443BfF2A8307A4256c8797A3497?tab=write_contractarrow-up-right

Press [Connect Wallet]
Ensure that the right wallet address is connected

Step 2: Perform Transaction #1 – Allow spending of Collateral Assets by the Escrow Contract

Perform the 1st transaction to allow spending of collateral assets by our trust-minimized escrow manager contract (CorkAdapter):

  • Contract Address: <ERC20 token address of Collateral Asset>

  • Contract Method: approve

    • spender (escrow address): 0xCCcCcCCCcccCBaD6F772a511B337d9CCc9570407

    • amount (of collateral): <wei amount of collateral asset to deposit, or allowance amount in wei>

chevron-rightHow to obtain ERC20 token address of Collateral Assethashtag

The Collateral asset (CA) address and Reference asset (REF) address may be obtained by calling CorkPoolManager.assets(poolId) with the Cork Pool id, via either:

  • Etherscan (Closed source): Linkarrow-up-right

  • Blockscout (Open source): Linkarrow-up-right

  • Foundry Command Line:

    • cast call 0xccCCcCcCCccCfAE2Ee43F0E727A8c2969d74B9eC "assets(bytes32)(address collateralAsset, address referenceAsset)" <POOL_ID> --rpc-url https://eth.drpc.org

By following these instructions:

1

Calculate the allowed amount in wei

To calculate the right wei-amount of collateral asset (CA), first obtain the token decimals of the collateral asset from its ERC20 contract address, then multiply your amount by 10^(erc20_decimal_of_CA).

For example, 10 USDC (which has 6 decimals) is represented as 10×10610 \times 10^{6} , which is 10 000 000 in wei-amount.

Use a unit converter that allows you to adjust the token decimals, such as: https://converter.swiss-knife.xyz/etharrow-up-right

Input the amount under "Ether", adjust the decimals of "10^6", then press [Copy] button to its right.
2

Enter ERC20 Address of Collateral Asset

Press the search button on the top-right of the Blockchain Explorer page and input the Collateral Asset's ERC20 address as shown below.

  • Search by address: <ERC20 token address of Collateral Asset>

Search for ERC20 token address & Select the first result
3

Input Transaction #1 Details

Press [Contract], then [Read/Write contract], then [Write].

Then scroll down to look for approve , expand the section, and input these details:

  • Contract Method: approve

  • spender (address): 0xCCcCcCCCcccCBaD6F772a511B337d9CCc9570407

  • amount (uint256): <allowance amount in wei, copied from above>

Input transaction details under the contract method
4

Sign and Submit Transaction #1

Unlock your connected wallet, and press [Write], then review and sign transaction #1 on your connected wallet.

Press [Confirm]
Wait for the transaction to complete
Close this popup

Step 3: Perform Transaction #2 – Deposit/Mint with escrowed assets

Perform the 2nd transaction to mint cPT (Cork Principal Token) and cST (Cork Swap Token) by depositing escrowed collateral assets into a Cork Pool:

  • Contract Address: 0x6566194141eefa99Af43Bb5Aa71460Ca2Dc90245

  • Contract Method: multicall

    • Send native ETH: 0

    • bundle:

      • #1 Call (tuple):

        • to (address): 0xCCcCcCCCcccCBaD6F772a511B337d9CCc9570407

          • The to address is the call target, which is the escrow contract address

        • data (bytes):

        • value (uint256): 0

          • The value is the wei amount of ETH or native token to forward. Set to 0 (none) in this case.

        • skipRevert (bool): false,

          • If skipRevert is true, other planned calls will continue executing even if this call reverts. To reduce gas wastage, we must revert if the ERC20 transfer-to-escrow fails.

        • callbackHash (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000

          • The callbackHash should be set to the hash of the reenter bundle data. Set to 0x0 (none) in this case.

      • #2 Call (tuple):

        • to (address): 0xCCcCcCCCcccCBaD6F772a511B337d9CCc9570407

          • The to address is the call target, which is the escrow contract address

        • data (bytes):

        • value (uint256): 0

          • The value is the wei amount of ETH or native token to forward. Set to 0 (none) in this case.

        • skipRevert (bool): false,

          • If skipRevert is true, other planned calls will continue executing even if this call reverts. To protect escrowed funds, we must also revert the ERC20 transfer-to-escrow if the deposit fails.

        • callbackHash (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000

          • The callbackHash should be set to the hash of the reenter bundle data. Set to 0x0 (none) in this case.

By following these instructions:

1

Input Erc20TransferFrom Parameters

Input these parameters into the "erc20TransferFrom" form linked herearrow-up-right:

  • Contract Method: erc20TransferFrom

    • params:

      • token (address):

        • ERC20 token address of Collateral Asset

      • receiver (address)

        • The escrow contract address: 0xCCcCcCCCcccCBaD6F772a511B337d9CCc9570407

      • amount (uint256)

        • The wei amount of collateral assets to deposit. Must be lesser or the same as the wei amount allowed to be spent in Step 2. Copy and paste this from a token unit-converterarrow-up-right.

  • Press [Copy calldata].

Input transaction details and press [Copy calldata]
2

Optional: Verify copied Erc20TransferFrom calldata

Copy and paste the calldata into the Calldata Decoder linked herearrow-up-right, and press [Decode] to verify your inputs:

Verify that the values displayed are correct
3

Optional: Calculate the deadline in seconds since epoch

Choose a time in the future using an epoch-converterarrow-up-right. We recommend setting it at least 1 hour from now to allow sufficient time for cosigning. Since the bundle executes atomically, time-limited ERC-20 permits are unnecessary, allowing this timestamp to be set as far in the future as desired. Use this timestamp as the deadline in the next step.

circle-info

DO NOT attempt to retry this transaction before the deadline has passed.

Retrying earlier may result in duplicate operations, unintended consequences, or loss of funds.

Input your desired duration from now

If missing, scroll to the right of the page to see the copy button:

Press [Copy] button
4

Input SafeDeposit Parameters

Input these parameters into the "safeDeposit" form linked herearrow-up-right:

  • Contract Method: safeDeposit

    • params:

      • poolId (bytes32)

        • The cork pool market id

      • collateralAssetsIn (uint256)

        • The wei amount of collateral assets to deposit. Use [Max] or input the same wei amount being transferred to escrow in the erc20TransferFrom Step.

      • receiver (address)

        • Your wallet address. Or the address to which shares (cST & cPT) will be minted.

      • minCptAndCstSharesOut (uint256)

        • The amount (non-denominated in wei) of Collateral Asset in the erc20TransferFrom Step, multiplied by 1018.

        • This guarantees the minimum amount of shares (cST & cPT) to receive.

      • deadline (uint256)

  • Press [Copy calldata].

Input transaction details and press [Copy calldata]
circle-info

DO NOT attempt to retry this transaction before the deadline has passed.

Retrying earlier may result in duplicate operations, unintended consequences, or loss of funds.

5

Optional: Verify copied SafeDeposit calldata

Copy and paste the calldata into the Calldata Decoder linked herearrow-up-right, and press [Decode] to verify your inputs:

Verify that the values displayed are correct
6

Enter Address of Bundler3 contract

circle-info

A Bundler contract is analogous to a Router contract, with the added guarantee that each step of the execution is explicitly defined rather than implicit.

This reduces the need to absolutely verify and place trust in esoteric code when interacting with smart contracts.

By ensuring that each step is verifiable by a mainstream enduser and his wallet, this system achieves greater end-to-end transparency and security.

Press the search button on the top-right of the Blockchain Explorer page and input the Bundler3 contract addressarrow-up-right as shown below.

  • Search by address: 0x6566194141eefa99Af43Bb5Aa71460Ca2Dc90245

Search for Bundler3 contract address & Select the first result
7

Input Transaction #2 Details

Press [Contract], then [Read/Write contract], then [Write].

Then scroll down to look for multicall , expand the section, and input these details:

  • Contract Method: multicall

  • Send native ETH: 0

  • bundle:

    • #1 Call (tuple):

      • to (address): 0xCCcCcCCCcccCBaD6F772a511B337d9CCc9570407

        • The to address is the call target, which is the escrow contract address

      • data (bytes):

      • value (uint256): 0

        • The value is the wei amount of ETH or native token to forward. Set to 0 (none) in this case.

      • skipRevert (bool): false,

        • If skipRevert is true, other planned calls will continue executing even if this call reverts. To reduce gas wastage, we must revert if the ERC20 transfer-to-escrow fails.

      • callbackHash (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000

        • The callbackHash should be set to the hash of the reenter bundle data. Set to 0x0 (none) in this case.

    • #2 Call (tuple):

      • to (address): 0xCCcCcCCCcccCBaD6F772a511B337d9CCc9570407

        • The to address is the call target, which is the escrow contract address

      • data (bytes):

      • value (uint256): 0

        • The value is the wei amount of ETH or native token to forward. Set to 0 (none) in this case.

      • skipRevert (bool): false,

        • If skipRevert is true, other planned calls will continue executing even if this call reverts. To protect escrowed funds, we must also revert the ERC20 transfer-to-escrow if the deposit fails.

      • callbackHash (bytes32): 0x0000000000000000000000000000000000000000000000000000000000000000

        • The callbackHash should be set to the hash of the reenter bundle data. Set to 0x0 (none) in this case.

Input transaction details under the contract method
8

Sign and Submit Transaction #2

Unlock your connected wallet, and press [Simulate].

circle-info

Cork Phoenix is designed with security as a core principle, going above and beyond on eliminating security footguns:

  • Our escrow smart contract immutably enforce all business invariants at every step of execution.

  • The protocol is architected such that all user actions can be fully simulated and reviewed as a single atomic transaction, enabling straightforward and reliable verification before committing anything onchain. (This includes legacy wallets without a builtin bundler.)

  • Key smart contracts have easily identifiable addresses, making review straightforward.

When you are satisfied with the simulation results, unlock your connected wallet again, and press [Write]. Then review and sign transaction #2 on your connected wallet.

circle-info

If you see a "Missing gas limit" error, your connected wallet may not be whitelisted. Press [Reject] and then [Simulate] to confirm this is the case.

Press [Confirm]
Wait for transaction to complete

Step 4: Wait for Confirmation and Verify token balances

Once transaction #2 is confirmed, follow your wallet-specific instructions to add both cPT (Cork Principal Token) address and cST (Cork Swap Token) address into your wallet to check their balances.

The cPT address and cST address may be obtained by calling CorkPoolManager.shares(poolId) with the Cork Pool id, via either:

  • Etherscan (Closed source): Linkarrow-up-right

  • Blockscout (Open source): Linkarrow-up-right

  • Foundry Command Line:

    • cast call 0xccCCcCcCCccCfAE2Ee43F0E727A8c2969d74B9eC "shares(bytes32)(address corkPrincipalToken, address corkSwapToken)" <POOL_ID> --rpc-url https://eth.drpc.org


Last updated