Skip to content

Commit

Permalink
Merge pull request #19 from blooo-io/feat/LDG-407-tomo-vic-staking-wi…
Browse files Browse the repository at this point in the history
…thdraw

Feat/ldg 407 tomo vic staking withdraw
  • Loading branch information
Z4karia authored Jan 5, 2024
2 parents cec21f0 + c43ba8e commit e0d936e
Show file tree
Hide file tree
Showing 330 changed files with 5,445 additions and 42 deletions.
13 changes: 12 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,18 @@ VARIANT_PARAM = COIN
VARIANT_VALUES = stakekit

# Enabling DEBUG flag will enable PRINTF and disable optimizations
#DEBUG = 1
DEBUG := 0
DISABLE_DEBUG_LEDGER_ASSERT = 1
DISABLE_DEBUG_THROW = 1
ifneq ($(DEBUG),0)
ifneq ($(TARGET_NAME),TARGET_NANOS)
DEFINES += HAVE_PRINTF PRINTF=mcu_usb_printf
else
DEFINES += HAVE_PRINTF PRINTF=screen_printf
endif
else
DEFINES += PRINTF\(...\)=
endif

########################################
# Application custom permissions #
Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ Smart contracts covered by this plugin are:
| Avalanche Liquid Staking | Avalanche | TransparentUpgradeableProxy | 0x2b2c81e08f1af8835a78bb2a90ae924ace0ea4be| StakedAvax | 0x0CE7F620Eb645a4FbF688a1C1937bC6CB0CbDd29 |
|Aave v3 Lending DAI | <table> <tbody> <tr> <td><code>Optimism</code></td></tr> <tr><td><code>Polygon</code></td></tr> <tr><td><code>Arbitrum</code></td></tr> <tr><td><code>Avalanche</code></td></tr> </tbody> </table> |InitializableImmutableAdminUpgradeabilityProxy | 0x794a61358d6845594f94dc1db02a252b5b4814ad | <table> <tbody> <tr> <td><code>Pool</code></td></tr> <tr><td><code>Pool</code></td></tr> <tr><td><code>L2Pool</code></td></tr> <tr><td><code>L2Pool</code></td></tr> </tbody> </table> | <table> <tbody> <tr> <td><code>0xb77fc84a549ecc0b410d6fa15159C2df207545a3</code></td></tr> <tr><td><code>0xCf85FF1c37c594a10195F7A9Ab85CBb0a03f69dE</code></td></tr> <tr><td><code>0x764594F8e9757edE877B75716f8077162B251460</code></td></tr> <tr><td><code>0xbCb167bDCF14a8F791d6f4A6EDd964aed2F8813B</code></td></tr> </tbody> </table>
|Yearn Vault | <table> <tbody> <tr> <td><code>Ethereum</code></td></tr> <tr><td><code>Optimism</code></td></tr> <tr><td><code>Fantom</code></td></tr> </tbody> </table> | Yearn Vault | [Token json](./tokens.json) |
| Angle Protocol | <table><tbody> <tr><td><code>Ethereum</code></td></tr> <tr><td><code>Arbitrum</code></td></tr> </tbody></table> | TransparentUpgradeableProxy | 0x004626A008B1aCdC4c74ab51644093b155e59A23| Savings | 0xfD2cCc920d498db30FBE9c13D5705aE2C72670F9 |
| Lido stETH Withdrawal NFT | Ethereum | OssifiableProxy | 0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1| WithdrawalQueueERC721 | 0xE42C659Dc09109566720EA8b2De186c2Be7D94D9 |
| VIC Native Staking | Viction | TomoValidator | 0x0000000000000000000000000000000000000088| X | X |


