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
31 changes: 28 additions & 3 deletions staking-cli/src/claim.rs
Original file line number Diff line number Diff line change
Expand Up @@ -139,15 +139,40 @@ pub async fn claim_reward(
.await?
.context("No reward claim data found for address")?;

let reward_claim = RewardClaim::new(data.reward_claim_address, provider);
reward_claim
let reward_claim = RewardClaim::new(data.reward_claim_address, &provider);
let result = reward_claim
.claimRewards(
data.claim_input.lifetime_rewards,
data.claim_input.auth_data.into(),
)
.send()
.await
.maybe_decode_revert::<RewardClaimErrors>()
.maybe_decode_revert::<RewardClaimErrors>();

// If the claim failed with AlreadyClaimed, include the current balance for context
if let Err(ref err) = result {
let err_str = err.to_string();
if err_str.contains("AlreadyClaimed") {
let already_claimed = reward_claim
.claimedRewards(claimer_address)
.call()
.await
.unwrap_or(U256::ZERO);
let unclaimed = data
.claim_input
.lifetime_rewards
.checked_sub(already_claimed)
.unwrap_or(U256::ZERO);
bail!(
"Rewards already claimed. Current unclaimed balance: {} (lifetime: {}, claimed: {})",
unclaimed,
data.claim_input.lifetime_rewards,
already_claimed
);
}
}

result
}

pub async fn unclaimed_rewards(
Expand Down