z2aaaa_update_client_filetest.gno
9.17 Kb · 132 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 success with height older than clientState.LatestHeight
14func main(cur realm) {
15 // CreateClient and RegisterCounterparty
16 var (
17 chainID = "atomone-1"
18 height = uint64(2)
19 clientState = tmtesting.NewClientState(chainID, types.NewHeight(1, height))
20 apphash = tmtesting.Hash("apphash-2")
21 // priv=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==
22 val1 = tendermint.NewValidator("9DIBYr64rywKO3Kk6+743xDHcEU=",
23 "VMpO0RzmZu4OMVvsniYdeO/2eP+h1xeoAcHBTZC7Gfw=", 1)
24 // priv=nWg6ETc62tyxd94lh8fFaQnZKaAW6vlS0L/4lfseJuI14ZXUKp7AZROkflLFVF+SBg4wJVfzgzIKyWq3D066+g==
25 val2 = tendermint.NewValidator("y+naL3ubs9q1bXrY9+uRxY9c+J8=",
26 "NeGV1CqewGUTpH5SxVRfkgYOMCVX84MyCslqtw9Ouvo=", 1)
27 trustedValset = tendermint.NewValset(val1, val2)
28 consensusState = tmtesting.GenConsensusState(time.Now(), apphash, trustedValset.Hash())
29 )
30 clientID := core.CreateClient(cross(cur), clientState, consensusState)
31 core.RegisterCounterparty(cross(cur), clientID, [][]byte{[]byte("iavlStoreKey"), []byte("prefix2")}, "07-tendermint-2")
32
33 // Update clientID with height 5
34 // NOTE code generated by:
35 // go run -C ./cmd/gen-block-signatures . -apphash-seed=apphash-3 -chainid=atomone-1 -header-time-shift=2 -height=5 -new-validators=0 -privkeys=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==,nWg6ETc62tyxd94lh8fFaQnZKaAW6vlS0L/4lfseJuI14ZXUKp7AZROkflLFVF+SBg4wJVfzgzIKyWq3D066+g==
36 {
37 var (
38 apphash = tmtesting.Hash("apphash-3")
39 // priv=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==
40 val1 = tendermint.NewValidator("9DIBYr64rywKO3Kk6+743xDHcEU=", "VMpO0RzmZu4OMVvsniYdeO/2eP+h1xeoAcHBTZC7Gfw=", 10)
41 // priv=nWg6ETc62tyxd94lh8fFaQnZKaAW6vlS0L/4lfseJuI14ZXUKp7AZROkflLFVF+SBg4wJVfzgzIKyWq3D066+g==
42 val2 = tendermint.NewValidator("y+naL3ubs9q1bXrY9+uRxY9c+J8=", "NeGV1CqewGUTpH5SxVRfkgYOMCVX84MyCslqtw9Ouvo=", 10)
43 valset = tendermint.NewValset(val1, val2)
44 commitTimestamp = tmtesting.ToTime("2025-09-25T07:55:57.306746166Z")
45 newHeight = uint64(5)
46 newTimestamp = consensusState.Timestamp.Add(time.Minute * time.Duration(2))
47 nextValset = tendermint.NewValset(val1, val2)
48 trustedHeight = clientState.LatestHeight
49
50 signatures = []tendermint.CommitSig{
51 {
52 BlockIDFlag: tendermint.BlockIDFlagCommit,
53 ValidatorAddress: valset.Validators[0].Address,
54 Timestamp: commitTimestamp,
55 Signature: []byte("\x9f\x83\xd9\x54\xc8\x3e\x1f\x08\x83\xf3\x2a\xd5\x6e\xb6\x92\x47\x82\xad\x76\xcb\x46\xf2\x6c\xdc\x2e\x1a\x6c\xb6\x5f\x60\x14\x93\x41\xad\x5e\x97\xe0\x35\x11\xc7\x57\x26\xbd\x4f\x78\x66\x8b\x5e\xe4\x21\xd4\xb9\x34\x0d\x57\xeb\xd0\xab\xbd\xb6\xe7\xad\x69\x08"),
56 },
57 {
58 BlockIDFlag: tendermint.BlockIDFlagCommit,
59 ValidatorAddress: valset.Validators[1].Address,
60 Timestamp: commitTimestamp,
61 Signature: []byte("\xc7\x0f\x1e\x90\xee\x6b\xac\xf1\x86\xea\x67\xe4\xc4\x0c\xfe\xd8\xda\xf3\xd4\x1e\x8a\xbe\xdb\xca\xf0\x14\xdf\x71\x9d\x73\xa8\x4b\x74\x7f\x7e\xaf\xe1\x42\x22\xdc\x8f\xe8\xe2\x2e\x4e\x05\xbf\x70\x8a\xb0\x24\xf5\xd1\x7c\xb7\xa6\xec\xc3\x9e\xde\x6e\x40\xc6\x0b"),
62 },
63 }
64
65 msgHeader = tmtesting.NewMsgHeader(
66 chainID, newTimestamp, apphash, newHeight, trustedHeight, valset,
67 nextValset, trustedValset, signatures,
68 )
69 )
70 core.UpdateClient(cross(cur), clientID, msgHeader)
71 }
72
73 println("----------- assert render clients")
74 println(core.Render("clients"))
75 println("----------- assert render clients/07-tendermint-1/consensus_states")
76 println(core.Render("clients/" + clientID + "/consensus_states"))
77
78 // Second Update with height (3) < clientState.LatestHeight (5)
79 // NOTE code generated by:
80 // go run -C ./cmd/gen-block-signatures . -apphash-seed=apphash-4 -chainid=atomone-1 -header-time-shift=1 -height=3 -privkeys=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==,nWg6ETc62tyxd94lh8fFaQnZKaAW6vlS0L/4lfseJuI14ZXUKp7AZROkflLFVF+SBg4wJVfzgzIKyWq3D066+g==
81 {
82 var (
83 newHeight = uint64(3)
84 apphash = tmtesting.Hash("apphash-4")
85 // priv=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==
86 val1 = tendermint.NewValidator("9DIBYr64rywKO3Kk6+743xDHcEU=", "VMpO0RzmZu4OMVvsniYdeO/2eP+h1xeoAcHBTZC7Gfw=", 1)
87 // priv=nWg6ETc62tyxd94lh8fFaQnZKaAW6vlS0L/4lfseJuI14ZXUKp7AZROkflLFVF+SBg4wJVfzgzIKyWq3D066+g==
88 val2 = tendermint.NewValidator("y+naL3ubs9q1bXrY9+uRxY9c+J8=", "NeGV1CqewGUTpH5SxVRfkgYOMCVX84MyCslqtw9Ouvo=", 1)
89 valset = tendermint.NewValset(val1, val2)
90 commitTimestamp = tmtesting.ToTime("2025-09-25T07:55:57.306746166Z")
91 newTimestamp = consensusState.Timestamp.Add(time.Minute * time.Duration(1))
92 nextValset = tendermint.NewValset(val1, val2)
93 trustedHeight = clientState.LatestHeight
94
95 signatures = []tendermint.CommitSig{
96 {
97 BlockIDFlag: tendermint.BlockIDFlagCommit,
98 ValidatorAddress: valset.Validators[0].Address,
99 Timestamp: commitTimestamp,
100 Signature: []byte("\x4c\x75\x8c\x96\x1b\xf5\xa8\x4b\xba\xc4\x48\x68\xf2\x19\x4f\x38\x65\x3b\x33\x19\xa4\xcc\x17\x77\x27\x3b\xff\xc8\x0d\xc0\xc4\xb8\x66\xad\x13\x67\x9a\x01\x6d\x05\xb0\x70\x53\x6b\xe0\xb7\x28\x87\x05\x23\x39\xc9\xca\x6c\xdc\xd1\xae\x25\x42\xff\x58\x2b\xec\x03"),
101 },
102 {
103 BlockIDFlag: tendermint.BlockIDFlagCommit,
104 ValidatorAddress: valset.Validators[1].Address,
105 Timestamp: commitTimestamp,
106 Signature: []byte("\x78\xdd\x10\xad\x67\xa1\x4c\xeb\x9f\xe2\x73\x5c\x3b\x19\xea\xec\x26\x0c\x0a\x54\xb1\xec\x86\xf4\x20\x5b\x90\x5f\x53\x07\xe2\x98\xd5\x39\x69\x2e\x3a\x36\x35\xe6\xfb\x7b\xb9\x12\xfc\x99\x46\xe6\xf0\xd4\x28\x4b\xad\xdf\x18\x6c\xbc\xba\x4a\x32\xf8\xa6\x5f\x0a"),
107 },
108 }
109
110 msgHeader = tmtesting.NewMsgHeader(
111 chainID, newTimestamp, apphash, newHeight, trustedHeight, valset,
112 nextValset, trustedValset, signatures,
113 )
114 )
115 core.UpdateClient(cross(cur), clientID, msgHeader)
116 }
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}
123
124// Output:
125// ----------- assert render clients
126// {"items":[{"id":"07-tendermint-1","type":"07-tendermint","creator":"g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm","status":"Active","counterparty_client_id":"07-tendermint-2","counterparty_merke_prefix":["iavlStoreKey","prefix2"],"client_state":{"chain_id":"atomone-1","latest_height":{"revision_number":1,"revision_height":5},"frozen_height":{"revision_number":0,"revision_height":0},"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":5},"timestamp":1234568010,"root":"m9afpc+PXaYRHdGC7FkrzuzRNn8ONC1xRCzYYAPRCU8=","next_validators_hash":"cmlnaEh97r8fwZo58weAGWc3eqq+T3xXT9C88GVXRUc="}}],"page":1,"total":1}
127// ----------- assert render clients/07-tendermint-1/consensus_states
128// {"items":[{"height":{"revision_number":1,"revision_height":2},"timestamp":1234567890,"root":"YAdxKyKDg+tUQc5Dli2fYkJ2imznqbJ+UDfQ7y0QNlM=","next_validators_hash":"OJfJuH6dfiZI2d0uAxqamqfIVqV4c4oEAZigvJ8UqFQ="},{"height":{"revision_number":1,"revision_height":5},"timestamp":1234568010,"root":"m9afpc+PXaYRHdGC7FkrzuzRNn8ONC1xRCzYYAPRCU8=","next_validators_hash":"cmlnaEh97r8fwZo58weAGWc3eqq+T3xXT9C88GVXRUc="}],"page":1,"total":1}
129// ----------- assert render clients
130// {"items":[{"id":"07-tendermint-1","type":"07-tendermint","creator":"g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm","status":"Active","counterparty_client_id":"07-tendermint-2","counterparty_merke_prefix":["iavlStoreKey","prefix2"],"client_state":{"chain_id":"atomone-1","latest_height":{"revision_number":1,"revision_height":5},"frozen_height":{"revision_number":0,"revision_height":0},"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":5},"timestamp":1234568010,"root":"m9afpc+PXaYRHdGC7FkrzuzRNn8ONC1xRCzYYAPRCU8=","next_validators_hash":"cmlnaEh97r8fwZo58weAGWc3eqq+T3xXT9C88GVXRUc="}}],"page":1,"total":1}
131// ----------- assert render clients/07-tendermint-1/consensus_states
132// {"items":[{"height":{"revision_number":1,"revision_height":2},"timestamp":1234567890,"root":"YAdxKyKDg+tUQc5Dli2fYkJ2imznqbJ+UDfQ7y0QNlM=","next_validators_hash":"OJfJuH6dfiZI2d0uAxqamqfIVqV4c4oEAZigvJ8UqFQ="},{"height":{"revision_number":1,"revision_height":3},"timestamp":1234567950,"root":"2Ozc/7eCPf92LFCrs4rgtYM7BgkvxbEtsDdqi6BjWYk=","next_validators_hash":"OJfJuH6dfiZI2d0uAxqamqfIVqV4c4oEAZigvJ8UqFQ="},{"height":{"revision_number":1,"revision_height":5},"timestamp":1234568010,"root":"m9afpc+PXaYRHdGC7FkrzuzRNn8ONC1xRCzYYAPRCU8=","next_validators_hash":"cmlnaEh97r8fwZo58weAGWc3eqq+T3xXT9C88GVXRUc="}],"page":1,"total":1}