## Methods
Expand All @@ -68,6 +71,9 @@ Methods covered by this plugin are:
| Aave v3 Lending DAI | <table><tbody> <tr><td><code>L2Pool</code></td></tr> <tr><td><code>Pool</code></td></tr> </tbody></table> | <table><tbody> <tr><td><code>0x617ba037</code></td></tr> <tr><td><code>0x69328dec</code></td></tr> </tbody></table> | <table><tbody> <tr><td><code>supply</code></td></tr> <tr><td><code>withdraw</code></td></tr> </tbody></table> |
| Avalanche Liquid Staking | StakedAvax | <table><tbody> <tr><td><code>0x5bcb2fc6</code></td></tr> <tr><td><code>0xc9d2ff9d</code></td></tr> <tr><td><code>0xdb006a75</code></td></tr> <tr><td><code>0xbe040fb0</code></td></tr> <tr><td><code>0x0d10d32c</code></td></tr> <tr><td><code>0x0f7e2048</code></td></tr> </tbody></table> | <table><tbody> <tr><td><code>submit</code></td></tr> <tr><td><code>requestUnlock</code></td></tr> <tr><td><code>redeem</code></td></tr> <tr><td><code>redeem</code></td></tr> <tr><td><code>redeemOverdueShares</code></td></tr> <tr><td><code>redeemOverdueShares</code></td></tr> </tbody></table> |
| Yearn Vault | Yearn Vault | <table><tbody> <tr><td><code>0xd0e30db0</code></td></tr> <tr><td><code>0xb6b55f25</code></td></tr> <tr><td><code>0x6e553f65</code></td></tr> <tr><td><code>0x3ccfd60b</code></td></tr> <tr><td><code>0x2e1a7d4d</code></td></tr> <tr><td><code>0x00f714ce</code></td></tr> </tbody></table> | <table><tbody> <tr><td><code>deposit</code></td></tr> <tr><td><code>deposit</code></td></tr> <tr><td><code>deposit</code></td></tr> <tr><td><code>withdraw</code></td></tr> <tr><td><code>withdraw</code></td></tr> <tr><td><code>withdraw</code></td></tr> </tbody></table> |
| Angle Protocol | Savings | <table><tbody> <tr><td><code>0x6e553f65</code></td></tr> <tr><td><code>0xb460af94</code></td></tr> </tbody></table> | <table><tbody> <tr><td><code>deposit</code></td></tr><tr><td><code>withdraw</code></td></tr> </tbody></table> |
| Lido stETH Withdrawal NFT | WithdrawalQueueERC721 | <table><tbody> <tr><td><code>0xd6681042</code></td></tr> <tr><td><code>0xe3afe0a3</code></td></tr> </tbody></table> | <table><tbody> <tr><td><code>requestWithdrawals</code></td></tr><tr><td><code>claimWithdrawals</code></td></tr> </tbody></table> |
| VIC Native Staking | TomoValidator | <table><tbody> <tr><td><code>0x6dd7d8ea</code></td></tr> <tr><td><code>0x02aa9be2</code></td></tr> <tr><td><code>0xae6e43f5</code></td></tr> <tr><td><code>0x441a3e70</code></td></tr> </tbody></table> | <table><tbody> <tr><td><code>vote</code></td></tr> <tr><td><code>unvote</code></td></tr> <tr><td><code>resign</code></td></tr> <tr><td><code>withdraw</code></td></tr> </tbody></table> |


## Build
Expand Down
7 changes: 7 additions & 0 deletions ledger_app.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[app]
build_directory = "./"
sdk = "C"
devices = ["nanos", "nanox", "nanos+", "stax"]

[tests]
pytest_directory = "./tests/"
31 changes: 31 additions & 0 deletions src/contract.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,20 @@ static const uint8_t STAKEKIT_YEARN_VAULT_WITHDRAW_3_SELECTOR[SELECTOR_SIZE] = {
0xf7,
0x14,
0xce};
static const uint8_t STAKEKIT_ANGLE_WITHDRAW_SELECTOR[SELECTOR_SIZE] = {0xb4, 0x60, 0xaf, 0x94};
static const uint8_t STAKEKIT_LIDO_REQUEST_WITHDRAWALS_SELECTOR[SELECTOR_SIZE] = {0xd6,
0x68,
0x10,
0x42};
static const uint8_t STAKEKIT_LIDO_CLAIM_WITHDRAWALS_SELECTOR[SELECTOR_SIZE] = {0xe3,
0xaf,
0xe0,
0xa3};
static const uint8_t STAKEKIT_VIC_VOTE_SELECTOR[SELECTOR_SIZE] = {0x6d, 0xd7, 0xd8, 0xea};

static const uint8_t STAKEKIT_VIC_RESIGN_SELECTOR[SELECTOR_SIZE] = {0xae, 0x6e, 0x43, 0xf5};
static const uint8_t STAKEKIT_VIC_UNVOTE_SELECTOR[SELECTOR_SIZE] = {0x02, 0xaa, 0x9b, 0xe2};
static const uint8_t STAKEKIT_VIC_WITHDRAW_SELECTOR[SELECTOR_SIZE] = {0x44, 0x1a, 0x3e, 0x70};

