Search Apps Documentation Source Content File Folder Download Copy Actions Download

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