z8aaaaa_update_client_misbehaviour_filetest.gno
8.25 Kb · 169 lines
1// PKGPATH: gno.land/r/aib/main
2package main
3
4import (
5 "time"
6
7 "gno.land/p/aib/ibc/lightclient/tendermint"
8 tmtesting "gno.land/p/aib/ibc/lightclient/tendermint/testing"
9 "gno.land/p/aib/ibc/types"
10 "gno.land/r/aib/ibc/core"
11)
12
13// UpdateClient with valid misbehaviour and authorized relayers
14func main(cur realm) {
15 core.SetAdmin(cross(cur), "g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm")
16 core.AddRelayer(cross(cur), "g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm")
17 // CreateClient and RegisterCounterparty
18 var (
19 chainID = "atomone-1"
20 height = uint64(2)
21 clientState = tmtesting.NewClientState(chainID, types.NewHeight(1, height))
22 apphash = tmtesting.Hash("apphash-2")
23 // priv=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==
24 val1 = tendermint.NewValidator("9DIBYr64rywKO3Kk6+743xDHcEU=",
25 "VMpO0RzmZu4OMVvsniYdeO/2eP+h1xeoAcHBTZC7Gfw=", 1)
26 // priv=nWg6ETc62tyxd94lh8fFaQnZKaAW6vlS0L/4lfseJuI14ZXUKp7AZROkflLFVF+SBg4wJVfzgzIKyWq3D066+g==
27 val2 = tendermint.NewValidator("y+naL3ubs9q1bXrY9+uRxY9c+J8=",
28 "NeGV1CqewGUTpH5SxVRfkgYOMCVX84MyCslqtw9Ouvo=", 1)
29 trustedValset = tendermint.NewValset(val1, val2)
30 consensusState = tmtesting.GenConsensusState(time.Now(), apphash, trustedValset.Hash())
31 )
32 clientID := core.CreateClient(cross(cur), clientState, consensusState)
33 core.RegisterCounterparty(cross(cur), clientID, [][]byte{[]byte("iavlStoreKey"), []byte("prefix2")}, "07-tendermint-2")
34
35 // Build valid misbehavior
36 var header1, header2 *tendermint.MsgHeader
37 // NOTE code generated by:
38 // go run -C ./cmd/gen-block-signatures . -chainid=atomone-1 -header-time-shift=0 -height=4 -new-validators=0 -privkeys=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==,nWg6ETc62tyxd94lh8fFaQnZKaAW6vlS0L/4lfseJuI14ZXUKp7AZROkflLFVF+SBg4wJVfzgzIKyWq3D066+g==
39 {
40 var (
41 apphash = tmtesting.Hash("apphash-4")
42 // priv=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==
43 val1 = tendermint.NewValidator("9DIBYr64rywKO3Kk6+743xDHcEU=", "VMpO0RzmZu4OMVvsniYdeO/2eP+h1xeoAcHBTZC7Gfw=", 10)
44 // priv=nWg6ETc62tyxd94lh8fFaQnZKaAW6vlS0L/4lfseJuI14ZXUKp7AZROkflLFVF+SBg4wJVfzgzIKyWq3D066+g==
45 val2 = tendermint.NewValidator("y+naL3ubs9q1bXrY9+uRxY9c+J8=", "NeGV1CqewGUTpH5SxVRfkgYOMCVX84MyCslqtw9Ouvo=", 10)
46 valset = tendermint.NewValset(val1, val2)
47 commitTimestamp = tmtesting.ToTime("2025-09-25T07:55:57.306746166Z")
48 newHeight = uint64(4)
49 newTimestamp = consensusState.Timestamp.Add(time.Minute * time.Duration(0))
50 nextValset = tendermint.NewValset(val1, val2)
51 trustedHeight = clientState.LatestHeight
52
53 signatures = []tendermint.CommitSig{
54 {
55 BlockIDFlag: tendermint.BlockIDFlagCommit,
56 ValidatorAddress: valset.Validators[0].Address,
57 Timestamp: commitTimestamp,
58 Signature: []byte("\x2e\xba\x21\xb0\x2f\xd2\x85\xb9\xef\x82\x68\xdc\xef\xd1\xd1\x12\x70\x88\x94\x10\x7e\x4d\x49\xac\x46\x3d\x86\xe2\xf2\xae\x38\xb4\xa5\xab\x0c\xc1\x8f\x8a\x59\xda\x36\x17\x01\xe4\x16\x49\xbf\x03\x86\xf0\x31\x3f\x30\x37\x9e\x47\x28\x72\x3b\x0c\x89\xb9\x94\x05"),
59 },
60 {
61 BlockIDFlag: tendermint.BlockIDFlagCommit,
62 ValidatorAddress: valset.Validators[1].Address,
63 Timestamp: commitTimestamp,
64 Signature: []byte("\x67\xcc\xc6\xc4\x20\xa0\xcb\x36\xaf\x33\x5c\xf8\xe4\xad\x47\x49\x38\x9d\x9e\xa3\x7c\xe6\x88\x81\x62\x51\x7f\xcc\xa5\x92\x0d\x98\xe9\xbe\x71\x2d\x22\xcd\x41\x30\x28\x83\x03\xcb\xf5\xd7\x28\xde\x7b\x92\x85\x9e\xa6\xe5\xde\x50\x89\x2d\x2b\xc5\x9d\x9a\x33\x00"),
65 },
66 }
67 )
68
69 header1 = tmtesting.NewMsgHeader(
70 chainID, newTimestamp, apphash, newHeight, trustedHeight, valset,
71 nextValset, trustedValset, signatures,
72 )
73 }
74 // NOTE code generated by:
75 // go run -C ./cmd/gen-block-signatures . -apphash-seed=apphash-3 -chainid=atomone-1 -header-time-shift=0 -height=3 -privkeys=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==,nWg6ETc62tyxd94lh8fFaQnZKaAW6vlS0L/4lfseJuI14ZXUKp7AZROkflLFVF+SBg4wJVfzgzIKyWq3D066+g==
76 {
77 var (
78 apphash = tmtesting.Hash("apphash-3")
79 // priv=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==
80 val1 = tendermint.NewValidator("9DIBYr64rywKO3Kk6+743xDHcEU=", "VMpO0RzmZu4OMVvsniYdeO/2eP+h1xeoAcHBTZC7Gfw=", 10)
81 // priv=nWg6ETc62tyxd94lh8fFaQnZKaAW6vlS0L/4lfseJuI14ZXUKp7AZROkflLFVF+SBg4wJVfzgzIKyWq3D066+g==
82 val2 = tendermint.NewValidator("y+naL3ubs9q1bXrY9+uRxY9c+J8=", "NeGV1CqewGUTpH5SxVRfkgYOMCVX84MyCslqtw9Ouvo=", 10)
83 valset = tendermint.NewValset(val1, val2)
84 commitTimestamp = tmtesting.ToTime("2025-09-25T07:55:57.306746166Z")
85 newHeight = uint64(3)
86 newTimestamp = consensusState.Timestamp.Add(time.Minute * time.Duration(0))
87 nextValset = tendermint.NewValset(val1, val2)
88 trustedHeight = clientState.LatestHeight
89
90 signatures = []tendermint.CommitSig{
91 {
92 BlockIDFlag: tendermint.BlockIDFlagCommit,
93 ValidatorAddress: valset.Validators[0].Address,
94 Timestamp: commitTimestamp,
95 Signature: []byte("\x51\xa4\x8f\x78\x42\x4e\x6e\x0d\xc3\x2b\xe6\xcb\x09\x5c\xe5\x7d\x35\x84\xcf\xb1\x0f\x53\x72\x0c\x41\xde\xd3\x6d\xbc\x81\x28\x64\x41\xf7\xe9\x1e\xa9\x93\xd0\xa4\x84\x16\xca\xa8\xa3\x8e\x56\x45\xec\xae\x1d\x24\xb4\xa8\xf4\x29\x85\x04\x06\xe4\x18\x6b\x7d\x08"),
96 },
97 {
98 BlockIDFlag: tendermint.BlockIDFlagCommit,
99 ValidatorAddress: valset.Validators[1].Address,
100 Timestamp: commitTimestamp,
101 Signature: []byte("\xd9\xd6\x82\x83\x78\x75\xfa\x2e\xd7\x1b\xa5\x3d\xfe\xb3\x80\xb6\xc7\x59\x20\x45\x10\xdf\x0c\x19\xd1\xcc\xfc\x37\xd5\x59\x79\x95\x93\x60\x08\xfb\x5f\xa0\x87\x95\x51\x1e\x29\xed\x94\xd1\x31\x5e\xda\x90\x86\x11\xbe\xb2\x88\x68\xe1\xba\xa7\x31\xc7\xa2\xda\x07"),
102 },
103 }
104 )
105
106 header2 = tmtesting.NewMsgHeader(
107 chainID, newTimestamp, apphash, newHeight, trustedHeight, valset,
108 nextValset, trustedValset, signatures,
109 )
110 }
111 msg := &tendermint.Misbehaviour{
112 Header1: header1,
113 Header2: header2,
114 }
115
116 core.UpdateClient(cross(cur), clientID, msg)
117
118 println("----------- assert render clients")
119 println(core.Render("clients"))
120 println("----------- assert render clients/07-tendermint-1/consensus_states")
121 println(core.Render("clients/" + clientID + "/consensus_states"))
122 println("----------- assert render client status")
123 println(core.Render("clients/" + clientID + "/status"))
124}
125
126// Output:
127// ----------- assert render clients
128// {"items":[{"id":"07-tendermint-1","type":"07-tendermint","creator":"g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm","status":"Frozen","counterparty_client_id":"07-tendermint-2","counterparty_merke_prefix":["iavlStoreKey","prefix2"],"client_state":{"chain_id":"atomone-1","latest_height":{"revision_number":1,"revision_height":2},"frozen_height":{"revision_number":0,"revision_height":1},"trust_level":{"numerator":1,"denominator":3},"trusting_period":3600,"unbonding_period":10800,"max_clock_drift":3600,"upgrade_path":[]},"last_consensus_state":{"height":{"revision_number":1,"revision_height":2},"timestamp":1234567890,"root":"YAdxKyKDg+tUQc5Dli2fYkJ2imznqbJ+UDfQ7y0QNlM=","next_validators_hash":"OJfJuH6dfiZI2d0uAxqamqfIVqV4c4oEAZigvJ8UqFQ="}}],"page":1,"total":1}
129// ----------- assert render clients/07-tendermint-1/consensus_states
130// {"items":[{"height":{"revision_number":1,"revision_height":2},"timestamp":1234567890,"root":"YAdxKyKDg+tUQc5Dli2fYkJ2imznqbJ+UDfQ7y0QNlM=","next_validators_hash":"OJfJuH6dfiZI2d0uAxqamqfIVqV4c4oEAZigvJ8UqFQ="}],"page":1,"total":1}
131// ----------- assert render client status
132// {"status":"Frozen"}
133
134// Events:
135// [
136// {
137// "type": "create_client",
138// "attrs": [
139// {
140// "key": "client_id",
141// "value": "07-tendermint-1"
142// },
143// {
144// "key": "client_type",
145// "value": "07-tendermint"
146// },
147// {
148// "key": "consensus_heights",
149// "value": "1/2"
150// }
151// ],
152// "pkg_path": "gno.land/r/aib/ibc/core"
153// },
154// {
155// "type": "client_misbehaviour",
156// "attrs": [
157// {
158// "key": "client_id",
159// "value": "07-tendermint-1"
160// },
161// {
162// "key": "client_type",
163// "value": "07-tendermint"
164// }
165// ],
166// "pkg_path": "gno.land/r/aib/ibc/core"
167// }
168// ]
169