Search Apps Documentation Source Content File Folder Download Copy Actions Download

z2i_update_client_filetest.gno

3.57 Kb · 76 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 has no VP
14// in 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=",
24			"VMpO0RzmZu4OMVvsniYdeO/2eP+h1xeoAcHBTZC7Gfw=", 10)
25		// priv=nWg6ETc62tyxd94lh8fFaQnZKaAW6vlS0L/4lfseJuI14ZXUKp7AZROkflLFVF+SBg4wJVfzgzIKyWq3D066+g==
26		val2 = tendermint.NewValidator("y+naL3ubs9q1bXrY9+uRxY9c+J8=",
27			"NeGV1CqewGUTpH5SxVRfkgYOMCVX84MyCslqtw9Ouvo=", 10)
28		trustedValset  = tendermint.NewValset(val1, val2)
29		consensusState = tmtesting.GenConsensusState(time.Now(), apphash, trustedValset.Hash())
30	)
31	clientID := core.CreateClient(cross(cur), clientState, consensusState)
32	core.RegisterCounterparty(cross(cur), clientID, [][]byte{[]byte("iavlStoreKey"), []byte("prefix2")}, "07-tendermint-2")
33
34	// Update clientID with new validators only
35	// NOTE code generated by:
36	// go run -C ./cmd/gen-block-signatures . -apphash-seed=apphash-3 -chainid=atomone-1 -header-time-shift=1 -height=5 -new-validators=2
37	{
38		var (
39			apphash = tmtesting.Hash("apphash-3")
40			// priv=rnErOVQq+SdJ+UlyME2BhHVvuyHPzK56hbFtPSgITrKrzGiztXN0RhbO9N+iH2GCe55QOMppiGxWsQ3f16qfEw==
41			val1 = tendermint.NewValidator("Rho/aLfhumnjoRzjiNA9GffbR1E=", "q8xos7VzdEYWzvTfoh9hgnueUDjKaYhsVrEN39eqnxM=", 10)
42			// priv=LAkE78WcRUq36B+ZT5CQ449DiOoXv2XFoUswZC2EzV6GJNyZtFUF4bt0mIU3kaacfK0u+duopCSDPwhGX0LdkA==
43			val2            = tendermint.NewValidator("Xim/wU+2sv4dWzRF3bWFrnN5f+4=", "hiTcmbRVBeG7dJiFN5GmnHytLvnbqKQkgz8IRl9C3ZA=", 10)
44			valset          = tendermint.NewValset(val1, val2)
45			commitTimestamp = tmtesting.ToTime("2025-09-25T07:55:57.306746166Z")
46			newHeight       = uint64(5)
47			newTimestamp    = consensusState.Timestamp.Add(time.Minute * time.Duration(1))
48			nextValset      = tendermint.NewValset(val1, val2)
49			trustedHeight   = clientState.LatestHeight
50
51			signatures = []tendermint.CommitSig{
52				{
53					BlockIDFlag:      tendermint.BlockIDFlagCommit,
54					ValidatorAddress: valset.Validators[0].Address,
55					Timestamp:        commitTimestamp,
56					Signature:        []byte("\x04\xa7\x22\xee\xa7\x51\xbd\xa0\x41\x9f\x4e\x75\x88\xd1\x35\x3c\xa2\x3a\xc2\x51\xc0\x60\x61\x51\xeb\x57\x93\x23\xdf\x91\x31\x80\xc0\x39\xc6\x9f\x86\x04\x60\xf1\xbd\x8e\x9c\xcb\xb2\x3e\x5a\xa9\xbf\x3a\x2d\x33\x17\xd7\xc1\xef\x34\x0a\x06\x70\xbf\xd0\x62\x07"),
57				},
58				{
59					BlockIDFlag:      tendermint.BlockIDFlagCommit,
60					ValidatorAddress: valset.Validators[1].Address,
61					Timestamp:        commitTimestamp,
62					Signature:        []byte("\x3a\x00\x44\xd7\x2f\x1d\xb0\xfc\xc3\x70\x5a\x17\x60\xb9\xe1\x0b\x8e\x93\x92\x31\xad\xd7\x0b\xa8\xb2\x7f\x4a\xea\x4e\x78\xc3\xe7\xba\xd6\x15\x69\x83\x5a\xf2\x09\x03\xee\xa7\xe7\x2e\x79\xb5\x3b\x62\xf0\xdf\x66\x99\x40\x63\x40\x8e\x7b\xab\xd0\xa9\xb0\x39\x00"),
63				},
64			}
65
66			msgHeader = tmtesting.NewMsgHeader(
67				chainID, newTimestamp, apphash, newHeight, trustedHeight, valset,
68				nextValset, trustedValset, signatures,
69			)
70		)
71		core.UpdateClient(cross(cur), clientID, msgHeader)
72	}
73}
74
75// Error:
76// check trusted validators VP>6: not enough voting power, got 0, needed >6