// Array of all the different StakeKit selectors.
const uint8_t *const STAKEKIT_SELECTORS[NUM_STAKEKIT_SELECTORS] = {
Expand Down Expand Up @@ -140,6 +154,13 @@ const uint8_t *const STAKEKIT_SELECTORS[NUM_STAKEKIT_SELECTORS] = {
STAKEKIT_YEARN_VAULT_WITHDRAW_1_SELECTOR,
STAKEKIT_YEARN_VAULT_WITHDRAW_2_SELECTOR,
STAKEKIT_YEARN_VAULT_WITHDRAW_3_SELECTOR,
STAKEKIT_ANGLE_WITHDRAW_SELECTOR,
STAKEKIT_LIDO_REQUEST_WITHDRAWALS_SELECTOR,
STAKEKIT_LIDO_CLAIM_WITHDRAWALS_SELECTOR,
STAKEKIT_VIC_VOTE_SELECTOR,
STAKEKIT_VIC_RESIGN_SELECTOR,
STAKEKIT_VIC_UNVOTE_SELECTOR,
STAKEKIT_VIC_WITHDRAW_SELECTOR,
};

// Null address
Expand Down Expand Up @@ -1750,4 +1771,14 @@ const tokenSymbolAndDecimals_t STAKEKIT_SUPPORTED_YEARN_VAULT[NUM_SUPPORTED_SMAR
"3poolV2-f",
"yvCurve-MIM",
18},
{{0x00, 0x46, 0x26, 0xA0, 0x08, 0xB1, 0xaC, 0xdC, 0x4c, 0x74,
0xab, 0x51, 0x64, 0x40, 0x93, 0xb1, 0x55, 0xe5, 0x9A, 0x23},
"stEUR",
"stEUR",
18},
{{0x88, 0x9e, 0xdC, 0x2e, 0xDa, 0xb5, 0xf4, 0x0e, 0x90, 0x2b,
0x86, 0x4a, 0xD4, 0xd7, 0xAd, 0xE8, 0xE4, 0x12, 0xF9, 0xB1},
"unstETH",
"unstETH",
18},
};
38 changes: 38 additions & 0 deletions src/handle_finalize.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,16 +188,54 @@ void handle_finalize(void *parameters) {
case PARASPACE_WITHDRAW:
case YEARN_VAULT_WITHDRAW_2:
case YEARN_VAULT_WITHDRAW_3:
case ANGLE_WITHDRAW:
msg->numScreens = 1;
if (context->selectorIndex == YEARN_VAULT_WITHDRAW_3) {
msg->numScreens++;
}
if (context->selectorIndex == ANGLE_WITHDRAW) {
msg->numScreens += 2;
}
if (set_ticker_withdraw_for_mapped_token(context, msg)) {
msg->result = ETH_PLUGIN_RESULT_OK;
} else {
msg->result = ETH_PLUGIN_RESULT_ERROR;
}
break;
case LIDO_REQUEST_WITHDRAWALS:
msg->numScreens = 2;
if (set_ticker_withdraw_for_mapped_token(context, msg)) {
msg->result = ETH_PLUGIN_RESULT_OK;
} else {
msg->result = ETH_PLUGIN_RESULT_ERROR;
}
break;
case LIDO_CLAIM_WITHDRAWALS:
msg->numScreens = 2;
if (context->nb_requests >= 2) {
msg->numScreens += 2;
}
context->decimals_sent = 0;
context->decimals_received = 0;
// No ticker to display
msg->result = ETH_PLUGIN_RESULT_OK;
break;
case VIC_VOTE:
case VIC_RESIGN:
msg->numScreens = 1;
msg->result = ETH_PLUGIN_RESULT_OK;
break;
case VIC_UNVOTE:
msg->numScreens = 2;
strlcpy(context->ticker_sent, VIC_TICKER, sizeof(context->ticker_sent));
msg->result = ETH_PLUGIN_RESULT_OK;
break;
case VIC_WITHDRAW:
msg->numScreens = 2;
context->decimals_sent = 0;
context->decimals_received = 0;
msg->result = ETH_PLUGIN_RESULT_OK;
break;
default:
msg->numScreens = 1;
msg->result = ETH_PLUGIN_RESULT_OK;
Expand Down
15 changes: 15 additions & 0 deletions src/handle_init_contract.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,11 @@ void handle_init_contract(void *parameters) {
case YEARN_VAULT_DEPOSIT_3:
case YEARN_VAULT_WITHDRAW_2:
case YEARN_VAULT_WITHDRAW_3:
case ANGLE_WITHDRAW:
context->next_param = AMOUNT_SENT;
break;
case WITHDRAW_SELF_APECOIN:
case VIC_WITHDRAW:
context->next_param = AMOUNT_RECEIVED;
break;
case CLAIM_SELF_APECOIN:
Expand All @@ -67,6 +69,8 @@ void handle_init_contract(void *parameters) {
case AVALANCHE_REDEEM_OVERDUE_SHARES_1:
case YEARN_VAULT_DEPOSIT_1:
case YEARN_VAULT_WITHDRAW_1:
case VIC_VOTE:
case VIC_RESIGN:
context->next_param = NONE;
break;
case SUBMIT_ETH_LIDO:
Expand All @@ -77,6 +81,7 @@ void handle_init_contract(void *parameters) {
case COMET_CLAIM:
case VOTE:
case REVOKE_ACTIVE:
case VIC_UNVOTE:
context->next_param = RECIPIENT;
break;
case MORPHO_SUPPLY_1:
Expand All @@ -100,6 +105,16 @@ void handle_init_contract(void *parameters) {
case UNSTAKE_CLAIM_TOKENS_NEW:
context->next_param = UNBOUND_NONCE;
break;
case LIDO_REQUEST_WITHDRAWALS:
// Skipping the _amounts parameter offset (constant)
context->skip = 1;
context->next_param = RECIPIENT;
break;
case LIDO_CLAIM_WITHDRAWALS:
// Skipping the _requestIds parameter offset (constant)
context->skip = 1;
context->next_param = SAVE_OFFSET;
break;
default:
PRINTF("Missing selectorIndex\n");
msg->result = ETH_PLUGIN_RESULT_ERROR;
Expand Down
Loading

0 comments on commit e0d936e

Please sign in to comment.