Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}