Skip to content

Commit 049abb7

Browse files
anatoly256jrkhan
andauthored
Add remix (#163) (#177)
* Add remix (#163) * add remix to contracts * add remix to transactions * add remix to lib * fix misprints * add function to get moment's subedition * fix tests * fix tests * refactor subEdition contract * add subEdition tests * add new function to create subEdition resource * add documentation * refactor SubeditionAdmin * add comments/transactions/tests * add events * Revert spacings * Fix comments * use test abstractions in subedition_test.go * fix comments * fix comments * add comment to SubeditionAdminStoragePath() * add subeditionId to MomentMinted event * change SubeditionCreated event/add length check to MintMoment event * change subeditionID to subeditionId * remove spacing changes in assets.go (#178) Co-authored-by: Jamil Khan <[email protected]>
1 parent 7d20f64 commit 049abb7

21 files changed

+1755
-7
lines changed

contracts/TopShot.cdc

+297-4
Large diffs are not rendered by default.

lib/go/contracts/internal/assets/assets.go

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/go/events/moment.go

+8
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ type MomentMintedEvent interface {
1717
PlayId() uint32
1818
SetId() uint32
1919
SerialNumber() uint32
20+
SubeditionId() uint32
2021
}
2122

2223
type momentMintedEvent cadence.Event
@@ -37,6 +38,13 @@ func (evt momentMintedEvent) SerialNumber() uint32 {
3738
return uint32(evt.Fields[3].(cadence.UInt32))
3839
}
3940

41+
func (evt momentMintedEvent) SubeditionId() uint32 {
42+
if len(evt.Fields) < 5 {
43+
return 0
44+
}
45+
return uint32(evt.Fields[4].(cadence.UInt32))
46+
}
47+
4048
func (evt momentMintedEvent) validate() error {
4149
if evt.EventType.QualifiedIdentifier != EventMomentMinted {
4250
return fmt.Errorf("error validating event: event is not a valid moment minted event, expected type %s, got %s",

lib/go/events/moment_test.go

+8
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ func TestCadenceEvents_MomentMinted(t *testing.T) {
1515
playID := uint32(1234)
1616
setID := uint32(1234)
1717
serialNumber := uint32(1234)
18+
subeditionID := uint32(1234)
1819

1920
momentMintedEventType := cadence.EventType{
2021
Location: utils.TestLocation,
@@ -36,6 +37,10 @@ func TestCadenceEvents_MomentMinted(t *testing.T) {
3637
Identifier: "serialNumber",
3738
Type: cadence.UInt32Type{},
3839
},
40+
{
41+
Identifier: "subeditionId",
42+
Type: cadence.UInt32Type{},
43+
},
3944
},
4045
Initializer: []cadence.Parameter{},
4146
}
@@ -45,6 +50,7 @@ func TestCadenceEvents_MomentMinted(t *testing.T) {
4550
cadence.NewUInt32(playID),
4651
cadence.NewUInt32(setID),
4752
cadence.NewUInt32(serialNumber),
53+
cadence.NewUInt32(subeditionID),
4854
}).WithType(&momentMintedEventType)
4955

5056
payload, err := jsoncdc.Encode(momentMintedEvent)
@@ -57,4 +63,6 @@ func TestCadenceEvents_MomentMinted(t *testing.T) {
5763
assert.Equal(t, playID, decodedMomentMintedEventType.PlayId())
5864
assert.Equal(t, setID, decodedMomentMintedEventType.SetId())
5965
assert.Equal(t, serialNumber, decodedMomentMintedEventType.SerialNumber())
66+
assert.Equal(t, subeditionID, decodedMomentMintedEventType.SubeditionId())
67+
6068
}

lib/go/events/subedition.go

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package events
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/onflow/cadence"
7+
jsoncdc "github.com/onflow/cadence/encoding/json"
8+
)
9+
10+
var (
11+
EventSubeditionCreated = "TopShot.SubeditionCreated"
12+
)
13+
14+
type SubeditionCreatedEvent interface {
15+
SubeditionId() uint32
16+
Name() string
17+
MetaData() map[interface{}]interface{}
18+
}
19+
20+
type subeditionCreatedEvent cadence.Event
21+
22+
func (evt subeditionCreatedEvent) SubeditionId() uint32 {
23+
return evt.Fields[0].(cadence.UInt32).ToGoValue().(uint32)
24+
}
25+
26+
func (evt subeditionCreatedEvent) Name() string {
27+
return evt.Fields[1].(cadence.String).ToGoValue().(string)
28+
}
29+
30+
func (evt subeditionCreatedEvent) MetaData() map[interface{}]interface{} {
31+
return evt.Fields[2].(cadence.Dictionary).ToGoValue().(map[interface{}]interface{})
32+
}
33+
34+
func (evt subeditionCreatedEvent) validate() error {
35+
if evt.EventType.QualifiedIdentifier != EventSubeditionCreated {
36+
return fmt.Errorf("error validating event: event is not a valid subedition created event, expected type %s, got %s",
37+
EventSubeditionCreated, evt.EventType.QualifiedIdentifier)
38+
}
39+
return nil
40+
}
41+
42+
func DecodeSubeditionCreatedEvent(b []byte) (SubeditionCreatedEvent, error) {
43+
value, err := jsoncdc.Decode(nil, b)
44+
if err != nil {
45+
return nil, err
46+
}
47+
event := subeditionCreatedEvent(value.(cadence.Event))
48+
if err := event.validate(); err != nil {
49+
return nil, fmt.Errorf("error decoding event: %w", err)
50+
}
51+
return event, nil
52+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package events
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/onflow/cadence"
7+
jsoncdc "github.com/onflow/cadence/encoding/json"
8+
)
9+
10+
var (
11+
EventSubeditionAddedToMoment = "TopShot.SubeditionAddedToMoment"
12+
)
13+
14+
type SubeditionAddedToMomentEvent interface {
15+
MomentID() uint64
16+
SubeditionID() uint32
17+
}
18+
19+
type subeditionAddedToMomentEvent cadence.Event
20+
21+
func (evt subeditionAddedToMomentEvent) MomentID() uint64 {
22+
return evt.Fields[0].(cadence.UInt64).ToGoValue().(uint64)
23+
}
24+
25+
func (evt subeditionAddedToMomentEvent) SubeditionID() uint32 {
26+
return evt.Fields[1].(cadence.UInt32).ToGoValue().(uint32)
27+
}
28+
29+
func (evt subeditionAddedToMomentEvent) validate() error {
30+
if evt.EventType.QualifiedIdentifier != EventSubeditionAddedToMoment {
31+
return fmt.Errorf("error validating event: event is not a valid subedition added to moment event, expected type %s, got %s",
32+
EventSubeditionAddedToMoment, evt.EventType.QualifiedIdentifier)
33+
}
34+
return nil
35+
}
36+
37+
func DecodeSubeditionAddedToMomentEvent(b []byte) (SubeditionAddedToMomentEvent, error) {
38+
value, err := jsoncdc.Decode(nil, b)
39+
if err != nil {
40+
return nil, err
41+
}
42+
event := subeditionAddedToMomentEvent(value.(cadence.Event))
43+
if err := event.validate(); err != nil {
44+
return nil, fmt.Errorf("error decoding event: %w", err)
45+
}
46+
return event, nil
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package events
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
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_SubeditionAddedToMoment(t *testing.T) {
15+
var (
16+
subeditionID = uint32(1234)
17+
momentID = uint64(1234)
18+
)
19+
20+
playCreatedEventType := cadence.EventType{
21+
Location: utils.TestLocation,
22+
QualifiedIdentifier: "TopShot.SubeditionAddedToMoment",
23+
Fields: []cadence.Field{
24+
{
25+
Identifier: "momentID",
26+
Type: cadence.UInt64Type{},
27+
},
28+
{
29+
Identifier: "subeditionID",
30+
Type: cadence.UInt32Type{},
31+
},
32+
},
33+
Initializer: []cadence.Parameter{},
34+
}
35+
36+
subeditionAddedToMomentEvent := cadence.NewEvent([]cadence.Value{
37+
cadence.NewUInt64(momentID),
38+
cadence.NewUInt32(subeditionID),
39+
}).WithType(&playCreatedEventType)
40+
41+
payload, err := jsoncdc.Encode(subeditionAddedToMomentEvent)
42+
require.NoError(t, err, "failed to encode subedition added to moment cadence event")
43+
44+
decodedPlayCreatedEventType, err := DecodeSubeditionAddedToMomentEvent(payload)
45+
require.NoError(t, err, "failed to decode subedition added to moment cadence event")
46+
47+
assert.Equal(t, momentID, decodedPlayCreatedEventType.MomentID())
48+
assert.Equal(t, subeditionID, decodedPlayCreatedEventType.SubeditionID())
49+
}

lib/go/events/subedition_test.go

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package events
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
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_SubeditionCreated(t *testing.T) {
15+
var (
16+
id = uint32(1234)
17+
name = "Subedition #1"
18+
setKey = "setID"
19+
setValue = "1234"
20+
playKey = "playID"
21+
playValue = "1234"
22+
)
23+
24+
playCreatedEventType := cadence.EventType{
25+
Location: utils.TestLocation,
26+
QualifiedIdentifier: "TopShot.SubeditionCreated",
27+
Fields: []cadence.Field{
28+
{
29+
Identifier: "subeditionId",
30+
Type: cadence.UInt32Type{},
31+
},
32+
{
33+
Identifier: "name",
34+
Type: cadence.StringType{},
35+
},
36+
{
37+
Identifier: "metadata",
38+
Type: cadence.DictionaryType{},
39+
},
40+
},
41+
Initializer: []cadence.Parameter{},
42+
}
43+
44+
subeditionCreatedEvent := cadence.NewEvent([]cadence.Value{
45+
cadence.NewUInt32(id),
46+
NewCadenceString(name),
47+
cadence.NewDictionary([]cadence.KeyValuePair{
48+
{Key: NewCadenceString(setKey), Value: NewCadenceString(setValue)},
49+
{Key: NewCadenceString(playKey), Value: NewCadenceString(playValue)},
50+
}),
51+
}).WithType(&playCreatedEventType)
52+
53+
payload, err := jsoncdc.Encode(subeditionCreatedEvent)
54+
require.NoError(t, err, "failed to encode play created cadence event")
55+
56+
decodedSubeditionCreatedEventType, err := DecodeSubeditionCreatedEvent(payload)
57+
require.NoError(t, err, "failed to decode play created cadence event")
58+
59+
assert.Equal(t, id, decodedSubeditionCreatedEventType.SubeditionId())
60+
assert.Equal(t, name, decodedSubeditionCreatedEventType.Name())
61+
assert.Equal(t, map[interface{}]interface{}{
62+
setKey: setValue,
63+
playKey: playValue,
64+
}, decodedSubeditionCreatedEventType.MetaData())
65+
}

0 commit comments

Comments
 (0)