Skip to content

Commit 5410c1f

Browse files
authored
feat: proposal deposit message (evmos#86)
* core(deps): some work with dependencies - properly move some deps to dev dependencies - use same deps version in different packages - add coverage folder to `.gitignore` * feat: add proposal deposit message
1 parent 78f4992 commit 5410c1f

File tree

17 files changed

+1389
-1070
lines changed

17 files changed

+1389
-1070
lines changed

.eslintrc.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ const common = {
55
browser: true,
66
'jest/globals': true,
77
},
8-
plugins: ['prettier', 'jest'],
9-
extends: ['airbnb-base', 'prettier', 'plugin:jest/all'],
8+
plugins: ['jest', 'prettier'],
9+
extends: ['airbnb-base', 'plugin:jest/all', 'plugin:prettier/recommended'],
1010
rules: {
1111
'prettier/prettier': 'error',
1212
'jest/no-disabled-tests': 'warn',

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,4 @@ build/Release
2929
.serverless/
3030
.yarn
3131
.idea
32+
coverage

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"@commitlint/cli": "^16.2.0",
5252
"@commitlint/config-conventional": "^16.2.1",
5353
"@types/jest": "^27.0.1",
54-
"@types/node": "^16.9.2",
54+
"@types/node": "^17.0.21",
5555
"@typescript-eslint/eslint-plugin": "^4.31.1",
5656
"@typescript-eslint/parser": "^4.31.1",
5757
"cross-env": "^7.0.3",
@@ -76,6 +76,6 @@
7676
"ts-jest": "^27.0.5",
7777
"ts-node-dev": "^1.1.8",
7878
"tsconfig-paths": "^3.11.0",
79-
"typescript": "^4.4.3"
79+
"typescript": "^4.7.3"
8080
}
8181
}

packages/address-converter/package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
},
2828
"dependencies": {
2929
"bech32": "^2.0.0",
30-
"crypto-addr-codec": "^0.1.7",
30+
"crypto-addr-codec": "^0.1.7"
31+
},
32+
"devDependencies": {
3133
"link-module-alias": "^1.2.0",
3234
"shx": "^0.3.4"
3335
},

packages/eip712/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export * from './messages/erc20/msgConvertERC20'
1313
export * from './messages/base'
1414
export * from './messages/gov/msgVote'
1515
export * from './messages/gov/msgSubmitProposal'
16+
export * from './messages/gov/msgDeposit'
1617
export * from './messages/ibcMsgTransfer'
1718
export * from './messages/msgsend'
1819
export * from './messages/staking'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
export const MSG_DEPOSIT_TYPES = {
2+
MsgValue: [
3+
{ name: 'proposal_id', type: 'uint64' },
4+
{ name: 'depositor', type: 'string' },
5+
{ name: 'deposit', type: 'Coin[]' },
6+
],
7+
}
8+
9+
export function createMsgDeposit(
10+
proposalId: number,
11+
depositor: string,
12+
deposit: {
13+
denom: string
14+
amount: string
15+
},
16+
) {
17+
return {
18+
type: 'cosmos-sdk/MsgDeposit',
19+
value: {
20+
proposal_id: proposalId,
21+
depositor,
22+
deposit: [deposit],
23+
},
24+
}
25+
}

