Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 6 additions & 7 deletions contracts/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#![no_std]
use soroban_sdk::{contract, contractimpl, Address, Env, Map};
use soroban_sdk::{contract, contractimpl, token, Address, Env, Map};

mod portfolio;
mod reflector;
Expand Down Expand Up @@ -93,13 +93,12 @@ impl PortfolioRebalancer {

portfolio.user.require_auth();

// Verify asset is in portfolio (optional based on requirements, but good practice)
if !portfolio.target_allocations.contains_key(asset.clone()) {
// For now, allow depositing any asset, as users might deposit first then rebalance
// or maybe we should restrict? The issue says "valid and invalid inputs".
// Let's assume valid input means positive amount and valid asset.
}

// Transfer real tokens from caller to contract via Soroban token interface.
// Must happen before balance update - if transfer fails, transaction reverts.
let contract_address = env.current_contract_address();
let token_client = token::Client::new(&env, &asset);
token_client.transfer(&portfolio.user, &contract_address, &amount);
let current_balance = portfolio.current_balances.get(asset.clone()).unwrap_or(0);
portfolio.current_balances.set(asset.clone(), current_balance + amount);

Expand Down