Skip to content

Commit

Permalink
Android reward cal to correct, Inflation, yield
Browse files Browse the repository at this point in the history
  • Loading branch information
HeartBreaker committed May 30, 2019
1 parent 5c3d009 commit a846d59
Show file tree
Hide file tree
Showing 13 changed files with 306 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,17 @@
import wannabit.io.cosmostaion.model.type.Validator;
import wannabit.io.cosmostaion.network.ApiClient;
import wannabit.io.cosmostaion.network.res.ResAtomTic;
import wannabit.io.cosmostaion.network.res.ResStakingPool;
import wannabit.io.cosmostaion.task.FetchTask.AccountInfoTask;
import wannabit.io.cosmostaion.task.FetchTask.AllValidatorInfoTask;
import wannabit.io.cosmostaion.task.FetchTask.BondingStateTask;
import wannabit.io.cosmostaion.task.FetchTask.UnBondingStateTask;
import wannabit.io.cosmostaion.task.FetchTask.UnbondedValidatorInfoTask;
import wannabit.io.cosmostaion.task.FetchTask.UnbondingValidatorInfoTask;
import wannabit.io.cosmostaion.task.SingleFetchTask.SingleInflationTask;
import wannabit.io.cosmostaion.task.SingleFetchTask.SingleProvisionsTask;
import wannabit.io.cosmostaion.task.SingleFetchTask.SingleRewardTask;
import wannabit.io.cosmostaion.task.SingleFetchTask.SingleStakingPoolTask;
import wannabit.io.cosmostaion.task.TaskListener;
import wannabit.io.cosmostaion.task.TaskResult;
import wannabit.io.cosmostaion.utils.WDp;
Expand Down Expand Up @@ -107,6 +111,10 @@ public class MainActivity extends BaseActivity implements TaskListener {
public ArrayList<BondingState> mBondings = new ArrayList<>();
public ArrayList<UnBondingState> mUnbondings = new ArrayList<>();
public ArrayList<Reward> mRewards = new ArrayList<>();
public BigDecimal mInflation = BigDecimal.ZERO;
public BigDecimal mProvisions = BigDecimal.ZERO;
public BigDecimal mBondedToken = BigDecimal.ZERO;


private int mTaskCount;
private TopSheetBehavior mTopSheetBehavior;
Expand Down Expand Up @@ -516,7 +524,29 @@ public void onTaskResponse(TaskResult result) {
Reward reward = (Reward)result.resultData;
if(reward != null)
onUpdateReward(reward);

} else if (result.taskType == BaseConstant.TASK_FETCH_INFLATION) {
try {
mInflation = new BigDecimal((String)result.resultData);
} catch (Exception e) {}
WLog.w("mInflation " + mInflation.toPlainString());

} else if (result.taskType == BaseConstant.TASK_FETCH_PROVISIONS) {
try {
mProvisions = new BigDecimal((String)result.resultData);
} catch (Exception e) {}
WLog.w("mProvisions " + mProvisions.toPlainString());

} else if (result.taskType == BaseConstant.TASK_FETCH_STAKING_POOL) {
try {
mBondedToken = new BigDecimal(((ResStakingPool)result.resultData).bonded_tokens);
} catch (Exception e) {}
WLog.w("mBondedToken " + mBondedToken.toPlainString());

}



if(mTaskCount == 0) {
mMyValidators.clear();
for(Validator top:mTopValidators) {
Expand Down Expand Up @@ -744,7 +774,7 @@ public AccountAddHolder(@NonNull View itemView) {

public boolean onFetchAccountInfo() {
if(mTaskCount > 0) return false;
mTaskCount = 6;
mTaskCount = 9;
ArrayList<Account> accounts = new ArrayList<Account>();
accounts.add(mAccount);
mOtherValidators.clear();
Expand All @@ -755,6 +785,9 @@ public boolean onFetchAccountInfo() {
new AccountInfoTask(getBaseApplication(), this, accounts).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new BondingStateTask(getBaseApplication(), this, accounts).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new UnBondingStateTask(getBaseApplication(), this, accounts).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new SingleInflationTask(getBaseApplication(), this, BaseChain.getChain(mAccount.baseChain)).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new SingleProvisionsTask(getBaseApplication(), this, BaseChain.getChain(mAccount.baseChain)).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new SingleStakingPoolTask(getBaseApplication(), this, BaseChain.getChain(mAccount.baseChain)).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

onAtomTic();
return true;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package wannabit.io.cosmostaion.base;

public class BaseConstant {
public final static boolean IS_SHOWLOG = false;
public final static boolean IS_SHOWLOG = true;
public final static boolean IS_TEST = false;
public final static boolean IS_FEE_FREE = false;
public final static String LOG_TAG = "Cosmostation";
Expand Down Expand Up @@ -66,6 +66,9 @@ public class BaseConstant {
public final static int TASK_FETCH_SINGLE_ALL_REDELEGATE = 2030;
public final static int TASK_GEN_TX_SIMPLE_REDELEGATE = 2031;
public final static int TASK_GEN_TX_SIMPLE_REWARD_ADDRESS_CHANGE = 2032;
public final static int TASK_FETCH_INFLATION = 2033;
public final static int TASK_FETCH_PROVISIONS = 2034;
public final static int TASK_FETCH_STAKING_POOL = 2035;

// public final static int TASK_INSERT_RAW_KEY = 2004;
// public final static int TASK_INSERT_GENERATE_WITH_MNEMONIC = 2005;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package wannabit.io.cosmostaion.dao;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;

import wannabit.io.cosmostaion.base.BaseConstant;
Expand All @@ -26,7 +27,7 @@ public BigDecimal getAtomAmount() {
BigDecimal result = BigDecimal.ZERO;
for(Coin coin:amount) {
if(coin.denom.equals(BaseConstant.COSMOS_ATOM)|| coin.denom.equals(BaseConstant.COSMOS_MUON)) {
result = new BigDecimal(coin.amount);
result = new BigDecimal(coin.amount).setScale(0, RoundingMode.DOWN);
break;
}
}
Expand All @@ -37,7 +38,7 @@ public BigDecimal getPhotonAmount() {
BigDecimal result = BigDecimal.ZERO;
for(Coin coin:amount) {
if(coin.denom.equals(BaseConstant.COSMOS_PHOTON) || coin.denom.equals(BaseConstant.COSMOS_PHOTINO)) {
result = new BigDecimal(coin.amount);
result = new BigDecimal(coin.amount).setScale(0, RoundingMode.DOWN);
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ public class MainSendFragment extends BaseFragment implements View.OnClickListen
private TextView mAtomPerPrice, mAtomUpDownPrice;
private ImageView matomUpDownImg;

private TextView mAtomInflation, mAtomYield;

private Button mGuideBtn, mFaqBtn;


Expand Down Expand Up @@ -103,6 +105,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
mAtomPerPrice = rootView.findViewById(R.id.dash_atom_per_price);
mAtomUpDownPrice = rootView.findViewById(R.id.dash_atom_price_updown_tx);
matomUpDownImg = rootView.findViewById(R.id.ic_price_updown);
mAtomInflation = rootView.findViewById(R.id.dash_atom_inflation);
mAtomYield = rootView.findViewById(R.id.dash_atom_yield);


mGuideBtn = rootView.findViewById(R.id.btn_guide);
Expand Down Expand Up @@ -181,7 +185,7 @@ private void onUpdateView() {
mKeyState.setImageDrawable(getResources().getDrawable(R.drawable.key_off));
}

mTvAtomTotal.setText(WDp.getDpAllAtom(getContext(), getMainActivity().mBalances, getMainActivity().mBondings, getMainActivity().mUnbondings, getMainActivity().mRewards, getMainActivity().mTopValidators, BaseChain.getChain(getMainActivity().mAccount.baseChain)));
mTvAtomTotal.setText(WDp.getDpAllAtom(getContext(), getMainActivity().mBalances, getMainActivity().mBondings, getMainActivity().mUnbondings, getMainActivity().mRewards, getMainActivity().mAllValidators, BaseChain.getChain(getMainActivity().mAccount.baseChain)));
mTvAtomUndelegated.setText(WDp.getDpAtomBalance(getContext(), getMainActivity().mBalances, BaseChain.getChain(getMainActivity().mAccount.baseChain)));
mTvAtomDelegated.setText(WDp.getDpAllDelegatedAmount(getContext(), getMainActivity().mBondings, getMainActivity().mAllValidators, BaseChain.getChain(getMainActivity().mAccount.baseChain)));
mTvAtomUnBonding.setText(WDp.getDpAllUnbondingAmount(getContext(), getMainActivity().mUnbondings, getMainActivity().mAllValidators, BaseChain.getChain(getMainActivity().mAccount.baseChain)));
Expand Down Expand Up @@ -212,6 +216,10 @@ private void onUpdateView() {
}


mAtomInflation.setText("" + getMainActivity().mInflation.multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN) + "%");
mAtomYield.setText("" + WDp.getYield(getMainActivity().mBondedToken, getMainActivity().mProvisions, BigDecimal.ZERO));


} catch (Exception e) {
mAtomPrice.setText("???");
mAtomPerPrice.setText("???");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import wannabit.io.cosmostaion.network.res.ResLcdRedelegate;
import wannabit.io.cosmostaion.network.res.ResLcdUnBondings;
import wannabit.io.cosmostaion.network.res.ResStakeTxInfo;
import wannabit.io.cosmostaion.network.res.ResStakingPool;
import wannabit.io.cosmostaion.network.res.ResTxInfo;

public interface WannabitChain {
Expand Down Expand Up @@ -85,6 +86,16 @@ public interface WannabitChain {
Call<ArrayList<ResLcdRedelegate>> getRedelegateHistory(@Query("delegator") String delegator, @Query("validator_to") String validator_to);



@GET("/minting/inflation")
Call<String> getInflation();

@GET("/minting/annual-provisions")
Call<String> getProvisions();

@GET("/staking/pool")
Call<ResStakingPool> getStakingPool();

//Proposals
@GET("/gov/proposals")
Call<ArrayList<Proposal>> getProposalList();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package wannabit.io.cosmostaion.network.res;

import com.google.gson.annotations.SerializedName;

public class ResStakingPool {

@SerializedName("not_bonded_tokens")
public String not_bonded_tokens;

@SerializedName("bonded_tokens")
public String bonded_tokens;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package wannabit.io.cosmostaion.task.SingleFetchTask;

import retrofit2.Response;
import wannabit.io.cosmostaion.base.BaseApplication;
import wannabit.io.cosmostaion.base.BaseChain;
import wannabit.io.cosmostaion.base.BaseConstant;
import wannabit.io.cosmostaion.network.ApiClient;
import wannabit.io.cosmostaion.task.CommonTask;
import wannabit.io.cosmostaion.task.TaskListener;
import wannabit.io.cosmostaion.task.TaskResult;
import wannabit.io.cosmostaion.utils.WLog;

public class SingleInflationTask extends CommonTask {
private BaseChain mChain;

public SingleInflationTask(BaseApplication app, TaskListener listener, BaseChain chain) {
super(app, listener);
this.mResult.taskType = BaseConstant.TASK_FETCH_INFLATION;
this.mChain = chain;
}

@Override
protected TaskResult doInBackground(String... strings) {
try {
Response<String> response = ApiClient.getWannabitChain(mApp, mChain).getInflation().execute();
if(!response.isSuccessful()) {
mResult.isSuccess = false;
mResult.errorCode = BaseConstant.ERROR_CODE_NETWORK;
return mResult;
}

if(response.body() != null) {
mResult.resultData = response.body();
mResult.isSuccess = true;
}


} catch (Exception e) {
WLog.w("SingleInflationTask Error " + e.getMessage());
}

return mResult;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package wannabit.io.cosmostaion.task.SingleFetchTask;

import retrofit2.Response;
import wannabit.io.cosmostaion.base.BaseApplication;
import wannabit.io.cosmostaion.base.BaseChain;
import wannabit.io.cosmostaion.base.BaseConstant;
import wannabit.io.cosmostaion.network.ApiClient;
import wannabit.io.cosmostaion.task.CommonTask;
import wannabit.io.cosmostaion.task.TaskListener;
import wannabit.io.cosmostaion.task.TaskResult;
import wannabit.io.cosmostaion.utils.WLog;

public class SingleProvisionsTask extends CommonTask {
private BaseChain mChain;

public SingleProvisionsTask(BaseApplication app, TaskListener listener, BaseChain chain) {
super(app, listener);
this.mResult.taskType = BaseConstant.TASK_FETCH_PROVISIONS;
this.mChain = chain;
}

@Override
protected TaskResult doInBackground(String... strings) {
try {
Response<String> response = ApiClient.getWannabitChain(mApp, mChain).getProvisions().execute();
if(!response.isSuccessful()) {
mResult.isSuccess = false;
mResult.errorCode = BaseConstant.ERROR_CODE_NETWORK;
return mResult;
}

if(response.body() != null) {
mResult.resultData = response.body();
mResult.isSuccess = true;
}


} catch (Exception e) {
WLog.w("SingleProvisionsTask Error " + e.getMessage());
}

return mResult;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package wannabit.io.cosmostaion.task.SingleFetchTask;

import retrofit2.Response;
import wannabit.io.cosmostaion.base.BaseApplication;
import wannabit.io.cosmostaion.base.BaseChain;
import wannabit.io.cosmostaion.base.BaseConstant;
import wannabit.io.cosmostaion.network.ApiClient;
import wannabit.io.cosmostaion.network.res.ResStakingPool;
import wannabit.io.cosmostaion.task.CommonTask;
import wannabit.io.cosmostaion.task.TaskListener;
import wannabit.io.cosmostaion.task.TaskResult;
import wannabit.io.cosmostaion.utils.WLog;

public class SingleStakingPoolTask extends CommonTask {
private BaseChain mChain;

public SingleStakingPoolTask(BaseApplication app, TaskListener listener, BaseChain chain) {
super(app, listener);
this.mResult.taskType = BaseConstant.TASK_FETCH_STAKING_POOL;
this.mChain = chain;
}

@Override
protected TaskResult doInBackground(String... strings) {
try {
Response<ResStakingPool> response = ApiClient.getWannabitChain(mApp, mChain).getStakingPool().execute();
if(!response.isSuccessful()) {
mResult.isSuccess = false;
mResult.errorCode = BaseConstant.ERROR_CODE_NETWORK;
return mResult;
}

if(response.body() != null) {
mResult.resultData = response.body();
mResult.isSuccess = true;
}


} catch (Exception e) {
WLog.w("AllValidatorInfo Error " + e.getMessage());
}

return mResult;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,20 @@ public static BigDecimal getValidatorReward(ArrayList<Reward> rewards, String va
return result;
}

public static BigDecimal getYield(BigDecimal bonded, BigDecimal provision, BigDecimal commission) {
BigDecimal result = BigDecimal.ZERO;
try {
WLog.w("A " + provision.toPlainString());
// WLog.w("A " + provision.divide(bonded).toPlainString());
// WLog.w("A " + provision.divide(bonded).multiply(BigDecimal.ONE.subtract(commission)).toPlainString());
// WLog.w("B " + provision.divide(bonded).multiply(BigDecimal.ONE.subtract(commission)).multiply(new BigDecimal("100")).toPlainString());
// WLog.w("C " + provision.divide(bonded).multiply(BigDecimal.ONE.subtract(commission)).multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN));
result = provision.multiply(BigDecimal.ONE.subtract(commission)).multiply(new BigDecimal("100")).divide(bonded, 2, RoundingMode.DOWN);

}catch (Exception e) {}
return result;
}


public static SpannableString getDpAtomBalance(Context c, ArrayList<Balance> balances, BaseChain chain) {
BigDecimal sum = BigDecimal.ZERO;
Expand Down
Loading

0 comments on commit a846d59

Please sign in to comment.