z2ii_update_client_filetest.gno
4.55 Kb · 86 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 fails on non-adjacent height because trusted valset VP<=1/3 in
14// commit signatures.
15func main(cur realm) {
16 // CreateClient and RegisterCounterparty
17 var (
18 chainID = "atomone-1"
19 height = uint64(2)
20 clientState = tmtesting.NewClientState(chainID, types.NewHeight(1, height))
21 apphash = tmtesting.Hash("apphash-2")
22 // priv=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==
23 val1 = tendermint.NewValidator("9DIBYr64rywKO3Kk6+743xDHcEU=", "VMpO0RzmZu4OMVvsniYdeO/2eP+h1xeoAcHBTZC7Gfw=", 10)
24 // priv=3nat0JSW5OC1AlXBZzlCNxraEo+TEzBRl25OSVd49mvXboFuK2f45zGOzR+Xw9c1zwBmuHRgJgbLC9g3f1aslQ==
25 val2 = tendermint.NewValidator("imYK9DxXfNOyhCng3Yd6gMf6D4A=", "126Bbitn+Ocxjs0fl8PXNc8AZrh0YCYGywvYN39WrJU=", 10)
26 // priv=lDm4YTzPBhuU3D1OlBCnAQuwU75TPgM20QBoqhHcTquNzr60+tlTHeXTxtx7N16PYCfWDw67DQzE821u4GmlBQ==
27 val3 = tendermint.NewValidator("5mrrMH2SmMLQuF8oIWFKdz7f/JM=", "jc6+tPrZUx3l08bcezdej2An1g8Ouw0MxPNtbuBppQU=", 10)
28 // priv=pLHvSa6Y0gYjNXwr5lWaXaZhDmQDqWJy8hU2037VKzmELkkBf2eUJmtWUtSickhrR408CHvfhhZxjJh7XMIhGQ==
29 val4 = tendermint.NewValidator("EW3bbo3ByJ24Q+Mg+SRoEfCUDV8=", "hC5JAX9nlCZrVlLUonJIa0eNPAh734YWcYyYe1zCIRk=", 10)
30
31 trustedValset = tendermint.NewValset(val1, val2, val3, val4)
32 consensusState = tmtesting.GenConsensusState(time.Now(), apphash, trustedValset.Hash())
33 )
34 clientID := core.CreateClient(cross(cur), clientState, consensusState)
35 core.RegisterCounterparty(cross(cur), clientID, [][]byte{[]byte("iavlStoreKey"), []byte("prefix2")}, "07-tendermint-2")
36
37 // Update clientID with only val1 from trusted validators
38 // NOTE code generated by:
39 // go run -C ./cmd/gen-block-signatures . -apphash-seed=apphash-3 -chainid=atomone-1 -header-time-shift=1 -height=5 -new-validators=2 -privkeys=8a6cAbQSpDbebmcTEhCMPhhr/SkL/2pizo60yzHRkN9Uyk7RHOZm7g4xW+yeJh147/Z4/6HXF6gBwcFNkLsZ/A==
40 {
41 var (
42 apphash = tmtesting.Hash("apphash-3")
43 // priv=PxtG6dspnQDl/+colVJk+hQ7I2YnrAmksifvpU6K+9lj5XzHQc989GB0qsKeB7AHK3KLGxZNhxePkyIAwQbLSw==
44 val5 = tendermint.NewValidator("F3eB3fOMcxmHSdDPWMpc1ItmJ/8=", "Y+V8x0HPfPRgdKrCngewBytyixsWTYcXj5MiAMEGy0s=", 10)
45 // priv=WUh+Zk10Y2DCt00T8b4dMM53r4n25n1YQ7e8uwk9P2SeJjaHexeabLnrbhaTMsmCgBt0ZyQyAi9WMTzXO5k9IA==
46 val6 = tendermint.NewValidator("snclKMFSS1jnr2BGOrlAyl92sOk=", "niY2h3sXmmy5624WkzLJgoAbdGckMgIvVjE81zuZPSA=", 10)
47
48 valset = tendermint.NewValset(val1, val5, val6)
49 commitTimestamp = tmtesting.ToTime("2025-09-25T07:55:57.306746166Z")
50 newHeight = uint64(5)
51 newTimestamp = consensusState.Timestamp.Add(time.Minute * time.Duration(1))
52 nextValset = tendermint.NewValset(val1, val5, val6)
53 trustedHeight = clientState.LatestHeight
54
55 signatures = []tendermint.CommitSig{
56 {
57 BlockIDFlag: tendermint.BlockIDFlagCommit,
58 ValidatorAddress: valset.Validators[0].Address,
59 Timestamp: commitTimestamp,
60 Signature: []byte("\x62\xfe\x4e\x31\x2a\x68\x50\x6b\x01\x07\xe3\x12\x88\xae\x6c\xee\xa3\x5a\xf5\xcd\xfb\xd6\x95\x3f\x26\x0b\x00\x6c\x4d\xbd\x91\xc8\x80\xeb\x3f\x94\x71\x75\x65\xa4\x11\x0f\x66\x63\x22\xf8\xe5\x1e\x08\x58\x39\x69\xd0\xf6\x82\x3c\xbf\xdc\xb7\x00\xa3\x4d\x36\x08"),
61 },
62 {
63 BlockIDFlag: tendermint.BlockIDFlagCommit,
64 ValidatorAddress: valset.Validators[1].Address,
65 Timestamp: commitTimestamp,
66 Signature: []byte("\xec\xa1\x7b\xf9\xa4\xab\x28\x6d\x6c\x17\xd8\x14\x69\xf4\x56\xad\x59\xaa\x24\x59\xae\x74\x60\x4c\x45\x6c\x67\x0b\x78\x28\x57\xc9\x15\xbf\x1f\x7c\xa0\x4b\xa7\x2d\x05\x11\x79\x24\xac\x07\x09\x7a\xe3\xaa\x46\x59\x44\x5f\xa9\x6d\xbc\x22\x24\x3e\xbc\x52\xfb\x0c"),
67 },
68 {
69 BlockIDFlag: tendermint.BlockIDFlagCommit,
70 ValidatorAddress: valset.Validators[2].Address,
71 Timestamp: commitTimestamp,
72 Signature: []byte("\x58\xac\xfb\x93\x7d\xc6\x83\xd4\xcf\x39\x8b\x4f\x91\xb8\x78\x63\xab\x75\x7f\x1d\xe5\x43\x2a\xb9\x68\x80\xb7\x73\x4d\x84\x59\x2d\x90\xf8\x24\x01\x3c\x6a\xfa\xb6\x7e\x2f\x0e\x3e\x66\x35\x3b\xe2\x2c\xa6\x53\xcc\xc3\xb8\x66\x1a\x54\xf3\xcf\x03\xc7\x8f\x3e\x0d"),
73 },
74 }
75
76 msgHeader = tmtesting.NewMsgHeader(
77 chainID, newTimestamp, apphash, newHeight, trustedHeight, valset,
78 nextValset, trustedValset, signatures,
79 )
80 )
81 core.UpdateClient(cross(cur), clientID, msgHeader)
82 }
83}
84
85// Error:
86// check trusted validators VP>13: not enough voting power, got 10, needed >13