diff --git a/gql/util.go b/gql/util.go index a6adabcb..54fbd354 100644 --- a/gql/util.go +++ b/gql/util.go @@ -163,7 +163,7 @@ func GetGQLAuction(auction *auctiontypes.Auction, bids []*auctiontypes.Bid) (*Au return &gqlAuction, nil } -func getReferences(ctx context.Context, resolver QueryResolver, r *registrytypes.RecordEncodable) ([]*Record, error) { +func getReferences(ctx context.Context, resolver QueryResolver, r *registrytypes.ReadableRecord) ([]*Record, error) { var ids []string // #nosec G705 @@ -184,7 +184,7 @@ func getReferences(ctx context.Context, resolver QueryResolver, r *registrytypes return resolver.GetRecordsByIds(ctx, ids) } -func getAttributes(r *registrytypes.RecordEncodable) ([]*KeyValue, error) { +func getAttributes(r *registrytypes.ReadableRecord) ([]*KeyValue, error) { return mapToKeyValuePairs(r.Attributes) } diff --git a/x/registry/client/cli/query.go b/x/registry/client/cli/query.go index 462940a6..90d5eecc 100644 --- a/x/registry/client/cli/query.go +++ b/x/registry/client/cli/query.go @@ -161,7 +161,7 @@ $ %s query %s list } recordsList := res.GetRecords() - records := make([]types.RecordEncodable, len(recordsList)) + records := make([]types.ReadableRecord, len(recordsList)) for i, record := range res.GetRecords() { records[i] = record.ToReadableRecord() } diff --git a/x/registry/client/cli/tx.go b/x/registry/client/cli/tx.go index 477fe643..50981772 100644 --- a/x/registry/client/cli/tx.go +++ b/x/registry/client/cli/tx.go @@ -370,8 +370,8 @@ $ %s tx %s delete-name [crn] } // GetPayloadFromFile Load payload object from YAML file. -func GetPayloadFromFile(filePath string) (*types.PayloadEncodable, error) { - var payload types.PayloadEncodable +func GetPayloadFromFile(filePath string) (*types.ReadablePayload, error) { + var payload types.ReadablePayload data, err := os.ReadFile(filePath) // #nosec G304 if err != nil { diff --git a/x/registry/client/testutil/grpc.go b/x/registry/client/testutil/grpc.go index 9c13c95f..04ae5c39 100644 --- a/x/registry/client/testutil/grpc.go +++ b/x/registry/client/testutil/grpc.go @@ -62,7 +62,7 @@ func (s *IntegrationTestSuite) TestGRPCQueryParams() { } } -//nolint: all +// nolint: all func (s *IntegrationTestSuite) TestGRPCQueryWhoIs() { val := s.network.Validators[0] sr := s.Require() @@ -182,7 +182,7 @@ func (s *IntegrationTestSuite) TestGRPCQueryLookup() { } } -//nolint: all +// nolint: all func (s *IntegrationTestSuite) TestGRPCQueryRecordExpiryQueue() { val := s.network.Validators[0] sr := s.Require() @@ -254,7 +254,7 @@ func (s *IntegrationTestSuite) TestGRPCQueryRecordExpiryQueue() { } } -//nolint: all +// nolint: all func (s *IntegrationTestSuite) TestGRPCQueryAuthorityExpiryQueue() { val := s.network.Validators[0] sr := s.Require() @@ -326,7 +326,7 @@ func (s *IntegrationTestSuite) TestGRPCQueryAuthorityExpiryQueue() { } } -//nolint: all +// nolint: all func (s *IntegrationTestSuite) TestGRPCQueryListRecords() { val := s.network.Validators[0] sr := s.Require() @@ -435,7 +435,7 @@ func (s *IntegrationTestSuite) TestGRPCQueryGetRecordByID() { } out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, args) sr.NoError(err) - var records []nstypes.RecordEncodable + var records []nstypes.ReadableRecord err = json.Unmarshal(out.Bytes(), &records) sr.NoError(err) return records[0].ID diff --git a/x/registry/client/testutil/query.go b/x/registry/client/testutil/query.go index 9aaeab18..e0a433ff 100644 --- a/x/registry/client/testutil/query.go +++ b/x/registry/client/testutil/query.go @@ -114,7 +114,7 @@ func (s *IntegrationTestSuite) TestGetCmdQueryForRecords() { sr.Error(err) } else { sr.NoError(err) - var records []types.RecordEncodable + var records []types.ReadableRecord err := json.Unmarshal(out.Bytes(), &records) sr.NoError(err) sr.Equal(tc.noOfRecords, len(records)) diff --git a/x/registry/client/testutil/tx.go b/x/registry/client/testutil/tx.go index b85634ab..f7e2bea0 100644 --- a/x/registry/client/testutil/tx.go +++ b/x/registry/client/testutil/tx.go @@ -606,7 +606,7 @@ func (s *IntegrationTestSuite) TestGetCmdDissociateBond() { cmd = cli.GetCmdList() out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, args) sr.NoError(err) - var records []nstypes.RecordEncodable + var records []nstypes.ReadableRecord err = json.Unmarshal(out.Bytes(), &records) sr.NoError(err) return records[0].ID @@ -848,7 +848,7 @@ func (s *IntegrationTestSuite) TestGetCmdAssociateBond() { cmd = cli.GetCmdList() out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, args) sr.NoError(err) - var records []nstypes.RecordEncodable + var records []nstypes.ReadableRecord err = json.Unmarshal(out.Bytes(), &records) sr.NoError(err) diff --git a/x/registry/keeper/keeper.go b/x/registry/keeper/keeper.go index a7f047e5..1f208f2a 100644 --- a/x/registry/keeper/keeper.go +++ b/x/registry/keeper/keeper.go @@ -242,9 +242,9 @@ func (k Keeper) GetRecordExpiryQueue(ctx sdk.Context) []*types.ExpiryQueueRecord } // ProcessSetRecord creates a record. -func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) (*types.RecordEncodable, error) { +func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) (*types.ReadableRecord, error) { payload := msg.Payload.ToReadablePayload() - record := types.RecordEncodable{Attributes: payload.Record, BondID: msg.BondId} + record := types.ReadableRecord{Attributes: payload.Record, BondID: msg.BondId} // Check signatures. resourceSignBytes, _ := record.GetSignBytes() @@ -285,7 +285,7 @@ func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) (*type return &record, nil } -func (k Keeper) processRecord(ctx sdk.Context, record *types.RecordEncodable, isRenewal bool) error { +func (k Keeper) processRecord(ctx sdk.Context, record *types.ReadableRecord, isRenewal bool) error { params := k.GetParams(ctx) rent := params.RecordRent diff --git a/x/registry/types/types.go b/x/registry/types/types.go index 6bd466b5..81b7f1aa 100644 --- a/x/registry/types/types.go +++ b/x/registry/types/types.go @@ -17,15 +17,27 @@ const ( // become specific to content records. schema records will either occupy a new message or have new // more general purpose helper types. -// PayloadEncodable represents a signed record payload that can be serialized from/to YAML. -type PayloadEncodable struct { +// ReadablePayload represents a signed record payload that can be serialized from/to YAML. +type ReadablePayload struct { Record map[string]interface{} `json:"record"` Signatures []Signature `json:"signatures"` } +// ReadableRecord represents a WNS record. +type ReadableRecord struct { + ID string `json:"id,omitempty"` + Names []string `json:"names,omitempty"` + BondID string `json:"bondId,omitempty"` + CreateTime string `json:"createTime,omitempty"` + ExpiryTime string `json:"expiryTime,omitempty"` + Deleted bool `json:"deleted,omitempty"` + Owners []string `json:"owners,omitempty"` + Attributes map[string]interface{} `json:"attributes,omitempty"` +} + // ToPayload converts PayloadEncodable to Payload object. // Why? Because go-amino can't handle maps: https://github.com/tendermint/go-amino/issues/4. -func (payloadObj *PayloadEncodable) ToPayload() Payload { +func (payloadObj *ReadablePayload) ToPayload() Payload { // Note: record directly contains the attributes here attributes := helpers.MarshalMapToJSONBytes(payloadObj.Record) payload := Payload{ @@ -41,8 +53,8 @@ func (payloadObj *PayloadEncodable) ToPayload() Payload { } // ToReadablePayload converts Payload to a serializable object -func (payload Payload) ToReadablePayload() PayloadEncodable { - var encodable PayloadEncodable +func (payload Payload) ToReadablePayload() ReadablePayload { + var encodable ReadablePayload encodable.Record = helpers.UnMarshalMapFromJSONBytes(payload.Record.Attributes) encodable.Signatures = payload.Signatures @@ -51,8 +63,8 @@ func (payload Payload) ToReadablePayload() PayloadEncodable { } // ToReadableRecord converts Record to a serializable object -func (r *Record) ToReadableRecord() RecordEncodable { - var resourceObj RecordEncodable +func (r *Record) ToReadableRecord() ReadableRecord { + var resourceObj ReadableRecord resourceObj.ID = r.Id resourceObj.BondID = r.BondId @@ -66,21 +78,9 @@ func (r *Record) ToReadableRecord() RecordEncodable { return resourceObj } -// RecordEncodable represents a WNS record. -type RecordEncodable struct { - ID string `json:"id,omitempty"` - Names []string `json:"names,omitempty"` - BondID string `json:"bondId,omitempty"` - CreateTime string `json:"createTime,omitempty"` - ExpiryTime string `json:"expiryTime,omitempty"` - Deleted bool `json:"deleted,omitempty"` - Owners []string `json:"owners,omitempty"` - Attributes map[string]interface{} `json:"attributes,omitempty"` -} - // ToRecordObj converts Record to RecordObj. // Why? Because go-amino can't handle maps: https://github.com/tendermint/go-amino/issues/4. -func (r *RecordEncodable) ToRecordObj() (Record, error) { +func (r *ReadableRecord) ToRecordObj() (Record, error) { attributes := helpers.MarshalMapToJSONBytes(r.Attributes) var resourceObj Record @@ -97,7 +97,7 @@ func (r *RecordEncodable) ToRecordObj() (Record, error) { } // CanonicalJSON returns the canonical JSON representation of the record. -func (r *RecordEncodable) CanonicalJSON() []byte { +func (r *ReadableRecord) CanonicalJSON() []byte { bytes, err := canonicalJson.Marshal(r.Attributes) if err != nil { panic("Record marshal error.") @@ -107,7 +107,7 @@ func (r *RecordEncodable) CanonicalJSON() []byte { } // GetSignBytes generates a record hash to be signed. -func (r *RecordEncodable) GetSignBytes() ([]byte, []byte) { +func (r *ReadableRecord) GetSignBytes() ([]byte, []byte) { // Double SHA256 hash. // Input to the first round of hashing. @@ -127,7 +127,7 @@ func (r *RecordEncodable) GetSignBytes() ([]byte, []byte) { } // GetCID gets the record CID. -func (r *RecordEncodable) GetCID() (string, error) { +func (r *ReadableRecord) GetCID() (string, error) { id, err := helpers.GetCid(r.CanonicalJSON()) if err != nil { return "", err