Skip to content

Commit 5564547

Browse files
author
Quinn Hou
authored
Add revealed event (#129)
1 parent 26101e5 commit 5564547

2 files changed

Lines changed: 119 additions & 0 deletions

File tree

lib/go/events/revealed.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package events
2+
3+
import (
4+
"fmt"
5+
"github.com/onflow/cadence"
6+
jsoncdc "github.com/onflow/cadence/encoding/json"
7+
"strings"
8+
)
9+
10+
const (
11+
// EventRevealed specifies that there is a Revealed Event on a PackNFT Contract located at the address
12+
EventRevealed = "PackNFT.Revealed"
13+
)
14+
15+
type RevealedEvent interface {
16+
Id() uint64
17+
Salt() string
18+
NFTs() string
19+
}
20+
21+
type revealedEvent cadence.Event
22+
23+
var _ RevealedEvent = (*revealedEvent)(nil)
24+
25+
func (evt revealedEvent) Id() uint64 {
26+
return uint64(evt.Fields[0].(cadence.UInt64))
27+
}
28+
29+
func (evt revealedEvent) Salt() string {
30+
return string(evt.Fields[1].(cadence.String))
31+
}
32+
33+
func (evt revealedEvent) NFTs() string {
34+
return string(evt.Fields[2].(cadence.String))
35+
}
36+
37+
func (evt revealedEvent) validate() error {
38+
if evt.EventType.QualifiedIdentifier != EventRevealed {
39+
return fmt.Errorf("error validating event: event is not a valid revealed event, expected type %s, got %s",
40+
EventRevealed, evt.EventType.QualifiedIdentifier)
41+
}
42+
return nil
43+
}
44+
45+
func parseNFTs(nft string) []string {
46+
return strings.Split(nft, ",")
47+
}
48+
49+
func DecodeRevealedEvent(b []byte) (RevealedEvent, error) {
50+
value, err := jsoncdc.Decode(b)
51+
if err != nil {
52+
return nil, err
53+
}
54+
event := revealedEvent(value.(cadence.Event))
55+
if err := event.validate(); err != nil {
56+
return nil, fmt.Errorf("error decoding event: %w", err)
57+
}
58+
return event, nil
59+
}

lib/go/events/revealed_test.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package events
2+
3+
import (
4+
"fmt"
5+
"github.com/stretchr/testify/require"
6+
"testing"
7+
8+
"github.com/onflow/cadence"
9+
jsoncdc "github.com/onflow/cadence/encoding/json"
10+
"github.com/onflow/cadence/runtime/tests/utils"
11+
"github.com/stretchr/testify/assert"
12+
)
13+
14+
func TestCadenceEvents_Reveal(t *testing.T) {
15+
var (
16+
packID = uint64(10)
17+
salt = "salt"
18+
19+
momentID1 = uint64(1)
20+
momentID2 = uint64(2)
21+
momentID3 = uint64(3)
22+
momentIDs = fmt.Sprintf(`%d,%d,%d`, momentID1, momentID2, momentID3)
23+
)
24+
25+
revealedEventType := cadence.EventType{
26+
Location: utils.TestLocation,
27+
QualifiedIdentifier: "PackNFT.Revealed",
28+
Fields: []cadence.Field{
29+
{
30+
Identifier: "id",
31+
Type: cadence.UInt32Type{},
32+
},
33+
{
34+
Identifier: "salt",
35+
Type: cadence.StringType{},
36+
},
37+
{
38+
Identifier: "nfts",
39+
Type: cadence.StringType{},
40+
},
41+
},
42+
}
43+
44+
revealedEvent := cadence.NewEvent([]cadence.Value{
45+
cadence.NewUInt64(packID),
46+
cadence.NewString(salt),
47+
cadence.NewString(momentIDs),
48+
}).WithType(&revealedEventType)
49+
50+
revealedPayload, err := jsoncdc.Encode(revealedEvent)
51+
require.NoError(t, err, "failed to encode revealed cadence event")
52+
53+
decodedRevealedEventType, err := DecodeRevealedEvent(revealedPayload)
54+
require.NoError(t, err, "failed to decode revealed cadence event")
55+
56+
assert.Equal(t, packID, decodedRevealedEventType.Id())
57+
assert.Equal(t, salt, decodedRevealedEventType.Salt())
58+
assert.Equal(t, momentIDs, decodedRevealedEventType.NFTs())
59+
60+
}

0 commit comments

Comments
 (0)