Skip to content

Commit 1f331f1

Browse files
nuevoalexnuevoalex
authored andcommitted
claim proceeds takes a shareholder argument instead of using the msg.sender
1 parent c39aec5 commit 1f331f1

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

source/contracts/trading/ClaimTradingProceeds.sol

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import 'libraries/Extractable.sol';
2222
contract ClaimTradingProceeds is CashAutoConverter, Extractable, ReentrancyGuard, MarketValidator, IClaimTradingProceeds {
2323
using SafeMathUint256 for uint256;
2424

25-
function claimTradingProceeds(IMarket _market) marketIsLegit(_market) convertToAndFromCash onlyInGoodTimes nonReentrant external returns(bool) {
25+
function claimTradingProceeds(IMarket _market, address _shareHolder) marketIsLegit(_market) onlyInGoodTimes nonReentrant external returns(bool) {
2626
if (!_market.isFinalized()) {
2727
_market.finalize();
2828
}
@@ -33,7 +33,7 @@ contract ClaimTradingProceeds is CashAutoConverter, Extractable, ReentrancyGuard
3333

3434
for (uint8 _outcome = 0; _outcome < _market.getNumberOfOutcomes(); ++_outcome) {
3535
IShareToken _shareToken = _market.getShareToken(_outcome);
36-
uint256 _numberOfShares = _shareToken.balanceOf(msg.sender);
36+
uint256 _numberOfShares = _shareToken.balanceOf(_shareHolder);
3737
var (_proceeds, _shareHolderShare, _creatorShare, _reporterShare) = divideUpWinnings(_market, _outcome, _numberOfShares);
3838

3939
if (_proceeds > 0) {
@@ -42,11 +42,12 @@ contract ClaimTradingProceeds is CashAutoConverter, Extractable, ReentrancyGuard
4242

4343
// always destroy shares as it gives a minor gas refund and is good for the network
4444
if (_numberOfShares > 0) {
45-
_shareToken.destroyShares(msg.sender, _numberOfShares);
46-
logTradingProceedsClaimed(_market, _shareToken, msg.sender, _numberOfShares, _shareHolderShare);
45+
_shareToken.destroyShares(_shareHolder, _numberOfShares);
46+
logTradingProceedsClaimed(_market, _shareToken, _shareHolder, _numberOfShares, _shareHolderShare);
4747
}
4848
if (_shareHolderShare > 0) {
49-
require(_denominationToken.transferFrom(_market, msg.sender, _shareHolderShare));
49+
require(_denominationToken.transferFrom(_market, this, _shareHolderShare));
50+
_denominationToken.withdrawEtherTo(_shareHolder, _shareHolderShare);
5051
}
5152
if (_creatorShare > 0) {
5253
require(_denominationToken.transferFrom(_market, _market.getMarketCreatorMailbox(), _creatorShare));

tests/test_gas_costs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def test_winningShareRedmption(localFixture, cash, market):
8686
finalizeMarket(localFixture, market, [0,market.getNumTicks()])
8787

8888
with PrintGasUsed(localFixture, "ClaimTradingProceeds:claimTradingProceeds", CLAIM_PROCEEDS):
89-
claimTradingProceeds.claimTradingProceeds(market.address, sender = tester.k1)
89+
claimTradingProceeds.claimTradingProceeds(market.address, tester.a1)
9090

9191
def test_initial_report(localFixture, universe, cash, market):
9292
proceedToDesignatedReporting(localFixture, market)

tests/trading/test_claimTradingProceeds.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,10 @@ def test_redeem_shares_in_binary_market(kitchenSinkFixture, universe, cash, mark
100100
with TokenDelta(cash, expectedReporterFees, universe.getOrCreateNextFeeWindow(), "Reporter fees not paid"):
101101
# redeem shares with a1
102102
initialLongHolderETH = kitchenSinkFixture.chain.head_state.get_balance(tester.a1)
103-
claimTradingProceeds.claimTradingProceeds(market.address, sender = tester.k1)
103+
claimTradingProceeds.claimTradingProceeds(market.address, tester.a1)
104104
# redeem shares with a2
105105
initialShortHolderETH = kitchenSinkFixture.chain.head_state.get_balance(tester.a2)
106-
claimTradingProceeds.claimTradingProceeds(market.address, sender = tester.k2)
106+
claimTradingProceeds.claimTradingProceeds(market.address, tester.a2)
107107

108108
# Confirm claim proceeds logging works correctly
109109
assert len(logs) == 6
@@ -146,10 +146,10 @@ def test_redeem_shares_in_categorical_market(kitchenSinkFixture, universe, cash,
146146

147147
# redeem shares with a1
148148
initialLongHolderETH = kitchenSinkFixture.chain.head_state.get_balance(tester.a1)
149-
claimTradingProceeds.claimTradingProceeds(market.address, sender = tester.k1)
149+
claimTradingProceeds.claimTradingProceeds(market.address, tester.a1)
150150
# redeem shares with a2
151151
initialShortHolderETH = kitchenSinkFixture.chain.head_state.get_balance(tester.a2)
152-
claimTradingProceeds.claimTradingProceeds(market.address, sender = tester.k2)
152+
claimTradingProceeds.claimTradingProceeds(market.address, tester.a2)
153153

154154
# assert a1 ends up with cash (minus fees) and a2 does not
155155
assert kitchenSinkFixture.chain.head_state.get_balance(tester.a1) == initialLongHolderETH + expectedPayout + 1 # rounding errors from fees
@@ -183,10 +183,10 @@ def test_redeem_shares_in_scalar_market(kitchenSinkFixture, universe, cash, scal
183183

184184
# redeem shares with a1
185185
initialLongHolderETH = kitchenSinkFixture.chain.head_state.get_balance(tester.a1)
186-
claimTradingProceeds.claimTradingProceeds(market.address, sender = tester.k1)
186+
claimTradingProceeds.claimTradingProceeds(market.address, tester.a1)
187187
# redeem shares with a2
188188
initialShortHolderETH = kitchenSinkFixture.chain.head_state.get_balance(tester.a2)
189-
claimTradingProceeds.claimTradingProceeds(market.address, sender = tester.k2)
189+
claimTradingProceeds.claimTradingProceeds(market.address, tester.a2)
190190

191191
# assert a1 ends up with cash (minus fees) and a2 does not
192192
assert kitchenSinkFixture.chain.head_state.get_balance(tester.a1) == initialLongHolderETH + expectedPayout * 3 / 4
@@ -214,14 +214,14 @@ def test_reedem_failure(kitchenSinkFixture, cash, market):
214214

215215
# market not finalized
216216
with raises(TransactionFailed):
217-
claimTradingProceeds.claimTradingProceeds(market.address, sender = tester.k1)
217+
claimTradingProceeds.claimTradingProceeds(market.address, tester.a1)
218218
# finalize the market
219219
assert market.finalize()
220220
# waiting period not over
221221
with raises(TransactionFailed):
222-
claimTradingProceeds.claimTradingProceeds(market.address, sender = tester.k1)
222+
claimTradingProceeds.claimTradingProceeds(market.address, tester.a1)
223223

224224
# set timestamp to 3 days later (waiting period)
225225
kitchenSinkFixture.contracts["Time"].incrementTimestamp(long(timedelta(days = 3, seconds = 1).total_seconds()))
226226
# validate that everything else is OK
227-
assert claimTradingProceeds.claimTradingProceeds(market.address, sender = tester.k1)
227+
assert claimTradingProceeds.claimTradingProceeds(market.address, tester.a1)

0 commit comments

Comments
 (0)