packages/evmosjs/package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030
"@evmos/eip712": "^0.2.8",
3131
"@evmos/proto": "^0.1.24",
3232
"@evmos/provider": "^0.2.6",
33-
"@evmos/transactions": "^0.2.10",
33+
"@evmos/transactions": "^0.2.10"
34+
},
35+
"devDependencies": {
3436
"@types/node": "^17.0.21",
3537
"link-module-alias": "^1.2.0",
3638
"shx": "^0.3.4"

packages/proto/package.json

+6-6
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@
2828
"dev": "ts-node-dev -r tsconfig-paths/register src/index.ts",
2929
"start": "node dist/index.js"
3030
},
31-
"devDependencies": {
32-
"protoc-gen-ts": "^0.8.2"
33-
},
3431
"dependencies": {
32+
"google-protobuf": "^3.19.4",
33+
"sha3": "^2.1.4"
34+
},
35+
"devDependencies": {
3536
"@types/google-protobuf": "^3.15.5",
3637
"@types/node": "^17.0.21",
37-
"google-protobuf": "^3.19.4",
3838
"link-module-alias": "^1.2.0",
39-
"sha3": "^2.1.4",
40-
"shx": "^0.3.4"
39+
"shx": "^0.3.4",
40+
"protoc-gen-ts": "^0.8.2"
4141
},
4242
"gitHead": "fc2045b9357bde146e3374429453eb5d4a48a2ca",
4343
"publishConfig": {

packages/proto/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ export * from './messages/utils'
1414
export * from './messages/validator'
1515
export * from './messages/gov/vote'
1616
export * from './messages/gov/msgSubmitProposal'
17+
export * from './messages/gov/msgDeposit'
1718
export * from './messages/web3Extension'
1819
export * from './transaction/transaction'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import * as tx from '../../proto/cosmos/gov/v1beta1/tx'
2+
import * as coin from '../../proto/cosmos/base/v1beta1/coin'
3+
4+
export function createMsgDeposit(
5+
proposalId: number,
6+
depositor: string,
7+
deposit: {
8+
denom: string
9+
amount: string
10+
},
11+
) {
12+
const depositAmount = new coin.cosmos.base.v1beta1.Coin({ ...deposit })
13+
const depositMessage = new tx.cosmos.gov.v1beta1.MsgDeposit({
14+
proposal_id: proposalId,
15+
depositor,
16+
amount: [depositAmount],
17+
})
18+
19+
return {
20+
path: 'cosmos.gov.v1beta1.MsgDeposit',
21+
message: depositMessage,
22+
}
23+
}

packages/provider/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"dev": "ts-node-dev -r tsconfig-paths/register src/index.ts",
2626
"start": "node dist/index.js"
2727
},
28-
"dependencies": {
28+
"devDependencies": {
2929
"@types/node": "^17.0.21",
3030
"link-module-alias": "^1.2.0",
3131
"shx": "^0.3.4"

packages/provider/src/rest/gov.ts

+36-5
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,45 @@ export function generateEndpointProposals() {
1515
return `/cosmos/gov/v1beta1/proposals`
1616
}
1717

18+
export interface BaseProposalContent<T = string> {
19+
'@type': T
20+
title: string
21+
description: string
22+
}
23+
24+
export interface SoftwareUpgradeProposalPlan {
25+
name: string
26+
time: string
27+
upgraded_client_state: string // eslint-disable-line camelcase
28+
info: string
29+
height: string
30+
}
31+
32+
export interface SoftwareUpgradeProposalContent
33+
extends BaseProposalContent<'/cosmos.upgrade.v1beta1.SoftwareUpgradeProposal'> {
34+
plan: SoftwareUpgradeProposalPlan
35+
}
36+
37+
export interface ParameterChangeProposalParam {
38+
subspace: string
39+
key: string
40+
value: string
41+
}
42+
43+
export interface ParameterChangeProposalContent
44+
extends BaseProposalContent<'/cosmos.params.v1beta1.ParameterChangeProposal'> {
45+
changes: ParameterChangeProposalParam[]
46+
}
47+
48+
export type ProposalContent =
49+
| BaseProposalContent
50+
| SoftwareUpgradeProposalContent
51+
| ParameterChangeProposalContent
52+
1853
/* eslint-disable camelcase */
1954
export interface Proposal {
2055
proposal_id: string
21-
content: {
22-
'@type': string
23-
title: string
24-
description: string
25-
}
56+
content: ProposalContent
2657
status: string
2758
final_tally_result: {
2859
yes: string

packages/transactions/package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@
2727
},
2828
"dependencies": {
2929
"@evmos/eip712": "^0.2.8",
30-
"@evmos/proto": "^0.1.24",
31-
"@types/node": "^17.0.21",
32-
"link-module-alias": "^1.2.0",
33-
"shx": "^0.3.4"
30+
"@evmos/proto": "^0.1.24"
3431
},
3532
"devDependencies": {
33+
"@types/node": "^17.0.21",
34+
"link-module-alias": "^1.2.0",
35+
"shx": "^0.3.4",
3636
"@babel/core": "^7.18.2",
3737
"@babel/preset-env": "^7.18.2",
3838
"@babel/preset-typescript": "^7.17.12",

packages/transactions/src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export * from './messages/authz/revoke'
88
export * from './messages/common'
99
export * from './messages/gov/msgVote'
1010
export * from './messages/gov/msgSubmitProposal'
11+
export * from './messages/gov/msgDeposit'
1112
export * from './messages/ibcMsgTransfer'
1213
export * from './messages/msgSend'
1314
export * from './messages/staking'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
import { createTxMsgDeposit, MessageMsgDepositParams } from './msgDeposit'
2+
3+
describe('msgDeposit tests', () => {
4+
it('valid', async () => {
5+
const chain = {
6+
chainId: 9000,
7+
cosmosChainId: 'evmos_9000-1',
8+
}
9+
10+
const sender = {
11+
accountAddress: 'ethm1tfegf50n5xl0hd5cxfzjca3ylsfpg0fned5gqm',
12+
sequence: 1,
13+
accountNumber: 9,
14+
pubkey: 'AgTw+4v0daIrxsNSW4FcQ+IoingPseFwHO1DnssyoOqZ',
15+
}
16+
17+
const fee = {
18+
amount: '20',
19+
denom: 'aevmos',
20+
gas: '200000',
21+
}
22+
23+
const memo = ''
24+
25+
const params: MessageMsgDepositParams = {
26+
proposalId: 42,
27+
deposit: {
28+
amount: '1',
29+
denom: 'aevmos',
30+
},
31+
}
32+
33+
const msg = createTxMsgDeposit(chain, sender, fee, memo, params)
34+
expect(
35+
Buffer.from(msg.legacyAmino.body.serializeBinary()).toString('base64'),
36+
).toBe(
37+
'Cl4KHi9jb3Ntb3MuZ292LnYxYmV0YTEuTXNnRGVwb3NpdBI8CCoSK2V0aG0xdGZlZ2Y1MG41eGwwaGQ1Y3hmempjYTN5bHNmcGcwZm5lZDVncW0aCwoGYWV2bW9zEgEx',
38+
)
39+
expect(
40+
Buffer.from(msg.legacyAmino.authInfo.serializeBinary()).toString(
41+
'base64',
42+
),
43+
).toBe(
44+
'ClkKTwooL2V0aGVybWludC5jcnlwdG8udjEuZXRoc2VjcDI1NmsxLlB1YktleRIjCiECBPD7i/R1oivGw1JbgVxD4iiKeA+x4XAc7UOeyzKg6pkSBAoCCH8YARISCgwKBmFldm1vcxICMjAQwJoM',
45+
)
46+
expect(msg.legacyAmino.signBytes).toBe(
47+
'rPuR5O7Omn7EdM790sDbISuhQB1GGZz3YIzq34HBh3k=',
48+
)
49+
50+
expect(
51+
Buffer.from(msg.signDirect.body.serializeBinary()).toString('base64'),
52+
).toBe(
53+
'Cl4KHi9jb3Ntb3MuZ292LnYxYmV0YTEuTXNnRGVwb3NpdBI8CCoSK2V0aG0xdGZlZ2Y1MG41eGwwaGQ1Y3hmempjYTN5bHNmcGcwZm5lZDVncW0aCwoGYWV2bW9zEgEx',
54+
)
55+
expect(
56+
Buffer.from(msg.signDirect.authInfo.serializeBinary()).toString('base64'),
57+
).toBe(
58+
'ClkKTwooL2V0aGVybWludC5jcnlwdG8udjEuZXRoc2VjcDI1NmsxLlB1YktleRIjCiECBPD7i/R1oivGw1JbgVxD4iiKeA+x4XAc7UOeyzKg6pkSBAoCCAEYARISCgwKBmFldm1vcxICMjAQwJoM',
59+
)
60+
expect(msg.signDirect.signBytes).toBe(
61+
'3BTa2GzN5hI2IiNsrOsbtxbNSRqIxgar49teQWcxIa0=',
62+
)
63+
64+
expect(msg.eipToSign).toStrictEqual({
65+
domain: {
66+
chainId: 9000,
67+
name: 'Cosmos Web3',
68+
salt: '0',
69+
verifyingContract: 'cosmos',
70+
version: '1.0.0',
71+
},
72+
message: {
73+
account_number: '9',
74+
chain_id: 'evmos_9000-1',
75+
fee: {
76+
amount: [{ amount: '20', denom: 'aevmos' }],
77+
feePayer: 'ethm1tfegf50n5xl0hd5cxfzjca3ylsfpg0fned5gqm',
78+
gas: '200000',
79+
},
80+
memo: '',
81+
msgs: [
82+
{
83+
type: 'cosmos-sdk/MsgDeposit',
84+
value: {
85+
proposal_id: 42,
86+
depositor: 'ethm1tfegf50n5xl0hd5cxfzjca3ylsfpg0fned5gqm',
87+
deposit: [{ amount: '1', denom: 'aevmos' }],
88+
},
89+
},
90+
],
91+
sequence: '1',
92+
},
93+
primaryType: 'Tx',
94+
types: {
95+
Coin: [
96+
{ name: 'denom', type: 'string' },
97+
{ name: 'amount', type: 'string' },
98+
],
99+
EIP712Domain: [
100+
{ name: 'name', type: 'string' },
101+
{ name: 'version', type: 'string' },
102+
{ name: 'chainId', type: 'uint256' },
103+
{ name: 'verifyingContract', type: 'string' },
104+
{ name: 'salt', type: 'string' },
105+
],
106+
Fee: [
107+
{ name: 'feePayer', type: 'string' },
108+
{ name: 'amount', type: 'Coin[]' },
109+
{ name: 'gas', type: 'string' },
110+
],
111+
Msg: [
112+
{ name: 'type', type: 'string' },
113+
{ name: 'value', type: 'MsgValue' },
114+
],
115+
MsgValue: [
116+
{ name: 'proposal_id', type: 'uint64' },
117+
{ name: 'depositor', type: 'string' },
118+
{ name: 'deposit', type: 'Coin[]' },
119+
],
120+
Tx: [
121+
{ name: 'account_number', type: 'string' },
122+
{ name: 'chain_id', type: 'string' },
123+
{ name: 'fee', type: 'Fee' },
124+
{ name: 'memo', type: 'string' },
125+
{ name: 'msgs', type: 'Msg[]' },
126+
{ name: 'sequence', type: 'string' },
127+
],
128+
},
129+
})
130+
})
131+
})

0 commit comments

Comments
 (0)