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

z1i_on_send_packet_grc20_bypass_filetest.gno

1.88 Kb · 56 lines
 1// PKGPATH: gno.land/r/aib/main
 2package main
 3
 4// Regression test: a GRC20 send must be rejected when it does not originate
 5// from transfer.Transfer, even when the owner approved the transfer app.
 6
 7import (
 8	"chain"
 9	"testing"
10	"time"
11
12	tmtesting "gno.land/p/aib/ibc/lightclient/tendermint/testing"
13	"gno.land/p/aib/ibc/types"
14
15	"gno.land/r/aib/ibc/apps/testing/grc20test"
16	"gno.land/r/aib/ibc/apps/transfer"
17	"gno.land/r/aib/ibc/core"
18)
19
20func main(cur realm) {
21	var (
22		chainID        = "chain-id-2"
23		clientState    = tmtesting.NewClientState(chainID, types.NewHeight(2, 2))
24		apphash        = tmtesting.Hash("apphash")
25		trustedValset  = tmtesting.GenValset()
26		consensusState = tmtesting.GenConsensusState(time.Now(), apphash, trustedValset.Hash())
27	)
28	clientID := core.CreateClient(cross(cur), clientState, consensusState)
29	core.RegisterCounterparty(cross(cur), clientID, [][]byte{[]byte("iavlStoreKey"), []byte("prefix2")}, "07-tendermint-2")
30
31	owner := cur.Previous().Address()
32	grc20test.Mint(cross(cur), owner, 1000)
33
34	transferAppAddr := chain.PackageAddress("gno.land/r/aib/ibc/apps/transfer")
35	grc20test.Approve(cross(cur), owner, transferAppAddr, 100)
36
37	grc20regKey := "gno.land/r/aib/ibc/apps/testing/grc20test." + grc20test.Slug
38	payload := transfer.NewFungibleTokenPacketData(transfer.GRC20Alias(grc20regKey), "100", owner.String(), "atone1user", "")
39	packet := types.MsgSendPacket{
40		SourceClient:     clientID,
41		TimeoutTimestamp: uint64(time.Now().Add(time.Hour).Unix()),
42		Payloads: []types.Payload{{
43			SourcePort:      transfer.PortID,
44			DestinationPort: transfer.PortID,
45			Encoding:        transfer.EncodingProtobuf,
46			Value:           payload.ProtoMarshal(),
47			Version:         transfer.V1,
48		}},
49	}
50
51	testing.SetOriginCaller(owner)
52	core.SendPacket(cross(cur), packet)
53}
54
55// Error:
56// send packet failed for payload #0 app "transfer": GRC20 packet must be initiated through transfer.Transfer