Skip to content

Commit

Permalink
Fix delegator ref when claimReward
Browse files Browse the repository at this point in the history
Signed-off-by: charles2023wood <[email protected]>
  • Loading branch information
charles2022wood committed Jul 15, 2024
1 parent cd9d1a5 commit a03e747
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 21 deletions.
10 changes: 5 additions & 5 deletions contracts/BitcoinLSTStake.sol
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ contract BitcoinLSTStake is IBitcoinStake, System, IParamSubscriber, ReentrancyG
/// Claim reward for delegator
/// @return reward Amount claimed
function claimReward() external override onlyBtcAgent returns (uint256 reward) {
return _updateUserRewards(msg.sender, true);
return _updateUserRewards(tx.origin, true);
}

/*********************** External implementations ***************************/
Expand Down Expand Up @@ -437,12 +437,12 @@ contract BitcoinLSTStake is IBitcoinStake, System, IParamSubscriber, ReentrancyG
user.changeRound = roundTag;
}
if (claim) {
if (rewardMap[msg.sender] != 0) {
reward += rewardMap[msg.sender];
rewardMap[msg.sender] = 0;
if (rewardMap[userAddress] != 0) {
reward += rewardMap[userAddress];
rewardMap[userAddress] = 0;
}
} else {
rewardMap[msg.sender] += reward;
rewardMap[userAddress] += reward;
}
}

Expand Down
7 changes: 4 additions & 3 deletions contracts/BitcoinStake.sol
Original file line number Diff line number Diff line change
Expand Up @@ -236,11 +236,12 @@ contract BitcoinStake is IBitcoinStake, System, IParamSubscriber {
/// Claim reward for delegator
/// @return reward Amount claimed
function claimReward() external override onlyBtcAgent returns (uint256 reward) {
reward = rewardMap[msg.sender];
address delegator = tx.origin;
reward = rewardMap[delegator];
if (reward != 0) {
rewardMap[msg.sender] = 0;
rewardMap[delegator] = 0;
}
bytes32[] storage txids = delegatorMap[msg.sender].txids;
bytes32[] storage txids = delegatorMap[delegator].txids;
for (uint256 i = txids.length; i != 0; i--) {
bytes32 txid = txids[i - 1];
DepositReceipt storage dr = receiptMap[txid];
Expand Down
5 changes: 3 additions & 2 deletions contracts/HashPowerAgent.sol
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,10 @@ contract HashPowerAgent is IAgent, System, IParamSubscriber {
/// Claim reward for delegator
/// @return reward Amount claimed
function claimReward() external override onlyStakeHub returns (uint256) {
uint256 rewardSum = rewardMap[msg.sender];
address delegator = tx.origin;
uint256 rewardSum = rewardMap[delegator];
if (rewardSum != 0) {
rewardMap[msg.sender] = 0;
rewardMap[delegator] = 0;
}
return rewardSum;
}
Expand Down
22 changes: 11 additions & 11 deletions contracts/PledgeAgent.sol
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,6 @@ contract PledgeAgent is IAgent, System, IParamSubscriber {
uint256 deposit = undelegateCoin(candidate, msg.sender, amount, false);
Address.sendValue(payable(msg.sender), deposit);
emit undelegatedCoin(candidate, msg.sender, deposit);
// TODO removeCandidate(msg.sender, address candidate)
}

/// Transfer coin stake to a new validator
Expand Down Expand Up @@ -352,34 +351,35 @@ contract PledgeAgent is IAgent, System, IParamSubscriber {
}

function claimReward() external override onlyStakeHub returns (uint256) {
address delegator = tx.origin;
uint256 reward;
uint256 rewardSum = rewardMap[msg.sender];
uint256 rewardSum = rewardMap[delegator];
if (rewardSum != 0) {
rewardMap[msg.sender] = 0;
rewardMap[delegator] = 0;
}

Delegator storage delegator = delegatorsMap[msg.sender];
uint256 candidateSize = delegator.candidates.length;
address[] storage candidates = delegatorsMap[delegator].candidates;
uint256 candidateSize = candidates.length;
for (uint256 i = candidateSize; i != 0;) {
--i;
Agent storage a = agentsMap[delegator.candidates[i]];
Agent storage a = agentsMap[candidates[i]];
if (a.rewardSet.length == 0) {
continue;
}
CoinDelegator storage d = a.cDelegatorMap[msg.sender];
CoinDelegator storage d = a.cDelegatorMap[delegator];
if (d.newDeposit == 0 && d.transferOutDeposit == 0) {
continue;
}
reward = collectCoinReward(a, d, 0xFFFFFFFF);
rewardSum += reward;
if (d.newDeposit == 0 && d.transferOutDeposit == 0) {
delete a.cDelegatorMap[msg.sender];
removeCandidate(msg.sender, delegator.candidates[i]);
delete a.cDelegatorMap[delegator];
removeCandidate(delegator, candidates[i]);
}
}

if (rewardSum != 0) {
distributeReward(payable(msg.sender), rewardSum);
distributeReward(payable(delegator), rewardSum);
}
return rewardSum;
}
Expand Down Expand Up @@ -469,7 +469,7 @@ contract PledgeAgent is IAgent, System, IParamSubscriber {
/*********************** Internal methods ***************************/
function distributeReward(address payable delegator, uint256 reward) internal {
Address.sendValue(delegator, reward);
emit claimedReward(delegator, msg.sender, reward, true);
emit claimedReward(delegator, tx.origin, reward, true);
}

function delegateCoin(address agent, address delegator, uint256 deposit) internal returns (uint256) {
Expand Down

0 comments on commit a03e747

Please sign in to comment.