feat: remaining record content types to support #79
@ -5,10 +5,6 @@ import "gogoproto/gogo.proto";
|
||||
|
||||
option go_package = "github.com/cerc-io/laconicd/x/registry/types";
|
||||
|
||||
message HashReference {
|
||||
map<string,string> hash_reference=1;
|
||||
}
|
||||
|
||||
message ServiceProviderRecord {
|
||||
string bond_id = 1 [(gogoproto.moretags) = "json:\"bondId\" yaml:\"bondId\""];
|
||||
string laconic_id = 2 [(gogoproto.moretags) = "json:\"laconicId\" yaml:\"laconicId\""];
|
||||
@ -30,10 +26,10 @@ message ServiceProviderRecord {
|
||||
|
||||
message WebsiteRegistrationRecord {
|
||||
string url = 1 [(gogoproto.moretags) = "json:\"url\" yaml:\"url\""];
|
||||
HashReference repo_hash_reference = 2
|
||||
[(gogoproto.moretags) = "json:\"repoHashReference\" yaml:\"repoHashReference\""];
|
||||
HashReference build_artifact_ref = 3 [(gogoproto.moretags) = "json:\"buildArtifactHashRef\" yaml:\"buildArtifactHashRef\""];
|
||||
HashReference tls_cert_ref = 4 [(gogoproto.moretags) = "json:\"tlsCertHashRef\" yaml:\"tlsCertHashRef\""];
|
||||
map<string,string> repo_reference = 2
|
||||
[(gogoproto.moretags) = "json:\"repoReference\" yaml:\"repoReference\""];
|
||||
map<string,string> build_artifact_ref = 3 [(gogoproto.moretags) = "json:\"buildArtifactRef\" yaml:\"buildArtifactRef\""];
|
||||
|
||||
map<string,string> tls_cert_ref = 4 [(gogoproto.moretags) = "json:\"tlsCertRef\" yaml:\"tlsCertRef\""];
|
||||
string type = 5 [(gogoproto.moretags) = "json:\"type\" yaml:\"type\""];
|
||||
string version = 6 [(gogoproto.moretags) = "json:\"version\" yaml:\"version\""];
|
||||
}
|
||||
@ -47,36 +43,36 @@ message GitRepository{
|
||||
}
|
||||
|
||||
message Binary{
|
||||
HashReference hash_reference=1;
|
||||
map<string,string> hash_reference=1;
|
||||
string targeted_arch=2;
|
||||
string runtime_version=3;
|
||||
HashReference repo_reference=4;
|
||||
map<string,string> repo_reference=4;
|
||||
string version=5;
|
||||
string type=6;
|
||||
}
|
||||
|
||||
message DockerImage{
|
||||
string image_id=1;
|
||||
HashReference binary_reference=2;
|
||||
HashReference repo_reference=3;
|
||||
map<string,string> binary_reference=2;
|
||||
map<string,string> repo_reference=3;
|
||||
string version=4;
|
||||
string type=5;
|
||||
}
|
||||
|
||||
message WatcherRegistrationRecord{
|
||||
WatcherMetadata metadata =1;
|
||||
HashReference repo_reference=2;
|
||||
map<string,string> repo_reference=2;
|
||||
WASMBinary wasm=3;
|
||||
string version=4;
|
||||
string type=5;
|
||||
|
||||
message WatcherMetadata{
|
||||
string version=1;
|
||||
HashReference chain_reference=2;
|
||||
map<string,string> chain_reference=2;
|
||||
}
|
||||
|
||||
message WASMBinary{
|
||||
HashReference hash_reference=1;
|
||||
map<string,string> hash_reference=1;
|
||||
WASMBinaryMetadata metadata=2;
|
||||
}
|
||||
|
||||
@ -87,16 +83,16 @@ message WatcherRegistrationRecord{
|
||||
}
|
||||
|
||||
message ResponderContract{
|
||||
HashReference service_provider_ref=1;
|
||||
HashReference auction_ref=2;
|
||||
HashReference watcher_ref=3;
|
||||
map<string,string> service_provider_ref=1;
|
||||
map<string,string> auction_ref=2;
|
||||
map<string,string> watcher_ref=3;
|
||||
string version=4;
|
||||
string type=5;
|
||||
}
|
||||
|
||||
message JSPackage{
|
||||
HashReference repo_reference=1;
|
||||
HashReference js_package_ref=2;
|
||||
map<string,string> repo_reference=1;
|
||||
map<string,string> js_package_ref=2;
|
||||
string version=3;
|
||||
string type=4;
|
||||
string name =5;
|
||||
@ -109,5 +105,5 @@ message ChainRegistrationRecord{
|
||||
string version=4;
|
||||
string chain_id=5;
|
||||
string network_id=6;
|
||||
HashReference genesis_hash=7;
|
||||
map<string,string> genesis_hash=7;
|
||||
}
|
@ -3,7 +3,7 @@ record:
|
||||
/: QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9
|
||||
targeted_arch: x86_64
|
||||
runtime_version: go 1.18
|
||||
repo_hash_reference:
|
||||
repo_reference:
|
||||
/: QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D
|
||||
version: 1.0.0
|
||||
type: Binary
|
@ -8,5 +8,6 @@ record:
|
||||
type: ChainRegistrationRecord
|
||||
version: 0.11.2
|
||||
chain_id: laconic_9000-1
|
||||
network_id: 1392
|
||||
genesis_hash: f6fbe71210275adc7c7ef585a72c065cdb85f0c8d13dea0f229fd7c22d445a26
|
||||
network_id: "1392"
|
||||
genesis_hash:
|
||||
/: f6fbe71210275adc7c7ef585a72c065cdb85f0c8d13dea0f229fd7c22d445a26
|
@ -1,8 +1,8 @@
|
||||
record:
|
||||
image_id: 77af4d6b9913
|
||||
binary_hash_reference:
|
||||
binary_reference:
|
||||
/: QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9
|
||||
repo_hash_reference:
|
||||
repo_reference:
|
||||
/: QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D
|
||||
version: 1.0.0
|
||||
type: DockerImage
|
@ -1,7 +1,7 @@
|
||||
record:
|
||||
repo_hash_reference:
|
||||
repo_reference:
|
||||
/: QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9
|
||||
js_package_hash_ref:
|
||||
js_package_ref:
|
||||
/: QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D
|
||||
version: 1.0.0
|
||||
type: JSPackage
|
||||
|
@ -1,9 +1,9 @@
|
||||
record:
|
||||
service_provider_hash_ref:
|
||||
service_provider_ref:
|
||||
/: QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9
|
||||
auction_hash_ref:
|
||||
auction_ref:
|
||||
/: QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D
|
||||
watcher_hash_ref:
|
||||
watcher_ref:
|
||||
/: QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR
|
||||
version: 1.0.0
|
||||
type: ResponderContract
|
@ -1,9 +1,9 @@
|
||||
record:
|
||||
metadata:
|
||||
version: 0.32.0
|
||||
chain_hash_reference:
|
||||
chain_reference:
|
||||
/: QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9
|
||||
repo_hash_reference:
|
||||
repo_reference:
|
||||
/: QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D
|
||||
wasm:
|
||||
hash_reference:
|
||||
|
@ -1,10 +1,10 @@
|
||||
record:
|
||||
type: WebsiteRegistrationRecord
|
||||
url: https://cerc.io
|
||||
repo_hash_reference:
|
||||
repo_reference:
|
||||
/: QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D
|
||||
build_artifact_hash_ref:
|
||||
build_artifact_ref:
|
||||
/: QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9
|
||||
tls_cert_hash_ref:
|
||||
tls_cert_ref:
|
||||
/: QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR
|
||||
version: 1.0.0
|
@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"reflect"
|
||||
Sensitive package importCertain system packages contain functions which may be a possible source of non-determinism ## Sensitive package import
Certain system packages contain functions which may be a possible source of non-determinism
[Show more details](https://github.com/cerc-io/laconicd/security/code-scanning/599)
Sensitive package importCertain system packages contain functions which may be a possible source of non-determinism ## Sensitive package import
Certain system packages contain functions which may be a possible source of non-determinism
[Show more details](https://github.com/cerc-io/laconicd/security/code-scanning/1208)
|
||||
"sort"
|
||||
"time"
|
||||
|
||||
@ -316,55 +317,43 @@ func (k Keeper) PutRecord(ctx sdk.Context, record types.Record) {
|
||||
}
|
||||
|
||||
func (k Keeper) ProcessAttributes(ctx sdk.Context, record types.RecordType) error {
|
||||
switch record.Attributes["type"] {
|
||||
case "ServiceProviderRecord":
|
||||
{
|
||||
// #nosec G705
|
||||
for key := range record.Attributes {
|
||||
if key == "x500" {
|
||||
// #nosec G705
|
||||
for x500Key, x500Val := range record.Attributes[key].(map[string]interface{}) {
|
||||
indexKey := GetAttributesIndexKey(fmt.Sprintf("x500%s", x500Key), x500Val)
|
||||
if err := k.SetAttributeMapping(ctx, indexKey, record.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
indexKey := GetAttributesIndexKey(key, record.Attributes[key])
|
||||
if err := k.SetAttributeMapping(ctx, indexKey, record.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
case "WebsiteRegistrationRecord":
|
||||
{
|
||||
// #nosec G705
|
||||
for key := range record.Attributes {
|
||||
indexKey := GetAttributesIndexKey(key, record.Attributes[key])
|
||||
if err := k.SetAttributeMapping(ctx, indexKey, record.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
default:
|
||||
return fmt.Errorf("unsupported record type %s", record.Attributes["type"])
|
||||
if err := k.insertAttributes(ctx, record.ID, record.Attributes, ""); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
expiryTimeKey := GetAttributesIndexKey(ExpiryTimeAttributeName, record.ExpiryTime)
|
||||
if err := k.SetAttributeMapping(ctx, expiryTimeKey, record.ID); err != nil {
|
||||
if err := k.setAttributeMapping(ctx, expiryTimeKey, record.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (k Keeper) insertAttributes(ctx sdk.Context, recordID string, attr interface{}, keyPrefix string) error {
|
||||
if reflect.TypeOf(attr).Kind() == reflect.Map {
|
||||
val := attr.(map[string]interface{})
|
||||
for key := range val {
|
||||
newKeyPrefix := fmt.Sprint(keyPrefix + key)
|
||||
if err := k.insertAttributes(ctx, recordID, val[key], newKeyPrefix); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
indexKey := GetAttributesIndexKey(keyPrefix, attr)
|
||||
if err := k.setAttributeMapping(ctx, indexKey, recordID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetAttributesIndexKey(key string, value interface{}) []byte {
|
||||
keyString := fmt.Sprintf("%s%s", key, value)
|
||||
return append(PrefixAttributesIndex, []byte(keyString)...)
|
||||
}
|
||||
|
||||
func (k Keeper) SetAttributeMapping(ctx sdk.Context, key []byte, recordID string) error {
|
||||
func (k Keeper) setAttributeMapping(ctx sdk.Context, key []byte, recordID string) error {
|
||||
store := ctx.KVStore(k.storeKey)
|
||||
var recordIds []string
|
||||
if store.Has(key) {
|
||||
|
2766
x/registry/types/attributes.pb.go
generated
2766
x/registry/types/attributes.pb.go
generated
File diff suppressed because it is too large
Load Diff
@ -198,6 +198,97 @@ func GetJSONBytesFromAny(any codectypes.Any) ([]byte, error) {
|
||||
panic("Proto unmarshal error")
|
||||
}
|
||||
|
||||
bz, err = json.Marshal(attributes)
|
||||
if err != nil {
|
||||
panic("JSON marshal error")
|
||||
}
|
||||
}
|
||||
case "GitRepository":
|
||||
{
|
||||
var attributes GitRepository
|
||||
err := proto.Unmarshal(any.Value, &attributes)
|
||||
if err != nil {
|
||||
panic("Proto unmarshal error")
|
||||
}
|
||||
|
||||
bz, err = json.Marshal(attributes)
|
||||
if err != nil {
|
||||
panic("JSON marshal error")
|
||||
}
|
||||
}
|
||||
case "Binary":
|
||||
{
|
||||
var attributes Binary
|
||||
err := proto.Unmarshal(any.Value, &attributes)
|
||||
if err != nil {
|
||||
panic("Proto unmarshal error")
|
||||
}
|
||||
|
||||
bz, err = json.Marshal(attributes)
|
||||
if err != nil {
|
||||
panic("JSON marshal error")
|
||||
}
|
||||
}
|
||||
case "DockerImage":
|
||||
{
|
||||
var attributes DockerImage
|
||||
err := proto.Unmarshal(any.Value, &attributes)
|
||||
if err != nil {
|
||||
panic("Proto unmarshal error")
|
||||
}
|
||||
|
||||
bz, err = json.Marshal(attributes)
|
||||
if err != nil {
|
||||
panic("JSON marshal error")
|
||||
}
|
||||
}
|
||||
case "WatcherRegistrationRecord":
|
||||
{
|
||||
var attributes WatcherRegistrationRecord
|
||||
err := proto.Unmarshal(any.Value, &attributes)
|
||||
if err != nil {
|
||||
panic("Proto unmarshal error")
|
||||
}
|
||||
|
||||
bz, err = json.Marshal(attributes)
|
||||
if err != nil {
|
||||
panic("JSON marshal error")
|
||||
}
|
||||
}
|
||||
case "ResponderContract":
|
||||
{
|
||||
var attributes ResponderContract
|
||||
err := proto.Unmarshal(any.Value, &attributes)
|
||||
if err != nil {
|
||||
panic("Proto unmarshal error")
|
||||
}
|
||||
|
||||
bz, err = json.Marshal(attributes)
|
||||
if err != nil {
|
||||
panic("JSON marshal error")
|
||||
}
|
||||
}
|
||||
case "JSPackage":
|
||||
{
|
||||
var attributes JSPackage
|
||||
err := proto.Unmarshal(any.Value, &attributes)
|
||||
if err != nil {
|
||||
panic("Proto unmarshal error")
|
||||
}
|
||||
|
||||
bz, err = json.Marshal(attributes)
|
||||
if err != nil {
|
||||
panic("JSON marshal error")
|
||||
}
|
||||
}
|
||||
case "ChainRegistrationRecord":
|
||||
{
|
||||
var attributes ChainRegistrationRecord
|
||||
err := proto.Unmarshal(any.Value, &attributes)
|
||||
if err != nil {
|
||||
panic("Proto unmarshal error")
|
||||
}
|
||||
|
||||
bz, err = json.Marshal(attributes)
|
||||
if err != nil {
|
||||
panic("JSON marshal error")
|
||||
|
Loading…
Reference in New Issue
Block a user
This was underspecified on my part, instead of a
raw_multicodec
field and araw_binary
field, all we need is ahash_reference
field. And this reference will be a CID or multihash which uses the raw mutliformat prefix and references the binary as an IPLD object.Let's rename this to
JSPackage
and add astring name=5;
fieldThis will reference a registered
GitRepository
record by CID/multihashGitRepository
also has arepo_reference
field which will contain a qualitative/non-content-hash-reference e.g. a github or gitea web url.It might be helpful to signal in the naming of the various
reference
fields which references are content-hash => content references vs one's that are not. E.g.hash_reference
vsreference
.Note:
hash_reference
to aGitRepository
IPLD objectNote:
hash_reference
to binary IPLD objectNote:
hash_reference
to aGitRepository
IPLD objectNote:
hash_reference
to aChainRegistrationRecord
IPLD objectNote:
hash_reference
to a WASM IPLD objectNote:
hash_reference
toServiceProviderRecord
IPLD objectNote:
hash_reference
toWatcherRegistrationRecord
IPLD objectNote:
hash_reference
to auction result IPLD objectNote:
hash_reference
toJSPackage
IPLD objectThere is also a npm_package_reference (CID) in this message. Should we go with renaming repo_reference with repo_hash_reference and npm_package_reference with js_package_hash_ref?
We can avoid adding
hash
to the field names and instead we should revert to using a/
sub-mapping to denote CID/link