From ebb337158c57d9edbd6a1bf4b6d47c2f564811d4 Mon Sep 17 00:00:00 2001 From: Florian Bellotti Date: Mon, 6 May 2024 15:27:15 +0200 Subject: [PATCH] :sparkles: Adding vstrk adapter (#17) --- src/adapters.cairo | 1 + src/adapters/vstrk_adapter.cairo | 48 ++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/adapters/vstrk_adapter.cairo diff --git a/src/adapters.cairo b/src/adapters.cairo index 3ecc5f0..936e3e3 100644 --- a/src/adapters.cairo +++ b/src/adapters.cairo @@ -8,6 +8,7 @@ mod nostrav2_adapter; mod sithswap_adapter; mod starkdefi_adapter; mod tenkswap_adapter; +mod vstrk_adapter; use starknet::ContractAddress; diff --git a/src/adapters/vstrk_adapter.cairo b/src/adapters/vstrk_adapter.cairo new file mode 100644 index 0000000..0273c9d --- /dev/null +++ b/src/adapters/vstrk_adapter.cairo @@ -0,0 +1,48 @@ +use starknet::ContractAddress; + +#[starknet::interface] +trait IVstrk { + fn unlock(self: @TContractState, amount: u256); +} +#[starknet::interface] +trait IStrk { + fn lock_and_delegate(self: @TContractState, delegatee: ContractAddress, amount: u256); +} + +#[starknet::contract] +mod VstrkAdapter { + use avnu::adapters::ISwapAdapter; + use super::{IVstrkDispatcher, IVstrkDispatcherTrait, IStrkDispatcher, IStrkDispatcherTrait}; + use starknet::{contract_address_const, ContractAddress}; + + #[storage] + struct Storage {} + + #[external(v0)] + impl VstrkAdapter of ISwapAdapter { + fn swap( + self: @ContractState, + exchange_address: ContractAddress, + token_from_address: ContractAddress, + token_from_amount: u256, + token_to_address: ContractAddress, + token_to_min_amount: u256, + to: ContractAddress, + additional_swap_params: Array, + ) { + assert(additional_swap_params.len() == 0, 'Invalid swap params'); + let STRK_ADDRESS: ContractAddress = + contract_address_const::<0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d>(); + assert( + token_from_address == STRK_ADDRESS || token_to_address == STRK_ADDRESS, + 'Invalid STRK address' + ); + if (token_from_address == STRK_ADDRESS) { + IStrkDispatcher { contract_address: token_from_address } + .lock_and_delegate(to, token_from_amount); + } else { + IVstrkDispatcher { contract_address: token_from_address }.unlock(token_from_amount); + } + } + } +}