@@ -23,6 +23,7 @@ import { ITokenLocking } from "./../tokenLocking/ITokenLocking.sol";
2323import { ColonyStorage } from "./ColonyStorage.sol " ;
2424import { ERC20Extended } from "./../common/ERC20Extended.sol " ;
2525import { IColonyNetwork } from "./../colonyNetwork/IColonyNetwork.sol " ;
26+ import { DomainTokenReceiver } from "./../common/DomainTokenReceiver.sol " ;
2627
2728contract ColonyFunding is
2829 ColonyStorage // ignore -swc -123
@@ -106,6 +107,47 @@ contract ColonyFunding is
106107 emit ColonyFundsClaimed (msgSender (), _token, feeToPay, remainder);
107108 }
108109
110+ function claimDomainFunds (address _token , uint256 _domainId ) public stoppable {
111+ require (domainExists (_domainId), "colony-funding-domain-does-not-exist " );
112+ address domainTokenReceiverAddress = IColonyNetwork (colonyNetworkAddress)
113+ .checkDomainTokenReceiverDeployed (_domainId);
114+ uint256 fundingPotId = domains[_domainId].fundingPotId;
115+ // It's deployed, so check current balance of pot
116+ uint256 balanceBefore = getFundingPotBalance (fundingPotId, _token);
117+
118+ uint256 claimAmount;
119+ uint256 thisBalanceBefore;
120+
121+ if (_token == address (0x0 )) {
122+ claimAmount = address (domainTokenReceiverAddress).balance;
123+ thisBalanceBefore = address (this ).balance;
124+ } else {
125+ claimAmount = ERC20Extended (_token).balanceOf (address (domainTokenReceiverAddress));
126+ thisBalanceBefore = ERC20Extended (_token).balanceOf (address (this ));
127+ }
128+
129+ fundingPots[fundingPotId].balance[_token] += claimAmount;
130+
131+ // Claim funds
132+
133+ DomainTokenReceiver (domainTokenReceiverAddress).transferToColony (_token);
134+
135+ // Add to funding pot
136+
137+ uint256 balanceAfter = getFundingPotBalance (fundingPotId, _token);
138+
139+ assert (balanceAfter - balanceBefore == claimAmount);
140+
141+ uint256 thisBalanceAfter;
142+ if (_token == address (0x0 )) {
143+ thisBalanceAfter = address (this ).balance;
144+ } else {
145+ thisBalanceAfter = ERC20Extended (_token).balanceOf (address (this ));
146+ }
147+
148+ assert (thisBalanceAfter - thisBalanceBefore == claimAmount);
149+ }
150+
109151 function getNonRewardPotsTotal (address _token ) public view returns (uint256 ) {
110152 return nonRewardPotsTotal[_token];
111153 }
0 commit comments