From 9814c65f596d5a8cfe40d76584d36b6004f4d2b6 Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Sat, 17 Dec 2022 01:00:17 -0800 Subject: [PATCH] claiming test with new amino encoder --- packages/test/package.json | 2 + packages/test/src/test-claim.ts | 118 ++++++++++++++++++++++++++++++++ yarn.lock | 18 +++++ 3 files changed, 138 insertions(+) create mode 100644 packages/test/src/test-claim.ts diff --git a/packages/test/package.json b/packages/test/package.json index 1cf5cb3131..9f5e761214 100644 --- a/packages/test/package.json +++ b/packages/test/package.json @@ -23,6 +23,7 @@ "test:lcd": "cross-env NODE_ENV=development babel-node src/test-lcd --extensions \".tsx,.ts,.js\"", "test:lcd-balance": "cross-env NODE_ENV=development babel-node src/test-lcd-balance --extensions \".tsx,.ts,.js\"", "test:lcd-client": "cross-env NODE_ENV=development babel-node src/test-lcd-client --extensions \".tsx,.ts,.js\"", + "test:claim": "cross-env NODE_ENV=development babel-node src/test-claim --extensions \".tsx,.ts,.js\"", "test:swap": "cross-env NODE_ENV=development babel-node src/test-swap --extensions \".tsx,.ts,.js\"", "test:join": "cross-env NODE_ENV=development babel-node src/test-join --extensions \".tsx,.ts,.js\"", "test:lock": "cross-env NODE_ENV=development babel-node src/test-lock --extensions \".tsx,.ts,.js\"", @@ -93,6 +94,7 @@ "@cosmjs/stargate": "0.29.3", "@cosmjs/tendermint-rpc": "^0.29.3", "@cosmology/core": "1.16.0", + "@keplr-wallet/unit": "0.11.25", "@osmonauts/lcd": "^0.8.0", "@tanstack/react-query": "4.16.1", "cosmjs-utils": "0.1.0", diff --git a/packages/test/src/test-claim.ts b/packages/test/src/test-claim.ts new file mode 100644 index 0000000000..8ee31841ea --- /dev/null +++ b/packages/test/src/test-claim.ts @@ -0,0 +1,118 @@ +import { + baseUnitsToDisplayUnitsByDenom, + gasEstimation, +} from '@cosmology/core'; +import { + decodeCosmosSdkDecFromProto, + assertIsDeliverTxSuccess +} from '@cosmjs/stargate'; +import { Dec } from '@keplr-wallet/unit'; + +import { cosmos, getSigningCosmosClient } from './codegen'; +import { getOfflineSignerAmino } from 'cosmjs-utils'; + +const RPC_ENDPOINT = 'https://rpc.cosmos.directory/osmosis' + +const main = async () => { + + const { + withdrawDelegatorReward + } = cosmos.distribution.v1beta1.MessageComposer.fromPartial; + + const signer = await getOfflineSignerAmino({ + mnemonic: process.env.MNEMONIC, + chain: { + bech32_prefix: 'osmo', + slip44: 118 + } + }); + + const client = await cosmos.ClientFactory.createRPCQueryClient({ rpcEndpoint: RPC_ENDPOINT }); + + const [mainAccount] = await signer.getAccounts(); + + const { address } = mainAccount; + + const delegations = await client.cosmos.staking.v1beta1.delegatorDelegations({ + delegatorAddr: address + }); + + if (!delegations.delegationResponses || !delegations.delegationResponses.length) { + console.log('no delegations. Exiting.'); + return; + } + + const messagesToClaim = []; + let totalClaimable = new Dec(0); + + const rewards = await client.cosmos.distribution.v1beta1.delegationTotalRewards({ + delegatorAddress: address + }); + + if (rewards && rewards.rewards && rewards.rewards.length) { + rewards.rewards.forEach((data) => { + const { validatorAddress, reward } = data; + if (reward && reward.length) { + const rewardWeWant = reward.find((r) => r.denom === 'uosmo'); + if (!rewardWeWant) return; + // https://github.com/osmosis-labs/telescope/issues/247 + totalClaimable = totalClaimable.add(new Dec(decodeCosmosSdkDecFromProto(rewardWeWant.amount).toString())); + messagesToClaim.push( + withdrawDelegatorReward({ + delegatorAddress: address, + validatorAddress + }) + ); + } + }); + } + + if (!messagesToClaim.length) { + console.log('no rewards. Exiting.'); + return; + } + + const stargateClient = await getSigningCosmosClient({ + rpcEndpoint: RPC_ENDPOINT, + signer + }); + + const fee = await gasEstimation( + 'uosmo', + // @ts-ignore + stargateClient, + address, + messagesToClaim, + '', + 1.3 + ); + + const totalClaimableInDisplayUnits = new Dec(baseUnitsToDisplayUnitsByDenom( + 'uosmo', + totalClaimable.toString() + )); + + + console.log( + `${totalClaimableInDisplayUnits} available, starting claim process...` + ); + + const result = await stargateClient.signAndBroadcast( + address, + messagesToClaim, + fee + ) + + assertIsDeliverTxSuccess(result); + stargateClient.disconnect(); + console.log( + `⚛️ success in claiming ${totalClaimableInDisplayUnits.toString()} rewards` + ); + console.log(result); + + +}; + +main().then(() => { + console.log('all done') +}) \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 53c857650e..7f94fe6784 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2437,6 +2437,15 @@ long "^4.0.0" secretjs "0.17.7" +"@keplr-wallet/types@0.11.25": + version "0.11.25" + resolved "https://registry.npmjs.org/@keplr-wallet/types/-/types-0.11.25.tgz#81a281712ce58f131d8579898dcde66934bcb52e" + integrity sha512-A2n2PXdRpn+v4icW34sbovcr4sZY14J+zZeEavBkuMtVyk49JlOOBj6orI+ofFl+SXzro+4vWei/XAJFrd/swg== + dependencies: + axios "^0.27.2" + long "^4.0.0" + secretjs "0.17.7" + "@keplr-wallet/unit@0.11.22": version "0.11.22" resolved "https://registry.npmjs.org/@keplr-wallet/unit/-/unit-0.11.22.tgz#c2a2f51f880cf8a0685560cc02e09a12006c529d" @@ -2446,6 +2455,15 @@ big-integer "^1.6.48" utility-types "^3.10.0" +"@keplr-wallet/unit@0.11.25": + version "0.11.25" + resolved "https://registry.npmjs.org/@keplr-wallet/unit/-/unit-0.11.25.tgz#2e36aaf86f328b07053c2aeb459d035af76abee4" + integrity sha512-aALEZTWQR3z1Z9/OADGA/iaim82buOBjHNc+NG6FtXBhekRt0gD2jZ0RI6s6bh4Vjj2O+GNRzteJBoC7pBCiXg== + dependencies: + "@keplr-wallet/types" "0.11.25" + big-integer "^1.6.48" + utility-types "^3.10.0" + "@lerna/add@4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@lerna/add/-/add-4.0.0.tgz#c36f57d132502a57b9e7058d1548b7a565ef183f"