Skip to content

Commit

Permalink
EigenLayer LST (#3)
Browse files Browse the repository at this point in the history
* feat(lr): add delegateTo support

* feat(lr): complete delegate to testsuite

* feat(lr): add undelegate support

* feat(lr): add queueWithdrawals support

* fix(lr/queueWithdrawal): invalid state transitions

* fix(lr/queueWithdrawals): invalid state transition

* feat(lr): add completeQueuedWithdrawals support

* chore: file split + headers
  • Loading branch information
loicttn committed Apr 26, 2024
1 parent d426226 commit fadbd18
Show file tree
Hide file tree
Showing 185 changed files with 2,454 additions and 782 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[submodule "ethereum-plugin-sdk"]
path = ethereum-plugin-sdk
url = git@github.com:LedgerHQ/ethereum-plugin-sdk.git
[submodule "app-ethereum"]
path = app-ethereum
url = git@github.com:LedgerHQ/app-ethereum.git
1 change: 1 addition & 0 deletions app-ethereum
Submodule app-ethereum added at 985dd9
76 changes: 50 additions & 26 deletions src/contract.c → src/contracts.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
/*******************************************************************************
*
* ██╗ ██╗██╗██╗ ███╗ ██╗
* ██║ ██╔╝██║██║ ████╗ ██║
* █████╔╝ ██║██║ ██╔██╗ ██║
* ██╔═██╗ ██║██║ ██║╚██╗██║
* ██║ ██╗██║███████╗██║ ╚████║
* ╚═╝ ╚═╝╚═╝╚══════╝╚═╝ ╚═══╝
*
* Kiln Ethereum Ledger App
* (c) 2022-2024 Kiln
*
* contact@kiln.fi
********************************************************************************/

#include "kiln_plugin.h"

// ONCHAIN V1 - Solo Staking
Expand Down Expand Up @@ -31,32 +46,15 @@ static const uint32_t KILN_V2_CLAIM_SELECTOR = 0xadcf1163;
// RESTAKING - Liquid Restaking
// --- cast sig "depositIntoStrategy(address,address,uint256)"
static const uint32_t KILN_LR_DEPOSIT_INTO_STRATEGY_SELECTOR = 0xe7a050aa;
// --- cast sig "queueWithdrawal(uint256[],address[],uint256[],address,bool)"
static const uint32_t KILN_LR_QUEUE_WITHDRAWAL_SELECTOR = 0xf123991e;
// --- cast sig "queueWithdrawals((address[],uint256[],address)[])"
static const uint32_t KILN_LR_QUEUE_WITHDRAWALS_SELECTOR = 0x0dd8dd02;
// --- cast sig
// "completeQueuedWithdrawal((address[],uint256[],address,(address,uint96),uint32,address),address[],uint256,bool)"
static const uint32_t KILN_LR_COMPLETE_QUEUED_WITHDRAWAL_SELECTOR = 0xf3be65d3;

const uint32_t KILN_SELECTORS[NUM_SELECTORS] = {
// V1
KILN_V1_DEPOSIT_SELECTOR,
KILN_V1_WITHDRAW_SELECTOR,
KILN_V1_WITHDRAW_EL_SELECTOR,
KILN_V1_WITHDRAW_CL_SELECTOR,
KILN_V1_BATCH_WITHDRAW_SELECTOR,
KILN_V1_BATCH_WITHDRAW_EL_SELECTOR,
KILN_V1_BATCH_WITHDRAW_CL_SELECTOR,
KILN_V1_REQUEST_EXIT_SELECTOR,
// V2
KILN_V2_STAKE_SELECTOR,
KILN_V2_REQUEST_EXIT_SELECTOR,
KILN_V2_MULTICLAIM_SELECTOR,
KILN_V2_CLAIM_SELECTOR,
// LR
KILN_LR_DEPOSIT_INTO_STRATEGY_SELECTOR,
KILN_LR_QUEUE_WITHDRAWAL_SELECTOR,
KILN_LR_COMPLETE_QUEUED_WITHDRAWAL_SELECTOR,
};
// "completeQueuedWithdrawals((address,address,address,uint256,uint32,address[],uint256[])[],address[][],uint256[],bool[])"
static const uint32_t KILN_LR_COMPLETE_QUEUED_WITHDRAWALS_SELECTOR = 0x33404396;
// --- cast sig "delegateTo(address,(bytes,uint256),bytes32)"
static const uint32_t KILN_LR_DELEGATE_TO_SELECTOR = 0xeea9064b;
// -- cast sig "undelegate(address)"
static const uint32_t KILN_LR_UNDELEGATE_SELECTOR = 0xda8be864;

const char lr_strategy_addresses[LR_STRATEGIES_COUNT][ADDRESS_STR_LEN] = {
"0x54945180dB7943c0ed0FEE7EdaB2Bd24620256bc", // cbETH
Expand Down Expand Up @@ -96,4 +94,30 @@ const char lr_tickers[LR_STRATEGIES_COUNT][MAX_TICKER_LEN] = {"cbETH",
"swETH",
"wBETH",
"sfrxETH",
"mETH"};
"mETH"};

const char lr_kiln_operator_address[ADDRESS_STR_LEN] = "0x1f8C8b1d78d01bCc42ebdd34Fae60181bD697662";

// Array of all supported selectors.
const uint32_t KILN_SELECTORS[NUM_SELECTORS] = {
// V1
KILN_V1_DEPOSIT_SELECTOR,
KILN_V1_WITHDRAW_SELECTOR,
KILN_V1_WITHDRAW_EL_SELECTOR,
KILN_V1_WITHDRAW_CL_SELECTOR,
KILN_V1_BATCH_WITHDRAW_SELECTOR,
KILN_V1_BATCH_WITHDRAW_EL_SELECTOR,
KILN_V1_BATCH_WITHDRAW_CL_SELECTOR,
KILN_V1_REQUEST_EXIT_SELECTOR,
// V2
KILN_V2_STAKE_SELECTOR,
KILN_V2_REQUEST_EXIT_SELECTOR,
KILN_V2_MULTICLAIM_SELECTOR,
KILN_V2_CLAIM_SELECTOR,
// EigenLayer
KILN_LR_DEPOSIT_INTO_STRATEGY_SELECTOR,
KILN_LR_QUEUE_WITHDRAWALS_SELECTOR,
KILN_LR_COMPLETE_QUEUED_WITHDRAWALS_SELECTOR,
KILN_LR_DELEGATE_TO_SELECTOR,
KILN_LR_UNDELEGATE_SELECTOR,
};
44 changes: 42 additions & 2 deletions src/handle_finalize.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
/*******************************************************************************
*
* ██╗ ██╗██╗██╗ ███╗ ██╗
* ██║ ██╔╝██║██║ ████╗ ██║
* █████╔╝ ██║██║ ██╔██╗ ██║
* ██╔═██╗ ██║██║ ██║╚██╗██║
* ██║ ██╗██║███████╗██║ ╚████║
* ╚═╝ ╚═╝╚═╝╚══════╝╚═╝ ╚═══╝
*
* Kiln Ethereum Ledger App
* (c) 2022-2024 Kiln
*
* contact@kiln.fi
********************************************************************************/

#include "kiln_plugin.h"

void handle_finalize(ethPluginFinalize_t *msg) {
Expand Down Expand Up @@ -25,11 +40,36 @@ void handle_finalize(ethPluginFinalize_t *msg) {
msg->numScreens = 3;
msg->result = ETH_PLUGIN_RESULT_OK;
break;
case KILN_LR_QUEUE_WITHDRAWAL:
case KILN_LR_QUEUE_WITHDRAWALS: {
{
lr_queue_withdrawals_t *params = &context->param_data.lr_queue_withdrawals;
// function + withdrawer screens
msg->numScreens = 2;
// one screen per withdrawal
msg->numScreens += params->strategies_count;
PRINTF("NUMBER OF STRATEGIES TO DISPLAY: %d\n", params->strategies_count);
}
msg->result = ETH_PLUGIN_RESULT_OK;
break;
}
case KILN_LR_COMPLETE_QUEUED_WITHDRAWALS: {
{
lr_complete_queued_withdrawals_t *params =
&context->param_data.lr_complete_queued_withdrawals;
// function + withdrawer screens
msg->numScreens = 2;
// one screen per strategy
msg->numScreens += params->strategies_count;
PRINTF("NUMBER OF STRATEGIES TO DISPLAY: %d\n", params->strategies_count);
}
msg->result = ETH_PLUGIN_RESULT_OK;
break;
}
case KILN_LR_DELEGATE_TO:
msg->numScreens = 2;
msg->result = ETH_PLUGIN_RESULT_OK;
break;
case KILN_LR_COMPLETE_QUEUED_WITHDRAWAL:
case KILN_LR_UNDELEGATE:
msg->numScreens = 1;
msg->result = ETH_PLUGIN_RESULT_OK;
break;
Expand Down
28 changes: 24 additions & 4 deletions src/handle_init_contract.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
/*******************************************************************************
*
* ██╗ ██╗██╗██╗ ███╗ ██╗
* ██║ ██╔╝██║██║ ████╗ ██║
* █████╔╝ ██║██║ ██╔██╗ ██║
* ██╔═██╗ ██║██║ ██║╚██╗██║
* ██║ ██╗██║███████╗██║ ╚████║
* ╚═╝ ╚═╝╚═╝╚══════╝╚═╝ ╚═══╝
*
* Kiln Ethereum Ledger App
* (c) 2022-2024 Kiln
*
* contact@kiln.fi
********************************************************************************/

#include "kiln_plugin.h"
#include "plugin_utils.h"

Expand Down Expand Up @@ -59,11 +74,16 @@ void handle_init_contract(ethPluginInitContract_t *msg) {
case KILN_LR_DEPOSIT_INTO_STRATEGY:
context->next_param = LR_DEPOSIT_INTO_STRATEGY_STRATEGY;
break;
case KILN_LR_QUEUE_WITHDRAWAL:
context->next_param = LR_QUEUE_WITHDRAWAL_STRATEGY_INDEXES_OFFSET;
case KILN_LR_QUEUE_WITHDRAWALS:
context->next_param = LR_QUEUE_WITHDRAWALS_QWITHDRAWALS_OFFSET;
break;
case KILN_LR_COMPLETE_QUEUED_WITHDRAWALS:
context->next_param = LRCQW_WITHDRAWALS_OFFSET;
break;
case KILN_LR_DELEGATE_TO:
context->next_param = LR_DELEGATE_TO_OPERATOR;
break;
case KILN_LR_COMPLETE_QUEUED_WITHDRAWAL:
context->next_param = LR_COMPLETE_QUEUED_WITHDRAWAL_QUEUEDWITHDRAWAL_OFFSET;
case KILN_LR_UNDELEGATE:
break;

default:
Expand Down

0 comments on commit fadbd18

Please sign in to comment.