Skip to content
This repository has been archived by the owner on Oct 13, 2023. It is now read-only.

feat: (wip)withdrawValidatorCommission message #42

Merged
merged 2 commits into from
May 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions packages/eip712/src/messages/staking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,23 @@ export function createMsgWithdrawDelegatorReward(
},
}
}

export const MSG_WITHDRAW_VALIDATOR_COMMISSION_TYPES = {
MsgValue: [{ name: 'validator_address', type: 'string' }],
}

export interface MsgWithdrawValidatorCommissionInterface {
type: string
value: {
validator_address: string
}
}

export function createMsgWithdrawValidatorCommission(validatorAddress: string) {
return {
type: 'cosmos-sdk/MsgWithdrawValidatorCommission',
value: {
validator_address: validatorAddress,
},
}
}
17 changes: 17 additions & 0 deletions packages/proto/src/messages/staking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,20 @@ export function createMsgWithdrawDelegatorReward(
path: 'cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward',
}
}

export interface MsgWithdrawValidatorCommissionProtoInterface {
path: string
message: dist.cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission
}

export function createMsgWithdrawValidatorCommission(validatorAddress: string) {
const message =
new dist.cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission({
validator_address: validatorAddress,
})

return {
message,
path: 'cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission',
}
}
57 changes: 57 additions & 0 deletions packages/transactions/src/messages/staking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
createMsgDelegate as protoMsgDelegate,
createMsgUndelegate as protoMsgUndelegate,
createMsgWithdrawDelegatorReward as protoeMsgWithdrawDelegatorReward,
createMsgWithdrawValidatorCommission as protoMsgWithdrawValidatorCommission,
MsgWithdrawDelegatorRewardProtoInterface,
createTransaction,
createTransactionWithMultipleMessages,
Expand All @@ -23,6 +24,8 @@ import {
MSG_WITHDRAW_DELEGATOR_REWARD_TYPES,
createMsgWithdrawDelegatorReward,
MsgWithdrawDelegatorRewardInterface,
MSG_WITHDRAW_VALIDATOR_COMMISSION_TYPES,
createMsgWithdrawValidatorCommission,
} from '@tharsis/eip712'

import { Chain, Fee, Sender } from './common'
Expand Down Expand Up @@ -344,3 +347,57 @@ export function createTxMsgMultipleWithdrawDelegatorReward(
eipToSign,
}
}

export interface MsgWithdrawValidatorCommissionParams {
validatorAddress: string
}

export function createTxMsgWithdrawValidatorCommission(
chain: Chain,
sender: Sender,
fee: Fee,
memo: string,
params: MsgWithdrawValidatorCommissionParams,
) {
// EIP712
const feeObject = generateFee(
fee.amount,
fee.denom,
fee.gas,
sender.accountAddress,
)
const types = generateTypes(MSG_WITHDRAW_VALIDATOR_COMMISSION_TYPES)
const msg = createMsgWithdrawValidatorCommission(params.validatorAddress)
const messages = generateMessage(
sender.accountNumber.toString(),
sender.sequence.toString(),
chain.cosmosChainId,
memo,
feeObject,
msg,
)
const eipToSign = createEIP712(types, chain.chainId, messages)

// Cosmos
const protoMessage = protoMsgWithdrawValidatorCommission(
params.validatorAddress,
)
const tx = createTransaction(
protoMessage,
memo,
fee.amount,
fee.denom,
parseInt(fee.gas, 10),
'ethsecp256',
sender.pubkey,
sender.sequence,
sender.accountNumber,
chain.cosmosChainId,
)

return {
signDirect: tx.signDirect,
legacyAmino: tx.legacyAmino,
eipToSign,
}
}