Mint Tokens (without dApp)
How to Mint Swap Token and Principal Token using an atomic EIP-5792 capable wallet
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
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:
The Cork Pool's market id (bytes32).
A balance of Collateral Asset (CA) that pertains to this Cork Pool.
An atomic EIP-5792 capable wallet such as SAFE Wallet by safe.global (previously Gnosis SAFE) or an "AA" Account-Abstraction Wallet.
For your own safety, you are advised to use a wallet that supports clear signing (i.e. some form of calldata and bundle visualization) that improves opsec.
Completed a due diligence audit of the
safeDepositfunction onLine 126of the escrow manager contract (CorkAdapter) at its live deployment address via either:Github: Link
The instructions below are prepared using SAFE Wallet by SAFE Labs (safe.global), but also applies to any atomic EIP-5792 capable wallet.
Step 1: Open your Wallet's Transaction Builder
Before we begin, check that you’re using the latest version of your browser by visiting whatismybrowser.com. If it’s not up to date, please update your browser to the latest version before continuing.
Open the SAFE Wallet's Transaction Builder using this link: https://app.safe.global/share/safe-app?appUrl=https%3A%2F%2Fapps-portal.safe.global%2Ftx-builder
Alternatively, you may navigate to the Transaction Builder by following these steps:




Step 2: Add Transaction #1 – Transfer Collateral Assets to the Escrow Contract
Add the 1st transaction to transfer collateral assets into our trust-minimized escrow manager contract (CorkAdapter):
Enter Address:
eth:<ERC20 token address of Collateral Asset>To Address:
<ERC20 token address of Collateral Asset>Contract Method Selector:
transferto (escrow address):
0xCCcCcCCCcccCBaD6F772a511B337d9CCc9570407amount (of collateral): <wei amount of collateral asset to transfer/deposit>
How to obtain ERC20 token address of Collateral Asset
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:
By following these instructions:
Enter ERC20 Address of Collateral Asset
Input the Collateral Asset's ERC20 address & ABI as shown below.
Enter Address:
eth:<ERC20 token address of Collateral Asset>Enter ABI: If the ABI does not load automatically, copy and paste the ABI from here.

Calculate the deposit 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×106 , 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/eth

Input Transaction #1 Details
To Address:
<ERC20 token address of Collateral Asset>Contract Method Selector:
transferto (address):
0xCCcCcCCCcccCBaD6F772a511B337d9CCc9570407amount (uint256): <wei amount of collateral asset to transfer/deposit copied from above>

Step 3: Add Transaction #2 – Request a Deposit/Mint with escrowed assets
Add the 2nd transaction to mint cPT (Cork Principal Token) and cST (Cork Swap Token) by depositing escrowed collateral assets into a Cork Pool:
Enter Address:
eth:0x6566194141eefa99Af43Bb5Aa71460Ca2Dc90245Enter ABI: Copied from here
To Address:
0x6566194141eefa99Af43Bb5Aa71460Ca2Dc90245ETH value:
0Contract Method Selector:
multicallbundle:
[[comma separated values as below within double square brackets...]]"0xCCcCcCCCcccCBaD6F772a511B337d9CCc9570407",The
toaddress is the call target, which is the escrow contract address
"<calldata>",The
calldataas copied from the safeDeposit Step.
"0",The
valueis the wei amount of ETH or native token to forward. Set to 0 (none) in this case.
false,If
skipRevertis true, other planned calls will continue executing even if this call reverts. To protect escrowed funds, we must also revert the transfer-to-escrow if the deposit fails.
"0x0"The
callbackHashshould be set to the hash of the reenter bundle data. Set to 0x0 (none) in this case.
By following these instructions:
Enter Address of Bundler3 contract
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.
Input the Bundler3 contract address & ABI as shown below.
Enter Address:
eth:0x6566194141eefa99Af43Bb5Aa71460Ca2Dc90245Enter ABI: If the ABI does not load automatically, copy and paste the ABI from here.

Optional: Calculate the deadline in seconds since epoch
Choose a time in the future using an epoch-converter. 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.
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.

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

Input SafeDeposit Parameters
Input these parameters into the "safeDeposit" form linked here:
Contract Method:
safeDepositparams:
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 Step 2.
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 Step 2, multiplied by 1018.
This guarantees the minimum amount of shares (cST & cPT) to receive.
deadline (uint256)
The deadline by which the transaction must be completed. Use [Now+1h] or copy from an epoch-converter.
Press [Copy calldata].

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.
Optional: Verify copied calldata
Copy and paste the calldata into the Calldata Decoder linked here, and press [Decode] to verify your inputs:

Input Transaction #2 Details
To Address (Bundler3):
0x6566194141eefa99Af43Bb5Aa71460Ca2Dc90245ETH value:
0Contract Method Selector:
multicallbundle:
[[comma separated values as below within double square brackets...]]"0xCCcCcCCCcccCBaD6F772a511B337d9CCc9570407",The
toaddress is the call target, which is the escrow contract address
"<calldata>",The
calldataas copied from the safeDeposit Step.
"0",The
valueis the wei amount of ETH or native token to forward. Set to 0 (none) in this case.
false,If
skipRevertis true, other planned calls will continue executing even if this call reverts. To protect escrowed funds, we must also revert the transfer-to-escrow if the deposit fails.
"0x0"The
callbackHashshould be set to the hash of the reenter bundle data. Set to 0x0 (none) in this case.
Example bundle:

Step 4: Create, Review & Simulate Transactions Batch
Press [Create Batch] and follow these instructions:
Review and Confirm your Batch
Make sure that you see this "Review and Confirm" screen.
Important: Enable atomic batch if asked by your EIP-5792 capable wallet. Using non-atomic batch mode can lead to lost of funds!

Simulate your Batch
Press [Simulate Batch] and ensure that the simulated outcomes are as expected.
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 also applies to legacy wallets without a builtin bundler.)
Key smart contracts have easily identifiable addresses, making review straightforward.
Step 5: Multisig Process on Batched Transaction
If you are not using a multisig, you may skip this step.
If you are using a multisig wallet, ask each co-signer/co-owner to follow these instructions:
Verify the Calldata of each transaction in the batch
Each cosigner copies the calldata of each action or transaction into a safe decoder, and verifies that the decoded data contains the correct amounts and addresses.
DO NOT CONTINUE if they do not match!
Step 6: Wait for Confirmation and Verify token balances
Once the batched transaction 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): Link
Blockscout (Open source): Link
Foundry Command Line:
cast call 0xccCCcCcCCccCfAE2Ee43F0E727A8c2969d74B9eC "shares(bytes32)(address corkPrincipalToken, address corkSwapToken)" <POOL_ID> --rpc-url https://eth.drpc.org
Last updated



