Search Apps Documentation Source Content File Folder Download Copy Actions Download State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

path.gno

4.44 Kb · 158 lines
  1package types
  2
  3import "bytes"
  4
  5var (
  6	// Slot constants (Ethereum-style storage layout)
  7	CLIENT_STATE [32]byte = [32]byte{
  8		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  9		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 10		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 11		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 12	}
 13	CONSENSUS_STATE [32]byte = [32]byte{
 14		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 15		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 16		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 17		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
 18	}
 19	CONNECTIONS [32]byte = [32]byte{
 20		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 21		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 22		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 23		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
 24	}
 25	CHANNELS [32]byte = [32]byte{
 26		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 27		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 28		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 29		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
 30	}
 31	PACKETS [32]byte = [32]byte{
 32		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 33		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 34		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 35		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
 36	}
 37	PACKET_ACKS [32]byte = [32]byte{
 38		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 39		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 40		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 41		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
 42	}
 43	MEMBERSHIP_PROOF [32]byte = [32]byte{
 44		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 45		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 46		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 47		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
 48	}
 49	NON_MEMBERSHIP_PROOF [32]byte = [32]byte{
 50		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 51		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 52		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 53		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
 54	}
 55	// Sentinel values stored for commitments
 56	COMMITMENT_MAGIC H256 = [32]byte{
 57		0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 58		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 59		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 60		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 61	}
 62	COMMITMENT_MAGIC_ACK H256 = [32]byte{
 63		0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 64		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 65		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 66		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 67	}
 68	NON_MEMBERSHIP_COMMITMENT_VALUE H256 = [32]byte{
 69		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 70		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 71		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 72		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
 73	}
 74)
 75
 76func ClientStatePath(clientId ClientId) H256 {
 77	return Keccak(bytes.Join([][]byte{
 78		CLIENT_STATE[:],
 79		u32ToH256(uint32(clientId)),
 80	}, nil))
 81}
 82
 83func ConsensusStatePath(clientId ClientId, height Height) H256 {
 84	return Keccak(bytes.Join([][]byte{
 85		CONSENSUS_STATE[:],
 86		u32ToH256(uint32(clientId)),
 87		u64ToH256(height.RevisionHeight),
 88	}, nil))
 89}
 90
 91func ConnectionPath(connectionId ConnectionId) H256 {
 92	return Keccak(bytes.Join([][]byte{
 93		CONNECTIONS[:],
 94		u32ToH256(uint32(connectionId)),
 95	}, nil))
 96}
 97
 98func ChannelPath(channelId ChannelId) H256 {
 99	return Keccak(bytes.Join([][]byte{
100		CHANNELS[:],
101		u32ToH256(uint32(channelId)),
102	}, nil))
103}
104
105func mergeAck(ack H256) H256 {
106	ack[0] = COMMITMENT_MAGIC[0]
107	return ack
108}
109
110func PacketCommitmentPath(packet Packet) (H256, error) {
111	hash, err := CommitPacket(packet)
112	if err != nil {
113		return H256{}, err
114	}
115
116	return BatchPacketsPath(hash), nil
117}
118
119func PacketAcknowledgementPath(packet Packet) (H256, error) {
120	hash, err := CommitPacket(packet)
121	if err != nil {
122		return H256{}, err
123	}
124
125	return BatchReceiptsPath(hash), nil
126}
127
128func BatchPacketsPath(batchHash H256) H256 {
129	return Keccak(bytes.Join([][]byte{
130		PACKETS[:],
131		batchHash[:],
132	}, nil))
133}
134
135func BatchReceiptsPath(batchHash H256) H256 {
136	return Keccak(bytes.Join([][]byte{
137		PACKET_ACKS[:],
138		batchHash[:],
139	}, nil))
140}
141
142func MembershipProofPath(clientId ClientId, proofHeight uint64, path []byte) H256 {
143	return Keccak(bytes.Join([][]byte{
144		MEMBERSHIP_PROOF[:],
145		u32ToH256(uint32(clientId)),
146		u64ToH256(proofHeight),
147		path,
148	}, nil))
149}
150
151func NonMembershipProofPath(clientId ClientId, proofHeight uint64, path []byte) H256 {
152	return Keccak(bytes.Join([][]byte{
153		NON_MEMBERSHIP_PROOF[:],
154		u32ToH256(uint32(clientId)),
155		u64ToH256(proofHeight),
156		path,
157	}, nil))
158}