Add support for USDT as strategy denomination token #824
Labels
enhancement
New feature or request
priority: P0
An urgent issue seriously disrupting the operations, must be addressed IMMEDIATELY.
size: M
An ordinary task that can be completed in a few days or in a week
Goal
As a strategy developer, I want my strategy to use USDT as the denomination token, so that it can use the highest liquidity trading pairs when trading various assets.
Background
See discord thread.
We currently have strategies live on Polygon and Etherium blockchains, as well as one "hot wallet" strategy live on Arbitrum. We are preparing to launch a new strategy on Arbitrum, which requires trading liquidity on various tokens (list here?). Due to USDC (native) vs. USDC.e fragmentation, trading pairs that use USDT currently have much better liquidity.
All current strategies use USDC as the denomination token. This has a UX advantage since UDDC contracts support EIP-3009
TransferWithAuthorization
flow. This allows users to first sign a transfer request which is then forwarded to our deposit contract, which can then be used to transfer the user's USDC from their wallet and return the tokens associated with the strategy shares in a single transaction.Current USDT token contracts do not support EIP-3009. To use USDT, we need to follow a more traditional 2-transaction deposit flow: (i) approve; (ii) deposit. The approval step will replace the current authorization signature step, and will require a blockchain transaction to complete (including gas fees).
Open questions
1. Should we modify the flow for all strategies (including ones using USDC) or keep the
TransferWithAuthorization
flow for USDC?frontend
if we have a single flow; could simplify future strategy deposit contracts2. In the USDT flow, after a user has completed the "approve transfer" wallet request (and transaction completes successfully), should we immediately initiate the payment wallet request, or should we display a separate "Make payment" button that the user must click to initiate the payment?
TransferWithAuthorization
flow, after the user signs the authorization, we immediately initiate the payment request; to keep the flows more similar, we could follow this same patternDRAFT Acceptance criteria
Regarding open questions above, current DRAFT acceptance criteria assume:
TransferWithAuthorization
flow for USDC strategies.USDC flow remains unchanged
Given: a strategy using USDC or USDC.e as denomination token (with support for
TransferWithAuthorization
)When: a user begins a deposit
Then:
New USDT payment flow
Given: a strategy using USDT as denomination token:
When: a user begins a deposit
When: the user is on the "Payment" step:
The text was updated successfully, but these errors were encountered: