Send vote message in gov module

This commit is contained in:
2022-04-21 09:44:24 +05:30
committed by Ashwin Phatak
parent 72ab467d9b
commit 3f2bdd34f8
3 changed files with 82 additions and 7 deletions
+10 -1
View File
@@ -1,4 +1,4 @@
import { sendTokens } from './index'
import { sendTokens, sendVote } from './index'
const SENDER_ADDRESS = 'ethm1ayxjyxxa3z9z0rjff7rpr67h8aqfgn2t9009zc';
const SENDER_PRIVATE_KEY = '5041b1ace7ea207794f4c5c1c5f987ff8a9d782f194ef5b24bcffaafaf4a019f';
@@ -7,3 +7,12 @@ const TO_ADDRESS = 'ethm12x63cgg82ek97cf8ew9hf6r7je75s5w2smejqv';
test('Send tokens', async () => {
await sendTokens(SENDER_PRIVATE_KEY, SENDER_ADDRESS, TO_ADDRESS)
});
test('Send vote', async () => {
const voteParams = {
proposalId: 1,
option: 1
}
await sendVote(SENDER_PRIVATE_KEY, SENDER_ADDRESS, voteParams)
})
+50 -6
View File
@@ -1,7 +1,14 @@
import axios from "axios";
import { generateEndpointAccount, generateEndpointBroadcast, generatePostBodyBroadcast } from '@tharsis/provider';
import { createMessageSend, createTxRawEIP712, signatureToWeb3Extension } from '@tharsis/transactions'
import { MessageTypes, signTypedData, SignTypedDataVersion } from "@metamask/eth-sig-util";
import { generateEndpointAccount, generateEndpointBroadcast, generatePostBodyBroadcast } from '@tharsis/provider';
import {
createMessageSend,
createTxRawEIP712,
signatureToWeb3Extension,
createTxMsgVote,
Chain,
Sender
} from '@tharsis/transactions'
const ETHERMINT_REST_ENDPOINT = 'http://127.0.0.1:1317'
@@ -13,6 +20,11 @@ interface TypedMessageDomain {
salt?: ArrayBuffer;
}
interface VoteParams {
proposalId: number;
option: number;
}
export const sendTokens = async (senderPrivateKey: string, senderAddress: string, destinationAddress: string) => {
let { data: addrData} = await axios.get(`${ETHERMINT_REST_ENDPOINT}${generateEndpointAccount(senderAddress)}`)
@@ -44,6 +56,38 @@ export const sendTokens = async (senderPrivateKey: string, senderAddress: string
// Create a MsgSend transaction.
const msg = createMessageSend(chain, sender, fee, memo, params)
await signAndSendMessage(senderPrivateKey, chain, sender, msg)
}
export const sendVote = async (senderPrivateKey: string, senderAddress: string, params: VoteParams) => {
let { data: addrData} = await axios.get(`${ETHERMINT_REST_ENDPOINT}${generateEndpointAccount(senderAddress)}`)
const chain = {
chainId: 9000,
cosmosChainId: 'ethermint_9000-1',
}
const sender = {
accountAddress: addrData.account.base_account.address,
sequence: addrData.account.base_account.sequence,
accountNumber: addrData.account.base_account.account_number,
pubkey: addrData.account.base_account.pub_key.key,
}
const fee = {
amount: '20',
denom: 'aphoton',
gas: '200000',
}
const memo = ''
const msg = createTxMsgVote(chain, sender, fee, memo, params)
await signAndSendMessage(senderPrivateKey, chain, sender, msg)
}
const signAndSendMessage = async (senderPrivateKey: string, chain: Chain, sender: Sender, msg: any) => {
const eipMessageDomain: any = msg.eipToSign.domain;
// Sign transaction.
@@ -60,16 +104,16 @@ export const sendTokens = async (senderPrivateKey: string, senderAddress: string
let extension = signatureToWeb3Extension(chain, sender, signature)
// Create the txRaw
// Create the txRaw.
let rawTx = createTxRawEIP712(msg.legacyAmino.body, msg.legacyAmino.authInfo, extension)
const body = generatePostBodyBroadcast(rawTx)
// Broadcast it
await axios.post(
// Broadcast transaction.
return axios.post(
`${ETHERMINT_REST_ENDPOINT}${generateEndpointBroadcast()}`,
JSON.parse(body)
)
// TODO: Check for successful broadcast
// TODO: Check for successful broadcast.
}