Skip to content

Commit

Permalink
feat: implement MsgUpdateChainInfo (#2287)
Browse files Browse the repository at this point in the history
* proto

* codec

* message type

* fix tests

* message handler

* fix test

* make generate

* changelogs

* add chain info in proto

* message type

* complete message

* add cli

* generate

* Update x/authority/keeper/msg_server_update_chain_info.go

Co-authored-by: skosito <[email protected]>

* Update x/authority/types/message_update_chain_info.go

Co-authored-by: skosito <[email protected]>

* rename signer to creator

* refactor test assertions

* add read file function

* add query

* add query cli

* add unit test for parse type in cli

---------

Co-authored-by: skosito <[email protected]>
  • Loading branch information
lumtis and skosito authored May 30, 2024
1 parent 8eadf56 commit 42458ae
Show file tree
Hide file tree
Showing 35 changed files with 1,730 additions and 75 deletions.
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
* [2113](https://github.com/zeta-chain/node/pull/2113) - add zetaclientd-supervisor process
* [2154](https://github.com/zeta-chain/node/pull/2154) - add `ibccrosschain` module
* [2258](https://github.com/zeta-chain/node/pull/2258) - add Optimism and Base in static chain information
* [2287](https://github.com/zeta-chain/node/pull/2287) - implement `MsgUpdateChainInfo` message
* [2279](https://github.com/zeta-chain/node/pull/2279) - add a CCTXGateway field to chain static data
* [2275](https://github.com/zeta-chain/node/pull/2275) - add ChainInfo singleton state variable in authority

Expand Down
1 change: 1 addition & 0 deletions docs/cli/zetacored/zetacored_query_authority.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,6 @@ zetacored query authority [flags]
### SEE ALSO

* [zetacored query](zetacored_query.md) - Querying subcommands
* [zetacored query authority show-chain-info](zetacored_query_authority_show-chain-info.md) - show the chain info
* [zetacored query authority show-policies](zetacored_query_authority_show-policies.md) - show the policies

34 changes: 34 additions & 0 deletions docs/cli/zetacored/zetacored_query_authority_show-chain-info.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# query authority show-chain-info

show the chain info

```
zetacored query authority show-chain-info [flags]
```

### Options

```
--grpc-addr string the gRPC endpoint to use for this chain
--grpc-insecure allow gRPC over insecure channels, if not TLS the server must use TLS
--height int Use a specific height to query state at (this can error if the node is pruning state)
-h, --help help for show-chain-info
--node string [host]:[port] to Tendermint RPC interface for this chain
-o, --output string Output format (text|json)
```

### Options inherited from parent commands

```
--chain-id string The network chain ID
--home string directory for config and data
--log_format string The logging format (json|plain)
--log_level string The logging level (trace|debug|info|warn|error|fatal|panic)
--log_no_color Disable colored logs
--trace print out full stack trace on errors
```

### SEE ALSO

* [zetacored query authority](zetacored_query_authority.md) - Querying commands for the authority module

1 change: 1 addition & 0 deletions docs/cli/zetacored/zetacored_tx_authority.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,6 @@ zetacored tx authority [flags]
### SEE ALSO

* [zetacored tx](zetacored_tx.md) - Transactions subcommands
* [zetacored tx authority update-chain-info](zetacored_tx_authority_update-chain-info.md) - Update the chain info
* [zetacored tx authority update-policies](zetacored_tx_authority_update-policies.md) - Update the policies

53 changes: 53 additions & 0 deletions docs/cli/zetacored/zetacored_tx_authority_update-chain-info.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# tx authority update-chain-info

Update the chain info

```
zetacored tx authority update-chain-info [chain-info-json-file] [flags]
```

### Options

```
-a, --account-number uint The account number of the signing account (offline mode only)
--aux Generate aux signer data instead of sending a tx
-b, --broadcast-mode string Transaction broadcasting mode (sync|async)
--chain-id string The network chain ID
--dry-run ignore the --gas flag and perform a simulation of a transaction, but don't broadcast it (when enabled, the local Keybase is not accessible)
--fee-granter string Fee granter grants fees for the transaction
--fee-payer string Fee payer pays fees for the transaction instead of deducting from the signer
--fees string Fees to pay along with transaction; eg: 10uatom
--from string Name or address of private key with which to sign
--gas string gas limit to set per-transaction; set to "auto" to calculate sufficient gas automatically. Note: "auto" option doesn't always report accurate results. Set a valid coin value to adjust the result. Can be used instead of "fees". (default 200000)
--gas-adjustment float adjustment factor to be multiplied against the estimate returned by the tx simulation; if the gas limit is set manually this flag is ignored (default 1)
--gas-prices string Gas prices in decimal format to determine the transaction fee (e.g. 0.1uatom)
--generate-only Build an unsigned transaction and write it to STDOUT (when enabled, the local Keybase only accessed when providing a key name)
-h, --help help for update-chain-info
--keyring-backend string Select keyring's backend (os|file|kwallet|pass|test|memory)
--keyring-dir string The client Keyring directory; if omitted, the default 'home' directory will be used
--ledger Use a connected Ledger device
--node string [host]:[port] to tendermint rpc interface for this chain
--note string Note to add a description to the transaction (previously --memo)
--offline Offline mode (does not allow any online functionality)
-o, --output string Output format (text|json)
-s, --sequence uint The sequence number of the signing account (offline mode only)
--sign-mode string Choose sign mode (direct|amino-json|direct-aux), this is an advanced feature
--timeout-height uint Set a block timeout height to prevent the tx from being committed past a certain height
--tip string Tip is the amount that is going to be transferred to the fee payer on the target chain. This flag is only valid when used with --aux, and is ignored if the target chain didn't enable the TipDecorator
-y, --yes Skip tx broadcasting prompt confirmation
```

### Options inherited from parent commands

```
--home string directory for config and data
--log_format string The logging format (json|plain)
--log_level string The logging level (trace|debug|info|warn|error|fatal|panic)
--log_no_color Disable colored logs
--trace print out full stack trace on errors
```

### SEE ALSO

* [zetacored tx authority](zetacored_tx_authority.md) - authority transactions subcommands

38 changes: 38 additions & 0 deletions docs/openapi/openapi.swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28254,6 +28254,21 @@ paths:
type: boolean
tags:
- Query
/zeta-chain/authority/chainInfo:
get:
summary: Queries ChainInfo
operationId: Query_ChainInfo
responses:
"200":
description: A successful response.
schema:
$ref: '#/definitions/authorityQueryGetChainInfoResponse'
default:
description: An unexpected error response.
schema:
$ref: '#/definitions/googlerpcStatus'
tags:
- Query
/zeta-chain/authority/policies:
get:
summary: Queries Policies
Expand Down Expand Up @@ -56703,6 +56718,21 @@ definitions:
format: int64
balance:
type: string
authorityChainInfo:
type: object
properties:
chains:
type: array
items:
type: object
$ref: '#/definitions/chainsChain'
title: |-
ChainInfo contains static information about the chains
This structure is used to dynamically update these info on a live network
before hardcoding the values in a upgrade
authorityMsgUpdateChainInfoResponse:
type: object
description: MsgUpdateChainInfoResponse defines the MsgUpdateChainInfoResponse service.
authorityMsgUpdatePoliciesResponse:
type: object
description: MsgUpdatePoliciesResponse defines the MsgUpdatePoliciesResponse service.
Expand Down Expand Up @@ -56736,6 +56766,14 @@ definitions:

Used for administrative tasks like changing sensitive
title: PolicyType defines the type of policy
authorityQueryGetChainInfoResponse:
type: object
properties:
chain_info:
$ref: '#/definitions/authorityChainInfo'
description: |-
QueryGetChainInfoResponse is the response type for the Query/ChainInfo RPC
method.
authorityQueryGetPoliciesResponse:
type: object
properties:
Expand Down
14 changes: 13 additions & 1 deletion docs/spec/authority/messages.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,20 @@ UpdatePolicies updates policies

```proto
message MsgUpdatePolicies {
string signer = 1;
string creator = 1;
Policies policies = 2;
}
```

## MsgUpdateChainInfo

UpdateChainInfo updates the chain info structure that adds new static chain info or overwrite existing chain info
on the hard-coded chain info

```proto
message MsgUpdateChainInfo {
string creator = 1;
ChainInfo chain_info = 2;
}
```

5 changes: 5 additions & 0 deletions pkg/testdata/testdata.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ const (
TxsCount = 81
)

// TypesFiles contains the embedded files of different types in ZetaChain
//
//go:embed types/*
var TypesFiles embed.FS

//go:embed ethereum/*
var ethFiles embed.FS

Expand Down
24 changes: 24 additions & 0 deletions pkg/testdata/types/chain_info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"chains": [
{
"chain_id": 42,
"chain_name": 0,
"network": 0,
"network_type": 0,
"vm": 0,
"consensus": 0,
"is_external": false,
"cctx_gateway": 0
},
{
"chain_id": 84,
"chain_name": 1,
"network": 1,
"network_type": 1,
"vm": 1,
"consensus": 1,
"is_external": true,
"cctx_gateway": 1
}
]
}
16 changes: 16 additions & 0 deletions pkg/testdata/types/policies.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"items": [
{
"address": "zeta1nl7550unvzyswx5ts9m338ufmfydjsz2g0xt74",
"policy_type": 0
},
{
"address": "zeta1n0rn6sne54hv7w2uu93fl48ncyqz97d3kty6sh",
"policy_type": 1
},
{
"address": "zeta1srsq755t654agc0grpxj4y3w0znktrpr9tcdgk",
"policy_type": 2
}
]
}
16 changes: 16 additions & 0 deletions proto/zetachain/zetacore/authority/query.proto
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ syntax = "proto3";
package zetachain.zetacore.authority;

import "zetachain/zetacore/authority/policies.proto";
import "zetachain/zetacore/authority/chain_info.proto";
import "cosmos/base/query/v1beta1/pagination.proto";
import "gogoproto/gogo.proto";
import "google/api/annotations.proto";
Expand All @@ -14,6 +15,11 @@ service Query {
rpc Policies(QueryGetPoliciesRequest) returns (QueryGetPoliciesResponse) {
option (google.api.http).get = "/zeta-chain/authority/policies";
}

// Queries ChainInfo
rpc ChainInfo(QueryGetChainInfoRequest) returns (QueryGetChainInfoResponse) {
option (google.api.http).get = "/zeta-chain/authority/chainInfo";
}
}

// QueryGetPoliciesRequest is the request type for the Query/Policies RPC
Expand All @@ -25,3 +31,13 @@ message QueryGetPoliciesRequest {}
message QueryGetPoliciesResponse {
Policies policies = 1 [ (gogoproto.nullable) = false ];
}

// QueryGetChainInfoRequest is the request type for the Query/ChainInfo RPC
// method.
message QueryGetChainInfoRequest {}

// QueryGetChainInfoResponse is the response type for the Query/ChainInfo RPC
// method.
message QueryGetChainInfoResponse {
ChainInfo chain_info = 1 [ (gogoproto.nullable) = false ];
}
13 changes: 12 additions & 1 deletion proto/zetachain/zetacore/authority/tx.proto
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,31 @@ syntax = "proto3";
package zetachain.zetacore.authority;

import "zetachain/zetacore/authority/policies.proto";
import "zetachain/zetacore/authority/chain_info.proto";
import "gogoproto/gogo.proto";

option go_package = "github.com/zeta-chain/zetacore/x/authority/types";

// Msg defines the Msg service.
service Msg {
rpc UpdatePolicies(MsgUpdatePolicies) returns (MsgUpdatePoliciesResponse);
rpc UpdateChainInfo(MsgUpdateChainInfo) returns (MsgUpdateChainInfoResponse);
}

// MsgUpdatePolicies defines the MsgUpdatePolicies service.
message MsgUpdatePolicies {
string signer = 1;
string creator = 1;
Policies policies = 2 [ (gogoproto.nullable) = false ];
}

// MsgUpdatePoliciesResponse defines the MsgUpdatePoliciesResponse service.
message MsgUpdatePoliciesResponse {}

// MsgUpdateChainInfo defines the MsgUpdateChainInfo service.
message MsgUpdateChainInfo {
string creator = 1;
ChainInfo chain_info = 2 [ (gogoproto.nullable) = false ];
}

// MsgUpdateChainInfoResponse defines the MsgUpdateChainInfoResponse service.
message MsgUpdateChainInfoResponse {}
50 changes: 50 additions & 0 deletions typescript/zetachain/zetacore/authority/query_pb.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf";
import { Message, proto3 } from "@bufbuild/protobuf";
import type { Policies } from "./policies_pb.js";
import type { ChainInfo } from "./chain_info_pb.js";

/**
* QueryGetPoliciesRequest is the request type for the Query/Policies RPC
Expand Down Expand Up @@ -56,3 +57,52 @@ export declare class QueryGetPoliciesResponse extends Message<QueryGetPoliciesRe
static equals(a: QueryGetPoliciesResponse | PlainMessage<QueryGetPoliciesResponse> | undefined, b: QueryGetPoliciesResponse | PlainMessage<QueryGetPoliciesResponse> | undefined): boolean;
}

/**
* QueryGetChainInfoRequest is the request type for the Query/ChainInfo RPC
* method.
*
* @generated from message zetachain.zetacore.authority.QueryGetChainInfoRequest
*/
export declare class QueryGetChainInfoRequest extends Message<QueryGetChainInfoRequest> {
constructor(data?: PartialMessage<QueryGetChainInfoRequest>);

static readonly runtime: typeof proto3;
static readonly typeName = "zetachain.zetacore.authority.QueryGetChainInfoRequest";
static readonly fields: FieldList;

static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QueryGetChainInfoRequest;

static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QueryGetChainInfoRequest;

static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QueryGetChainInfoRequest;

static equals(a: QueryGetChainInfoRequest | PlainMessage<QueryGetChainInfoRequest> | undefined, b: QueryGetChainInfoRequest | PlainMessage<QueryGetChainInfoRequest> | undefined): boolean;
}

/**
* QueryGetChainInfoResponse is the response type for the Query/ChainInfo RPC
* method.
*
* @generated from message zetachain.zetacore.authority.QueryGetChainInfoResponse
*/
export declare class QueryGetChainInfoResponse extends Message<QueryGetChainInfoResponse> {
/**
* @generated from field: zetachain.zetacore.authority.ChainInfo chain_info = 1;
*/
chainInfo?: ChainInfo;

constructor(data?: PartialMessage<QueryGetChainInfoResponse>);

static readonly runtime: typeof proto3;
static readonly typeName = "zetachain.zetacore.authority.QueryGetChainInfoResponse";
static readonly fields: FieldList;

static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QueryGetChainInfoResponse;

static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QueryGetChainInfoResponse;

static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QueryGetChainInfoResponse;

static equals(a: QueryGetChainInfoResponse | PlainMessage<QueryGetChainInfoResponse> | undefined, b: QueryGetChainInfoResponse | PlainMessage<QueryGetChainInfoResponse> | undefined): boolean;
}

Loading

0 comments on commit 42458ae

Please sign in to comment.