UNPKG

@kyve/sdk

Version:

<p align="center"> <a href="https://kyve.network"> <img src="https://user-images.githubusercontent.com/62398724/137493477-63868209-a19b-4efa-9413-f06d41197d6d.png" style="border-radius: 50%" height="96"> </a> <h3 align="center"><code>@kyve/sdk</

265 lines (247 loc) 7.87 kB
import { coins, SigningStargateClient } from "@cosmjs/stargate"; import { StdFee } from "@cosmjs/amino/build/signdoc"; import { AccountData } from "@cosmjs/amino/build/signer"; import { DENOM } from "../../../../../constants"; import { cosmos as cosmosProto } from "@kyve/proto"; import { signTx, TxPromise } from "../../../../../utils/helper"; import { cosmos } from "@keplr-wallet/cosmos"; import { kyve } from "@kyve/proto"; import TextProposal = cosmosProto.registry.v1beta1.cosmosGov.TextProposal; import ParameterChangeProposal = cosmosProto.registry.v1beta1.cosmosParams.ParameterChangeProposal; import CreatePoolProposal = kyve.registry.v1beta1.kyveGovPool.CreatePoolProposal; import CancelPoolUpgradeProposal = kyve.registry.v1beta1.kyveGov.CancelPoolUpgradeProposal; import PausePoolProposal = kyve.registry.v1beta1.kyveGov.PausePoolProposal; import ResetPoolProposal = kyve.registry.v1beta1.kyveGov.ResetPoolProposal; import SchedulePoolUpgradeProposal = kyve.registry.v1beta1.kyveGov.SchedulePoolUpgradeProposal; import UnpausePoolProposal = kyve.registry.v1beta1.kyveGov.UnpausePoolProposal; import UpdatePoolProposal = kyve.registry.v1beta1.kyveGov.UpdatePoolProposal; export default class KyveGovMsg { private nativeClient: SigningStargateClient; public readonly account: AccountData; constructor(client: SigningStargateClient, account: AccountData) { this.account = account; this.nativeClient = client; } private createGovTx( amount: string, content: { type_url: string; value: Object }, isExpedited = false ) { return { typeUrl: "/cosmos.gov.v1beta1.MsgSubmitProposal", value: { content, initial_deposit: coins(amount.toString(), DENOM), proposer: this.account.address, is_expedited: isExpedited, }, }; } public async submitTextProposal( amount: string, value: TextProposal, options?: { fee?: StdFee | "auto" | number; memo?: string; isExpedited?: boolean; } ) { const content = { type_url: "/cosmos.gov.v1beta1.TextProposal", value: TextProposal.encode(value).finish(), }; const tx = this.createGovTx(amount, content, options?.isExpedited); return new TxPromise( this.nativeClient, await signTx(this.nativeClient, this.account.address, tx, options) ); } public async parameterChangeProposal( amount: string, value: ParameterChangeProposal, options?: { fee?: StdFee | "auto" | number; memo?: string; isExpedited?: boolean; } ) { const content = { type_url: "/cosmos.params.v1beta1.ParameterChangeProposal", value: ParameterChangeProposal.encode(value).finish(), }; const tx = this.createGovTx(amount, content, options?.isExpedited); return new TxPromise( this.nativeClient, await signTx(this.nativeClient, this.account.address, tx, options) ); } public async updatePoolProposal( amount: string, value: UpdatePoolProposal, options?: { isExpedited?: boolean; fee?: StdFee | "auto" | number; memo?: string; } ) { const content = { type_url: "/kyve.pool.v1beta1.UpdatePoolProposal", value: UpdatePoolProposal.encode(value).finish(), }; const tx = this.createGovTx(amount, content, options?.isExpedited); return new TxPromise( this.nativeClient, await signTx(this.nativeClient, this.account.address, tx, options) ); } public async pausePoolProposal( amount: string, value: PausePoolProposal, options?: { isExpedited?: boolean; fee?: StdFee | "auto" | number; memo?: string; } ) { const content = { type_url: "/kyve.pool.v1beta1.PausePoolProposal", value: PausePoolProposal.encode(value).finish(), }; const tx = this.createGovTx(amount, content, options?.isExpedited); return new TxPromise( this.nativeClient, await signTx(this.nativeClient, this.account.address, tx, options) ); } public async unpausePoolProposal( amount: string, value: UnpausePoolProposal, options?: { isExpedited?: boolean; fee?: StdFee | "auto" | number; memo?: string; } ) { const content = { type_url: "/kyve.pool.v1beta1.UnpausePoolProposal", value: UnpausePoolProposal.encode(value).finish(), }; const tx = this.createGovTx(amount, content, options?.isExpedited); return new TxPromise( this.nativeClient, await signTx(this.nativeClient, this.account.address, tx, options) ); } public async schedulePoolUpgradeProposal( amount: string, value: SchedulePoolUpgradeProposal, options?: { isExpedited?: boolean; fee?: StdFee | "auto" | number; memo?: string; } ) { const content = { type_url: "/kyve.pool.v1beta1.SchedulePoolUpgradeProposal", value: SchedulePoolUpgradeProposal.encode(value).finish(), }; const tx = this.createGovTx(amount, content, options?.isExpedited); return new TxPromise( this.nativeClient, await signTx(this.nativeClient, this.account.address, tx, options) ); } public async cancelPoolUpgradeProposal( amount: string, value: CancelPoolUpgradeProposal, options?: { isExpedited?: boolean; fee?: StdFee | "auto" | number; memo?: string; } ) { const content = { type_url: "/kyve.pool.v1beta1.CancelPoolUpgradeProposal", value: CancelPoolUpgradeProposal.encode(value).finish(), }; const tx = this.createGovTx(amount, content, options?.isExpedited); return new TxPromise( this.nativeClient, await signTx(this.nativeClient, this.account.address, tx, options) ); } public async resetPoolProposal( amount: string, value: ResetPoolProposal, options?: { isExpedited?: boolean; fee?: StdFee | "auto" | number; memo?: string; } ) { const content = { type_url: "/kyve.pool.v1beta1.ResetPoolProposal", value: ResetPoolProposal.encode(value).finish(), }; const tx = this.createGovTx(amount, content, options?.isExpedited); return new TxPromise( this.nativeClient, await signTx(this.nativeClient, this.account.address, tx, options) ); } public async createPoolProposal( amount: string, value: CreatePoolProposal, options: { isExpedited?: boolean; fee?: StdFee | "auto" | number; memo?: string; } ) { const content = { type_url: "/kyve.pool.v1beta1.CreatePoolProposal", value: CreatePoolProposal.encode(value).finish(), }; const tx = this.createGovTx(amount, content, options?.isExpedited); return new TxPromise( this.nativeClient, await signTx(this.nativeClient, this.account.address, tx, options) ); } async govVote( id: string, voteOption: "Yes" | "Abstain" | "No" | "NoWithVeto", options?: { fee?: StdFee | "auto" | number; memo?: string; } ) { let _option = cosmos.gov.v1beta1.VoteOption.VOTE_OPTION_UNSPECIFIED; switch (voteOption) { case "Yes": _option = cosmos.gov.v1beta1.VoteOption.VOTE_OPTION_YES; break; case "Abstain": _option = cosmos.gov.v1beta1.VoteOption.VOTE_OPTION_ABSTAIN; break; case "No": _option = cosmos.gov.v1beta1.VoteOption.VOTE_OPTION_NO; break; case "NoWithVeto": _option = cosmos.gov.v1beta1.VoteOption.VOTE_OPTION_NO_WITH_VETO; break; } const tx = { typeUrl: "/cosmos.gov.v1beta1.MsgVote", value: { proposalId: id, voter: this.account.address, option: _option, }, }; return new TxPromise( this.nativeClient, await signTx(this.nativeClient, this.account.address, tx, options) ); } }