Search Apps Documentation Source Content File Folder Download Copy Actions Download

z4a_on_recv_packet_filetest.gno

11.32 Kb · 311 lines
  1// PKGPATH: gno.land/r/aib/main
  2package main
  3
  4import (
  5	"encoding/base64"
  6	"encoding/hex"
  7	"time"
  8
  9	tmtesting "gno.land/p/aib/ibc/lightclient/tendermint/testing"
 10	"gno.land/p/aib/ibc/types"
 11	"gno.land/p/aib/ics23"
 12	"gno.land/p/nt/testutils/v0"
 13	"gno.land/r/aib/ibc/apps/transfer"
 14	"gno.land/r/aib/ibc/core"
 15)
 16
 17// OnRecvPacket: success with native coins
 18func main(cur realm) {
 19	var (
 20		chainID       = "chain-id-2"
 21		trustedHeight = types.NewHeight(2, 2)
 22		clientState   = tmtesting.NewClientState(chainID, trustedHeight)
 23		// NOTE this apphash was provided by the gen-proof command below.
 24		apphash, _     = hex.DecodeString("18ccfc84ab4c908313fab9bc9382046e13c76fd02043f1d63b84f3cbd7f03e86")
 25		trustedValset  = tmtesting.GenValset()
 26		consensusState = tmtesting.GenConsensusState(time.Now(), apphash, trustedValset.Hash())
 27		counterpartyID = "07-tendermint-42"
 28	)
 29	clientID := core.CreateClient(cross(cur), clientState, consensusState)
 30	core.RegisterCounterparty(cross(cur), clientID, [][]byte{[]byte("iavlStoreKey"), []byte("prefix2")}, counterpartyID)
 31
 32	receiver := testutils.TestAddress("receiver")
 33	payload := transfer.NewFungibleTokenPacketData("uphoton", "100", "atone1user", receiver.String(), "")
 34	payloadBz := payload.ProtoMarshal()
 35	// NOTE this base64 value is used in payload.value in the gen-proof command below.
 36	println("Payload proto:", base64.StdEncoding.EncodeToString(payloadBz))
 37
 38	// Generate the proof of existence of the packet commitment for the
 39	// counterparty chain.
 40	specs := ics23.IavlSpec()
 41	// NOTE code generated by:
 42	// go run -C ./cmd/gen-proof . 'prefix2' '07-tendermint-42' 'packet' '{"sequence":1,"source_client":"07-tendermint-42","destination_client":"07-tendermint-1","timeout_timestamp":1234571490,"payloads":[{"source_port":"transfer","destination_port":"transfer","encoding":"application/x-protobuf", "value":"Cgd1cGhvdG9uEgMxMDAaCmF0b25lMXVzZXIiKGcxd2Zqa3hldGZ3ZWpoeWg2bHRhMDQ3aDZsdGEwNDdoNmxsbTgyeWw=","version":"ics20-1"}]}'
 43	proof := []ics23.CommitmentProof{
 44
 45		// iavl proof
 46		ics23.CommitmentProof_Exist{
 47			Exist: &ics23.ExistenceProof{
 48				Key:   []byte("\x70\x72\x65\x66\x69\x78\x32\x30\x37\x2d\x74\x65\x6e\x64\x65\x72\x6d\x69\x6e\x74\x2d\x34\x32\x01\x00\x00\x00\x00\x00\x00\x00\x01"),
 49				Value: []byte("\x88\x03\x13\x78\xc6\xf5\x14\xf4\x8a\x0c\x5b\x83\xc9\x1c\xcc\x68\xc5\x81\x97\xc8\x9e\xf7\x19\x3e\xa0\xd4\x65\x47\x54\x59\x83\x58"),
 50				Leaf: &ics23.LeafOp{
 51					Hash:         specs.LeafSpec.Hash,
 52					PrehashKey:   specs.LeafSpec.PrehashKey,
 53					PrehashValue: specs.LeafSpec.PrehashValue,
 54					Length:       specs.LeafSpec.Length,
 55					Prefix:       []byte("\x00\x02\x02"),
 56				},
 57				Path: []*ics23.InnerOp{
 58					{
 59						Hash:   specs.InnerSpec.Hash,
 60						Prefix: []byte("\x02\x04\x02\x20\x35\xf8\xea\x80\x53\x90\xe0\x84\x85\x4f\x39\x9b\x42\xcc\xde\xae\xa3\x3a\x1d\xed\xc1\x15\x63\x8a\xc4\x8d\x06\x00\x63\x7d\xba\x1f\x20"),
 61						Suffix: []byte(""),
 62					},
 63					{
 64						Hash:   specs.InnerSpec.Hash,
 65						Prefix: []byte("\x04\x08\x02\x20"),
 66						Suffix: []byte("\x20\x79\x8e\x2c\xaa\x96\xfd\xfb\xa3\x76\xdd\xeb\x47\x99\x99\x54\xd2\xf4\x7e\x65\x16\x22\x64\xb0\x53\x6a\xb5\xdf\xf7\xfc\x0a\x2e\x07"),
 67					},
 68					{
 69						Hash:   specs.InnerSpec.Hash,
 70						Prefix: []byte("\x06\x0c\x02\x20\x9a\xf3\x7d\xd5\x95\xa0\x19\x08\x03\xb5\xe0\x5a\xae\xf4\x2a\xe3\xfa\xd4\x99\xe4\xfb\xe3\x7f\x7c\xd3\x1c\xad\xff\x22\xa9\xee\x74\x20"),
 71						Suffix: []byte(""),
 72					},
 73				},
 74			},
 75		},
 76
 77		// rootmulti proof
 78		ics23.CommitmentProof_Exist{
 79			Exist: &ics23.ExistenceProof{
 80				Key:   []byte("\x69\x61\x76\x6c\x53\x74\x6f\x72\x65\x4b\x65\x79"),
 81				Value: []byte("\x7d\xcc\x4a\xcc\x76\xa1\xf0\x23\x45\x9a\x76\xff\xc8\x27\x0f\x1a\xde\x8c\x5a\x03\xd9\x29\x94\xa4\xed\x59\x52\xd4\x26\x63\x81\x3c"),
 82				Leaf: &ics23.LeafOp{
 83					Hash:         specs.LeafSpec.Hash,
 84					PrehashKey:   specs.LeafSpec.PrehashKey,
 85					PrehashValue: specs.LeafSpec.PrehashValue,
 86					Length:       specs.LeafSpec.Length,
 87					Prefix:       []byte("\x00"),
 88				},
 89				Path: []*ics23.InnerOp{},
 90			},
 91		},
 92	}
 93
 94	recvPacket := types.MsgRecvPacket{
 95		Packet: types.Packet{
 96			Sequence:          1,
 97			SourceClient:      counterpartyID,
 98			DestinationClient: clientID,
 99			TimeoutTimestamp:  uint64(time.Now().Add(time.Hour).Unix()),
100			Payloads: []types.Payload{{
101				SourcePort:      transfer.PortID,
102				DestinationPort: transfer.PortID,
103				Encoding:        transfer.EncodingProtobuf,
104				Value:           payloadBz,
105				Version:         transfer.V1,
106			}},
107		},
108		ProofCommitment: proof,
109		ProofHeight:     trustedHeight,
110	}
111	// ibc/CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8
112	voucherDenom := transfer.NewDenom("uphoton", transfer.NewHop(transfer.PortID, clientID)).IBCDenom()
113	println("\nreceiver voucher balance before RecvPacket:", transfer.VoucherBalanceOf(voucherDenom, receiver))
114
115	res := core.RecvPacket(cross(cur), recvPacket)
116
117	println("\nack res:", res)
118	println("\nreceiver voucher balance after RecvPacket:", transfer.VoucherBalanceOf(voucherDenom, receiver))
119	println("\n----------- assert render /denoms")
120	println(transfer.Render("denoms"))
121	println("\n----------- assert render /denoms/" + voucherDenom)
122	println(transfer.Render("denoms/" + voucherDenom))
123	println("\n----------- assert render voucher")
124	println(transfer.Render("voucher/" + voucherDenom))
125	println("\n----------- assert render voucher balance")
126	println(transfer.Render("voucher/" + voucherDenom + "/balance/" + receiver.String()))
127	println("\n----------- assert render vouchers")
128	println(transfer.Render("vouchers"))
129}
130
131// Output:
132// Payload proto: Cgd1cGhvdG9uEgMxMDAaCmF0b25lMXVzZXIiKGcxd2Zqa3hldGZ3ZWpoeWg2bHRhMDQ3aDZsdGEwNDdoNmxsbTgyeWw=
133//
134// receiver voucher balance before RecvPacket: 0
135//
136// ack res: (2 gno.land/p/aib/ibc/types.ResponseResultType)
137//
138// receiver voucher balance after RecvPacket: 100
139//
140// ----------- assert render /denoms
141// {"items":[{"base":"uphoton","path":"transfer/07-tendermint-1/uphoton","denom":"ibc/CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8"}],"page":1,"total":1}
142//
143// ----------- assert render /denoms/ibc/CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8
144// {"base":"uphoton","path":"transfer/07-tendermint-1/uphoton","denom":"ibc/CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8"}
145//
146// ----------- assert render voucher
147// {"denom":"ibc/CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8","grc20reg_key":"gno.land/r/aib/ibc/apps/transfer.CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8","name":"uphoton","symbol":"CAEF9CA8CE6","decimals":0,"total_supply":100}
148//
149// ----------- assert render voucher balance
150// {"denom":"ibc/CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8","address":"g1wfjkxetfwejhyh6lta047h6lta047h6llm82yl","balance":100}
151//
152// ----------- assert render vouchers
153// {"items":[{"denom":"ibc/CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8","grc20reg_key":"gno.land/r/aib/ibc/apps/transfer.CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8","name":"uphoton","symbol":"CAEF9CA8CE6","decimals":0,"total_supply":100}],"page":1,"total":1}
154
155// Events:
156// [
157//   {
158//     "type": "create_client",
159//     "attrs": [
160//       {
161//         "key": "client_id",
162//         "value": "07-tendermint-1"
163//       },
164//       {
165//         "key": "client_type",
166//         "value": "07-tendermint"
167//       },
168//       {
169//         "key": "consensus_heights",
170//         "value": "2/2"
171//       }
172//     ],
173//     "pkg_path": "gno.land/r/aib/ibc/core"
174//   },
175//   {
176//     "type": "recv_packet",
177//     "attrs": [
178//       {
179//         "key": "packet_source_client",
180//         "value": "07-tendermint-42"
181//       },
182//       {
183//         "key": "packet_dest_client",
184//         "value": "07-tendermint-1"
185//       },
186//       {
187//         "key": "packet_sequence",
188//         "value": "1"
189//       },
190//       {
191//         "key": "packet_timeout_timestamp",
192//         "value": "1234571490"
193//       },
194//       {
195//         "key": "encoded_packet_hex",
196//         "value": "0801121030372d74656e6465726d696e742d34321a0f30372d74656e6465726d696e742d3120e2a1d8cc042a7b0a087472616e7366657212087472616e736665721a0769637332302d3122166170706c69636174696f6e2f782d70726f746f6275662a440a077570686f746f6e12033130301a0a61746f6e6531757365722228673177666a6b7865746677656a687968366c746130343768366c746130343768366c6c6d3832796c"
197//       }
198//     ],
199//     "pkg_path": "gno.land/r/aib/ibc/core"
200//   },
201//   {
202//     "type": "denomination",
203//     "attrs": [
204//       {
205//         "key": "denom_hash",
206//         "value": "CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8"
207//       },
208//       {
209//         "key": "denom",
210//         "value": "{\"base\":\"uphoton\",\"path\":\"transfer/07-tendermint-1/uphoton\",\"denom\":\"ibc/CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8\"}"
211//       }
212//     ],
213//     "pkg_path": "gno.land/r/aib/ibc/apps/transfer"
214//   },
215//   {
216//     "type": "register",
217//     "attrs": [
218//       {
219//         "key": "pkgpath",
220//         "value": "gno.land/r/aib/ibc/apps/transfer"
221//       },
222//       {
223//         "key": "slug",
224//         "value": "CAEF9CA8CE6C302D73A831A49E34E59149D3A9AD96CCEBDFBF62F6D5710D92D8"
225//       }
226//     ],
227//     "pkg_path": "gno.land/r/demo/defi/grc20reg"
228//   },
229//   {
230//     "type": "Transfer",
231//     "attrs": [
232//       {
233//         "key": "token",
234//         "value": "gno.land/r/aib/ibc/apps/transfer.CAEF9CA8CE6"
235//       },
236//       {
237//         "key": "from",
238//         "value": ""
239//       },
240//       {
241//         "key": "to",
242//         "value": "g1wfjkxetfwejhyh6lta047h6lta047h6llm82yl"
243//       },
244//       {
245//         "key": "value",
246//         "value": "100"
247//       }
248//     ],
249//     "pkg_path": "gno.land/p/demo/tokens/grc20"
250//   },
251//   {
252//     "type": "fungible_token_packet",
253//     "attrs": [
254//       {
255//         "key": "sender",
256//         "value": "atone1user"
257//       },
258//       {
259//         "key": "receiver",
260//         "value": "g1wfjkxetfwejhyh6lta047h6lta047h6llm82yl"
261//       },
262//       {
263//         "key": "denom",
264//         "value": "transfer/07-tendermint-1/uphoton"
265//       },
266//       {
267//         "key": "amount",
268//         "value": "100"
269//       },
270//       {
271//         "key": "memo",
272//         "value": ""
273//       },
274//       {
275//         "key": "success",
276//         "value": "true"
277//       }
278//     ],
279//     "pkg_path": "gno.land/r/aib/ibc/apps/transfer"
280//   },
281//   {
282//     "type": "write_acknowledgement",
283//     "attrs": [
284//       {
285//         "key": "packet_source_client",
286//         "value": "07-tendermint-42"
287//       },
288//       {
289//         "key": "packet_dest_client",
290//         "value": "07-tendermint-1"
291//       },
292//       {
293//         "key": "packet_sequence",
294//         "value": "1"
295//       },
296//       {
297//         "key": "packet_timeout_timestamp",
298//         "value": "1234571490"
299//       },
300//       {
301//         "key": "encoded_packet_hex",
302//         "value": "0801121030372d74656e6465726d696e742d34321a0f30372d74656e6465726d696e742d3120e2a1d8cc042a7b0a087472616e7366657212087472616e736665721a0769637332302d3122166170706c69636174696f6e2f782d70726f746f6275662a440a077570686f746f6e12033130301a0a61746f6e6531757365722228673177666a6b7865746677656a687968366c746130343768366c746130343768366c6c6d3832796c"
303//       },
304//       {
305//         "key": "encoded_acknowledgement_hex",
306//         "value": "0a117b22726573756c74223a2241513d3d227d"
307//       }
308//     ],
309//     "pkg_path": "gno.land/r/aib/ibc/core"
310//   }
311// ]