diff --git a/HISTORY.md b/HISTORY.md index 86f86f75..64cf8f58 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,5 +1,10 @@ # Release History +## Unreleased + +- fix: coins parsing fix to support ibc denoms +- feat: add support for claiming validator commission + ## 0.9.1 - fix: move googleapis-common-protos to main dependency group to resolve installation issues diff --git a/cosmpy/aerial/client/__init__.py b/cosmpy/aerial/client/__init__.py index 4c6fa1f9..94c4c1a4 100644 --- a/cosmpy/aerial/client/__init__.py +++ b/cosmpy/aerial/client/__init__.py @@ -32,7 +32,10 @@ from google.protobuf.timestamp_pb2 import Timestamp from cosmpy.aerial.client.bank import create_bank_send_msg -from cosmpy.aerial.client.distribution import create_withdraw_delegator_reward +from cosmpy.aerial.client.distribution import ( + create_withdraw_delegator_reward, + create_withdraw_validator_commission, +) from cosmpy.aerial.client.staking import ( ValidatorStatus, create_delegate_msg, @@ -600,6 +603,26 @@ def claim_rewards( self, tx, sender, gas_limit=gas_limit, memo=memo ) + def claim_validator_commission( + self, + sender: Wallet, + memo: Optional[str] = None, + gas_limit: Optional[int] = None, + ) -> SubmittedTx: + """claim validator commission. + + :param sender: sender + :param memo: memo, defaults to None + :param gas_limit: gas limit, defaults to None + :return: prepare and broadcast the transaction and transaction details + """ + tx = Transaction() + tx.add_message(create_withdraw_validator_commission(sender.address())) + + return prepare_and_broadcast_basic_transaction( + self, tx, sender, gas_limit=gas_limit, memo=memo + ) + def estimate_gas_for_tx(self, tx: Transaction) -> int: """Estimate gas for transaction. diff --git a/cosmpy/aerial/client/distribution.py b/cosmpy/aerial/client/distribution.py index 4e6f4f4e..c70d53cf 100644 --- a/cosmpy/aerial/client/distribution.py +++ b/cosmpy/aerial/client/distribution.py @@ -19,7 +19,10 @@ """Distribution.""" from cosmpy.crypto.address import Address -from cosmpy.protos.cosmos.distribution.v1beta1.tx_pb2 import MsgWithdrawDelegatorReward +from cosmpy.protos.cosmos.distribution.v1beta1.tx_pb2 import ( + MsgWithdrawDelegatorReward, + MsgWithdrawValidatorCommission, +) def create_withdraw_delegator_reward(delegator: Address, validator: Address): @@ -33,3 +36,12 @@ def create_withdraw_delegator_reward(delegator: Address, validator: Address): delegator_address=str(delegator), validator_address=str(validator), ) + + +def create_withdraw_validator_commission(validator: Address): + """Create withdraw validator commission. + + :param validator: validator account address "cosmos1..." + :return: withdraw validator commission message + """ + return MsgWithdrawValidatorCommission(validator_address=validator) diff --git a/docs/api/aerial/client/__init__.md b/docs/api/aerial/client/__init__.md index 2cb9aedc..f4e66cc6 100644 --- a/docs/api/aerial/client/__init__.md +++ b/docs/api/aerial/client/__init__.md @@ -457,6 +457,28 @@ claim rewards. prepare and broadcast the transaction and transaction details + + +#### claim`_`validator`_`commission + +```python +def claim_validator_commission(sender: Wallet, + memo: Optional[str] = None, + gas_limit: Optional[int] = None) -> SubmittedTx +``` + +claim rewards. + +**Arguments**: + +- `sender`: sender +- `memo`: memo, defaults to None +- `gas_limit`: gas limit, defaults to None + +**Returns**: + +prepare and broadcast the transaction and transaction details + #### estimate`_`gas`_`for`_`tx diff --git a/examples/aerial_compounder.py b/examples/aerial_compounder.py index 6a604c80..7cc1a577 100644 --- a/examples/aerial_compounder.py +++ b/examples/aerial_compounder.py @@ -91,7 +91,6 @@ def main(): # query, claim and stake rewards after time period while time_check < time_limit: - begin = time.monotonic() summary = ledger.query_staking_summary(alice.address()) @@ -108,7 +107,6 @@ def main(): true_reward = balance_after - balance_before if true_reward > 0: - print(f"Staking {true_reward} (reward after fees)") tx = ledger.delegate_tokens(validator.address, true_reward, alice) diff --git a/examples/aerial_stake_optimizer.py b/examples/aerial_stake_optimizer.py index 2bd0cd7b..ff092145 100644 --- a/examples/aerial_stake_optimizer.py +++ b/examples/aerial_stake_optimizer.py @@ -91,14 +91,12 @@ def main(): stake_threshold = 0.10 for _i in range(len(validators_comission)): - # Choose validator with lower commission validator_index = validators_comission.index(min(validators_comission)) # Verify that it meets the minimum % threshold validator_stake_pct = validators_stake[validator_index] / total_stake if validator_stake_pct >= stake_threshold: - # Set the selected validator validator = validators[validator_index] break diff --git a/examples/aerial_swap_automation.py b/examples/aerial_swap_automation.py index 0953a628..d287636d 100644 --- a/examples/aerial_swap_automation.py +++ b/examples/aerial_swap_automation.py @@ -170,7 +170,6 @@ def main(): interval = args.interval_time while True: - # Query LP status pool = pair_contract.query({"pool": {}}) native_amount = int(pool["assets"][1]["amount"]) diff --git a/examples/aerial_topup.py b/examples/aerial_topup.py index a70d0d50..7b703c9c 100644 --- a/examples/aerial_topup.py +++ b/examples/aerial_topup.py @@ -97,7 +97,6 @@ def main(): interval_time = args.interval_time while True: - wallet_balance = ledger.query_bank_balance(wallet_address) if wallet_balance < amount: @@ -107,7 +106,6 @@ def main(): task_wallet_balance = ledger.query_bank_balance(task_wallet_address) if task_wallet_balance < minimum_balance: - print("topping up task wallet") # Top-up task_wallet msg = any_pb2.Any()