diff --git a/app/actions/AssetActions.js b/app/actions/AssetActions.js index 704840c214..4e7df3cebb 100644 --- a/app/actions/AssetActions.js +++ b/app/actions/AssetActions.js @@ -203,6 +203,35 @@ class AssetActions { }; } + claimCollateralFees(account_id, asset, backingAsset, claimFeesAmountAsset) { + let tr = WalletApi.new_transaction(); + + tr.add_type_operation("asset_claim_fees", { + fee: { + amount: 0, + asset_id: 0 + }, + issuer: account_id, + amount_to_claim: { + asset_id: backingAsset.asset_id, + amount: claimFeesAmountAsset.getAmount() + }, + extensions: { + claim_from_asset_id: asset.get("id") + } + }); + return dispatch => { + return WalletDb.process_transaction(tr, null, true) + .then(() => { + dispatch(true); + }) + .catch(error => { + console.log("----- claimFees error ----->", error); + dispatch(false); + }); + }; + } + assetGlobalSettle(asset, account_id, price) { let tr = WalletApi.new_transaction(); diff --git a/app/components/Account/FeePoolOperation.jsx b/app/components/Account/FeePoolOperation.jsx index 943333529a..40fc159aa3 100644 --- a/app/components/Account/FeePoolOperation.jsx +++ b/app/components/Account/FeePoolOperation.jsx @@ -34,6 +34,13 @@ class FeePoolOperation extends React.Component { [key]: amount }); } + + onClaimCollateralInput(key, {amount}) { + this.state[key + "Asset"].setAmount({real: amount}); + this.setState({ + [key]: amount + }); + } onFundPool = () => AssetActions.fundPool( @@ -68,9 +75,36 @@ class FeePoolOperation extends React.Component { amount: 0, precision: this.props.asset.get("precision"), asset_id: this.props.asset.get("id") + }), + claimCollateralFeesAmount: 0, + claimCollateralFeesAmountAsset: new Asset({ + amount: 0, + precision: this.props.asset.get("precision"), + asset_id: this.props.asset.get("id") + }), + backingAsset: new Asset({ + amount: 0, + asset_id: this.props.asset.has("bitasset") + ? this.props.asset.getIn([ + "bitasset", + "options", + "short_backing_asset" + ]) + : "1.3.0" }) }); - + + onClaimCollateralFees() { + let account = ChainStore.getAccount(this.props.funderAccountName); + if (!account) return; + AssetActions.claimCollateralFees( + account.get("id"), + this.props.asset, + this.state.backingAsset, + this.state.claimCollateralFeesAmountAsset + ); + } + onClaimFees() { let account = ChainStore.getAccount(this.props.funderAccountName); if (!account) return; @@ -333,6 +367,101 @@ class FeePoolOperation extends React.Component { ); } + renderClaimCollateralFees() { + const {props} = this; + const {claimCollateralFeesAmount} = this.state; + const {asset, getDynamicObject} = props; + let dynamicObject = getDynamicObject( + asset.get("dynamic_asset_data_id") + ); + console.log(dynamicObject); + let backingAsset = this.props.asset.has("bitasset") + ? this.props.asset.getIn([ + "bitasset", + "options", + "short_backing_asset" + ]) + : "1.3.0"; + let unclaimedCollateralBalance = dynamicObject + ? dynamicObject.get("accumulated_collateral_fees") + : 0; + let validClaim = + claimCollateralFeesAmount > 0 && + this.state.claimCollateralFeesAmountAsset.getAmount() <= unclaimedCollateralBalance; + + let unclaimedCollateralBalanceText = ( + { + this.state.claimCollateralFeesAmountAsset.setAmount({ + sats: dynamicObject.get("accumulated_collateral_fees") + }); + this.setState({ + claimCollateralFeesAmount: this.state.claimCollateralFeesAmountAsset.getAmount( + { + real: true + } + ) + }); + }} + > + + :  + + + ); + return ( +
+ +
+ + :  + {dynamicObject ? ( + + ) : null} +
+ + + +
+ + +
+
+ ); + } + render() { if (this.props.type === "fund") { return this.renderFundPool(); @@ -340,7 +469,9 @@ class FeePoolOperation extends React.Component { return this.renderClaimPool(); } else if (this.props.type === "claim_fees") { return this.renderClaimFees(); - } + } else if (this.props.type === "claim_collateral_fees") { + return this.renderClaimCollateralFees(); + } } } diff --git a/app/components/Blockchain/Asset.jsx b/app/components/Blockchain/Asset.jsx index 98362f343b..c23353386e 100644 --- a/app/components/Blockchain/Asset.jsx +++ b/app/components/Blockchain/Asset.jsx @@ -1436,7 +1436,25 @@ class Asset extends React.Component { ); } - + renderFeesCollateralClaiming(asset) { + let dynamic = this.props.getDynamicObject(asset.dynamic_asset_data_id); + if (dynamic) dynamic = dynamic.toJS(); + return ( + + } + > + + + ); + } // TODO: Blacklist Authorities: // TODO: Blacklist Market: Base/Market, Base/Market renderPermissions(asset) { @@ -2368,6 +2386,7 @@ class Asset extends React.Component { {this.renderFeePoolFunding(asset)} {this.renderFeePoolClaiming(asset)} {this.renderFeesClaiming(asset)} + {this.renderFeesCollateralClaiming(asset)} {this.renderAssetOwnerUpdate(asset)} {"bitasset" in asset && !asset.bitasset.is_prediction_market &&