Skip to content

Commit

Permalink
Implement the changes discussed in the call
Browse files Browse the repository at this point in the history
  • Loading branch information
muXxer committed Nov 9, 2023
1 parent b22a3e5 commit 8d8d88e
Show file tree
Hide file tree
Showing 10 changed files with 96 additions and 96 deletions.
28 changes: 14 additions & 14 deletions api_v3.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ var (

anchorOutputV3FeatBlocksArrRules = &serix.ArrayRules{
Min: 0, // Min: -
Max: 3, // Max: SenderFeature, MetadataFeature, GovernorMetadataFeature
Max: 3, // Max: SenderFeature, MetadataFeature, StateMetadataFeature
ValidationMode: serializer.ArrayValidationModeNoDuplicates |
serializer.ArrayValidationModeLexicalOrdering |
serializer.ArrayValidationModeAtMostOneOfEachTypeByte,
Expand Down Expand Up @@ -342,29 +342,29 @@ func V3API(protoParams ProtocolParameters) API {
)

must(api.RegisterTypeSettings(MetadataFeatureEntriesKey(""),
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsByte).WithMinLen(1).WithMaxLen(64)),
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsByte)),
)
must(api.RegisterTypeSettings(MetadataFeatureEntriesValue{},
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsUint16).WithMinLen(0).WithMaxLen(1000)),
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsUint16)),
)
must(api.RegisterTypeSettings(MetadataFeatureEntries{},
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsByte).WithMinLen(1).WithMaxLen(64).WithMaxByteSize(8192)),
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsByte).WithMinLen(1).WithMaxByteSize(8192)),
)
must(api.RegisterTypeSettings(MetadataFeature{},
serix.TypeSettings{}.WithObjectType(uint8(FeatureMetadata))),
)

must(api.RegisterTypeSettings(GovernorMetadataFeatureEntriesKey(""),
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsByte).WithMinLen(1).WithMaxLen(64)),
must(api.RegisterTypeSettings(StateMetadataFeatureEntriesKey(""),
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsByte)),
)
must(api.RegisterTypeSettings(GovernorMetadataFeatureEntriesValue{},
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsUint16).WithMinLen(0).WithMaxLen(1000)),
must(api.RegisterTypeSettings(StateMetadataFeatureEntriesValue{},
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsUint16)),
)
must(api.RegisterTypeSettings(GovernorMetadataFeatureEntries{},
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsByte).WithMinLen(1).WithMaxLen(64).WithMaxByteSize(8192)),
must(api.RegisterTypeSettings(StateMetadataFeatureEntries{},
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsByte).WithMinLen(1).WithMaxByteSize(8192)),
)
must(api.RegisterTypeSettings(GovernorMetadataFeature{},
serix.TypeSettings{}.WithObjectType(uint8(FeatureMetadataGovernor))),
must(api.RegisterTypeSettings(StateMetadataFeature{},
serix.TypeSettings{}.WithObjectType(uint8(FeatureStateMetadata))),
)

must(api.RegisterTypeSettings(TagFeature{},
Expand All @@ -382,7 +382,7 @@ func V3API(protoParams ProtocolParameters) API {
must(api.RegisterInterfaceObjects((*Feature)(nil), (*SenderFeature)(nil)))
must(api.RegisterInterfaceObjects((*Feature)(nil), (*IssuerFeature)(nil)))
must(api.RegisterInterfaceObjects((*Feature)(nil), (*MetadataFeature)(nil)))
must(api.RegisterInterfaceObjects((*Feature)(nil), (*GovernorMetadataFeature)(nil)))
must(api.RegisterInterfaceObjects((*Feature)(nil), (*StateMetadataFeature)(nil)))
must(api.RegisterInterfaceObjects((*Feature)(nil), (*TagFeature)(nil)))
must(api.RegisterInterfaceObjects((*Feature)(nil), (*NativeTokenFeature)(nil)))
must(api.RegisterInterfaceObjects((*Feature)(nil), (*BlockIssuerFeature)(nil)))
Expand Down Expand Up @@ -521,7 +521,7 @@ func V3API(protoParams ProtocolParameters) API {

must(api.RegisterInterfaceObjects((*anchorOutputFeature)(nil), (*SenderFeature)(nil)))
must(api.RegisterInterfaceObjects((*anchorOutputFeature)(nil), (*MetadataFeature)(nil)))
must(api.RegisterInterfaceObjects((*anchorOutputFeature)(nil), (*GovernorMetadataFeature)(nil)))
must(api.RegisterInterfaceObjects((*anchorOutputFeature)(nil), (*StateMetadataFeature)(nil)))

must(api.RegisterTypeSettings(AnchorOutputImmFeatures{},
serix.TypeSettings{}.WithLengthPrefixType(serix.LengthPrefixTypeAsByte).WithArrayRules(anchorOutputV3ImmFeatBlocksArrRules),
Expand Down
22 changes: 11 additions & 11 deletions builder/output_builder_anchor.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,15 +96,15 @@ func (builder *AnchorOutputBuilder) ImmutableSender(senderAddr iotago.Address) *
// Metadata sets/modifies an iotago.MetadataFeature on the output.
func (builder *AnchorOutputBuilder) Metadata(entries iotago.MetadataFeatureEntries) *AnchorOutputBuilder {
builder.output.Features.Upsert(&iotago.MetadataFeature{Entries: entries})
builder.stateCtrlReq = true
builder.govCtrlReq = true

return builder
}

// GovernorMetadata sets/modifies an iotago.GovernorMetadataFeature on the output.
func (builder *AnchorOutputBuilder) GovernorMetadata(entries iotago.GovernorMetadataFeatureEntries) *AnchorOutputBuilder {
builder.output.Features.Upsert(&iotago.GovernorMetadataFeature{Entries: entries})
builder.govCtrlReq = true
// StateMetadata sets/modifies an iotago.StateMetadataFeature on the output.
func (builder *AnchorOutputBuilder) StateMetadata(entries iotago.StateMetadataFeatureEntries) *AnchorOutputBuilder {
builder.output.Features.Upsert(&iotago.StateMetadataFeature{Entries: entries})
builder.stateCtrlReq = true

return builder
}
Expand Down Expand Up @@ -170,9 +170,9 @@ func (trans *AnchorStateTransition) Mana(mana iotago.Mana) *AnchorStateTransitio
return trans.builder.Mana(mana).StateTransition()
}

// Metadata sets/modifies an iotago.MetadataFeature as a mutable feature on the output.
func (trans *AnchorStateTransition) Metadata(entries iotago.MetadataFeatureEntries) *AnchorStateTransition {
return trans.builder.Metadata(entries).StateTransition()
// StateMetadata sets/modifies an iotago.StateMetadataFeature on the output.
func (trans *AnchorStateTransition) StateMetadata(entries iotago.StateMetadataFeatureEntries) *AnchorStateTransition {
return trans.builder.StateMetadata(entries).StateTransition()
}

// Sender sets/modifies an iotago.SenderFeature as a mutable feature on the output.
Expand Down Expand Up @@ -211,9 +211,9 @@ func (trans *AnchorGovernanceTransition) Sender(senderAddr iotago.Address) *Anch
return trans.builder.Sender(senderAddr).GovernanceTransition()
}

// GovernorMetadata sets/modifies an iotago.GovernorMetadataFeature on the output.
func (trans *AnchorGovernanceTransition) GovernorMetadata(entries iotago.GovernorMetadataFeatureEntries) *AnchorGovernanceTransition {
return trans.builder.GovernorMetadata(entries).GovernanceTransition()
// Metadata sets/modifies an iotago.MetadataFeature as a mutable feature on the output.
func (trans *AnchorGovernanceTransition) Metadata(entries iotago.MetadataFeatureEntries) *AnchorGovernanceTransition {
return trans.builder.Metadata(entries).GovernanceTransition()
}

// Builder returns the AnchorOutputBuilder.
Expand Down
26 changes: 13 additions & 13 deletions builder/output_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,17 +152,17 @@ func TestAccountOutputBuilder(t *testing.T) {

func TestAnchorOutputBuilder(t *testing.T) {
var (
stateCtrl = tpkg.RandEd25519Address()
stateCtrlNew = tpkg.RandEd25519Address()
gov = tpkg.RandEd25519Address()
amount iotago.BaseToken = 1337
metadataEntries = iotago.MetadataFeatureEntries{"data": []byte("123456")}
immMetadataEntries = iotago.MetadataFeatureEntries{"data": []byte("654321")}
immSender = tpkg.RandEd25519Address()
stateCtrl = tpkg.RandEd25519Address()
stateCtrlNew = tpkg.RandEd25519Address()
gov = tpkg.RandEd25519Address()
amount iotago.BaseToken = 1337
stateMetadataEntries = iotago.StateMetadataFeatureEntries{"data": []byte("123456")}
immMetadataEntries = iotago.MetadataFeatureEntries{"data": []byte("654321")}
immSender = tpkg.RandEd25519Address()
)

anchorOutput, err := builder.NewAnchorOutputBuilder(stateCtrl, gov, amount).
Metadata(metadataEntries).
StateMetadata(stateMetadataEntries).
ImmutableMetadata(immMetadataEntries).
ImmutableSender(immSender).
Build()
Expand All @@ -176,7 +176,7 @@ func TestAnchorOutputBuilder(t *testing.T) {
&iotago.GovernorAddressUnlockCondition{Address: gov},
},
Features: iotago.AnchorOutputFeatures{
&iotago.MetadataFeature{Entries: metadataEntries},
&iotago.StateMetadataFeature{Entries: stateMetadataEntries},
},
ImmutableFeatures: iotago.AnchorOutputImmFeatures{
&iotago.SenderFeature{Address: immSender},
Expand All @@ -186,17 +186,17 @@ func TestAnchorOutputBuilder(t *testing.T) {
require.True(t, expected.Equal(anchorOutput), "anchor output should be equal")

const newAmount iotago.BaseToken = 7331
newMetadataEntries := iotago.MetadataFeatureEntries{"newData": []byte("newState")}
newMetadataEntries := iotago.StateMetadataFeatureEntries{"newData": []byte("newState")}

//nolint:forcetypeassert // we can safely assume that this is an AnchorOutput
expectedCpy := expected.Clone().(*iotago.AnchorOutput)
expectedCpy.Amount = newAmount
expectedCpy.StateIndex++
expectedCpy.Features.Upsert(&iotago.MetadataFeature{Entries: newMetadataEntries})
expectedCpy.Features.Upsert(&iotago.StateMetadataFeature{Entries: newMetadataEntries})

updatedOutput, err := builder.NewAnchorOutputBuilderFromPrevious(anchorOutput).StateTransition().
Amount(newAmount).
Metadata(newMetadataEntries).
StateMetadata(newMetadataEntries).
Builder().Build()
require.NoError(t, err)
require.Equal(t, expectedCpy, updatedOutput)
Expand All @@ -214,7 +214,7 @@ func TestAnchorOutputBuilder(t *testing.T) {
&iotago.GovernorAddressUnlockCondition{Address: gov},
},
Features: iotago.AnchorOutputFeatures{
&iotago.MetadataFeature{Entries: metadataEntries},
&iotago.StateMetadataFeature{Entries: stateMetadataEntries},
},
ImmutableFeatures: iotago.AnchorOutputImmFeatures{
&iotago.SenderFeature{Address: immSender},
Expand Down
16 changes: 8 additions & 8 deletions feat.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ const (
FeatureIssuer
// FeatureMetadata denotes a MetadataFeature.
FeatureMetadata
// FeatureMetadataGovernor denotes a GovernorMetadataFeature.
FeatureMetadataGovernor
// FeatureStateMetadata denotes a StateMetadataFeature.
FeatureStateMetadata
// FeatureTag denotes a TagFeature.
FeatureTag
// NativeTokenFeature denotes a NativeTokenFeature.
Expand All @@ -63,7 +63,7 @@ var featNames = [FeatureStaking + 1]string{
"SenderFeature",
"IssuerFeature",
"MetadataFeature",
"GovernorMetadataFeature",
"StateMetadataFeature",
"TagFeature",
"NativeTokenFeature",
"BlockIssuerFeature",
Expand Down Expand Up @@ -212,15 +212,15 @@ func (f FeatureSet) Metadata() *MetadataFeature {
return b.(*MetadataFeature)
}

// GovernorMetadata returns the GovernorMetadataFeature in the set or nil.
func (f FeatureSet) GovernorMetadata() *GovernorMetadataFeature {
b, has := f[FeatureMetadataGovernor]
// StateMetadata returns the StateMetadataFeature in the set or nil.
func (f FeatureSet) StateMetadata() *StateMetadataFeature {
b, has := f[FeatureStateMetadata]
if !has {
return nil
}

//nolint:forcetypeassert // we can safely assume that this is a GovernorMetadataFeature
return b.(*GovernorMetadataFeature)
//nolint:forcetypeassert // we can safely assume that this is a StateMetadataFeature
return b.(*StateMetadataFeature)
}

// Tag returns the TagFeature in the set or nil.
Expand Down
34 changes: 17 additions & 17 deletions feat_metadata_governor.gen.go → feat_metadata_state.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion gen/feat_metadata_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
package gen

//go:generate go run github.com/iotaledger/hive.go/codegen/features/cmd@13da292 feat_metadata.tmpl ../feat_metadata.gen.go MetadataFeature m "" "FeatureType=FeatureMetadata,"
//go:generate go run github.com/iotaledger/hive.go/codegen/features/cmd@13da292 feat_metadata.tmpl ../feat_metadata_governor.gen.go GovernorMetadataFeature m "" "FeatureType=FeatureMetadataGovernor,"
//go:generate go run github.com/iotaledger/hive.go/codegen/features/cmd@13da292 feat_metadata.tmpl ../feat_metadata_state.gen.go StateMetadataFeature m "" "FeatureType=FeatureStateMetadata,"
2 changes: 1 addition & 1 deletion output_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ func TestOutputsDeSerialize(t *testing.T) {
},
Features: iotago.AnchorOutputFeatures{
&iotago.SenderFeature{Address: tpkg.RandEd25519Address()},
&iotago.MetadataFeature{Entries: iotago.MetadataFeatureEntries{"data": tpkg.RandBytes(100)}},
&iotago.StateMetadataFeature{Entries: iotago.StateMetadataFeatureEntries{"data": tpkg.RandBytes(100)}},
},
ImmutableFeatures: iotago.AnchorOutputImmFeatures{
&iotago.IssuerFeature{Address: tpkg.RandEd25519Address()},
Expand Down
Loading

0 comments on commit 8d8d88e

Please sign in to comment.