diff --git a/charts/device-definitions-api/templates/secret.yaml b/charts/device-definitions-api/templates/secret.yaml index 20e89724..7c7c7548 100644 --- a/charts/device-definitions-api/templates/secret.yaml +++ b/charts/device-definitions-api/templates/secret.yaml @@ -6,17 +6,14 @@ metadata: spec: data: - remoteRef: - key: {{ .Release.Namespace }}/definitions/ethereum/rpc_url - secretKey: ETHEREUM_RPC_URL + key: {{ .Release.Namespace }}/definitions/worker/token + secretKey: DEFINITIONS_WORKER_TOKEN - remoteRef: key: {{ .Release.Namespace }}/definitions/aws/access_key_id secretKey: AWS_ACCESS_KEY_ID - remoteRef: key: {{ .Release.Namespace }}/definitions/aws/secret_access_key secretKey: AWS_SECRET_ACCESS_KEY - - remoteRef: - key: {{ .Release.Namespace }}/definitions/kms/key_id - secretKey: KMS_KEY_ID - remoteRef: key: {{ .Release.Namespace }}/definitions/db/host secretKey: DB_HOST @@ -77,9 +74,6 @@ spec: - remoteRef: key: {{ .Release.Namespace }}/definitions/typesense/apiurl secretKey: SEARCH_SERVICE_API_URL - - remoteRef: - key: {{ .Release.Namespace }}/definitions/polygonscan/apikey - secretKey: POLYGON_SCAN_API_KEY - remoteRef: key: {{ .Release.Namespace }}/definitions/googlesheets/credentials secretKey: GOOGLE_SHEETS_CREDENTIALS diff --git a/charts/device-definitions-api/values-prod.yaml b/charts/device-definitions-api/values-prod.yaml index 313192f4..31358dca 100644 --- a/charts/device-definitions-api/values-prod.yaml +++ b/charts/device-definitions-api/values-prod.yaml @@ -20,9 +20,8 @@ env: REDIS_CLUSTER_MODE: true REDIS_TLS: true KAFKA_BROKERS: kafka-prod-dimo-kafka-kafka-brokers:9092 - ETHEREUM_SEND_TRANSACTION: true - TABLELAND_API_GATEWAY: http://tableland-node-prod.prod.svc.cluster.local:8080/ - ETHEREUM_REGISTRY_ADDRESS: '0xFA8beC73cebB9D88FF88a2f75E7D7312f2Fd39EC' + DEFINITIONS_CATALOG_URL: https://definitions.dimo.org + DEFINITIONS_WORKER_URL: https://definitions.dimo.org SEARCH_SERVICE_DEVICE_DEFINITION_INDEX: definitions_prod IDENTITY_API_URL: https://identity-api.dimo.zone/query ingress: diff --git a/charts/device-definitions-api/values.yaml b/charts/device-definitions-api/values.yaml index 9abed512..ce2a73c6 100644 --- a/charts/device-definitions-api/values.yaml +++ b/charts/device-definitions-api/values.yaml @@ -51,9 +51,8 @@ env: VINCARIO_API_URL: https://api.vindecoder.eu/3.2 DAT_GROUP_URL: https://www.datgroup.com/myClaim/soap/v2/VehicleIdentificationService PRIVATE_KEY_MODE: false - ETHEREUM_SEND_TRANSACTION: true - TABLELAND_API_GATEWAY: http://tableland-node-dev.dev.svc.cluster.local:8080/ - ETHEREUM_REGISTRY_ADDRESS: '0x5eAA326fB2fc97fAcCe6A79A304876daD0F2e96c' + DEFINITIONS_CATALOG_URL: https://definitions.dev.dimo.org + DEFINITIONS_WORKER_URL: https://definitions.dev.dimo.org SEARCH_SERVICE_DEVICE_DEFINITION_INDEX: definitions_dev IDENTITY_API_URL: https://identity-api.dev.dimo.zone/query service: diff --git a/cmd/device-definitions-api/add_vin.go b/cmd/device-definitions-api/add_vin.go index d53c2b30..f78c20de 100644 --- a/cmd/device-definitions-api/add_vin.go +++ b/cmd/device-definitions-api/add_vin.go @@ -14,8 +14,6 @@ import ( "github.com/DIMO-Network/device-definitions-api/internal/core/common" "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways" - "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/sender" - "github.com/ethereum/go-ethereum/ethclient" "github.com/DIMO-Network/device-definitions-api/internal/config" "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/db/models" @@ -32,8 +30,6 @@ import ( type addVINCmd struct { logger zerolog.Logger settings config.Settings - - sender sender.Sender } func (*addVINCmd) Name() string { return "addvin" } @@ -61,16 +57,7 @@ func (p *addVINCmd) Execute(ctx context.Context, _ *flag.FlagSet, _ ...interface pdb := db.NewDbConnectionFromSettings(ctx, &p.settings.DB, true) pdb.WaitForDB(p.logger) - ethClient, err := ethclient.Dial(p.settings.EthereumRPCURL.String()) - if err != nil { - p.logger.Fatal().Err(err).Msg("Failed to create Ethereum client.") - } - - chainID, err := ethClient.ChainID(ctx) - if err != nil { - p.logger.Fatal().Err(err).Msg("Couldn't retrieve chain id.") - } - onChainSvc := gateways.NewDeviceDefinitionOnChainService(&p.settings, &p.logger, ethClient, chainID, p.sender, pdb.DBS) + catalogSvc := gateways.NewDeviceDefinitionCatalogService(&p.settings, &p.logger) vinDecodeNumber, err := models.FindVinNumber(ctx, pdb.DBS().Reader, vin) if err != nil && !errors.Is(err, sql.ErrNoRows) { @@ -117,18 +104,24 @@ func (p *addVINCmd) Execute(ctx context.Context, _ *flag.FlagSet, _ ...interface return subcommands.ExitFailure } - manufacturer, err := onChainSvc.GetManufacturer(stringutils.SlugString(wmi.ManufacturerName)) + manufacturer, err := catalogSvc.GetManufacturer(stringutils.SlugString(wmi.ManufacturerName)) if err != nil { fmt.Println(err.Error()) return subcommands.ExitFailure } definitionID := common.DeviceDefinitionSlug(stringutils.SlugString(wmi.ManufacturerName), stringutils.SlugString(model), int16(vinNumber.Year)) - deviceDefinition, err := onChainSvc.GetDefinitionTableland(ctx, big.NewInt(int64(manufacturer.TokenID)), definitionID) + deviceDefinition, err := catalogSvc.GetDefinition(ctx, big.NewInt(int64(manufacturer.TokenID)), definitionID) if err != nil { fmt.Println(err.Error() + " " + model + " " + strconv.Itoa(vinNumber.Year)) return subcommands.ExitFailure } + if deviceDefinition == nil { + // (nil, nil) is returned both for a missing definition and for one + // owned by a different manufacturer; dereferencing panics. + fmt.Println("no device definition found for " + definitionID) + return subcommands.ExitFailure + } vinNumber.DefinitionID = deviceDefinition.ID err = vinNumber.Insert(ctx, pdb.DBS().Writer, boil.Infer()) diff --git a/cmd/device-definitions-api/add_vins_csv.go b/cmd/device-definitions-api/add_vins_csv.go index 6dce3edb..b9630dc0 100644 --- a/cmd/device-definitions-api/add_vins_csv.go +++ b/cmd/device-definitions-api/add_vins_csv.go @@ -13,7 +13,6 @@ import ( "github.com/DIMO-Network/device-definitions-api/internal/config" "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/db/models" "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways" - "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/sender" "github.com/DIMO-Network/shared/pkg/db" "github.com/DIMO-Network/shared/pkg/logfields" vinutils "github.com/DIMO-Network/shared/pkg/vin" @@ -28,7 +27,6 @@ type addVINsCSVCmd struct { logger zerolog.Logger settings config.Settings - sender sender.Sender identity gateways.IdentityAPI } diff --git a/cmd/device-definitions-api/bulk_update_powertrain.go b/cmd/device-definitions-api/bulk_update_powertrain.go index 23d1a077..3befe30b 100644 --- a/cmd/device-definitions-api/bulk_update_powertrain.go +++ b/cmd/device-definitions-api/bulk_update_powertrain.go @@ -3,21 +3,17 @@ package main import ( "context" "encoding/csv" - "encoding/json" "flag" "fmt" "os" "strings" "time" - "github.com/DIMO-Network/device-definitions-api/internal/contracts" "github.com/DIMO-Network/device-definitions-api/internal/core/common" - "github.com/DIMO-Network/device-definitions-api/internal/core/models" "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways" - "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/sender" - "github.com/ethereum/go-ethereum/ethclient" "github.com/DIMO-Network/device-definitions-api/internal/config" + "github.com/DIMO-Network/device-definitions-api/internal/core/models" "github.com/DIMO-Network/shared/pkg/db" "github.com/google/subcommands" "github.com/rs/zerolog" @@ -26,8 +22,6 @@ import ( type bulkUpdatePowertrain struct { logger zerolog.Logger settings config.Settings - - sender sender.Sender } func (*bulkUpdatePowertrain) Name() string { return "bulk-update-powertrain" } @@ -66,16 +60,7 @@ func (p *bulkUpdatePowertrain) Execute(ctx context.Context, _ *flag.FlagSet, _ . pdb := db.NewDbConnectionFromSettings(ctx, &p.settings.DB, true) pdb.WaitForDB(p.logger) - ethClient, err := ethclient.Dial(p.settings.EthereumRPCURL.String()) - if err != nil { - p.logger.Fatal().Err(err).Msg("Failed to create Ethereum client.") - } - - chainID, err := ethClient.ChainID(ctx) - if err != nil { - p.logger.Fatal().Err(err).Msg("Couldn't retrieve chain id.") - } - onChainSvc := gateways.NewDeviceDefinitionOnChainService(&p.settings, &p.logger, ethClient, chainID, p.sender, pdb.DBS) + catalogSvc := gateways.NewDeviceDefinitionCatalogService(&p.settings, &p.logger) notFoundDefinitions := make([]string, 0) @@ -101,7 +86,9 @@ func (p *bulkUpdatePowertrain) Execute(ctx context.Context, _ *flag.FlagSet, _ . } fmt.Printf("DefinitionID: %s, Powertrain: %s\n", definitionID, powertrain) - deviceDefinition, manufID, err := onChainSvc.GetDefinitionByID(ctx, definitionID) + // Fresh: this reads, mutates metadata and writes it back, so a CDN-cached + // base would silently drop any edit made in the last day. + deviceDefinition, manufID, err := catalogSvc.GetDefinitionByIDFresh(ctx, definitionID) if err != nil { fmt.Printf("%s: Error getting device definition: %v\n", definitionID, err) notFoundDefinitions = append(notFoundDefinitions, definitionID) @@ -113,13 +100,13 @@ func (p *bulkUpdatePowertrain) Execute(ctx context.Context, _ *flag.FlagSet, _ . continue } - manufName, err := onChainSvc.GetManufacturerNameByID(ctx, manufID) + manufName, err := catalogSvc.GetManufacturerNameByID(ctx, manufID) if err != nil { fmt.Printf("%s: Error getting manufacturer name: %v\n", manufID, err) continue } set := false - if deviceDefinition.Metadata != nil { + if deviceDefinition.Metadata == nil { deviceDefinition.Metadata = &models.DeviceDefinitionMetadata{ DeviceAttributes: make([]models.DeviceTypeAttribute, 0), } @@ -138,16 +125,15 @@ func (p *bulkUpdatePowertrain) Execute(ctx context.Context, _ *flag.FlagSet, _ . Value: powertrain, }) } - md, _ := json.Marshal(deviceDefinition.Metadata) - updateContract := contracts.DeviceDefinitionUpdateInput{ - Id: deviceDefinition.ID, - Metadata: string(md), - Ksuid: deviceDefinition.KSUID, + updateInput := models.DeviceDefinitionUpdateInput{ + ID: deviceDefinition.ID, + Metadata: deviceDefinition.Metadata, + KSUID: deviceDefinition.KSUID, DeviceType: deviceDefinition.DeviceType, ImageURI: deviceDefinition.ImageURI, } - update, err := onChainSvc.Update(ctx, manufName, updateContract) + update, err := catalogSvc.Update(ctx, manufName, updateInput) if err != nil { fmt.Printf("%s: Error updating device definition: %v\n", definitionID, err) return subcommands.ExitFailure diff --git a/cmd/device-definitions-api/decode_vin.go b/cmd/device-definitions-api/decode_vin.go index dd4057ba..701902d7 100644 --- a/cmd/device-definitions-api/decode_vin.go +++ b/cmd/device-definitions-api/decode_vin.go @@ -16,7 +16,6 @@ import ( vinutil "github.com/DIMO-Network/shared/pkg/vin" "github.com/aarondl/null/v8" "github.com/aarondl/sqlboiler/v4/boil" - "github.com/ethereum/go-ethereum/ethclient" "github.com/goccy/go-json" @@ -254,7 +253,7 @@ func readVINFile(filename string) ([]string, error) { return values, nil } -func instantiateVINDecodingSvc(ctx context.Context, settings *config.Settings, logger *zerolog.Logger, pdb db.Store) services.VINDecodingService { +func instantiateVINDecodingSvc(_ context.Context, settings *config.Settings, logger *zerolog.Logger, pdb db.Store) services.VINDecodingService { datAPI := gateways.NewDATGroupAPIService(settings, logger) drivlyAPI := gateways.NewDrivlyAPIService(settings) vincarioAPI := gateways.NewVincarioAPIService(settings, logger) @@ -265,21 +264,7 @@ func instantiateVINDecodingSvc(ctx context.Context, settings *config.Settings, l return services.NewVINDecodingService(drivlyAPI, vincarioAPI, nil, logger, nil, datAPI, pdb.DBS, jp17vinAPI, carvxAPI, elevaAPI) } - send, err := createSender(ctx, settings, logger) - if err != nil { - logger.Fatal().Err(err).Msg("Failed to create sender.") - } - - ethClient, err := ethclient.Dial(settings.EthereumRPCURL.String()) - if err != nil { - logger.Fatal().Err(err).Msg("Failed to create Ethereum client.") - } - - chainID, err := ethClient.ChainID(ctx) - if err != nil { - logger.Fatal().Err(err).Msg("Couldn't retrieve chain id.") - } - deviceDefinitionOnChainService := gateways.NewDeviceDefinitionOnChainService(settings, logger, ethClient, chainID, send, pdb.DBS) + deviceDefinitionCatalogService := gateways.NewDeviceDefinitionCatalogService(settings, logger) - return services.NewVINDecodingService(drivlyAPI, vincarioAPI, nil, logger, deviceDefinitionOnChainService, datAPI, pdb.DBS, jp17vinAPI, carvxAPI, elevaAPI) + return services.NewVINDecodingService(drivlyAPI, vincarioAPI, nil, logger, deviceDefinitionCatalogService, datAPI, pdb.DBS, jp17vinAPI, carvxAPI, elevaAPI) } diff --git a/cmd/device-definitions-api/delete_dd.go b/cmd/device-definitions-api/delete_dd.go index a9871a35..95cb982b 100644 --- a/cmd/device-definitions-api/delete_dd.go +++ b/cmd/device-definitions-api/delete_dd.go @@ -7,13 +7,10 @@ import ( "fmt" "os" "strings" - "time" "github.com/DIMO-Network/device-definitions-api/internal/config" - dd_common "github.com/DIMO-Network/device-definitions-api/internal/core/common" "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways" "github.com/DIMO-Network/shared/pkg/db" - "github.com/ethereum/go-ethereum/ethclient" "github.com/google/subcommands" "github.com/rs/zerolog" ) @@ -52,50 +49,17 @@ func (p *deleteDefinition) Execute(ctx context.Context, _ *flag.FlagSet, _ ...in pdb := db.NewDbConnectionFromSettings(ctx, &p.settings.DB, true) pdb.WaitForDB(p.logger) - send, err := createSender(ctx, &p.settings, &p.logger) - if err != nil { - p.logger.Fatal().Err(err).Msg("Failed to create sender.") - } - ethClient, err := ethclient.Dial(p.settings.EthereumRPCURL.String()) - if err != nil { - p.logger.Fatal().Err(err).Msg("Failed to create Ethereum client.") - } - - chainID, err := ethClient.ChainID(ctx) - if err != nil { - p.logger.Fatal().Err(err).Msg("Couldn't retrieve chain id.") - } - deviceDefinitionOnChainService := gateways.NewDeviceDefinitionOnChainService(&p.settings, &p.logger, ethClient, chainID, send, pdb.DBS) + deviceDefinitionCatalogService := gateways.NewDeviceDefinitionCatalogService(&p.settings, &p.logger) id := os.Args[len(os.Args)-1] - trx, err := deviceDefinitionOnChainService.Delete(ctx, manufacturer, id) + deleted, err := deviceDefinitionCatalogService.Delete(ctx, manufacturer, id) if err != nil { p.logger.Fatal().Err(err).Msg("Failed to delete.") } - - if len(*trx) > 0 { - trxFinished := false - loops := 0 - for !trxFinished { - loops++ - time.Sleep(time.Second * 2) - trxFinished, err = dd_common.CheckTransactionStatus(*trx, p.settings.PolygonScanAPIKey, !p.settings.IsProd()) - if err != nil { - fmt.Println("Error checking transaction status: ", err) - } - fmt.Println("Transaction status: ", trxFinished) - if loops > 10 { - // get device definition from on chain to see if maybe got created but trx still showing false - onchainDD, _, err := deviceDefinitionOnChainService.GetDefinitionByID(ctx, id) - fmt.Println("onchainDD: ", onchainDD, err) - if onchainDD != nil { - break - } - } - } - } + // The worker delete is synchronous; nothing to poll. + fmt.Println("Deleted device definition: ", *deleted) return subcommands.ExitSuccess } diff --git a/cmd/device-definitions-api/main.go b/cmd/device-definitions-api/main.go index 4ccfbaec..68678c3a 100644 --- a/cmd/device-definitions-api/main.go +++ b/cmd/device-definitions-api/main.go @@ -7,9 +7,6 @@ import ( "os" "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways" - "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/sender" - awsconfig "github.com/aws/aws-sdk-go-v2/config" - "github.com/aws/aws-sdk-go-v2/service/kms" "github.com/google/subcommands" @@ -43,7 +40,6 @@ func main() { Str("app", settings.ServiceName). Str("git-sha1", gitSha1). Logger() - sigSender, err := createSender(ctx, &settings, &logger) identity := gateways.NewIdentityAPIService(&logger, &settings) subcommands.Register(subcommands.HelpCommand(), "") @@ -51,45 +47,18 @@ func main() { subcommands.Register(subcommands.CommandsCommand(), "") subcommands.Register(&migrateDBCmd{logger: logger, settings: settings}, "") subcommands.Register(&addVINCmd{logger: logger, settings: settings}, "") - subcommands.Register(&addVINsCSVCmd{logger: logger, settings: settings, sender: sigSender, identity: identity}, "") + subcommands.Register(&addVINsCSVCmd{logger: logger, settings: settings, identity: identity}, "") subcommands.Register(&decodeVINCmd{logger: &logger, settings: &settings}, "") - subcommands.Register(&syncDeviceDefinitionSearchCmd{logger: logger, settings: settings, sender: sigSender}, "") + subcommands.Register(&syncDeviceDefinitionSearchCmd{logger: logger, settings: settings}, "") subcommands.Register(&deleteDefinition{logger: logger, settings: settings}, "") - subcommands.Register(&bulkUpdatePowertrain{logger: logger, settings: settings, sender: sigSender}, "") + subcommands.Register(&bulkUpdatePowertrain{logger: logger, settings: settings}, "") if len(os.Args) == 1 { // Run API & everythying else - if err != nil { - logger.Fatal().Err(err).Msg("Failed to create sender.") - } - api.Run(ctx, logger, &settings, sigSender) + api.Run(ctx, logger, &settings) } else { flag.Parse() os.Exit(int(subcommands.Execute(ctx))) } } - -func createSender(ctx context.Context, settings *config.Settings, logger *zerolog.Logger) (sender.Sender, error) { - if settings.PrivateKeyMode { - logger.Warn().Msg("Using injected private key. Never do this in production.") - send, err := sender.FromKey(settings.SenderPrivateKey) - if err != nil { - return nil, err - } - logger.Info().Str("address", send.Address().Hex()).Msg("Loaded private key account.") - return send, nil - } - - awsconf, err := awsconfig.LoadDefaultConfig(ctx) - if err != nil { - return nil, err - } - kmsc := kms.NewFromConfig(awsconf) - send, err := sender.FromKMS(ctx, kmsc, settings.KMSKeyID) - if err != nil { - return nil, err - } - logger.Info().Msgf("Loaded KMS key %s, address %s.", settings.KMSKeyID, send.Address().Hex()) - return send, nil -} diff --git a/cmd/device-definitions-api/search_indexer.go b/cmd/device-definitions-api/search_indexer.go index 8ac1b3e3..58e7d9b2 100644 --- a/cmd/device-definitions-api/search_indexer.go +++ b/cmd/device-definitions-api/search_indexer.go @@ -1,7 +1,10 @@ package main import ( + "bufio" + "bytes" "context" + "encoding/json" "fmt" "github.com/pkg/errors" @@ -13,6 +16,11 @@ import ( type SearchIndexer interface { RecreateIndex(ctx context.Context, schema *api.CollectionSchema) error UpsertDocuments(ctx context.Context, collectionName string, docs []SearchEntryItem) error + // ExportIDs returns the id of every document currently in the collection. + ExportIDs(ctx context.Context, collectionName string) ([]string, error) + // DeleteDocuments removes the given ids and reports how many it actually + // removed, so a partial failure does not report ids that still exist. + DeleteDocuments(ctx context.Context, collectionName string, ids []string) (int, error) } type typesenseSearchIndexer struct { @@ -51,3 +59,49 @@ func (t *typesenseSearchIndexer) UpsertDocuments(ctx context.Context, collection } return nil } + +func (t *typesenseSearchIndexer) ExportIDs(ctx context.Context, collectionName string) ([]string, error) { + body, err := t.client.Collection(collectionName).Documents().Export(ctx) + if err != nil { + return nil, errors.Wrap(err, "failed to export documents") + } + defer body.Close() //nolint:errcheck + + var ids []string + scanner := bufio.NewScanner(body) + scanner.Buffer(make([]byte, 0, 64*1024), 4*1024*1024) + for scanner.Scan() { + line := bytes.TrimSpace(scanner.Bytes()) + if len(line) == 0 { + continue + } + var doc struct { + ID string `json:"id"` + } + if err := json.Unmarshal(line, &doc); err != nil { + return nil, errors.Wrap(err, "failed to decode exported document") + } + if doc.ID != "" { + ids = append(ids, doc.ID) + } + } + if err := scanner.Err(); err != nil { + return nil, errors.Wrap(err, "failed to read the export stream") + } + return ids, nil +} + +// DeleteDocuments removes ids one at a time rather than through a filter_by +// set: definition ids legitimately contain & + ( ) and ", which would need +// escaping inside a filter expression. Orphans are rare, so this stays cheap. +func (t *typesenseSearchIndexer) DeleteDocuments(ctx context.Context, collectionName string, ids []string) (int, error) { + deleted := 0 + for _, id := range ids { + if _, err := t.client.Collection(collectionName).Document(id).Delete(ctx); err != nil { + return deleted, errors.Wrapf(err, "failed to delete document %s", id) + } + deleted++ + fmt.Printf(" pruned search document with no definition: %s\n", id) + } + return deleted, nil +} diff --git a/cmd/device-definitions-api/search_indexer_mock_test.go b/cmd/device-definitions-api/search_indexer_mock_test.go index 26d30244..2725bb05 100644 --- a/cmd/device-definitions-api/search_indexer_mock_test.go +++ b/cmd/device-definitions-api/search_indexer_mock_test.go @@ -1,9 +1,9 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: search_indexer.go +// Source: cmd/device-definitions-api/search_indexer.go // // Generated by this command: // -// mockgen -source search_indexer.go -destination search_indexer_mock_test.go -package main +// mockgen -source cmd/device-definitions-api/search_indexer.go -destination cmd/device-definitions-api/search_indexer_mock_test.go -package main // // Package main is a generated GoMock package. @@ -41,6 +41,36 @@ func (m *MockSearchIndexer) EXPECT() *MockSearchIndexerMockRecorder { return m.recorder } +// DeleteDocuments mocks base method. +func (m *MockSearchIndexer) DeleteDocuments(ctx context.Context, collectionName string, ids []string) (int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteDocuments", ctx, collectionName, ids) + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DeleteDocuments indicates an expected call of DeleteDocuments. +func (mr *MockSearchIndexerMockRecorder) DeleteDocuments(ctx, collectionName, ids any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteDocuments", reflect.TypeOf((*MockSearchIndexer)(nil).DeleteDocuments), ctx, collectionName, ids) +} + +// ExportIDs mocks base method. +func (m *MockSearchIndexer) ExportIDs(ctx context.Context, collectionName string) ([]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ExportIDs", ctx, collectionName) + ret0, _ := ret[0].([]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ExportIDs indicates an expected call of ExportIDs. +func (mr *MockSearchIndexerMockRecorder) ExportIDs(ctx, collectionName any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ExportIDs", reflect.TypeOf((*MockSearchIndexer)(nil).ExportIDs), ctx, collectionName) +} + // RecreateIndex mocks base method. func (m *MockSearchIndexer) RecreateIndex(ctx context.Context, schema *api.CollectionSchema) error { m.ctrl.T.Helper() diff --git a/cmd/device-definitions-api/sync_device_definition_search.go b/cmd/device-definitions-api/sync_device_definition_search.go index 24a4284d..8f76e3da 100644 --- a/cmd/device-definitions-api/sync_device_definition_search.go +++ b/cmd/device-definitions-api/sync_device_definition_search.go @@ -7,11 +7,8 @@ import ( coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models" "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways" - "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/sender" stringutils "github.com/DIMO-Network/shared/pkg/strings" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/DIMO-Network/device-definitions-api/internal/config" "github.com/DIMO-Network/device-definitions-api/internal/core/common" "github.com/DIMO-Network/shared/pkg/db" @@ -23,17 +20,21 @@ import ( ) const ( - minSearchYear = 2007 - tablelandPageSize = 500 - searchDefaultScore = 1 + minSearchYear = 2007 + // Most search documents the prune will delete in one run without + // -allow-bulk-prune. Prod carries 41 orphans; a keep-set that lost a whole + // manufacturer is ~1,615 documents. Anything in between means the keep-set + // is wrong, not that the catalog shrank. + maxPruneWithoutFlag = 500 + searchDefaultScore = 1 ) type syncDeviceDefinitionSearchCmd struct { logger zerolog.Logger settings config.Settings - createIndex bool - sender sender.Sender + createIndex bool + allowBulkPrune bool } func (*syncDeviceDefinitionSearchCmd) Name() string { return "sync-device-definitions-search" } @@ -46,22 +47,15 @@ func (*syncDeviceDefinitionSearchCmd) Usage() string { func (p *syncDeviceDefinitionSearchCmd) SetFlags(f *flag.FlagSet) { f.BoolVar(&p.createIndex, "create-index", false, "create or recreate index") + f.BoolVar(&p.allowBulkPrune, "allow-bulk-prune", false, + "permit deleting an unusually large share of the search index (normally a sign of a partial catalog read)") } func (p *syncDeviceDefinitionSearchCmd) Execute(ctx context.Context, _ *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { pdb := db.NewDbConnectionFromSettings(ctx, &p.settings.DB, true) pdb.WaitForDB(p.logger) - ethClient, err := ethclient.Dial(p.settings.EthereumRPCURL.String()) - if err != nil { - p.logger.Fatal().Err(err).Msg("Failed to create Ethereum client.") - } - chainID, err := ethClient.ChainID(ctx) - if err != nil { - p.logger.Fatal().Err(err).Msg("Couldn't retrieve chain id.") - } - - onChainSvc := gateways.NewDeviceDefinitionOnChainService(&p.settings, &p.logger, ethClient, chainID, p.sender, pdb.DBS) + catalogSvc := gateways.NewDeviceDefinitionCatalogService(&p.settings, &p.logger) identity := gateways.NewIdentityAPIService(&p.logger, &p.settings) client := typesense.NewClient( @@ -79,7 +73,7 @@ func (p *syncDeviceDefinitionSearchCmd) Execute(ctx context.Context, _ *flag.Fla fmt.Printf("Index %s created\n", collectionName) } - if err := runSearchSync(ctx, identity, onChainSvc, indexer, collectionName); err != nil { + if err := runSearchSync(ctx, identity, catalogSvc, indexer, collectionName, p.allowBulkPrune); err != nil { p.logger.Error().Err(err).Msg("sync failed") return subcommands.ExitFailure } @@ -94,18 +88,52 @@ func (p *syncDeviceDefinitionSearchCmd) Execute(ctx context.Context, _ *flag.Fla func runSearchSync( ctx context.Context, identity gateways.IdentityAPI, - onChainSvc gateways.DeviceDefinitionOnChainService, + catalogSvc gateways.DeviceDefinitionCatalogService, indexer SearchIndexer, collectionName string, + allowBulkPrune bool, ) error { + // Pin one manifest for the whole run. This is not a freshness measure: the + // worker generates every response, so there is no edge cache, and the + // keep-set is a single CatalogIDs read that cannot span manifests either + // way. It keeps the per-manufacturer paging below consistent, whose failure + // mode is a missed upsert that the next daily run repairs. + if err := catalogSvc.PinCatalogSnapshot(ctx); err != nil { + return fmt.Errorf("pin catalog snapshot: %w", err) + } + makes, err := identity.GetManufacturers() if err != nil { return fmt.Errorf("get manufacturers: %w", err) } + // identity-api answers HTTP 200 with a populated `errors` array and null + // data when it fails, which the client surfaces as (nil, nil). Without this + // the cron prints "Index Updated" having indexed nothing, and the prune + // pass runs with an empty keep-set. + if len(makes) == 0 { + return fmt.Errorf("identity returned no manufacturers; refusing to sync an empty catalog") + } fmt.Printf("Found %d manufacturers\n", len(makes)) + // The keep-set comes from the manifest, not from walking manufacturers. A + // walk is only as complete as identity-api's manufacturer list, and one + // make missing from it silently drops all of its definitions from the + // keep-set -- BMW alone is 1,618 documents, which slides under the bulk + // guard's 1,669 and gets deleted without tripping anything. + allIDs, err := catalogSvc.CatalogIDs(ctx) + if err != nil { + return fmt.Errorf("read catalog ids: %w", err) + } + if len(allIDs) == 0 { + return fmt.Errorf("catalog returned no definitions; refusing to sync against an empty keep-set") + } + catalogIDs := make(map[string]struct{}, len(allIDs)) + for _, id := range allIDs { + catalogIDs[id] = struct{}{} + } + for _, dm := range makes { - docs, err := buildManufacturerDocuments(ctx, onChainSvc, dm) + docs, _, err := buildManufacturerDocuments(ctx, catalogSvc, dm) if err != nil { return fmt.Errorf("build documents for %s: %w", dm.Name, err) } @@ -118,26 +146,42 @@ func runSearchSync( } fmt.Printf("%s: upserted %d definitions\n", dm.Name, len(docs)) } + + // Upserting alone leaves a definition deleted from the catalog searchable + // forever, returning an id that 404s. + pruned, err := pruneOrphans(ctx, indexer, collectionName, catalogIDs, allowBulkPrune) + if err != nil { + // Report what was actually removed before the failure: the deletes are + // not transactional and the removed documents do not come back. + return fmt.Errorf("pruned %d search documents before failing: %w", pruned, err) + } + if pruned > 0 { + fmt.Printf("pruned %d search documents with no definition in the catalog\n", pruned) + } return nil } -// buildManufacturerDocuments pulls every tableland definition for a manufacturer -// and converts the ones from model year >= minSearchYear into SearchEntryItems. +// buildManufacturerDocuments pulls every definition for a manufacturer and +// converts the ones from model year >= minSearchYear into SearchEntryItems. It +// also returns every id it saw, which callers may ignore: the prune's keep-set +// comes from the manifest via CatalogIDs, not from this walk. func buildManufacturerDocuments( ctx context.Context, - onChainSvc gateways.DeviceDefinitionOnChainService, + catalogSvc gateways.DeviceDefinitionCatalogService, dm coremodels.Manufacturer, -) ([]SearchEntryItem, error) { +) ([]SearchEntryItem, []string, error) { makeSlug := stringutils.SlugString(dm.Name) var docs []SearchEntryItem + var allIDs []string pageIndex := 0 for { - page, err := onChainSvc.QueryDefinitionsCustom(ctx, dm.TokenID, "", pageIndex) + page, err := catalogSvc.QueryDefinitionsByManufacturer(ctx, dm.TokenID, pageIndex) if err != nil { - return nil, err + return nil, nil, err } for _, dd := range page { + allIDs = append(allIDs, dd.ID) if dd.Year < minSearchYear { continue } @@ -156,12 +200,57 @@ func buildManufacturerDocuments( Score: searchDefaultScore, }) } - if len(page) < tablelandPageSize { + if len(page) < gateways.CatalogPageSize { break } pageIndex++ } - return docs, nil + return docs, allIDs, nil +} + +// pruneOrphans deletes search documents whose definition no longer exists in +// the catalog. The sync pass only ever upserts, so without this a definition +// deleted from R2 stays searchable forever, returning an id that 404s. +func pruneOrphans(ctx context.Context, indexer SearchIndexer, collectionName string, catalogIDs map[string]struct{}, allowBulk bool) (int, error) { + // An empty catalog set means the catalog read failed or returned nothing. + // Pruning against it would empty the whole index. + if len(catalogIDs) == 0 { + return 0, nil + } + + indexed, err := indexer.ExportIDs(ctx, collectionName) + if err != nil { + return 0, fmt.Errorf("export index ids: %w", err) + } + + var stale []string + for _, id := range indexed { + if _, ok := catalogIDs[id]; !ok { + stale = append(stale, id) + } + } + if len(stale) == 0 { + return 0, nil + } + + // A prune this large is far more likely to mean the catalog read was + // partial than that the catalog really shrank that much. Fail loud rather + // than quietly gut the index. + if len(stale) > maxPruneWithoutFlag && !allowBulk { + return 0, fmt.Errorf( + "refusing to prune %d of %d search documents (limit %d); re-run with -allow-bulk-prune if this is expected", + len(stale), len(indexed), maxPruneWithoutFlag) + } + + // Documents below the index year cutoff are never re-upserted by a sync, so + // a wrong deletion here is permanent and this log is the only record of it. + // DeleteDocuments reports how many it actually removed, so a partial + // failure does not claim ids that still exist. + deleted, err := indexer.DeleteDocuments(ctx, collectionName, stale) + if err != nil { + return deleted, fmt.Errorf("delete orphaned search documents: %w", err) + } + return deleted, nil } func deviceDefinitionSearchSchema(collectionName string) *api.CollectionSchema { diff --git a/cmd/device-definitions-api/sync_device_definition_search_test.go b/cmd/device-definitions-api/sync_device_definition_search_test.go index 1f6dd0eb..28fde765 100644 --- a/cmd/device-definitions-api/sync_device_definition_search_test.go +++ b/cmd/device-definitions-api/sync_device_definition_search_test.go @@ -6,6 +6,7 @@ import ( "testing" coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models" + "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways" mock_gateways "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways/mocks" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -23,18 +24,18 @@ func defToyota(year int, model, id string) coremodels.DeviceDefinitionTablelandM func TestBuildManufacturerDocuments_FiltersPre2007(t *testing.T) { ctrl := gomock.NewController(t) - onChain := mock_gateways.NewMockDeviceDefinitionOnChainService(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) dm := coremodels.Manufacturer{TokenID: 42, Name: "Toyota"} onChain.EXPECT(). - QueryDefinitionsCustom(gomock.Any(), 42, "", 0). + QueryDefinitionsByManufacturer(gomock.Any(), 42, 0). Return([]coremodels.DeviceDefinitionTablelandModel{ defToyota(2006, "Camry", "id-old"), defToyota(2007, "Camry", "id-keep"), defToyota(2020, "Prius", "id-new"), }, nil) - docs, err := buildManufacturerDocuments(context.Background(), onChain, dm) + docs, _, err := buildManufacturerDocuments(context.Background(), onChain, dm) require.NoError(t, err) require.Len(t, docs, 2) assert.Equal(t, "id-keep", docs[0].ID) @@ -43,16 +44,16 @@ func TestBuildManufacturerDocuments_FiltersPre2007(t *testing.T) { func TestBuildManufacturerDocuments_PopulatesFields(t *testing.T) { ctrl := gomock.NewController(t) - onChain := mock_gateways.NewMockDeviceDefinitionOnChainService(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) dm := coremodels.Manufacturer{TokenID: 7, Name: "Land Rover"} onChain.EXPECT(). - QueryDefinitionsCustom(gomock.Any(), 7, "", 0). + QueryDefinitionsByManufacturer(gomock.Any(), 7, 0). Return([]coremodels.DeviceDefinitionTablelandModel{ {ID: "ddid-1", Model: "Range Rover", Year: 2021, ImageURI: "https://img/rr"}, }, nil) - docs, err := buildManufacturerDocuments(context.Background(), onChain, dm) + docs, _, err := buildManufacturerDocuments(context.Background(), onChain, dm) require.NoError(t, err) require.Len(t, docs, 1) @@ -73,7 +74,7 @@ func TestBuildManufacturerDocuments_PopulatesFields(t *testing.T) { func TestBuildManufacturerDocuments_TerminatesOnShortPage(t *testing.T) { ctrl := gomock.NewController(t) - onChain := mock_gateways.NewMockDeviceDefinitionOnChainService(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) dm := coremodels.Manufacturer{TokenID: 1, Name: "Honda"} // 10 rows on page 0 is < 500 → loop should break without requesting page 1. @@ -82,65 +83,67 @@ func TestBuildManufacturerDocuments_TerminatesOnShortPage(t *testing.T) { page[i] = defToyota(2020, "Civic", "id") } onChain.EXPECT(). - QueryDefinitionsCustom(gomock.Any(), 1, "", 0). + QueryDefinitionsByManufacturer(gomock.Any(), 1, 0). Return(page, nil). Times(1) - docs, err := buildManufacturerDocuments(context.Background(), onChain, dm) + docs, _, err := buildManufacturerDocuments(context.Background(), onChain, dm) require.NoError(t, err) assert.Len(t, docs, 10) } func TestBuildManufacturerDocuments_PagesUntilShortPage(t *testing.T) { ctrl := gomock.NewController(t) - onChain := mock_gateways.NewMockDeviceDefinitionOnChainService(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) dm := coremodels.Manufacturer{TokenID: 1, Name: "Honda"} - full := make([]coremodels.DeviceDefinitionTablelandModel, tablelandPageSize) + full := make([]coremodels.DeviceDefinitionTablelandModel, gateways.CatalogPageSize) for i := range full { full[i] = defToyota(2020, "Civic", "id") } short := []coremodels.DeviceDefinitionTablelandModel{defToyota(2020, "Accord", "id-last")} gomock.InOrder( - onChain.EXPECT().QueryDefinitionsCustom(gomock.Any(), 1, "", 0).Return(full, nil), - onChain.EXPECT().QueryDefinitionsCustom(gomock.Any(), 1, "", 1).Return(full, nil), - onChain.EXPECT().QueryDefinitionsCustom(gomock.Any(), 1, "", 2).Return(short, nil), + onChain.EXPECT().QueryDefinitionsByManufacturer(gomock.Any(), 1, 0).Return(full, nil), + onChain.EXPECT().QueryDefinitionsByManufacturer(gomock.Any(), 1, 1).Return(full, nil), + onChain.EXPECT().QueryDefinitionsByManufacturer(gomock.Any(), 1, 2).Return(short, nil), ) - docs, err := buildManufacturerDocuments(context.Background(), onChain, dm) + docs, _, err := buildManufacturerDocuments(context.Background(), onChain, dm) require.NoError(t, err) - assert.Len(t, docs, 2*tablelandPageSize+1) + assert.Len(t, docs, 2*gateways.CatalogPageSize+1) } func TestBuildManufacturerDocuments_PropagatesError(t *testing.T) { ctrl := gomock.NewController(t) - onChain := mock_gateways.NewMockDeviceDefinitionOnChainService(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) dm := coremodels.Manufacturer{TokenID: 1, Name: "Honda"} boom := errors.New("tableland down") onChain.EXPECT(). - QueryDefinitionsCustom(gomock.Any(), 1, "", 0). + QueryDefinitionsByManufacturer(gomock.Any(), 1, 0). Return(nil, boom) - _, err := buildManufacturerDocuments(context.Background(), onChain, dm) + _, _, err := buildManufacturerDocuments(context.Background(), onChain, dm) require.ErrorIs(t, err, boom) } func TestRunSearchSync_FlushesPerManufacturer(t *testing.T) { ctrl := gomock.NewController(t) identity := mock_gateways.NewMockIdentityAPI(ctrl) - onChain := mock_gateways.NewMockDeviceDefinitionOnChainService(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) indexer := NewMockSearchIndexer(ctrl) + onChain.EXPECT().PinCatalogSnapshot(gomock.Any()).Return(nil) + onChain.EXPECT().CatalogIDs(gomock.Any()).Return([]string{"h1", "t1"}, nil).AnyTimes() identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{ {TokenID: 1, Name: "Honda"}, {TokenID: 2, Name: "Toyota"}, }, nil) - onChain.EXPECT().QueryDefinitionsCustom(gomock.Any(), 1, "", 0). + onChain.EXPECT().QueryDefinitionsByManufacturer(gomock.Any(), 1, 0). Return([]coremodels.DeviceDefinitionTablelandModel{defToyota(2020, "Civic", "h1")}, nil) - onChain.EXPECT().QueryDefinitionsCustom(gomock.Any(), 2, "", 0). + onChain.EXPECT().QueryDefinitionsByManufacturer(gomock.Any(), 2, 0). Return([]coremodels.DeviceDefinitionTablelandModel{defToyota(2020, "Camry", "t1")}, nil) // One upsert per manufacturer, each with exactly that make's docs. @@ -157,58 +160,115 @@ func TestRunSearchSync_FlushesPerManufacturer(t *testing.T) { return nil }) - err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search") + // Both makes are still in the catalog, so the prune pass deletes nothing. + indexer.EXPECT().ExportIDs(gomock.Any(), "dd-search").Return([]string{"h1", "t1"}, nil) + + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) require.NoError(t, err) } func TestRunSearchSync_SkipsMakeWithNoEligibleDefs(t *testing.T) { ctrl := gomock.NewController(t) identity := mock_gateways.NewMockIdentityAPI(ctrl) - onChain := mock_gateways.NewMockDeviceDefinitionOnChainService(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) indexer := NewMockSearchIndexer(ctrl) + onChain.EXPECT().PinCatalogSnapshot(gomock.Any()).Return(nil) + onChain.EXPECT().CatalogIDs(gomock.Any()).Return([]string{"s1"}, nil).AnyTimes() identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{ {TokenID: 9, Name: "Studebaker"}, }, nil) // All pre-2007 → filtered out → builder returns zero docs. - onChain.EXPECT().QueryDefinitionsCustom(gomock.Any(), 9, "", 0). + onChain.EXPECT().QueryDefinitionsByManufacturer(gomock.Any(), 9, 0). Return([]coremodels.DeviceDefinitionTablelandModel{defToyota(1950, "Champion", "s1")}, nil) // No UpsertDocuments expectation → gomock will fail the test if it's called. + // The definition still exists though, so the prune pass runs and keeps it. + indexer.EXPECT().ExportIDs(gomock.Any(), "dd-search").Return([]string{"s1"}, nil) - err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search") + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) require.NoError(t, err) } func TestRunSearchSync_PropagatesManufacturersError(t *testing.T) { ctrl := gomock.NewController(t) identity := mock_gateways.NewMockIdentityAPI(ctrl) - onChain := mock_gateways.NewMockDeviceDefinitionOnChainService(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) indexer := NewMockSearchIndexer(ctrl) + onChain.EXPECT().PinCatalogSnapshot(gomock.Any()).Return(nil) + onChain.EXPECT().CatalogIDs(gomock.Any()).Return(nil, nil).AnyTimes() boom := errors.New("identity down") identity.EXPECT().GetManufacturers().Return(nil, boom) - err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search") + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) require.ErrorIs(t, err, boom) } func TestRunSearchSync_PropagatesUpsertError(t *testing.T) { ctrl := gomock.NewController(t) identity := mock_gateways.NewMockIdentityAPI(ctrl) - onChain := mock_gateways.NewMockDeviceDefinitionOnChainService(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) indexer := NewMockSearchIndexer(ctrl) + onChain.EXPECT().PinCatalogSnapshot(gomock.Any()).Return(nil) + onChain.EXPECT().CatalogIDs(gomock.Any()).Return([]string{"h1"}, nil).AnyTimes() identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{ {TokenID: 1, Name: "Honda"}, }, nil) - onChain.EXPECT().QueryDefinitionsCustom(gomock.Any(), 1, "", 0). + onChain.EXPECT().QueryDefinitionsByManufacturer(gomock.Any(), 1, 0). Return([]coremodels.DeviceDefinitionTablelandModel{defToyota(2020, "Civic", "h1")}, nil) boom := errors.New("typesense down") indexer.EXPECT().UpsertDocuments(gomock.Any(), "dd-search", gomock.Any()).Return(boom) - err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search") + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) require.ErrorIs(t, err, boom) } + +func TestRunSearchSync_PrunesDefinitionsMissingFromCatalog(t *testing.T) { + ctrl := gomock.NewController(t) + identity := mock_gateways.NewMockIdentityAPI(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) + indexer := NewMockSearchIndexer(ctrl) + onChain.EXPECT().PinCatalogSnapshot(gomock.Any()).Return(nil) + onChain.EXPECT().CatalogIDs(gomock.Any()).Return([]string{"h1"}, nil).AnyTimes() + + identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{ + {TokenID: 1, Name: "Honda"}, + }, nil) + onChain.EXPECT().QueryDefinitionsByManufacturer(gomock.Any(), 1, 0). + Return([]coremodels.DeviceDefinitionTablelandModel{defToyota(2020, "Civic", "h1")}, nil) + indexer.EXPECT().UpsertDocuments(gomock.Any(), "dd-search", gomock.Any()).Return(nil) + + // The index still carries a definition the catalog no longer has. + indexer.EXPECT().ExportIDs(gomock.Any(), "dd-search"). + Return([]string{"h1", "deleted_1"}, nil) + indexer.EXPECT().DeleteDocuments(gomock.Any(), "dd-search", []string{"deleted_1"}). + Return(1, nil) + + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) + require.NoError(t, err) +} + +func TestRunSearchSync_DoesNotPruneDefinitionsThatAreStillInTheCatalog(t *testing.T) { + ctrl := gomock.NewController(t) + identity := mock_gateways.NewMockIdentityAPI(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) + indexer := NewMockSearchIndexer(ctrl) + onChain.EXPECT().PinCatalogSnapshot(gomock.Any()).Return(nil) + onChain.EXPECT().CatalogIDs(gomock.Any()).Return([]string{"h1"}, nil).AnyTimes() + + identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{ + {TokenID: 1, Name: "Honda"}, + }, nil) + onChain.EXPECT().QueryDefinitionsByManufacturer(gomock.Any(), 1, 0). + Return([]coremodels.DeviceDefinitionTablelandModel{defToyota(2020, "Civic", "h1")}, nil) + indexer.EXPECT().UpsertDocuments(gomock.Any(), "dd-search", gomock.Any()).Return(nil) + indexer.EXPECT().ExportIDs(gomock.Any(), "dd-search").Return([]string{"h1"}, nil) + // No DeleteDocuments expectation: gomock fails the test if it is called. + + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) + require.NoError(t, err) +} diff --git a/cmd/device-definitions-api/sync_prune_test.go b/cmd/device-definitions-api/sync_prune_test.go new file mode 100644 index 00000000..407ac623 --- /dev/null +++ b/cmd/device-definitions-api/sync_prune_test.go @@ -0,0 +1,178 @@ +package main + +import ( + "context" + "fmt" + "testing" + + coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models" + mock_gateways "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways/mocks" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" +) + +func idSet(ids ...string) map[string]struct{} { + s := make(map[string]struct{}, len(ids)) + for _, id := range ids { + s[id] = struct{}{} + } + return s +} + +func TestPruneOrphans_DeletesIndexedIDsMissingFromCatalog(t *testing.T) { + ctrl := gomock.NewController(t) + indexer := NewMockSearchIndexer(ctrl) + + indexer.EXPECT().ExportIDs(gomock.Any(), "defs"). + Return([]string{"keep_1", "gone_1", "keep_2"}, nil) + indexer.EXPECT().DeleteDocuments(gomock.Any(), "defs", []string{"gone_1"}).Return(1, nil) + + n, err := pruneOrphans(context.Background(), indexer, "defs", idSet("keep_1", "keep_2"), false) + require.NoError(t, err) + assert.Equal(t, 1, n) +} + +func TestPruneOrphans_SkipsWhenCatalogIsEmpty(t *testing.T) { + ctrl := gomock.NewController(t) + indexer := NewMockSearchIndexer(ctrl) + // An empty catalog means the catalog read failed or returned nothing. + // Pruning against it would empty the whole index, so don't even export. + + n, err := pruneOrphans(context.Background(), indexer, "defs", idSet(), false) + require.NoError(t, err) + assert.Equal(t, 0, n) +} + +func TestPruneOrphans_RefusesBulkPruneUnlessAllowed(t *testing.T) { + ctrl := gomock.NewController(t) + indexer := NewMockSearchIndexer(ctrl) + + indexed := make([]string, 0, 1000) + for i := 0; i < 1000; i++ { + indexed = append(indexed, fmt.Sprintf("id_%d", i)) + } + indexer.EXPECT().ExportIDs(gomock.Any(), "defs").Return(indexed, nil) + // DeleteDocuments must not be called. + + _, err := pruneOrphans(context.Background(), indexer, "defs", idSet("id_0"), false) + require.Error(t, err) + assert.Contains(t, err.Error(), "allow-bulk-prune") +} + +func TestPruneOrphans_AllowsBulkPruneWhenFlagged(t *testing.T) { + ctrl := gomock.NewController(t) + indexer := NewMockSearchIndexer(ctrl) + + indexed := make([]string, 0, 1000) + for i := 0; i < 1000; i++ { + indexed = append(indexed, fmt.Sprintf("id_%d", i)) + } + indexer.EXPECT().ExportIDs(gomock.Any(), "defs").Return(indexed, nil) + indexer.EXPECT(). + DeleteDocuments(gomock.Any(), "defs", gomock.Len(999)). + Return(999, nil) + + n, err := pruneOrphans(context.Background(), indexer, "defs", idSet("id_0"), true) + require.NoError(t, err) + assert.Equal(t, 999, n) +} + +// A definition below the index year cutoff is not an orphan: it exists in the +// catalog, it is simply not indexed going forward. Pruning it deletes a +// document that is live and searchable today. +func TestRunSearchSync_DoesNotPruneDefinitionsBelowTheIndexYearCutoff(t *testing.T) { + ctrl := gomock.NewController(t) + identity := mock_gateways.NewMockIdentityAPI(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) + indexer := NewMockSearchIndexer(ctrl) + onChain.EXPECT().PinCatalogSnapshot(gomock.Any()).Return(nil) + onChain.EXPECT().CatalogIDs(gomock.Any()).Return([]string{"acura_mdx_2005", "acura_mdx_2020"}, nil).AnyTimes() + + identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{ + {TokenID: 1, Name: "Acura"}, + }, nil) + onChain.EXPECT().QueryDefinitionsByManufacturer(gomock.Any(), 1, 0). + Return([]coremodels.DeviceDefinitionTablelandModel{ + defToyota(2005, "MDX", "acura_mdx_2005"), // in the catalog, below the cutoff + defToyota(2020, "MDX", "acura_mdx_2020"), + }, nil) + + // Only the eligible definition is indexed. + indexer.EXPECT().UpsertDocuments(gomock.Any(), "dd-search", gomock.Len(1)).Return(nil) + + indexer.EXPECT().ExportIDs(gomock.Any(), "dd-search"). + Return([]string{"acura_mdx_2005", "acura_mdx_2020", "acura_gone_2019"}, nil) + // Only the id absent from the catalog is deleted. + indexer.EXPECT().DeleteDocuments(gomock.Any(), "dd-search", []string{"acura_gone_2019"}). + Return(1, nil) + + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) + require.NoError(t, err) +} + +// identity-api returns HTTP 200 with a populated `errors` array and null data +// when it fails, and the client surfaces that as (nil, nil). Treating zero +// manufacturers as success means the daily cron reports "Index Updated" having +// indexed nothing -- and the prune pass then has an empty keep-set. +func TestRunSearchSync_FailsWhenIdentityReturnsNoManufacturers(t *testing.T) { + ctrl := gomock.NewController(t) + identity := mock_gateways.NewMockIdentityAPI(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) + indexer := NewMockSearchIndexer(ctrl) + onChain.EXPECT().PinCatalogSnapshot(gomock.Any()).Return(nil) + + identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{}, nil) + // No upserts, no export, no deletes. + + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) + require.Error(t, err) + assert.Contains(t, err.Error(), "no manufacturers") +} + +// The sync pins one manifest before reading the catalog. Not for freshness -- +// there is no edge cache in front of the worker -- but so the per-manufacturer +// paging below cannot span two manifests mid-run. +func TestRunSearchSync_PinsAFreshCatalogSnapshotBeforePruning(t *testing.T) { + ctrl := gomock.NewController(t) + identity := mock_gateways.NewMockIdentityAPI(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) + indexer := NewMockSearchIndexer(ctrl) + + pinned := onChain.EXPECT().PinCatalogSnapshot(gomock.Any()).Return(nil) + identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{ + {TokenID: 1, Name: "Honda"}, + }, nil).After(pinned) + // The keep-set is read from the pinned snapshot, not from the walk. + onChain.EXPECT().CatalogIDs(gomock.Any()).Return([]string{"h1"}, nil).After(pinned) + onChain.EXPECT().QueryDefinitionsByManufacturer(gomock.Any(), 1, 0). + Return([]coremodels.DeviceDefinitionTablelandModel{defToyota(2020, "Civic", "h1")}, nil) + indexer.EXPECT().UpsertDocuments(gomock.Any(), "dd-search", gomock.Any()).Return(nil) + indexer.EXPECT().ExportIDs(gomock.Any(), "dd-search").Return([]string{"h1"}, nil) + + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) + require.NoError(t, err) +} + +func TestRunSearchSync_FailsWhenTheSnapshotCannotBePinned(t *testing.T) { + ctrl := gomock.NewController(t) + identity := mock_gateways.NewMockIdentityAPI(ctrl) + onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) + indexer := NewMockSearchIndexer(ctrl) + + onChain.EXPECT().PinCatalogSnapshot(gomock.Any()).Return(fmt.Errorf("catalog returned 502")) + // Nothing else may run: a keep-set built on a stale manifest deletes. + + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) + require.Error(t, err) +} + +// Pins the cap. One number, so there is no regime where a different constant +// silently takes over -- which is how a change to the old fraction shipped in a +// commit message and not in the code. +func TestPruneCapSitsBetweenChurnAndCatastrophe(t *testing.T) { + // Prod carries 41 real orphans; routine churn must never trip the guard. + assert.Greater(t, maxPruneWithoutFlag, 41) + // A keep-set that lost its largest manufacturer is ~1,615 documents. + assert.Less(t, maxPruneWithoutFlag, 1615) +} diff --git a/go.mod b/go.mod index 94708597..9879ab9f 100644 --- a/go.mod +++ b/go.mod @@ -9,9 +9,7 @@ require ( github.com/aarondl/strmangle v0.0.9 github.com/antchfx/xmlquery v1.4.4 github.com/arsmn/fiber-swagger/v2 v2.31.1 - github.com/aws/aws-sdk-go-v2/config v1.29.17 github.com/docker/go-connections v0.5.0 - github.com/ethereum/go-ethereum v1.16.1 github.com/friendsofgo/errors v0.9.2 github.com/goccy/go-json v0.10.5 github.com/gofiber/adaptor/v2 v2.2.1 @@ -34,7 +32,6 @@ require ( github.com/tidwall/sjson v1.2.5 github.com/typesense/typesense-go v1.1.0 go.uber.org/mock v0.5.2 - golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b google.golang.org/api v0.240.0 google.golang.org/grpc v1.73.0 google.golang.org/protobuf v1.36.6 @@ -46,36 +43,20 @@ require ( cloud.google.com/go/compute/metadata v0.7.0 // indirect dario.cat/mergo v1.0.2 // indirect github.com/DIMO-Network/yaml v0.1.0 // indirect - github.com/DataDog/zstd v1.5.2 // indirect github.com/MicahParks/keyfunc/v2 v2.1.0 // indirect github.com/antchfx/xpath v1.3.4 // indirect github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.70 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.25.5 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.34.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.22.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/consensys/gnark-crypto v0.18.0 // indirect github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v0.2.1 // indirect github.com/cpuguy83/dockercfg v0.3.2 // indirect - github.com/crate-crypto/go-eth-kzg v1.3.0 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect - github.com/deckarep/golang-set/v2 v2.8.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/distribution/reference v0.6.0 // indirect github.com/ebitengine/purego v0.8.4 // indirect - github.com/ethereum/c-kzg-4844/v2 v2.1.1 // indirect - github.com/ethereum/go-verkle v0.2.2 // indirect + github.com/ethereum/go-ethereum v1.16.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/go-logr/logr v1.4.3 // indirect @@ -86,7 +67,6 @@ require ( github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect github.com/googleapis/gax-go/v2 v2.14.2 // indirect - github.com/gorilla/websocket v1.5.3 // indirect github.com/holiman/uint256 v1.3.2 // indirect github.com/lib/pq v1.10.9 // indirect github.com/lufia/plan9stats v0.0.0-20250317134145-8bc96cf8fc35 // indirect @@ -111,11 +91,8 @@ require ( github.com/prometheus/procfs v0.17.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/sethvargo/go-retry v0.3.0 // indirect - github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/shirou/gopsutil/v4 v4.25.6 // indirect github.com/sony/gobreaker v1.0.0 // indirect - github.com/supranational/blst v0.3.15 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/tinylib/msgp v1.3.0 // indirect @@ -131,6 +108,7 @@ require ( go.opentelemetry.io/proto/otlp v1.0.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.39.0 // indirect + golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect golang.org/x/oauth2 v0.30.0 // indirect golang.org/x/sync v0.15.0 // indirect golang.org/x/time v0.12.0 // indirect @@ -145,11 +123,6 @@ require ( github.com/aarondl/randomize v0.0.2 // indirect github.com/andybalholm/brotli v1.2.0 // indirect github.com/avast/retry-go/v4 v4.6.1 // indirect - github.com/aws/aws-sdk-go-v2 v1.36.5 - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36 // indirect - github.com/aws/aws-sdk-go-v2/service/kms v1.41.2 - github.com/aws/smithy-go v1.22.4 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/docker v28.3.1+incompatible // indirect diff --git a/go.sum b/go.sum index 7e2db77c..c56a9679 100644 --- a/go.sum +++ b/go.sum @@ -18,8 +18,6 @@ github.com/DIMO-Network/shared v1.0.7 h1:LfSgsqJ6R7EUyfo2GTfuhrCpoDcweJqe7eVOa4j github.com/DIMO-Network/shared v1.0.7/go.mod h1:lDHUKwwT2LW6Zvd42Nb33dXklRNTmfyOlbUNx2dQfGY= github.com/DIMO-Network/yaml v0.1.0 h1:KQ3oKHUZETchR6Pxbmmol3e4ewrPv/q8cEwqxfwyZbU= github.com/DIMO-Network/yaml v0.1.0/go.mod h1:KkiehcbkVzH8Pf8f9dja8B2aW81gYYZSqfwzSj9yN68= -github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= -github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/MicahParks/keyfunc/v2 v2.1.0 h1:6ZXKb9Rp6qp1bDbJefnG7cTH8yMN1IC/4nf+GVjO99k= @@ -29,8 +27,6 @@ github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= -github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= -github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/aarondl/inflect v0.0.2 h1:XvH8K5g1wKS921tMmDOUsZ3zS1Eo8WwK5RHC0IGGT2s= github.com/aarondl/inflect v0.0.2/go.mod h1:zjmCfdXHUDQ9jFOV6SeHknpo0Au6rQhV8GchS4Vzv/0= github.com/aarondl/null/v8 v8.1.3 h1:ZJcvvj34BkXAguqU7xzDqEmzG86cSBgM8HYxcqeK0+8= @@ -57,67 +53,18 @@ github.com/arsmn/fiber-swagger/v2 v2.31.1 h1:VmX+flXiGGNqLX3loMEEzL3BMOZFSPwBEWR github.com/arsmn/fiber-swagger/v2 v2.31.1/go.mod h1:ZHhMprtB3M6jd2mleG03lPGhHH0lk9u3PtfWS1cBhMA= github.com/avast/retry-go/v4 v4.6.1 h1:VkOLRubHdisGrHnTu89g08aQEWEgRU7LVEop3GbIcMk= github.com/avast/retry-go/v4 v4.6.1/go.mod h1:V6oF8njAwxJ5gRo1Q7Cxab24xs5NCWZBeaHHBklR8mA= -github.com/aws/aws-sdk-go-v2 v1.36.5 h1:0OF9RiEMEdDdZEMqF9MRjevyxAQcf6gY+E7vwBILFj0= -github.com/aws/aws-sdk-go-v2 v1.36.5/go.mod h1:EYrzvCCN9CMUTa5+6lf6MM4tq3Zjp8UhSGR/cBsjai0= -github.com/aws/aws-sdk-go-v2/config v1.29.17 h1:jSuiQ5jEe4SAMH6lLRMY9OVC+TqJLP5655pBGjmnjr0= -github.com/aws/aws-sdk-go-v2/config v1.29.17/go.mod h1:9P4wwACpbeXs9Pm9w1QTh6BwWwJjwYvJ1iCt5QbCXh8= -github.com/aws/aws-sdk-go-v2/credentials v1.17.70 h1:ONnH5CM16RTXRkS8Z1qg7/s2eDOhHhaXVd72mmyv4/0= -github.com/aws/aws-sdk-go-v2/credentials v1.17.70/go.mod h1:M+lWhhmomVGgtuPOhO85u4pEa3SmssPTdcYpP/5J/xc= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32 h1:KAXP9JSHO1vKGCr5f4O6WmlVKLFFXgWYAGoJosorxzU= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.32/go.mod h1:h4Sg6FQdexC1yYG9RDnOvLbW1a/P986++/Y/a+GyEM8= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36 h1:SsytQyTMHMDPspp+spo7XwXTP44aJZZAC7fBV2C5+5s= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.36/go.mod h1:Q1lnJArKRXkenyog6+Y+zr7WDpk4e6XlR6gs20bbeNo= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36 h1:i2vNHQiXUvKhs3quBR6aqlgJaiaexz/aNvdCktW/kAM= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.36/go.mod h1:UdyGa7Q91id/sdyHPwth+043HhmP6yP9MBHgbZM0xo8= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4 h1:CXV68E2dNqhuynZJPB80bhPQwAKqBWVer887figW6Jc= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.4/go.mod h1:/xFi9KtvBXP97ppCz1TAEvU1Uf66qvid89rbem3wCzQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17 h1:t0E6FzREdtCsiLIoLCWsYliNsRBgyGD/MCK571qk4MI= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.17/go.mod h1:ygpklyoaypuyDvOM5ujWGrYWpAK3h7ugnmKCU/76Ys4= -github.com/aws/aws-sdk-go-v2/service/kms v1.41.2 h1:zJeUxFP7+XP52u23vrp4zMcVhShTWbNO8dHV6xCSvFo= -github.com/aws/aws-sdk-go-v2/service/kms v1.41.2/go.mod h1:Pqd9k4TuespkireN206cK2QBsaBTL6X+VPAez5Qcijk= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.5 h1:AIRJ3lfb2w/1/8wOOSqYb9fUKGwQbtysJ2H1MofRUPg= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.5/go.mod h1:b7SiVprpU+iGazDUqvRSLf5XmCdn+JtT1on7uNL6Ipc= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3 h1:BpOxT3yhLwSJ77qIY3DoHAQjZsc4HEGfMCE4NGy3uFg= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.3/go.mod h1:vq/GQR1gOFLquZMSrxUK/cpvKCNVYibNyJ1m7JrU88E= -github.com/aws/aws-sdk-go-v2/service/sts v1.34.0 h1:NFOJ/NXEGV4Rq//71Hs1jC/NvPs1ezajK+yQmkwnPV0= -github.com/aws/aws-sdk-go-v2/service/sts v1.34.0/go.mod h1:7ph2tGpfQvwzgistp2+zga9f+bCjlQJPkPUmMgDSD7w= -github.com/aws/smithy-go v1.22.4 h1:uqXzVZNuNexwc/xrh6Tb56u89WDlJY6HS+KC0S4QSjw= -github.com/aws/smithy-go v1.22.4/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bits-and-blooms/bitset v1.22.0 h1:Tquv9S8+SGaS3EhyA+up3FXzmkhxPGjQQCkcs2uw7w4= -github.com/bits-and-blooms/bitset v1.22.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= -github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= -github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce h1:giXvy4KSc/6g/esnpM7Geqxka4WSqI1SZc7sMJFd3y4= -github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v1.1.5 h1:5AAWCBWbat0uE0blr8qzufZP5tBjkRyy/jWe1QWLnvw= -github.com/cockroachdb/pebble v1.1.5/go.mod h1:17wO9el1YEigxkP/YtV8NtCivQDgoCyBg5c4VR/eOWo= -github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= -github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/consensys/gnark-crypto v0.18.0 h1:vIye/FqI50VeAr0B3dx+YjeIvmc3LWz4yEfbWBpTUf0= -github.com/consensys/gnark-crypto v0.18.0/go.mod h1:L3mXGFTe1ZN+RSJ+CLjUt9x7PNdx8ubaYfDROyp2Z8c= github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= @@ -130,26 +77,12 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= -github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-eth-kzg v1.3.0 h1:05GrhASN9kDAidaFJOda6A4BEvgvuXbazXg/0E3OOdI= -github.com/crate-crypto/go-eth-kzg v1.3.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= -github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a h1:W8mUrRp6NOVl3J+MYp5kPMoUZPp7aOYHtaua31lwRHg= -github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a/go.mod h1:sTwzHBvIzm2RfVCGNEBZgRyjwK40bVoun3ZnGOCafNM= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set/v2 v2.8.0 h1:swm0rlPCmdWn9mESxKOjWk8hXSqoxOp+ZlfuyaAdFlQ= -github.com/deckarep/golang-set/v2 v2.8.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= -github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8= -github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= -github.com/deepmap/oapi-codegen v1.6.0 h1:w/d1ntwh91XI0b/8ja7+u5SvA4IFfM0UNNLmiDR1gg0= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= @@ -170,29 +103,16 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ericlagergren/decimal v0.0.0-20181231230500-73749d4874d5 h1:HQGCJNlqt1dUs/BhtEKmqWd6LWS+DWYVxi9+Jo4r0jE= github.com/ericlagergren/decimal v0.0.0-20181231230500-73749d4874d5/go.mod h1:1yj25TwtUlJ+pfOu9apAVaM1RWfZGg+aFpd4hPQZekQ= -github.com/ethereum/c-kzg-4844/v2 v2.1.1 h1:KhzBVjmURsfr1+S3k/VE35T02+AW2qU9t9gr4R6YpSo= -github.com/ethereum/c-kzg-4844/v2 v2.1.1/go.mod h1:TC48kOKjJKPbN7C++qIgt0TJzZ70QznYR7Ob+WXl57E= github.com/ethereum/go-ethereum v1.16.1 h1:7684NfKCb1+IChudzdKyZJ12l1Tq4ybPZOITiCDXqCk= github.com/ethereum/go-ethereum v1.16.1/go.mod h1:ngYIvmMAYdo4sGW9cGzLvSsPGhDOOzL0jK5S5iXpj0g= -github.com/ethereum/go-verkle v0.2.2 h1:I2W0WjnrFUIzzVPwm8ykY+7pL2d4VhlsePn4j7cnFk8= -github.com/ethereum/go-verkle v0.2.2/go.mod h1:M3b90YRnzqKyyzBEWJGqj8Qff4IDeXnzFw0P9bFw3uk= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/ferranbt/fastssz v0.1.2 h1:Dky6dXlngF6Qjc+EfDipAkE83N5I5DE68bY6O0VLNPk= -github.com/ferranbt/fastssz v0.1.2/go.mod h1:X5UPrE2u1UJjxHA8X54u04SBwdAQjG2sFtWs39YxyWs= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/friendsofgo/errors v0.9.2 h1:X6NYxef4efCBdwI7BgS820zFaN7Cphrmb+Pljdzjtgk= github.com/friendsofgo/errors v0.9.2/go.mod h1:yCvFW5AkDIL9qn7suHVLiI/gH228n7PC4Pn44IGoTOI= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= -github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -221,7 +141,6 @@ github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDq github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -232,15 +151,11 @@ github.com/gofiber/contrib/jwt v1.1.2/go.mod h1:CpIwrkUQ3Q6IP8y9n3f0wP9bOnSKx39E github.com/gofiber/fiber/v2 v2.31.0/go.mod h1:1Ega6O199a3Y7yDGuM9FyXDPYQfv+7/y48wl6WCwUF4= github.com/gofiber/fiber/v2 v2.52.8 h1:xl4jJQ0BV5EJTA2aWiKw/VddRpHrKeZLF0QPUxqn0x4= github.com/gofiber/fiber/v2 v2.52.8/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= -github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= -github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= -github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -251,30 +166,12 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= -github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/subcommands v1.2.0 h1:vWQspBTo2nEqTUFita5/KeEWlUL8kQObDFbub/EN9oE= @@ -286,10 +183,6 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7 github.com/googleapis/gax-go/v2 v2.14.2 h1:eBLnkZ9635krYIPD+ag1USrOAI0Nr0QYF3+/3GqO0k0= github.com/googleapis/gax-go/v2 v2.14.2/go.mod h1:ON64QhlJkhVtSqp4v1uaK92VyZ2gmvDQsweuyLV+8+w= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= -github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= -github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0= @@ -298,26 +191,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= -github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= -github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= -github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= -github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= -github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= -github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= -github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c h1:qSHzRbhzK8RdXOsAdfDgO49TtqC1oZ+acxPrkfTxcCs= -github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jarcoal/httpmock v1.1.0 h1:F47ChZj1Y2zFsCXxNkBPwNNKnAyOATcdQibk0qEdVCE= github.com/jarcoal/httpmock v1.1.0/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= github.com/jinzhu/copier v0.3.4 h1:mfU6jI9PtCeUjkjQ322dlff9ELjGDu975C2p/nrubVI= @@ -331,8 +206,6 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= -github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= -github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -343,8 +216,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzWu4= -github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= @@ -368,12 +239,8 @@ github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6T github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY= github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/go-archive v0.1.0 h1:Kk/5rdW/g+H8NHdJW2gsXyZ7UnzvJNOy6VKJqueWdcQ= @@ -397,29 +264,18 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oapi-codegen/runtime v1.1.1 h1:EXLHh0DXIJnWhdRPN2w4MXAzFyE4CskzhNLUmtpMYro= github.com/oapi-codegen/runtime v1.1.1/go.mod h1:SK9X900oXmPWilYR5/WKPzt3Kqxn/uS/+lbpREv+eCg= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= -github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/otiai10/copy v1.7.0/go.mod h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= @@ -428,20 +284,8 @@ github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT9 github.com/otiai10/mint v1.3.3/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM= github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= -github.com/pion/dtls/v2 v2.2.7 h1:cSUBsETxepsCSFSxC3mc/aDo14qQLMSL+O6IjG28yV8= -github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= -github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= -github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= -github.com/pion/stun/v2 v2.0.0 h1:A5+wXKLAypxQri59+tmQKVs7+l6mMM+3d+eER9ifRU0= -github.com/pion/stun/v2 v2.0.0/go.mod h1:22qRSh08fSEttYUmJZGlriq9+03jtVmXNODgLccj8GQ= -github.com/pion/transport/v2 v2.2.1 h1:7qYnCBlpgSJNYMbLCKuSY9KbQdBFoETvPNETv0y4N7c= -github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= -github.com/pion/transport/v3 v3.0.1 h1:gDTlPJwROfSfz6QfSi0ZmeCSkFcnWWiiR9ES0ouANiM= -github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -469,21 +313,14 @@ github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= -github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/segmentio/ksuid v1.0.4 h1:sBo2BdShXjmcugAMwjugoGUdUV0pcxY5mW4xKRn3v4c= github.com/segmentio/ksuid v1.0.4/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE= github.com/sethvargo/go-retry v0.3.0 h1:EEt31A35QhrcRZtrYFDTBg91cqZVnFL2navjDrah2SE= github.com/sethvargo/go-retry v0.3.0/go.mod h1:mNX17F0C/HguQMyMyJxcnU471gOZGxCLyYaFyAZraas= -github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= -github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v4 v4.25.6 h1:kLysI2JsKorfaFPcYmcJqbzROzsBWEOAtw6A7dIfqXs= github.com/shirou/gopsutil/v4 v4.25.6/go.mod h1:PfybzyydfZcN+JMMjkF6Zb8Mq1A/VcogFFg7hj50W9c= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= @@ -505,22 +342,16 @@ github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/supranational/blst v0.3.15 h1:rd9viN6tfARE5wv3KZJ9H8e1cg0jXW8syFCcsbHa76o= -github.com/supranational/blst v0.3.15/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/swaggo/files v0.0.0-20210815190702-a29dd2bc99b2/go.mod h1:lKJPbtWzJ9JhsTN1k1gZgleJWY/cqq0psdoMmaThG3w= github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= github.com/swaggo/swag v1.8.1/go.mod h1:ugemnJsPZm/kRwFUnzBlbHRd0JY9zE1M4F+uy2pAaPQ= github.com/swaggo/swag v1.16.4 h1:clWJtd9LStiG3VeijiCfOVODP6VpHtKdQy9ELFG3s1A= github.com/swaggo/swag v1.16.4/go.mod h1:VBsHJRsDvfYvqoiMKnsdwhNV9LEMHgEDZcyVYX0sxPg= -github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= -github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/testcontainers/testcontainers-go v0.37.0 h1:L2Qc0vkTw2EHWQ08djon0D2uw7Z/PtHS/QzZZ5Ra/hg= github.com/testcontainers/testcontainers-go v0.37.0/go.mod h1:QPzbxZhQ6Bclip9igjLFj6z0hs01bU8lrl2dHQmgFGM= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= @@ -542,16 +373,12 @@ github.com/tklauser/numcpus v0.10.0/go.mod h1:BiTKazU708GQTYF4mB+cmlpT2Is1gLk7XV github.com/typesense/typesense-go v1.1.0 h1:QocehDarVXRArMIosPIdawiVFZZbnRkPJxwnAGOFkzw= github.com/typesense/typesense-go v1.1.0/go.mod h1:KcPODU7ltrcUFC/gygMTkAAfZ9M8/q6ayrdl1MnE1kI= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= -github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.34.0/go.mod h1:epZA5N+7pY6ZaEKRmstzOuYJx9HI8DI1oaCGZpdH4h0= github.com/valyala/fasthttp v1.63.0 h1:DisIL8OjB7ul2d7cBaMRcKTQDYnrGy56R4FCiuDP0Ns= github.com/valyala/fasthttp v1.63.0/go.mod h1:REc4IeW+cAEyLrRPa5A81MIjvz0QE1laoTX2EaPHKJM= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= -github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -618,21 +445,17 @@ golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= @@ -661,20 +484,13 @@ golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -683,7 +499,6 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -732,7 +547,6 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= @@ -745,7 +559,6 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/api v0.240.0 h1:PxG3AA2UIqT1ofIzWV2COM3j3JagKTKSwy7L6RHNXNU= @@ -768,14 +581,6 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok= google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -783,17 +588,12 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= -gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/api/api.go b/internal/api/api.go index 93c65b8d..95a10ee4 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -3,15 +3,11 @@ package api import ( "context" - "github.com/DIMO-Network/device-definitions-api/internal/contracts" jwtware "github.com/gofiber/contrib/jwt" "github.com/gofiber/fiber/v2/middleware/cors" "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/search" - "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/sender" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/DIMO-Network/device-definitions-api/internal/core/mediator" "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/metrics" @@ -35,7 +31,7 @@ import ( "github.com/rs/zerolog" ) -func Run(ctx context.Context, logger zerolog.Logger, settings *config.Settings, send sender.Sender) { +func Run(ctx context.Context, logger zerolog.Logger, settings *config.Settings) { //db pdb := db.NewDbConnectionFromSettings(ctx, &settings.DB, true) @@ -44,16 +40,6 @@ func Run(ctx context.Context, logger zerolog.Logger, settings *config.Settings, // redis //redisCache := redis.NewRedisCacheService(settings.IsProd(), settings.Redis) - ethClient, err := ethclient.Dial(settings.EthereumRPCURL.String()) - if err != nil { - logger.Fatal().Err(err).Msg("Failed to create Ethereum client.") - } - - chainID, err := ethClient.ChainID(ctx) - if err != nil { - logger.Fatal().Err(err).Msg("Couldn't retrieve chain id.") - } - //infra identityAPI := gateways.NewIdentityAPIService(&logger, settings) drivlyAPIService := gateways.NewDrivlyAPIService(settings) @@ -63,46 +49,42 @@ func Run(ctx context.Context, logger zerolog.Logger, settings *config.Settings, japan17VINAPI := gateways.NewJapan17VINAPI(&logger, settings) carvxAPI := gateways.NewCarVxVINAPI(&logger, settings) elevaAPI := gateways.NewElevaAPI(settings) - registryInstance, err := contracts.NewRegistry(settings.EthereumRegistryAddress, ethClient) - if err != nil { - logger.Fatal().Err(err).Msg("Failed to create registry query instance.") - } - ddOnChainService := gateways.NewDeviceDefinitionOnChainService(settings, &logger, ethClient, chainID, send, pdb.DBS) + ddCatalogService := gateways.NewDeviceDefinitionCatalogService(settings, &logger) datGroupWSService := gateways.NewDATGroupAPIService(settings, &logger) //repos //makeRepository := repositories.NewDeviceMakeRepository(pdb.DBS) deviceStyleRepository := repositories.NewDeviceStyleRepository(pdb.DBS) - vinRepository := repositories.NewVINRepository(pdb.DBS, registryInstance, identityAPI) + vinRepository := repositories.NewVINRepository(pdb.DBS, identityAPI) //cache services - vincDecodingService := services.NewVINDecodingService(drivlyAPIService, vincarioAPIService, autoIsoAPIService, &logger, ddOnChainService, datGroupWSService, pdb.DBS, japan17VINAPI, carvxAPI, elevaAPI) - powerTrainTypeService, err := services.NewPowerTrainTypeService("powertrain_type_rule.yaml", &logger, ddOnChainService) + vincDecodingService := services.NewVINDecodingService(drivlyAPIService, vincarioAPIService, autoIsoAPIService, &logger, ddCatalogService, datGroupWSService, pdb.DBS, japan17VINAPI, carvxAPI, elevaAPI) + powerTrainTypeService, err := services.NewPowerTrainTypeService("powertrain_type_rule.yaml", &logger, ddCatalogService) searchService := search.NewTypesenseAPIService(settings, &logger) if err != nil { logger.Fatal().Err(err).Send() } - decodeVINHandler := queries.NewDecodeVINQueryHandler(pdb.DBS, vincDecodingService, vinRepository, &logger, fuelAPIService, powerTrainTypeService, ddOnChainService, identityAPI) - upsertVINHandler := queries.NewUpsertDecodingQueryHandler(pdb.DBS, &logger, ddOnChainService) + decodeVINHandler := queries.NewDecodeVINQueryHandler(pdb.DBS, vincDecodingService, vinRepository, &logger, fuelAPIService, powerTrainTypeService, ddCatalogService, identityAPI) + upsertVINHandler := queries.NewUpsertDecodingQueryHandler(pdb.DBS, &logger, ddCatalogService) //custom commands m, _ := mediator.New( //mediator.WithBehaviour(common.NewLoggingBehavior(&logger, settings)), //mediator.WithBehaviour(common.NewValidationBehavior(&logger, settings)), //mediator.WithBehaviour(common.NewErrorHandlingBehavior(&logger, settings)), - mediator.WithHandler(&queries.GetDeviceDefinitionByIDQuery{}, queries.NewGetDeviceDefinitionByIDQueryHandler(ddOnChainService, pdb.DBS)), - mediator.WithHandler(&queries.GetDeviceDefinitionByMakeModelYearQuery{}, queries.NewGetDeviceDefinitionByMakeModelYearQueryHandler(ddOnChainService, pdb.DBS, identityAPI)), - mediator.WithHandler(&queries.GetDeviceDefinitionByDynamicFilterQuery{}, queries.NewGetDeviceDefinitionByDynamicFilterQueryHandler(pdb.DBS, ddOnChainService)), + mediator.WithHandler(&queries.GetDeviceDefinitionByIDQuery{}, queries.NewGetDeviceDefinitionByIDQueryHandler(ddCatalogService, pdb.DBS)), + mediator.WithHandler(&queries.GetDeviceDefinitionByMakeModelYearQuery{}, queries.NewGetDeviceDefinitionByMakeModelYearQueryHandler(ddCatalogService, pdb.DBS, identityAPI)), + mediator.WithHandler(&queries.GetDeviceDefinitionByDynamicFilterQuery{}, queries.NewGetDeviceDefinitionByDynamicFilterQueryHandler(pdb.DBS, ddCatalogService)), mediator.WithHandler(&queries.GetAllIntegrationQuery{}, queries.NewGetAllIntegrationQueryHandler(pdb.DBS)), mediator.WithHandler(&queries.GetIntegrationByIDQuery{}, queries.NewGetIntegrationByIDQueryHandler(pdb.DBS)), - mediator.WithHandler(&queries.GetDeviceStyleByIDQuery{}, queries.NewGetDeviceStyleByIDQueryHandler(pdb.DBS, ddOnChainService)), + mediator.WithHandler(&queries.GetDeviceStyleByIDQuery{}, queries.NewGetDeviceStyleByIDQueryHandler(pdb.DBS, ddCatalogService)), mediator.WithHandler(&queries.GetDeviceStyleByFilterQuery{}, queries.NewGetDeviceStyleByFilterQueryHandler(pdb.DBS)), mediator.WithHandler(&queries.GetDeviceStyleByDeviceDefinitionIDQuery{}, queries.NewGetDeviceStyleByDeviceDefinitionIDQueryHandler(pdb.DBS)), mediator.WithHandler(&queries.GetDeviceStyleByExternalIDQuery{}, queries.NewGetDeviceStyleByExternalIDQueryHandler(pdb.DBS)), mediator.WithHandler(&queries.GetDeviceTypeByIDQuery{}, queries.NewGetDeviceTypeByIDQueryHandler(pdb.DBS)), mediator.WithHandler(&queries.GetDeviceDefinitionImagesByIDsQuery{}, queries.NewGetDeviceDefinitionImagesByIDsQueryHandler(pdb.DBS, &logger)), - mediator.WithHandler(&commands.CreateDeviceDefinitionCommand{}, commands.NewCreateDeviceDefinitionCommandHandler(ddOnChainService, pdb.DBS, powerTrainTypeService, fuelAPIService, &logger, identityAPI)), + mediator.WithHandler(&commands.CreateDeviceDefinitionCommand{}, commands.NewCreateDeviceDefinitionCommandHandler(ddCatalogService, pdb.DBS, powerTrainTypeService, fuelAPIService, &logger, identityAPI)), mediator.WithHandler(&commands.CreateDeviceStyleCommand{}, commands.NewCreateDeviceStyleCommandHandler(deviceStyleRepository)), mediator.WithHandler(&commands.UpdateDeviceStyleCommand{}, commands.NewUpdateDeviceStyleCommandHandler(pdb.DBS)), mediator.WithHandler(&queries.GetAllDeviceTypeQuery{}, queries.NewGetAllDeviceTypeQueryHandler(pdb.DBS)), @@ -114,7 +96,7 @@ func Run(ctx context.Context, logger zerolog.Logger, settings *config.Settings, mediator.WithHandler(&commands.BulkValidateVinCommand{}, commands.NewBulkValidateVinCommandHandler( pdb.DBS, decodeVINHandler, - queries.NewGetDeviceDefinitionByIDQueryHandler(ddOnChainService, pdb.DBS), + queries.NewGetDeviceDefinitionByIDQueryHandler(ddCatalogService, pdb.DBS), )), mediator.WithHandler(&queries.GetIntegrationByTokenIDQuery{}, queries.NewGetIntegrationByTokenIDQueryHandler(pdb.DBS, &logger)), @@ -122,7 +104,7 @@ func Run(ctx context.Context, logger zerolog.Logger, settings *config.Settings, mediator.WithHandler(&queries.GetR1CompatibilitySearch{}, queries.NewGetR1CompatibilitySearchQueryHandler(searchService)), mediator.WithHandler(&queries.GetAllDeviceDefinitionByAutocompleteQuery{}, queries.NewGetAllDeviceDefinitionByAutocompleteQueryHandler(searchService)), mediator.WithHandler(&queries.GetCompatibilityR1SheetQuery{}, queries.NewCompatibilityR1SheetQueryHandler(settings)), - mediator.WithHandler(&queries.GetDeviceDefinitionByIDQueryV2{}, queries.NewGetDeviceDefinitionByIDQueryV2Handler(ddOnChainService, pdb.DBS)), + mediator.WithHandler(&queries.GetDeviceDefinitionByIDQueryV2{}, queries.NewGetDeviceDefinitionByIDQueryV2Handler(ddCatalogService, pdb.DBS)), mediator.WithHandler(&queries.GetVINProfileQuery{}, queries.NewGetVINProfileQueryHandler(pdb.DBS, &logger, powerTrainTypeService)), mediator.WithHandler(&queries.UpsertDecodingQuery{}, upsertVINHandler), @@ -152,7 +134,7 @@ func Run(ctx context.Context, logger zerolog.Logger, settings *config.Settings, app.Get("/v1/swagger/*", swagger.HandlerDefault) - go StartGrpcServer(logger, settings, *m, pdb.DBS, ddOnChainService, registryInstance, identityAPI, &decodeVINHandler, &upsertVINHandler) + go StartGrpcServer(logger, settings, *m, pdb.DBS, &decodeVINHandler, &upsertVINHandler) // Start Server from a different go routine go func() { diff --git a/internal/api/grpc_definitions_service.go b/internal/api/grpc_definitions_service.go index 918891a7..737458d9 100644 --- a/internal/api/grpc_definitions_service.go +++ b/internal/api/grpc_definitions_service.go @@ -2,158 +2,46 @@ package api import ( "context" - "encoding/json" - stringutils "github.com/DIMO-Network/shared/pkg/strings" - - "github.com/ethereum/go-ethereum/accounts/abi/bind" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/emptypb" - "github.com/DIMO-Network/device-definitions-api/internal/contracts" "github.com/DIMO-Network/device-definitions-api/internal/core/commands" "github.com/DIMO-Network/device-definitions-api/internal/core/mediator" coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models" "github.com/DIMO-Network/device-definitions-api/internal/core/queries" - "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways" p_grpc "github.com/DIMO-Network/device-definitions-api/pkg/grpc" "github.com/DIMO-Network/shared/pkg/db" - "github.com/friendsofgo/errors" "github.com/rs/zerolog" ) type GrpcDefinitionsService struct { p_grpc.DeviceDefinitionServiceServer - Mediator mediator.Mediator - logger *zerolog.Logger - dbs *db.ReaderWriter - onChainDeviceDefs gateways.DeviceDefinitionOnChainService - queryInstance *contracts.Registry - identity gateways.IdentityAPI + Mediator mediator.Mediator + logger *zerolog.Logger + dbs *db.ReaderWriter } -func NewGrpcService(mediator mediator.Mediator, logger *zerolog.Logger, dbs func() *db.ReaderWriter, - onChainDefs gateways.DeviceDefinitionOnChainService, queryInstance *contracts.Registry, identity gateways.IdentityAPI) p_grpc.DeviceDefinitionServiceServer { - return &GrpcDefinitionsService{Mediator: mediator, logger: logger, dbs: dbs(), onChainDeviceDefs: onChainDefs, queryInstance: queryInstance, identity: identity} +func NewGrpcService(mediator mediator.Mediator, logger *zerolog.Logger, dbs func() *db.ReaderWriter) p_grpc.DeviceDefinitionServiceServer { + return &GrpcDefinitionsService{Mediator: mediator, logger: logger, dbs: dbs()} } //** Device Definitions +// Definition create/update/list moved to the definitions-worker (R2 catalog) +// and the public identity-api / catalog endpoints. The RPCs remain registered +// for wire compatibility but are no longer implemented. -// GetFilteredDeviceDefinition used by: admin, cs-support-platform -func (s *GrpcDefinitionsService) GetFilteredDeviceDefinition(ctx context.Context, in *p_grpc.FilterDeviceDefinitionRequest) (*p_grpc.GetFilteredDeviceDefinitionsResponse, error) { - - qryResult, _ := s.Mediator.Send(ctx, &queries.GetDeviceDefinitionByDynamicFilterQuery{ - DefinitionID: in.DefinitionId, - MakeSlug: in.MakeSlug, - Year: int(in.Year), - Model: in.Model, - VerifiedVinList: in.VerifiedVinList, - PageIndex: int(in.PageIndex), - PageSize: int(in.PageSize), - }) - - ddResult := qryResult.([]queries.DeviceDefinitionQueryResponse) - - result := &p_grpc.GetFilteredDeviceDefinitionsResponse{} - - for _, deviceDefinition := range ddResult { - var ei map[string]string - var extIDs []*p_grpc.ExternalID - if err := deviceDefinition.ExternalIDs.Unmarshal(&ei); err != nil { - for vendor, id := range ei { - extIDs = append(extIDs, &p_grpc.ExternalID{ - Vendor: vendor, - Id: id, - }) - } - } - result.Items = append(result.Items, &p_grpc.FilterDeviceDefinitionsReponse{ - Id: deviceDefinition.ID, - NameSlug: deviceDefinition.NameSlug, - Model: deviceDefinition.Model, - Year: int32(deviceDefinition.Year), - ImageUrl: deviceDefinition.ImageURL.String, - CreatedAt: deviceDefinition.CreatedAt.UnixMilli(), - UpdatedAt: deviceDefinition.UpdatedAt.UnixMilli(), - Metadata: string(deviceDefinition.Metadata.JSON), - Verified: deviceDefinition.Verified, - DeviceMakeId: deviceDefinition.DeviceMakeID, - Make: deviceDefinition.Make, - ExternalIds: extIDs, - }) - } - - return result, nil +func (s *GrpcDefinitionsService) GetFilteredDeviceDefinition(_ context.Context, _ *p_grpc.FilterDeviceDefinitionRequest) (*p_grpc.GetFilteredDeviceDefinitionsResponse, error) { + return nil, status.Error(codes.Unimplemented, "device definition reads moved to identity-api and the definitions catalog") } -// CreateDeviceDefinition used by: dimo-admin -func (s *GrpcDefinitionsService) CreateDeviceDefinition(ctx context.Context, in *p_grpc.CreateDeviceDefinitionRequest) (*p_grpc.CreateDeviceDefinitionResponse, error) { - // todo we could call the command directly, but maintain testability, what about the update, could it share logic - command := &commands.CreateDeviceDefinitionCommand{ - Source: in.Source, - Make: in.Make, - Model: in.Model, - Year: int(in.Year), - DeviceTypeID: in.DeviceTypeId, - HardwareTemplateID: in.HardwareTemplateId, - Verified: in.Verified, - } - - if len(in.DeviceAttributes) > 0 { - for _, attribute := range in.DeviceAttributes { - command.DeviceAttributes = append(command.DeviceAttributes, &coremodels.UpdateDeviceTypeAttribute{ - Name: attribute.Name, - Value: attribute.Value, - }) - } - } - - commandResult, _ := s.Mediator.Send(ctx, command) - result := commandResult.(commands.CreateDeviceDefinitionCommandResult) - - return &p_grpc.CreateDeviceDefinitionResponse{Id: result.ID, NameSlug: result.NameSlug}, nil +func (s *GrpcDefinitionsService) CreateDeviceDefinition(_ context.Context, _ *p_grpc.CreateDeviceDefinitionRequest) (*p_grpc.CreateDeviceDefinitionResponse, error) { + return nil, status.Error(codes.Unimplemented, "device definition writes moved to the definitions-worker") } -// UpdateDeviceDefinition is used by admin tool to update tableland properties of a dd, and a couple augmented properties -func (s *GrpcDefinitionsService) UpdateDeviceDefinition(ctx context.Context, in *p_grpc.UpdateDeviceDefinitionRequest) (*p_grpc.BaseResponse, error) { - // if verified = true, send update request to tableland - dm, err := s.identity.GetManufacturer(stringutils.SlugString(in.ManufacturerName)) - if err != nil { - return nil, errors.Wrap(err, "failed to find device make") - } - // get manufacturer from chain - manufacturerID, err := s.queryInstance.GetManufacturerIdByName(&bind.CallOpts{Context: ctx, Pending: true}, dm.Name) - if err != nil { - return nil, errors.Wrapf(err, "failed to GetManufacturerIdByName for update: %s", dm.Name) - } - ddTbland, err := s.onChainDeviceDefs.GetDefinitionTableland(ctx, manufacturerID, in.DeviceDefinitionId) // repurposed for definitionID - if err != nil { - return nil, errors.Wrapf(err, "failed to find device definition in tableland for update: %s", in.DeviceDefinitionId) - } - shouldUpdate := false - metadata := gateways.BuildDeviceTypeAttributesTbland(in.DeviceAttributes) - tblMetadata, err := json.Marshal(ddTbland.Metadata) - if err != nil { - s.logger.Err(err).Msgf("failed to unmarshall metadata for: %s", in.DeviceDefinitionId) - } - // check for any changes - if string(tblMetadata) != metadata || ddTbland.DeviceType != in.DeviceTypeId || ddTbland.ImageURI != in.ImageUrl { - shouldUpdate = true - } - if shouldUpdate { - // on chain portion of update - _, err = s.onChainDeviceDefs.Update(ctx, dm.Name, contracts.DeviceDefinitionUpdateInput{ - Id: in.DeviceDefinitionId, // name slug - Metadata: metadata, - Ksuid: ddTbland.KSUID, - DeviceType: in.DeviceTypeId, - ImageURI: in.ImageUrl, - }) - if err != nil { - return nil, errors.Wrap(err, "failed to update device definition on chain") - } - } - - return &p_grpc.BaseResponse{Id: in.DeviceDefinitionId}, nil +func (s *GrpcDefinitionsService) UpdateDeviceDefinition(_ context.Context, _ *p_grpc.UpdateDeviceDefinitionRequest) (*p_grpc.BaseResponse, error) { + return nil, status.Error(codes.Unimplemented, "device definition writes moved to the definitions-worker") } //** Integrations diff --git a/internal/api/grpc_server.go b/internal/api/grpc_server.go index cbcbc803..0dfcd519 100644 --- a/internal/api/grpc_server.go +++ b/internal/api/grpc_server.go @@ -5,9 +5,6 @@ import ( "github.com/DIMO-Network/device-definitions-api/internal/core/queries" - "github.com/DIMO-Network/device-definitions-api/internal/contracts" - - "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways" "github.com/DIMO-Network/shared/pkg/db" "github.com/DIMO-Network/device-definitions-api/internal/api/common" @@ -26,14 +23,13 @@ import ( ) func StartGrpcServer(logger zerolog.Logger, s *config.Settings, m mediator.Mediator, dbs func() *db.ReaderWriter, - onChainDeviceDefs gateways.DeviceDefinitionOnChainService, registryInstance *contracts.Registry, identity gateways.IdentityAPI, decodeVINHandler *queries.DecodeVINQueryHandler, upsertVINHandler *queries.UpsertDecodingQueryHandler) { lis, err := net.Listen("tcp", ":"+s.GRPCPort) if err != nil { logger.Fatal().Msgf("Failed to listen on port %v: %v", s.GRPCPort, err) } - deviceDefinitionService := NewGrpcService(m, &logger, dbs, onChainDeviceDefs, registryInstance, identity) + deviceDefinitionService := NewGrpcService(m, &logger, dbs) integrationService := NewGrpcIntegrationService(m, &logger) decodeService := NewGrpcVinDecoderService(&logger, decodeVINHandler, upsertVINHandler) diff --git a/internal/api/handlers/device_definition_handler.go b/internal/api/handlers/device_definition_handler.go index 23c80f2b..4ea1589b 100644 --- a/internal/api/handlers/device_definition_handler.go +++ b/internal/api/handlers/device_definition_handler.go @@ -166,6 +166,15 @@ func GetR1CompatibilitySearch(m mediator.Mediator) fiber.Handler { pageInt, _ := strconv.Atoi(page) pageSizeInt, _ := strconv.Atoi(pageSize) + // Same clamp as the definitions search below: Query's default applies + // only when the parameter is absent, so pageSize=0 reaches the handler + // as 0 and divides by zero computing totalPages. + if pageSizeInt <= 0 { + pageSizeInt = defaultPageSize + } + if pageInt <= 0 { + pageInt = defaultPage + } query := &queries.GetR1CompatibilitySearch{Query: q, PageSize: pageSizeInt, Page: pageInt} @@ -226,6 +235,15 @@ func GetDeviceDefinitionSearch(m mediator.Mediator) fiber.Handler { pageInt, _ := strconv.Atoi(page) pageSizeInt, _ := strconv.Atoi(pageSize) + // c.Query's default only applies when the parameter is absent, so an + // explicit pageSize=0 (or an unparseable one) reaches the handler as 0 + // and divides by zero when totalPages is computed. + if pageSizeInt <= 0 { + pageSizeInt = defaultPageSize + } + if pageInt <= 0 { + pageInt = defaultPage + } query := &queries.GetAllDeviceDefinitionBySearchQuery{Query: q, Make: mk, Model: model, Year: yrInt, PageSize: pageSizeInt, Page: pageInt} diff --git a/internal/config/settings.go b/internal/config/settings.go index 5a2baed0..023fa511 100644 --- a/internal/config/settings.go +++ b/internal/config/settings.go @@ -5,7 +5,6 @@ import ( "net/url" "github.com/DIMO-Network/shared/pkg/db" - "github.com/ethereum/go-ethereum/common" "github.com/DIMO-Network/shared/pkg/redis" ) @@ -32,13 +31,9 @@ type Settings struct { VincarioAPISecret string `yaml:"VINCARIO_API_SECRET"` AutoIsoAPIUid string `yaml:"AUTO_ISO_API_UID"` AutoIsoAPIKey string `yaml:"AUTO_ISO_API_KEY"` - EthereumRPCURL url.URL `yaml:"ETHEREUM_RPC_URL"` - PrivateKeyMode bool `yaml:"PRIVATE_KEY_MODE"` - SenderPrivateKey string `yaml:"SENDER_PRIVATE_KEY"` - KMSKeyID string `yaml:"KMS_KEY_ID"` - EthereumSendTransaction bool `yaml:"ETHEREUM_SEND_TRANSACTION"` - EthereumRegistryAddress common.Address `yaml:"ETHEREUM_REGISTRY_ADDRESS"` - TablelandAPIGateway string `yaml:"TABLELAND_API_GATEWAY"` + DefinitionsCatalogURL string `yaml:"DEFINITIONS_CATALOG_URL"` + DefinitionsWorkerURL string `yaml:"DEFINITIONS_WORKER_URL"` + DefinitionsWorkerToken string `yaml:"DEFINITIONS_WORKER_TOKEN"` DatGroupURL url.URL `yaml:"DAT_GROUP_URL"` DatGroupCustomerLogin string `yaml:"DAT_GROUP_CUSTOMER_LOGIN"` DatGroupCustomerNumber string `yaml:"DAT_GROUP_CUSTOMER_NUMBER"` @@ -49,7 +44,6 @@ type Settings struct { SearchServiceIndexName string `yaml:"SEARCH_SERVICE_DEVICE_DEFINITION_INDEX"` JwtKeySetURL string `yaml:"JWT_KEY_SET_URL"` IdentityAPIURL url.URL `yaml:"IDENTITY_API_URL"` - PolygonScanAPIKey string `yaml:"POLYGON_SCAN_API_KEY"` GoogleSheetsCredentials string `yaml:"GOOGLE_SHEETS_CREDENTIALS"` Japan17VINUser string `yaml:"JAPAN17_VIN_USER"` Japan17VINPassword string `yaml:"JAPAN17_VIN_PASSWORD"` diff --git a/internal/contracts/registry.go b/internal/contracts/registry.go deleted file mode 100644 index 0d5a0b80..00000000 --- a/internal/contracts/registry.go +++ /dev/null @@ -1,12686 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package contracts - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// AftermarketDeviceIdAddressPair is an auto generated low-level Go binding around an user-defined struct. -type AftermarketDeviceIdAddressPair struct { - AftermarketDeviceNodeId *big.Int - DeviceAddress common.Address -} - -// AftermarketDeviceInfos is an auto generated low-level Go binding around an user-defined struct. -type AftermarketDeviceInfos struct { - Addr common.Address - AttrInfoPairs []AttributeInfoPair -} - -// AftermarketDeviceOwnerPair is an auto generated low-level Go binding around an user-defined struct. -type AftermarketDeviceOwnerPair struct { - AftermarketDeviceNodeId *big.Int - Owner common.Address -} - -// AttributeInfoPair is an auto generated low-level Go binding around an user-defined struct. -type AttributeInfoPair struct { - Attribute string - Info string -} - -// DevAdminIdManufacturerName is an auto generated low-level Go binding around an user-defined struct. -type DevAdminIdManufacturerName struct { - TokenId *big.Int - Name string -} - -// DevAdminVehicleIdDeviceDefinitionId is an auto generated low-level Go binding around an user-defined struct. -type DevAdminVehicleIdDeviceDefinitionId struct { - VehicleId *big.Int - DeviceDefinitionId string -} - -// DeviceDefinitionInput is an auto generated low-level Go binding around an user-defined struct. -type DeviceDefinitionInput struct { - Id string - Model string - Year *big.Int - Metadata string - Ksuid string - DeviceType string - ImageURI string -} - -// DeviceDefinitionUpdateInput is an auto generated low-level Go binding around an user-defined struct. -type DeviceDefinitionUpdateInput struct { - Id string - Metadata string - Ksuid string - DeviceType string - ImageURI string -} - -// MintSyntheticDeviceBatchInput is an auto generated low-level Go binding around an user-defined struct. -type MintSyntheticDeviceBatchInput struct { - VehicleNode *big.Int - SyntheticDeviceAddr common.Address - AttrInfoPairs []AttributeInfoPair -} - -// MintSyntheticDeviceInput is an auto generated low-level Go binding around an user-defined struct. -type MintSyntheticDeviceInput struct { - IntegrationNode *big.Int - VehicleNode *big.Int - SyntheticDeviceSig []byte - VehicleOwnerSig []byte - SyntheticDeviceAddr common.Address - AttrInfoPairs []AttributeInfoPair -} - -// MintVehicleAndSdInput is an auto generated low-level Go binding around an user-defined struct. -type MintVehicleAndSdInput struct { - ManufacturerNode *big.Int - Owner common.Address - AttrInfoPairsVehicle []AttributeInfoPair - IntegrationNode *big.Int - VehicleOwnerSig []byte - SyntheticDeviceSig []byte - SyntheticDeviceAddr common.Address - AttrInfoPairsDevice []AttributeInfoPair -} - -// MintVehicleAndSdWithDdInput is an auto generated low-level Go binding around an user-defined struct. -type MintVehicleAndSdWithDdInput struct { - ManufacturerNode *big.Int - Owner common.Address - DeviceDefinitionId string - AttrInfoPairsVehicle []AttributeInfoPair - IntegrationNode *big.Int - VehicleOwnerSig []byte - SyntheticDeviceSig []byte - SyntheticDeviceAddr common.Address - AttrInfoPairsDevice []AttributeInfoPair -} - -// TablelandPolicy is an auto generated low-level Go binding around an user-defined struct. -type TablelandPolicy struct { - AllowInsert bool - AllowUpdate bool - AllowDelete bool - WhereClause string - WithCheck string - UpdatableColumns []string -} - -// RegistryMetaData contains all meta data concerning the Registry contract. -var RegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"UintUtils__InsufficientHexLength\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"moduleAddr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"ModuleAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"moduleAddr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"ModuleRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"oldSelectors\",\"type\":\"bytes4[]\"},{\"indexed\":false,\"internalType\":\"bytes4[]\",\"name\":\"newSelectors\",\"type\":\"bytes4[]\"}],\"name\":\"ModuleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"addModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"name\":\"removeModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"oldSelectors\",\"type\":\"bytes4[]\"},{\"internalType\":\"bytes4[]\",\"name\":\"newSelectors\",\"type\":\"bytes4[]\"}],\"name\":\"updateModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AdNotClaimed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AdPaired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InvalidNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"VehiclePaired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"AftermarketDeviceAttributeSetDevAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"adNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceNodeBurnedDevAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDevicePaired\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceTransferredDevAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"}],\"name\":\"AftermarketDeviceUnclaimedDevAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceUnpairedDevAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"ddId\",\"type\":\"string\"}],\"name\":\"DeviceDefinitionIdSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"SyntheticDeviceAttributeSetDevAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"syntheticDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"SyntheticDeviceNodeBurnedDevAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"VehicleAttributeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"VehicleAttributeSetDevAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"VehicleNodeBurnedDevAdmin\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnAftermarketDevices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnAftermarketDevicesAndDeletePairings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnSyntheticDevicesAndDeletePairings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnVehicles\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"adminBurnVehiclesAndDeletePairings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"adminCacheDimoStreamrEns\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newParentNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"nodeIdList\",\"type\":\"uint256[]\"}],\"name\":\"adminChangeParentNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"}],\"name\":\"adminPairAftermarketDevice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"adminRemoveVehicleAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"}],\"internalType\":\"structDevAdmin.VehicleIdDeviceDefinitionId[]\",\"name\":\"vehicleIdDdId\",\"type\":\"tuple[]\"}],\"name\":\"adminSetVehicleDDs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structDevAdmin.IdManufacturerName[]\",\"name\":\"idManufacturerNames\",\"type\":\"tuple[]\"}],\"name\":\"renameManufacturers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferAftermarketDeviceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"aftermarketDeviceNodes\",\"type\":\"uint256[]\"}],\"name\":\"unclaimAftermarketDeviceNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"aftermarketDeviceNodes\",\"type\":\"uint256[]\"}],\"name\":\"unpairAftermarketDeviceByDeviceNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"vehicleNodes\",\"type\":\"uint256[]\"}],\"name\":\"unpairAftermarketDeviceByVehicleNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multiDelegateCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multiStaticCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"AdNotPaired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attr\",\"type\":\"string\"}],\"name\":\"AttributeExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attr\",\"type\":\"string\"}],\"name\":\"AttributeNotWhitelisted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"DeviceAlreadyClaimed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"DeviceAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAdSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLicense\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOwnerSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InvalidParentNode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnersDoNotMatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"VehicleNotPaired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aftermarketDeviceAddress\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceAddressReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"AftermarketDeviceAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"AftermarketDeviceAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceIdProxySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceNodeBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"aftermarketDeviceAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceNodeMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"AftermarketDeviceUnpaired\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addAftermarketDeviceAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNodeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"internalType\":\"structAftermarketDeviceOwnerPair[]\",\"name\":\"adOwnerPair\",\"type\":\"tuple[]\"}],\"name\":\"claimAftermarketDeviceBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"ownerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"aftermarketDeviceSig\",\"type\":\"bytes\"}],\"name\":\"claimAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"getAftermarketDeviceAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getAftermarketDeviceIdByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"isAftermarketDeviceClaimed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isClaimed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairs\",\"type\":\"tuple[]\"}],\"internalType\":\"structAftermarketDeviceInfos[]\",\"name\":\"adInfos\",\"type\":\"tuple[]\"}],\"name\":\"mintAftermarketDeviceByManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"aftermarketDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"}],\"name\":\"pairAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"pairAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"aftermarketDeviceNodeList\",\"type\":\"uint256[]\"}],\"name\":\"reprovisionAftermarketDeviceByManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNodeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"deviceAddress\",\"type\":\"address\"}],\"internalType\":\"structAftermarketDeviceIdAddressPair[]\",\"name\":\"adIdAddrs\",\"type\":\"tuple[]\"}],\"name\":\"resetAftermarketDeviceAddressByManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAftermarketDeviceIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"setAftermarketDeviceInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"}],\"name\":\"unpairAftermarketDevice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"aftermarketDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"unpairAftermarketDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"ControllerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"ManufacturerAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"ManufacturerAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ManufacturerIdProxySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ManufacturerNodeMinted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addManufacturerAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"getManufacturerIdByName\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getManufacturerNameById\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isAllowedToOwnManufacturerNode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isAllowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isController\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isManufacturerMinted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isManufacturerMinted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairList\",\"type\":\"tuple[]\"}],\"name\":\"mintManufacturer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"names\",\"type\":\"string[]\"}],\"name\":\"mintManufacturerBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"setController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setManufacturerIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoList\",\"type\":\"tuple[]\"}],\"name\":\"setManufacturerInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"updateManufacturerMinted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"AlreadyController\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"IntegrationNameRegisterd\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"MustBeAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"NotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyNftProxy\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"IntegrationAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"IntegrationAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"IntegrationIdProxySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"IntegrationNodeMinted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addIntegrationAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"getIntegrationIdByName\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getIntegrationNameById\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isAllowedToOwnIntegrationNode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isAllowed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isIntegrationController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isController\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isIntegrationMinted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"_isIntegrationMinted\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairList\",\"type\":\"tuple[]\"}],\"name\":\"mintIntegration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"names\",\"type\":\"string[]\"}],\"name\":\"mintIntegrationBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_controller\",\"type\":\"address\"}],\"name\":\"setIntegrationController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setIntegrationIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoList\",\"type\":\"tuple[]\"}],\"name\":\"setIntegrationInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"updateIntegrationMinted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"InvalidSdSignature\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"SyntheticDeviceAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"SyntheticDeviceAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"SyntheticDeviceIdProxySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"syntheticDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"SyntheticDeviceNodeBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"integrationNode\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"syntheticDeviceNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"syntheticDeviceAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"SyntheticDeviceNodeMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"name\":\"VehicleAttributeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"VehicleNodeMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"}],\"name\":\"VehicleNodeMintedWithDeviceDefinition\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addSyntheticDeviceAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"syntheticDeviceNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"ownerSig\",\"type\":\"bytes\"}],\"name\":\"burnSyntheticDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"getSyntheticDeviceAddressById\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getSyntheticDeviceIdByAddress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"integrationNode\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairs\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintSyntheticDeviceBatchInput[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"mintSyntheticDeviceBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"integrationNode\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairs\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintSyntheticDeviceInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"mintSyntheticDeviceSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setSyntheticDeviceIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"setSyntheticDeviceInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"VehicleAttributeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"VehicleIdProxySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleNode\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"VehicleNodeBurned\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"addVehicleAttribute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"ownerSig\",\"type\":\"bytes\"}],\"name\":\"burnVehicleSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"getDeviceDefinitionIdByVehicleId\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"ddId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"mintVehicle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"mintVehicleSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"mintVehicleWithDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"mintVehicleWithDeviceDefinitionSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setVehicleIdProxyAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfo\",\"type\":\"tuple[]\"}],\"name\":\"setVehicleInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"validateBurnAndResetNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getDataURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"}],\"name\":\"getInfo\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getParentNode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"parentNode\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"BeneficiarySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"}],\"name\":\"getBeneficiary\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sourceNode\",\"type\":\"uint256\"}],\"name\":\"getLink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"targetNode\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddressSource\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"idProxyAddressTarget\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sourceNode\",\"type\":\"uint256\"}],\"name\":\"getNodeLink\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"targetNode\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"nodeId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"setAftermarketDeviceBeneficiary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsVehicle\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"integrationNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintVehicleAndSdInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"mintVehicleAndSdSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerNode\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"deviceDefinitionId\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsVehicle\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"integrationNode\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"vehicleOwnerSig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"syntheticDeviceSig\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"syntheticDeviceAddr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"attribute\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"info\",\"type\":\"string\"}],\"internalType\":\"structAttributeInfoPair[]\",\"name\":\"attrInfoPairsDevice\",\"type\":\"tuple[]\"}],\"internalType\":\"structMintVehicleAndSdWithDdInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"mintVehicleAndSdWithDeviceDefinitionSign\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dataUri\",\"type\":\"string\"}],\"name\":\"BaseDataURISet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"idProxyAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_baseDataURI\",\"type\":\"string\"}],\"name\":\"setBaseDataURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dimoCredit\",\"type\":\"address\"}],\"name\":\"DimoCreditSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dimoToken\",\"type\":\"address\"}],\"name\":\"DimoTokenSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"foundation\",\"type\":\"address\"}],\"name\":\"FoundationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"manufacturerLicense\",\"type\":\"address\"}],\"name\":\"ManufacturerLicenseSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getDimoCredit\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"dimoCredit\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDimoToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"dimoToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFoundation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"foundation\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getManufacturerLicense\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"manufacturerLicense\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dimoCredit\",\"type\":\"address\"}],\"name\":\"setDimoCredit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dimoToken\",\"type\":\"address\"}],\"name\":\"setDimoToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"foundation\",\"type\":\"address\"}],\"name\":\"setFoundation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manufacturerLicense\",\"type\":\"address\"}],\"name\":\"setManufacturerLicense\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dimoStreamrEns\",\"type\":\"string\"}],\"name\":\"DimoStreamrEnsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"dimoStreamrNode\",\"type\":\"address\"}],\"name\":\"DimoStreamrNodeSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"streamRegistry\",\"type\":\"address\"}],\"name\":\"StreamRegistrySet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"dimoStreamrEns\",\"type\":\"string\"}],\"name\":\"setDimoBaseStreamId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dimoStreamrNode\",\"type\":\"address\"}],\"name\":\"setDimoStreamrNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"streamRegistry\",\"type\":\"address\"}],\"name\":\"setStreamRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"enumIStreamRegistry.PermissionType\",\"name\":\"permissionType\",\"type\":\"uint8\"}],\"name\":\"NoStreamrPermission\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"StreamDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"VehicleStreamAlreadySet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"VehicleStreamNotSet\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"SubscribedToVehicleStream\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"VehicleStreamSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"VehicleStreamUnset\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"createVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"getVehicleStream\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"onBurnVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"onSetSubscribePrivilege\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"onTransferVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"subscriber\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"setSubscriptionToVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"streamId\",\"type\":\"string\"}],\"name\":\"setVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expirationTime\",\"type\":\"uint256\"}],\"name\":\"subscribeToVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"vehicleId\",\"type\":\"uint256\"}],\"name\":\"unsetVehicleStream\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainid\",\"type\":\"uint256\"}],\"name\":\"ChainNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"InvalidManufacturerId\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"TableAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"TableDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"}],\"name\":\"DeviceDefinitionDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"model\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"year\",\"type\":\"uint256\"}],\"name\":\"DeviceDefinitionInserted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tableOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"DeviceDefinitionTableCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"}],\"name\":\"DeviceDefinitionUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"ManufacturerTableSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tableOwner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"createDeviceDefinitionTable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tableOwner\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"manufacturerIds\",\"type\":\"uint256[]\"}],\"name\":\"createDeviceDefinitionTableBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"}],\"name\":\"deleteDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"getDeviceDefinitionTableId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"}],\"name\":\"getDeviceDefinitionTableName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"tableName\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"model\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"year\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"ksuid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"deviceType\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"imageURI\",\"type\":\"string\"}],\"internalType\":\"structDeviceDefinitionInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"insertDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"model\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"year\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"ksuid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"deviceType\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"imageURI\",\"type\":\"string\"}],\"internalType\":\"structDeviceDefinitionInput[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"insertDeviceDefinitionBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tableId\",\"type\":\"uint256\"}],\"name\":\"setDeviceDefinitionTable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"manufacturerId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"id\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"ksuid\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"deviceType\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"imageURI\",\"type\":\"string\"}],\"internalType\":\"structDeviceDefinitionUpdateInput\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"updateDeviceDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getPolicy\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"allowInsert\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowUpdate\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"allowDelete\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"whereClause\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"withCheck\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"updatableColumns\",\"type\":\"string[]\"}],\"internalType\":\"structTablelandPolicy\",\"name\":\"policy\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"operation\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"name\":\"OperationCostSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operation\",\"type\":\"bytes32\"}],\"name\":\"getDcxOperationCost\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"operation\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"cost\",\"type\":\"uint256\"}],\"name\":\"setDcxOperationCost\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", -} - -// RegistryABI is the input ABI used to generate the binding from. -// Deprecated: Use RegistryMetaData.ABI instead. -var RegistryABI = RegistryMetaData.ABI - -// Registry is an auto generated Go binding around an Ethereum contract. -type Registry struct { - RegistryCaller // Read-only binding to the contract - RegistryTransactor // Write-only binding to the contract - RegistryFilterer // Log filterer for contract events -} - -// RegistryCaller is an auto generated read-only Go binding around an Ethereum contract. -type RegistryCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// RegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. -type RegistryTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// RegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type RegistryFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// RegistrySession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type RegistrySession struct { - Contract *Registry // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// RegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type RegistryCallerSession struct { - Contract *RegistryCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// RegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type RegistryTransactorSession struct { - Contract *RegistryTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// RegistryRaw is an auto generated low-level Go binding around an Ethereum contract. -type RegistryRaw struct { - Contract *Registry // Generic contract binding to access the raw methods on -} - -// RegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type RegistryCallerRaw struct { - Contract *RegistryCaller // Generic read-only contract binding to access the raw methods on -} - -// RegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type RegistryTransactorRaw struct { - Contract *RegistryTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewRegistry creates a new instance of Registry, bound to a specific deployed contract. -func NewRegistry(address common.Address, backend bind.ContractBackend) (*Registry, error) { - contract, err := bindRegistry(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &Registry{RegistryCaller: RegistryCaller{contract: contract}, RegistryTransactor: RegistryTransactor{contract: contract}, RegistryFilterer: RegistryFilterer{contract: contract}}, nil -} - -// NewRegistryCaller creates a new read-only instance of Registry, bound to a specific deployed contract. -func NewRegistryCaller(address common.Address, caller bind.ContractCaller) (*RegistryCaller, error) { - contract, err := bindRegistry(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &RegistryCaller{contract: contract}, nil -} - -// NewRegistryTransactor creates a new write-only instance of Registry, bound to a specific deployed contract. -func NewRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*RegistryTransactor, error) { - contract, err := bindRegistry(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &RegistryTransactor{contract: contract}, nil -} - -// NewRegistryFilterer creates a new log filterer instance of Registry, bound to a specific deployed contract. -func NewRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*RegistryFilterer, error) { - contract, err := bindRegistry(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &RegistryFilterer{contract: contract}, nil -} - -// bindRegistry binds a generic wrapper to an already deployed contract. -func bindRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := RegistryMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Registry *RegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Registry.Contract.RegistryCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Registry *RegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Registry.Contract.RegistryTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Registry *RegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Registry.Contract.RegistryTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_Registry *RegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _Registry.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_Registry *RegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Registry.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_Registry *RegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _Registry.Contract.contract.Transact(opts, method, params...) -} - -// GetAftermarketDeviceAddressById is a free data retrieval call binding the contract method 0x682a25e3. -// -// Solidity: function getAftermarketDeviceAddressById(uint256 nodeId) view returns(address addr) -func (_Registry *RegistryCaller) GetAftermarketDeviceAddressById(opts *bind.CallOpts, nodeId *big.Int) (common.Address, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getAftermarketDeviceAddressById", nodeId) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetAftermarketDeviceAddressById is a free data retrieval call binding the contract method 0x682a25e3. -// -// Solidity: function getAftermarketDeviceAddressById(uint256 nodeId) view returns(address addr) -func (_Registry *RegistrySession) GetAftermarketDeviceAddressById(nodeId *big.Int) (common.Address, error) { - return _Registry.Contract.GetAftermarketDeviceAddressById(&_Registry.CallOpts, nodeId) -} - -// GetAftermarketDeviceAddressById is a free data retrieval call binding the contract method 0x682a25e3. -// -// Solidity: function getAftermarketDeviceAddressById(uint256 nodeId) view returns(address addr) -func (_Registry *RegistryCallerSession) GetAftermarketDeviceAddressById(nodeId *big.Int) (common.Address, error) { - return _Registry.Contract.GetAftermarketDeviceAddressById(&_Registry.CallOpts, nodeId) -} - -// GetAftermarketDeviceIdByAddress is a free data retrieval call binding the contract method 0x9796cf22. -// -// Solidity: function getAftermarketDeviceIdByAddress(address addr) view returns(uint256 nodeId) -func (_Registry *RegistryCaller) GetAftermarketDeviceIdByAddress(opts *bind.CallOpts, addr common.Address) (*big.Int, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getAftermarketDeviceIdByAddress", addr) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetAftermarketDeviceIdByAddress is a free data retrieval call binding the contract method 0x9796cf22. -// -// Solidity: function getAftermarketDeviceIdByAddress(address addr) view returns(uint256 nodeId) -func (_Registry *RegistrySession) GetAftermarketDeviceIdByAddress(addr common.Address) (*big.Int, error) { - return _Registry.Contract.GetAftermarketDeviceIdByAddress(&_Registry.CallOpts, addr) -} - -// GetAftermarketDeviceIdByAddress is a free data retrieval call binding the contract method 0x9796cf22. -// -// Solidity: function getAftermarketDeviceIdByAddress(address addr) view returns(uint256 nodeId) -func (_Registry *RegistryCallerSession) GetAftermarketDeviceIdByAddress(addr common.Address) (*big.Int, error) { - return _Registry.Contract.GetAftermarketDeviceIdByAddress(&_Registry.CallOpts, addr) -} - -// GetBeneficiary is a free data retrieval call binding the contract method 0x0a6cef46. -// -// Solidity: function getBeneficiary(address idProxyAddress, uint256 nodeId) view returns(address beneficiary) -func (_Registry *RegistryCaller) GetBeneficiary(opts *bind.CallOpts, idProxyAddress common.Address, nodeId *big.Int) (common.Address, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getBeneficiary", idProxyAddress, nodeId) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetBeneficiary is a free data retrieval call binding the contract method 0x0a6cef46. -// -// Solidity: function getBeneficiary(address idProxyAddress, uint256 nodeId) view returns(address beneficiary) -func (_Registry *RegistrySession) GetBeneficiary(idProxyAddress common.Address, nodeId *big.Int) (common.Address, error) { - return _Registry.Contract.GetBeneficiary(&_Registry.CallOpts, idProxyAddress, nodeId) -} - -// GetBeneficiary is a free data retrieval call binding the contract method 0x0a6cef46. -// -// Solidity: function getBeneficiary(address idProxyAddress, uint256 nodeId) view returns(address beneficiary) -func (_Registry *RegistryCallerSession) GetBeneficiary(idProxyAddress common.Address, nodeId *big.Int) (common.Address, error) { - return _Registry.Contract.GetBeneficiary(&_Registry.CallOpts, idProxyAddress, nodeId) -} - -// GetDataURI is a free data retrieval call binding the contract method 0xbc60a6ba. -// -// Solidity: function getDataURI(address idProxyAddress, uint256 tokenId) view returns(string data) -func (_Registry *RegistryCaller) GetDataURI(opts *bind.CallOpts, idProxyAddress common.Address, tokenId *big.Int) (string, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getDataURI", idProxyAddress, tokenId) - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GetDataURI is a free data retrieval call binding the contract method 0xbc60a6ba. -// -// Solidity: function getDataURI(address idProxyAddress, uint256 tokenId) view returns(string data) -func (_Registry *RegistrySession) GetDataURI(idProxyAddress common.Address, tokenId *big.Int) (string, error) { - return _Registry.Contract.GetDataURI(&_Registry.CallOpts, idProxyAddress, tokenId) -} - -// GetDataURI is a free data retrieval call binding the contract method 0xbc60a6ba. -// -// Solidity: function getDataURI(address idProxyAddress, uint256 tokenId) view returns(string data) -func (_Registry *RegistryCallerSession) GetDataURI(idProxyAddress common.Address, tokenId *big.Int) (string, error) { - return _Registry.Contract.GetDataURI(&_Registry.CallOpts, idProxyAddress, tokenId) -} - -// GetDcxOperationCost is a free data retrieval call binding the contract method 0xd25f5787. -// -// Solidity: function getDcxOperationCost(bytes32 operation) view returns(uint256 cost) -func (_Registry *RegistryCaller) GetDcxOperationCost(opts *bind.CallOpts, operation [32]byte) (*big.Int, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getDcxOperationCost", operation) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetDcxOperationCost is a free data retrieval call binding the contract method 0xd25f5787. -// -// Solidity: function getDcxOperationCost(bytes32 operation) view returns(uint256 cost) -func (_Registry *RegistrySession) GetDcxOperationCost(operation [32]byte) (*big.Int, error) { - return _Registry.Contract.GetDcxOperationCost(&_Registry.CallOpts, operation) -} - -// GetDcxOperationCost is a free data retrieval call binding the contract method 0xd25f5787. -// -// Solidity: function getDcxOperationCost(bytes32 operation) view returns(uint256 cost) -func (_Registry *RegistryCallerSession) GetDcxOperationCost(operation [32]byte) (*big.Int, error) { - return _Registry.Contract.GetDcxOperationCost(&_Registry.CallOpts, operation) -} - -// GetDeviceDefinitionIdByVehicleId is a free data retrieval call binding the contract method 0xb7bded95. -// -// Solidity: function getDeviceDefinitionIdByVehicleId(uint256 vehicleId) view returns(string ddId) -func (_Registry *RegistryCaller) GetDeviceDefinitionIdByVehicleId(opts *bind.CallOpts, vehicleId *big.Int) (string, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getDeviceDefinitionIdByVehicleId", vehicleId) - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GetDeviceDefinitionIdByVehicleId is a free data retrieval call binding the contract method 0xb7bded95. -// -// Solidity: function getDeviceDefinitionIdByVehicleId(uint256 vehicleId) view returns(string ddId) -func (_Registry *RegistrySession) GetDeviceDefinitionIdByVehicleId(vehicleId *big.Int) (string, error) { - return _Registry.Contract.GetDeviceDefinitionIdByVehicleId(&_Registry.CallOpts, vehicleId) -} - -// GetDeviceDefinitionIdByVehicleId is a free data retrieval call binding the contract method 0xb7bded95. -// -// Solidity: function getDeviceDefinitionIdByVehicleId(uint256 vehicleId) view returns(string ddId) -func (_Registry *RegistryCallerSession) GetDeviceDefinitionIdByVehicleId(vehicleId *big.Int) (string, error) { - return _Registry.Contract.GetDeviceDefinitionIdByVehicleId(&_Registry.CallOpts, vehicleId) -} - -// GetDeviceDefinitionTableId is a free data retrieval call binding the contract method 0x396e5987. -// -// Solidity: function getDeviceDefinitionTableId(uint256 manufacturerId) view returns(uint256 tableId) -func (_Registry *RegistryCaller) GetDeviceDefinitionTableId(opts *bind.CallOpts, manufacturerId *big.Int) (*big.Int, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getDeviceDefinitionTableId", manufacturerId) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetDeviceDefinitionTableId is a free data retrieval call binding the contract method 0x396e5987. -// -// Solidity: function getDeviceDefinitionTableId(uint256 manufacturerId) view returns(uint256 tableId) -func (_Registry *RegistrySession) GetDeviceDefinitionTableId(manufacturerId *big.Int) (*big.Int, error) { - return _Registry.Contract.GetDeviceDefinitionTableId(&_Registry.CallOpts, manufacturerId) -} - -// GetDeviceDefinitionTableId is a free data retrieval call binding the contract method 0x396e5987. -// -// Solidity: function getDeviceDefinitionTableId(uint256 manufacturerId) view returns(uint256 tableId) -func (_Registry *RegistryCallerSession) GetDeviceDefinitionTableId(manufacturerId *big.Int) (*big.Int, error) { - return _Registry.Contract.GetDeviceDefinitionTableId(&_Registry.CallOpts, manufacturerId) -} - -// GetDeviceDefinitionTableName is a free data retrieval call binding the contract method 0xa1d17941. -// -// Solidity: function getDeviceDefinitionTableName(uint256 manufacturerId) view returns(string tableName) -func (_Registry *RegistryCaller) GetDeviceDefinitionTableName(opts *bind.CallOpts, manufacturerId *big.Int) (string, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getDeviceDefinitionTableName", manufacturerId) - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GetDeviceDefinitionTableName is a free data retrieval call binding the contract method 0xa1d17941. -// -// Solidity: function getDeviceDefinitionTableName(uint256 manufacturerId) view returns(string tableName) -func (_Registry *RegistrySession) GetDeviceDefinitionTableName(manufacturerId *big.Int) (string, error) { - return _Registry.Contract.GetDeviceDefinitionTableName(&_Registry.CallOpts, manufacturerId) -} - -// GetDeviceDefinitionTableName is a free data retrieval call binding the contract method 0xa1d17941. -// -// Solidity: function getDeviceDefinitionTableName(uint256 manufacturerId) view returns(string tableName) -func (_Registry *RegistryCallerSession) GetDeviceDefinitionTableName(manufacturerId *big.Int) (string, error) { - return _Registry.Contract.GetDeviceDefinitionTableName(&_Registry.CallOpts, manufacturerId) -} - -// GetDimoCredit is a free data retrieval call binding the contract method 0xcfe55b7d. -// -// Solidity: function getDimoCredit() view returns(address dimoCredit) -func (_Registry *RegistryCaller) GetDimoCredit(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getDimoCredit") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetDimoCredit is a free data retrieval call binding the contract method 0xcfe55b7d. -// -// Solidity: function getDimoCredit() view returns(address dimoCredit) -func (_Registry *RegistrySession) GetDimoCredit() (common.Address, error) { - return _Registry.Contract.GetDimoCredit(&_Registry.CallOpts) -} - -// GetDimoCredit is a free data retrieval call binding the contract method 0xcfe55b7d. -// -// Solidity: function getDimoCredit() view returns(address dimoCredit) -func (_Registry *RegistryCallerSession) GetDimoCredit() (common.Address, error) { - return _Registry.Contract.GetDimoCredit(&_Registry.CallOpts) -} - -// GetDimoToken is a free data retrieval call binding the contract method 0x77898251. -// -// Solidity: function getDimoToken() view returns(address dimoToken) -func (_Registry *RegistryCaller) GetDimoToken(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getDimoToken") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetDimoToken is a free data retrieval call binding the contract method 0x77898251. -// -// Solidity: function getDimoToken() view returns(address dimoToken) -func (_Registry *RegistrySession) GetDimoToken() (common.Address, error) { - return _Registry.Contract.GetDimoToken(&_Registry.CallOpts) -} - -// GetDimoToken is a free data retrieval call binding the contract method 0x77898251. -// -// Solidity: function getDimoToken() view returns(address dimoToken) -func (_Registry *RegistryCallerSession) GetDimoToken() (common.Address, error) { - return _Registry.Contract.GetDimoToken(&_Registry.CallOpts) -} - -// GetFoundation is a free data retrieval call binding the contract method 0xa2bc6cdf. -// -// Solidity: function getFoundation() view returns(address foundation) -func (_Registry *RegistryCaller) GetFoundation(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getFoundation") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetFoundation is a free data retrieval call binding the contract method 0xa2bc6cdf. -// -// Solidity: function getFoundation() view returns(address foundation) -func (_Registry *RegistrySession) GetFoundation() (common.Address, error) { - return _Registry.Contract.GetFoundation(&_Registry.CallOpts) -} - -// GetFoundation is a free data retrieval call binding the contract method 0xa2bc6cdf. -// -// Solidity: function getFoundation() view returns(address foundation) -func (_Registry *RegistryCallerSession) GetFoundation() (common.Address, error) { - return _Registry.Contract.GetFoundation(&_Registry.CallOpts) -} - -// GetInfo is a free data retrieval call binding the contract method 0xdce2f860. -// -// Solidity: function getInfo(address idProxyAddress, uint256 tokenId, string attribute) view returns(string info) -func (_Registry *RegistryCaller) GetInfo(opts *bind.CallOpts, idProxyAddress common.Address, tokenId *big.Int, attribute string) (string, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getInfo", idProxyAddress, tokenId, attribute) - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GetInfo is a free data retrieval call binding the contract method 0xdce2f860. -// -// Solidity: function getInfo(address idProxyAddress, uint256 tokenId, string attribute) view returns(string info) -func (_Registry *RegistrySession) GetInfo(idProxyAddress common.Address, tokenId *big.Int, attribute string) (string, error) { - return _Registry.Contract.GetInfo(&_Registry.CallOpts, idProxyAddress, tokenId, attribute) -} - -// GetInfo is a free data retrieval call binding the contract method 0xdce2f860. -// -// Solidity: function getInfo(address idProxyAddress, uint256 tokenId, string attribute) view returns(string info) -func (_Registry *RegistryCallerSession) GetInfo(idProxyAddress common.Address, tokenId *big.Int, attribute string) (string, error) { - return _Registry.Contract.GetInfo(&_Registry.CallOpts, idProxyAddress, tokenId, attribute) -} - -// GetIntegrationIdByName is a free data retrieval call binding the contract method 0x714b7cfb. -// -// Solidity: function getIntegrationIdByName(string name) view returns(uint256 nodeId) -func (_Registry *RegistryCaller) GetIntegrationIdByName(opts *bind.CallOpts, name string) (*big.Int, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getIntegrationIdByName", name) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetIntegrationIdByName is a free data retrieval call binding the contract method 0x714b7cfb. -// -// Solidity: function getIntegrationIdByName(string name) view returns(uint256 nodeId) -func (_Registry *RegistrySession) GetIntegrationIdByName(name string) (*big.Int, error) { - return _Registry.Contract.GetIntegrationIdByName(&_Registry.CallOpts, name) -} - -// GetIntegrationIdByName is a free data retrieval call binding the contract method 0x714b7cfb. -// -// Solidity: function getIntegrationIdByName(string name) view returns(uint256 nodeId) -func (_Registry *RegistryCallerSession) GetIntegrationIdByName(name string) (*big.Int, error) { - return _Registry.Contract.GetIntegrationIdByName(&_Registry.CallOpts, name) -} - -// GetIntegrationNameById is a free data retrieval call binding the contract method 0x123141bd. -// -// Solidity: function getIntegrationNameById(uint256 tokenId) view returns(string name) -func (_Registry *RegistryCaller) GetIntegrationNameById(opts *bind.CallOpts, tokenId *big.Int) (string, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getIntegrationNameById", tokenId) - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GetIntegrationNameById is a free data retrieval call binding the contract method 0x123141bd. -// -// Solidity: function getIntegrationNameById(uint256 tokenId) view returns(string name) -func (_Registry *RegistrySession) GetIntegrationNameById(tokenId *big.Int) (string, error) { - return _Registry.Contract.GetIntegrationNameById(&_Registry.CallOpts, tokenId) -} - -// GetIntegrationNameById is a free data retrieval call binding the contract method 0x123141bd. -// -// Solidity: function getIntegrationNameById(uint256 tokenId) view returns(string name) -func (_Registry *RegistryCallerSession) GetIntegrationNameById(tokenId *big.Int) (string, error) { - return _Registry.Contract.GetIntegrationNameById(&_Registry.CallOpts, tokenId) -} - -// GetLink is a free data retrieval call binding the contract method 0x112e62a2. -// -// Solidity: function getLink(address idProxyAddress, uint256 sourceNode) view returns(uint256 targetNode) -func (_Registry *RegistryCaller) GetLink(opts *bind.CallOpts, idProxyAddress common.Address, sourceNode *big.Int) (*big.Int, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getLink", idProxyAddress, sourceNode) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetLink is a free data retrieval call binding the contract method 0x112e62a2. -// -// Solidity: function getLink(address idProxyAddress, uint256 sourceNode) view returns(uint256 targetNode) -func (_Registry *RegistrySession) GetLink(idProxyAddress common.Address, sourceNode *big.Int) (*big.Int, error) { - return _Registry.Contract.GetLink(&_Registry.CallOpts, idProxyAddress, sourceNode) -} - -// GetLink is a free data retrieval call binding the contract method 0x112e62a2. -// -// Solidity: function getLink(address idProxyAddress, uint256 sourceNode) view returns(uint256 targetNode) -func (_Registry *RegistryCallerSession) GetLink(idProxyAddress common.Address, sourceNode *big.Int) (*big.Int, error) { - return _Registry.Contract.GetLink(&_Registry.CallOpts, idProxyAddress, sourceNode) -} - -// GetManufacturerIdByName is a free data retrieval call binding the contract method 0xce55aab0. -// -// Solidity: function getManufacturerIdByName(string name) view returns(uint256 nodeId) -func (_Registry *RegistryCaller) GetManufacturerIdByName(opts *bind.CallOpts, name string) (*big.Int, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getManufacturerIdByName", name) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetManufacturerIdByName is a free data retrieval call binding the contract method 0xce55aab0. -// -// Solidity: function getManufacturerIdByName(string name) view returns(uint256 nodeId) -func (_Registry *RegistrySession) GetManufacturerIdByName(name string) (*big.Int, error) { - return _Registry.Contract.GetManufacturerIdByName(&_Registry.CallOpts, name) -} - -// GetManufacturerIdByName is a free data retrieval call binding the contract method 0xce55aab0. -// -// Solidity: function getManufacturerIdByName(string name) view returns(uint256 nodeId) -func (_Registry *RegistryCallerSession) GetManufacturerIdByName(name string) (*big.Int, error) { - return _Registry.Contract.GetManufacturerIdByName(&_Registry.CallOpts, name) -} - -// GetManufacturerLicense is a free data retrieval call binding the contract method 0x170e4293. -// -// Solidity: function getManufacturerLicense() view returns(address manufacturerLicense) -func (_Registry *RegistryCaller) GetManufacturerLicense(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getManufacturerLicense") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetManufacturerLicense is a free data retrieval call binding the contract method 0x170e4293. -// -// Solidity: function getManufacturerLicense() view returns(address manufacturerLicense) -func (_Registry *RegistrySession) GetManufacturerLicense() (common.Address, error) { - return _Registry.Contract.GetManufacturerLicense(&_Registry.CallOpts) -} - -// GetManufacturerLicense is a free data retrieval call binding the contract method 0x170e4293. -// -// Solidity: function getManufacturerLicense() view returns(address manufacturerLicense) -func (_Registry *RegistryCallerSession) GetManufacturerLicense() (common.Address, error) { - return _Registry.Contract.GetManufacturerLicense(&_Registry.CallOpts) -} - -// GetManufacturerNameById is a free data retrieval call binding the contract method 0x9109b30b. -// -// Solidity: function getManufacturerNameById(uint256 tokenId) view returns(string name) -func (_Registry *RegistryCaller) GetManufacturerNameById(opts *bind.CallOpts, tokenId *big.Int) (string, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getManufacturerNameById", tokenId) - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GetManufacturerNameById is a free data retrieval call binding the contract method 0x9109b30b. -// -// Solidity: function getManufacturerNameById(uint256 tokenId) view returns(string name) -func (_Registry *RegistrySession) GetManufacturerNameById(tokenId *big.Int) (string, error) { - return _Registry.Contract.GetManufacturerNameById(&_Registry.CallOpts, tokenId) -} - -// GetManufacturerNameById is a free data retrieval call binding the contract method 0x9109b30b. -// -// Solidity: function getManufacturerNameById(uint256 tokenId) view returns(string name) -func (_Registry *RegistryCallerSession) GetManufacturerNameById(tokenId *big.Int) (string, error) { - return _Registry.Contract.GetManufacturerNameById(&_Registry.CallOpts, tokenId) -} - -// GetNodeLink is a free data retrieval call binding the contract method 0xbd2b5568. -// -// Solidity: function getNodeLink(address idProxyAddressSource, address idProxyAddressTarget, uint256 sourceNode) view returns(uint256 targetNode) -func (_Registry *RegistryCaller) GetNodeLink(opts *bind.CallOpts, idProxyAddressSource common.Address, idProxyAddressTarget common.Address, sourceNode *big.Int) (*big.Int, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getNodeLink", idProxyAddressSource, idProxyAddressTarget, sourceNode) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetNodeLink is a free data retrieval call binding the contract method 0xbd2b5568. -// -// Solidity: function getNodeLink(address idProxyAddressSource, address idProxyAddressTarget, uint256 sourceNode) view returns(uint256 targetNode) -func (_Registry *RegistrySession) GetNodeLink(idProxyAddressSource common.Address, idProxyAddressTarget common.Address, sourceNode *big.Int) (*big.Int, error) { - return _Registry.Contract.GetNodeLink(&_Registry.CallOpts, idProxyAddressSource, idProxyAddressTarget, sourceNode) -} - -// GetNodeLink is a free data retrieval call binding the contract method 0xbd2b5568. -// -// Solidity: function getNodeLink(address idProxyAddressSource, address idProxyAddressTarget, uint256 sourceNode) view returns(uint256 targetNode) -func (_Registry *RegistryCallerSession) GetNodeLink(idProxyAddressSource common.Address, idProxyAddressTarget common.Address, sourceNode *big.Int) (*big.Int, error) { - return _Registry.Contract.GetNodeLink(&_Registry.CallOpts, idProxyAddressSource, idProxyAddressTarget, sourceNode) -} - -// GetParentNode is a free data retrieval call binding the contract method 0x82087d24. -// -// Solidity: function getParentNode(address idProxyAddress, uint256 tokenId) view returns(uint256 parentNode) -func (_Registry *RegistryCaller) GetParentNode(opts *bind.CallOpts, idProxyAddress common.Address, tokenId *big.Int) (*big.Int, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getParentNode", idProxyAddress, tokenId) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetParentNode is a free data retrieval call binding the contract method 0x82087d24. -// -// Solidity: function getParentNode(address idProxyAddress, uint256 tokenId) view returns(uint256 parentNode) -func (_Registry *RegistrySession) GetParentNode(idProxyAddress common.Address, tokenId *big.Int) (*big.Int, error) { - return _Registry.Contract.GetParentNode(&_Registry.CallOpts, idProxyAddress, tokenId) -} - -// GetParentNode is a free data retrieval call binding the contract method 0x82087d24. -// -// Solidity: function getParentNode(address idProxyAddress, uint256 tokenId) view returns(uint256 parentNode) -func (_Registry *RegistryCallerSession) GetParentNode(idProxyAddress common.Address, tokenId *big.Int) (*big.Int, error) { - return _Registry.Contract.GetParentNode(&_Registry.CallOpts, idProxyAddress, tokenId) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_Registry *RegistryCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getRoleAdmin", role) - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_Registry *RegistrySession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _Registry.Contract.GetRoleAdmin(&_Registry.CallOpts, role) -} - -// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. -// -// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) -func (_Registry *RegistryCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { - return _Registry.Contract.GetRoleAdmin(&_Registry.CallOpts, role) -} - -// GetSyntheticDeviceAddressById is a free data retrieval call binding the contract method 0x493b27e1. -// -// Solidity: function getSyntheticDeviceAddressById(uint256 nodeId) view returns(address addr) -func (_Registry *RegistryCaller) GetSyntheticDeviceAddressById(opts *bind.CallOpts, nodeId *big.Int) (common.Address, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getSyntheticDeviceAddressById", nodeId) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetSyntheticDeviceAddressById is a free data retrieval call binding the contract method 0x493b27e1. -// -// Solidity: function getSyntheticDeviceAddressById(uint256 nodeId) view returns(address addr) -func (_Registry *RegistrySession) GetSyntheticDeviceAddressById(nodeId *big.Int) (common.Address, error) { - return _Registry.Contract.GetSyntheticDeviceAddressById(&_Registry.CallOpts, nodeId) -} - -// GetSyntheticDeviceAddressById is a free data retrieval call binding the contract method 0x493b27e1. -// -// Solidity: function getSyntheticDeviceAddressById(uint256 nodeId) view returns(address addr) -func (_Registry *RegistryCallerSession) GetSyntheticDeviceAddressById(nodeId *big.Int) (common.Address, error) { - return _Registry.Contract.GetSyntheticDeviceAddressById(&_Registry.CallOpts, nodeId) -} - -// GetSyntheticDeviceIdByAddress is a free data retrieval call binding the contract method 0x795b910a. -// -// Solidity: function getSyntheticDeviceIdByAddress(address addr) view returns(uint256 nodeId) -func (_Registry *RegistryCaller) GetSyntheticDeviceIdByAddress(opts *bind.CallOpts, addr common.Address) (*big.Int, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getSyntheticDeviceIdByAddress", addr) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetSyntheticDeviceIdByAddress is a free data retrieval call binding the contract method 0x795b910a. -// -// Solidity: function getSyntheticDeviceIdByAddress(address addr) view returns(uint256 nodeId) -func (_Registry *RegistrySession) GetSyntheticDeviceIdByAddress(addr common.Address) (*big.Int, error) { - return _Registry.Contract.GetSyntheticDeviceIdByAddress(&_Registry.CallOpts, addr) -} - -// GetSyntheticDeviceIdByAddress is a free data retrieval call binding the contract method 0x795b910a. -// -// Solidity: function getSyntheticDeviceIdByAddress(address addr) view returns(uint256 nodeId) -func (_Registry *RegistryCallerSession) GetSyntheticDeviceIdByAddress(addr common.Address) (*big.Int, error) { - return _Registry.Contract.GetSyntheticDeviceIdByAddress(&_Registry.CallOpts, addr) -} - -// GetVehicleStream is a free data retrieval call binding the contract method 0x180e469a. -// -// Solidity: function getVehicleStream(uint256 vehicleId) view returns(string streamId) -func (_Registry *RegistryCaller) GetVehicleStream(opts *bind.CallOpts, vehicleId *big.Int) (string, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "getVehicleStream", vehicleId) - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GetVehicleStream is a free data retrieval call binding the contract method 0x180e469a. -// -// Solidity: function getVehicleStream(uint256 vehicleId) view returns(string streamId) -func (_Registry *RegistrySession) GetVehicleStream(vehicleId *big.Int) (string, error) { - return _Registry.Contract.GetVehicleStream(&_Registry.CallOpts, vehicleId) -} - -// GetVehicleStream is a free data retrieval call binding the contract method 0x180e469a. -// -// Solidity: function getVehicleStream(uint256 vehicleId) view returns(string streamId) -func (_Registry *RegistryCallerSession) GetVehicleStream(vehicleId *big.Int) (string, error) { - return _Registry.Contract.GetVehicleStream(&_Registry.CallOpts, vehicleId) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_Registry *RegistryCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "hasRole", role, account) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_Registry *RegistrySession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _Registry.Contract.HasRole(&_Registry.CallOpts, role, account) -} - -// HasRole is a free data retrieval call binding the contract method 0x91d14854. -// -// Solidity: function hasRole(bytes32 role, address account) view returns(bool) -func (_Registry *RegistryCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { - return _Registry.Contract.HasRole(&_Registry.CallOpts, role, account) -} - -// IsAftermarketDeviceClaimed is a free data retrieval call binding the contract method 0xc6b36f2a. -// -// Solidity: function isAftermarketDeviceClaimed(uint256 nodeId) view returns(bool isClaimed) -func (_Registry *RegistryCaller) IsAftermarketDeviceClaimed(opts *bind.CallOpts, nodeId *big.Int) (bool, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "isAftermarketDeviceClaimed", nodeId) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsAftermarketDeviceClaimed is a free data retrieval call binding the contract method 0xc6b36f2a. -// -// Solidity: function isAftermarketDeviceClaimed(uint256 nodeId) view returns(bool isClaimed) -func (_Registry *RegistrySession) IsAftermarketDeviceClaimed(nodeId *big.Int) (bool, error) { - return _Registry.Contract.IsAftermarketDeviceClaimed(&_Registry.CallOpts, nodeId) -} - -// IsAftermarketDeviceClaimed is a free data retrieval call binding the contract method 0xc6b36f2a. -// -// Solidity: function isAftermarketDeviceClaimed(uint256 nodeId) view returns(bool isClaimed) -func (_Registry *RegistryCallerSession) IsAftermarketDeviceClaimed(nodeId *big.Int) (bool, error) { - return _Registry.Contract.IsAftermarketDeviceClaimed(&_Registry.CallOpts, nodeId) -} - -// IsAllowedToOwnIntegrationNode is a free data retrieval call binding the contract method 0xbc8002f0. -// -// Solidity: function isAllowedToOwnIntegrationNode(address addr) view returns(bool _isAllowed) -func (_Registry *RegistryCaller) IsAllowedToOwnIntegrationNode(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "isAllowedToOwnIntegrationNode", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsAllowedToOwnIntegrationNode is a free data retrieval call binding the contract method 0xbc8002f0. -// -// Solidity: function isAllowedToOwnIntegrationNode(address addr) view returns(bool _isAllowed) -func (_Registry *RegistrySession) IsAllowedToOwnIntegrationNode(addr common.Address) (bool, error) { - return _Registry.Contract.IsAllowedToOwnIntegrationNode(&_Registry.CallOpts, addr) -} - -// IsAllowedToOwnIntegrationNode is a free data retrieval call binding the contract method 0xbc8002f0. -// -// Solidity: function isAllowedToOwnIntegrationNode(address addr) view returns(bool _isAllowed) -func (_Registry *RegistryCallerSession) IsAllowedToOwnIntegrationNode(addr common.Address) (bool, error) { - return _Registry.Contract.IsAllowedToOwnIntegrationNode(&_Registry.CallOpts, addr) -} - -// IsAllowedToOwnManufacturerNode is a free data retrieval call binding the contract method 0xd9c27c40. -// -// Solidity: function isAllowedToOwnManufacturerNode(address addr) view returns(bool _isAllowed) -func (_Registry *RegistryCaller) IsAllowedToOwnManufacturerNode(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "isAllowedToOwnManufacturerNode", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsAllowedToOwnManufacturerNode is a free data retrieval call binding the contract method 0xd9c27c40. -// -// Solidity: function isAllowedToOwnManufacturerNode(address addr) view returns(bool _isAllowed) -func (_Registry *RegistrySession) IsAllowedToOwnManufacturerNode(addr common.Address) (bool, error) { - return _Registry.Contract.IsAllowedToOwnManufacturerNode(&_Registry.CallOpts, addr) -} - -// IsAllowedToOwnManufacturerNode is a free data retrieval call binding the contract method 0xd9c27c40. -// -// Solidity: function isAllowedToOwnManufacturerNode(address addr) view returns(bool _isAllowed) -func (_Registry *RegistryCallerSession) IsAllowedToOwnManufacturerNode(addr common.Address) (bool, error) { - return _Registry.Contract.IsAllowedToOwnManufacturerNode(&_Registry.CallOpts, addr) -} - -// IsController is a free data retrieval call binding the contract method 0xb429afeb. -// -// Solidity: function isController(address addr) view returns(bool _isController) -func (_Registry *RegistryCaller) IsController(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "isController", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsController is a free data retrieval call binding the contract method 0xb429afeb. -// -// Solidity: function isController(address addr) view returns(bool _isController) -func (_Registry *RegistrySession) IsController(addr common.Address) (bool, error) { - return _Registry.Contract.IsController(&_Registry.CallOpts, addr) -} - -// IsController is a free data retrieval call binding the contract method 0xb429afeb. -// -// Solidity: function isController(address addr) view returns(bool _isController) -func (_Registry *RegistryCallerSession) IsController(addr common.Address) (bool, error) { - return _Registry.Contract.IsController(&_Registry.CallOpts, addr) -} - -// IsIntegrationController is a free data retrieval call binding the contract method 0xe21f68b7. -// -// Solidity: function isIntegrationController(address addr) view returns(bool _isController) -func (_Registry *RegistryCaller) IsIntegrationController(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "isIntegrationController", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsIntegrationController is a free data retrieval call binding the contract method 0xe21f68b7. -// -// Solidity: function isIntegrationController(address addr) view returns(bool _isController) -func (_Registry *RegistrySession) IsIntegrationController(addr common.Address) (bool, error) { - return _Registry.Contract.IsIntegrationController(&_Registry.CallOpts, addr) -} - -// IsIntegrationController is a free data retrieval call binding the contract method 0xe21f68b7. -// -// Solidity: function isIntegrationController(address addr) view returns(bool _isController) -func (_Registry *RegistryCallerSession) IsIntegrationController(addr common.Address) (bool, error) { - return _Registry.Contract.IsIntegrationController(&_Registry.CallOpts, addr) -} - -// IsIntegrationMinted is a free data retrieval call binding the contract method 0x603dd1db. -// -// Solidity: function isIntegrationMinted(address addr) view returns(bool _isIntegrationMinted) -func (_Registry *RegistryCaller) IsIntegrationMinted(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "isIntegrationMinted", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsIntegrationMinted is a free data retrieval call binding the contract method 0x603dd1db. -// -// Solidity: function isIntegrationMinted(address addr) view returns(bool _isIntegrationMinted) -func (_Registry *RegistrySession) IsIntegrationMinted(addr common.Address) (bool, error) { - return _Registry.Contract.IsIntegrationMinted(&_Registry.CallOpts, addr) -} - -// IsIntegrationMinted is a free data retrieval call binding the contract method 0x603dd1db. -// -// Solidity: function isIntegrationMinted(address addr) view returns(bool _isIntegrationMinted) -func (_Registry *RegistryCallerSession) IsIntegrationMinted(addr common.Address) (bool, error) { - return _Registry.Contract.IsIntegrationMinted(&_Registry.CallOpts, addr) -} - -// IsManufacturerMinted is a free data retrieval call binding the contract method 0x456bf169. -// -// Solidity: function isManufacturerMinted(address addr) view returns(bool _isManufacturerMinted) -func (_Registry *RegistryCaller) IsManufacturerMinted(opts *bind.CallOpts, addr common.Address) (bool, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "isManufacturerMinted", addr) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsManufacturerMinted is a free data retrieval call binding the contract method 0x456bf169. -// -// Solidity: function isManufacturerMinted(address addr) view returns(bool _isManufacturerMinted) -func (_Registry *RegistrySession) IsManufacturerMinted(addr common.Address) (bool, error) { - return _Registry.Contract.IsManufacturerMinted(&_Registry.CallOpts, addr) -} - -// IsManufacturerMinted is a free data retrieval call binding the contract method 0x456bf169. -// -// Solidity: function isManufacturerMinted(address addr) view returns(bool _isManufacturerMinted) -func (_Registry *RegistryCallerSession) IsManufacturerMinted(addr common.Address) (bool, error) { - return _Registry.Contract.IsManufacturerMinted(&_Registry.CallOpts, addr) -} - -// MultiStaticCall is a free data retrieval call binding the contract method 0x1c0c6e51. -// -// Solidity: function multiStaticCall(bytes[] data) view returns(bytes[] results) -func (_Registry *RegistryCaller) MultiStaticCall(opts *bind.CallOpts, data [][]byte) ([][]byte, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "multiStaticCall", data) - - if err != nil { - return *new([][]byte), err - } - - out0 := *abi.ConvertType(out[0], new([][]byte)).(*[][]byte) - - return out0, err - -} - -// MultiStaticCall is a free data retrieval call binding the contract method 0x1c0c6e51. -// -// Solidity: function multiStaticCall(bytes[] data) view returns(bytes[] results) -func (_Registry *RegistrySession) MultiStaticCall(data [][]byte) ([][]byte, error) { - return _Registry.Contract.MultiStaticCall(&_Registry.CallOpts, data) -} - -// MultiStaticCall is a free data retrieval call binding the contract method 0x1c0c6e51. -// -// Solidity: function multiStaticCall(bytes[] data) view returns(bytes[] results) -func (_Registry *RegistryCallerSession) MultiStaticCall(data [][]byte) ([][]byte, error) { - return _Registry.Contract.MultiStaticCall(&_Registry.CallOpts, data) -} - -// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. -// -// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) -func (_Registry *RegistryCaller) OnERC721Received(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { - var out []interface{} - err := _Registry.contract.Call(opts, &out, "onERC721Received", arg0, arg1, arg2, arg3) - - if err != nil { - return *new([4]byte), err - } - - out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) - - return out0, err - -} - -// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. -// -// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) -func (_Registry *RegistrySession) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { - return _Registry.Contract.OnERC721Received(&_Registry.CallOpts, arg0, arg1, arg2, arg3) -} - -// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. -// -// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) -func (_Registry *RegistryCallerSession) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { - return _Registry.Contract.OnERC721Received(&_Registry.CallOpts, arg0, arg1, arg2, arg3) -} - -// AddAftermarketDeviceAttribute is a paid mutator transaction binding the contract method 0x6111afa3. -// -// Solidity: function addAftermarketDeviceAttribute(string attribute) returns() -func (_Registry *RegistryTransactor) AddAftermarketDeviceAttribute(opts *bind.TransactOpts, attribute string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "addAftermarketDeviceAttribute", attribute) -} - -// AddAftermarketDeviceAttribute is a paid mutator transaction binding the contract method 0x6111afa3. -// -// Solidity: function addAftermarketDeviceAttribute(string attribute) returns() -func (_Registry *RegistrySession) AddAftermarketDeviceAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddAftermarketDeviceAttribute(&_Registry.TransactOpts, attribute) -} - -// AddAftermarketDeviceAttribute is a paid mutator transaction binding the contract method 0x6111afa3. -// -// Solidity: function addAftermarketDeviceAttribute(string attribute) returns() -func (_Registry *RegistryTransactorSession) AddAftermarketDeviceAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddAftermarketDeviceAttribute(&_Registry.TransactOpts, attribute) -} - -// AddIntegrationAttribute is a paid mutator transaction binding the contract method 0x044d2498. -// -// Solidity: function addIntegrationAttribute(string attribute) returns() -func (_Registry *RegistryTransactor) AddIntegrationAttribute(opts *bind.TransactOpts, attribute string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "addIntegrationAttribute", attribute) -} - -// AddIntegrationAttribute is a paid mutator transaction binding the contract method 0x044d2498. -// -// Solidity: function addIntegrationAttribute(string attribute) returns() -func (_Registry *RegistrySession) AddIntegrationAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddIntegrationAttribute(&_Registry.TransactOpts, attribute) -} - -// AddIntegrationAttribute is a paid mutator transaction binding the contract method 0x044d2498. -// -// Solidity: function addIntegrationAttribute(string attribute) returns() -func (_Registry *RegistryTransactorSession) AddIntegrationAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddIntegrationAttribute(&_Registry.TransactOpts, attribute) -} - -// AddManufacturerAttribute is a paid mutator transaction binding the contract method 0x50300a3f. -// -// Solidity: function addManufacturerAttribute(string attribute) returns() -func (_Registry *RegistryTransactor) AddManufacturerAttribute(opts *bind.TransactOpts, attribute string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "addManufacturerAttribute", attribute) -} - -// AddManufacturerAttribute is a paid mutator transaction binding the contract method 0x50300a3f. -// -// Solidity: function addManufacturerAttribute(string attribute) returns() -func (_Registry *RegistrySession) AddManufacturerAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddManufacturerAttribute(&_Registry.TransactOpts, attribute) -} - -// AddManufacturerAttribute is a paid mutator transaction binding the contract method 0x50300a3f. -// -// Solidity: function addManufacturerAttribute(string attribute) returns() -func (_Registry *RegistryTransactorSession) AddManufacturerAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddManufacturerAttribute(&_Registry.TransactOpts, attribute) -} - -// AddModule is a paid mutator transaction binding the contract method 0x0df5b997. -// -// Solidity: function addModule(address implementation, bytes4[] selectors) returns() -func (_Registry *RegistryTransactor) AddModule(opts *bind.TransactOpts, implementation common.Address, selectors [][4]byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "addModule", implementation, selectors) -} - -// AddModule is a paid mutator transaction binding the contract method 0x0df5b997. -// -// Solidity: function addModule(address implementation, bytes4[] selectors) returns() -func (_Registry *RegistrySession) AddModule(implementation common.Address, selectors [][4]byte) (*types.Transaction, error) { - return _Registry.Contract.AddModule(&_Registry.TransactOpts, implementation, selectors) -} - -// AddModule is a paid mutator transaction binding the contract method 0x0df5b997. -// -// Solidity: function addModule(address implementation, bytes4[] selectors) returns() -func (_Registry *RegistryTransactorSession) AddModule(implementation common.Address, selectors [][4]byte) (*types.Transaction, error) { - return _Registry.Contract.AddModule(&_Registry.TransactOpts, implementation, selectors) -} - -// AddSyntheticDeviceAttribute is a paid mutator transaction binding the contract method 0xe1f371df. -// -// Solidity: function addSyntheticDeviceAttribute(string attribute) returns() -func (_Registry *RegistryTransactor) AddSyntheticDeviceAttribute(opts *bind.TransactOpts, attribute string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "addSyntheticDeviceAttribute", attribute) -} - -// AddSyntheticDeviceAttribute is a paid mutator transaction binding the contract method 0xe1f371df. -// -// Solidity: function addSyntheticDeviceAttribute(string attribute) returns() -func (_Registry *RegistrySession) AddSyntheticDeviceAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddSyntheticDeviceAttribute(&_Registry.TransactOpts, attribute) -} - -// AddSyntheticDeviceAttribute is a paid mutator transaction binding the contract method 0xe1f371df. -// -// Solidity: function addSyntheticDeviceAttribute(string attribute) returns() -func (_Registry *RegistryTransactorSession) AddSyntheticDeviceAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddSyntheticDeviceAttribute(&_Registry.TransactOpts, attribute) -} - -// AddVehicleAttribute is a paid mutator transaction binding the contract method 0xf0d1a557. -// -// Solidity: function addVehicleAttribute(string attribute) returns() -func (_Registry *RegistryTransactor) AddVehicleAttribute(opts *bind.TransactOpts, attribute string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "addVehicleAttribute", attribute) -} - -// AddVehicleAttribute is a paid mutator transaction binding the contract method 0xf0d1a557. -// -// Solidity: function addVehicleAttribute(string attribute) returns() -func (_Registry *RegistrySession) AddVehicleAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddVehicleAttribute(&_Registry.TransactOpts, attribute) -} - -// AddVehicleAttribute is a paid mutator transaction binding the contract method 0xf0d1a557. -// -// Solidity: function addVehicleAttribute(string attribute) returns() -func (_Registry *RegistryTransactorSession) AddVehicleAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AddVehicleAttribute(&_Registry.TransactOpts, attribute) -} - -// AdminBurnAftermarketDevices is a paid mutator transaction binding the contract method 0xd7376bae. -// -// Solidity: function adminBurnAftermarketDevices(uint256[] tokenIds) returns() -func (_Registry *RegistryTransactor) AdminBurnAftermarketDevices(opts *bind.TransactOpts, tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "adminBurnAftermarketDevices", tokenIds) -} - -// AdminBurnAftermarketDevices is a paid mutator transaction binding the contract method 0xd7376bae. -// -// Solidity: function adminBurnAftermarketDevices(uint256[] tokenIds) returns() -func (_Registry *RegistrySession) AdminBurnAftermarketDevices(tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminBurnAftermarketDevices(&_Registry.TransactOpts, tokenIds) -} - -// AdminBurnAftermarketDevices is a paid mutator transaction binding the contract method 0xd7376bae. -// -// Solidity: function adminBurnAftermarketDevices(uint256[] tokenIds) returns() -func (_Registry *RegistryTransactorSession) AdminBurnAftermarketDevices(tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminBurnAftermarketDevices(&_Registry.TransactOpts, tokenIds) -} - -// AdminBurnAftermarketDevicesAndDeletePairings is a paid mutator transaction binding the contract method 0x63dec203. -// -// Solidity: function adminBurnAftermarketDevicesAndDeletePairings(uint256[] tokenIds) returns() -func (_Registry *RegistryTransactor) AdminBurnAftermarketDevicesAndDeletePairings(opts *bind.TransactOpts, tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "adminBurnAftermarketDevicesAndDeletePairings", tokenIds) -} - -// AdminBurnAftermarketDevicesAndDeletePairings is a paid mutator transaction binding the contract method 0x63dec203. -// -// Solidity: function adminBurnAftermarketDevicesAndDeletePairings(uint256[] tokenIds) returns() -func (_Registry *RegistrySession) AdminBurnAftermarketDevicesAndDeletePairings(tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminBurnAftermarketDevicesAndDeletePairings(&_Registry.TransactOpts, tokenIds) -} - -// AdminBurnAftermarketDevicesAndDeletePairings is a paid mutator transaction binding the contract method 0x63dec203. -// -// Solidity: function adminBurnAftermarketDevicesAndDeletePairings(uint256[] tokenIds) returns() -func (_Registry *RegistryTransactorSession) AdminBurnAftermarketDevicesAndDeletePairings(tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminBurnAftermarketDevicesAndDeletePairings(&_Registry.TransactOpts, tokenIds) -} - -// AdminBurnSyntheticDevicesAndDeletePairings is a paid mutator transaction binding the contract method 0x52878b61. -// -// Solidity: function adminBurnSyntheticDevicesAndDeletePairings(uint256[] tokenIds) returns() -func (_Registry *RegistryTransactor) AdminBurnSyntheticDevicesAndDeletePairings(opts *bind.TransactOpts, tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "adminBurnSyntheticDevicesAndDeletePairings", tokenIds) -} - -// AdminBurnSyntheticDevicesAndDeletePairings is a paid mutator transaction binding the contract method 0x52878b61. -// -// Solidity: function adminBurnSyntheticDevicesAndDeletePairings(uint256[] tokenIds) returns() -func (_Registry *RegistrySession) AdminBurnSyntheticDevicesAndDeletePairings(tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminBurnSyntheticDevicesAndDeletePairings(&_Registry.TransactOpts, tokenIds) -} - -// AdminBurnSyntheticDevicesAndDeletePairings is a paid mutator transaction binding the contract method 0x52878b61. -// -// Solidity: function adminBurnSyntheticDevicesAndDeletePairings(uint256[] tokenIds) returns() -func (_Registry *RegistryTransactorSession) AdminBurnSyntheticDevicesAndDeletePairings(tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminBurnSyntheticDevicesAndDeletePairings(&_Registry.TransactOpts, tokenIds) -} - -// AdminBurnVehicles is a paid mutator transaction binding the contract method 0x282eb387. -// -// Solidity: function adminBurnVehicles(uint256[] tokenIds) returns() -func (_Registry *RegistryTransactor) AdminBurnVehicles(opts *bind.TransactOpts, tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "adminBurnVehicles", tokenIds) -} - -// AdminBurnVehicles is a paid mutator transaction binding the contract method 0x282eb387. -// -// Solidity: function adminBurnVehicles(uint256[] tokenIds) returns() -func (_Registry *RegistrySession) AdminBurnVehicles(tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminBurnVehicles(&_Registry.TransactOpts, tokenIds) -} - -// AdminBurnVehicles is a paid mutator transaction binding the contract method 0x282eb387. -// -// Solidity: function adminBurnVehicles(uint256[] tokenIds) returns() -func (_Registry *RegistryTransactorSession) AdminBurnVehicles(tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminBurnVehicles(&_Registry.TransactOpts, tokenIds) -} - -// AdminBurnVehiclesAndDeletePairings is a paid mutator transaction binding the contract method 0x11d679c9. -// -// Solidity: function adminBurnVehiclesAndDeletePairings(uint256[] tokenIds) returns() -func (_Registry *RegistryTransactor) AdminBurnVehiclesAndDeletePairings(opts *bind.TransactOpts, tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "adminBurnVehiclesAndDeletePairings", tokenIds) -} - -// AdminBurnVehiclesAndDeletePairings is a paid mutator transaction binding the contract method 0x11d679c9. -// -// Solidity: function adminBurnVehiclesAndDeletePairings(uint256[] tokenIds) returns() -func (_Registry *RegistrySession) AdminBurnVehiclesAndDeletePairings(tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminBurnVehiclesAndDeletePairings(&_Registry.TransactOpts, tokenIds) -} - -// AdminBurnVehiclesAndDeletePairings is a paid mutator transaction binding the contract method 0x11d679c9. -// -// Solidity: function adminBurnVehiclesAndDeletePairings(uint256[] tokenIds) returns() -func (_Registry *RegistryTransactorSession) AdminBurnVehiclesAndDeletePairings(tokenIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminBurnVehiclesAndDeletePairings(&_Registry.TransactOpts, tokenIds) -} - -// AdminCacheDimoStreamrEns is a paid mutator transaction binding the contract method 0xb17b974b. -// -// Solidity: function adminCacheDimoStreamrEns() returns() -func (_Registry *RegistryTransactor) AdminCacheDimoStreamrEns(opts *bind.TransactOpts) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "adminCacheDimoStreamrEns") -} - -// AdminCacheDimoStreamrEns is a paid mutator transaction binding the contract method 0xb17b974b. -// -// Solidity: function adminCacheDimoStreamrEns() returns() -func (_Registry *RegistrySession) AdminCacheDimoStreamrEns() (*types.Transaction, error) { - return _Registry.Contract.AdminCacheDimoStreamrEns(&_Registry.TransactOpts) -} - -// AdminCacheDimoStreamrEns is a paid mutator transaction binding the contract method 0xb17b974b. -// -// Solidity: function adminCacheDimoStreamrEns() returns() -func (_Registry *RegistryTransactorSession) AdminCacheDimoStreamrEns() (*types.Transaction, error) { - return _Registry.Contract.AdminCacheDimoStreamrEns(&_Registry.TransactOpts) -} - -// AdminChangeParentNode is a paid mutator transaction binding the contract method 0x56936962. -// -// Solidity: function adminChangeParentNode(uint256 newParentNode, address idProxyAddress, uint256[] nodeIdList) returns() -func (_Registry *RegistryTransactor) AdminChangeParentNode(opts *bind.TransactOpts, newParentNode *big.Int, idProxyAddress common.Address, nodeIdList []*big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "adminChangeParentNode", newParentNode, idProxyAddress, nodeIdList) -} - -// AdminChangeParentNode is a paid mutator transaction binding the contract method 0x56936962. -// -// Solidity: function adminChangeParentNode(uint256 newParentNode, address idProxyAddress, uint256[] nodeIdList) returns() -func (_Registry *RegistrySession) AdminChangeParentNode(newParentNode *big.Int, idProxyAddress common.Address, nodeIdList []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminChangeParentNode(&_Registry.TransactOpts, newParentNode, idProxyAddress, nodeIdList) -} - -// AdminChangeParentNode is a paid mutator transaction binding the contract method 0x56936962. -// -// Solidity: function adminChangeParentNode(uint256 newParentNode, address idProxyAddress, uint256[] nodeIdList) returns() -func (_Registry *RegistryTransactorSession) AdminChangeParentNode(newParentNode *big.Int, idProxyAddress common.Address, nodeIdList []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminChangeParentNode(&_Registry.TransactOpts, newParentNode, idProxyAddress, nodeIdList) -} - -// AdminPairAftermarketDevice is a paid mutator transaction binding the contract method 0x3febacab. -// -// Solidity: function adminPairAftermarketDevice(uint256 aftermarketDeviceNode, uint256 vehicleNode) returns() -func (_Registry *RegistryTransactor) AdminPairAftermarketDevice(opts *bind.TransactOpts, aftermarketDeviceNode *big.Int, vehicleNode *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "adminPairAftermarketDevice", aftermarketDeviceNode, vehicleNode) -} - -// AdminPairAftermarketDevice is a paid mutator transaction binding the contract method 0x3febacab. -// -// Solidity: function adminPairAftermarketDevice(uint256 aftermarketDeviceNode, uint256 vehicleNode) returns() -func (_Registry *RegistrySession) AdminPairAftermarketDevice(aftermarketDeviceNode *big.Int, vehicleNode *big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminPairAftermarketDevice(&_Registry.TransactOpts, aftermarketDeviceNode, vehicleNode) -} - -// AdminPairAftermarketDevice is a paid mutator transaction binding the contract method 0x3febacab. -// -// Solidity: function adminPairAftermarketDevice(uint256 aftermarketDeviceNode, uint256 vehicleNode) returns() -func (_Registry *RegistryTransactorSession) AdminPairAftermarketDevice(aftermarketDeviceNode *big.Int, vehicleNode *big.Int) (*types.Transaction, error) { - return _Registry.Contract.AdminPairAftermarketDevice(&_Registry.TransactOpts, aftermarketDeviceNode, vehicleNode) -} - -// AdminRemoveVehicleAttribute is a paid mutator transaction binding the contract method 0x5f741f4d. -// -// Solidity: function adminRemoveVehicleAttribute(string attribute) returns() -func (_Registry *RegistryTransactor) AdminRemoveVehicleAttribute(opts *bind.TransactOpts, attribute string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "adminRemoveVehicleAttribute", attribute) -} - -// AdminRemoveVehicleAttribute is a paid mutator transaction binding the contract method 0x5f741f4d. -// -// Solidity: function adminRemoveVehicleAttribute(string attribute) returns() -func (_Registry *RegistrySession) AdminRemoveVehicleAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AdminRemoveVehicleAttribute(&_Registry.TransactOpts, attribute) -} - -// AdminRemoveVehicleAttribute is a paid mutator transaction binding the contract method 0x5f741f4d. -// -// Solidity: function adminRemoveVehicleAttribute(string attribute) returns() -func (_Registry *RegistryTransactorSession) AdminRemoveVehicleAttribute(attribute string) (*types.Transaction, error) { - return _Registry.Contract.AdminRemoveVehicleAttribute(&_Registry.TransactOpts, attribute) -} - -// AdminSetVehicleDDs is a paid mutator transaction binding the contract method 0xdd60fd1a. -// -// Solidity: function adminSetVehicleDDs((uint256,string)[] vehicleIdDdId) returns() -func (_Registry *RegistryTransactor) AdminSetVehicleDDs(opts *bind.TransactOpts, vehicleIdDdId []DevAdminVehicleIdDeviceDefinitionId) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "adminSetVehicleDDs", vehicleIdDdId) -} - -// AdminSetVehicleDDs is a paid mutator transaction binding the contract method 0xdd60fd1a. -// -// Solidity: function adminSetVehicleDDs((uint256,string)[] vehicleIdDdId) returns() -func (_Registry *RegistrySession) AdminSetVehicleDDs(vehicleIdDdId []DevAdminVehicleIdDeviceDefinitionId) (*types.Transaction, error) { - return _Registry.Contract.AdminSetVehicleDDs(&_Registry.TransactOpts, vehicleIdDdId) -} - -// AdminSetVehicleDDs is a paid mutator transaction binding the contract method 0xdd60fd1a. -// -// Solidity: function adminSetVehicleDDs((uint256,string)[] vehicleIdDdId) returns() -func (_Registry *RegistryTransactorSession) AdminSetVehicleDDs(vehicleIdDdId []DevAdminVehicleIdDeviceDefinitionId) (*types.Transaction, error) { - return _Registry.Contract.AdminSetVehicleDDs(&_Registry.TransactOpts, vehicleIdDdId) -} - -// BurnSyntheticDeviceSign is a paid mutator transaction binding the contract method 0x7c7c9978. -// -// Solidity: function burnSyntheticDeviceSign(uint256 vehicleNode, uint256 syntheticDeviceNode, bytes ownerSig) returns() -func (_Registry *RegistryTransactor) BurnSyntheticDeviceSign(opts *bind.TransactOpts, vehicleNode *big.Int, syntheticDeviceNode *big.Int, ownerSig []byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "burnSyntheticDeviceSign", vehicleNode, syntheticDeviceNode, ownerSig) -} - -// BurnSyntheticDeviceSign is a paid mutator transaction binding the contract method 0x7c7c9978. -// -// Solidity: function burnSyntheticDeviceSign(uint256 vehicleNode, uint256 syntheticDeviceNode, bytes ownerSig) returns() -func (_Registry *RegistrySession) BurnSyntheticDeviceSign(vehicleNode *big.Int, syntheticDeviceNode *big.Int, ownerSig []byte) (*types.Transaction, error) { - return _Registry.Contract.BurnSyntheticDeviceSign(&_Registry.TransactOpts, vehicleNode, syntheticDeviceNode, ownerSig) -} - -// BurnSyntheticDeviceSign is a paid mutator transaction binding the contract method 0x7c7c9978. -// -// Solidity: function burnSyntheticDeviceSign(uint256 vehicleNode, uint256 syntheticDeviceNode, bytes ownerSig) returns() -func (_Registry *RegistryTransactorSession) BurnSyntheticDeviceSign(vehicleNode *big.Int, syntheticDeviceNode *big.Int, ownerSig []byte) (*types.Transaction, error) { - return _Registry.Contract.BurnSyntheticDeviceSign(&_Registry.TransactOpts, vehicleNode, syntheticDeviceNode, ownerSig) -} - -// BurnVehicleSign is a paid mutator transaction binding the contract method 0xd0b61156. -// -// Solidity: function burnVehicleSign(uint256 tokenId, bytes ownerSig) returns() -func (_Registry *RegistryTransactor) BurnVehicleSign(opts *bind.TransactOpts, tokenId *big.Int, ownerSig []byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "burnVehicleSign", tokenId, ownerSig) -} - -// BurnVehicleSign is a paid mutator transaction binding the contract method 0xd0b61156. -// -// Solidity: function burnVehicleSign(uint256 tokenId, bytes ownerSig) returns() -func (_Registry *RegistrySession) BurnVehicleSign(tokenId *big.Int, ownerSig []byte) (*types.Transaction, error) { - return _Registry.Contract.BurnVehicleSign(&_Registry.TransactOpts, tokenId, ownerSig) -} - -// BurnVehicleSign is a paid mutator transaction binding the contract method 0xd0b61156. -// -// Solidity: function burnVehicleSign(uint256 tokenId, bytes ownerSig) returns() -func (_Registry *RegistryTransactorSession) BurnVehicleSign(tokenId *big.Int, ownerSig []byte) (*types.Transaction, error) { - return _Registry.Contract.BurnVehicleSign(&_Registry.TransactOpts, tokenId, ownerSig) -} - -// ClaimAftermarketDeviceBatch is a paid mutator transaction binding the contract method 0xab2ae229. -// -// Solidity: function claimAftermarketDeviceBatch((uint256,address)[] adOwnerPair) returns() -func (_Registry *RegistryTransactor) ClaimAftermarketDeviceBatch(opts *bind.TransactOpts, adOwnerPair []AftermarketDeviceOwnerPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "claimAftermarketDeviceBatch", adOwnerPair) -} - -// ClaimAftermarketDeviceBatch is a paid mutator transaction binding the contract method 0xab2ae229. -// -// Solidity: function claimAftermarketDeviceBatch((uint256,address)[] adOwnerPair) returns() -func (_Registry *RegistrySession) ClaimAftermarketDeviceBatch(adOwnerPair []AftermarketDeviceOwnerPair) (*types.Transaction, error) { - return _Registry.Contract.ClaimAftermarketDeviceBatch(&_Registry.TransactOpts, adOwnerPair) -} - -// ClaimAftermarketDeviceBatch is a paid mutator transaction binding the contract method 0xab2ae229. -// -// Solidity: function claimAftermarketDeviceBatch((uint256,address)[] adOwnerPair) returns() -func (_Registry *RegistryTransactorSession) ClaimAftermarketDeviceBatch(adOwnerPair []AftermarketDeviceOwnerPair) (*types.Transaction, error) { - return _Registry.Contract.ClaimAftermarketDeviceBatch(&_Registry.TransactOpts, adOwnerPair) -} - -// ClaimAftermarketDeviceSign is a paid mutator transaction binding the contract method 0x89a841bb. -// -// Solidity: function claimAftermarketDeviceSign(uint256 aftermarketDeviceNode, address owner, bytes ownerSig, bytes aftermarketDeviceSig) returns() -func (_Registry *RegistryTransactor) ClaimAftermarketDeviceSign(opts *bind.TransactOpts, aftermarketDeviceNode *big.Int, owner common.Address, ownerSig []byte, aftermarketDeviceSig []byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "claimAftermarketDeviceSign", aftermarketDeviceNode, owner, ownerSig, aftermarketDeviceSig) -} - -// ClaimAftermarketDeviceSign is a paid mutator transaction binding the contract method 0x89a841bb. -// -// Solidity: function claimAftermarketDeviceSign(uint256 aftermarketDeviceNode, address owner, bytes ownerSig, bytes aftermarketDeviceSig) returns() -func (_Registry *RegistrySession) ClaimAftermarketDeviceSign(aftermarketDeviceNode *big.Int, owner common.Address, ownerSig []byte, aftermarketDeviceSig []byte) (*types.Transaction, error) { - return _Registry.Contract.ClaimAftermarketDeviceSign(&_Registry.TransactOpts, aftermarketDeviceNode, owner, ownerSig, aftermarketDeviceSig) -} - -// ClaimAftermarketDeviceSign is a paid mutator transaction binding the contract method 0x89a841bb. -// -// Solidity: function claimAftermarketDeviceSign(uint256 aftermarketDeviceNode, address owner, bytes ownerSig, bytes aftermarketDeviceSig) returns() -func (_Registry *RegistryTransactorSession) ClaimAftermarketDeviceSign(aftermarketDeviceNode *big.Int, owner common.Address, ownerSig []byte, aftermarketDeviceSig []byte) (*types.Transaction, error) { - return _Registry.Contract.ClaimAftermarketDeviceSign(&_Registry.TransactOpts, aftermarketDeviceNode, owner, ownerSig, aftermarketDeviceSig) -} - -// CreateDeviceDefinitionTable is a paid mutator transaction binding the contract method 0x20954d21. -// -// Solidity: function createDeviceDefinitionTable(address tableOwner, uint256 manufacturerId) returns() -func (_Registry *RegistryTransactor) CreateDeviceDefinitionTable(opts *bind.TransactOpts, tableOwner common.Address, manufacturerId *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "createDeviceDefinitionTable", tableOwner, manufacturerId) -} - -// CreateDeviceDefinitionTable is a paid mutator transaction binding the contract method 0x20954d21. -// -// Solidity: function createDeviceDefinitionTable(address tableOwner, uint256 manufacturerId) returns() -func (_Registry *RegistrySession) CreateDeviceDefinitionTable(tableOwner common.Address, manufacturerId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.CreateDeviceDefinitionTable(&_Registry.TransactOpts, tableOwner, manufacturerId) -} - -// CreateDeviceDefinitionTable is a paid mutator transaction binding the contract method 0x20954d21. -// -// Solidity: function createDeviceDefinitionTable(address tableOwner, uint256 manufacturerId) returns() -func (_Registry *RegistryTransactorSession) CreateDeviceDefinitionTable(tableOwner common.Address, manufacturerId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.CreateDeviceDefinitionTable(&_Registry.TransactOpts, tableOwner, manufacturerId) -} - -// CreateDeviceDefinitionTableBatch is a paid mutator transaction binding the contract method 0x794c6790. -// -// Solidity: function createDeviceDefinitionTableBatch(address tableOwner, uint256[] manufacturerIds) returns() -func (_Registry *RegistryTransactor) CreateDeviceDefinitionTableBatch(opts *bind.TransactOpts, tableOwner common.Address, manufacturerIds []*big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "createDeviceDefinitionTableBatch", tableOwner, manufacturerIds) -} - -// CreateDeviceDefinitionTableBatch is a paid mutator transaction binding the contract method 0x794c6790. -// -// Solidity: function createDeviceDefinitionTableBatch(address tableOwner, uint256[] manufacturerIds) returns() -func (_Registry *RegistrySession) CreateDeviceDefinitionTableBatch(tableOwner common.Address, manufacturerIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.CreateDeviceDefinitionTableBatch(&_Registry.TransactOpts, tableOwner, manufacturerIds) -} - -// CreateDeviceDefinitionTableBatch is a paid mutator transaction binding the contract method 0x794c6790. -// -// Solidity: function createDeviceDefinitionTableBatch(address tableOwner, uint256[] manufacturerIds) returns() -func (_Registry *RegistryTransactorSession) CreateDeviceDefinitionTableBatch(tableOwner common.Address, manufacturerIds []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.CreateDeviceDefinitionTableBatch(&_Registry.TransactOpts, tableOwner, manufacturerIds) -} - -// CreateVehicleStream is a paid mutator transaction binding the contract method 0x497323c8. -// -// Solidity: function createVehicleStream(uint256 vehicleId) returns() -func (_Registry *RegistryTransactor) CreateVehicleStream(opts *bind.TransactOpts, vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "createVehicleStream", vehicleId) -} - -// CreateVehicleStream is a paid mutator transaction binding the contract method 0x497323c8. -// -// Solidity: function createVehicleStream(uint256 vehicleId) returns() -func (_Registry *RegistrySession) CreateVehicleStream(vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.CreateVehicleStream(&_Registry.TransactOpts, vehicleId) -} - -// CreateVehicleStream is a paid mutator transaction binding the contract method 0x497323c8. -// -// Solidity: function createVehicleStream(uint256 vehicleId) returns() -func (_Registry *RegistryTransactorSession) CreateVehicleStream(vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.CreateVehicleStream(&_Registry.TransactOpts, vehicleId) -} - -// DeleteDeviceDefinition is a paid mutator transaction binding the contract method 0x32b3f2d5. -// -// Solidity: function deleteDeviceDefinition(uint256 manufacturerId, string id) returns() -func (_Registry *RegistryTransactor) DeleteDeviceDefinition(opts *bind.TransactOpts, manufacturerId *big.Int, id string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "deleteDeviceDefinition", manufacturerId, id) -} - -// DeleteDeviceDefinition is a paid mutator transaction binding the contract method 0x32b3f2d5. -// -// Solidity: function deleteDeviceDefinition(uint256 manufacturerId, string id) returns() -func (_Registry *RegistrySession) DeleteDeviceDefinition(manufacturerId *big.Int, id string) (*types.Transaction, error) { - return _Registry.Contract.DeleteDeviceDefinition(&_Registry.TransactOpts, manufacturerId, id) -} - -// DeleteDeviceDefinition is a paid mutator transaction binding the contract method 0x32b3f2d5. -// -// Solidity: function deleteDeviceDefinition(uint256 manufacturerId, string id) returns() -func (_Registry *RegistryTransactorSession) DeleteDeviceDefinition(manufacturerId *big.Int, id string) (*types.Transaction, error) { - return _Registry.Contract.DeleteDeviceDefinition(&_Registry.TransactOpts, manufacturerId, id) -} - -// GetPolicy is a paid mutator transaction binding the contract method 0x66df322e. -// -// Solidity: function getPolicy(address caller, uint256 ) payable returns((bool,bool,bool,string,string,string[]) policy) -func (_Registry *RegistryTransactor) GetPolicy(opts *bind.TransactOpts, caller common.Address, arg1 *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "getPolicy", caller, arg1) -} - -// GetPolicy is a paid mutator transaction binding the contract method 0x66df322e. -// -// Solidity: function getPolicy(address caller, uint256 ) payable returns((bool,bool,bool,string,string,string[]) policy) -func (_Registry *RegistrySession) GetPolicy(caller common.Address, arg1 *big.Int) (*types.Transaction, error) { - return _Registry.Contract.GetPolicy(&_Registry.TransactOpts, caller, arg1) -} - -// GetPolicy is a paid mutator transaction binding the contract method 0x66df322e. -// -// Solidity: function getPolicy(address caller, uint256 ) payable returns((bool,bool,bool,string,string,string[]) policy) -func (_Registry *RegistryTransactorSession) GetPolicy(caller common.Address, arg1 *big.Int) (*types.Transaction, error) { - return _Registry.Contract.GetPolicy(&_Registry.TransactOpts, caller, arg1) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_Registry *RegistryTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "grantRole", role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_Registry *RegistrySession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _Registry.Contract.GrantRole(&_Registry.TransactOpts, role, account) -} - -// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. -// -// Solidity: function grantRole(bytes32 role, address account) returns() -func (_Registry *RegistryTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _Registry.Contract.GrantRole(&_Registry.TransactOpts, role, account) -} - -// Initialize is a paid mutator transaction binding the contract method 0x4cd88b76. -// -// Solidity: function initialize(string name, string version) returns() -func (_Registry *RegistryTransactor) Initialize(opts *bind.TransactOpts, name string, version string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "initialize", name, version) -} - -// Initialize is a paid mutator transaction binding the contract method 0x4cd88b76. -// -// Solidity: function initialize(string name, string version) returns() -func (_Registry *RegistrySession) Initialize(name string, version string) (*types.Transaction, error) { - return _Registry.Contract.Initialize(&_Registry.TransactOpts, name, version) -} - -// Initialize is a paid mutator transaction binding the contract method 0x4cd88b76. -// -// Solidity: function initialize(string name, string version) returns() -func (_Registry *RegistryTransactorSession) Initialize(name string, version string) (*types.Transaction, error) { - return _Registry.Contract.Initialize(&_Registry.TransactOpts, name, version) -} - -// InsertDeviceDefinition is a paid mutator transaction binding the contract method 0x23536c5f. -// -// Solidity: function insertDeviceDefinition(uint256 manufacturerId, (string,string,uint256,string,string,string,string) data) returns() -func (_Registry *RegistryTransactor) InsertDeviceDefinition(opts *bind.TransactOpts, manufacturerId *big.Int, data DeviceDefinitionInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "insertDeviceDefinition", manufacturerId, data) -} - -// InsertDeviceDefinition is a paid mutator transaction binding the contract method 0x23536c5f. -// -// Solidity: function insertDeviceDefinition(uint256 manufacturerId, (string,string,uint256,string,string,string,string) data) returns() -func (_Registry *RegistrySession) InsertDeviceDefinition(manufacturerId *big.Int, data DeviceDefinitionInput) (*types.Transaction, error) { - return _Registry.Contract.InsertDeviceDefinition(&_Registry.TransactOpts, manufacturerId, data) -} - -// InsertDeviceDefinition is a paid mutator transaction binding the contract method 0x23536c5f. -// -// Solidity: function insertDeviceDefinition(uint256 manufacturerId, (string,string,uint256,string,string,string,string) data) returns() -func (_Registry *RegistryTransactorSession) InsertDeviceDefinition(manufacturerId *big.Int, data DeviceDefinitionInput) (*types.Transaction, error) { - return _Registry.Contract.InsertDeviceDefinition(&_Registry.TransactOpts, manufacturerId, data) -} - -// InsertDeviceDefinitionBatch is a paid mutator transaction binding the contract method 0x80d50451. -// -// Solidity: function insertDeviceDefinitionBatch(uint256 manufacturerId, (string,string,uint256,string,string,string,string)[] data) returns() -func (_Registry *RegistryTransactor) InsertDeviceDefinitionBatch(opts *bind.TransactOpts, manufacturerId *big.Int, data []DeviceDefinitionInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "insertDeviceDefinitionBatch", manufacturerId, data) -} - -// InsertDeviceDefinitionBatch is a paid mutator transaction binding the contract method 0x80d50451. -// -// Solidity: function insertDeviceDefinitionBatch(uint256 manufacturerId, (string,string,uint256,string,string,string,string)[] data) returns() -func (_Registry *RegistrySession) InsertDeviceDefinitionBatch(manufacturerId *big.Int, data []DeviceDefinitionInput) (*types.Transaction, error) { - return _Registry.Contract.InsertDeviceDefinitionBatch(&_Registry.TransactOpts, manufacturerId, data) -} - -// InsertDeviceDefinitionBatch is a paid mutator transaction binding the contract method 0x80d50451. -// -// Solidity: function insertDeviceDefinitionBatch(uint256 manufacturerId, (string,string,uint256,string,string,string,string)[] data) returns() -func (_Registry *RegistryTransactorSession) InsertDeviceDefinitionBatch(manufacturerId *big.Int, data []DeviceDefinitionInput) (*types.Transaction, error) { - return _Registry.Contract.InsertDeviceDefinitionBatch(&_Registry.TransactOpts, manufacturerId, data) -} - -// MintAftermarketDeviceByManufacturerBatch is a paid mutator transaction binding the contract method 0x7ba79a39. -// -// Solidity: function mintAftermarketDeviceByManufacturerBatch(uint256 manufacturerNode, (address,(string,string)[])[] adInfos) returns() -func (_Registry *RegistryTransactor) MintAftermarketDeviceByManufacturerBatch(opts *bind.TransactOpts, manufacturerNode *big.Int, adInfos []AftermarketDeviceInfos) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintAftermarketDeviceByManufacturerBatch", manufacturerNode, adInfos) -} - -// MintAftermarketDeviceByManufacturerBatch is a paid mutator transaction binding the contract method 0x7ba79a39. -// -// Solidity: function mintAftermarketDeviceByManufacturerBatch(uint256 manufacturerNode, (address,(string,string)[])[] adInfos) returns() -func (_Registry *RegistrySession) MintAftermarketDeviceByManufacturerBatch(manufacturerNode *big.Int, adInfos []AftermarketDeviceInfos) (*types.Transaction, error) { - return _Registry.Contract.MintAftermarketDeviceByManufacturerBatch(&_Registry.TransactOpts, manufacturerNode, adInfos) -} - -// MintAftermarketDeviceByManufacturerBatch is a paid mutator transaction binding the contract method 0x7ba79a39. -// -// Solidity: function mintAftermarketDeviceByManufacturerBatch(uint256 manufacturerNode, (address,(string,string)[])[] adInfos) returns() -func (_Registry *RegistryTransactorSession) MintAftermarketDeviceByManufacturerBatch(manufacturerNode *big.Int, adInfos []AftermarketDeviceInfos) (*types.Transaction, error) { - return _Registry.Contract.MintAftermarketDeviceByManufacturerBatch(&_Registry.TransactOpts, manufacturerNode, adInfos) -} - -// MintIntegration is a paid mutator transaction binding the contract method 0xd6739004. -// -// Solidity: function mintIntegration(address owner, string name, (string,string)[] attrInfoPairList) returns() -func (_Registry *RegistryTransactor) MintIntegration(opts *bind.TransactOpts, owner common.Address, name string, attrInfoPairList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintIntegration", owner, name, attrInfoPairList) -} - -// MintIntegration is a paid mutator transaction binding the contract method 0xd6739004. -// -// Solidity: function mintIntegration(address owner, string name, (string,string)[] attrInfoPairList) returns() -func (_Registry *RegistrySession) MintIntegration(owner common.Address, name string, attrInfoPairList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintIntegration(&_Registry.TransactOpts, owner, name, attrInfoPairList) -} - -// MintIntegration is a paid mutator transaction binding the contract method 0xd6739004. -// -// Solidity: function mintIntegration(address owner, string name, (string,string)[] attrInfoPairList) returns() -func (_Registry *RegistryTransactorSession) MintIntegration(owner common.Address, name string, attrInfoPairList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintIntegration(&_Registry.TransactOpts, owner, name, attrInfoPairList) -} - -// MintIntegrationBatch is a paid mutator transaction binding the contract method 0x653af271. -// -// Solidity: function mintIntegrationBatch(address owner, string[] names) returns() -func (_Registry *RegistryTransactor) MintIntegrationBatch(opts *bind.TransactOpts, owner common.Address, names []string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintIntegrationBatch", owner, names) -} - -// MintIntegrationBatch is a paid mutator transaction binding the contract method 0x653af271. -// -// Solidity: function mintIntegrationBatch(address owner, string[] names) returns() -func (_Registry *RegistrySession) MintIntegrationBatch(owner common.Address, names []string) (*types.Transaction, error) { - return _Registry.Contract.MintIntegrationBatch(&_Registry.TransactOpts, owner, names) -} - -// MintIntegrationBatch is a paid mutator transaction binding the contract method 0x653af271. -// -// Solidity: function mintIntegrationBatch(address owner, string[] names) returns() -func (_Registry *RegistryTransactorSession) MintIntegrationBatch(owner common.Address, names []string) (*types.Transaction, error) { - return _Registry.Contract.MintIntegrationBatch(&_Registry.TransactOpts, owner, names) -} - -// MintManufacturer is a paid mutator transaction binding the contract method 0x5f36da6b. -// -// Solidity: function mintManufacturer(address owner, string name, (string,string)[] attrInfoPairList) returns() -func (_Registry *RegistryTransactor) MintManufacturer(opts *bind.TransactOpts, owner common.Address, name string, attrInfoPairList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintManufacturer", owner, name, attrInfoPairList) -} - -// MintManufacturer is a paid mutator transaction binding the contract method 0x5f36da6b. -// -// Solidity: function mintManufacturer(address owner, string name, (string,string)[] attrInfoPairList) returns() -func (_Registry *RegistrySession) MintManufacturer(owner common.Address, name string, attrInfoPairList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintManufacturer(&_Registry.TransactOpts, owner, name, attrInfoPairList) -} - -// MintManufacturer is a paid mutator transaction binding the contract method 0x5f36da6b. -// -// Solidity: function mintManufacturer(address owner, string name, (string,string)[] attrInfoPairList) returns() -func (_Registry *RegistryTransactorSession) MintManufacturer(owner common.Address, name string, attrInfoPairList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintManufacturer(&_Registry.TransactOpts, owner, name, attrInfoPairList) -} - -// MintManufacturerBatch is a paid mutator transaction binding the contract method 0x9abb3000. -// -// Solidity: function mintManufacturerBatch(address owner, string[] names) returns() -func (_Registry *RegistryTransactor) MintManufacturerBatch(opts *bind.TransactOpts, owner common.Address, names []string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintManufacturerBatch", owner, names) -} - -// MintManufacturerBatch is a paid mutator transaction binding the contract method 0x9abb3000. -// -// Solidity: function mintManufacturerBatch(address owner, string[] names) returns() -func (_Registry *RegistrySession) MintManufacturerBatch(owner common.Address, names []string) (*types.Transaction, error) { - return _Registry.Contract.MintManufacturerBatch(&_Registry.TransactOpts, owner, names) -} - -// MintManufacturerBatch is a paid mutator transaction binding the contract method 0x9abb3000. -// -// Solidity: function mintManufacturerBatch(address owner, string[] names) returns() -func (_Registry *RegistryTransactorSession) MintManufacturerBatch(owner common.Address, names []string) (*types.Transaction, error) { - return _Registry.Contract.MintManufacturerBatch(&_Registry.TransactOpts, owner, names) -} - -// MintSyntheticDeviceBatch is a paid mutator transaction binding the contract method 0x261d982a. -// -// Solidity: function mintSyntheticDeviceBatch(uint256 integrationNode, (uint256,address,(string,string)[])[] data) returns() -func (_Registry *RegistryTransactor) MintSyntheticDeviceBatch(opts *bind.TransactOpts, integrationNode *big.Int, data []MintSyntheticDeviceBatchInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintSyntheticDeviceBatch", integrationNode, data) -} - -// MintSyntheticDeviceBatch is a paid mutator transaction binding the contract method 0x261d982a. -// -// Solidity: function mintSyntheticDeviceBatch(uint256 integrationNode, (uint256,address,(string,string)[])[] data) returns() -func (_Registry *RegistrySession) MintSyntheticDeviceBatch(integrationNode *big.Int, data []MintSyntheticDeviceBatchInput) (*types.Transaction, error) { - return _Registry.Contract.MintSyntheticDeviceBatch(&_Registry.TransactOpts, integrationNode, data) -} - -// MintSyntheticDeviceBatch is a paid mutator transaction binding the contract method 0x261d982a. -// -// Solidity: function mintSyntheticDeviceBatch(uint256 integrationNode, (uint256,address,(string,string)[])[] data) returns() -func (_Registry *RegistryTransactorSession) MintSyntheticDeviceBatch(integrationNode *big.Int, data []MintSyntheticDeviceBatchInput) (*types.Transaction, error) { - return _Registry.Contract.MintSyntheticDeviceBatch(&_Registry.TransactOpts, integrationNode, data) -} - -// MintSyntheticDeviceSign is a paid mutator transaction binding the contract method 0xc624e8a1. -// -// Solidity: function mintSyntheticDeviceSign((uint256,uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactor) MintSyntheticDeviceSign(opts *bind.TransactOpts, data MintSyntheticDeviceInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintSyntheticDeviceSign", data) -} - -// MintSyntheticDeviceSign is a paid mutator transaction binding the contract method 0xc624e8a1. -// -// Solidity: function mintSyntheticDeviceSign((uint256,uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistrySession) MintSyntheticDeviceSign(data MintSyntheticDeviceInput) (*types.Transaction, error) { - return _Registry.Contract.MintSyntheticDeviceSign(&_Registry.TransactOpts, data) -} - -// MintSyntheticDeviceSign is a paid mutator transaction binding the contract method 0xc624e8a1. -// -// Solidity: function mintSyntheticDeviceSign((uint256,uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactorSession) MintSyntheticDeviceSign(data MintSyntheticDeviceInput) (*types.Transaction, error) { - return _Registry.Contract.MintSyntheticDeviceSign(&_Registry.TransactOpts, data) -} - -// MintVehicle is a paid mutator transaction binding the contract method 0x3da44e56. -// -// Solidity: function mintVehicle(uint256 manufacturerNode, address owner, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactor) MintVehicle(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicle", manufacturerNode, owner, attrInfo) -} - -// MintVehicle is a paid mutator transaction binding the contract method 0x3da44e56. -// -// Solidity: function mintVehicle(uint256 manufacturerNode, address owner, (string,string)[] attrInfo) returns() -func (_Registry *RegistrySession) MintVehicle(manufacturerNode *big.Int, owner common.Address, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintVehicle(&_Registry.TransactOpts, manufacturerNode, owner, attrInfo) -} - -// MintVehicle is a paid mutator transaction binding the contract method 0x3da44e56. -// -// Solidity: function mintVehicle(uint256 manufacturerNode, address owner, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactorSession) MintVehicle(manufacturerNode *big.Int, owner common.Address, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintVehicle(&_Registry.TransactOpts, manufacturerNode, owner, attrInfo) -} - -// MintVehicleAndSdSign is a paid mutator transaction binding the contract method 0xfb1a28e8. -// -// Solidity: function mintVehicleAndSdSign((uint256,address,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactor) MintVehicleAndSdSign(opts *bind.TransactOpts, data MintVehicleAndSdInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleAndSdSign", data) -} - -// MintVehicleAndSdSign is a paid mutator transaction binding the contract method 0xfb1a28e8. -// -// Solidity: function mintVehicleAndSdSign((uint256,address,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistrySession) MintVehicleAndSdSign(data MintVehicleAndSdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdSign(&_Registry.TransactOpts, data) -} - -// MintVehicleAndSdSign is a paid mutator transaction binding the contract method 0xfb1a28e8. -// -// Solidity: function mintVehicleAndSdSign((uint256,address,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactorSession) MintVehicleAndSdSign(data MintVehicleAndSdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdSign(&_Registry.TransactOpts, data) -} - -// MintVehicleAndSdWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0xd23965e3. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSign((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactor) MintVehicleAndSdWithDeviceDefinitionSign(opts *bind.TransactOpts, data MintVehicleAndSdWithDdInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleAndSdWithDeviceDefinitionSign", data) -} - -// MintVehicleAndSdWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0xd23965e3. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSign((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistrySession) MintVehicleAndSdWithDeviceDefinitionSign(data MintVehicleAndSdWithDdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSign(&_Registry.TransactOpts, data) -} - -// MintVehicleAndSdWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0xd23965e3. -// -// Solidity: function mintVehicleAndSdWithDeviceDefinitionSign((uint256,address,string,(string,string)[],uint256,bytes,bytes,address,(string,string)[]) data) returns() -func (_Registry *RegistryTransactorSession) MintVehicleAndSdWithDeviceDefinitionSign(data MintVehicleAndSdWithDdInput) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleAndSdWithDeviceDefinitionSign(&_Registry.TransactOpts, data) -} - -// MintVehicleSign is a paid mutator transaction binding the contract method 0x1b1a82c8. -// -// Solidity: function mintVehicleSign(uint256 manufacturerNode, address owner, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistryTransactor) MintVehicleSign(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleSign", manufacturerNode, owner, attrInfo, signature) -} - -// MintVehicleSign is a paid mutator transaction binding the contract method 0x1b1a82c8. -// -// Solidity: function mintVehicleSign(uint256 manufacturerNode, address owner, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistrySession) MintVehicleSign(manufacturerNode *big.Int, owner common.Address, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleSign(&_Registry.TransactOpts, manufacturerNode, owner, attrInfo, signature) -} - -// MintVehicleSign is a paid mutator transaction binding the contract method 0x1b1a82c8. -// -// Solidity: function mintVehicleSign(uint256 manufacturerNode, address owner, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistryTransactorSession) MintVehicleSign(manufacturerNode *big.Int, owner common.Address, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleSign(&_Registry.TransactOpts, manufacturerNode, owner, attrInfo, signature) -} - -// MintVehicleWithDeviceDefinition is a paid mutator transaction binding the contract method 0xd84baff1. -// -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactor) MintVehicleWithDeviceDefinition(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleWithDeviceDefinition", manufacturerNode, owner, deviceDefinitionId, attrInfo) -} - -// MintVehicleWithDeviceDefinition is a paid mutator transaction binding the contract method 0xd84baff1. -// -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo) returns() -func (_Registry *RegistrySession) MintVehicleWithDeviceDefinition(manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinition(&_Registry.TransactOpts, manufacturerNode, owner, deviceDefinitionId, attrInfo) -} - -// MintVehicleWithDeviceDefinition is a paid mutator transaction binding the contract method 0xd84baff1. -// -// Solidity: function mintVehicleWithDeviceDefinition(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactorSession) MintVehicleWithDeviceDefinition(manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinition(&_Registry.TransactOpts, manufacturerNode, owner, deviceDefinitionId, attrInfo) -} - -// MintVehicleWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0x8dca2b8e. -// -// Solidity: function mintVehicleWithDeviceDefinitionSign(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistryTransactor) MintVehicleWithDeviceDefinitionSign(opts *bind.TransactOpts, manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "mintVehicleWithDeviceDefinitionSign", manufacturerNode, owner, deviceDefinitionId, attrInfo, signature) -} - -// MintVehicleWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0x8dca2b8e. -// -// Solidity: function mintVehicleWithDeviceDefinitionSign(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistrySession) MintVehicleWithDeviceDefinitionSign(manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinitionSign(&_Registry.TransactOpts, manufacturerNode, owner, deviceDefinitionId, attrInfo, signature) -} - -// MintVehicleWithDeviceDefinitionSign is a paid mutator transaction binding the contract method 0x8dca2b8e. -// -// Solidity: function mintVehicleWithDeviceDefinitionSign(uint256 manufacturerNode, address owner, string deviceDefinitionId, (string,string)[] attrInfo, bytes signature) returns() -func (_Registry *RegistryTransactorSession) MintVehicleWithDeviceDefinitionSign(manufacturerNode *big.Int, owner common.Address, deviceDefinitionId string, attrInfo []AttributeInfoPair, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.MintVehicleWithDeviceDefinitionSign(&_Registry.TransactOpts, manufacturerNode, owner, deviceDefinitionId, attrInfo, signature) -} - -// MultiDelegateCall is a paid mutator transaction binding the contract method 0x415c2d96. -// -// Solidity: function multiDelegateCall(bytes[] data) returns(bytes[] results) -func (_Registry *RegistryTransactor) MultiDelegateCall(opts *bind.TransactOpts, data [][]byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "multiDelegateCall", data) -} - -// MultiDelegateCall is a paid mutator transaction binding the contract method 0x415c2d96. -// -// Solidity: function multiDelegateCall(bytes[] data) returns(bytes[] results) -func (_Registry *RegistrySession) MultiDelegateCall(data [][]byte) (*types.Transaction, error) { - return _Registry.Contract.MultiDelegateCall(&_Registry.TransactOpts, data) -} - -// MultiDelegateCall is a paid mutator transaction binding the contract method 0x415c2d96. -// -// Solidity: function multiDelegateCall(bytes[] data) returns(bytes[] results) -func (_Registry *RegistryTransactorSession) MultiDelegateCall(data [][]byte) (*types.Transaction, error) { - return _Registry.Contract.MultiDelegateCall(&_Registry.TransactOpts, data) -} - -// OnBurnVehicleStream is a paid mutator transaction binding the contract method 0xa91ec798. -// -// Solidity: function onBurnVehicleStream(uint256 vehicleId) returns() -func (_Registry *RegistryTransactor) OnBurnVehicleStream(opts *bind.TransactOpts, vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "onBurnVehicleStream", vehicleId) -} - -// OnBurnVehicleStream is a paid mutator transaction binding the contract method 0xa91ec798. -// -// Solidity: function onBurnVehicleStream(uint256 vehicleId) returns() -func (_Registry *RegistrySession) OnBurnVehicleStream(vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.OnBurnVehicleStream(&_Registry.TransactOpts, vehicleId) -} - -// OnBurnVehicleStream is a paid mutator transaction binding the contract method 0xa91ec798. -// -// Solidity: function onBurnVehicleStream(uint256 vehicleId) returns() -func (_Registry *RegistryTransactorSession) OnBurnVehicleStream(vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.OnBurnVehicleStream(&_Registry.TransactOpts, vehicleId) -} - -// OnSetSubscribePrivilege is a paid mutator transaction binding the contract method 0xc8f11a06. -// -// Solidity: function onSetSubscribePrivilege(uint256 vehicleId, address subscriber, uint256 expirationTime) returns() -func (_Registry *RegistryTransactor) OnSetSubscribePrivilege(opts *bind.TransactOpts, vehicleId *big.Int, subscriber common.Address, expirationTime *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "onSetSubscribePrivilege", vehicleId, subscriber, expirationTime) -} - -// OnSetSubscribePrivilege is a paid mutator transaction binding the contract method 0xc8f11a06. -// -// Solidity: function onSetSubscribePrivilege(uint256 vehicleId, address subscriber, uint256 expirationTime) returns() -func (_Registry *RegistrySession) OnSetSubscribePrivilege(vehicleId *big.Int, subscriber common.Address, expirationTime *big.Int) (*types.Transaction, error) { - return _Registry.Contract.OnSetSubscribePrivilege(&_Registry.TransactOpts, vehicleId, subscriber, expirationTime) -} - -// OnSetSubscribePrivilege is a paid mutator transaction binding the contract method 0xc8f11a06. -// -// Solidity: function onSetSubscribePrivilege(uint256 vehicleId, address subscriber, uint256 expirationTime) returns() -func (_Registry *RegistryTransactorSession) OnSetSubscribePrivilege(vehicleId *big.Int, subscriber common.Address, expirationTime *big.Int) (*types.Transaction, error) { - return _Registry.Contract.OnSetSubscribePrivilege(&_Registry.TransactOpts, vehicleId, subscriber, expirationTime) -} - -// OnTransferVehicleStream is a paid mutator transaction binding the contract method 0x1882b263. -// -// Solidity: function onTransferVehicleStream(address to, uint256 vehicleId) returns() -func (_Registry *RegistryTransactor) OnTransferVehicleStream(opts *bind.TransactOpts, to common.Address, vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "onTransferVehicleStream", to, vehicleId) -} - -// OnTransferVehicleStream is a paid mutator transaction binding the contract method 0x1882b263. -// -// Solidity: function onTransferVehicleStream(address to, uint256 vehicleId) returns() -func (_Registry *RegistrySession) OnTransferVehicleStream(to common.Address, vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.OnTransferVehicleStream(&_Registry.TransactOpts, to, vehicleId) -} - -// OnTransferVehicleStream is a paid mutator transaction binding the contract method 0x1882b263. -// -// Solidity: function onTransferVehicleStream(address to, uint256 vehicleId) returns() -func (_Registry *RegistryTransactorSession) OnTransferVehicleStream(to common.Address, vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.OnTransferVehicleStream(&_Registry.TransactOpts, to, vehicleId) -} - -// PairAftermarketDeviceSign is a paid mutator transaction binding the contract method 0xb50df2f7. -// -// Solidity: function pairAftermarketDeviceSign(uint256 aftermarketDeviceNode, uint256 vehicleNode, bytes aftermarketDeviceSig, bytes vehicleOwnerSig) returns() -func (_Registry *RegistryTransactor) PairAftermarketDeviceSign(opts *bind.TransactOpts, aftermarketDeviceNode *big.Int, vehicleNode *big.Int, aftermarketDeviceSig []byte, vehicleOwnerSig []byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "pairAftermarketDeviceSign", aftermarketDeviceNode, vehicleNode, aftermarketDeviceSig, vehicleOwnerSig) -} - -// PairAftermarketDeviceSign is a paid mutator transaction binding the contract method 0xb50df2f7. -// -// Solidity: function pairAftermarketDeviceSign(uint256 aftermarketDeviceNode, uint256 vehicleNode, bytes aftermarketDeviceSig, bytes vehicleOwnerSig) returns() -func (_Registry *RegistrySession) PairAftermarketDeviceSign(aftermarketDeviceNode *big.Int, vehicleNode *big.Int, aftermarketDeviceSig []byte, vehicleOwnerSig []byte) (*types.Transaction, error) { - return _Registry.Contract.PairAftermarketDeviceSign(&_Registry.TransactOpts, aftermarketDeviceNode, vehicleNode, aftermarketDeviceSig, vehicleOwnerSig) -} - -// PairAftermarketDeviceSign is a paid mutator transaction binding the contract method 0xb50df2f7. -// -// Solidity: function pairAftermarketDeviceSign(uint256 aftermarketDeviceNode, uint256 vehicleNode, bytes aftermarketDeviceSig, bytes vehicleOwnerSig) returns() -func (_Registry *RegistryTransactorSession) PairAftermarketDeviceSign(aftermarketDeviceNode *big.Int, vehicleNode *big.Int, aftermarketDeviceSig []byte, vehicleOwnerSig []byte) (*types.Transaction, error) { - return _Registry.Contract.PairAftermarketDeviceSign(&_Registry.TransactOpts, aftermarketDeviceNode, vehicleNode, aftermarketDeviceSig, vehicleOwnerSig) -} - -// PairAftermarketDeviceSign0 is a paid mutator transaction binding the contract method 0xcfe642dd. -// -// Solidity: function pairAftermarketDeviceSign(uint256 aftermarketDeviceNode, uint256 vehicleNode, bytes signature) returns() -func (_Registry *RegistryTransactor) PairAftermarketDeviceSign0(opts *bind.TransactOpts, aftermarketDeviceNode *big.Int, vehicleNode *big.Int, signature []byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "pairAftermarketDeviceSign0", aftermarketDeviceNode, vehicleNode, signature) -} - -// PairAftermarketDeviceSign0 is a paid mutator transaction binding the contract method 0xcfe642dd. -// -// Solidity: function pairAftermarketDeviceSign(uint256 aftermarketDeviceNode, uint256 vehicleNode, bytes signature) returns() -func (_Registry *RegistrySession) PairAftermarketDeviceSign0(aftermarketDeviceNode *big.Int, vehicleNode *big.Int, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.PairAftermarketDeviceSign0(&_Registry.TransactOpts, aftermarketDeviceNode, vehicleNode, signature) -} - -// PairAftermarketDeviceSign0 is a paid mutator transaction binding the contract method 0xcfe642dd. -// -// Solidity: function pairAftermarketDeviceSign(uint256 aftermarketDeviceNode, uint256 vehicleNode, bytes signature) returns() -func (_Registry *RegistryTransactorSession) PairAftermarketDeviceSign0(aftermarketDeviceNode *big.Int, vehicleNode *big.Int, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.PairAftermarketDeviceSign0(&_Registry.TransactOpts, aftermarketDeviceNode, vehicleNode, signature) -} - -// RemoveModule is a paid mutator transaction binding the contract method 0x9748a762. -// -// Solidity: function removeModule(address implementation, bytes4[] selectors) returns() -func (_Registry *RegistryTransactor) RemoveModule(opts *bind.TransactOpts, implementation common.Address, selectors [][4]byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "removeModule", implementation, selectors) -} - -// RemoveModule is a paid mutator transaction binding the contract method 0x9748a762. -// -// Solidity: function removeModule(address implementation, bytes4[] selectors) returns() -func (_Registry *RegistrySession) RemoveModule(implementation common.Address, selectors [][4]byte) (*types.Transaction, error) { - return _Registry.Contract.RemoveModule(&_Registry.TransactOpts, implementation, selectors) -} - -// RemoveModule is a paid mutator transaction binding the contract method 0x9748a762. -// -// Solidity: function removeModule(address implementation, bytes4[] selectors) returns() -func (_Registry *RegistryTransactorSession) RemoveModule(implementation common.Address, selectors [][4]byte) (*types.Transaction, error) { - return _Registry.Contract.RemoveModule(&_Registry.TransactOpts, implementation, selectors) -} - -// RenameManufacturers is a paid mutator transaction binding the contract method 0xf73a8f04. -// -// Solidity: function renameManufacturers((uint256,string)[] idManufacturerNames) returns() -func (_Registry *RegistryTransactor) RenameManufacturers(opts *bind.TransactOpts, idManufacturerNames []DevAdminIdManufacturerName) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "renameManufacturers", idManufacturerNames) -} - -// RenameManufacturers is a paid mutator transaction binding the contract method 0xf73a8f04. -// -// Solidity: function renameManufacturers((uint256,string)[] idManufacturerNames) returns() -func (_Registry *RegistrySession) RenameManufacturers(idManufacturerNames []DevAdminIdManufacturerName) (*types.Transaction, error) { - return _Registry.Contract.RenameManufacturers(&_Registry.TransactOpts, idManufacturerNames) -} - -// RenameManufacturers is a paid mutator transaction binding the contract method 0xf73a8f04. -// -// Solidity: function renameManufacturers((uint256,string)[] idManufacturerNames) returns() -func (_Registry *RegistryTransactorSession) RenameManufacturers(idManufacturerNames []DevAdminIdManufacturerName) (*types.Transaction, error) { - return _Registry.Contract.RenameManufacturers(&_Registry.TransactOpts, idManufacturerNames) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x8bb9c5bf. -// -// Solidity: function renounceRole(bytes32 role) returns() -func (_Registry *RegistryTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "renounceRole", role) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x8bb9c5bf. -// -// Solidity: function renounceRole(bytes32 role) returns() -func (_Registry *RegistrySession) RenounceRole(role [32]byte) (*types.Transaction, error) { - return _Registry.Contract.RenounceRole(&_Registry.TransactOpts, role) -} - -// RenounceRole is a paid mutator transaction binding the contract method 0x8bb9c5bf. -// -// Solidity: function renounceRole(bytes32 role) returns() -func (_Registry *RegistryTransactorSession) RenounceRole(role [32]byte) (*types.Transaction, error) { - return _Registry.Contract.RenounceRole(&_Registry.TransactOpts, role) -} - -// ReprovisionAftermarketDeviceByManufacturerBatch is a paid mutator transaction binding the contract method 0x9b3abd48. -// -// Solidity: function reprovisionAftermarketDeviceByManufacturerBatch(uint256[] aftermarketDeviceNodeList) returns() -func (_Registry *RegistryTransactor) ReprovisionAftermarketDeviceByManufacturerBatch(opts *bind.TransactOpts, aftermarketDeviceNodeList []*big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "reprovisionAftermarketDeviceByManufacturerBatch", aftermarketDeviceNodeList) -} - -// ReprovisionAftermarketDeviceByManufacturerBatch is a paid mutator transaction binding the contract method 0x9b3abd48. -// -// Solidity: function reprovisionAftermarketDeviceByManufacturerBatch(uint256[] aftermarketDeviceNodeList) returns() -func (_Registry *RegistrySession) ReprovisionAftermarketDeviceByManufacturerBatch(aftermarketDeviceNodeList []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.ReprovisionAftermarketDeviceByManufacturerBatch(&_Registry.TransactOpts, aftermarketDeviceNodeList) -} - -// ReprovisionAftermarketDeviceByManufacturerBatch is a paid mutator transaction binding the contract method 0x9b3abd48. -// -// Solidity: function reprovisionAftermarketDeviceByManufacturerBatch(uint256[] aftermarketDeviceNodeList) returns() -func (_Registry *RegistryTransactorSession) ReprovisionAftermarketDeviceByManufacturerBatch(aftermarketDeviceNodeList []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.ReprovisionAftermarketDeviceByManufacturerBatch(&_Registry.TransactOpts, aftermarketDeviceNodeList) -} - -// ResetAftermarketDeviceAddressByManufacturerBatch is a paid mutator transaction binding the contract method 0x9d0b139b. -// -// Solidity: function resetAftermarketDeviceAddressByManufacturerBatch((uint256,address)[] adIdAddrs) returns() -func (_Registry *RegistryTransactor) ResetAftermarketDeviceAddressByManufacturerBatch(opts *bind.TransactOpts, adIdAddrs []AftermarketDeviceIdAddressPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "resetAftermarketDeviceAddressByManufacturerBatch", adIdAddrs) -} - -// ResetAftermarketDeviceAddressByManufacturerBatch is a paid mutator transaction binding the contract method 0x9d0b139b. -// -// Solidity: function resetAftermarketDeviceAddressByManufacturerBatch((uint256,address)[] adIdAddrs) returns() -func (_Registry *RegistrySession) ResetAftermarketDeviceAddressByManufacturerBatch(adIdAddrs []AftermarketDeviceIdAddressPair) (*types.Transaction, error) { - return _Registry.Contract.ResetAftermarketDeviceAddressByManufacturerBatch(&_Registry.TransactOpts, adIdAddrs) -} - -// ResetAftermarketDeviceAddressByManufacturerBatch is a paid mutator transaction binding the contract method 0x9d0b139b. -// -// Solidity: function resetAftermarketDeviceAddressByManufacturerBatch((uint256,address)[] adIdAddrs) returns() -func (_Registry *RegistryTransactorSession) ResetAftermarketDeviceAddressByManufacturerBatch(adIdAddrs []AftermarketDeviceIdAddressPair) (*types.Transaction, error) { - return _Registry.Contract.ResetAftermarketDeviceAddressByManufacturerBatch(&_Registry.TransactOpts, adIdAddrs) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_Registry *RegistryTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "revokeRole", role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_Registry *RegistrySession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _Registry.Contract.RevokeRole(&_Registry.TransactOpts, role, account) -} - -// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. -// -// Solidity: function revokeRole(bytes32 role, address account) returns() -func (_Registry *RegistryTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _Registry.Contract.RevokeRole(&_Registry.TransactOpts, role, account) -} - -// SetAftermarketDeviceBeneficiary is a paid mutator transaction binding the contract method 0xbebc0bfc. -// -// Solidity: function setAftermarketDeviceBeneficiary(uint256 nodeId, address beneficiary) returns() -func (_Registry *RegistryTransactor) SetAftermarketDeviceBeneficiary(opts *bind.TransactOpts, nodeId *big.Int, beneficiary common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setAftermarketDeviceBeneficiary", nodeId, beneficiary) -} - -// SetAftermarketDeviceBeneficiary is a paid mutator transaction binding the contract method 0xbebc0bfc. -// -// Solidity: function setAftermarketDeviceBeneficiary(uint256 nodeId, address beneficiary) returns() -func (_Registry *RegistrySession) SetAftermarketDeviceBeneficiary(nodeId *big.Int, beneficiary common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetAftermarketDeviceBeneficiary(&_Registry.TransactOpts, nodeId, beneficiary) -} - -// SetAftermarketDeviceBeneficiary is a paid mutator transaction binding the contract method 0xbebc0bfc. -// -// Solidity: function setAftermarketDeviceBeneficiary(uint256 nodeId, address beneficiary) returns() -func (_Registry *RegistryTransactorSession) SetAftermarketDeviceBeneficiary(nodeId *big.Int, beneficiary common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetAftermarketDeviceBeneficiary(&_Registry.TransactOpts, nodeId, beneficiary) -} - -// SetAftermarketDeviceIdProxyAddress is a paid mutator transaction binding the contract method 0x4d49d82a. -// -// Solidity: function setAftermarketDeviceIdProxyAddress(address addr) returns() -func (_Registry *RegistryTransactor) SetAftermarketDeviceIdProxyAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setAftermarketDeviceIdProxyAddress", addr) -} - -// SetAftermarketDeviceIdProxyAddress is a paid mutator transaction binding the contract method 0x4d49d82a. -// -// Solidity: function setAftermarketDeviceIdProxyAddress(address addr) returns() -func (_Registry *RegistrySession) SetAftermarketDeviceIdProxyAddress(addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetAftermarketDeviceIdProxyAddress(&_Registry.TransactOpts, addr) -} - -// SetAftermarketDeviceIdProxyAddress is a paid mutator transaction binding the contract method 0x4d49d82a. -// -// Solidity: function setAftermarketDeviceIdProxyAddress(address addr) returns() -func (_Registry *RegistryTransactorSession) SetAftermarketDeviceIdProxyAddress(addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetAftermarketDeviceIdProxyAddress(&_Registry.TransactOpts, addr) -} - -// SetAftermarketDeviceInfo is a paid mutator transaction binding the contract method 0x4d13b709. -// -// Solidity: function setAftermarketDeviceInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactor) SetAftermarketDeviceInfo(opts *bind.TransactOpts, tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setAftermarketDeviceInfo", tokenId, attrInfo) -} - -// SetAftermarketDeviceInfo is a paid mutator transaction binding the contract method 0x4d13b709. -// -// Solidity: function setAftermarketDeviceInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistrySession) SetAftermarketDeviceInfo(tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetAftermarketDeviceInfo(&_Registry.TransactOpts, tokenId, attrInfo) -} - -// SetAftermarketDeviceInfo is a paid mutator transaction binding the contract method 0x4d13b709. -// -// Solidity: function setAftermarketDeviceInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactorSession) SetAftermarketDeviceInfo(tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetAftermarketDeviceInfo(&_Registry.TransactOpts, tokenId, attrInfo) -} - -// SetBaseDataURI is a paid mutator transaction binding the contract method 0xe324093f. -// -// Solidity: function setBaseDataURI(address idProxyAddress, string _baseDataURI) returns() -func (_Registry *RegistryTransactor) SetBaseDataURI(opts *bind.TransactOpts, idProxyAddress common.Address, _baseDataURI string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setBaseDataURI", idProxyAddress, _baseDataURI) -} - -// SetBaseDataURI is a paid mutator transaction binding the contract method 0xe324093f. -// -// Solidity: function setBaseDataURI(address idProxyAddress, string _baseDataURI) returns() -func (_Registry *RegistrySession) SetBaseDataURI(idProxyAddress common.Address, _baseDataURI string) (*types.Transaction, error) { - return _Registry.Contract.SetBaseDataURI(&_Registry.TransactOpts, idProxyAddress, _baseDataURI) -} - -// SetBaseDataURI is a paid mutator transaction binding the contract method 0xe324093f. -// -// Solidity: function setBaseDataURI(address idProxyAddress, string _baseDataURI) returns() -func (_Registry *RegistryTransactorSession) SetBaseDataURI(idProxyAddress common.Address, _baseDataURI string) (*types.Transaction, error) { - return _Registry.Contract.SetBaseDataURI(&_Registry.TransactOpts, idProxyAddress, _baseDataURI) -} - -// SetController is a paid mutator transaction binding the contract method 0x92eefe9b. -// -// Solidity: function setController(address _controller) returns() -func (_Registry *RegistryTransactor) SetController(opts *bind.TransactOpts, _controller common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setController", _controller) -} - -// SetController is a paid mutator transaction binding the contract method 0x92eefe9b. -// -// Solidity: function setController(address _controller) returns() -func (_Registry *RegistrySession) SetController(_controller common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetController(&_Registry.TransactOpts, _controller) -} - -// SetController is a paid mutator transaction binding the contract method 0x92eefe9b. -// -// Solidity: function setController(address _controller) returns() -func (_Registry *RegistryTransactorSession) SetController(_controller common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetController(&_Registry.TransactOpts, _controller) -} - -// SetDcxOperationCost is a paid mutator transaction binding the contract method 0xa2fe8c85. -// -// Solidity: function setDcxOperationCost(bytes32 operation, uint256 cost) returns() -func (_Registry *RegistryTransactor) SetDcxOperationCost(opts *bind.TransactOpts, operation [32]byte, cost *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setDcxOperationCost", operation, cost) -} - -// SetDcxOperationCost is a paid mutator transaction binding the contract method 0xa2fe8c85. -// -// Solidity: function setDcxOperationCost(bytes32 operation, uint256 cost) returns() -func (_Registry *RegistrySession) SetDcxOperationCost(operation [32]byte, cost *big.Int) (*types.Transaction, error) { - return _Registry.Contract.SetDcxOperationCost(&_Registry.TransactOpts, operation, cost) -} - -// SetDcxOperationCost is a paid mutator transaction binding the contract method 0xa2fe8c85. -// -// Solidity: function setDcxOperationCost(bytes32 operation, uint256 cost) returns() -func (_Registry *RegistryTransactorSession) SetDcxOperationCost(operation [32]byte, cost *big.Int) (*types.Transaction, error) { - return _Registry.Contract.SetDcxOperationCost(&_Registry.TransactOpts, operation, cost) -} - -// SetDeviceDefinitionTable is a paid mutator transaction binding the contract method 0x088fafdb. -// -// Solidity: function setDeviceDefinitionTable(uint256 manufacturerId, uint256 tableId) returns() -func (_Registry *RegistryTransactor) SetDeviceDefinitionTable(opts *bind.TransactOpts, manufacturerId *big.Int, tableId *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setDeviceDefinitionTable", manufacturerId, tableId) -} - -// SetDeviceDefinitionTable is a paid mutator transaction binding the contract method 0x088fafdb. -// -// Solidity: function setDeviceDefinitionTable(uint256 manufacturerId, uint256 tableId) returns() -func (_Registry *RegistrySession) SetDeviceDefinitionTable(manufacturerId *big.Int, tableId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.SetDeviceDefinitionTable(&_Registry.TransactOpts, manufacturerId, tableId) -} - -// SetDeviceDefinitionTable is a paid mutator transaction binding the contract method 0x088fafdb. -// -// Solidity: function setDeviceDefinitionTable(uint256 manufacturerId, uint256 tableId) returns() -func (_Registry *RegistryTransactorSession) SetDeviceDefinitionTable(manufacturerId *big.Int, tableId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.SetDeviceDefinitionTable(&_Registry.TransactOpts, manufacturerId, tableId) -} - -// SetDimoBaseStreamId is a paid mutator transaction binding the contract method 0x9e594424. -// -// Solidity: function setDimoBaseStreamId(string dimoStreamrEns) returns() -func (_Registry *RegistryTransactor) SetDimoBaseStreamId(opts *bind.TransactOpts, dimoStreamrEns string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setDimoBaseStreamId", dimoStreamrEns) -} - -// SetDimoBaseStreamId is a paid mutator transaction binding the contract method 0x9e594424. -// -// Solidity: function setDimoBaseStreamId(string dimoStreamrEns) returns() -func (_Registry *RegistrySession) SetDimoBaseStreamId(dimoStreamrEns string) (*types.Transaction, error) { - return _Registry.Contract.SetDimoBaseStreamId(&_Registry.TransactOpts, dimoStreamrEns) -} - -// SetDimoBaseStreamId is a paid mutator transaction binding the contract method 0x9e594424. -// -// Solidity: function setDimoBaseStreamId(string dimoStreamrEns) returns() -func (_Registry *RegistryTransactorSession) SetDimoBaseStreamId(dimoStreamrEns string) (*types.Transaction, error) { - return _Registry.Contract.SetDimoBaseStreamId(&_Registry.TransactOpts, dimoStreamrEns) -} - -// SetDimoCredit is a paid mutator transaction binding the contract method 0x4fa9ff16. -// -// Solidity: function setDimoCredit(address dimoCredit) returns() -func (_Registry *RegistryTransactor) SetDimoCredit(opts *bind.TransactOpts, dimoCredit common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setDimoCredit", dimoCredit) -} - -// SetDimoCredit is a paid mutator transaction binding the contract method 0x4fa9ff16. -// -// Solidity: function setDimoCredit(address dimoCredit) returns() -func (_Registry *RegistrySession) SetDimoCredit(dimoCredit common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetDimoCredit(&_Registry.TransactOpts, dimoCredit) -} - -// SetDimoCredit is a paid mutator transaction binding the contract method 0x4fa9ff16. -// -// Solidity: function setDimoCredit(address dimoCredit) returns() -func (_Registry *RegistryTransactorSession) SetDimoCredit(dimoCredit common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetDimoCredit(&_Registry.TransactOpts, dimoCredit) -} - -// SetDimoStreamrNode is a paid mutator transaction binding the contract method 0x5f450e29. -// -// Solidity: function setDimoStreamrNode(address dimoStreamrNode) returns() -func (_Registry *RegistryTransactor) SetDimoStreamrNode(opts *bind.TransactOpts, dimoStreamrNode common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setDimoStreamrNode", dimoStreamrNode) -} - -// SetDimoStreamrNode is a paid mutator transaction binding the contract method 0x5f450e29. -// -// Solidity: function setDimoStreamrNode(address dimoStreamrNode) returns() -func (_Registry *RegistrySession) SetDimoStreamrNode(dimoStreamrNode common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetDimoStreamrNode(&_Registry.TransactOpts, dimoStreamrNode) -} - -// SetDimoStreamrNode is a paid mutator transaction binding the contract method 0x5f450e29. -// -// Solidity: function setDimoStreamrNode(address dimoStreamrNode) returns() -func (_Registry *RegistryTransactorSession) SetDimoStreamrNode(dimoStreamrNode common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetDimoStreamrNode(&_Registry.TransactOpts, dimoStreamrNode) -} - -// SetDimoToken is a paid mutator transaction binding the contract method 0x5b6c1979. -// -// Solidity: function setDimoToken(address dimoToken) returns() -func (_Registry *RegistryTransactor) SetDimoToken(opts *bind.TransactOpts, dimoToken common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setDimoToken", dimoToken) -} - -// SetDimoToken is a paid mutator transaction binding the contract method 0x5b6c1979. -// -// Solidity: function setDimoToken(address dimoToken) returns() -func (_Registry *RegistrySession) SetDimoToken(dimoToken common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetDimoToken(&_Registry.TransactOpts, dimoToken) -} - -// SetDimoToken is a paid mutator transaction binding the contract method 0x5b6c1979. -// -// Solidity: function setDimoToken(address dimoToken) returns() -func (_Registry *RegistryTransactorSession) SetDimoToken(dimoToken common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetDimoToken(&_Registry.TransactOpts, dimoToken) -} - -// SetFoundation is a paid mutator transaction binding the contract method 0xdb3543f5. -// -// Solidity: function setFoundation(address foundation) returns() -func (_Registry *RegistryTransactor) SetFoundation(opts *bind.TransactOpts, foundation common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setFoundation", foundation) -} - -// SetFoundation is a paid mutator transaction binding the contract method 0xdb3543f5. -// -// Solidity: function setFoundation(address foundation) returns() -func (_Registry *RegistrySession) SetFoundation(foundation common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetFoundation(&_Registry.TransactOpts, foundation) -} - -// SetFoundation is a paid mutator transaction binding the contract method 0xdb3543f5. -// -// Solidity: function setFoundation(address foundation) returns() -func (_Registry *RegistryTransactorSession) SetFoundation(foundation common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetFoundation(&_Registry.TransactOpts, foundation) -} - -// SetIntegrationController is a paid mutator transaction binding the contract method 0x106129aa. -// -// Solidity: function setIntegrationController(address _controller) returns() -func (_Registry *RegistryTransactor) SetIntegrationController(opts *bind.TransactOpts, _controller common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setIntegrationController", _controller) -} - -// SetIntegrationController is a paid mutator transaction binding the contract method 0x106129aa. -// -// Solidity: function setIntegrationController(address _controller) returns() -func (_Registry *RegistrySession) SetIntegrationController(_controller common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetIntegrationController(&_Registry.TransactOpts, _controller) -} - -// SetIntegrationController is a paid mutator transaction binding the contract method 0x106129aa. -// -// Solidity: function setIntegrationController(address _controller) returns() -func (_Registry *RegistryTransactorSession) SetIntegrationController(_controller common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetIntegrationController(&_Registry.TransactOpts, _controller) -} - -// SetIntegrationIdProxyAddress is a paid mutator transaction binding the contract method 0x636c1d1b. -// -// Solidity: function setIntegrationIdProxyAddress(address addr) returns() -func (_Registry *RegistryTransactor) SetIntegrationIdProxyAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setIntegrationIdProxyAddress", addr) -} - -// SetIntegrationIdProxyAddress is a paid mutator transaction binding the contract method 0x636c1d1b. -// -// Solidity: function setIntegrationIdProxyAddress(address addr) returns() -func (_Registry *RegistrySession) SetIntegrationIdProxyAddress(addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetIntegrationIdProxyAddress(&_Registry.TransactOpts, addr) -} - -// SetIntegrationIdProxyAddress is a paid mutator transaction binding the contract method 0x636c1d1b. -// -// Solidity: function setIntegrationIdProxyAddress(address addr) returns() -func (_Registry *RegistryTransactorSession) SetIntegrationIdProxyAddress(addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetIntegrationIdProxyAddress(&_Registry.TransactOpts, addr) -} - -// SetIntegrationInfo is a paid mutator transaction binding the contract method 0x8d7e6001. -// -// Solidity: function setIntegrationInfo(uint256 tokenId, (string,string)[] attrInfoList) returns() -func (_Registry *RegistryTransactor) SetIntegrationInfo(opts *bind.TransactOpts, tokenId *big.Int, attrInfoList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setIntegrationInfo", tokenId, attrInfoList) -} - -// SetIntegrationInfo is a paid mutator transaction binding the contract method 0x8d7e6001. -// -// Solidity: function setIntegrationInfo(uint256 tokenId, (string,string)[] attrInfoList) returns() -func (_Registry *RegistrySession) SetIntegrationInfo(tokenId *big.Int, attrInfoList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetIntegrationInfo(&_Registry.TransactOpts, tokenId, attrInfoList) -} - -// SetIntegrationInfo is a paid mutator transaction binding the contract method 0x8d7e6001. -// -// Solidity: function setIntegrationInfo(uint256 tokenId, (string,string)[] attrInfoList) returns() -func (_Registry *RegistryTransactorSession) SetIntegrationInfo(tokenId *big.Int, attrInfoList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetIntegrationInfo(&_Registry.TransactOpts, tokenId, attrInfoList) -} - -// SetManufacturerIdProxyAddress is a paid mutator transaction binding the contract method 0xd159f49a. -// -// Solidity: function setManufacturerIdProxyAddress(address addr) returns() -func (_Registry *RegistryTransactor) SetManufacturerIdProxyAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setManufacturerIdProxyAddress", addr) -} - -// SetManufacturerIdProxyAddress is a paid mutator transaction binding the contract method 0xd159f49a. -// -// Solidity: function setManufacturerIdProxyAddress(address addr) returns() -func (_Registry *RegistrySession) SetManufacturerIdProxyAddress(addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetManufacturerIdProxyAddress(&_Registry.TransactOpts, addr) -} - -// SetManufacturerIdProxyAddress is a paid mutator transaction binding the contract method 0xd159f49a. -// -// Solidity: function setManufacturerIdProxyAddress(address addr) returns() -func (_Registry *RegistryTransactorSession) SetManufacturerIdProxyAddress(addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetManufacturerIdProxyAddress(&_Registry.TransactOpts, addr) -} - -// SetManufacturerInfo is a paid mutator transaction binding the contract method 0x63545ffa. -// -// Solidity: function setManufacturerInfo(uint256 tokenId, (string,string)[] attrInfoList) returns() -func (_Registry *RegistryTransactor) SetManufacturerInfo(opts *bind.TransactOpts, tokenId *big.Int, attrInfoList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setManufacturerInfo", tokenId, attrInfoList) -} - -// SetManufacturerInfo is a paid mutator transaction binding the contract method 0x63545ffa. -// -// Solidity: function setManufacturerInfo(uint256 tokenId, (string,string)[] attrInfoList) returns() -func (_Registry *RegistrySession) SetManufacturerInfo(tokenId *big.Int, attrInfoList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetManufacturerInfo(&_Registry.TransactOpts, tokenId, attrInfoList) -} - -// SetManufacturerInfo is a paid mutator transaction binding the contract method 0x63545ffa. -// -// Solidity: function setManufacturerInfo(uint256 tokenId, (string,string)[] attrInfoList) returns() -func (_Registry *RegistryTransactorSession) SetManufacturerInfo(tokenId *big.Int, attrInfoList []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetManufacturerInfo(&_Registry.TransactOpts, tokenId, attrInfoList) -} - -// SetManufacturerLicense is a paid mutator transaction binding the contract method 0xea9ae2f5. -// -// Solidity: function setManufacturerLicense(address manufacturerLicense) returns() -func (_Registry *RegistryTransactor) SetManufacturerLicense(opts *bind.TransactOpts, manufacturerLicense common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setManufacturerLicense", manufacturerLicense) -} - -// SetManufacturerLicense is a paid mutator transaction binding the contract method 0xea9ae2f5. -// -// Solidity: function setManufacturerLicense(address manufacturerLicense) returns() -func (_Registry *RegistrySession) SetManufacturerLicense(manufacturerLicense common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetManufacturerLicense(&_Registry.TransactOpts, manufacturerLicense) -} - -// SetManufacturerLicense is a paid mutator transaction binding the contract method 0xea9ae2f5. -// -// Solidity: function setManufacturerLicense(address manufacturerLicense) returns() -func (_Registry *RegistryTransactorSession) SetManufacturerLicense(manufacturerLicense common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetManufacturerLicense(&_Registry.TransactOpts, manufacturerLicense) -} - -// SetStreamRegistry is a paid mutator transaction binding the contract method 0x0c3cac3b. -// -// Solidity: function setStreamRegistry(address streamRegistry) returns() -func (_Registry *RegistryTransactor) SetStreamRegistry(opts *bind.TransactOpts, streamRegistry common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setStreamRegistry", streamRegistry) -} - -// SetStreamRegistry is a paid mutator transaction binding the contract method 0x0c3cac3b. -// -// Solidity: function setStreamRegistry(address streamRegistry) returns() -func (_Registry *RegistrySession) SetStreamRegistry(streamRegistry common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetStreamRegistry(&_Registry.TransactOpts, streamRegistry) -} - -// SetStreamRegistry is a paid mutator transaction binding the contract method 0x0c3cac3b. -// -// Solidity: function setStreamRegistry(address streamRegistry) returns() -func (_Registry *RegistryTransactorSession) SetStreamRegistry(streamRegistry common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetStreamRegistry(&_Registry.TransactOpts, streamRegistry) -} - -// SetSubscriptionToVehicleStream is a paid mutator transaction binding the contract method 0xbb44bb75. -// -// Solidity: function setSubscriptionToVehicleStream(uint256 vehicleId, address subscriber, uint256 expirationTime) returns() -func (_Registry *RegistryTransactor) SetSubscriptionToVehicleStream(opts *bind.TransactOpts, vehicleId *big.Int, subscriber common.Address, expirationTime *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setSubscriptionToVehicleStream", vehicleId, subscriber, expirationTime) -} - -// SetSubscriptionToVehicleStream is a paid mutator transaction binding the contract method 0xbb44bb75. -// -// Solidity: function setSubscriptionToVehicleStream(uint256 vehicleId, address subscriber, uint256 expirationTime) returns() -func (_Registry *RegistrySession) SetSubscriptionToVehicleStream(vehicleId *big.Int, subscriber common.Address, expirationTime *big.Int) (*types.Transaction, error) { - return _Registry.Contract.SetSubscriptionToVehicleStream(&_Registry.TransactOpts, vehicleId, subscriber, expirationTime) -} - -// SetSubscriptionToVehicleStream is a paid mutator transaction binding the contract method 0xbb44bb75. -// -// Solidity: function setSubscriptionToVehicleStream(uint256 vehicleId, address subscriber, uint256 expirationTime) returns() -func (_Registry *RegistryTransactorSession) SetSubscriptionToVehicleStream(vehicleId *big.Int, subscriber common.Address, expirationTime *big.Int) (*types.Transaction, error) { - return _Registry.Contract.SetSubscriptionToVehicleStream(&_Registry.TransactOpts, vehicleId, subscriber, expirationTime) -} - -// SetSyntheticDeviceIdProxyAddress is a paid mutator transaction binding the contract method 0xecf452d7. -// -// Solidity: function setSyntheticDeviceIdProxyAddress(address addr) returns() -func (_Registry *RegistryTransactor) SetSyntheticDeviceIdProxyAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setSyntheticDeviceIdProxyAddress", addr) -} - -// SetSyntheticDeviceIdProxyAddress is a paid mutator transaction binding the contract method 0xecf452d7. -// -// Solidity: function setSyntheticDeviceIdProxyAddress(address addr) returns() -func (_Registry *RegistrySession) SetSyntheticDeviceIdProxyAddress(addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetSyntheticDeviceIdProxyAddress(&_Registry.TransactOpts, addr) -} - -// SetSyntheticDeviceIdProxyAddress is a paid mutator transaction binding the contract method 0xecf452d7. -// -// Solidity: function setSyntheticDeviceIdProxyAddress(address addr) returns() -func (_Registry *RegistryTransactorSession) SetSyntheticDeviceIdProxyAddress(addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetSyntheticDeviceIdProxyAddress(&_Registry.TransactOpts, addr) -} - -// SetSyntheticDeviceInfo is a paid mutator transaction binding the contract method 0x80430e0d. -// -// Solidity: function setSyntheticDeviceInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactor) SetSyntheticDeviceInfo(opts *bind.TransactOpts, tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setSyntheticDeviceInfo", tokenId, attrInfo) -} - -// SetSyntheticDeviceInfo is a paid mutator transaction binding the contract method 0x80430e0d. -// -// Solidity: function setSyntheticDeviceInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistrySession) SetSyntheticDeviceInfo(tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetSyntheticDeviceInfo(&_Registry.TransactOpts, tokenId, attrInfo) -} - -// SetSyntheticDeviceInfo is a paid mutator transaction binding the contract method 0x80430e0d. -// -// Solidity: function setSyntheticDeviceInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactorSession) SetSyntheticDeviceInfo(tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetSyntheticDeviceInfo(&_Registry.TransactOpts, tokenId, attrInfo) -} - -// SetVehicleIdProxyAddress is a paid mutator transaction binding the contract method 0x9bfae6da. -// -// Solidity: function setVehicleIdProxyAddress(address addr) returns() -func (_Registry *RegistryTransactor) SetVehicleIdProxyAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setVehicleIdProxyAddress", addr) -} - -// SetVehicleIdProxyAddress is a paid mutator transaction binding the contract method 0x9bfae6da. -// -// Solidity: function setVehicleIdProxyAddress(address addr) returns() -func (_Registry *RegistrySession) SetVehicleIdProxyAddress(addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetVehicleIdProxyAddress(&_Registry.TransactOpts, addr) -} - -// SetVehicleIdProxyAddress is a paid mutator transaction binding the contract method 0x9bfae6da. -// -// Solidity: function setVehicleIdProxyAddress(address addr) returns() -func (_Registry *RegistryTransactorSession) SetVehicleIdProxyAddress(addr common.Address) (*types.Transaction, error) { - return _Registry.Contract.SetVehicleIdProxyAddress(&_Registry.TransactOpts, addr) -} - -// SetVehicleInfo is a paid mutator transaction binding the contract method 0xd9c3ae61. -// -// Solidity: function setVehicleInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactor) SetVehicleInfo(opts *bind.TransactOpts, tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setVehicleInfo", tokenId, attrInfo) -} - -// SetVehicleInfo is a paid mutator transaction binding the contract method 0xd9c3ae61. -// -// Solidity: function setVehicleInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistrySession) SetVehicleInfo(tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetVehicleInfo(&_Registry.TransactOpts, tokenId, attrInfo) -} - -// SetVehicleInfo is a paid mutator transaction binding the contract method 0xd9c3ae61. -// -// Solidity: function setVehicleInfo(uint256 tokenId, (string,string)[] attrInfo) returns() -func (_Registry *RegistryTransactorSession) SetVehicleInfo(tokenId *big.Int, attrInfo []AttributeInfoPair) (*types.Transaction, error) { - return _Registry.Contract.SetVehicleInfo(&_Registry.TransactOpts, tokenId, attrInfo) -} - -// SetVehicleStream is a paid mutator transaction binding the contract method 0x6f58f093. -// -// Solidity: function setVehicleStream(uint256 vehicleId, string streamId) returns() -func (_Registry *RegistryTransactor) SetVehicleStream(opts *bind.TransactOpts, vehicleId *big.Int, streamId string) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "setVehicleStream", vehicleId, streamId) -} - -// SetVehicleStream is a paid mutator transaction binding the contract method 0x6f58f093. -// -// Solidity: function setVehicleStream(uint256 vehicleId, string streamId) returns() -func (_Registry *RegistrySession) SetVehicleStream(vehicleId *big.Int, streamId string) (*types.Transaction, error) { - return _Registry.Contract.SetVehicleStream(&_Registry.TransactOpts, vehicleId, streamId) -} - -// SetVehicleStream is a paid mutator transaction binding the contract method 0x6f58f093. -// -// Solidity: function setVehicleStream(uint256 vehicleId, string streamId) returns() -func (_Registry *RegistryTransactorSession) SetVehicleStream(vehicleId *big.Int, streamId string) (*types.Transaction, error) { - return _Registry.Contract.SetVehicleStream(&_Registry.TransactOpts, vehicleId, streamId) -} - -// SubscribeToVehicleStream is a paid mutator transaction binding the contract method 0x37479f7e. -// -// Solidity: function subscribeToVehicleStream(uint256 vehicleId, uint256 expirationTime) returns() -func (_Registry *RegistryTransactor) SubscribeToVehicleStream(opts *bind.TransactOpts, vehicleId *big.Int, expirationTime *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "subscribeToVehicleStream", vehicleId, expirationTime) -} - -// SubscribeToVehicleStream is a paid mutator transaction binding the contract method 0x37479f7e. -// -// Solidity: function subscribeToVehicleStream(uint256 vehicleId, uint256 expirationTime) returns() -func (_Registry *RegistrySession) SubscribeToVehicleStream(vehicleId *big.Int, expirationTime *big.Int) (*types.Transaction, error) { - return _Registry.Contract.SubscribeToVehicleStream(&_Registry.TransactOpts, vehicleId, expirationTime) -} - -// SubscribeToVehicleStream is a paid mutator transaction binding the contract method 0x37479f7e. -// -// Solidity: function subscribeToVehicleStream(uint256 vehicleId, uint256 expirationTime) returns() -func (_Registry *RegistryTransactorSession) SubscribeToVehicleStream(vehicleId *big.Int, expirationTime *big.Int) (*types.Transaction, error) { - return _Registry.Contract.SubscribeToVehicleStream(&_Registry.TransactOpts, vehicleId, expirationTime) -} - -// TransferAftermarketDeviceOwnership is a paid mutator transaction binding the contract method 0xff96b761. -// -// Solidity: function transferAftermarketDeviceOwnership(uint256 aftermarketDeviceNode, address newOwner) returns() -func (_Registry *RegistryTransactor) TransferAftermarketDeviceOwnership(opts *bind.TransactOpts, aftermarketDeviceNode *big.Int, newOwner common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "transferAftermarketDeviceOwnership", aftermarketDeviceNode, newOwner) -} - -// TransferAftermarketDeviceOwnership is a paid mutator transaction binding the contract method 0xff96b761. -// -// Solidity: function transferAftermarketDeviceOwnership(uint256 aftermarketDeviceNode, address newOwner) returns() -func (_Registry *RegistrySession) TransferAftermarketDeviceOwnership(aftermarketDeviceNode *big.Int, newOwner common.Address) (*types.Transaction, error) { - return _Registry.Contract.TransferAftermarketDeviceOwnership(&_Registry.TransactOpts, aftermarketDeviceNode, newOwner) -} - -// TransferAftermarketDeviceOwnership is a paid mutator transaction binding the contract method 0xff96b761. -// -// Solidity: function transferAftermarketDeviceOwnership(uint256 aftermarketDeviceNode, address newOwner) returns() -func (_Registry *RegistryTransactorSession) TransferAftermarketDeviceOwnership(aftermarketDeviceNode *big.Int, newOwner common.Address) (*types.Transaction, error) { - return _Registry.Contract.TransferAftermarketDeviceOwnership(&_Registry.TransactOpts, aftermarketDeviceNode, newOwner) -} - -// UnclaimAftermarketDeviceNode is a paid mutator transaction binding the contract method 0x5c129493. -// -// Solidity: function unclaimAftermarketDeviceNode(uint256[] aftermarketDeviceNodes) returns() -func (_Registry *RegistryTransactor) UnclaimAftermarketDeviceNode(opts *bind.TransactOpts, aftermarketDeviceNodes []*big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "unclaimAftermarketDeviceNode", aftermarketDeviceNodes) -} - -// UnclaimAftermarketDeviceNode is a paid mutator transaction binding the contract method 0x5c129493. -// -// Solidity: function unclaimAftermarketDeviceNode(uint256[] aftermarketDeviceNodes) returns() -func (_Registry *RegistrySession) UnclaimAftermarketDeviceNode(aftermarketDeviceNodes []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.UnclaimAftermarketDeviceNode(&_Registry.TransactOpts, aftermarketDeviceNodes) -} - -// UnclaimAftermarketDeviceNode is a paid mutator transaction binding the contract method 0x5c129493. -// -// Solidity: function unclaimAftermarketDeviceNode(uint256[] aftermarketDeviceNodes) returns() -func (_Registry *RegistryTransactorSession) UnclaimAftermarketDeviceNode(aftermarketDeviceNodes []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.UnclaimAftermarketDeviceNode(&_Registry.TransactOpts, aftermarketDeviceNodes) -} - -// UnpairAftermarketDevice is a paid mutator transaction binding the contract method 0xee4d9596. -// -// Solidity: function unpairAftermarketDevice(uint256 aftermarketDeviceNode, uint256 vehicleNode) returns() -func (_Registry *RegistryTransactor) UnpairAftermarketDevice(opts *bind.TransactOpts, aftermarketDeviceNode *big.Int, vehicleNode *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "unpairAftermarketDevice", aftermarketDeviceNode, vehicleNode) -} - -// UnpairAftermarketDevice is a paid mutator transaction binding the contract method 0xee4d9596. -// -// Solidity: function unpairAftermarketDevice(uint256 aftermarketDeviceNode, uint256 vehicleNode) returns() -func (_Registry *RegistrySession) UnpairAftermarketDevice(aftermarketDeviceNode *big.Int, vehicleNode *big.Int) (*types.Transaction, error) { - return _Registry.Contract.UnpairAftermarketDevice(&_Registry.TransactOpts, aftermarketDeviceNode, vehicleNode) -} - -// UnpairAftermarketDevice is a paid mutator transaction binding the contract method 0xee4d9596. -// -// Solidity: function unpairAftermarketDevice(uint256 aftermarketDeviceNode, uint256 vehicleNode) returns() -func (_Registry *RegistryTransactorSession) UnpairAftermarketDevice(aftermarketDeviceNode *big.Int, vehicleNode *big.Int) (*types.Transaction, error) { - return _Registry.Contract.UnpairAftermarketDevice(&_Registry.TransactOpts, aftermarketDeviceNode, vehicleNode) -} - -// UnpairAftermarketDeviceByDeviceNode is a paid mutator transaction binding the contract method 0x71193956. -// -// Solidity: function unpairAftermarketDeviceByDeviceNode(uint256[] aftermarketDeviceNodes) returns() -func (_Registry *RegistryTransactor) UnpairAftermarketDeviceByDeviceNode(opts *bind.TransactOpts, aftermarketDeviceNodes []*big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "unpairAftermarketDeviceByDeviceNode", aftermarketDeviceNodes) -} - -// UnpairAftermarketDeviceByDeviceNode is a paid mutator transaction binding the contract method 0x71193956. -// -// Solidity: function unpairAftermarketDeviceByDeviceNode(uint256[] aftermarketDeviceNodes) returns() -func (_Registry *RegistrySession) UnpairAftermarketDeviceByDeviceNode(aftermarketDeviceNodes []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.UnpairAftermarketDeviceByDeviceNode(&_Registry.TransactOpts, aftermarketDeviceNodes) -} - -// UnpairAftermarketDeviceByDeviceNode is a paid mutator transaction binding the contract method 0x71193956. -// -// Solidity: function unpairAftermarketDeviceByDeviceNode(uint256[] aftermarketDeviceNodes) returns() -func (_Registry *RegistryTransactorSession) UnpairAftermarketDeviceByDeviceNode(aftermarketDeviceNodes []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.UnpairAftermarketDeviceByDeviceNode(&_Registry.TransactOpts, aftermarketDeviceNodes) -} - -// UnpairAftermarketDeviceByVehicleNode is a paid mutator transaction binding the contract method 0x8c2ee9bb. -// -// Solidity: function unpairAftermarketDeviceByVehicleNode(uint256[] vehicleNodes) returns() -func (_Registry *RegistryTransactor) UnpairAftermarketDeviceByVehicleNode(opts *bind.TransactOpts, vehicleNodes []*big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "unpairAftermarketDeviceByVehicleNode", vehicleNodes) -} - -// UnpairAftermarketDeviceByVehicleNode is a paid mutator transaction binding the contract method 0x8c2ee9bb. -// -// Solidity: function unpairAftermarketDeviceByVehicleNode(uint256[] vehicleNodes) returns() -func (_Registry *RegistrySession) UnpairAftermarketDeviceByVehicleNode(vehicleNodes []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.UnpairAftermarketDeviceByVehicleNode(&_Registry.TransactOpts, vehicleNodes) -} - -// UnpairAftermarketDeviceByVehicleNode is a paid mutator transaction binding the contract method 0x8c2ee9bb. -// -// Solidity: function unpairAftermarketDeviceByVehicleNode(uint256[] vehicleNodes) returns() -func (_Registry *RegistryTransactorSession) UnpairAftermarketDeviceByVehicleNode(vehicleNodes []*big.Int) (*types.Transaction, error) { - return _Registry.Contract.UnpairAftermarketDeviceByVehicleNode(&_Registry.TransactOpts, vehicleNodes) -} - -// UnpairAftermarketDeviceSign is a paid mutator transaction binding the contract method 0x3f65997a. -// -// Solidity: function unpairAftermarketDeviceSign(uint256 aftermarketDeviceNode, uint256 vehicleNode, bytes signature) returns() -func (_Registry *RegistryTransactor) UnpairAftermarketDeviceSign(opts *bind.TransactOpts, aftermarketDeviceNode *big.Int, vehicleNode *big.Int, signature []byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "unpairAftermarketDeviceSign", aftermarketDeviceNode, vehicleNode, signature) -} - -// UnpairAftermarketDeviceSign is a paid mutator transaction binding the contract method 0x3f65997a. -// -// Solidity: function unpairAftermarketDeviceSign(uint256 aftermarketDeviceNode, uint256 vehicleNode, bytes signature) returns() -func (_Registry *RegistrySession) UnpairAftermarketDeviceSign(aftermarketDeviceNode *big.Int, vehicleNode *big.Int, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.UnpairAftermarketDeviceSign(&_Registry.TransactOpts, aftermarketDeviceNode, vehicleNode, signature) -} - -// UnpairAftermarketDeviceSign is a paid mutator transaction binding the contract method 0x3f65997a. -// -// Solidity: function unpairAftermarketDeviceSign(uint256 aftermarketDeviceNode, uint256 vehicleNode, bytes signature) returns() -func (_Registry *RegistryTransactorSession) UnpairAftermarketDeviceSign(aftermarketDeviceNode *big.Int, vehicleNode *big.Int, signature []byte) (*types.Transaction, error) { - return _Registry.Contract.UnpairAftermarketDeviceSign(&_Registry.TransactOpts, aftermarketDeviceNode, vehicleNode, signature) -} - -// UnsetVehicleStream is a paid mutator transaction binding the contract method 0xcd90df7e. -// -// Solidity: function unsetVehicleStream(uint256 vehicleId) returns() -func (_Registry *RegistryTransactor) UnsetVehicleStream(opts *bind.TransactOpts, vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "unsetVehicleStream", vehicleId) -} - -// UnsetVehicleStream is a paid mutator transaction binding the contract method 0xcd90df7e. -// -// Solidity: function unsetVehicleStream(uint256 vehicleId) returns() -func (_Registry *RegistrySession) UnsetVehicleStream(vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.UnsetVehicleStream(&_Registry.TransactOpts, vehicleId) -} - -// UnsetVehicleStream is a paid mutator transaction binding the contract method 0xcd90df7e. -// -// Solidity: function unsetVehicleStream(uint256 vehicleId) returns() -func (_Registry *RegistryTransactorSession) UnsetVehicleStream(vehicleId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.UnsetVehicleStream(&_Registry.TransactOpts, vehicleId) -} - -// UpdateDeviceDefinition is a paid mutator transaction binding the contract method 0x182fef60. -// -// Solidity: function updateDeviceDefinition(uint256 manufacturerId, (string,string,string,string,string) data) returns() -func (_Registry *RegistryTransactor) UpdateDeviceDefinition(opts *bind.TransactOpts, manufacturerId *big.Int, data DeviceDefinitionUpdateInput) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "updateDeviceDefinition", manufacturerId, data) -} - -// UpdateDeviceDefinition is a paid mutator transaction binding the contract method 0x182fef60. -// -// Solidity: function updateDeviceDefinition(uint256 manufacturerId, (string,string,string,string,string) data) returns() -func (_Registry *RegistrySession) UpdateDeviceDefinition(manufacturerId *big.Int, data DeviceDefinitionUpdateInput) (*types.Transaction, error) { - return _Registry.Contract.UpdateDeviceDefinition(&_Registry.TransactOpts, manufacturerId, data) -} - -// UpdateDeviceDefinition is a paid mutator transaction binding the contract method 0x182fef60. -// -// Solidity: function updateDeviceDefinition(uint256 manufacturerId, (string,string,string,string,string) data) returns() -func (_Registry *RegistryTransactorSession) UpdateDeviceDefinition(manufacturerId *big.Int, data DeviceDefinitionUpdateInput) (*types.Transaction, error) { - return _Registry.Contract.UpdateDeviceDefinition(&_Registry.TransactOpts, manufacturerId, data) -} - -// UpdateIntegrationMinted is a paid mutator transaction binding the contract method 0x440707b5. -// -// Solidity: function updateIntegrationMinted(address from, address to) returns() -func (_Registry *RegistryTransactor) UpdateIntegrationMinted(opts *bind.TransactOpts, from common.Address, to common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "updateIntegrationMinted", from, to) -} - -// UpdateIntegrationMinted is a paid mutator transaction binding the contract method 0x440707b5. -// -// Solidity: function updateIntegrationMinted(address from, address to) returns() -func (_Registry *RegistrySession) UpdateIntegrationMinted(from common.Address, to common.Address) (*types.Transaction, error) { - return _Registry.Contract.UpdateIntegrationMinted(&_Registry.TransactOpts, from, to) -} - -// UpdateIntegrationMinted is a paid mutator transaction binding the contract method 0x440707b5. -// -// Solidity: function updateIntegrationMinted(address from, address to) returns() -func (_Registry *RegistryTransactorSession) UpdateIntegrationMinted(from common.Address, to common.Address) (*types.Transaction, error) { - return _Registry.Contract.UpdateIntegrationMinted(&_Registry.TransactOpts, from, to) -} - -// UpdateManufacturerMinted is a paid mutator transaction binding the contract method 0x20d60248. -// -// Solidity: function updateManufacturerMinted(address from, address to) returns() -func (_Registry *RegistryTransactor) UpdateManufacturerMinted(opts *bind.TransactOpts, from common.Address, to common.Address) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "updateManufacturerMinted", from, to) -} - -// UpdateManufacturerMinted is a paid mutator transaction binding the contract method 0x20d60248. -// -// Solidity: function updateManufacturerMinted(address from, address to) returns() -func (_Registry *RegistrySession) UpdateManufacturerMinted(from common.Address, to common.Address) (*types.Transaction, error) { - return _Registry.Contract.UpdateManufacturerMinted(&_Registry.TransactOpts, from, to) -} - -// UpdateManufacturerMinted is a paid mutator transaction binding the contract method 0x20d60248. -// -// Solidity: function updateManufacturerMinted(address from, address to) returns() -func (_Registry *RegistryTransactorSession) UpdateManufacturerMinted(from common.Address, to common.Address) (*types.Transaction, error) { - return _Registry.Contract.UpdateManufacturerMinted(&_Registry.TransactOpts, from, to) -} - -// UpdateModule is a paid mutator transaction binding the contract method 0x06d1d2a1. -// -// Solidity: function updateModule(address oldImplementation, address newImplementation, bytes4[] oldSelectors, bytes4[] newSelectors) returns() -func (_Registry *RegistryTransactor) UpdateModule(opts *bind.TransactOpts, oldImplementation common.Address, newImplementation common.Address, oldSelectors [][4]byte, newSelectors [][4]byte) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "updateModule", oldImplementation, newImplementation, oldSelectors, newSelectors) -} - -// UpdateModule is a paid mutator transaction binding the contract method 0x06d1d2a1. -// -// Solidity: function updateModule(address oldImplementation, address newImplementation, bytes4[] oldSelectors, bytes4[] newSelectors) returns() -func (_Registry *RegistrySession) UpdateModule(oldImplementation common.Address, newImplementation common.Address, oldSelectors [][4]byte, newSelectors [][4]byte) (*types.Transaction, error) { - return _Registry.Contract.UpdateModule(&_Registry.TransactOpts, oldImplementation, newImplementation, oldSelectors, newSelectors) -} - -// UpdateModule is a paid mutator transaction binding the contract method 0x06d1d2a1. -// -// Solidity: function updateModule(address oldImplementation, address newImplementation, bytes4[] oldSelectors, bytes4[] newSelectors) returns() -func (_Registry *RegistryTransactorSession) UpdateModule(oldImplementation common.Address, newImplementation common.Address, oldSelectors [][4]byte, newSelectors [][4]byte) (*types.Transaction, error) { - return _Registry.Contract.UpdateModule(&_Registry.TransactOpts, oldImplementation, newImplementation, oldSelectors, newSelectors) -} - -// ValidateBurnAndResetNode is a paid mutator transaction binding the contract method 0xea0e7d3a. -// -// Solidity: function validateBurnAndResetNode(uint256 tokenId) returns() -func (_Registry *RegistryTransactor) ValidateBurnAndResetNode(opts *bind.TransactOpts, tokenId *big.Int) (*types.Transaction, error) { - return _Registry.contract.Transact(opts, "validateBurnAndResetNode", tokenId) -} - -// ValidateBurnAndResetNode is a paid mutator transaction binding the contract method 0xea0e7d3a. -// -// Solidity: function validateBurnAndResetNode(uint256 tokenId) returns() -func (_Registry *RegistrySession) ValidateBurnAndResetNode(tokenId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.ValidateBurnAndResetNode(&_Registry.TransactOpts, tokenId) -} - -// ValidateBurnAndResetNode is a paid mutator transaction binding the contract method 0xea0e7d3a. -// -// Solidity: function validateBurnAndResetNode(uint256 tokenId) returns() -func (_Registry *RegistryTransactorSession) ValidateBurnAndResetNode(tokenId *big.Int) (*types.Transaction, error) { - return _Registry.Contract.ValidateBurnAndResetNode(&_Registry.TransactOpts, tokenId) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() returns() -func (_Registry *RegistryTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { - return _Registry.contract.RawTransact(opts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() returns() -func (_Registry *RegistrySession) Fallback(calldata []byte) (*types.Transaction, error) { - return _Registry.Contract.Fallback(&_Registry.TransactOpts, calldata) -} - -// Fallback is a paid mutator transaction binding the contract fallback function. -// -// Solidity: fallback() returns() -func (_Registry *RegistryTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { - return _Registry.Contract.Fallback(&_Registry.TransactOpts, calldata) -} - -// RegistryAftermarketDeviceAddressResetIterator is returned from FilterAftermarketDeviceAddressReset and is used to iterate over the raw logs and unpacked data for AftermarketDeviceAddressReset events raised by the Registry contract. -type RegistryAftermarketDeviceAddressResetIterator struct { - Event *RegistryAftermarketDeviceAddressReset // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceAddressResetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceAddressReset) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceAddressReset) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceAddressResetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceAddressResetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceAddressReset represents a AftermarketDeviceAddressReset event raised by the Registry contract. -type RegistryAftermarketDeviceAddressReset struct { - ManufacturerId *big.Int - TokenId *big.Int - AftermarketDeviceAddress common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceAddressReset is a free log retrieval operation binding the contract event 0x4993b53bba9fe570bd465464126bb5be93bd1504db0060ed2b7cd89f5a32b6be. -// -// Solidity: event AftermarketDeviceAddressReset(uint256 indexed manufacturerId, uint256 indexed tokenId, address indexed aftermarketDeviceAddress) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceAddressReset(opts *bind.FilterOpts, manufacturerId []*big.Int, tokenId []*big.Int, aftermarketDeviceAddress []common.Address) (*RegistryAftermarketDeviceAddressResetIterator, error) { - - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - var aftermarketDeviceAddressRule []interface{} - for _, aftermarketDeviceAddressItem := range aftermarketDeviceAddress { - aftermarketDeviceAddressRule = append(aftermarketDeviceAddressRule, aftermarketDeviceAddressItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceAddressReset", manufacturerIdRule, tokenIdRule, aftermarketDeviceAddressRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceAddressResetIterator{contract: _Registry.contract, event: "AftermarketDeviceAddressReset", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceAddressReset is a free log subscription operation binding the contract event 0x4993b53bba9fe570bd465464126bb5be93bd1504db0060ed2b7cd89f5a32b6be. -// -// Solidity: event AftermarketDeviceAddressReset(uint256 indexed manufacturerId, uint256 indexed tokenId, address indexed aftermarketDeviceAddress) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceAddressReset(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceAddressReset, manufacturerId []*big.Int, tokenId []*big.Int, aftermarketDeviceAddress []common.Address) (event.Subscription, error) { - - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - var aftermarketDeviceAddressRule []interface{} - for _, aftermarketDeviceAddressItem := range aftermarketDeviceAddress { - aftermarketDeviceAddressRule = append(aftermarketDeviceAddressRule, aftermarketDeviceAddressItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceAddressReset", manufacturerIdRule, tokenIdRule, aftermarketDeviceAddressRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceAddressReset) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceAddressReset", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceAddressReset is a log parse operation binding the contract event 0x4993b53bba9fe570bd465464126bb5be93bd1504db0060ed2b7cd89f5a32b6be. -// -// Solidity: event AftermarketDeviceAddressReset(uint256 indexed manufacturerId, uint256 indexed tokenId, address indexed aftermarketDeviceAddress) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceAddressReset(log types.Log) (*RegistryAftermarketDeviceAddressReset, error) { - event := new(RegistryAftermarketDeviceAddressReset) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceAddressReset", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceAttributeAddedIterator is returned from FilterAftermarketDeviceAttributeAdded and is used to iterate over the raw logs and unpacked data for AftermarketDeviceAttributeAdded events raised by the Registry contract. -type RegistryAftermarketDeviceAttributeAddedIterator struct { - Event *RegistryAftermarketDeviceAttributeAdded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceAttributeAddedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceAttributeAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceAttributeAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceAttributeAddedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceAttributeAddedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceAttributeAdded represents a AftermarketDeviceAttributeAdded event raised by the Registry contract. -type RegistryAftermarketDeviceAttributeAdded struct { - Attribute string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceAttributeAdded is a free log retrieval operation binding the contract event 0x3ef2473cbfb66e153539befafe6ba95e95c6cc0659ebc0d7e8a56f014de7eb5f. -// -// Solidity: event AftermarketDeviceAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceAttributeAdded(opts *bind.FilterOpts) (*RegistryAftermarketDeviceAttributeAddedIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceAttributeAdded") - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceAttributeAddedIterator{contract: _Registry.contract, event: "AftermarketDeviceAttributeAdded", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceAttributeAdded is a free log subscription operation binding the contract event 0x3ef2473cbfb66e153539befafe6ba95e95c6cc0659ebc0d7e8a56f014de7eb5f. -// -// Solidity: event AftermarketDeviceAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceAttributeAdded(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceAttributeAdded) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceAttributeAdded") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceAttributeAdded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceAttributeAdded is a log parse operation binding the contract event 0x3ef2473cbfb66e153539befafe6ba95e95c6cc0659ebc0d7e8a56f014de7eb5f. -// -// Solidity: event AftermarketDeviceAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceAttributeAdded(log types.Log) (*RegistryAftermarketDeviceAttributeAdded, error) { - event := new(RegistryAftermarketDeviceAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceAttributeAdded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceAttributeSetIterator is returned from FilterAftermarketDeviceAttributeSet and is used to iterate over the raw logs and unpacked data for AftermarketDeviceAttributeSet events raised by the Registry contract. -type RegistryAftermarketDeviceAttributeSetIterator struct { - Event *RegistryAftermarketDeviceAttributeSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceAttributeSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceAttributeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceAttributeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceAttributeSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceAttributeSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceAttributeSet represents a AftermarketDeviceAttributeSet event raised by the Registry contract. -type RegistryAftermarketDeviceAttributeSet struct { - TokenId *big.Int - Attribute string - Info string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceAttributeSet is a free log retrieval operation binding the contract event 0x977fe0ddf8485988af0b93d70bf5977b48236e9969cdb9b1f55977fbab7cd417. -// -// Solidity: event AftermarketDeviceAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceAttributeSet(opts *bind.FilterOpts) (*RegistryAftermarketDeviceAttributeSetIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceAttributeSet") - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceAttributeSetIterator{contract: _Registry.contract, event: "AftermarketDeviceAttributeSet", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceAttributeSet is a free log subscription operation binding the contract event 0x977fe0ddf8485988af0b93d70bf5977b48236e9969cdb9b1f55977fbab7cd417. -// -// Solidity: event AftermarketDeviceAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceAttributeSet(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceAttributeSet) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceAttributeSet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceAttributeSet) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceAttributeSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceAttributeSet is a log parse operation binding the contract event 0x977fe0ddf8485988af0b93d70bf5977b48236e9969cdb9b1f55977fbab7cd417. -// -// Solidity: event AftermarketDeviceAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceAttributeSet(log types.Log) (*RegistryAftermarketDeviceAttributeSet, error) { - event := new(RegistryAftermarketDeviceAttributeSet) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceAttributeSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceAttributeSetDevAdminIterator is returned from FilterAftermarketDeviceAttributeSetDevAdmin and is used to iterate over the raw logs and unpacked data for AftermarketDeviceAttributeSetDevAdmin events raised by the Registry contract. -type RegistryAftermarketDeviceAttributeSetDevAdminIterator struct { - Event *RegistryAftermarketDeviceAttributeSetDevAdmin // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceAttributeSetDevAdminIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceAttributeSetDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceAttributeSetDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceAttributeSetDevAdminIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceAttributeSetDevAdminIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceAttributeSetDevAdmin represents a AftermarketDeviceAttributeSetDevAdmin event raised by the Registry contract. -type RegistryAftermarketDeviceAttributeSetDevAdmin struct { - TokenId *big.Int - Attribute string - Info string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceAttributeSetDevAdmin is a free log retrieval operation binding the contract event 0x000d5c453b5e43761f8a52bf98395d56422aaaebab0f8bcf44ac3c1627276b45. -// -// Solidity: event AftermarketDeviceAttributeSetDevAdmin(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceAttributeSetDevAdmin(opts *bind.FilterOpts, tokenId []*big.Int) (*RegistryAftermarketDeviceAttributeSetDevAdminIterator, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceAttributeSetDevAdmin", tokenIdRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceAttributeSetDevAdminIterator{contract: _Registry.contract, event: "AftermarketDeviceAttributeSetDevAdmin", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceAttributeSetDevAdmin is a free log subscription operation binding the contract event 0x000d5c453b5e43761f8a52bf98395d56422aaaebab0f8bcf44ac3c1627276b45. -// -// Solidity: event AftermarketDeviceAttributeSetDevAdmin(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceAttributeSetDevAdmin(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceAttributeSetDevAdmin, tokenId []*big.Int) (event.Subscription, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceAttributeSetDevAdmin", tokenIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceAttributeSetDevAdmin) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceAttributeSetDevAdmin", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceAttributeSetDevAdmin is a log parse operation binding the contract event 0x000d5c453b5e43761f8a52bf98395d56422aaaebab0f8bcf44ac3c1627276b45. -// -// Solidity: event AftermarketDeviceAttributeSetDevAdmin(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceAttributeSetDevAdmin(log types.Log) (*RegistryAftermarketDeviceAttributeSetDevAdmin, error) { - event := new(RegistryAftermarketDeviceAttributeSetDevAdmin) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceAttributeSetDevAdmin", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceClaimedIterator is returned from FilterAftermarketDeviceClaimed and is used to iterate over the raw logs and unpacked data for AftermarketDeviceClaimed events raised by the Registry contract. -type RegistryAftermarketDeviceClaimedIterator struct { - Event *RegistryAftermarketDeviceClaimed // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceClaimedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceClaimed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceClaimed) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceClaimedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceClaimedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceClaimed represents a AftermarketDeviceClaimed event raised by the Registry contract. -type RegistryAftermarketDeviceClaimed struct { - AftermarketDeviceNode *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceClaimed is a free log retrieval operation binding the contract event 0x8468d811e5090d3b1a07e28af524e66c128f624e16b07638f419012c779f76ec. -// -// Solidity: event AftermarketDeviceClaimed(uint256 aftermarketDeviceNode, address indexed owner) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceClaimed(opts *bind.FilterOpts, owner []common.Address) (*RegistryAftermarketDeviceClaimedIterator, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceClaimed", ownerRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceClaimedIterator{contract: _Registry.contract, event: "AftermarketDeviceClaimed", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceClaimed is a free log subscription operation binding the contract event 0x8468d811e5090d3b1a07e28af524e66c128f624e16b07638f419012c779f76ec. -// -// Solidity: event AftermarketDeviceClaimed(uint256 aftermarketDeviceNode, address indexed owner) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceClaimed(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceClaimed, owner []common.Address) (event.Subscription, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceClaimed", ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceClaimed) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceClaimed", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceClaimed is a log parse operation binding the contract event 0x8468d811e5090d3b1a07e28af524e66c128f624e16b07638f419012c779f76ec. -// -// Solidity: event AftermarketDeviceClaimed(uint256 aftermarketDeviceNode, address indexed owner) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceClaimed(log types.Log) (*RegistryAftermarketDeviceClaimed, error) { - event := new(RegistryAftermarketDeviceClaimed) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceClaimed", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceIdProxySetIterator is returned from FilterAftermarketDeviceIdProxySet and is used to iterate over the raw logs and unpacked data for AftermarketDeviceIdProxySet events raised by the Registry contract. -type RegistryAftermarketDeviceIdProxySetIterator struct { - Event *RegistryAftermarketDeviceIdProxySet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceIdProxySetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceIdProxySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceIdProxySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceIdProxySet represents a AftermarketDeviceIdProxySet event raised by the Registry contract. -type RegistryAftermarketDeviceIdProxySet struct { - Proxy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceIdProxySet is a free log retrieval operation binding the contract event 0xe2daa727eb82f2761802221c26f72d54501ca8abd6da081e50fedaaab21f4036. -// -// Solidity: event AftermarketDeviceIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceIdProxySet(opts *bind.FilterOpts, proxy []common.Address) (*RegistryAftermarketDeviceIdProxySetIterator, error) { - - var proxyRule []interface{} - for _, proxyItem := range proxy { - proxyRule = append(proxyRule, proxyItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceIdProxySet", proxyRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceIdProxySetIterator{contract: _Registry.contract, event: "AftermarketDeviceIdProxySet", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceIdProxySet is a free log subscription operation binding the contract event 0xe2daa727eb82f2761802221c26f72d54501ca8abd6da081e50fedaaab21f4036. -// -// Solidity: event AftermarketDeviceIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceIdProxySet(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceIdProxySet, proxy []common.Address) (event.Subscription, error) { - - var proxyRule []interface{} - for _, proxyItem := range proxy { - proxyRule = append(proxyRule, proxyItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceIdProxySet", proxyRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceIdProxySet) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceIdProxySet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceIdProxySet is a log parse operation binding the contract event 0xe2daa727eb82f2761802221c26f72d54501ca8abd6da081e50fedaaab21f4036. -// -// Solidity: event AftermarketDeviceIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceIdProxySet(log types.Log) (*RegistryAftermarketDeviceIdProxySet, error) { - event := new(RegistryAftermarketDeviceIdProxySet) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceIdProxySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceNodeBurnedIterator is returned from FilterAftermarketDeviceNodeBurned and is used to iterate over the raw logs and unpacked data for AftermarketDeviceNodeBurned events raised by the Registry contract. -type RegistryAftermarketDeviceNodeBurnedIterator struct { - Event *RegistryAftermarketDeviceNodeBurned // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceNodeBurnedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceNodeBurned) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceNodeBurned) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceNodeBurnedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceNodeBurnedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceNodeBurned represents a AftermarketDeviceNodeBurned event raised by the Registry contract. -type RegistryAftermarketDeviceNodeBurned struct { - TokenId *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceNodeBurned is a free log retrieval operation binding the contract event 0xc4d38c0a034bc1693db3b9a33125831c3d2e1f11e5b69be183ff9ac991384d95. -// -// Solidity: event AftermarketDeviceNodeBurned(uint256 indexed tokenId, address indexed owner) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceNodeBurned(opts *bind.FilterOpts, tokenId []*big.Int, owner []common.Address) (*RegistryAftermarketDeviceNodeBurnedIterator, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceNodeBurned", tokenIdRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceNodeBurnedIterator{contract: _Registry.contract, event: "AftermarketDeviceNodeBurned", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceNodeBurned is a free log subscription operation binding the contract event 0xc4d38c0a034bc1693db3b9a33125831c3d2e1f11e5b69be183ff9ac991384d95. -// -// Solidity: event AftermarketDeviceNodeBurned(uint256 indexed tokenId, address indexed owner) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceNodeBurned(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceNodeBurned, tokenId []*big.Int, owner []common.Address) (event.Subscription, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceNodeBurned", tokenIdRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceNodeBurned) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceNodeBurned", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceNodeBurned is a log parse operation binding the contract event 0xc4d38c0a034bc1693db3b9a33125831c3d2e1f11e5b69be183ff9ac991384d95. -// -// Solidity: event AftermarketDeviceNodeBurned(uint256 indexed tokenId, address indexed owner) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceNodeBurned(log types.Log) (*RegistryAftermarketDeviceNodeBurned, error) { - event := new(RegistryAftermarketDeviceNodeBurned) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceNodeBurned", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceNodeBurnedDevAdminIterator is returned from FilterAftermarketDeviceNodeBurnedDevAdmin and is used to iterate over the raw logs and unpacked data for AftermarketDeviceNodeBurnedDevAdmin events raised by the Registry contract. -type RegistryAftermarketDeviceNodeBurnedDevAdminIterator struct { - Event *RegistryAftermarketDeviceNodeBurnedDevAdmin // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceNodeBurnedDevAdminIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceNodeBurnedDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceNodeBurnedDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceNodeBurnedDevAdminIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceNodeBurnedDevAdminIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceNodeBurnedDevAdmin represents a AftermarketDeviceNodeBurnedDevAdmin event raised by the Registry contract. -type RegistryAftermarketDeviceNodeBurnedDevAdmin struct { - AdNode *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceNodeBurnedDevAdmin is a free log retrieval operation binding the contract event 0xb33f329db9f4347b4ce64f7b9c2d5fe2d92e95ac9fee76a553543f1338752a45. -// -// Solidity: event AftermarketDeviceNodeBurnedDevAdmin(uint256 indexed adNode, address indexed owner) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceNodeBurnedDevAdmin(opts *bind.FilterOpts, adNode []*big.Int, owner []common.Address) (*RegistryAftermarketDeviceNodeBurnedDevAdminIterator, error) { - - var adNodeRule []interface{} - for _, adNodeItem := range adNode { - adNodeRule = append(adNodeRule, adNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceNodeBurnedDevAdmin", adNodeRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceNodeBurnedDevAdminIterator{contract: _Registry.contract, event: "AftermarketDeviceNodeBurnedDevAdmin", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceNodeBurnedDevAdmin is a free log subscription operation binding the contract event 0xb33f329db9f4347b4ce64f7b9c2d5fe2d92e95ac9fee76a553543f1338752a45. -// -// Solidity: event AftermarketDeviceNodeBurnedDevAdmin(uint256 indexed adNode, address indexed owner) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceNodeBurnedDevAdmin(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceNodeBurnedDevAdmin, adNode []*big.Int, owner []common.Address) (event.Subscription, error) { - - var adNodeRule []interface{} - for _, adNodeItem := range adNode { - adNodeRule = append(adNodeRule, adNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceNodeBurnedDevAdmin", adNodeRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceNodeBurnedDevAdmin) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceNodeBurnedDevAdmin", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceNodeBurnedDevAdmin is a log parse operation binding the contract event 0xb33f329db9f4347b4ce64f7b9c2d5fe2d92e95ac9fee76a553543f1338752a45. -// -// Solidity: event AftermarketDeviceNodeBurnedDevAdmin(uint256 indexed adNode, address indexed owner) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceNodeBurnedDevAdmin(log types.Log) (*RegistryAftermarketDeviceNodeBurnedDevAdmin, error) { - event := new(RegistryAftermarketDeviceNodeBurnedDevAdmin) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceNodeBurnedDevAdmin", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceNodeMintedIterator is returned from FilterAftermarketDeviceNodeMinted and is used to iterate over the raw logs and unpacked data for AftermarketDeviceNodeMinted events raised by the Registry contract. -type RegistryAftermarketDeviceNodeMintedIterator struct { - Event *RegistryAftermarketDeviceNodeMinted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceNodeMintedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceNodeMintedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceNodeMintedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceNodeMinted represents a AftermarketDeviceNodeMinted event raised by the Registry contract. -type RegistryAftermarketDeviceNodeMinted struct { - ManufacturerId *big.Int - TokenId *big.Int - AftermarketDeviceAddress common.Address - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceNodeMinted is a free log retrieval operation binding the contract event 0xd624fd4c3311e1803d230d97ce71fd60c4f658c30a31fbe08edcb211fd90f63f. -// -// Solidity: event AftermarketDeviceNodeMinted(uint256 indexed manufacturerId, uint256 tokenId, address indexed aftermarketDeviceAddress, address indexed owner) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceNodeMinted(opts *bind.FilterOpts, manufacturerId []*big.Int, aftermarketDeviceAddress []common.Address, owner []common.Address) (*RegistryAftermarketDeviceNodeMintedIterator, error) { - - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - - var aftermarketDeviceAddressRule []interface{} - for _, aftermarketDeviceAddressItem := range aftermarketDeviceAddress { - aftermarketDeviceAddressRule = append(aftermarketDeviceAddressRule, aftermarketDeviceAddressItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceNodeMinted", manufacturerIdRule, aftermarketDeviceAddressRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceNodeMintedIterator{contract: _Registry.contract, event: "AftermarketDeviceNodeMinted", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceNodeMinted is a free log subscription operation binding the contract event 0xd624fd4c3311e1803d230d97ce71fd60c4f658c30a31fbe08edcb211fd90f63f. -// -// Solidity: event AftermarketDeviceNodeMinted(uint256 indexed manufacturerId, uint256 tokenId, address indexed aftermarketDeviceAddress, address indexed owner) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceNodeMinted(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceNodeMinted, manufacturerId []*big.Int, aftermarketDeviceAddress []common.Address, owner []common.Address) (event.Subscription, error) { - - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - - var aftermarketDeviceAddressRule []interface{} - for _, aftermarketDeviceAddressItem := range aftermarketDeviceAddress { - aftermarketDeviceAddressRule = append(aftermarketDeviceAddressRule, aftermarketDeviceAddressItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceNodeMinted", manufacturerIdRule, aftermarketDeviceAddressRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceNodeMinted) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceNodeMinted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceNodeMinted is a log parse operation binding the contract event 0xd624fd4c3311e1803d230d97ce71fd60c4f658c30a31fbe08edcb211fd90f63f. -// -// Solidity: event AftermarketDeviceNodeMinted(uint256 indexed manufacturerId, uint256 tokenId, address indexed aftermarketDeviceAddress, address indexed owner) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceNodeMinted(log types.Log) (*RegistryAftermarketDeviceNodeMinted, error) { - event := new(RegistryAftermarketDeviceNodeMinted) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceNodeMinted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDevicePairedIterator is returned from FilterAftermarketDevicePaired and is used to iterate over the raw logs and unpacked data for AftermarketDevicePaired events raised by the Registry contract. -type RegistryAftermarketDevicePairedIterator struct { - Event *RegistryAftermarketDevicePaired // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDevicePairedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDevicePaired) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDevicePaired) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDevicePairedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDevicePairedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDevicePaired represents a AftermarketDevicePaired event raised by the Registry contract. -type RegistryAftermarketDevicePaired struct { - AftermarketDeviceNode *big.Int - VehicleNode *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDevicePaired is a free log retrieval operation binding the contract event 0x89ec132808bbf01af00b90fd34e04fd6cfb8dba2813ca5446a415500b83c7938. -// -// Solidity: event AftermarketDevicePaired(uint256 aftermarketDeviceNode, uint256 vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) FilterAftermarketDevicePaired(opts *bind.FilterOpts, owner []common.Address) (*RegistryAftermarketDevicePairedIterator, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDevicePaired", ownerRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDevicePairedIterator{contract: _Registry.contract, event: "AftermarketDevicePaired", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDevicePaired is a free log subscription operation binding the contract event 0x89ec132808bbf01af00b90fd34e04fd6cfb8dba2813ca5446a415500b83c7938. -// -// Solidity: event AftermarketDevicePaired(uint256 aftermarketDeviceNode, uint256 vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) WatchAftermarketDevicePaired(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDevicePaired, owner []common.Address) (event.Subscription, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDevicePaired", ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDevicePaired) - if err := _Registry.contract.UnpackLog(event, "AftermarketDevicePaired", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDevicePaired is a log parse operation binding the contract event 0x89ec132808bbf01af00b90fd34e04fd6cfb8dba2813ca5446a415500b83c7938. -// -// Solidity: event AftermarketDevicePaired(uint256 aftermarketDeviceNode, uint256 vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) ParseAftermarketDevicePaired(log types.Log) (*RegistryAftermarketDevicePaired, error) { - event := new(RegistryAftermarketDevicePaired) - if err := _Registry.contract.UnpackLog(event, "AftermarketDevicePaired", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceTransferredDevAdminIterator is returned from FilterAftermarketDeviceTransferredDevAdmin and is used to iterate over the raw logs and unpacked data for AftermarketDeviceTransferredDevAdmin events raised by the Registry contract. -type RegistryAftermarketDeviceTransferredDevAdminIterator struct { - Event *RegistryAftermarketDeviceTransferredDevAdmin // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceTransferredDevAdminIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceTransferredDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceTransferredDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceTransferredDevAdminIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceTransferredDevAdminIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceTransferredDevAdmin represents a AftermarketDeviceTransferredDevAdmin event raised by the Registry contract. -type RegistryAftermarketDeviceTransferredDevAdmin struct { - AftermarketDeviceNode *big.Int - OldOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceTransferredDevAdmin is a free log retrieval operation binding the contract event 0xaabf86a9bd61090827f5b0300192acf8de59d19921c52d81661675293105a8d8. -// -// Solidity: event AftermarketDeviceTransferredDevAdmin(uint256 indexed aftermarketDeviceNode, address indexed oldOwner, address indexed newOwner) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceTransferredDevAdmin(opts *bind.FilterOpts, aftermarketDeviceNode []*big.Int, oldOwner []common.Address, newOwner []common.Address) (*RegistryAftermarketDeviceTransferredDevAdminIterator, error) { - - var aftermarketDeviceNodeRule []interface{} - for _, aftermarketDeviceNodeItem := range aftermarketDeviceNode { - aftermarketDeviceNodeRule = append(aftermarketDeviceNodeRule, aftermarketDeviceNodeItem) - } - var oldOwnerRule []interface{} - for _, oldOwnerItem := range oldOwner { - oldOwnerRule = append(oldOwnerRule, oldOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceTransferredDevAdmin", aftermarketDeviceNodeRule, oldOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceTransferredDevAdminIterator{contract: _Registry.contract, event: "AftermarketDeviceTransferredDevAdmin", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceTransferredDevAdmin is a free log subscription operation binding the contract event 0xaabf86a9bd61090827f5b0300192acf8de59d19921c52d81661675293105a8d8. -// -// Solidity: event AftermarketDeviceTransferredDevAdmin(uint256 indexed aftermarketDeviceNode, address indexed oldOwner, address indexed newOwner) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceTransferredDevAdmin(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceTransferredDevAdmin, aftermarketDeviceNode []*big.Int, oldOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var aftermarketDeviceNodeRule []interface{} - for _, aftermarketDeviceNodeItem := range aftermarketDeviceNode { - aftermarketDeviceNodeRule = append(aftermarketDeviceNodeRule, aftermarketDeviceNodeItem) - } - var oldOwnerRule []interface{} - for _, oldOwnerItem := range oldOwner { - oldOwnerRule = append(oldOwnerRule, oldOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceTransferredDevAdmin", aftermarketDeviceNodeRule, oldOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceTransferredDevAdmin) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceTransferredDevAdmin", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceTransferredDevAdmin is a log parse operation binding the contract event 0xaabf86a9bd61090827f5b0300192acf8de59d19921c52d81661675293105a8d8. -// -// Solidity: event AftermarketDeviceTransferredDevAdmin(uint256 indexed aftermarketDeviceNode, address indexed oldOwner, address indexed newOwner) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceTransferredDevAdmin(log types.Log) (*RegistryAftermarketDeviceTransferredDevAdmin, error) { - event := new(RegistryAftermarketDeviceTransferredDevAdmin) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceTransferredDevAdmin", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceUnclaimedDevAdminIterator is returned from FilterAftermarketDeviceUnclaimedDevAdmin and is used to iterate over the raw logs and unpacked data for AftermarketDeviceUnclaimedDevAdmin events raised by the Registry contract. -type RegistryAftermarketDeviceUnclaimedDevAdminIterator struct { - Event *RegistryAftermarketDeviceUnclaimedDevAdmin // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceUnclaimedDevAdminIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceUnclaimedDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceUnclaimedDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceUnclaimedDevAdminIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceUnclaimedDevAdminIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceUnclaimedDevAdmin represents a AftermarketDeviceUnclaimedDevAdmin event raised by the Registry contract. -type RegistryAftermarketDeviceUnclaimedDevAdmin struct { - AftermarketDeviceNode *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceUnclaimedDevAdmin is a free log retrieval operation binding the contract event 0xd2a3fcd44d76e5d8eb77caa34c23f3d95ba16844e0ac03c41fd12c91f799e951. -// -// Solidity: event AftermarketDeviceUnclaimedDevAdmin(uint256 indexed aftermarketDeviceNode) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceUnclaimedDevAdmin(opts *bind.FilterOpts, aftermarketDeviceNode []*big.Int) (*RegistryAftermarketDeviceUnclaimedDevAdminIterator, error) { - - var aftermarketDeviceNodeRule []interface{} - for _, aftermarketDeviceNodeItem := range aftermarketDeviceNode { - aftermarketDeviceNodeRule = append(aftermarketDeviceNodeRule, aftermarketDeviceNodeItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceUnclaimedDevAdmin", aftermarketDeviceNodeRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceUnclaimedDevAdminIterator{contract: _Registry.contract, event: "AftermarketDeviceUnclaimedDevAdmin", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceUnclaimedDevAdmin is a free log subscription operation binding the contract event 0xd2a3fcd44d76e5d8eb77caa34c23f3d95ba16844e0ac03c41fd12c91f799e951. -// -// Solidity: event AftermarketDeviceUnclaimedDevAdmin(uint256 indexed aftermarketDeviceNode) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceUnclaimedDevAdmin(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceUnclaimedDevAdmin, aftermarketDeviceNode []*big.Int) (event.Subscription, error) { - - var aftermarketDeviceNodeRule []interface{} - for _, aftermarketDeviceNodeItem := range aftermarketDeviceNode { - aftermarketDeviceNodeRule = append(aftermarketDeviceNodeRule, aftermarketDeviceNodeItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceUnclaimedDevAdmin", aftermarketDeviceNodeRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceUnclaimedDevAdmin) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceUnclaimedDevAdmin", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceUnclaimedDevAdmin is a log parse operation binding the contract event 0xd2a3fcd44d76e5d8eb77caa34c23f3d95ba16844e0ac03c41fd12c91f799e951. -// -// Solidity: event AftermarketDeviceUnclaimedDevAdmin(uint256 indexed aftermarketDeviceNode) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceUnclaimedDevAdmin(log types.Log) (*RegistryAftermarketDeviceUnclaimedDevAdmin, error) { - event := new(RegistryAftermarketDeviceUnclaimedDevAdmin) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceUnclaimedDevAdmin", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceUnpairedIterator is returned from FilterAftermarketDeviceUnpaired and is used to iterate over the raw logs and unpacked data for AftermarketDeviceUnpaired events raised by the Registry contract. -type RegistryAftermarketDeviceUnpairedIterator struct { - Event *RegistryAftermarketDeviceUnpaired // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceUnpairedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceUnpaired) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceUnpaired) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceUnpairedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceUnpairedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceUnpaired represents a AftermarketDeviceUnpaired event raised by the Registry contract. -type RegistryAftermarketDeviceUnpaired struct { - AftermarketDeviceNode *big.Int - VehicleNode *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceUnpaired is a free log retrieval operation binding the contract event 0xd9135724aa6cdaa5b3ea73e3e0d74cb1a3a6d3cddcb9d58583f05f17bac82a8e. -// -// Solidity: event AftermarketDeviceUnpaired(uint256 aftermarketDeviceNode, uint256 vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceUnpaired(opts *bind.FilterOpts, owner []common.Address) (*RegistryAftermarketDeviceUnpairedIterator, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceUnpaired", ownerRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceUnpairedIterator{contract: _Registry.contract, event: "AftermarketDeviceUnpaired", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceUnpaired is a free log subscription operation binding the contract event 0xd9135724aa6cdaa5b3ea73e3e0d74cb1a3a6d3cddcb9d58583f05f17bac82a8e. -// -// Solidity: event AftermarketDeviceUnpaired(uint256 aftermarketDeviceNode, uint256 vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceUnpaired(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceUnpaired, owner []common.Address) (event.Subscription, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceUnpaired", ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceUnpaired) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceUnpaired", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceUnpaired is a log parse operation binding the contract event 0xd9135724aa6cdaa5b3ea73e3e0d74cb1a3a6d3cddcb9d58583f05f17bac82a8e. -// -// Solidity: event AftermarketDeviceUnpaired(uint256 aftermarketDeviceNode, uint256 vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceUnpaired(log types.Log) (*RegistryAftermarketDeviceUnpaired, error) { - event := new(RegistryAftermarketDeviceUnpaired) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceUnpaired", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryAftermarketDeviceUnpairedDevAdminIterator is returned from FilterAftermarketDeviceUnpairedDevAdmin and is used to iterate over the raw logs and unpacked data for AftermarketDeviceUnpairedDevAdmin events raised by the Registry contract. -type RegistryAftermarketDeviceUnpairedDevAdminIterator struct { - Event *RegistryAftermarketDeviceUnpairedDevAdmin // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryAftermarketDeviceUnpairedDevAdminIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceUnpairedDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryAftermarketDeviceUnpairedDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryAftermarketDeviceUnpairedDevAdminIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryAftermarketDeviceUnpairedDevAdminIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryAftermarketDeviceUnpairedDevAdmin represents a AftermarketDeviceUnpairedDevAdmin event raised by the Registry contract. -type RegistryAftermarketDeviceUnpairedDevAdmin struct { - AftermarketDeviceNode *big.Int - VehicleNode *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterAftermarketDeviceUnpairedDevAdmin is a free log retrieval operation binding the contract event 0x1ba4ec81d8261daefdabcf390fb1434fb92bc9a103e4cdc764ca43fa37d0ab0d. -// -// Solidity: event AftermarketDeviceUnpairedDevAdmin(uint256 indexed aftermarketDeviceNode, uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) FilterAftermarketDeviceUnpairedDevAdmin(opts *bind.FilterOpts, aftermarketDeviceNode []*big.Int, vehicleNode []*big.Int, owner []common.Address) (*RegistryAftermarketDeviceUnpairedDevAdminIterator, error) { - - var aftermarketDeviceNodeRule []interface{} - for _, aftermarketDeviceNodeItem := range aftermarketDeviceNode { - aftermarketDeviceNodeRule = append(aftermarketDeviceNodeRule, aftermarketDeviceNodeItem) - } - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "AftermarketDeviceUnpairedDevAdmin", aftermarketDeviceNodeRule, vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistryAftermarketDeviceUnpairedDevAdminIterator{contract: _Registry.contract, event: "AftermarketDeviceUnpairedDevAdmin", logs: logs, sub: sub}, nil -} - -// WatchAftermarketDeviceUnpairedDevAdmin is a free log subscription operation binding the contract event 0x1ba4ec81d8261daefdabcf390fb1434fb92bc9a103e4cdc764ca43fa37d0ab0d. -// -// Solidity: event AftermarketDeviceUnpairedDevAdmin(uint256 indexed aftermarketDeviceNode, uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) WatchAftermarketDeviceUnpairedDevAdmin(opts *bind.WatchOpts, sink chan<- *RegistryAftermarketDeviceUnpairedDevAdmin, aftermarketDeviceNode []*big.Int, vehicleNode []*big.Int, owner []common.Address) (event.Subscription, error) { - - var aftermarketDeviceNodeRule []interface{} - for _, aftermarketDeviceNodeItem := range aftermarketDeviceNode { - aftermarketDeviceNodeRule = append(aftermarketDeviceNodeRule, aftermarketDeviceNodeItem) - } - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "AftermarketDeviceUnpairedDevAdmin", aftermarketDeviceNodeRule, vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryAftermarketDeviceUnpairedDevAdmin) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceUnpairedDevAdmin", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseAftermarketDeviceUnpairedDevAdmin is a log parse operation binding the contract event 0x1ba4ec81d8261daefdabcf390fb1434fb92bc9a103e4cdc764ca43fa37d0ab0d. -// -// Solidity: event AftermarketDeviceUnpairedDevAdmin(uint256 indexed aftermarketDeviceNode, uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) ParseAftermarketDeviceUnpairedDevAdmin(log types.Log) (*RegistryAftermarketDeviceUnpairedDevAdmin, error) { - event := new(RegistryAftermarketDeviceUnpairedDevAdmin) - if err := _Registry.contract.UnpackLog(event, "AftermarketDeviceUnpairedDevAdmin", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryBaseDataURISetIterator is returned from FilterBaseDataURISet and is used to iterate over the raw logs and unpacked data for BaseDataURISet events raised by the Registry contract. -type RegistryBaseDataURISetIterator struct { - Event *RegistryBaseDataURISet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryBaseDataURISetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryBaseDataURISet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryBaseDataURISet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryBaseDataURISetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryBaseDataURISetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryBaseDataURISet represents a BaseDataURISet event raised by the Registry contract. -type RegistryBaseDataURISet struct { - IdProxyAddress common.Address - DataUri string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBaseDataURISet is a free log retrieval operation binding the contract event 0x9f53d8a6c486c216c3b3fd5d6d4a133c4d66db260694bc0cfe0696d99458851f. -// -// Solidity: event BaseDataURISet(address idProxyAddress, string dataUri) -func (_Registry *RegistryFilterer) FilterBaseDataURISet(opts *bind.FilterOpts) (*RegistryBaseDataURISetIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "BaseDataURISet") - if err != nil { - return nil, err - } - return &RegistryBaseDataURISetIterator{contract: _Registry.contract, event: "BaseDataURISet", logs: logs, sub: sub}, nil -} - -// WatchBaseDataURISet is a free log subscription operation binding the contract event 0x9f53d8a6c486c216c3b3fd5d6d4a133c4d66db260694bc0cfe0696d99458851f. -// -// Solidity: event BaseDataURISet(address idProxyAddress, string dataUri) -func (_Registry *RegistryFilterer) WatchBaseDataURISet(opts *bind.WatchOpts, sink chan<- *RegistryBaseDataURISet) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "BaseDataURISet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryBaseDataURISet) - if err := _Registry.contract.UnpackLog(event, "BaseDataURISet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBaseDataURISet is a log parse operation binding the contract event 0x9f53d8a6c486c216c3b3fd5d6d4a133c4d66db260694bc0cfe0696d99458851f. -// -// Solidity: event BaseDataURISet(address idProxyAddress, string dataUri) -func (_Registry *RegistryFilterer) ParseBaseDataURISet(log types.Log) (*RegistryBaseDataURISet, error) { - event := new(RegistryBaseDataURISet) - if err := _Registry.contract.UnpackLog(event, "BaseDataURISet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryBeneficiarySetIterator is returned from FilterBeneficiarySet and is used to iterate over the raw logs and unpacked data for BeneficiarySet events raised by the Registry contract. -type RegistryBeneficiarySetIterator struct { - Event *RegistryBeneficiarySet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryBeneficiarySetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryBeneficiarySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryBeneficiarySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryBeneficiarySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryBeneficiarySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryBeneficiarySet represents a BeneficiarySet event raised by the Registry contract. -type RegistryBeneficiarySet struct { - IdProxyAddress common.Address - NodeId *big.Int - Beneficiary common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterBeneficiarySet is a free log retrieval operation binding the contract event 0xf6f6de47a057b68d993d1ca4c1b8a95e51b10d7efbf516bc3c591eb6c4f209ee. -// -// Solidity: event BeneficiarySet(address indexed idProxyAddress, uint256 indexed nodeId, address indexed beneficiary) -func (_Registry *RegistryFilterer) FilterBeneficiarySet(opts *bind.FilterOpts, idProxyAddress []common.Address, nodeId []*big.Int, beneficiary []common.Address) (*RegistryBeneficiarySetIterator, error) { - - var idProxyAddressRule []interface{} - for _, idProxyAddressItem := range idProxyAddress { - idProxyAddressRule = append(idProxyAddressRule, idProxyAddressItem) - } - var nodeIdRule []interface{} - for _, nodeIdItem := range nodeId { - nodeIdRule = append(nodeIdRule, nodeIdItem) - } - var beneficiaryRule []interface{} - for _, beneficiaryItem := range beneficiary { - beneficiaryRule = append(beneficiaryRule, beneficiaryItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "BeneficiarySet", idProxyAddressRule, nodeIdRule, beneficiaryRule) - if err != nil { - return nil, err - } - return &RegistryBeneficiarySetIterator{contract: _Registry.contract, event: "BeneficiarySet", logs: logs, sub: sub}, nil -} - -// WatchBeneficiarySet is a free log subscription operation binding the contract event 0xf6f6de47a057b68d993d1ca4c1b8a95e51b10d7efbf516bc3c591eb6c4f209ee. -// -// Solidity: event BeneficiarySet(address indexed idProxyAddress, uint256 indexed nodeId, address indexed beneficiary) -func (_Registry *RegistryFilterer) WatchBeneficiarySet(opts *bind.WatchOpts, sink chan<- *RegistryBeneficiarySet, idProxyAddress []common.Address, nodeId []*big.Int, beneficiary []common.Address) (event.Subscription, error) { - - var idProxyAddressRule []interface{} - for _, idProxyAddressItem := range idProxyAddress { - idProxyAddressRule = append(idProxyAddressRule, idProxyAddressItem) - } - var nodeIdRule []interface{} - for _, nodeIdItem := range nodeId { - nodeIdRule = append(nodeIdRule, nodeIdItem) - } - var beneficiaryRule []interface{} - for _, beneficiaryItem := range beneficiary { - beneficiaryRule = append(beneficiaryRule, beneficiaryItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "BeneficiarySet", idProxyAddressRule, nodeIdRule, beneficiaryRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryBeneficiarySet) - if err := _Registry.contract.UnpackLog(event, "BeneficiarySet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseBeneficiarySet is a log parse operation binding the contract event 0xf6f6de47a057b68d993d1ca4c1b8a95e51b10d7efbf516bc3c591eb6c4f209ee. -// -// Solidity: event BeneficiarySet(address indexed idProxyAddress, uint256 indexed nodeId, address indexed beneficiary) -func (_Registry *RegistryFilterer) ParseBeneficiarySet(log types.Log) (*RegistryBeneficiarySet, error) { - event := new(RegistryBeneficiarySet) - if err := _Registry.contract.UnpackLog(event, "BeneficiarySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryControllerSetIterator is returned from FilterControllerSet and is used to iterate over the raw logs and unpacked data for ControllerSet events raised by the Registry contract. -type RegistryControllerSetIterator struct { - Event *RegistryControllerSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryControllerSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryControllerSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryControllerSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryControllerSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryControllerSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryControllerSet represents a ControllerSet event raised by the Registry contract. -type RegistryControllerSet struct { - Controller common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterControllerSet is a free log retrieval operation binding the contract event 0x79f74fd5964b6943d8a1865abfb7f668c92fa3f32c0a2e3195da7d0946703ad7. -// -// Solidity: event ControllerSet(address indexed controller) -func (_Registry *RegistryFilterer) FilterControllerSet(opts *bind.FilterOpts, controller []common.Address) (*RegistryControllerSetIterator, error) { - - var controllerRule []interface{} - for _, controllerItem := range controller { - controllerRule = append(controllerRule, controllerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "ControllerSet", controllerRule) - if err != nil { - return nil, err - } - return &RegistryControllerSetIterator{contract: _Registry.contract, event: "ControllerSet", logs: logs, sub: sub}, nil -} - -// WatchControllerSet is a free log subscription operation binding the contract event 0x79f74fd5964b6943d8a1865abfb7f668c92fa3f32c0a2e3195da7d0946703ad7. -// -// Solidity: event ControllerSet(address indexed controller) -func (_Registry *RegistryFilterer) WatchControllerSet(opts *bind.WatchOpts, sink chan<- *RegistryControllerSet, controller []common.Address) (event.Subscription, error) { - - var controllerRule []interface{} - for _, controllerItem := range controller { - controllerRule = append(controllerRule, controllerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "ControllerSet", controllerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryControllerSet) - if err := _Registry.contract.UnpackLog(event, "ControllerSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseControllerSet is a log parse operation binding the contract event 0x79f74fd5964b6943d8a1865abfb7f668c92fa3f32c0a2e3195da7d0946703ad7. -// -// Solidity: event ControllerSet(address indexed controller) -func (_Registry *RegistryFilterer) ParseControllerSet(log types.Log) (*RegistryControllerSet, error) { - event := new(RegistryControllerSet) - if err := _Registry.contract.UnpackLog(event, "ControllerSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryDeviceDefinitionDeletedIterator is returned from FilterDeviceDefinitionDeleted and is used to iterate over the raw logs and unpacked data for DeviceDefinitionDeleted events raised by the Registry contract. -type RegistryDeviceDefinitionDeletedIterator struct { - Event *RegistryDeviceDefinitionDeleted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryDeviceDefinitionDeletedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryDeviceDefinitionDeleted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryDeviceDefinitionDeleted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryDeviceDefinitionDeletedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryDeviceDefinitionDeletedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryDeviceDefinitionDeleted represents a DeviceDefinitionDeleted event raised by the Registry contract. -type RegistryDeviceDefinitionDeleted struct { - TableId *big.Int - Id string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDeviceDefinitionDeleted is a free log retrieval operation binding the contract event 0x29504454a41793fb917c032e7baa04f0e74dd570dafc91d64cecff606f3411ca. -// -// Solidity: event DeviceDefinitionDeleted(uint256 indexed tableId, string id) -func (_Registry *RegistryFilterer) FilterDeviceDefinitionDeleted(opts *bind.FilterOpts, tableId []*big.Int) (*RegistryDeviceDefinitionDeletedIterator, error) { - - var tableIdRule []interface{} - for _, tableIdItem := range tableId { - tableIdRule = append(tableIdRule, tableIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "DeviceDefinitionDeleted", tableIdRule) - if err != nil { - return nil, err - } - return &RegistryDeviceDefinitionDeletedIterator{contract: _Registry.contract, event: "DeviceDefinitionDeleted", logs: logs, sub: sub}, nil -} - -// WatchDeviceDefinitionDeleted is a free log subscription operation binding the contract event 0x29504454a41793fb917c032e7baa04f0e74dd570dafc91d64cecff606f3411ca. -// -// Solidity: event DeviceDefinitionDeleted(uint256 indexed tableId, string id) -func (_Registry *RegistryFilterer) WatchDeviceDefinitionDeleted(opts *bind.WatchOpts, sink chan<- *RegistryDeviceDefinitionDeleted, tableId []*big.Int) (event.Subscription, error) { - - var tableIdRule []interface{} - for _, tableIdItem := range tableId { - tableIdRule = append(tableIdRule, tableIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "DeviceDefinitionDeleted", tableIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryDeviceDefinitionDeleted) - if err := _Registry.contract.UnpackLog(event, "DeviceDefinitionDeleted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDeviceDefinitionDeleted is a log parse operation binding the contract event 0x29504454a41793fb917c032e7baa04f0e74dd570dafc91d64cecff606f3411ca. -// -// Solidity: event DeviceDefinitionDeleted(uint256 indexed tableId, string id) -func (_Registry *RegistryFilterer) ParseDeviceDefinitionDeleted(log types.Log) (*RegistryDeviceDefinitionDeleted, error) { - event := new(RegistryDeviceDefinitionDeleted) - if err := _Registry.contract.UnpackLog(event, "DeviceDefinitionDeleted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryDeviceDefinitionIdSetIterator is returned from FilterDeviceDefinitionIdSet and is used to iterate over the raw logs and unpacked data for DeviceDefinitionIdSet events raised by the Registry contract. -type RegistryDeviceDefinitionIdSetIterator struct { - Event *RegistryDeviceDefinitionIdSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryDeviceDefinitionIdSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryDeviceDefinitionIdSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryDeviceDefinitionIdSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryDeviceDefinitionIdSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryDeviceDefinitionIdSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryDeviceDefinitionIdSet represents a DeviceDefinitionIdSet event raised by the Registry contract. -type RegistryDeviceDefinitionIdSet struct { - VehicleId *big.Int - DdId string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDeviceDefinitionIdSet is a free log retrieval operation binding the contract event 0x11880ae675ee346586e2fe83800263cdf21bada6dba1a0623cad2163338a6fad. -// -// Solidity: event DeviceDefinitionIdSet(uint256 indexed vehicleId, string ddId) -func (_Registry *RegistryFilterer) FilterDeviceDefinitionIdSet(opts *bind.FilterOpts, vehicleId []*big.Int) (*RegistryDeviceDefinitionIdSetIterator, error) { - - var vehicleIdRule []interface{} - for _, vehicleIdItem := range vehicleId { - vehicleIdRule = append(vehicleIdRule, vehicleIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "DeviceDefinitionIdSet", vehicleIdRule) - if err != nil { - return nil, err - } - return &RegistryDeviceDefinitionIdSetIterator{contract: _Registry.contract, event: "DeviceDefinitionIdSet", logs: logs, sub: sub}, nil -} - -// WatchDeviceDefinitionIdSet is a free log subscription operation binding the contract event 0x11880ae675ee346586e2fe83800263cdf21bada6dba1a0623cad2163338a6fad. -// -// Solidity: event DeviceDefinitionIdSet(uint256 indexed vehicleId, string ddId) -func (_Registry *RegistryFilterer) WatchDeviceDefinitionIdSet(opts *bind.WatchOpts, sink chan<- *RegistryDeviceDefinitionIdSet, vehicleId []*big.Int) (event.Subscription, error) { - - var vehicleIdRule []interface{} - for _, vehicleIdItem := range vehicleId { - vehicleIdRule = append(vehicleIdRule, vehicleIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "DeviceDefinitionIdSet", vehicleIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryDeviceDefinitionIdSet) - if err := _Registry.contract.UnpackLog(event, "DeviceDefinitionIdSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDeviceDefinitionIdSet is a log parse operation binding the contract event 0x11880ae675ee346586e2fe83800263cdf21bada6dba1a0623cad2163338a6fad. -// -// Solidity: event DeviceDefinitionIdSet(uint256 indexed vehicleId, string ddId) -func (_Registry *RegistryFilterer) ParseDeviceDefinitionIdSet(log types.Log) (*RegistryDeviceDefinitionIdSet, error) { - event := new(RegistryDeviceDefinitionIdSet) - if err := _Registry.contract.UnpackLog(event, "DeviceDefinitionIdSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryDeviceDefinitionInsertedIterator is returned from FilterDeviceDefinitionInserted and is used to iterate over the raw logs and unpacked data for DeviceDefinitionInserted events raised by the Registry contract. -type RegistryDeviceDefinitionInsertedIterator struct { - Event *RegistryDeviceDefinitionInserted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryDeviceDefinitionInsertedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryDeviceDefinitionInserted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryDeviceDefinitionInserted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryDeviceDefinitionInsertedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryDeviceDefinitionInsertedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryDeviceDefinitionInserted represents a DeviceDefinitionInserted event raised by the Registry contract. -type RegistryDeviceDefinitionInserted struct { - TableId *big.Int - Id string - Model string - Year *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDeviceDefinitionInserted is a free log retrieval operation binding the contract event 0x462ef08cd7ac75ba02b3d84fe43ba15ae23f90a51484c6536057e951c2b629bb. -// -// Solidity: event DeviceDefinitionInserted(uint256 indexed tableId, string id, string model, uint256 year) -func (_Registry *RegistryFilterer) FilterDeviceDefinitionInserted(opts *bind.FilterOpts, tableId []*big.Int) (*RegistryDeviceDefinitionInsertedIterator, error) { - - var tableIdRule []interface{} - for _, tableIdItem := range tableId { - tableIdRule = append(tableIdRule, tableIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "DeviceDefinitionInserted", tableIdRule) - if err != nil { - return nil, err - } - return &RegistryDeviceDefinitionInsertedIterator{contract: _Registry.contract, event: "DeviceDefinitionInserted", logs: logs, sub: sub}, nil -} - -// WatchDeviceDefinitionInserted is a free log subscription operation binding the contract event 0x462ef08cd7ac75ba02b3d84fe43ba15ae23f90a51484c6536057e951c2b629bb. -// -// Solidity: event DeviceDefinitionInserted(uint256 indexed tableId, string id, string model, uint256 year) -func (_Registry *RegistryFilterer) WatchDeviceDefinitionInserted(opts *bind.WatchOpts, sink chan<- *RegistryDeviceDefinitionInserted, tableId []*big.Int) (event.Subscription, error) { - - var tableIdRule []interface{} - for _, tableIdItem := range tableId { - tableIdRule = append(tableIdRule, tableIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "DeviceDefinitionInserted", tableIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryDeviceDefinitionInserted) - if err := _Registry.contract.UnpackLog(event, "DeviceDefinitionInserted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDeviceDefinitionInserted is a log parse operation binding the contract event 0x462ef08cd7ac75ba02b3d84fe43ba15ae23f90a51484c6536057e951c2b629bb. -// -// Solidity: event DeviceDefinitionInserted(uint256 indexed tableId, string id, string model, uint256 year) -func (_Registry *RegistryFilterer) ParseDeviceDefinitionInserted(log types.Log) (*RegistryDeviceDefinitionInserted, error) { - event := new(RegistryDeviceDefinitionInserted) - if err := _Registry.contract.UnpackLog(event, "DeviceDefinitionInserted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryDeviceDefinitionTableCreatedIterator is returned from FilterDeviceDefinitionTableCreated and is used to iterate over the raw logs and unpacked data for DeviceDefinitionTableCreated events raised by the Registry contract. -type RegistryDeviceDefinitionTableCreatedIterator struct { - Event *RegistryDeviceDefinitionTableCreated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryDeviceDefinitionTableCreatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryDeviceDefinitionTableCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryDeviceDefinitionTableCreated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryDeviceDefinitionTableCreatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryDeviceDefinitionTableCreatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryDeviceDefinitionTableCreated represents a DeviceDefinitionTableCreated event raised by the Registry contract. -type RegistryDeviceDefinitionTableCreated struct { - TableOwner common.Address - ManufacturerId *big.Int - TableId *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDeviceDefinitionTableCreated is a free log retrieval operation binding the contract event 0x34045c03bca909729abb696ffeefc454874a5b7967ee473daeafa7b45c91999e. -// -// Solidity: event DeviceDefinitionTableCreated(address indexed tableOwner, uint256 indexed manufacturerId, uint256 indexed tableId) -func (_Registry *RegistryFilterer) FilterDeviceDefinitionTableCreated(opts *bind.FilterOpts, tableOwner []common.Address, manufacturerId []*big.Int, tableId []*big.Int) (*RegistryDeviceDefinitionTableCreatedIterator, error) { - - var tableOwnerRule []interface{} - for _, tableOwnerItem := range tableOwner { - tableOwnerRule = append(tableOwnerRule, tableOwnerItem) - } - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - var tableIdRule []interface{} - for _, tableIdItem := range tableId { - tableIdRule = append(tableIdRule, tableIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "DeviceDefinitionTableCreated", tableOwnerRule, manufacturerIdRule, tableIdRule) - if err != nil { - return nil, err - } - return &RegistryDeviceDefinitionTableCreatedIterator{contract: _Registry.contract, event: "DeviceDefinitionTableCreated", logs: logs, sub: sub}, nil -} - -// WatchDeviceDefinitionTableCreated is a free log subscription operation binding the contract event 0x34045c03bca909729abb696ffeefc454874a5b7967ee473daeafa7b45c91999e. -// -// Solidity: event DeviceDefinitionTableCreated(address indexed tableOwner, uint256 indexed manufacturerId, uint256 indexed tableId) -func (_Registry *RegistryFilterer) WatchDeviceDefinitionTableCreated(opts *bind.WatchOpts, sink chan<- *RegistryDeviceDefinitionTableCreated, tableOwner []common.Address, manufacturerId []*big.Int, tableId []*big.Int) (event.Subscription, error) { - - var tableOwnerRule []interface{} - for _, tableOwnerItem := range tableOwner { - tableOwnerRule = append(tableOwnerRule, tableOwnerItem) - } - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - var tableIdRule []interface{} - for _, tableIdItem := range tableId { - tableIdRule = append(tableIdRule, tableIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "DeviceDefinitionTableCreated", tableOwnerRule, manufacturerIdRule, tableIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryDeviceDefinitionTableCreated) - if err := _Registry.contract.UnpackLog(event, "DeviceDefinitionTableCreated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDeviceDefinitionTableCreated is a log parse operation binding the contract event 0x34045c03bca909729abb696ffeefc454874a5b7967ee473daeafa7b45c91999e. -// -// Solidity: event DeviceDefinitionTableCreated(address indexed tableOwner, uint256 indexed manufacturerId, uint256 indexed tableId) -func (_Registry *RegistryFilterer) ParseDeviceDefinitionTableCreated(log types.Log) (*RegistryDeviceDefinitionTableCreated, error) { - event := new(RegistryDeviceDefinitionTableCreated) - if err := _Registry.contract.UnpackLog(event, "DeviceDefinitionTableCreated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryDeviceDefinitionUpdatedIterator is returned from FilterDeviceDefinitionUpdated and is used to iterate over the raw logs and unpacked data for DeviceDefinitionUpdated events raised by the Registry contract. -type RegistryDeviceDefinitionUpdatedIterator struct { - Event *RegistryDeviceDefinitionUpdated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryDeviceDefinitionUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryDeviceDefinitionUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryDeviceDefinitionUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryDeviceDefinitionUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryDeviceDefinitionUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryDeviceDefinitionUpdated represents a DeviceDefinitionUpdated event raised by the Registry contract. -type RegistryDeviceDefinitionUpdated struct { - TableId *big.Int - Id string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDeviceDefinitionUpdated is a free log retrieval operation binding the contract event 0x67c3ba003a03bea0bbf3e3b8b976139e07cca2c5b0cc89131d95f2a998796bf6. -// -// Solidity: event DeviceDefinitionUpdated(uint256 indexed tableId, string id) -func (_Registry *RegistryFilterer) FilterDeviceDefinitionUpdated(opts *bind.FilterOpts, tableId []*big.Int) (*RegistryDeviceDefinitionUpdatedIterator, error) { - - var tableIdRule []interface{} - for _, tableIdItem := range tableId { - tableIdRule = append(tableIdRule, tableIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "DeviceDefinitionUpdated", tableIdRule) - if err != nil { - return nil, err - } - return &RegistryDeviceDefinitionUpdatedIterator{contract: _Registry.contract, event: "DeviceDefinitionUpdated", logs: logs, sub: sub}, nil -} - -// WatchDeviceDefinitionUpdated is a free log subscription operation binding the contract event 0x67c3ba003a03bea0bbf3e3b8b976139e07cca2c5b0cc89131d95f2a998796bf6. -// -// Solidity: event DeviceDefinitionUpdated(uint256 indexed tableId, string id) -func (_Registry *RegistryFilterer) WatchDeviceDefinitionUpdated(opts *bind.WatchOpts, sink chan<- *RegistryDeviceDefinitionUpdated, tableId []*big.Int) (event.Subscription, error) { - - var tableIdRule []interface{} - for _, tableIdItem := range tableId { - tableIdRule = append(tableIdRule, tableIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "DeviceDefinitionUpdated", tableIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryDeviceDefinitionUpdated) - if err := _Registry.contract.UnpackLog(event, "DeviceDefinitionUpdated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDeviceDefinitionUpdated is a log parse operation binding the contract event 0x67c3ba003a03bea0bbf3e3b8b976139e07cca2c5b0cc89131d95f2a998796bf6. -// -// Solidity: event DeviceDefinitionUpdated(uint256 indexed tableId, string id) -func (_Registry *RegistryFilterer) ParseDeviceDefinitionUpdated(log types.Log) (*RegistryDeviceDefinitionUpdated, error) { - event := new(RegistryDeviceDefinitionUpdated) - if err := _Registry.contract.UnpackLog(event, "DeviceDefinitionUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryDimoCreditSetIterator is returned from FilterDimoCreditSet and is used to iterate over the raw logs and unpacked data for DimoCreditSet events raised by the Registry contract. -type RegistryDimoCreditSetIterator struct { - Event *RegistryDimoCreditSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryDimoCreditSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryDimoCreditSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryDimoCreditSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryDimoCreditSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryDimoCreditSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryDimoCreditSet represents a DimoCreditSet event raised by the Registry contract. -type RegistryDimoCreditSet struct { - DimoCredit common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDimoCreditSet is a free log retrieval operation binding the contract event 0x6f17bce437ce6897c71e9d81fa557073d0f924fbafbace72ebd44e39cbba6506. -// -// Solidity: event DimoCreditSet(address indexed dimoCredit) -func (_Registry *RegistryFilterer) FilterDimoCreditSet(opts *bind.FilterOpts, dimoCredit []common.Address) (*RegistryDimoCreditSetIterator, error) { - - var dimoCreditRule []interface{} - for _, dimoCreditItem := range dimoCredit { - dimoCreditRule = append(dimoCreditRule, dimoCreditItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "DimoCreditSet", dimoCreditRule) - if err != nil { - return nil, err - } - return &RegistryDimoCreditSetIterator{contract: _Registry.contract, event: "DimoCreditSet", logs: logs, sub: sub}, nil -} - -// WatchDimoCreditSet is a free log subscription operation binding the contract event 0x6f17bce437ce6897c71e9d81fa557073d0f924fbafbace72ebd44e39cbba6506. -// -// Solidity: event DimoCreditSet(address indexed dimoCredit) -func (_Registry *RegistryFilterer) WatchDimoCreditSet(opts *bind.WatchOpts, sink chan<- *RegistryDimoCreditSet, dimoCredit []common.Address) (event.Subscription, error) { - - var dimoCreditRule []interface{} - for _, dimoCreditItem := range dimoCredit { - dimoCreditRule = append(dimoCreditRule, dimoCreditItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "DimoCreditSet", dimoCreditRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryDimoCreditSet) - if err := _Registry.contract.UnpackLog(event, "DimoCreditSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDimoCreditSet is a log parse operation binding the contract event 0x6f17bce437ce6897c71e9d81fa557073d0f924fbafbace72ebd44e39cbba6506. -// -// Solidity: event DimoCreditSet(address indexed dimoCredit) -func (_Registry *RegistryFilterer) ParseDimoCreditSet(log types.Log) (*RegistryDimoCreditSet, error) { - event := new(RegistryDimoCreditSet) - if err := _Registry.contract.UnpackLog(event, "DimoCreditSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryDimoStreamrEnsSetIterator is returned from FilterDimoStreamrEnsSet and is used to iterate over the raw logs and unpacked data for DimoStreamrEnsSet events raised by the Registry contract. -type RegistryDimoStreamrEnsSetIterator struct { - Event *RegistryDimoStreamrEnsSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryDimoStreamrEnsSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryDimoStreamrEnsSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryDimoStreamrEnsSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryDimoStreamrEnsSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryDimoStreamrEnsSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryDimoStreamrEnsSet represents a DimoStreamrEnsSet event raised by the Registry contract. -type RegistryDimoStreamrEnsSet struct { - DimoStreamrEns string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDimoStreamrEnsSet is a free log retrieval operation binding the contract event 0x5c6e4ce43bdb4e1b32c15a4e01073b36c28f6f16a024609785a545634d83ba69. -// -// Solidity: event DimoStreamrEnsSet(string dimoStreamrEns) -func (_Registry *RegistryFilterer) FilterDimoStreamrEnsSet(opts *bind.FilterOpts) (*RegistryDimoStreamrEnsSetIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "DimoStreamrEnsSet") - if err != nil { - return nil, err - } - return &RegistryDimoStreamrEnsSetIterator{contract: _Registry.contract, event: "DimoStreamrEnsSet", logs: logs, sub: sub}, nil -} - -// WatchDimoStreamrEnsSet is a free log subscription operation binding the contract event 0x5c6e4ce43bdb4e1b32c15a4e01073b36c28f6f16a024609785a545634d83ba69. -// -// Solidity: event DimoStreamrEnsSet(string dimoStreamrEns) -func (_Registry *RegistryFilterer) WatchDimoStreamrEnsSet(opts *bind.WatchOpts, sink chan<- *RegistryDimoStreamrEnsSet) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "DimoStreamrEnsSet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryDimoStreamrEnsSet) - if err := _Registry.contract.UnpackLog(event, "DimoStreamrEnsSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDimoStreamrEnsSet is a log parse operation binding the contract event 0x5c6e4ce43bdb4e1b32c15a4e01073b36c28f6f16a024609785a545634d83ba69. -// -// Solidity: event DimoStreamrEnsSet(string dimoStreamrEns) -func (_Registry *RegistryFilterer) ParseDimoStreamrEnsSet(log types.Log) (*RegistryDimoStreamrEnsSet, error) { - event := new(RegistryDimoStreamrEnsSet) - if err := _Registry.contract.UnpackLog(event, "DimoStreamrEnsSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryDimoStreamrNodeSetIterator is returned from FilterDimoStreamrNodeSet and is used to iterate over the raw logs and unpacked data for DimoStreamrNodeSet events raised by the Registry contract. -type RegistryDimoStreamrNodeSetIterator struct { - Event *RegistryDimoStreamrNodeSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryDimoStreamrNodeSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryDimoStreamrNodeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryDimoStreamrNodeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryDimoStreamrNodeSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryDimoStreamrNodeSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryDimoStreamrNodeSet represents a DimoStreamrNodeSet event raised by the Registry contract. -type RegistryDimoStreamrNodeSet struct { - DimoStreamrNode common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDimoStreamrNodeSet is a free log retrieval operation binding the contract event 0x49a3b2d583fcf868092d6cb62f348da2ae9e03698d56a5104a9dd5ea5cafbae7. -// -// Solidity: event DimoStreamrNodeSet(address dimoStreamrNode) -func (_Registry *RegistryFilterer) FilterDimoStreamrNodeSet(opts *bind.FilterOpts) (*RegistryDimoStreamrNodeSetIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "DimoStreamrNodeSet") - if err != nil { - return nil, err - } - return &RegistryDimoStreamrNodeSetIterator{contract: _Registry.contract, event: "DimoStreamrNodeSet", logs: logs, sub: sub}, nil -} - -// WatchDimoStreamrNodeSet is a free log subscription operation binding the contract event 0x49a3b2d583fcf868092d6cb62f348da2ae9e03698d56a5104a9dd5ea5cafbae7. -// -// Solidity: event DimoStreamrNodeSet(address dimoStreamrNode) -func (_Registry *RegistryFilterer) WatchDimoStreamrNodeSet(opts *bind.WatchOpts, sink chan<- *RegistryDimoStreamrNodeSet) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "DimoStreamrNodeSet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryDimoStreamrNodeSet) - if err := _Registry.contract.UnpackLog(event, "DimoStreamrNodeSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDimoStreamrNodeSet is a log parse operation binding the contract event 0x49a3b2d583fcf868092d6cb62f348da2ae9e03698d56a5104a9dd5ea5cafbae7. -// -// Solidity: event DimoStreamrNodeSet(address dimoStreamrNode) -func (_Registry *RegistryFilterer) ParseDimoStreamrNodeSet(log types.Log) (*RegistryDimoStreamrNodeSet, error) { - event := new(RegistryDimoStreamrNodeSet) - if err := _Registry.contract.UnpackLog(event, "DimoStreamrNodeSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryDimoTokenSetIterator is returned from FilterDimoTokenSet and is used to iterate over the raw logs and unpacked data for DimoTokenSet events raised by the Registry contract. -type RegistryDimoTokenSetIterator struct { - Event *RegistryDimoTokenSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryDimoTokenSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryDimoTokenSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryDimoTokenSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryDimoTokenSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryDimoTokenSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryDimoTokenSet represents a DimoTokenSet event raised by the Registry contract. -type RegistryDimoTokenSet struct { - DimoToken common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterDimoTokenSet is a free log retrieval operation binding the contract event 0x3c3a6813362275982da07666bb5b9d4306b5d37c557e51bf60512c8da7a08bc8. -// -// Solidity: event DimoTokenSet(address indexed dimoToken) -func (_Registry *RegistryFilterer) FilterDimoTokenSet(opts *bind.FilterOpts, dimoToken []common.Address) (*RegistryDimoTokenSetIterator, error) { - - var dimoTokenRule []interface{} - for _, dimoTokenItem := range dimoToken { - dimoTokenRule = append(dimoTokenRule, dimoTokenItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "DimoTokenSet", dimoTokenRule) - if err != nil { - return nil, err - } - return &RegistryDimoTokenSetIterator{contract: _Registry.contract, event: "DimoTokenSet", logs: logs, sub: sub}, nil -} - -// WatchDimoTokenSet is a free log subscription operation binding the contract event 0x3c3a6813362275982da07666bb5b9d4306b5d37c557e51bf60512c8da7a08bc8. -// -// Solidity: event DimoTokenSet(address indexed dimoToken) -func (_Registry *RegistryFilterer) WatchDimoTokenSet(opts *bind.WatchOpts, sink chan<- *RegistryDimoTokenSet, dimoToken []common.Address) (event.Subscription, error) { - - var dimoTokenRule []interface{} - for _, dimoTokenItem := range dimoToken { - dimoTokenRule = append(dimoTokenRule, dimoTokenItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "DimoTokenSet", dimoTokenRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryDimoTokenSet) - if err := _Registry.contract.UnpackLog(event, "DimoTokenSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseDimoTokenSet is a log parse operation binding the contract event 0x3c3a6813362275982da07666bb5b9d4306b5d37c557e51bf60512c8da7a08bc8. -// -// Solidity: event DimoTokenSet(address indexed dimoToken) -func (_Registry *RegistryFilterer) ParseDimoTokenSet(log types.Log) (*RegistryDimoTokenSet, error) { - event := new(RegistryDimoTokenSet) - if err := _Registry.contract.UnpackLog(event, "DimoTokenSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryFoundationSetIterator is returned from FilterFoundationSet and is used to iterate over the raw logs and unpacked data for FoundationSet events raised by the Registry contract. -type RegistryFoundationSetIterator struct { - Event *RegistryFoundationSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryFoundationSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryFoundationSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryFoundationSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryFoundationSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryFoundationSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryFoundationSet represents a FoundationSet event raised by the Registry contract. -type RegistryFoundationSet struct { - Foundation common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterFoundationSet is a free log retrieval operation binding the contract event 0xfb3a44111c652758dbcb45122c36ba9fa8d5f2c5b3df984a0196dee5a0bdcc97. -// -// Solidity: event FoundationSet(address indexed foundation) -func (_Registry *RegistryFilterer) FilterFoundationSet(opts *bind.FilterOpts, foundation []common.Address) (*RegistryFoundationSetIterator, error) { - - var foundationRule []interface{} - for _, foundationItem := range foundation { - foundationRule = append(foundationRule, foundationItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "FoundationSet", foundationRule) - if err != nil { - return nil, err - } - return &RegistryFoundationSetIterator{contract: _Registry.contract, event: "FoundationSet", logs: logs, sub: sub}, nil -} - -// WatchFoundationSet is a free log subscription operation binding the contract event 0xfb3a44111c652758dbcb45122c36ba9fa8d5f2c5b3df984a0196dee5a0bdcc97. -// -// Solidity: event FoundationSet(address indexed foundation) -func (_Registry *RegistryFilterer) WatchFoundationSet(opts *bind.WatchOpts, sink chan<- *RegistryFoundationSet, foundation []common.Address) (event.Subscription, error) { - - var foundationRule []interface{} - for _, foundationItem := range foundation { - foundationRule = append(foundationRule, foundationItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "FoundationSet", foundationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryFoundationSet) - if err := _Registry.contract.UnpackLog(event, "FoundationSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseFoundationSet is a log parse operation binding the contract event 0xfb3a44111c652758dbcb45122c36ba9fa8d5f2c5b3df984a0196dee5a0bdcc97. -// -// Solidity: event FoundationSet(address indexed foundation) -func (_Registry *RegistryFilterer) ParseFoundationSet(log types.Log) (*RegistryFoundationSet, error) { - event := new(RegistryFoundationSet) - if err := _Registry.contract.UnpackLog(event, "FoundationSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryIntegrationAttributeAddedIterator is returned from FilterIntegrationAttributeAdded and is used to iterate over the raw logs and unpacked data for IntegrationAttributeAdded events raised by the Registry contract. -type RegistryIntegrationAttributeAddedIterator struct { - Event *RegistryIntegrationAttributeAdded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryIntegrationAttributeAddedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryIntegrationAttributeAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryIntegrationAttributeAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryIntegrationAttributeAddedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryIntegrationAttributeAddedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryIntegrationAttributeAdded represents a IntegrationAttributeAdded event raised by the Registry contract. -type RegistryIntegrationAttributeAdded struct { - Attribute string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterIntegrationAttributeAdded is a free log retrieval operation binding the contract event 0x8a60d58f652ffe56b0987cf68f5cf87f9b67e2ceeadfc9de04d2620141749504. -// -// Solidity: event IntegrationAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) FilterIntegrationAttributeAdded(opts *bind.FilterOpts) (*RegistryIntegrationAttributeAddedIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "IntegrationAttributeAdded") - if err != nil { - return nil, err - } - return &RegistryIntegrationAttributeAddedIterator{contract: _Registry.contract, event: "IntegrationAttributeAdded", logs: logs, sub: sub}, nil -} - -// WatchIntegrationAttributeAdded is a free log subscription operation binding the contract event 0x8a60d58f652ffe56b0987cf68f5cf87f9b67e2ceeadfc9de04d2620141749504. -// -// Solidity: event IntegrationAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) WatchIntegrationAttributeAdded(opts *bind.WatchOpts, sink chan<- *RegistryIntegrationAttributeAdded) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "IntegrationAttributeAdded") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryIntegrationAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "IntegrationAttributeAdded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseIntegrationAttributeAdded is a log parse operation binding the contract event 0x8a60d58f652ffe56b0987cf68f5cf87f9b67e2ceeadfc9de04d2620141749504. -// -// Solidity: event IntegrationAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) ParseIntegrationAttributeAdded(log types.Log) (*RegistryIntegrationAttributeAdded, error) { - event := new(RegistryIntegrationAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "IntegrationAttributeAdded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryIntegrationAttributeSetIterator is returned from FilterIntegrationAttributeSet and is used to iterate over the raw logs and unpacked data for IntegrationAttributeSet events raised by the Registry contract. -type RegistryIntegrationAttributeSetIterator struct { - Event *RegistryIntegrationAttributeSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryIntegrationAttributeSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryIntegrationAttributeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryIntegrationAttributeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryIntegrationAttributeSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryIntegrationAttributeSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryIntegrationAttributeSet represents a IntegrationAttributeSet event raised by the Registry contract. -type RegistryIntegrationAttributeSet struct { - TokenId *big.Int - Attribute string - Info string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterIntegrationAttributeSet is a free log retrieval operation binding the contract event 0x7ad258fae6070243285178171825b61e931d6d4786b7964aa4268e3dd8635f5b. -// -// Solidity: event IntegrationAttributeSet(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) FilterIntegrationAttributeSet(opts *bind.FilterOpts, tokenId []*big.Int) (*RegistryIntegrationAttributeSetIterator, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "IntegrationAttributeSet", tokenIdRule) - if err != nil { - return nil, err - } - return &RegistryIntegrationAttributeSetIterator{contract: _Registry.contract, event: "IntegrationAttributeSet", logs: logs, sub: sub}, nil -} - -// WatchIntegrationAttributeSet is a free log subscription operation binding the contract event 0x7ad258fae6070243285178171825b61e931d6d4786b7964aa4268e3dd8635f5b. -// -// Solidity: event IntegrationAttributeSet(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) WatchIntegrationAttributeSet(opts *bind.WatchOpts, sink chan<- *RegistryIntegrationAttributeSet, tokenId []*big.Int) (event.Subscription, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "IntegrationAttributeSet", tokenIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryIntegrationAttributeSet) - if err := _Registry.contract.UnpackLog(event, "IntegrationAttributeSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseIntegrationAttributeSet is a log parse operation binding the contract event 0x7ad258fae6070243285178171825b61e931d6d4786b7964aa4268e3dd8635f5b. -// -// Solidity: event IntegrationAttributeSet(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) ParseIntegrationAttributeSet(log types.Log) (*RegistryIntegrationAttributeSet, error) { - event := new(RegistryIntegrationAttributeSet) - if err := _Registry.contract.UnpackLog(event, "IntegrationAttributeSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryIntegrationIdProxySetIterator is returned from FilterIntegrationIdProxySet and is used to iterate over the raw logs and unpacked data for IntegrationIdProxySet events raised by the Registry contract. -type RegistryIntegrationIdProxySetIterator struct { - Event *RegistryIntegrationIdProxySet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryIntegrationIdProxySetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryIntegrationIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryIntegrationIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryIntegrationIdProxySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryIntegrationIdProxySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryIntegrationIdProxySet represents a IntegrationIdProxySet event raised by the Registry contract. -type RegistryIntegrationIdProxySet struct { - Proxy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterIntegrationIdProxySet is a free log retrieval operation binding the contract event 0x25dd5f73797a6c0ea7e44d94e7c58a4fdee93b784c99db224ba8a49832741ac2. -// -// Solidity: event IntegrationIdProxySet(address proxy) -func (_Registry *RegistryFilterer) FilterIntegrationIdProxySet(opts *bind.FilterOpts) (*RegistryIntegrationIdProxySetIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "IntegrationIdProxySet") - if err != nil { - return nil, err - } - return &RegistryIntegrationIdProxySetIterator{contract: _Registry.contract, event: "IntegrationIdProxySet", logs: logs, sub: sub}, nil -} - -// WatchIntegrationIdProxySet is a free log subscription operation binding the contract event 0x25dd5f73797a6c0ea7e44d94e7c58a4fdee93b784c99db224ba8a49832741ac2. -// -// Solidity: event IntegrationIdProxySet(address proxy) -func (_Registry *RegistryFilterer) WatchIntegrationIdProxySet(opts *bind.WatchOpts, sink chan<- *RegistryIntegrationIdProxySet) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "IntegrationIdProxySet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryIntegrationIdProxySet) - if err := _Registry.contract.UnpackLog(event, "IntegrationIdProxySet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseIntegrationIdProxySet is a log parse operation binding the contract event 0x25dd5f73797a6c0ea7e44d94e7c58a4fdee93b784c99db224ba8a49832741ac2. -// -// Solidity: event IntegrationIdProxySet(address proxy) -func (_Registry *RegistryFilterer) ParseIntegrationIdProxySet(log types.Log) (*RegistryIntegrationIdProxySet, error) { - event := new(RegistryIntegrationIdProxySet) - if err := _Registry.contract.UnpackLog(event, "IntegrationIdProxySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryIntegrationNodeMintedIterator is returned from FilterIntegrationNodeMinted and is used to iterate over the raw logs and unpacked data for IntegrationNodeMinted events raised by the Registry contract. -type RegistryIntegrationNodeMintedIterator struct { - Event *RegistryIntegrationNodeMinted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryIntegrationNodeMintedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryIntegrationNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryIntegrationNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryIntegrationNodeMintedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryIntegrationNodeMintedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryIntegrationNodeMinted represents a IntegrationNodeMinted event raised by the Registry contract. -type RegistryIntegrationNodeMinted struct { - TokenId *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterIntegrationNodeMinted is a free log retrieval operation binding the contract event 0x98490372c5dc5c685bd6d9efd43eaf17e5ac95f4d4a77be5a2769330e0afa2e9. -// -// Solidity: event IntegrationNodeMinted(uint256 indexed tokenId, address indexed owner) -func (_Registry *RegistryFilterer) FilterIntegrationNodeMinted(opts *bind.FilterOpts, tokenId []*big.Int, owner []common.Address) (*RegistryIntegrationNodeMintedIterator, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "IntegrationNodeMinted", tokenIdRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistryIntegrationNodeMintedIterator{contract: _Registry.contract, event: "IntegrationNodeMinted", logs: logs, sub: sub}, nil -} - -// WatchIntegrationNodeMinted is a free log subscription operation binding the contract event 0x98490372c5dc5c685bd6d9efd43eaf17e5ac95f4d4a77be5a2769330e0afa2e9. -// -// Solidity: event IntegrationNodeMinted(uint256 indexed tokenId, address indexed owner) -func (_Registry *RegistryFilterer) WatchIntegrationNodeMinted(opts *bind.WatchOpts, sink chan<- *RegistryIntegrationNodeMinted, tokenId []*big.Int, owner []common.Address) (event.Subscription, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "IntegrationNodeMinted", tokenIdRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryIntegrationNodeMinted) - if err := _Registry.contract.UnpackLog(event, "IntegrationNodeMinted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseIntegrationNodeMinted is a log parse operation binding the contract event 0x98490372c5dc5c685bd6d9efd43eaf17e5ac95f4d4a77be5a2769330e0afa2e9. -// -// Solidity: event IntegrationNodeMinted(uint256 indexed tokenId, address indexed owner) -func (_Registry *RegistryFilterer) ParseIntegrationNodeMinted(log types.Log) (*RegistryIntegrationNodeMinted, error) { - event := new(RegistryIntegrationNodeMinted) - if err := _Registry.contract.UnpackLog(event, "IntegrationNodeMinted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryManufacturerAttributeAddedIterator is returned from FilterManufacturerAttributeAdded and is used to iterate over the raw logs and unpacked data for ManufacturerAttributeAdded events raised by the Registry contract. -type RegistryManufacturerAttributeAddedIterator struct { - Event *RegistryManufacturerAttributeAdded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryManufacturerAttributeAddedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerAttributeAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerAttributeAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryManufacturerAttributeAddedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryManufacturerAttributeAddedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryManufacturerAttributeAdded represents a ManufacturerAttributeAdded event raised by the Registry contract. -type RegistryManufacturerAttributeAdded struct { - Attribute string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterManufacturerAttributeAdded is a free log retrieval operation binding the contract event 0x47ff34ba477617ab4dc2aefe5ea26ba19a207b052ec44d59b86c2ff3e7fd53b3. -// -// Solidity: event ManufacturerAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) FilterManufacturerAttributeAdded(opts *bind.FilterOpts) (*RegistryManufacturerAttributeAddedIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "ManufacturerAttributeAdded") - if err != nil { - return nil, err - } - return &RegistryManufacturerAttributeAddedIterator{contract: _Registry.contract, event: "ManufacturerAttributeAdded", logs: logs, sub: sub}, nil -} - -// WatchManufacturerAttributeAdded is a free log subscription operation binding the contract event 0x47ff34ba477617ab4dc2aefe5ea26ba19a207b052ec44d59b86c2ff3e7fd53b3. -// -// Solidity: event ManufacturerAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) WatchManufacturerAttributeAdded(opts *bind.WatchOpts, sink chan<- *RegistryManufacturerAttributeAdded) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "ManufacturerAttributeAdded") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryManufacturerAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "ManufacturerAttributeAdded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseManufacturerAttributeAdded is a log parse operation binding the contract event 0x47ff34ba477617ab4dc2aefe5ea26ba19a207b052ec44d59b86c2ff3e7fd53b3. -// -// Solidity: event ManufacturerAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) ParseManufacturerAttributeAdded(log types.Log) (*RegistryManufacturerAttributeAdded, error) { - event := new(RegistryManufacturerAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "ManufacturerAttributeAdded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryManufacturerAttributeSetIterator is returned from FilterManufacturerAttributeSet and is used to iterate over the raw logs and unpacked data for ManufacturerAttributeSet events raised by the Registry contract. -type RegistryManufacturerAttributeSetIterator struct { - Event *RegistryManufacturerAttributeSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryManufacturerAttributeSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerAttributeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerAttributeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryManufacturerAttributeSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryManufacturerAttributeSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryManufacturerAttributeSet represents a ManufacturerAttributeSet event raised by the Registry contract. -type RegistryManufacturerAttributeSet struct { - TokenId *big.Int - Attribute string - Info string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterManufacturerAttributeSet is a free log retrieval operation binding the contract event 0xb81a4ce1a42b79dd48c79a2c5a0b170cebf3c78b5ecb25df31066eb9b656a929. -// -// Solidity: event ManufacturerAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) FilterManufacturerAttributeSet(opts *bind.FilterOpts) (*RegistryManufacturerAttributeSetIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "ManufacturerAttributeSet") - if err != nil { - return nil, err - } - return &RegistryManufacturerAttributeSetIterator{contract: _Registry.contract, event: "ManufacturerAttributeSet", logs: logs, sub: sub}, nil -} - -// WatchManufacturerAttributeSet is a free log subscription operation binding the contract event 0xb81a4ce1a42b79dd48c79a2c5a0b170cebf3c78b5ecb25df31066eb9b656a929. -// -// Solidity: event ManufacturerAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) WatchManufacturerAttributeSet(opts *bind.WatchOpts, sink chan<- *RegistryManufacturerAttributeSet) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "ManufacturerAttributeSet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryManufacturerAttributeSet) - if err := _Registry.contract.UnpackLog(event, "ManufacturerAttributeSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseManufacturerAttributeSet is a log parse operation binding the contract event 0xb81a4ce1a42b79dd48c79a2c5a0b170cebf3c78b5ecb25df31066eb9b656a929. -// -// Solidity: event ManufacturerAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) ParseManufacturerAttributeSet(log types.Log) (*RegistryManufacturerAttributeSet, error) { - event := new(RegistryManufacturerAttributeSet) - if err := _Registry.contract.UnpackLog(event, "ManufacturerAttributeSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryManufacturerIdProxySetIterator is returned from FilterManufacturerIdProxySet and is used to iterate over the raw logs and unpacked data for ManufacturerIdProxySet events raised by the Registry contract. -type RegistryManufacturerIdProxySetIterator struct { - Event *RegistryManufacturerIdProxySet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryManufacturerIdProxySetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryManufacturerIdProxySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryManufacturerIdProxySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryManufacturerIdProxySet represents a ManufacturerIdProxySet event raised by the Registry contract. -type RegistryManufacturerIdProxySet struct { - Proxy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterManufacturerIdProxySet is a free log retrieval operation binding the contract event 0xf9bca5f2d5444f9fbb6e6d0fb2b4c2cda766bd110a1326420b883ffc6978f5e2. -// -// Solidity: event ManufacturerIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) FilterManufacturerIdProxySet(opts *bind.FilterOpts, proxy []common.Address) (*RegistryManufacturerIdProxySetIterator, error) { - - var proxyRule []interface{} - for _, proxyItem := range proxy { - proxyRule = append(proxyRule, proxyItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "ManufacturerIdProxySet", proxyRule) - if err != nil { - return nil, err - } - return &RegistryManufacturerIdProxySetIterator{contract: _Registry.contract, event: "ManufacturerIdProxySet", logs: logs, sub: sub}, nil -} - -// WatchManufacturerIdProxySet is a free log subscription operation binding the contract event 0xf9bca5f2d5444f9fbb6e6d0fb2b4c2cda766bd110a1326420b883ffc6978f5e2. -// -// Solidity: event ManufacturerIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) WatchManufacturerIdProxySet(opts *bind.WatchOpts, sink chan<- *RegistryManufacturerIdProxySet, proxy []common.Address) (event.Subscription, error) { - - var proxyRule []interface{} - for _, proxyItem := range proxy { - proxyRule = append(proxyRule, proxyItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "ManufacturerIdProxySet", proxyRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryManufacturerIdProxySet) - if err := _Registry.contract.UnpackLog(event, "ManufacturerIdProxySet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseManufacturerIdProxySet is a log parse operation binding the contract event 0xf9bca5f2d5444f9fbb6e6d0fb2b4c2cda766bd110a1326420b883ffc6978f5e2. -// -// Solidity: event ManufacturerIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) ParseManufacturerIdProxySet(log types.Log) (*RegistryManufacturerIdProxySet, error) { - event := new(RegistryManufacturerIdProxySet) - if err := _Registry.contract.UnpackLog(event, "ManufacturerIdProxySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryManufacturerLicenseSetIterator is returned from FilterManufacturerLicenseSet and is used to iterate over the raw logs and unpacked data for ManufacturerLicenseSet events raised by the Registry contract. -type RegistryManufacturerLicenseSetIterator struct { - Event *RegistryManufacturerLicenseSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryManufacturerLicenseSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerLicenseSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerLicenseSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryManufacturerLicenseSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryManufacturerLicenseSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryManufacturerLicenseSet represents a ManufacturerLicenseSet event raised by the Registry contract. -type RegistryManufacturerLicenseSet struct { - ManufacturerLicense common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterManufacturerLicenseSet is a free log retrieval operation binding the contract event 0x52ce79552a0de48e63f55aa197389ac337a67a7fed9ba71fe580aeaedd7a05e9. -// -// Solidity: event ManufacturerLicenseSet(address indexed manufacturerLicense) -func (_Registry *RegistryFilterer) FilterManufacturerLicenseSet(opts *bind.FilterOpts, manufacturerLicense []common.Address) (*RegistryManufacturerLicenseSetIterator, error) { - - var manufacturerLicenseRule []interface{} - for _, manufacturerLicenseItem := range manufacturerLicense { - manufacturerLicenseRule = append(manufacturerLicenseRule, manufacturerLicenseItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "ManufacturerLicenseSet", manufacturerLicenseRule) - if err != nil { - return nil, err - } - return &RegistryManufacturerLicenseSetIterator{contract: _Registry.contract, event: "ManufacturerLicenseSet", logs: logs, sub: sub}, nil -} - -// WatchManufacturerLicenseSet is a free log subscription operation binding the contract event 0x52ce79552a0de48e63f55aa197389ac337a67a7fed9ba71fe580aeaedd7a05e9. -// -// Solidity: event ManufacturerLicenseSet(address indexed manufacturerLicense) -func (_Registry *RegistryFilterer) WatchManufacturerLicenseSet(opts *bind.WatchOpts, sink chan<- *RegistryManufacturerLicenseSet, manufacturerLicense []common.Address) (event.Subscription, error) { - - var manufacturerLicenseRule []interface{} - for _, manufacturerLicenseItem := range manufacturerLicense { - manufacturerLicenseRule = append(manufacturerLicenseRule, manufacturerLicenseItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "ManufacturerLicenseSet", manufacturerLicenseRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryManufacturerLicenseSet) - if err := _Registry.contract.UnpackLog(event, "ManufacturerLicenseSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseManufacturerLicenseSet is a log parse operation binding the contract event 0x52ce79552a0de48e63f55aa197389ac337a67a7fed9ba71fe580aeaedd7a05e9. -// -// Solidity: event ManufacturerLicenseSet(address indexed manufacturerLicense) -func (_Registry *RegistryFilterer) ParseManufacturerLicenseSet(log types.Log) (*RegistryManufacturerLicenseSet, error) { - event := new(RegistryManufacturerLicenseSet) - if err := _Registry.contract.UnpackLog(event, "ManufacturerLicenseSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryManufacturerNodeMintedIterator is returned from FilterManufacturerNodeMinted and is used to iterate over the raw logs and unpacked data for ManufacturerNodeMinted events raised by the Registry contract. -type RegistryManufacturerNodeMintedIterator struct { - Event *RegistryManufacturerNodeMinted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryManufacturerNodeMintedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryManufacturerNodeMintedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryManufacturerNodeMintedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryManufacturerNodeMinted represents a ManufacturerNodeMinted event raised by the Registry contract. -type RegistryManufacturerNodeMinted struct { - Name string - TokenId *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterManufacturerNodeMinted is a free log retrieval operation binding the contract event 0xc1279f9a9b23f63ed6e8fe22568fdb1962597404fb8ecb1d4b1722ac5e7a4343. -// -// Solidity: event ManufacturerNodeMinted(string name, uint256 tokenId, address indexed owner) -func (_Registry *RegistryFilterer) FilterManufacturerNodeMinted(opts *bind.FilterOpts, owner []common.Address) (*RegistryManufacturerNodeMintedIterator, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "ManufacturerNodeMinted", ownerRule) - if err != nil { - return nil, err - } - return &RegistryManufacturerNodeMintedIterator{contract: _Registry.contract, event: "ManufacturerNodeMinted", logs: logs, sub: sub}, nil -} - -// WatchManufacturerNodeMinted is a free log subscription operation binding the contract event 0xc1279f9a9b23f63ed6e8fe22568fdb1962597404fb8ecb1d4b1722ac5e7a4343. -// -// Solidity: event ManufacturerNodeMinted(string name, uint256 tokenId, address indexed owner) -func (_Registry *RegistryFilterer) WatchManufacturerNodeMinted(opts *bind.WatchOpts, sink chan<- *RegistryManufacturerNodeMinted, owner []common.Address) (event.Subscription, error) { - - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "ManufacturerNodeMinted", ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryManufacturerNodeMinted) - if err := _Registry.contract.UnpackLog(event, "ManufacturerNodeMinted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseManufacturerNodeMinted is a log parse operation binding the contract event 0xc1279f9a9b23f63ed6e8fe22568fdb1962597404fb8ecb1d4b1722ac5e7a4343. -// -// Solidity: event ManufacturerNodeMinted(string name, uint256 tokenId, address indexed owner) -func (_Registry *RegistryFilterer) ParseManufacturerNodeMinted(log types.Log) (*RegistryManufacturerNodeMinted, error) { - event := new(RegistryManufacturerNodeMinted) - if err := _Registry.contract.UnpackLog(event, "ManufacturerNodeMinted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryManufacturerTableSetIterator is returned from FilterManufacturerTableSet and is used to iterate over the raw logs and unpacked data for ManufacturerTableSet events raised by the Registry contract. -type RegistryManufacturerTableSetIterator struct { - Event *RegistryManufacturerTableSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryManufacturerTableSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerTableSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryManufacturerTableSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryManufacturerTableSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryManufacturerTableSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryManufacturerTableSet represents a ManufacturerTableSet event raised by the Registry contract. -type RegistryManufacturerTableSet struct { - ManufacturerId *big.Int - TableId *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterManufacturerTableSet is a free log retrieval operation binding the contract event 0x753affc1c97f48f4eb21cf9ca5906ba280ab310171483c29e73826d74505b3cf. -// -// Solidity: event ManufacturerTableSet(uint256 indexed manufacturerId, uint256 indexed tableId) -func (_Registry *RegistryFilterer) FilterManufacturerTableSet(opts *bind.FilterOpts, manufacturerId []*big.Int, tableId []*big.Int) (*RegistryManufacturerTableSetIterator, error) { - - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - var tableIdRule []interface{} - for _, tableIdItem := range tableId { - tableIdRule = append(tableIdRule, tableIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "ManufacturerTableSet", manufacturerIdRule, tableIdRule) - if err != nil { - return nil, err - } - return &RegistryManufacturerTableSetIterator{contract: _Registry.contract, event: "ManufacturerTableSet", logs: logs, sub: sub}, nil -} - -// WatchManufacturerTableSet is a free log subscription operation binding the contract event 0x753affc1c97f48f4eb21cf9ca5906ba280ab310171483c29e73826d74505b3cf. -// -// Solidity: event ManufacturerTableSet(uint256 indexed manufacturerId, uint256 indexed tableId) -func (_Registry *RegistryFilterer) WatchManufacturerTableSet(opts *bind.WatchOpts, sink chan<- *RegistryManufacturerTableSet, manufacturerId []*big.Int, tableId []*big.Int) (event.Subscription, error) { - - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - var tableIdRule []interface{} - for _, tableIdItem := range tableId { - tableIdRule = append(tableIdRule, tableIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "ManufacturerTableSet", manufacturerIdRule, tableIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryManufacturerTableSet) - if err := _Registry.contract.UnpackLog(event, "ManufacturerTableSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseManufacturerTableSet is a log parse operation binding the contract event 0x753affc1c97f48f4eb21cf9ca5906ba280ab310171483c29e73826d74505b3cf. -// -// Solidity: event ManufacturerTableSet(uint256 indexed manufacturerId, uint256 indexed tableId) -func (_Registry *RegistryFilterer) ParseManufacturerTableSet(log types.Log) (*RegistryManufacturerTableSet, error) { - event := new(RegistryManufacturerTableSet) - if err := _Registry.contract.UnpackLog(event, "ManufacturerTableSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryModuleAddedIterator is returned from FilterModuleAdded and is used to iterate over the raw logs and unpacked data for ModuleAdded events raised by the Registry contract. -type RegistryModuleAddedIterator struct { - Event *RegistryModuleAdded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryModuleAddedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryModuleAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryModuleAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryModuleAddedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryModuleAddedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryModuleAdded represents a ModuleAdded event raised by the Registry contract. -type RegistryModuleAdded struct { - ModuleAddr common.Address - Selectors [][4]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterModuleAdded is a free log retrieval operation binding the contract event 0x02d0c334c706cd2f08faf7bc03674fc7f3970dd8921776c655069cde33b7fb29. -// -// Solidity: event ModuleAdded(address indexed moduleAddr, bytes4[] selectors) -func (_Registry *RegistryFilterer) FilterModuleAdded(opts *bind.FilterOpts, moduleAddr []common.Address) (*RegistryModuleAddedIterator, error) { - - var moduleAddrRule []interface{} - for _, moduleAddrItem := range moduleAddr { - moduleAddrRule = append(moduleAddrRule, moduleAddrItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "ModuleAdded", moduleAddrRule) - if err != nil { - return nil, err - } - return &RegistryModuleAddedIterator{contract: _Registry.contract, event: "ModuleAdded", logs: logs, sub: sub}, nil -} - -// WatchModuleAdded is a free log subscription operation binding the contract event 0x02d0c334c706cd2f08faf7bc03674fc7f3970dd8921776c655069cde33b7fb29. -// -// Solidity: event ModuleAdded(address indexed moduleAddr, bytes4[] selectors) -func (_Registry *RegistryFilterer) WatchModuleAdded(opts *bind.WatchOpts, sink chan<- *RegistryModuleAdded, moduleAddr []common.Address) (event.Subscription, error) { - - var moduleAddrRule []interface{} - for _, moduleAddrItem := range moduleAddr { - moduleAddrRule = append(moduleAddrRule, moduleAddrItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "ModuleAdded", moduleAddrRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryModuleAdded) - if err := _Registry.contract.UnpackLog(event, "ModuleAdded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseModuleAdded is a log parse operation binding the contract event 0x02d0c334c706cd2f08faf7bc03674fc7f3970dd8921776c655069cde33b7fb29. -// -// Solidity: event ModuleAdded(address indexed moduleAddr, bytes4[] selectors) -func (_Registry *RegistryFilterer) ParseModuleAdded(log types.Log) (*RegistryModuleAdded, error) { - event := new(RegistryModuleAdded) - if err := _Registry.contract.UnpackLog(event, "ModuleAdded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryModuleRemovedIterator is returned from FilterModuleRemoved and is used to iterate over the raw logs and unpacked data for ModuleRemoved events raised by the Registry contract. -type RegistryModuleRemovedIterator struct { - Event *RegistryModuleRemoved // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryModuleRemovedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryModuleRemoved) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryModuleRemoved) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryModuleRemovedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryModuleRemovedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryModuleRemoved represents a ModuleRemoved event raised by the Registry contract. -type RegistryModuleRemoved struct { - ModuleAddr common.Address - Selectors [][4]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterModuleRemoved is a free log retrieval operation binding the contract event 0x7c3eb4f9083f75cbed2bd3f703e24b4bbcb77d345d3c50945f3abf3e967755cb. -// -// Solidity: event ModuleRemoved(address indexed moduleAddr, bytes4[] selectors) -func (_Registry *RegistryFilterer) FilterModuleRemoved(opts *bind.FilterOpts, moduleAddr []common.Address) (*RegistryModuleRemovedIterator, error) { - - var moduleAddrRule []interface{} - for _, moduleAddrItem := range moduleAddr { - moduleAddrRule = append(moduleAddrRule, moduleAddrItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "ModuleRemoved", moduleAddrRule) - if err != nil { - return nil, err - } - return &RegistryModuleRemovedIterator{contract: _Registry.contract, event: "ModuleRemoved", logs: logs, sub: sub}, nil -} - -// WatchModuleRemoved is a free log subscription operation binding the contract event 0x7c3eb4f9083f75cbed2bd3f703e24b4bbcb77d345d3c50945f3abf3e967755cb. -// -// Solidity: event ModuleRemoved(address indexed moduleAddr, bytes4[] selectors) -func (_Registry *RegistryFilterer) WatchModuleRemoved(opts *bind.WatchOpts, sink chan<- *RegistryModuleRemoved, moduleAddr []common.Address) (event.Subscription, error) { - - var moduleAddrRule []interface{} - for _, moduleAddrItem := range moduleAddr { - moduleAddrRule = append(moduleAddrRule, moduleAddrItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "ModuleRemoved", moduleAddrRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryModuleRemoved) - if err := _Registry.contract.UnpackLog(event, "ModuleRemoved", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseModuleRemoved is a log parse operation binding the contract event 0x7c3eb4f9083f75cbed2bd3f703e24b4bbcb77d345d3c50945f3abf3e967755cb. -// -// Solidity: event ModuleRemoved(address indexed moduleAddr, bytes4[] selectors) -func (_Registry *RegistryFilterer) ParseModuleRemoved(log types.Log) (*RegistryModuleRemoved, error) { - event := new(RegistryModuleRemoved) - if err := _Registry.contract.UnpackLog(event, "ModuleRemoved", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryModuleUpdatedIterator is returned from FilterModuleUpdated and is used to iterate over the raw logs and unpacked data for ModuleUpdated events raised by the Registry contract. -type RegistryModuleUpdatedIterator struct { - Event *RegistryModuleUpdated // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryModuleUpdatedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryModuleUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryModuleUpdated) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryModuleUpdatedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryModuleUpdatedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryModuleUpdated represents a ModuleUpdated event raised by the Registry contract. -type RegistryModuleUpdated struct { - OldImplementation common.Address - NewImplementation common.Address - OldSelectors [][4]byte - NewSelectors [][4]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterModuleUpdated is a free log retrieval operation binding the contract event 0xa062c2c046aa14dc9284b13bde77061cb034f0aa820f20057af6b164651eaa08. -// -// Solidity: event ModuleUpdated(address indexed oldImplementation, address indexed newImplementation, bytes4[] oldSelectors, bytes4[] newSelectors) -func (_Registry *RegistryFilterer) FilterModuleUpdated(opts *bind.FilterOpts, oldImplementation []common.Address, newImplementation []common.Address) (*RegistryModuleUpdatedIterator, error) { - - var oldImplementationRule []interface{} - for _, oldImplementationItem := range oldImplementation { - oldImplementationRule = append(oldImplementationRule, oldImplementationItem) - } - var newImplementationRule []interface{} - for _, newImplementationItem := range newImplementation { - newImplementationRule = append(newImplementationRule, newImplementationItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "ModuleUpdated", oldImplementationRule, newImplementationRule) - if err != nil { - return nil, err - } - return &RegistryModuleUpdatedIterator{contract: _Registry.contract, event: "ModuleUpdated", logs: logs, sub: sub}, nil -} - -// WatchModuleUpdated is a free log subscription operation binding the contract event 0xa062c2c046aa14dc9284b13bde77061cb034f0aa820f20057af6b164651eaa08. -// -// Solidity: event ModuleUpdated(address indexed oldImplementation, address indexed newImplementation, bytes4[] oldSelectors, bytes4[] newSelectors) -func (_Registry *RegistryFilterer) WatchModuleUpdated(opts *bind.WatchOpts, sink chan<- *RegistryModuleUpdated, oldImplementation []common.Address, newImplementation []common.Address) (event.Subscription, error) { - - var oldImplementationRule []interface{} - for _, oldImplementationItem := range oldImplementation { - oldImplementationRule = append(oldImplementationRule, oldImplementationItem) - } - var newImplementationRule []interface{} - for _, newImplementationItem := range newImplementation { - newImplementationRule = append(newImplementationRule, newImplementationItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "ModuleUpdated", oldImplementationRule, newImplementationRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryModuleUpdated) - if err := _Registry.contract.UnpackLog(event, "ModuleUpdated", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseModuleUpdated is a log parse operation binding the contract event 0xa062c2c046aa14dc9284b13bde77061cb034f0aa820f20057af6b164651eaa08. -// -// Solidity: event ModuleUpdated(address indexed oldImplementation, address indexed newImplementation, bytes4[] oldSelectors, bytes4[] newSelectors) -func (_Registry *RegistryFilterer) ParseModuleUpdated(log types.Log) (*RegistryModuleUpdated, error) { - event := new(RegistryModuleUpdated) - if err := _Registry.contract.UnpackLog(event, "ModuleUpdated", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryOperationCostSetIterator is returned from FilterOperationCostSet and is used to iterate over the raw logs and unpacked data for OperationCostSet events raised by the Registry contract. -type RegistryOperationCostSetIterator struct { - Event *RegistryOperationCostSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryOperationCostSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryOperationCostSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryOperationCostSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryOperationCostSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryOperationCostSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryOperationCostSet represents a OperationCostSet event raised by the Registry contract. -type RegistryOperationCostSet struct { - Operation [32]byte - Cost *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOperationCostSet is a free log retrieval operation binding the contract event 0x2f2e341f7af8c198c5fe4136f45dee9ed56441686b2357204a9d440c12c4f6af. -// -// Solidity: event OperationCostSet(bytes32 operation, uint256 cost) -func (_Registry *RegistryFilterer) FilterOperationCostSet(opts *bind.FilterOpts) (*RegistryOperationCostSetIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "OperationCostSet") - if err != nil { - return nil, err - } - return &RegistryOperationCostSetIterator{contract: _Registry.contract, event: "OperationCostSet", logs: logs, sub: sub}, nil -} - -// WatchOperationCostSet is a free log subscription operation binding the contract event 0x2f2e341f7af8c198c5fe4136f45dee9ed56441686b2357204a9d440c12c4f6af. -// -// Solidity: event OperationCostSet(bytes32 operation, uint256 cost) -func (_Registry *RegistryFilterer) WatchOperationCostSet(opts *bind.WatchOpts, sink chan<- *RegistryOperationCostSet) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "OperationCostSet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryOperationCostSet) - if err := _Registry.contract.UnpackLog(event, "OperationCostSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOperationCostSet is a log parse operation binding the contract event 0x2f2e341f7af8c198c5fe4136f45dee9ed56441686b2357204a9d440c12c4f6af. -// -// Solidity: event OperationCostSet(bytes32 operation, uint256 cost) -func (_Registry *RegistryFilterer) ParseOperationCostSet(log types.Log) (*RegistryOperationCostSet, error) { - event := new(RegistryOperationCostSet) - if err := _Registry.contract.UnpackLog(event, "OperationCostSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the Registry contract. -type RegistryRoleAdminChangedIterator struct { - Event *RegistryRoleAdminChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryRoleAdminChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryRoleAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryRoleAdminChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryRoleAdminChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryRoleAdminChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryRoleAdminChanged represents a RoleAdminChanged event raised by the Registry contract. -type RegistryRoleAdminChanged struct { - Role [32]byte - PreviousAdminRole [32]byte - NewAdminRole [32]byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_Registry *RegistryFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*RegistryRoleAdminChangedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - if err != nil { - return nil, err - } - return &RegistryRoleAdminChangedIterator{contract: _Registry.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil -} - -// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_Registry *RegistryFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *RegistryRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var previousAdminRoleRule []interface{} - for _, previousAdminRoleItem := range previousAdminRole { - previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem) - } - var newAdminRoleRule []interface{} - for _, newAdminRoleItem := range newAdminRole { - newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryRoleAdminChanged) - if err := _Registry.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. -// -// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) -func (_Registry *RegistryFilterer) ParseRoleAdminChanged(log types.Log) (*RegistryRoleAdminChanged, error) { - event := new(RegistryRoleAdminChanged) - if err := _Registry.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the Registry contract. -type RegistryRoleGrantedIterator struct { - Event *RegistryRoleGranted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryRoleGrantedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryRoleGranted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryRoleGranted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryRoleGrantedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryRoleGrantedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryRoleGranted represents a RoleGranted event raised by the Registry contract. -type RegistryRoleGranted struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_Registry *RegistryFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*RegistryRoleGrantedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &RegistryRoleGrantedIterator{contract: _Registry.contract, event: "RoleGranted", logs: logs, sub: sub}, nil -} - -// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_Registry *RegistryFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *RegistryRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryRoleGranted) - if err := _Registry.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d. -// -// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender) -func (_Registry *RegistryFilterer) ParseRoleGranted(log types.Log) (*RegistryRoleGranted, error) { - event := new(RegistryRoleGranted) - if err := _Registry.contract.UnpackLog(event, "RoleGranted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the Registry contract. -type RegistryRoleRevokedIterator struct { - Event *RegistryRoleRevoked // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryRoleRevokedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryRoleRevoked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryRoleRevoked) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryRoleRevokedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryRoleRevokedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryRoleRevoked represents a RoleRevoked event raised by the Registry contract. -type RegistryRoleRevoked struct { - Role [32]byte - Account common.Address - Sender common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_Registry *RegistryFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*RegistryRoleRevokedIterator, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return &RegistryRoleRevokedIterator{contract: _Registry.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil -} - -// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_Registry *RegistryFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *RegistryRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) { - - var roleRule []interface{} - for _, roleItem := range role { - roleRule = append(roleRule, roleItem) - } - var accountRule []interface{} - for _, accountItem := range account { - accountRule = append(accountRule, accountItem) - } - var senderRule []interface{} - for _, senderItem := range sender { - senderRule = append(senderRule, senderItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryRoleRevoked) - if err := _Registry.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b. -// -// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender) -func (_Registry *RegistryFilterer) ParseRoleRevoked(log types.Log) (*RegistryRoleRevoked, error) { - event := new(RegistryRoleRevoked) - if err := _Registry.contract.UnpackLog(event, "RoleRevoked", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryStreamRegistrySetIterator is returned from FilterStreamRegistrySet and is used to iterate over the raw logs and unpacked data for StreamRegistrySet events raised by the Registry contract. -type RegistryStreamRegistrySetIterator struct { - Event *RegistryStreamRegistrySet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryStreamRegistrySetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryStreamRegistrySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryStreamRegistrySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryStreamRegistrySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryStreamRegistrySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryStreamRegistrySet represents a StreamRegistrySet event raised by the Registry contract. -type RegistryStreamRegistrySet struct { - StreamRegistry common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterStreamRegistrySet is a free log retrieval operation binding the contract event 0x42d068f44efba28cc4aa260e8fd67e7d93abf8215c8a61b4dbbc3eaf0ab39f56. -// -// Solidity: event StreamRegistrySet(address streamRegistry) -func (_Registry *RegistryFilterer) FilterStreamRegistrySet(opts *bind.FilterOpts) (*RegistryStreamRegistrySetIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "StreamRegistrySet") - if err != nil { - return nil, err - } - return &RegistryStreamRegistrySetIterator{contract: _Registry.contract, event: "StreamRegistrySet", logs: logs, sub: sub}, nil -} - -// WatchStreamRegistrySet is a free log subscription operation binding the contract event 0x42d068f44efba28cc4aa260e8fd67e7d93abf8215c8a61b4dbbc3eaf0ab39f56. -// -// Solidity: event StreamRegistrySet(address streamRegistry) -func (_Registry *RegistryFilterer) WatchStreamRegistrySet(opts *bind.WatchOpts, sink chan<- *RegistryStreamRegistrySet) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "StreamRegistrySet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryStreamRegistrySet) - if err := _Registry.contract.UnpackLog(event, "StreamRegistrySet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseStreamRegistrySet is a log parse operation binding the contract event 0x42d068f44efba28cc4aa260e8fd67e7d93abf8215c8a61b4dbbc3eaf0ab39f56. -// -// Solidity: event StreamRegistrySet(address streamRegistry) -func (_Registry *RegistryFilterer) ParseStreamRegistrySet(log types.Log) (*RegistryStreamRegistrySet, error) { - event := new(RegistryStreamRegistrySet) - if err := _Registry.contract.UnpackLog(event, "StreamRegistrySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistrySubscribedToVehicleStreamIterator is returned from FilterSubscribedToVehicleStream and is used to iterate over the raw logs and unpacked data for SubscribedToVehicleStream events raised by the Registry contract. -type RegistrySubscribedToVehicleStreamIterator struct { - Event *RegistrySubscribedToVehicleStream // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistrySubscribedToVehicleStreamIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistrySubscribedToVehicleStream) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistrySubscribedToVehicleStream) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistrySubscribedToVehicleStreamIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistrySubscribedToVehicleStreamIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistrySubscribedToVehicleStream represents a SubscribedToVehicleStream event raised by the Registry contract. -type RegistrySubscribedToVehicleStream struct { - StreamId string - Subscriber common.Address - ExpirationTime *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSubscribedToVehicleStream is a free log retrieval operation binding the contract event 0x316c96770fe2528453ad15ac8843953cbc659399f006200f7d61fe124720d607. -// -// Solidity: event SubscribedToVehicleStream(string streamId, address indexed subscriber, uint256 expirationTime) -func (_Registry *RegistryFilterer) FilterSubscribedToVehicleStream(opts *bind.FilterOpts, subscriber []common.Address) (*RegistrySubscribedToVehicleStreamIterator, error) { - - var subscriberRule []interface{} - for _, subscriberItem := range subscriber { - subscriberRule = append(subscriberRule, subscriberItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "SubscribedToVehicleStream", subscriberRule) - if err != nil { - return nil, err - } - return &RegistrySubscribedToVehicleStreamIterator{contract: _Registry.contract, event: "SubscribedToVehicleStream", logs: logs, sub: sub}, nil -} - -// WatchSubscribedToVehicleStream is a free log subscription operation binding the contract event 0x316c96770fe2528453ad15ac8843953cbc659399f006200f7d61fe124720d607. -// -// Solidity: event SubscribedToVehicleStream(string streamId, address indexed subscriber, uint256 expirationTime) -func (_Registry *RegistryFilterer) WatchSubscribedToVehicleStream(opts *bind.WatchOpts, sink chan<- *RegistrySubscribedToVehicleStream, subscriber []common.Address) (event.Subscription, error) { - - var subscriberRule []interface{} - for _, subscriberItem := range subscriber { - subscriberRule = append(subscriberRule, subscriberItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "SubscribedToVehicleStream", subscriberRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistrySubscribedToVehicleStream) - if err := _Registry.contract.UnpackLog(event, "SubscribedToVehicleStream", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSubscribedToVehicleStream is a log parse operation binding the contract event 0x316c96770fe2528453ad15ac8843953cbc659399f006200f7d61fe124720d607. -// -// Solidity: event SubscribedToVehicleStream(string streamId, address indexed subscriber, uint256 expirationTime) -func (_Registry *RegistryFilterer) ParseSubscribedToVehicleStream(log types.Log) (*RegistrySubscribedToVehicleStream, error) { - event := new(RegistrySubscribedToVehicleStream) - if err := _Registry.contract.UnpackLog(event, "SubscribedToVehicleStream", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistrySyntheticDeviceAttributeAddedIterator is returned from FilterSyntheticDeviceAttributeAdded and is used to iterate over the raw logs and unpacked data for SyntheticDeviceAttributeAdded events raised by the Registry contract. -type RegistrySyntheticDeviceAttributeAddedIterator struct { - Event *RegistrySyntheticDeviceAttributeAdded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistrySyntheticDeviceAttributeAddedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceAttributeAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceAttributeAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistrySyntheticDeviceAttributeAddedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistrySyntheticDeviceAttributeAddedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistrySyntheticDeviceAttributeAdded represents a SyntheticDeviceAttributeAdded event raised by the Registry contract. -type RegistrySyntheticDeviceAttributeAdded struct { - Attribute string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSyntheticDeviceAttributeAdded is a free log retrieval operation binding the contract event 0x6e358be27e6aade9d45fb0b4de4cf68e2dc5630108c30a699ad5cc954d6d05c5. -// -// Solidity: event SyntheticDeviceAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) FilterSyntheticDeviceAttributeAdded(opts *bind.FilterOpts) (*RegistrySyntheticDeviceAttributeAddedIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "SyntheticDeviceAttributeAdded") - if err != nil { - return nil, err - } - return &RegistrySyntheticDeviceAttributeAddedIterator{contract: _Registry.contract, event: "SyntheticDeviceAttributeAdded", logs: logs, sub: sub}, nil -} - -// WatchSyntheticDeviceAttributeAdded is a free log subscription operation binding the contract event 0x6e358be27e6aade9d45fb0b4de4cf68e2dc5630108c30a699ad5cc954d6d05c5. -// -// Solidity: event SyntheticDeviceAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) WatchSyntheticDeviceAttributeAdded(opts *bind.WatchOpts, sink chan<- *RegistrySyntheticDeviceAttributeAdded) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "SyntheticDeviceAttributeAdded") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistrySyntheticDeviceAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceAttributeAdded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSyntheticDeviceAttributeAdded is a log parse operation binding the contract event 0x6e358be27e6aade9d45fb0b4de4cf68e2dc5630108c30a699ad5cc954d6d05c5. -// -// Solidity: event SyntheticDeviceAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) ParseSyntheticDeviceAttributeAdded(log types.Log) (*RegistrySyntheticDeviceAttributeAdded, error) { - event := new(RegistrySyntheticDeviceAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceAttributeAdded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistrySyntheticDeviceAttributeSetIterator is returned from FilterSyntheticDeviceAttributeSet and is used to iterate over the raw logs and unpacked data for SyntheticDeviceAttributeSet events raised by the Registry contract. -type RegistrySyntheticDeviceAttributeSetIterator struct { - Event *RegistrySyntheticDeviceAttributeSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistrySyntheticDeviceAttributeSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceAttributeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceAttributeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistrySyntheticDeviceAttributeSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistrySyntheticDeviceAttributeSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistrySyntheticDeviceAttributeSet represents a SyntheticDeviceAttributeSet event raised by the Registry contract. -type RegistrySyntheticDeviceAttributeSet struct { - TokenId *big.Int - Attribute string - Info string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSyntheticDeviceAttributeSet is a free log retrieval operation binding the contract event 0xe89d3dc758bde24a2e62ff9b8b2e7e099d7d181ca58160bce0f3fd4939da0dd1. -// -// Solidity: event SyntheticDeviceAttributeSet(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) FilterSyntheticDeviceAttributeSet(opts *bind.FilterOpts, tokenId []*big.Int) (*RegistrySyntheticDeviceAttributeSetIterator, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "SyntheticDeviceAttributeSet", tokenIdRule) - if err != nil { - return nil, err - } - return &RegistrySyntheticDeviceAttributeSetIterator{contract: _Registry.contract, event: "SyntheticDeviceAttributeSet", logs: logs, sub: sub}, nil -} - -// WatchSyntheticDeviceAttributeSet is a free log subscription operation binding the contract event 0xe89d3dc758bde24a2e62ff9b8b2e7e099d7d181ca58160bce0f3fd4939da0dd1. -// -// Solidity: event SyntheticDeviceAttributeSet(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) WatchSyntheticDeviceAttributeSet(opts *bind.WatchOpts, sink chan<- *RegistrySyntheticDeviceAttributeSet, tokenId []*big.Int) (event.Subscription, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "SyntheticDeviceAttributeSet", tokenIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistrySyntheticDeviceAttributeSet) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceAttributeSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSyntheticDeviceAttributeSet is a log parse operation binding the contract event 0xe89d3dc758bde24a2e62ff9b8b2e7e099d7d181ca58160bce0f3fd4939da0dd1. -// -// Solidity: event SyntheticDeviceAttributeSet(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) ParseSyntheticDeviceAttributeSet(log types.Log) (*RegistrySyntheticDeviceAttributeSet, error) { - event := new(RegistrySyntheticDeviceAttributeSet) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceAttributeSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistrySyntheticDeviceAttributeSetDevAdminIterator is returned from FilterSyntheticDeviceAttributeSetDevAdmin and is used to iterate over the raw logs and unpacked data for SyntheticDeviceAttributeSetDevAdmin events raised by the Registry contract. -type RegistrySyntheticDeviceAttributeSetDevAdminIterator struct { - Event *RegistrySyntheticDeviceAttributeSetDevAdmin // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistrySyntheticDeviceAttributeSetDevAdminIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceAttributeSetDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceAttributeSetDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistrySyntheticDeviceAttributeSetDevAdminIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistrySyntheticDeviceAttributeSetDevAdminIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistrySyntheticDeviceAttributeSetDevAdmin represents a SyntheticDeviceAttributeSetDevAdmin event raised by the Registry contract. -type RegistrySyntheticDeviceAttributeSetDevAdmin struct { - TokenId *big.Int - Attribute string - Info string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSyntheticDeviceAttributeSetDevAdmin is a free log retrieval operation binding the contract event 0x8ad1818721bed7b9d8f765123a04baa9895dbe02ebfa9c7e886e207ee43f4360. -// -// Solidity: event SyntheticDeviceAttributeSetDevAdmin(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) FilterSyntheticDeviceAttributeSetDevAdmin(opts *bind.FilterOpts, tokenId []*big.Int) (*RegistrySyntheticDeviceAttributeSetDevAdminIterator, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "SyntheticDeviceAttributeSetDevAdmin", tokenIdRule) - if err != nil { - return nil, err - } - return &RegistrySyntheticDeviceAttributeSetDevAdminIterator{contract: _Registry.contract, event: "SyntheticDeviceAttributeSetDevAdmin", logs: logs, sub: sub}, nil -} - -// WatchSyntheticDeviceAttributeSetDevAdmin is a free log subscription operation binding the contract event 0x8ad1818721bed7b9d8f765123a04baa9895dbe02ebfa9c7e886e207ee43f4360. -// -// Solidity: event SyntheticDeviceAttributeSetDevAdmin(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) WatchSyntheticDeviceAttributeSetDevAdmin(opts *bind.WatchOpts, sink chan<- *RegistrySyntheticDeviceAttributeSetDevAdmin, tokenId []*big.Int) (event.Subscription, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "SyntheticDeviceAttributeSetDevAdmin", tokenIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistrySyntheticDeviceAttributeSetDevAdmin) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceAttributeSetDevAdmin", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSyntheticDeviceAttributeSetDevAdmin is a log parse operation binding the contract event 0x8ad1818721bed7b9d8f765123a04baa9895dbe02ebfa9c7e886e207ee43f4360. -// -// Solidity: event SyntheticDeviceAttributeSetDevAdmin(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) ParseSyntheticDeviceAttributeSetDevAdmin(log types.Log) (*RegistrySyntheticDeviceAttributeSetDevAdmin, error) { - event := new(RegistrySyntheticDeviceAttributeSetDevAdmin) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceAttributeSetDevAdmin", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistrySyntheticDeviceIdProxySetIterator is returned from FilterSyntheticDeviceIdProxySet and is used to iterate over the raw logs and unpacked data for SyntheticDeviceIdProxySet events raised by the Registry contract. -type RegistrySyntheticDeviceIdProxySetIterator struct { - Event *RegistrySyntheticDeviceIdProxySet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistrySyntheticDeviceIdProxySetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistrySyntheticDeviceIdProxySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistrySyntheticDeviceIdProxySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistrySyntheticDeviceIdProxySet represents a SyntheticDeviceIdProxySet event raised by the Registry contract. -type RegistrySyntheticDeviceIdProxySet struct { - Proxy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSyntheticDeviceIdProxySet is a free log retrieval operation binding the contract event 0x03f4b74ae931497684aeebcd1d5bdf812118bbabca14f32f5d58a226534485da. -// -// Solidity: event SyntheticDeviceIdProxySet(address proxy) -func (_Registry *RegistryFilterer) FilterSyntheticDeviceIdProxySet(opts *bind.FilterOpts) (*RegistrySyntheticDeviceIdProxySetIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "SyntheticDeviceIdProxySet") - if err != nil { - return nil, err - } - return &RegistrySyntheticDeviceIdProxySetIterator{contract: _Registry.contract, event: "SyntheticDeviceIdProxySet", logs: logs, sub: sub}, nil -} - -// WatchSyntheticDeviceIdProxySet is a free log subscription operation binding the contract event 0x03f4b74ae931497684aeebcd1d5bdf812118bbabca14f32f5d58a226534485da. -// -// Solidity: event SyntheticDeviceIdProxySet(address proxy) -func (_Registry *RegistryFilterer) WatchSyntheticDeviceIdProxySet(opts *bind.WatchOpts, sink chan<- *RegistrySyntheticDeviceIdProxySet) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "SyntheticDeviceIdProxySet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistrySyntheticDeviceIdProxySet) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceIdProxySet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSyntheticDeviceIdProxySet is a log parse operation binding the contract event 0x03f4b74ae931497684aeebcd1d5bdf812118bbabca14f32f5d58a226534485da. -// -// Solidity: event SyntheticDeviceIdProxySet(address proxy) -func (_Registry *RegistryFilterer) ParseSyntheticDeviceIdProxySet(log types.Log) (*RegistrySyntheticDeviceIdProxySet, error) { - event := new(RegistrySyntheticDeviceIdProxySet) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceIdProxySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistrySyntheticDeviceNodeBurnedIterator is returned from FilterSyntheticDeviceNodeBurned and is used to iterate over the raw logs and unpacked data for SyntheticDeviceNodeBurned events raised by the Registry contract. -type RegistrySyntheticDeviceNodeBurnedIterator struct { - Event *RegistrySyntheticDeviceNodeBurned // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistrySyntheticDeviceNodeBurnedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceNodeBurned) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceNodeBurned) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistrySyntheticDeviceNodeBurnedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistrySyntheticDeviceNodeBurnedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistrySyntheticDeviceNodeBurned represents a SyntheticDeviceNodeBurned event raised by the Registry contract. -type RegistrySyntheticDeviceNodeBurned struct { - SyntheticDeviceNode *big.Int - VehicleNode *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSyntheticDeviceNodeBurned is a free log retrieval operation binding the contract event 0xe4edc3c1f917608d486e02df63af34158f185b78cef44615aebee26c09064122. -// -// Solidity: event SyntheticDeviceNodeBurned(uint256 indexed syntheticDeviceNode, uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) FilterSyntheticDeviceNodeBurned(opts *bind.FilterOpts, syntheticDeviceNode []*big.Int, vehicleNode []*big.Int, owner []common.Address) (*RegistrySyntheticDeviceNodeBurnedIterator, error) { - - var syntheticDeviceNodeRule []interface{} - for _, syntheticDeviceNodeItem := range syntheticDeviceNode { - syntheticDeviceNodeRule = append(syntheticDeviceNodeRule, syntheticDeviceNodeItem) - } - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "SyntheticDeviceNodeBurned", syntheticDeviceNodeRule, vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistrySyntheticDeviceNodeBurnedIterator{contract: _Registry.contract, event: "SyntheticDeviceNodeBurned", logs: logs, sub: sub}, nil -} - -// WatchSyntheticDeviceNodeBurned is a free log subscription operation binding the contract event 0xe4edc3c1f917608d486e02df63af34158f185b78cef44615aebee26c09064122. -// -// Solidity: event SyntheticDeviceNodeBurned(uint256 indexed syntheticDeviceNode, uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) WatchSyntheticDeviceNodeBurned(opts *bind.WatchOpts, sink chan<- *RegistrySyntheticDeviceNodeBurned, syntheticDeviceNode []*big.Int, vehicleNode []*big.Int, owner []common.Address) (event.Subscription, error) { - - var syntheticDeviceNodeRule []interface{} - for _, syntheticDeviceNodeItem := range syntheticDeviceNode { - syntheticDeviceNodeRule = append(syntheticDeviceNodeRule, syntheticDeviceNodeItem) - } - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "SyntheticDeviceNodeBurned", syntheticDeviceNodeRule, vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistrySyntheticDeviceNodeBurned) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceNodeBurned", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSyntheticDeviceNodeBurned is a log parse operation binding the contract event 0xe4edc3c1f917608d486e02df63af34158f185b78cef44615aebee26c09064122. -// -// Solidity: event SyntheticDeviceNodeBurned(uint256 indexed syntheticDeviceNode, uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) ParseSyntheticDeviceNodeBurned(log types.Log) (*RegistrySyntheticDeviceNodeBurned, error) { - event := new(RegistrySyntheticDeviceNodeBurned) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceNodeBurned", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistrySyntheticDeviceNodeBurnedDevAdminIterator is returned from FilterSyntheticDeviceNodeBurnedDevAdmin and is used to iterate over the raw logs and unpacked data for SyntheticDeviceNodeBurnedDevAdmin events raised by the Registry contract. -type RegistrySyntheticDeviceNodeBurnedDevAdminIterator struct { - Event *RegistrySyntheticDeviceNodeBurnedDevAdmin // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistrySyntheticDeviceNodeBurnedDevAdminIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceNodeBurnedDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceNodeBurnedDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistrySyntheticDeviceNodeBurnedDevAdminIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistrySyntheticDeviceNodeBurnedDevAdminIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistrySyntheticDeviceNodeBurnedDevAdmin represents a SyntheticDeviceNodeBurnedDevAdmin event raised by the Registry contract. -type RegistrySyntheticDeviceNodeBurnedDevAdmin struct { - SyntheticDeviceNode *big.Int - VehicleNode *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSyntheticDeviceNodeBurnedDevAdmin is a free log retrieval operation binding the contract event 0x81741fdd73b815709bc61e67c1aeb3a0baa2afb920b26347eab2f4f980595cd4. -// -// Solidity: event SyntheticDeviceNodeBurnedDevAdmin(uint256 indexed syntheticDeviceNode, uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) FilterSyntheticDeviceNodeBurnedDevAdmin(opts *bind.FilterOpts, syntheticDeviceNode []*big.Int, vehicleNode []*big.Int, owner []common.Address) (*RegistrySyntheticDeviceNodeBurnedDevAdminIterator, error) { - - var syntheticDeviceNodeRule []interface{} - for _, syntheticDeviceNodeItem := range syntheticDeviceNode { - syntheticDeviceNodeRule = append(syntheticDeviceNodeRule, syntheticDeviceNodeItem) - } - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "SyntheticDeviceNodeBurnedDevAdmin", syntheticDeviceNodeRule, vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistrySyntheticDeviceNodeBurnedDevAdminIterator{contract: _Registry.contract, event: "SyntheticDeviceNodeBurnedDevAdmin", logs: logs, sub: sub}, nil -} - -// WatchSyntheticDeviceNodeBurnedDevAdmin is a free log subscription operation binding the contract event 0x81741fdd73b815709bc61e67c1aeb3a0baa2afb920b26347eab2f4f980595cd4. -// -// Solidity: event SyntheticDeviceNodeBurnedDevAdmin(uint256 indexed syntheticDeviceNode, uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) WatchSyntheticDeviceNodeBurnedDevAdmin(opts *bind.WatchOpts, sink chan<- *RegistrySyntheticDeviceNodeBurnedDevAdmin, syntheticDeviceNode []*big.Int, vehicleNode []*big.Int, owner []common.Address) (event.Subscription, error) { - - var syntheticDeviceNodeRule []interface{} - for _, syntheticDeviceNodeItem := range syntheticDeviceNode { - syntheticDeviceNodeRule = append(syntheticDeviceNodeRule, syntheticDeviceNodeItem) - } - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "SyntheticDeviceNodeBurnedDevAdmin", syntheticDeviceNodeRule, vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistrySyntheticDeviceNodeBurnedDevAdmin) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceNodeBurnedDevAdmin", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSyntheticDeviceNodeBurnedDevAdmin is a log parse operation binding the contract event 0x81741fdd73b815709bc61e67c1aeb3a0baa2afb920b26347eab2f4f980595cd4. -// -// Solidity: event SyntheticDeviceNodeBurnedDevAdmin(uint256 indexed syntheticDeviceNode, uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) ParseSyntheticDeviceNodeBurnedDevAdmin(log types.Log) (*RegistrySyntheticDeviceNodeBurnedDevAdmin, error) { - event := new(RegistrySyntheticDeviceNodeBurnedDevAdmin) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceNodeBurnedDevAdmin", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistrySyntheticDeviceNodeMintedIterator is returned from FilterSyntheticDeviceNodeMinted and is used to iterate over the raw logs and unpacked data for SyntheticDeviceNodeMinted events raised by the Registry contract. -type RegistrySyntheticDeviceNodeMintedIterator struct { - Event *RegistrySyntheticDeviceNodeMinted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistrySyntheticDeviceNodeMintedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistrySyntheticDeviceNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistrySyntheticDeviceNodeMintedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistrySyntheticDeviceNodeMintedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistrySyntheticDeviceNodeMinted represents a SyntheticDeviceNodeMinted event raised by the Registry contract. -type RegistrySyntheticDeviceNodeMinted struct { - IntegrationNode *big.Int - SyntheticDeviceNode *big.Int - VehicleNode *big.Int - SyntheticDeviceAddress common.Address - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterSyntheticDeviceNodeMinted is a free log retrieval operation binding the contract event 0x5a560c1adda92bd6cbf9c891dc38e9e2973b7963493f2364caa40a4218346280. -// -// Solidity: event SyntheticDeviceNodeMinted(uint256 integrationNode, uint256 syntheticDeviceNode, uint256 indexed vehicleNode, address indexed syntheticDeviceAddress, address indexed owner) -func (_Registry *RegistryFilterer) FilterSyntheticDeviceNodeMinted(opts *bind.FilterOpts, vehicleNode []*big.Int, syntheticDeviceAddress []common.Address, owner []common.Address) (*RegistrySyntheticDeviceNodeMintedIterator, error) { - - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var syntheticDeviceAddressRule []interface{} - for _, syntheticDeviceAddressItem := range syntheticDeviceAddress { - syntheticDeviceAddressRule = append(syntheticDeviceAddressRule, syntheticDeviceAddressItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "SyntheticDeviceNodeMinted", vehicleNodeRule, syntheticDeviceAddressRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistrySyntheticDeviceNodeMintedIterator{contract: _Registry.contract, event: "SyntheticDeviceNodeMinted", logs: logs, sub: sub}, nil -} - -// WatchSyntheticDeviceNodeMinted is a free log subscription operation binding the contract event 0x5a560c1adda92bd6cbf9c891dc38e9e2973b7963493f2364caa40a4218346280. -// -// Solidity: event SyntheticDeviceNodeMinted(uint256 integrationNode, uint256 syntheticDeviceNode, uint256 indexed vehicleNode, address indexed syntheticDeviceAddress, address indexed owner) -func (_Registry *RegistryFilterer) WatchSyntheticDeviceNodeMinted(opts *bind.WatchOpts, sink chan<- *RegistrySyntheticDeviceNodeMinted, vehicleNode []*big.Int, syntheticDeviceAddress []common.Address, owner []common.Address) (event.Subscription, error) { - - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var syntheticDeviceAddressRule []interface{} - for _, syntheticDeviceAddressItem := range syntheticDeviceAddress { - syntheticDeviceAddressRule = append(syntheticDeviceAddressRule, syntheticDeviceAddressItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "SyntheticDeviceNodeMinted", vehicleNodeRule, syntheticDeviceAddressRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistrySyntheticDeviceNodeMinted) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceNodeMinted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseSyntheticDeviceNodeMinted is a log parse operation binding the contract event 0x5a560c1adda92bd6cbf9c891dc38e9e2973b7963493f2364caa40a4218346280. -// -// Solidity: event SyntheticDeviceNodeMinted(uint256 integrationNode, uint256 syntheticDeviceNode, uint256 indexed vehicleNode, address indexed syntheticDeviceAddress, address indexed owner) -func (_Registry *RegistryFilterer) ParseSyntheticDeviceNodeMinted(log types.Log) (*RegistrySyntheticDeviceNodeMinted, error) { - event := new(RegistrySyntheticDeviceNodeMinted) - if err := _Registry.contract.UnpackLog(event, "SyntheticDeviceNodeMinted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleAttributeAddedIterator is returned from FilterVehicleAttributeAdded and is used to iterate over the raw logs and unpacked data for VehicleAttributeAdded events raised by the Registry contract. -type RegistryVehicleAttributeAddedIterator struct { - Event *RegistryVehicleAttributeAdded // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleAttributeAddedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeAdded) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleAttributeAddedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleAttributeAddedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleAttributeAdded represents a VehicleAttributeAdded event raised by the Registry contract. -type RegistryVehicleAttributeAdded struct { - Attribute string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleAttributeAdded is a free log retrieval operation binding the contract event 0x2b7d41dc33ffd58029f53ebfc3232e4f343480b078458bc17c527583e0172c1a. -// -// Solidity: event VehicleAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) FilterVehicleAttributeAdded(opts *bind.FilterOpts) (*RegistryVehicleAttributeAddedIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleAttributeAdded") - if err != nil { - return nil, err - } - return &RegistryVehicleAttributeAddedIterator{contract: _Registry.contract, event: "VehicleAttributeAdded", logs: logs, sub: sub}, nil -} - -// WatchVehicleAttributeAdded is a free log subscription operation binding the contract event 0x2b7d41dc33ffd58029f53ebfc3232e4f343480b078458bc17c527583e0172c1a. -// -// Solidity: event VehicleAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) WatchVehicleAttributeAdded(opts *bind.WatchOpts, sink chan<- *RegistryVehicleAttributeAdded) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleAttributeAdded") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeAdded", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleAttributeAdded is a log parse operation binding the contract event 0x2b7d41dc33ffd58029f53ebfc3232e4f343480b078458bc17c527583e0172c1a. -// -// Solidity: event VehicleAttributeAdded(string attribute) -func (_Registry *RegistryFilterer) ParseVehicleAttributeAdded(log types.Log) (*RegistryVehicleAttributeAdded, error) { - event := new(RegistryVehicleAttributeAdded) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeAdded", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleAttributeRemovedIterator is returned from FilterVehicleAttributeRemoved and is used to iterate over the raw logs and unpacked data for VehicleAttributeRemoved events raised by the Registry contract. -type RegistryVehicleAttributeRemovedIterator struct { - Event *RegistryVehicleAttributeRemoved // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleAttributeRemovedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeRemoved) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeRemoved) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleAttributeRemovedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleAttributeRemovedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleAttributeRemoved represents a VehicleAttributeRemoved event raised by the Registry contract. -type RegistryVehicleAttributeRemoved struct { - Attribute string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleAttributeRemoved is a free log retrieval operation binding the contract event 0x9b4bf3774d4e97d237196fc2a2d3f0764f4a7987c5a5db94f029cc8357f72b45. -// -// Solidity: event VehicleAttributeRemoved(string attribute) -func (_Registry *RegistryFilterer) FilterVehicleAttributeRemoved(opts *bind.FilterOpts) (*RegistryVehicleAttributeRemovedIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleAttributeRemoved") - if err != nil { - return nil, err - } - return &RegistryVehicleAttributeRemovedIterator{contract: _Registry.contract, event: "VehicleAttributeRemoved", logs: logs, sub: sub}, nil -} - -// WatchVehicleAttributeRemoved is a free log subscription operation binding the contract event 0x9b4bf3774d4e97d237196fc2a2d3f0764f4a7987c5a5db94f029cc8357f72b45. -// -// Solidity: event VehicleAttributeRemoved(string attribute) -func (_Registry *RegistryFilterer) WatchVehicleAttributeRemoved(opts *bind.WatchOpts, sink chan<- *RegistryVehicleAttributeRemoved) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleAttributeRemoved") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleAttributeRemoved) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeRemoved", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleAttributeRemoved is a log parse operation binding the contract event 0x9b4bf3774d4e97d237196fc2a2d3f0764f4a7987c5a5db94f029cc8357f72b45. -// -// Solidity: event VehicleAttributeRemoved(string attribute) -func (_Registry *RegistryFilterer) ParseVehicleAttributeRemoved(log types.Log) (*RegistryVehicleAttributeRemoved, error) { - event := new(RegistryVehicleAttributeRemoved) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeRemoved", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleAttributeSetIterator is returned from FilterVehicleAttributeSet and is used to iterate over the raw logs and unpacked data for VehicleAttributeSet events raised by the Registry contract. -type RegistryVehicleAttributeSetIterator struct { - Event *RegistryVehicleAttributeSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleAttributeSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleAttributeSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleAttributeSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleAttributeSet represents a VehicleAttributeSet event raised by the Registry contract. -type RegistryVehicleAttributeSet struct { - TokenId *big.Int - Attribute string - Info string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleAttributeSet is a free log retrieval operation binding the contract event 0x3a259e5d4c53f11c343582a8291a82a8cc0b36ec211d5ab48c2f29ebb068e5fb. -// -// Solidity: event VehicleAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) FilterVehicleAttributeSet(opts *bind.FilterOpts) (*RegistryVehicleAttributeSetIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleAttributeSet") - if err != nil { - return nil, err - } - return &RegistryVehicleAttributeSetIterator{contract: _Registry.contract, event: "VehicleAttributeSet", logs: logs, sub: sub}, nil -} - -// WatchVehicleAttributeSet is a free log subscription operation binding the contract event 0x3a259e5d4c53f11c343582a8291a82a8cc0b36ec211d5ab48c2f29ebb068e5fb. -// -// Solidity: event VehicleAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) WatchVehicleAttributeSet(opts *bind.WatchOpts, sink chan<- *RegistryVehicleAttributeSet) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleAttributeSet") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleAttributeSet) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleAttributeSet is a log parse operation binding the contract event 0x3a259e5d4c53f11c343582a8291a82a8cc0b36ec211d5ab48c2f29ebb068e5fb. -// -// Solidity: event VehicleAttributeSet(uint256 tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) ParseVehicleAttributeSet(log types.Log) (*RegistryVehicleAttributeSet, error) { - event := new(RegistryVehicleAttributeSet) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleAttributeSetDevAdminIterator is returned from FilterVehicleAttributeSetDevAdmin and is used to iterate over the raw logs and unpacked data for VehicleAttributeSetDevAdmin events raised by the Registry contract. -type RegistryVehicleAttributeSetDevAdminIterator struct { - Event *RegistryVehicleAttributeSetDevAdmin // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleAttributeSetDevAdminIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeSetDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleAttributeSetDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleAttributeSetDevAdminIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleAttributeSetDevAdminIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleAttributeSetDevAdmin represents a VehicleAttributeSetDevAdmin event raised by the Registry contract. -type RegistryVehicleAttributeSetDevAdmin struct { - TokenId *big.Int - Attribute string - Info string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleAttributeSetDevAdmin is a free log retrieval operation binding the contract event 0x1d91e00c26e65ad33a7ff60138cf8250090a290b59ec754323b9f5e6be929896. -// -// Solidity: event VehicleAttributeSetDevAdmin(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) FilterVehicleAttributeSetDevAdmin(opts *bind.FilterOpts, tokenId []*big.Int) (*RegistryVehicleAttributeSetDevAdminIterator, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleAttributeSetDevAdmin", tokenIdRule) - if err != nil { - return nil, err - } - return &RegistryVehicleAttributeSetDevAdminIterator{contract: _Registry.contract, event: "VehicleAttributeSetDevAdmin", logs: logs, sub: sub}, nil -} - -// WatchVehicleAttributeSetDevAdmin is a free log subscription operation binding the contract event 0x1d91e00c26e65ad33a7ff60138cf8250090a290b59ec754323b9f5e6be929896. -// -// Solidity: event VehicleAttributeSetDevAdmin(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) WatchVehicleAttributeSetDevAdmin(opts *bind.WatchOpts, sink chan<- *RegistryVehicleAttributeSetDevAdmin, tokenId []*big.Int) (event.Subscription, error) { - - var tokenIdRule []interface{} - for _, tokenIdItem := range tokenId { - tokenIdRule = append(tokenIdRule, tokenIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleAttributeSetDevAdmin", tokenIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleAttributeSetDevAdmin) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeSetDevAdmin", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleAttributeSetDevAdmin is a log parse operation binding the contract event 0x1d91e00c26e65ad33a7ff60138cf8250090a290b59ec754323b9f5e6be929896. -// -// Solidity: event VehicleAttributeSetDevAdmin(uint256 indexed tokenId, string attribute, string info) -func (_Registry *RegistryFilterer) ParseVehicleAttributeSetDevAdmin(log types.Log) (*RegistryVehicleAttributeSetDevAdmin, error) { - event := new(RegistryVehicleAttributeSetDevAdmin) - if err := _Registry.contract.UnpackLog(event, "VehicleAttributeSetDevAdmin", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleIdProxySetIterator is returned from FilterVehicleIdProxySet and is used to iterate over the raw logs and unpacked data for VehicleIdProxySet events raised by the Registry contract. -type RegistryVehicleIdProxySetIterator struct { - Event *RegistryVehicleIdProxySet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleIdProxySetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleIdProxySet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleIdProxySetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleIdProxySetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleIdProxySet represents a VehicleIdProxySet event raised by the Registry contract. -type RegistryVehicleIdProxySet struct { - Proxy common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleIdProxySet is a free log retrieval operation binding the contract event 0x3e7484c4e57f7d92e9f02eba6cd805d89112e48db8c21aeb8485fcf0020e479d. -// -// Solidity: event VehicleIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) FilterVehicleIdProxySet(opts *bind.FilterOpts, proxy []common.Address) (*RegistryVehicleIdProxySetIterator, error) { - - var proxyRule []interface{} - for _, proxyItem := range proxy { - proxyRule = append(proxyRule, proxyItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleIdProxySet", proxyRule) - if err != nil { - return nil, err - } - return &RegistryVehicleIdProxySetIterator{contract: _Registry.contract, event: "VehicleIdProxySet", logs: logs, sub: sub}, nil -} - -// WatchVehicleIdProxySet is a free log subscription operation binding the contract event 0x3e7484c4e57f7d92e9f02eba6cd805d89112e48db8c21aeb8485fcf0020e479d. -// -// Solidity: event VehicleIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) WatchVehicleIdProxySet(opts *bind.WatchOpts, sink chan<- *RegistryVehicleIdProxySet, proxy []common.Address) (event.Subscription, error) { - - var proxyRule []interface{} - for _, proxyItem := range proxy { - proxyRule = append(proxyRule, proxyItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleIdProxySet", proxyRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleIdProxySet) - if err := _Registry.contract.UnpackLog(event, "VehicleIdProxySet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleIdProxySet is a log parse operation binding the contract event 0x3e7484c4e57f7d92e9f02eba6cd805d89112e48db8c21aeb8485fcf0020e479d. -// -// Solidity: event VehicleIdProxySet(address indexed proxy) -func (_Registry *RegistryFilterer) ParseVehicleIdProxySet(log types.Log) (*RegistryVehicleIdProxySet, error) { - event := new(RegistryVehicleIdProxySet) - if err := _Registry.contract.UnpackLog(event, "VehicleIdProxySet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleNodeBurnedIterator is returned from FilterVehicleNodeBurned and is used to iterate over the raw logs and unpacked data for VehicleNodeBurned events raised by the Registry contract. -type RegistryVehicleNodeBurnedIterator struct { - Event *RegistryVehicleNodeBurned // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleNodeBurnedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeBurned) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeBurned) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleNodeBurnedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleNodeBurnedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleNodeBurned represents a VehicleNodeBurned event raised by the Registry contract. -type RegistryVehicleNodeBurned struct { - VehicleNode *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleNodeBurned is a free log retrieval operation binding the contract event 0x7b36384f0fcf18da09247269a4716eecbcbc475a5b2bc7aa371fc1164789508d. -// -// Solidity: event VehicleNodeBurned(uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) FilterVehicleNodeBurned(opts *bind.FilterOpts, vehicleNode []*big.Int, owner []common.Address) (*RegistryVehicleNodeBurnedIterator, error) { - - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleNodeBurned", vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistryVehicleNodeBurnedIterator{contract: _Registry.contract, event: "VehicleNodeBurned", logs: logs, sub: sub}, nil -} - -// WatchVehicleNodeBurned is a free log subscription operation binding the contract event 0x7b36384f0fcf18da09247269a4716eecbcbc475a5b2bc7aa371fc1164789508d. -// -// Solidity: event VehicleNodeBurned(uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) WatchVehicleNodeBurned(opts *bind.WatchOpts, sink chan<- *RegistryVehicleNodeBurned, vehicleNode []*big.Int, owner []common.Address) (event.Subscription, error) { - - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleNodeBurned", vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleNodeBurned) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeBurned", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleNodeBurned is a log parse operation binding the contract event 0x7b36384f0fcf18da09247269a4716eecbcbc475a5b2bc7aa371fc1164789508d. -// -// Solidity: event VehicleNodeBurned(uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) ParseVehicleNodeBurned(log types.Log) (*RegistryVehicleNodeBurned, error) { - event := new(RegistryVehicleNodeBurned) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeBurned", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleNodeBurnedDevAdminIterator is returned from FilterVehicleNodeBurnedDevAdmin and is used to iterate over the raw logs and unpacked data for VehicleNodeBurnedDevAdmin events raised by the Registry contract. -type RegistryVehicleNodeBurnedDevAdminIterator struct { - Event *RegistryVehicleNodeBurnedDevAdmin // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleNodeBurnedDevAdminIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeBurnedDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeBurnedDevAdmin) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleNodeBurnedDevAdminIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleNodeBurnedDevAdminIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleNodeBurnedDevAdmin represents a VehicleNodeBurnedDevAdmin event raised by the Registry contract. -type RegistryVehicleNodeBurnedDevAdmin struct { - VehicleNode *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleNodeBurnedDevAdmin is a free log retrieval operation binding the contract event 0xb956d02723efc0f9c3b60b95271d0b2c35628307c1f98a8f4c9a7f521d9dd0ff. -// -// Solidity: event VehicleNodeBurnedDevAdmin(uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) FilterVehicleNodeBurnedDevAdmin(opts *bind.FilterOpts, vehicleNode []*big.Int, owner []common.Address) (*RegistryVehicleNodeBurnedDevAdminIterator, error) { - - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleNodeBurnedDevAdmin", vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistryVehicleNodeBurnedDevAdminIterator{contract: _Registry.contract, event: "VehicleNodeBurnedDevAdmin", logs: logs, sub: sub}, nil -} - -// WatchVehicleNodeBurnedDevAdmin is a free log subscription operation binding the contract event 0xb956d02723efc0f9c3b60b95271d0b2c35628307c1f98a8f4c9a7f521d9dd0ff. -// -// Solidity: event VehicleNodeBurnedDevAdmin(uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) WatchVehicleNodeBurnedDevAdmin(opts *bind.WatchOpts, sink chan<- *RegistryVehicleNodeBurnedDevAdmin, vehicleNode []*big.Int, owner []common.Address) (event.Subscription, error) { - - var vehicleNodeRule []interface{} - for _, vehicleNodeItem := range vehicleNode { - vehicleNodeRule = append(vehicleNodeRule, vehicleNodeItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleNodeBurnedDevAdmin", vehicleNodeRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleNodeBurnedDevAdmin) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeBurnedDevAdmin", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleNodeBurnedDevAdmin is a log parse operation binding the contract event 0xb956d02723efc0f9c3b60b95271d0b2c35628307c1f98a8f4c9a7f521d9dd0ff. -// -// Solidity: event VehicleNodeBurnedDevAdmin(uint256 indexed vehicleNode, address indexed owner) -func (_Registry *RegistryFilterer) ParseVehicleNodeBurnedDevAdmin(log types.Log) (*RegistryVehicleNodeBurnedDevAdmin, error) { - event := new(RegistryVehicleNodeBurnedDevAdmin) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeBurnedDevAdmin", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleNodeMintedIterator is returned from FilterVehicleNodeMinted and is used to iterate over the raw logs and unpacked data for VehicleNodeMinted events raised by the Registry contract. -type RegistryVehicleNodeMintedIterator struct { - Event *RegistryVehicleNodeMinted // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleNodeMintedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeMinted) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleNodeMintedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleNodeMintedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleNodeMinted represents a VehicleNodeMinted event raised by the Registry contract. -type RegistryVehicleNodeMinted struct { - ManufacturerNode *big.Int - TokenId *big.Int - Owner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleNodeMinted is a free log retrieval operation binding the contract event 0xd471ae8ab3c01edc986909c344bb50f982b21772fcac173103ef8b9924375ec6. -// -// Solidity: event VehicleNodeMinted(uint256 manufacturerNode, uint256 tokenId, address owner) -func (_Registry *RegistryFilterer) FilterVehicleNodeMinted(opts *bind.FilterOpts) (*RegistryVehicleNodeMintedIterator, error) { - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleNodeMinted") - if err != nil { - return nil, err - } - return &RegistryVehicleNodeMintedIterator{contract: _Registry.contract, event: "VehicleNodeMinted", logs: logs, sub: sub}, nil -} - -// WatchVehicleNodeMinted is a free log subscription operation binding the contract event 0xd471ae8ab3c01edc986909c344bb50f982b21772fcac173103ef8b9924375ec6. -// -// Solidity: event VehicleNodeMinted(uint256 manufacturerNode, uint256 tokenId, address owner) -func (_Registry *RegistryFilterer) WatchVehicleNodeMinted(opts *bind.WatchOpts, sink chan<- *RegistryVehicleNodeMinted) (event.Subscription, error) { - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleNodeMinted") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleNodeMinted) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeMinted", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleNodeMinted is a log parse operation binding the contract event 0xd471ae8ab3c01edc986909c344bb50f982b21772fcac173103ef8b9924375ec6. -// -// Solidity: event VehicleNodeMinted(uint256 manufacturerNode, uint256 tokenId, address owner) -func (_Registry *RegistryFilterer) ParseVehicleNodeMinted(log types.Log) (*RegistryVehicleNodeMinted, error) { - event := new(RegistryVehicleNodeMinted) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeMinted", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleNodeMintedWithDeviceDefinitionIterator is returned from FilterVehicleNodeMintedWithDeviceDefinition and is used to iterate over the raw logs and unpacked data for VehicleNodeMintedWithDeviceDefinition events raised by the Registry contract. -type RegistryVehicleNodeMintedWithDeviceDefinitionIterator struct { - Event *RegistryVehicleNodeMintedWithDeviceDefinition // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleNodeMintedWithDeviceDefinitionIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeMintedWithDeviceDefinition) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleNodeMintedWithDeviceDefinition) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleNodeMintedWithDeviceDefinitionIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleNodeMintedWithDeviceDefinitionIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleNodeMintedWithDeviceDefinition represents a VehicleNodeMintedWithDeviceDefinition event raised by the Registry contract. -type RegistryVehicleNodeMintedWithDeviceDefinition struct { - ManufacturerId *big.Int - VehicleId *big.Int - Owner common.Address - DeviceDefinitionId string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleNodeMintedWithDeviceDefinition is a free log retrieval operation binding the contract event 0xc7c7d9ac150ee7eff1ae17be6e6c250d9f574d019d47cd741f693feb1929496c. -// -// Solidity: event VehicleNodeMintedWithDeviceDefinition(uint256 indexed manufacturerId, uint256 indexed vehicleId, address indexed owner, string deviceDefinitionId) -func (_Registry *RegistryFilterer) FilterVehicleNodeMintedWithDeviceDefinition(opts *bind.FilterOpts, manufacturerId []*big.Int, vehicleId []*big.Int, owner []common.Address) (*RegistryVehicleNodeMintedWithDeviceDefinitionIterator, error) { - - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - var vehicleIdRule []interface{} - for _, vehicleIdItem := range vehicleId { - vehicleIdRule = append(vehicleIdRule, vehicleIdItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleNodeMintedWithDeviceDefinition", manufacturerIdRule, vehicleIdRule, ownerRule) - if err != nil { - return nil, err - } - return &RegistryVehicleNodeMintedWithDeviceDefinitionIterator{contract: _Registry.contract, event: "VehicleNodeMintedWithDeviceDefinition", logs: logs, sub: sub}, nil -} - -// WatchVehicleNodeMintedWithDeviceDefinition is a free log subscription operation binding the contract event 0xc7c7d9ac150ee7eff1ae17be6e6c250d9f574d019d47cd741f693feb1929496c. -// -// Solidity: event VehicleNodeMintedWithDeviceDefinition(uint256 indexed manufacturerId, uint256 indexed vehicleId, address indexed owner, string deviceDefinitionId) -func (_Registry *RegistryFilterer) WatchVehicleNodeMintedWithDeviceDefinition(opts *bind.WatchOpts, sink chan<- *RegistryVehicleNodeMintedWithDeviceDefinition, manufacturerId []*big.Int, vehicleId []*big.Int, owner []common.Address) (event.Subscription, error) { - - var manufacturerIdRule []interface{} - for _, manufacturerIdItem := range manufacturerId { - manufacturerIdRule = append(manufacturerIdRule, manufacturerIdItem) - } - var vehicleIdRule []interface{} - for _, vehicleIdItem := range vehicleId { - vehicleIdRule = append(vehicleIdRule, vehicleIdItem) - } - var ownerRule []interface{} - for _, ownerItem := range owner { - ownerRule = append(ownerRule, ownerItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleNodeMintedWithDeviceDefinition", manufacturerIdRule, vehicleIdRule, ownerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleNodeMintedWithDeviceDefinition) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeMintedWithDeviceDefinition", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleNodeMintedWithDeviceDefinition is a log parse operation binding the contract event 0xc7c7d9ac150ee7eff1ae17be6e6c250d9f574d019d47cd741f693feb1929496c. -// -// Solidity: event VehicleNodeMintedWithDeviceDefinition(uint256 indexed manufacturerId, uint256 indexed vehicleId, address indexed owner, string deviceDefinitionId) -func (_Registry *RegistryFilterer) ParseVehicleNodeMintedWithDeviceDefinition(log types.Log) (*RegistryVehicleNodeMintedWithDeviceDefinition, error) { - event := new(RegistryVehicleNodeMintedWithDeviceDefinition) - if err := _Registry.contract.UnpackLog(event, "VehicleNodeMintedWithDeviceDefinition", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleStreamSetIterator is returned from FilterVehicleStreamSet and is used to iterate over the raw logs and unpacked data for VehicleStreamSet events raised by the Registry contract. -type RegistryVehicleStreamSetIterator struct { - Event *RegistryVehicleStreamSet // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleStreamSetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleStreamSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleStreamSet) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleStreamSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleStreamSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleStreamSet represents a VehicleStreamSet event raised by the Registry contract. -type RegistryVehicleStreamSet struct { - VehicleId *big.Int - StreamId string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleStreamSet is a free log retrieval operation binding the contract event 0x09d0a7809cb7d90906448d57618581b65ca306d116e2b991721b9ef877d890de. -// -// Solidity: event VehicleStreamSet(uint256 indexed vehicleId, string streamId) -func (_Registry *RegistryFilterer) FilterVehicleStreamSet(opts *bind.FilterOpts, vehicleId []*big.Int) (*RegistryVehicleStreamSetIterator, error) { - - var vehicleIdRule []interface{} - for _, vehicleIdItem := range vehicleId { - vehicleIdRule = append(vehicleIdRule, vehicleIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleStreamSet", vehicleIdRule) - if err != nil { - return nil, err - } - return &RegistryVehicleStreamSetIterator{contract: _Registry.contract, event: "VehicleStreamSet", logs: logs, sub: sub}, nil -} - -// WatchVehicleStreamSet is a free log subscription operation binding the contract event 0x09d0a7809cb7d90906448d57618581b65ca306d116e2b991721b9ef877d890de. -// -// Solidity: event VehicleStreamSet(uint256 indexed vehicleId, string streamId) -func (_Registry *RegistryFilterer) WatchVehicleStreamSet(opts *bind.WatchOpts, sink chan<- *RegistryVehicleStreamSet, vehicleId []*big.Int) (event.Subscription, error) { - - var vehicleIdRule []interface{} - for _, vehicleIdItem := range vehicleId { - vehicleIdRule = append(vehicleIdRule, vehicleIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleStreamSet", vehicleIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleStreamSet) - if err := _Registry.contract.UnpackLog(event, "VehicleStreamSet", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleStreamSet is a log parse operation binding the contract event 0x09d0a7809cb7d90906448d57618581b65ca306d116e2b991721b9ef877d890de. -// -// Solidity: event VehicleStreamSet(uint256 indexed vehicleId, string streamId) -func (_Registry *RegistryFilterer) ParseVehicleStreamSet(log types.Log) (*RegistryVehicleStreamSet, error) { - event := new(RegistryVehicleStreamSet) - if err := _Registry.contract.UnpackLog(event, "VehicleStreamSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// RegistryVehicleStreamUnsetIterator is returned from FilterVehicleStreamUnset and is used to iterate over the raw logs and unpacked data for VehicleStreamUnset events raised by the Registry contract. -type RegistryVehicleStreamUnsetIterator struct { - Event *RegistryVehicleStreamUnset // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RegistryVehicleStreamUnsetIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleStreamUnset) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RegistryVehicleStreamUnset) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RegistryVehicleStreamUnsetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RegistryVehicleStreamUnsetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RegistryVehicleStreamUnset represents a VehicleStreamUnset event raised by the Registry contract. -type RegistryVehicleStreamUnset struct { - VehicleId *big.Int - StreamId string - Raw types.Log // Blockchain specific contextual infos -} - -// FilterVehicleStreamUnset is a free log retrieval operation binding the contract event 0x14692607635062a59787a92503915f7eca22e88b9bb3474438d0b393ad0ecf0d. -// -// Solidity: event VehicleStreamUnset(uint256 indexed vehicleId, string streamId) -func (_Registry *RegistryFilterer) FilterVehicleStreamUnset(opts *bind.FilterOpts, vehicleId []*big.Int) (*RegistryVehicleStreamUnsetIterator, error) { - - var vehicleIdRule []interface{} - for _, vehicleIdItem := range vehicleId { - vehicleIdRule = append(vehicleIdRule, vehicleIdItem) - } - - logs, sub, err := _Registry.contract.FilterLogs(opts, "VehicleStreamUnset", vehicleIdRule) - if err != nil { - return nil, err - } - return &RegistryVehicleStreamUnsetIterator{contract: _Registry.contract, event: "VehicleStreamUnset", logs: logs, sub: sub}, nil -} - -// WatchVehicleStreamUnset is a free log subscription operation binding the contract event 0x14692607635062a59787a92503915f7eca22e88b9bb3474438d0b393ad0ecf0d. -// -// Solidity: event VehicleStreamUnset(uint256 indexed vehicleId, string streamId) -func (_Registry *RegistryFilterer) WatchVehicleStreamUnset(opts *bind.WatchOpts, sink chan<- *RegistryVehicleStreamUnset, vehicleId []*big.Int) (event.Subscription, error) { - - var vehicleIdRule []interface{} - for _, vehicleIdItem := range vehicleId { - vehicleIdRule = append(vehicleIdRule, vehicleIdItem) - } - - logs, sub, err := _Registry.contract.WatchLogs(opts, "VehicleStreamUnset", vehicleIdRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RegistryVehicleStreamUnset) - if err := _Registry.contract.UnpackLog(event, "VehicleStreamUnset", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseVehicleStreamUnset is a log parse operation binding the contract event 0x14692607635062a59787a92503915f7eca22e88b9bb3474438d0b393ad0ecf0d. -// -// Solidity: event VehicleStreamUnset(uint256 indexed vehicleId, string streamId) -func (_Registry *RegistryFilterer) ParseVehicleStreamUnset(log types.Log) (*RegistryVehicleStreamUnset, error) { - event := new(RegistryVehicleStreamUnset) - if err := _Registry.contract.UnpackLog(event, "VehicleStreamUnset", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/internal/core/commands/create_dd.go b/internal/core/commands/create_dd.go index e7f8b30c..3b97225b 100644 --- a/internal/core/commands/create_dd.go +++ b/internal/core/commands/create_dd.go @@ -48,7 +48,7 @@ type CreateDeviceDefinitionCommandResult struct { func (*CreateDeviceDefinitionCommand) Key() string { return "CreateDeviceDefinitionCommand" } type CreateDeviceDefinitionCommandHandler struct { - onChainSvc gateways.DeviceDefinitionOnChainService + catalogSvc gateways.DeviceDefinitionCatalogService dbs func() *db.ReaderWriter powerTrainTypeService services.PowerTrainTypeService fuelAPI gateways.FuelAPIService @@ -56,9 +56,9 @@ type CreateDeviceDefinitionCommandHandler struct { identity gateways.IdentityAPI } -func NewCreateDeviceDefinitionCommandHandler(onChainSvc gateways.DeviceDefinitionOnChainService, dbs func() *db.ReaderWriter, +func NewCreateDeviceDefinitionCommandHandler(catalogSvc gateways.DeviceDefinitionCatalogService, dbs func() *db.ReaderWriter, powerTrainTypeService services.PowerTrainTypeService, fuelAPI gateways.FuelAPIService, logger *zerolog.Logger, identity gateways.IdentityAPI) CreateDeviceDefinitionCommandHandler { - return CreateDeviceDefinitionCommandHandler{onChainSvc: onChainSvc, dbs: dbs, + return CreateDeviceDefinitionCommandHandler{catalogSvc: catalogSvc, dbs: dbs, powerTrainTypeService: powerTrainTypeService, fuelAPI: fuelAPI, logger: logger, identity: identity} @@ -138,7 +138,7 @@ func (ch CreateDeviceDefinitionCommandHandler) Handle(ctx context.Context, query Metadata: common.ConvertDeviceTypeAttrsToDefinitionMetadata(command.DeviceAttributes), } - create, err := ch.onChainSvc.Create(ctx, command.Make, ddTbl) + create, err := ch.catalogSvc.Create(ctx, command.Make, ddTbl) if err != nil { return nil, err // todo does mediator eat this error? } diff --git a/internal/core/common/utils.go b/internal/core/common/utils.go index 1740011d..bdd29695 100644 --- a/internal/core/common/utils.go +++ b/internal/core/common/utils.go @@ -3,7 +3,6 @@ package common import ( "encoding/json" "fmt" - "net/http" "strings" coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models" @@ -299,31 +298,6 @@ func DeviceDefinitionSlug(makeSlug, modelSlug string, year int16) string { return fmt.Sprintf("%s_%s_%d", makeSlug, modelSlugCleaned, year) } -func CheckTransactionStatus(txHash, apiKey string, useAmoy bool) (bool, error) { - baseURL := "https://api.polygonscan.com" - if useAmoy { - baseURL = "https://amoy.polygonscan.com" - } - url := fmt.Sprintf("%s/api?module=transaction&action=gettxreceiptstatus&txhash=%s&apikey=%s", baseURL, txHash, apiKey) - - resp, err := http.Get(url) - if err != nil { - return false, err - } - defer resp.Body.Close() - - var txStatus TxStatusResponse - if err := json.NewDecoder(resp.Body).Decode(&txStatus); err != nil { - return false, err - } - - // Check the transaction status - if txStatus.Status == "1" && txStatus.Result.Status == "1" { - return true, nil - } - return false, nil -} - func ConvertMetadataToDeviceAttributes(metadata *coremodels.DeviceDefinitionMetadata) []coremodels.DeviceTypeAttributeEditor { // Depending on your types, you might have to perform additional conversion logic. // Here we're simply returning the metadata as-is for assignment, but if your diff --git a/internal/core/models/device_definition_models.go b/internal/core/models/device_definition_models.go index 5f6946c9..36a6d58d 100644 --- a/internal/core/models/device_definition_models.go +++ b/internal/core/models/device_definition_models.go @@ -107,6 +107,15 @@ type DeviceDefinitionTablelandModel struct { Metadata *DeviceDefinitionMetadata `json:"metadata"` } +// DeviceDefinitionUpdateInput carries partial updates applied through the definitions-worker. +type DeviceDefinitionUpdateInput struct { + ID string + Metadata *DeviceDefinitionMetadata + KSUID string + DeviceType string + ImageURI string +} + // DeviceDefinitionMetadata part of tableland DD: includes a list of device-specific attributes. type DeviceDefinitionMetadata struct { DeviceAttributes []DeviceTypeAttribute `json:"device_attributes"` diff --git a/internal/core/queries/decode_vin.go b/internal/core/queries/decode_vin.go index 7546ede6..754a2a6c 100644 --- a/internal/core/queries/decode_vin.go +++ b/internal/core/queries/decode_vin.go @@ -40,7 +40,7 @@ type DecodeVINQueryHandler struct { vinRepository repositories.VINRepository fuelAPIService gateways.FuelAPIService powerTrainTypeService services.PowerTrainTypeService - deviceDefinitionOnChainService gateways.DeviceDefinitionOnChainService + deviceDefinitionCatalogService gateways.DeviceDefinitionCatalogService identity gateways.IdentityAPI } @@ -58,7 +58,7 @@ func NewDecodeVINQueryHandler(dbs func() *db.ReaderWriter, vinDecodingService se logger *zerolog.Logger, fuelAPIService gateways.FuelAPIService, powerTrainTypeService services.PowerTrainTypeService, - deviceDefinitionOnChainService gateways.DeviceDefinitionOnChainService, + deviceDefinitionCatalogService gateways.DeviceDefinitionCatalogService, identity gateways.IdentityAPI) DecodeVINQueryHandler { return DecodeVINQueryHandler{ dbs: dbs, @@ -67,7 +67,7 @@ func NewDecodeVINQueryHandler(dbs func() *db.ReaderWriter, vinDecodingService se vinRepository: vinRepository, fuelAPIService: fuelAPIService, powerTrainTypeService: powerTrainTypeService, - deviceDefinitionOnChainService: deviceDefinitionOnChainService, + deviceDefinitionCatalogService: deviceDefinitionCatalogService, identity: identity, } } @@ -211,13 +211,13 @@ func (dc DecodeVINQueryHandler) Handle(ctx context.Context, query *DecodeVINQuer tid := common.DeviceDefinitionSlug(stringutils.SlugString(vinInfo.Make), modelSlug, int16(vinInfo.Year)) resp.DefinitionId = tid - tblDef, _, errTbl := dc.deviceDefinitionOnChainService.GetDefinitionByID(ctx, tid) + tblDef, _, errTbl := dc.deviceDefinitionCatalogService.GetDefinitionByID(ctx, tid) if errTbl != nil { - dc.logger.Warn().Err(errTbl).Msgf("failed to get definition from tableland for vinObj: %s, id: %s", vinObj.String(), tid) + dc.logger.Warn().Err(errTbl).Msgf("failed to get definition from catalog for vinObj: %s, id: %s", vinObj.String(), tid) } else if tblDef == nil { - dc.logger.Warn().Msgf("failed to get definition from tableland for vinObj: %s, id: %s", vinObj.String(), tid) + dc.logger.Warn().Msgf("failed to get definition from catalog for vinObj: %s, id: %s", vinObj.String(), tid) } else { - dc.logger.Info().Str(logfields.VIN, vinObj.String()).Msgf("found definition from tableland %s: %+v", tid, tblDef) + dc.logger.Info().Str(logfields.VIN, vinObj.String()).Msgf("found definition from catalog %s: %+v", tid, tblDef) } // add images if we don't have any for this definition_id @@ -255,7 +255,11 @@ func (dc DecodeVINQueryHandler) Handle(ctx context.Context, query *DecodeVINQuer // todo load up some metadata from what was decoded. Powertrain too md := resolveMetadataFromInfo(resp.Powertrain, vinInfo) - trx, err := dc.deviceDefinitionOnChainService.Create(ctx, resp.Manufacturer, coremodels.DeviceDefinitionTablelandModel{ + // The id comes back in DefinitionId; NewTrxHash stays empty because + // definitions are no longer written on-chain and there is no + // transaction. Putting the slug here would hand a "0x..." consumer a + // value that is not a hash. + _, err = dc.deviceDefinitionCatalogService.Create(ctx, resp.Manufacturer, coremodels.DeviceDefinitionTablelandModel{ ID: tid, KSUID: ksuid.New().String(), Model: resp.Model, @@ -266,9 +270,8 @@ func (dc DecodeVINQueryHandler) Handle(ctx context.Context, query *DecodeVINQuer }) if err != nil { metrics.InternalError.With(prometheus.Labels{"method": VinErrors}).Inc() - return nil, errors.Wrap(err, "error creating new device definition on-chain from decoded vinObj") + return nil, errors.Wrap(err, "error creating new device definition from decoded vinObj") } - resp.NewTrxHash = *trx } // match style - only process style if name is longer than 1 @@ -320,7 +323,7 @@ func (dc DecodeVINQueryHandler) hydrateResponseFromVinNumber(vn *models.VinNumbe // call on-chain svc to get the DD and pull out the powertrain powertrain := "" // this is what we're trying to resolve in part trx := "" - tblDef, manufID, err := dc.deviceDefinitionOnChainService.GetDefinitionByID(context.Background(), vn.DefinitionID) + tblDef, manufID, err := dc.deviceDefinitionCatalogService.GetDefinitionByID(context.Background(), vn.DefinitionID) if err == nil && tblDef != nil { if tblDef.Metadata != nil { for _, attribute := range tblDef.Metadata.DeviceAttributes { @@ -331,7 +334,7 @@ func (dc DecodeVINQueryHandler) hydrateResponseFromVinNumber(vn *models.VinNumbe } } if powertrain == "" { - makeName, _ := dc.deviceDefinitionOnChainService.GetManufacturerNameByID(context.Background(), manufID) + makeName, _ := dc.deviceDefinitionCatalogService.GetManufacturerNameByID(context.Background(), manufID) powertrain, _ = dc.powerTrainTypeService.ResolvePowerTrainType(stringutils.SlugString(makeName), stringutils.SlugString(tblDef.Model), null.JSON{}, null.JSON{}) } } else { @@ -467,7 +470,7 @@ func (dc DecodeVINQueryHandler) vinInfoFromKnown(vin vin.VIN, knownModel string, for _, wmi := range wmis { makeNamesForError += wmi.ManufacturerName + ", " definitionID := common.DeviceDefinitionSlug(stringutils.SlugString(wmi.ManufacturerName), stringutils.SlugString(knownModel), int16(knownYear)) - deviceDefinitionTablelandModel, _, err := dc.deviceDefinitionOnChainService.GetDefinitionByID(context.Background(), definitionID) + deviceDefinitionTablelandModel, _, err := dc.deviceDefinitionCatalogService.GetDefinitionByID(context.Background(), definitionID) if err == nil && deviceDefinitionTablelandModel != nil { vinInfo.Make = wmi.ManufacturerName break diff --git a/internal/core/queries/decode_vin_test.go b/internal/core/queries/decode_vin_test.go index 2ca6b83c..8eb6ab47 100644 --- a/internal/core/queries/decode_vin_test.go +++ b/internal/core/queries/decode_vin_test.go @@ -46,7 +46,7 @@ type DecodeVINQueryHandlerSuite struct { mockVINService *mock_services.MockVINDecodingService mockFuelAPIService *mock_gateways.MockFuelAPIService mockPowerTrainTypeService *mock_services.MockPowerTrainTypeService - mockDeviceDefinitionOnChainService *mock_gateways.MockDeviceDefinitionOnChainService + mockDeviceDefinitionCatalogService *mock_gateways.MockDeviceDefinitionCatalogService queryHandler DecodeVINQueryHandler mockVINRepo *mock_repository.MockVINRepository @@ -66,14 +66,14 @@ func (s *DecodeVINQueryHandlerSuite) SetupTest() { s.mockVINService = mock_services.NewMockVINDecodingService(s.ctrl) s.mockPowerTrainTypeService = mock_services.NewMockPowerTrainTypeService(s.ctrl) - s.mockDeviceDefinitionOnChainService = mock_gateways.NewMockDeviceDefinitionOnChainService(s.ctrl) + s.mockDeviceDefinitionCatalogService = mock_gateways.NewMockDeviceDefinitionCatalogService(s.ctrl) s.mockFuelAPIService = mock_gateways.NewMockFuelAPIService(s.ctrl) s.mockVINRepo = mock_repository.NewMockVINRepository(s.ctrl) s.mockIdentity = mock_gateways.NewMockIdentityAPI(s.ctrl) s.pdb, s.container = dbtesthelper.StartContainerDatabase(s.ctx, dbName, s.T(), migrationsDirRelPath) - s.queryHandler = NewDecodeVINQueryHandler(s.pdb.DBS, s.mockVINService, s.mockVINRepo, dbtesthelper.Logger(), s.mockFuelAPIService, s.mockPowerTrainTypeService, s.mockDeviceDefinitionOnChainService, s.mockIdentity) + s.queryHandler = NewDecodeVINQueryHandler(s.pdb.DBS, s.mockVINService, s.mockVINRepo, dbtesthelper.Logger(), s.mockFuelAPIService, s.mockPowerTrainTypeService, s.mockDeviceDefinitionCatalogService, s.mockIdentity) } func (s *DecodeVINQueryHandlerSuite) TearDownTest() { @@ -165,7 +165,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_WithExistingDD_UpdatesAt vinExtra := &coremodels.VINDecodingVendorExtra{} s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, vinExtra, nil) s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return("ICE") - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( buildTestTblDD(definitionID, dd.Model, int(dd.Year)), nil, nil) wmiDb := &models.Wmi{ Wmi: vin[:3], @@ -275,14 +275,14 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_CreatesDD_WithMismatchWM vinDecodingInfoData.MetaData = null.JSONFrom(metaData) styleLevelPT := "PHEV" - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( nil, nil, nil) // should return nil b/c doesn't exist vinExtra := &coremodels.VINDecodingVendorExtra{} s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, vinExtra, nil) s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return(styleLevelPT) trxHashHex := "0xa90868fe9364dbf41695b3b87e630f6455cfd63a4711f56b64f631b828c02b35" - s.mockDeviceDefinitionOnChainService.EXPECT().Create(ctx, dmLincoln.Name, gomock.Any()).Return(&trxHashHex, nil) + s.mockDeviceDefinitionCatalogService.EXPECT().Create(ctx, dmLincoln.Name, gomock.Any()).Return(&trxHashHex, nil) image := gateways.FuelImage{ SourceURL: "https://image", @@ -344,7 +344,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_JapanChassisNumber_exist err := vinNumb.Insert(s.ctx, s.pdb.DBS().Writer, boil.Infer()) s.Require().NoError(err) // mock setup for powertrain lookup, which is in the vin decode response - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), dd.ID).Return( + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), dd.ID).Return( &coremodels.DeviceDefinitionTablelandModel{ ID: dd.ID, Model: dd.Model, @@ -428,13 +428,13 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_CreatesDD() { vinDecodingInfoData.MetaData = null.JSONFrom(metaData) styleLevelPT := "PHEV" - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( nil, nil, nil) // should return nil b/c doesn't exist s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil, nil) s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return(styleLevelPT) trxHashHex := "0xa90868fe9364dbf41695b3b87e630f6455cfd63a4711f56b64f631b828c02b35" - s.mockDeviceDefinitionOnChainService.EXPECT().Create(ctx, gomock.Any(), gomock.Any()).Return(&trxHashHex, nil) + s.mockDeviceDefinitionCatalogService.EXPECT().Create(ctx, gomock.Any(), gomock.Any()).Return(&trxHashHex, nil) image := gateways.FuelImage{ SourceURL: "https://image", @@ -545,7 +545,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_WithExistingDD_AndStyleA s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil, nil) s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return("HEV") - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( buildTestTblDD(definitionID, dd.Model, int(dd.Year)), nil, nil) // db setup ds := dbtesthelper.SetupCreateStyle(s.T(), definitionID, buildStyleName(vinInfoResp), "drivly", vinInfoResp.SubModel, s.pdb) @@ -638,7 +638,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_WithExistingWMI() { s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil, nil) s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return("HEV") - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( buildTestTblDD(definitionID, dd.Model, int(dd.Year)), nil, nil) image := gateways.FuelImage{ @@ -690,7 +690,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_TeslaDecode() { s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.TeslaProvider, "USA").Times(1).Return(vinDecodingInfoData, nil, nil) s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo(vinDecodingInfoData.StyleName, vinDecodingInfoData.FuelType).Return("BEV") - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( buildTestTblDD(definitionID, dd.Model, dd.Year), nil, nil) image := gateways.FuelImage{ @@ -747,7 +747,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_WithExistingVINNumber() err = vinNumb.Insert(s.ctx, s.pdb.DBS().Writer, boil.Infer()) s.Require().NoError(err) // mock needed for powertrain lookup - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), dd.ID).Return( + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), dd.ID).Return( &coremodels.DeviceDefinitionTablelandModel{ ID: dd.ID, Model: dd.Model, @@ -786,7 +786,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_InvalidVINYear_AutoIso() definitionID := "ford_escape_2017" s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil, nil) s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo("", "").Return("ICE") // normally this would return "" - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( buildTestTblDD(definitionID, "Escape", 2021), nil, nil) wmiDb := &models.Wmi{ Wmi: vin[:3], @@ -827,7 +827,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_InvalidStyleName_AutoIso definitionID := "ford_escape_2017" s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(vinDecodingInfoData, nil, nil) s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo("1", "").Return("ICE") - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( buildTestTblDD(definitionID, "Escape", 2017), nil, nil) wmiDb := &models.Wmi{ Wmi: vin[:3], @@ -885,7 +885,7 @@ func (s *DecodeVINQueryHandlerSuite) TestHandle_Success_DecodeKnownFallback() { s.mockVINService.EXPECT().GetVIN(ctx, vin, coremodels.AllProviders, "USA").Times(1).Return(nil, nil, fmt.Errorf("unable to decode")) s.mockPowerTrainTypeService.EXPECT().ResolvePowerTrainFromVinInfo("", "").Return("ICE") - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), definitionID).Return( buildTestTblDD(definitionID, "Bronco", 20222), nil, nil) image := gateways.FuelImage{ @@ -980,7 +980,7 @@ func (s *DecodeVINQueryHandlerSuite) TestDecodeVINQueryHandler_vinInfoFromKnown_ // mock call to get definition by id definitionID := "ford_escape_2020" - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), gomock.AnyOf("lincoln_escape_2020", definitionID)).AnyTimes().Return(&coremodels.DeviceDefinitionTablelandModel{ + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), gomock.AnyOf("lincoln_escape_2020", definitionID)).AnyTimes().Return(&coremodels.DeviceDefinitionTablelandModel{ ID: definitionID, KSUID: ksuid.New().String(), Model: "Escape", @@ -989,7 +989,7 @@ func (s *DecodeVINQueryHandlerSuite) TestDecodeVINQueryHandler_vinInfoFromKnown_ ImageURI: "", Metadata: nil, }, nil, nil) - //s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), "lincoln_escape_2020").AnyTimes().Return(nil, nil, fmt.Errorf("not found")) + //s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), "lincoln_escape_2020").AnyTimes().Return(nil, nil, fmt.Errorf("not found")) got, err := s.queryHandler.vinInfoFromKnown(v, "Escape", 2020) require.NoError(s.T(), err) @@ -1037,7 +1037,7 @@ func (s *DecodeVINQueryHandlerSuite) TestDecodeVINQueryHandler_vinInfoFromKnown_ require.NoError(s.T(), err) // mock call to get definition by id definitionID := "ford_escape_2020" - s.mockDeviceDefinitionOnChainService.EXPECT().GetDefinitionByID(gomock.Any(), gomock.AnyOf("lincoln_escape_2020", definitionID)).Times(2).Return(nil, nil, fmt.Errorf("not found")) + s.mockDeviceDefinitionCatalogService.EXPECT().GetDefinitionByID(gomock.Any(), gomock.AnyOf("lincoln_escape_2020", definitionID)).Times(2).Return(nil, nil, fmt.Errorf("not found")) got, err := s.queryHandler.vinInfoFromKnown(v, "Escape", 2020) require.Error(s.T(), err, "vinInfoFromKnown: unable to determine the right OEM between Ford, Lincoln for WMI %s 1FM") diff --git a/internal/core/queries/get_dd_by_id.go b/internal/core/queries/get_dd_by_id.go index 11fe2004..a936d6f1 100644 --- a/internal/core/queries/get_dd_by_id.go +++ b/internal/core/queries/get_dd_by_id.go @@ -19,12 +19,12 @@ func (*GetDeviceDefinitionByIDQuery) Key() string { return "GetDeviceDefinitionB type GetDeviceDefinitionByIDQueryHandler struct { dbs func() *db.ReaderWriter - onChainSvc gateways.DeviceDefinitionOnChainService + catalogSvc gateways.DeviceDefinitionCatalogService } -func NewGetDeviceDefinitionByIDQueryHandler(onChainSvc gateways.DeviceDefinitionOnChainService, dbs func() *db.ReaderWriter) GetDeviceDefinitionByIDQueryHandler { +func NewGetDeviceDefinitionByIDQueryHandler(catalogSvc gateways.DeviceDefinitionCatalogService, dbs func() *db.ReaderWriter) GetDeviceDefinitionByIDQueryHandler { return GetDeviceDefinitionByIDQueryHandler{ - onChainSvc: onChainSvc, + catalogSvc: catalogSvc, dbs: dbs, } } @@ -33,7 +33,7 @@ func (ch GetDeviceDefinitionByIDQueryHandler) Handle(ctx context.Context, query qry := query.(*GetDeviceDefinitionByIDQuery) - dd, _, err := ch.onChainSvc.GetDefinitionByID(ctx, qry.DeviceDefinitionID) + dd, _, err := ch.catalogSvc.GetDefinitionByID(ctx, qry.DeviceDefinitionID) if err != nil { return nil, err diff --git a/internal/core/queries/get_dd_by_id_v2.go b/internal/core/queries/get_dd_by_id_v2.go index fea5882b..80df3d80 100644 --- a/internal/core/queries/get_dd_by_id_v2.go +++ b/internal/core/queries/get_dd_by_id_v2.go @@ -18,13 +18,13 @@ type GetDeviceDefinitionByIDQueryV2 struct { func (*GetDeviceDefinitionByIDQueryV2) Key() string { return "GetDeviceDefinitionByIdQueryV2" } type GetDeviceDefinitionByIDQueryV2Handler struct { - ddOnChainSvc gateways.DeviceDefinitionOnChainService + ddCatalogSvc gateways.DeviceDefinitionCatalogService dbs func() *db.ReaderWriter } -func NewGetDeviceDefinitionByIDQueryV2Handler(ddOnChainSvc gateways.DeviceDefinitionOnChainService, dbs func() *db.ReaderWriter) GetDeviceDefinitionByIDQueryV2Handler { +func NewGetDeviceDefinitionByIDQueryV2Handler(ddCatalogSvc gateways.DeviceDefinitionCatalogService, dbs func() *db.ReaderWriter) GetDeviceDefinitionByIDQueryV2Handler { return GetDeviceDefinitionByIDQueryV2Handler{ - ddOnChainSvc: ddOnChainSvc, + ddCatalogSvc: ddCatalogSvc, dbs: dbs, } } @@ -33,7 +33,7 @@ func (ch GetDeviceDefinitionByIDQueryV2Handler) Handle(ctx context.Context, quer qry := query.(*GetDeviceDefinitionByIDQueryV2) - dd, _, err := ch.ddOnChainSvc.GetDefinitionByID(ctx, qry.DefinitionID) + dd, _, err := ch.ddCatalogSvc.GetDefinitionByID(ctx, qry.DefinitionID) if err != nil { return nil, err diff --git a/internal/core/queries/get_dd_by_make_model_year.go b/internal/core/queries/get_dd_by_make_model_year.go index 45431227..05131604 100644 --- a/internal/core/queries/get_dd_by_make_model_year.go +++ b/internal/core/queries/get_dd_by_make_model_year.go @@ -27,13 +27,13 @@ func (*GetDeviceDefinitionByMakeModelYearQuery) Key() string { type GetDeviceDefinitionByMakeModelYearQueryHandler struct { dbs func() *db.ReaderWriter - onChainSvc gateways.DeviceDefinitionOnChainService + catalogSvc gateways.DeviceDefinitionCatalogService identity gateways.IdentityAPI } -func NewGetDeviceDefinitionByMakeModelYearQueryHandler(onChainSvc gateways.DeviceDefinitionOnChainService, dbs func() *db.ReaderWriter, identity gateways.IdentityAPI) GetDeviceDefinitionByMakeModelYearQueryHandler { +func NewGetDeviceDefinitionByMakeModelYearQueryHandler(catalogSvc gateways.DeviceDefinitionCatalogService, dbs func() *db.ReaderWriter, identity gateways.IdentityAPI) GetDeviceDefinitionByMakeModelYearQueryHandler { return GetDeviceDefinitionByMakeModelYearQueryHandler{ - onChainSvc: onChainSvc, + catalogSvc: catalogSvc, dbs: dbs, identity: identity, } @@ -43,13 +43,13 @@ func (ch GetDeviceDefinitionByMakeModelYearQueryHandler) Handle(ctx context.Cont qry := query.(*GetDeviceDefinitionByMakeModelYearQuery) makeSlug := stringutils.SlugString(qry.Make) - manufacturer, err := ch.onChainSvc.GetManufacturer(makeSlug) + manufacturer, err := ch.catalogSvc.GetManufacturer(makeSlug) if err != nil { return nil, err } manufacturerID := types.NewNullDecimal(decimal.New(int64(manufacturer.TokenID), 0)) - definitions, err := ch.onChainSvc.GetDeviceDefinitions(ctx, manufacturerID, "", qry.Model, qry.Year, 0, 100) + definitions, err := ch.catalogSvc.GetDeviceDefinitions(ctx, manufacturerID, "", qry.Model, qry.Year, 0, 100) if err != nil { return nil, err } diff --git a/internal/core/queries/get_dd_dynamic_filter.go b/internal/core/queries/get_dd_dynamic_filter.go index 213ccc9f..567fb8fb 100644 --- a/internal/core/queries/get_dd_dynamic_filter.go +++ b/internal/core/queries/get_dd_dynamic_filter.go @@ -51,13 +51,13 @@ func (*GetDeviceDefinitionByDynamicFilterQuery) Key() string { type GetDeviceDefinitionByDynamicFilterQueryHandler struct { DBS func() *db.ReaderWriter - onChainSvc gateways.DeviceDefinitionOnChainService + catalogSvc gateways.DeviceDefinitionCatalogService } -func NewGetDeviceDefinitionByDynamicFilterQueryHandler(dbs func() *db.ReaderWriter, onChainSvc gateways.DeviceDefinitionOnChainService) GetDeviceDefinitionByDynamicFilterQueryHandler { +func NewGetDeviceDefinitionByDynamicFilterQueryHandler(dbs func() *db.ReaderWriter, catalogSvc gateways.DeviceDefinitionCatalogService) GetDeviceDefinitionByDynamicFilterQueryHandler { return GetDeviceDefinitionByDynamicFilterQueryHandler{ DBS: dbs, - onChainSvc: onChainSvc, + catalogSvc: catalogSvc, } } @@ -66,7 +66,7 @@ func (ch GetDeviceDefinitionByDynamicFilterQueryHandler) Handle(ctx context.Cont qry := query.(*GetDeviceDefinitionByDynamicFilterQuery) if len(qry.DefinitionID) > 1 { - dd, _, err := ch.onChainSvc.GetDefinitionByID(ctx, qry.DefinitionID) + dd, _, err := ch.catalogSvc.GetDefinitionByID(ctx, qry.DefinitionID) if err != nil { return nil, err } @@ -78,14 +78,14 @@ func (ch GetDeviceDefinitionByDynamicFilterQueryHandler) Handle(ctx context.Cont manufacturerID := types.NullDecimal{} if len(qry.MakeSlug) > 1 { - manufacturer, err := ch.onChainSvc.GetManufacturer(qry.MakeSlug) + manufacturer, err := ch.catalogSvc.GetManufacturer(qry.MakeSlug) if err != nil { return nil, err } manufacturerID = types.NewNullDecimal(decimal.New(int64(manufacturer.TokenID), 0)) } - definitions, err := ch.onChainSvc.GetDeviceDefinitions(ctx, manufacturerID, "", qry.Model, qry.Year, int32(qry.PageIndex), int32(qry.PageSize)) + definitions, err := ch.catalogSvc.GetDeviceDefinitions(ctx, manufacturerID, "", qry.Model, qry.Year, int32(qry.PageIndex), int32(qry.PageSize)) if err != nil { return nil, err } @@ -105,7 +105,7 @@ func (ch GetDeviceDefinitionByDynamicFilterQueryHandler) buildDeviceDefinitionQu } split := strings.Split(dd.ID, "_") manufacturerSlug := split[0] - manufacturer, _ := ch.onChainSvc.GetManufacturer(manufacturerSlug) + manufacturer, _ := ch.catalogSvc.GetManufacturer(manufacturerSlug) mdStr := []byte("{}") if dd.Metadata != nil { mdStr, _ = json.Marshal(dd.Metadata) diff --git a/internal/core/queries/get_ds_by_filter.go b/internal/core/queries/get_ds_by_filter.go index 16efb70a..54d59506 100644 --- a/internal/core/queries/get_ds_by_filter.go +++ b/internal/core/queries/get_ds_by_filter.go @@ -50,7 +50,7 @@ func (ch GetDeviceStyleByFilterQueryHandler) Handle(ctx context.Context, query m } } - response := []coremodels.GetDeviceStyleQueryResult{} + response := make([]coremodels.GetDeviceStyleQueryResult, 0, 1) if style == nil { return response, nil diff --git a/internal/core/queries/get_ds_by_id.go b/internal/core/queries/get_ds_by_id.go index 6b2cf98b..d2162d35 100644 --- a/internal/core/queries/get_ds_by_id.go +++ b/internal/core/queries/get_ds_by_id.go @@ -28,11 +28,11 @@ func (*GetDeviceStyleByIDQuery) Key() string { return "GetDeviceStyleByIDQuery" type GetDeviceStyleByIDQueryHandler struct { DBS func() *db.ReaderWriter - onChainSvc gateways.DeviceDefinitionOnChainService + catalogSvc gateways.DeviceDefinitionCatalogService } -func NewGetDeviceStyleByIDQueryHandler(dbs func() *db.ReaderWriter, onchainSvc gateways.DeviceDefinitionOnChainService) GetDeviceStyleByIDQueryHandler { - return GetDeviceStyleByIDQueryHandler{DBS: dbs, onChainSvc: onchainSvc} +func NewGetDeviceStyleByIDQueryHandler(dbs func() *db.ReaderWriter, onchainSvc gateways.DeviceDefinitionCatalogService) GetDeviceStyleByIDQueryHandler { + return GetDeviceStyleByIDQueryHandler{DBS: dbs, catalogSvc: onchainSvc} } func (ch GetDeviceStyleByIDQueryHandler) Handle(ctx context.Context, query mediator.Message) (interface{}, error) { @@ -50,7 +50,10 @@ func (ch GetDeviceStyleByIDQueryHandler) Handle(ctx context.Context, query media Err: fmt.Errorf("failed to get device styles"), } } - dd, _, err := ch.onChainSvc.GetDefinitionByID(ctx, ds.DefinitionID) + dd, _, err := ch.catalogSvc.GetDefinitionByID(ctx, ds.DefinitionID) + if err == nil && dd == nil { + return nil, &exceptions.NotFoundError{Err: fmt.Errorf("device definition not found in catalog: %s", ds.DefinitionID)} + } if err != nil { return nil, &exceptions.InternalError{ Err: fmt.Errorf("failed to get device definition"), diff --git a/internal/core/queries/upsert_vin_decode.go b/internal/core/queries/upsert_vin_decode.go index 3c8f7089..f670c2b1 100644 --- a/internal/core/queries/upsert_vin_decode.go +++ b/internal/core/queries/upsert_vin_decode.go @@ -20,7 +20,7 @@ import ( type UpsertDecodingQueryHandler struct { dbs func() *db.ReaderWriter logger *zerolog.Logger - deviceDefinitionOnChainService gateways.DeviceDefinitionOnChainService + deviceDefinitionCatalogService gateways.DeviceDefinitionCatalogService } type UpsertDecodingQuery struct { @@ -32,11 +32,11 @@ func (*UpsertDecodingQuery) Key() string { return "UpsertDecodingQuery" } func NewUpsertDecodingQueryHandler(dbs func() *db.ReaderWriter, logger *zerolog.Logger, - deviceDefinitionOnChainService gateways.DeviceDefinitionOnChainService) UpsertDecodingQueryHandler { + deviceDefinitionCatalogService gateways.DeviceDefinitionCatalogService) UpsertDecodingQueryHandler { return UpsertDecodingQueryHandler{ dbs: dbs, logger: logger, - deviceDefinitionOnChainService: deviceDefinitionOnChainService, + deviceDefinitionCatalogService: deviceDefinitionCatalogService, } } @@ -54,11 +54,14 @@ func (dc UpsertDecodingQueryHandler) Handle(ctx context.Context, query mediator. Logger() // check if the definition id exists on chain - dd, manuf, err := dc.deviceDefinitionOnChainService.GetDefinitionByID(ctx, qry.DefinitionID) + dd, manuf, err := dc.deviceDefinitionCatalogService.GetDefinitionByID(ctx, qry.DefinitionID) + if err == nil && dd == nil { + return nil, &exceptions.NotFoundError{Err: fmt.Errorf("device definition not found in catalog: %s", qry.DefinitionID)} + } if err != nil { return nil, errors.Wrapf(err, "failed to find device definition by id %s when upserting vin decoding", qry.DefinitionID) } - manufacturerName, err := dc.deviceDefinitionOnChainService.GetManufacturerNameByID(ctx, manuf) + manufacturerName, err := dc.deviceDefinitionCatalogService.GetManufacturerNameByID(ctx, manuf) if err != nil { return nil, errors.Wrapf(err, "failed to find manufacturer name by id %s when upserting vin decoding", manuf) } diff --git a/internal/core/services/powertrain_type_service.go b/internal/core/services/powertrain_type_service.go index 3019280d..163afeef 100644 --- a/internal/core/services/powertrain_type_service.go +++ b/internal/core/services/powertrain_type_service.go @@ -23,10 +23,10 @@ type PowerTrainTypeService interface { type powerTrainTypeService struct { logger *zerolog.Logger powerTrainRuleData coremodels.PowerTrainTypeRuleData - deviceDefinitionOnChainService gateways.DeviceDefinitionOnChainService + deviceDefinitionCatalogService gateways.DeviceDefinitionCatalogService } -func NewPowerTrainTypeService(rulesFileName string, logger *zerolog.Logger, ddOnChainSvc gateways.DeviceDefinitionOnChainService) (PowerTrainTypeService, error) { +func NewPowerTrainTypeService(rulesFileName string, logger *zerolog.Logger, ddCatalogSvc gateways.DeviceDefinitionCatalogService) (PowerTrainTypeService, error) { if rulesFileName == "" { rulesFileName = "powertrain_type_rule.yaml" } @@ -41,7 +41,7 @@ func NewPowerTrainTypeService(rulesFileName string, logger *zerolog.Logger, ddOn return nil, err } - return &powerTrainTypeService{logger: logger, powerTrainRuleData: powerTrainTypeData, deviceDefinitionOnChainService: ddOnChainSvc}, nil + return &powerTrainTypeService{logger: logger, powerTrainRuleData: powerTrainTypeData, deviceDefinitionCatalogService: ddCatalogSvc}, nil } // ResolvePowerTrainFromVinInfo uses standard vin info StyleName and FuelType to figure out powertrain, otherwise returns an empty string diff --git a/internal/core/services/powertrain_type_service_test.go b/internal/core/services/powertrain_type_service_test.go index 0a5ef7fd..dc87d1f4 100644 --- a/internal/core/services/powertrain_type_service_test.go +++ b/internal/core/services/powertrain_type_service_test.go @@ -18,10 +18,10 @@ func Test_powerTrainTypeService_ResolvePowerTrainType(t *testing.T) { logger := dbtesthelper.Logger() ctrl := gomock.NewController(t) - onChainSvc := mock_gateways.NewMockDeviceDefinitionOnChainService(ctrl) + catalogSvc := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) defer ctrl.Finish() - ptSvc, err := NewPowerTrainTypeService("../../../powertrain_type_rule.yaml", logger, onChainSvc) + ptSvc, err := NewPowerTrainTypeService("../../../powertrain_type_rule.yaml", logger, catalogSvc) require.NoError(t, err) type args struct { diff --git a/internal/core/services/vin_decoding_service.go b/internal/core/services/vin_decoding_service.go index 4360e1f1..c787ba0c 100644 --- a/internal/core/services/vin_decoding_service.go +++ b/internal/core/services/vin_decoding_service.go @@ -39,15 +39,15 @@ type vinDecodingService struct { japan17VINAPI gateways.Japan17VINAPI carvxAPI gateways.CarVxVINAPI elevaAPI gateways.ElevaAPI - onChainSvc gateways.DeviceDefinitionOnChainService + catalogSvc gateways.DeviceDefinitionCatalogService dbs func() *db.ReaderWriter } func NewVINDecodingService(drivlyAPISvc gateways.DrivlyAPIService, vincarioAPISvc gateways.VincarioAPIService, autoIso gateways.AutoIsoAPIService, logger *zerolog.Logger, - onChainSvc gateways.DeviceDefinitionOnChainService, datGroupAPIService gateways.DATGroupAPIService, dbs func() *db.ReaderWriter, + catalogSvc gateways.DeviceDefinitionCatalogService, datGroupAPIService gateways.DATGroupAPIService, dbs func() *db.ReaderWriter, japan17VINAPI gateways.Japan17VINAPI, carvxAPI gateways.CarVxVINAPI, elevaAPI gateways.ElevaAPI) VINDecodingService { return &vinDecodingService{drivlyAPISvc: drivlyAPISvc, vincarioAPISvc: vincarioAPISvc, autoIsoAPIService: autoIso, - japan17VINAPI: japan17VINAPI, carvxAPI: carvxAPI, logger: logger, onChainSvc: onChainSvc, + japan17VINAPI: japan17VINAPI, carvxAPI: carvxAPI, logger: logger, catalogSvc: catalogSvc, DATGroupAPIService: datGroupAPIService, dbs: dbs, elevaAPI: elevaAPI} } @@ -75,7 +75,7 @@ func (c vinDecodingService) GetVIN(ctx context.Context, vin string, provider cor Logger() if strings.HasPrefix(vin, "0SC") { - dd, _, err := c.onChainSvc.GetDefinitionByID(ctx, DefaultDefinitionID) + dd, _, err := c.catalogSvc.GetDefinitionByID(ctx, DefaultDefinitionID) if err != nil { return nil, nil, err } diff --git a/internal/core/services/vin_decoding_service_test.go b/internal/core/services/vin_decoding_service_test.go index 24c78c94..4b0c8d81 100644 --- a/internal/core/services/vin_decoding_service_test.go +++ b/internal/core/services/vin_decoding_service_test.go @@ -34,7 +34,7 @@ type VINDecodingServiceSuite struct { mockJapan17VINAPI *mock_gateways.MockJapan17VINAPI mockCarvxAPI *mock_gateways.MockCarVxVINAPI - mockOnChainSvc *mock_gateways.MockDeviceDefinitionOnChainService + mockOnChainSvc *mock_gateways.MockDeviceDefinitionCatalogService vinDecodingService VINDecodingService mockElevaAPI *mock_gateways.MockElevaAPI } @@ -63,7 +63,7 @@ func (s *VINDecodingServiceSuite) SetupTest() { s.mockJapan17VINAPI = mock_gateways.NewMockJapan17VINAPI(s.ctrl) s.mockCarvxAPI = mock_gateways.NewMockCarVxVINAPI(s.ctrl) s.mockElevaAPI = mock_gateways.NewMockElevaAPI(s.ctrl) - s.mockOnChainSvc = mock_gateways.NewMockDeviceDefinitionOnChainService(s.ctrl) + s.mockOnChainSvc = mock_gateways.NewMockDeviceDefinitionCatalogService(s.ctrl) s.vinDecodingService = NewVINDecodingService(s.mockDrivlyAPISvc, s.mockVincarioAPISvc, s.mockAutoIsoAPISvc, dbtesthelper.Logger(), s.mockOnChainSvc, s.mockDATGroupAPIService, s.pdb.DBS, s.mockJapan17VINAPI, s.mockCarvxAPI, s.mockElevaAPI) diff --git a/internal/infrastructure/db/repositories/vin_repo.go b/internal/infrastructure/db/repositories/vin_repo.go index 8d7ec6dd..974cac7b 100644 --- a/internal/infrastructure/db/repositories/vin_repo.go +++ b/internal/infrastructure/db/repositories/vin_repo.go @@ -9,9 +9,6 @@ import ( "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/gateways" - "github.com/DIMO-Network/device-definitions-api/internal/contracts" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - stringutils "github.com/DIMO-Network/shared/pkg/strings" "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/db/models" @@ -26,13 +23,12 @@ type VINRepository interface { } type vinRepository struct { - DBS func() *db.ReaderWriter - registryInstance *contracts.Registry - identity gateways.IdentityAPI + DBS func() *db.ReaderWriter + identity gateways.IdentityAPI } -func NewVINRepository(dbs func() *db.ReaderWriter, registryInstance *contracts.Registry, identity gateways.IdentityAPI) VINRepository { - return &vinRepository{DBS: dbs, registryInstance: registryInstance, identity: identity} +func NewVINRepository(dbs func() *db.ReaderWriter, identity gateways.IdentityAPI) VINRepository { + return &vinRepository{DBS: dbs, identity: identity} } func (r *vinRepository) GetOrCreateWMI(ctx context.Context, wmi string, mk string) (*models.Wmi, error) { @@ -53,9 +49,8 @@ func (r *vinRepository) GetOrCreateWMI(ctx context.Context, wmi string, mk strin } return nil, err } - manufacturerID, err := r.registryInstance.GetManufacturerIdByName(&bind.CallOpts{Context: ctx, Pending: true}, deviceMake.Name) - if err != nil || manufacturerID == nil { - return nil, &exceptions.ValidationError{Err: fmt.Errorf("make has not been minted yet or no tokenID set: %s :%s", mk, err)} + if deviceMake.TokenID <= 0 { + return nil, &exceptions.ValidationError{Err: fmt.Errorf("make has not been minted yet or no tokenID set: %s", mk)} } //dbWMI, err := models.FindWmi(ctx, r.dbs().Reader, wmi, deviceMake.ID) // there can be WMI's for more than one Make diff --git a/internal/infrastructure/gateways/device_definition_catalog_e2e_test.go b/internal/infrastructure/gateways/device_definition_catalog_e2e_test.go new file mode 100644 index 00000000..c23ede66 --- /dev/null +++ b/internal/infrastructure/gateways/device_definition_catalog_e2e_test.go @@ -0,0 +1,60 @@ +package gateways + +import ( + "context" + "math/big" + "os" + "testing" + + "github.com/DIMO-Network/device-definitions-api/internal/config" + "github.com/rs/zerolog" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// Runs only against a live catalog (local wrangler dev or deployed worker): +// +// CATALOG_E2E_URL=http://localhost:8787 go test ./internal/infrastructure/gateways/ -run TestCatalogServiceE2E +func TestCatalogServiceE2E(t *testing.T) { + url := os.Getenv("CATALOG_E2E_URL") + if url == "" { + t.Skip("CATALOG_E2E_URL not set") + } + logger := zerolog.Nop() + svc := NewDeviceDefinitionCatalogService(&config.Settings{DefinitionsCatalogURL: url}, &logger) + ctx := context.Background() + + dd, manufID, err := svc.GetDefinitionByID(ctx, "dodge_town-&-country_2012") + require.NoError(t, err) + require.NotNil(t, dd) + assert.Equal(t, "Town & Country", dd.Model) + assert.Equal(t, int64(33), manufID.Int64()) + require.NotNil(t, dd.Metadata) + + // Manufacturer scoping: right owner resolves, wrong owner returns nil. + scoped, err := svc.GetDeviceDefinitionByID(ctx, big.NewInt(33), "dodge_town-&-country_2012") + require.NoError(t, err) + require.NotNil(t, scoped) + wrong, err := svc.GetDeviceDefinitionByID(ctx, big.NewInt(13), "dodge_town-&-country_2012") + require.NoError(t, err) + assert.Nil(t, wrong) + + // Paged listing as the Typesense sync job consumes it. + page0, err := svc.QueryDefinitionsByManufacturer(ctx, 13, 0) + require.NoError(t, err) + assert.Len(t, page0, 500) + total := len(page0) + for i := 1; ; i++ { + page, err := svc.QueryDefinitionsByManufacturer(ctx, 13, i) + require.NoError(t, err) + total += len(page) + if len(page) < 500 { + break + } + } + assert.Greater(t, total, 1500, "BMW should have >1500 definitions") + + missing, _, err := svc.GetDefinitionByID(ctx, "not_areal_2020") + require.NoError(t, err) + assert.Nil(t, missing) +} diff --git a/internal/infrastructure/gateways/device_definition_catalog_service.go b/internal/infrastructure/gateways/device_definition_catalog_service.go new file mode 100644 index 00000000..c4eea292 --- /dev/null +++ b/internal/infrastructure/gateways/device_definition_catalog_service.go @@ -0,0 +1,518 @@ +//nolint:tagliatelle +package gateways + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "math/big" + "net/http" + "net/url" + "strings" + "time" + + "github.com/DIMO-Network/device-definitions-api/internal/config" + coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models" + "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/metrics" + "github.com/aarondl/sqlboiler/v4/types" + "github.com/patrickmn/go-cache" + "github.com/pkg/errors" + "github.com/prometheus/client_golang/prometheus" + "github.com/rs/zerolog" +) + +// Metric method labels for the shared request counters; dashboards filter on +// these the way they previously filtered on the Tableland* labels. +const ( + metricCatalogRead = "CatalogRead" + metricManifestRead = "CatalogManifestRead" + metricCatalogWrite = "CatalogWrite" +) + +func countOutcome(method string, err error) { + if err != nil { + metrics.InternalError.With(prometheus.Labels{"method": method}).Inc() + return + } + metrics.Success.With(prometheus.Labels{"method": method}).Inc() +} + +//go:generate mockgen -source device_definition_catalog_service.go -destination mocks/device_definition_catalog_service_mock.go -package mocks + +// DeviceDefinitionCatalogService reads device definitions from the R2-backed +// catalog (CDN) and writes them through the definitions-worker. It replaces +// the Tableland on-chain service. +type DeviceDefinitionCatalogService interface { + GetManufacturer(manufacturerSlug string) (*coremodels.Manufacturer, error) + GetManufacturerNameByID(ctx context.Context, manufacturerID *big.Int) (string, error) + // GetDeviceDefinitionByID gets a definition by slug ID, requiring it to belong to the given manufacturer. + GetDeviceDefinitionByID(ctx context.Context, manufacturerID *big.Int, ID string) (*coremodels.DeviceDefinitionTablelandModel, error) + // GetDefinitionByID gets a definition by slug ID and returns the manufacturer token id too. + GetDefinitionByID(ctx context.Context, ID string) (*coremodels.DeviceDefinitionTablelandModel, *big.Int, error) + // GetDefinitionByIDFresh is GetDefinitionByID reading through the worker + // instead of the CDN. Callers that read, mutate and write back must use it: + // documents are served with max-age=86400, so a cached read silently + // discards any edit made in the last day when the result is PUT back. + GetDefinitionByIDFresh(ctx context.Context, ID string) (*coremodels.DeviceDefinitionTablelandModel, *big.Int, error) + // GetDefinition is GetDeviceDefinitionByID under its historical secondary name. + GetDefinition(ctx context.Context, manufacturerID *big.Int, ID string) (*coremodels.DeviceDefinitionTablelandModel, error) + GetDeviceDefinitions(ctx context.Context, manufacturerID types.NullDecimal, ID string, model string, year int, pageIndex, pageSize int32) ([]coremodels.DeviceDefinitionTablelandModel, error) + // QueryDefinitionsByManufacturer pages through a manufacturer's definitions, 500 at a time. + QueryDefinitionsByManufacturer(ctx context.Context, manufacturerID int, pageIndex int) ([]coremodels.DeviceDefinitionTablelandModel, error) + // CatalogIDs returns every definition id in the catalog, indexed or not. + // Deletion decisions must be based on this rather than on walking + // manufacturers: the manifest is the catalog, whereas a per-manufacturer + // walk is only as complete as identity-api's manufacturer list. + CatalogIDs(ctx context.Context) ([]string, error) + // PinCatalogSnapshot fetches the manifest once and holds it for the caller's + // whole run. Anything paging over the catalog to decide what to delete must + // call it first: the per-request cache expires after a minute while a full + // sync takes several, so without pinning, pages come from different + // manifests and a definition that shifts position between them is returned + // by neither -- and is then deleted as an orphan. + // + // It is not a cache bypass. The worker generates every response for + // definitions.dimo.org (no cf-cache-status, no age, date advances per + // request), so there is no edge cache in front of the manifest. + PinCatalogSnapshot(ctx context.Context) error + Create(ctx context.Context, manufacturerName string, dd coremodels.DeviceDefinitionTablelandModel) (*string, error) + Update(ctx context.Context, manufacturerName string, input coremodels.DeviceDefinitionUpdateInput) (*string, error) + Delete(ctx context.Context, manufacturerName, id string) (*string, error) +} + +const ( + // CatalogPageSize is the page size QueryDefinitionsByManufacturer returns. + // Exported because callers page until a short page and must agree with it; + // a private copy elsewhere silently truncates their iteration if it drifts. + CatalogPageSize = 500 + manifestCacheKey = "definitions_manifest" + manifestCacheTTL = time.Minute + // Long enough to cover a full sync run, which pages over the whole catalog. + pinnedManifestTTL = time.Hour + manufacturersCached = "manufacturers_by_token_id" +) + +type catalogManufacturer struct { + TokenID int `json:"tokenId"` + Slug string `json:"slug"` + Name string `json:"name"` +} + +type catalogDoc struct { + coremodels.DeviceDefinitionTablelandModel + Manufacturer catalogManufacturer `json:"manufacturer"` +} + +// UnmarshalJSON exists because the embedded model's custom UnmarshalJSON +// would otherwise be promoted to catalogDoc and silently drop Manufacturer. +func (d *catalogDoc) UnmarshalJSON(data []byte) error { + if err := json.Unmarshal(data, &d.DeviceDefinitionTablelandModel); err != nil { + return err + } + var aux struct { + Manufacturer catalogManufacturer `json:"manufacturer"` + } + if err := json.Unmarshal(data, &aux); err != nil { + return err + } + d.Manufacturer = aux.Manufacturer + return nil +} + +type catalogManifest struct { + UpdatedAt string `json:"updatedAt"` + Count int `json:"count"` + Definitions []catalogDoc `json:"definitions"` +} + +type deviceDefinitionCatalogService struct { + settings *config.Settings + logger *zerolog.Logger + identityAPI IdentityAPI + httpClient *http.Client + memCache *cache.Cache +} + +func NewDeviceDefinitionCatalogService(settings *config.Settings, logger *zerolog.Logger) DeviceDefinitionCatalogService { + return &deviceDefinitionCatalogService{ + settings: settings, + logger: logger, + identityAPI: NewIdentityAPIService(logger, settings), + httpClient: &http.Client{Timeout: 30 * time.Second}, + memCache: cache.New(5*time.Minute, 10*time.Minute), + } +} + +func (e *deviceDefinitionCatalogService) catalogURL(pathSuffix string) string { + return strings.TrimSuffix(e.settings.DefinitionsCatalogURL, "/") + pathSuffix +} + +func (e *deviceDefinitionCatalogService) fetchDoc(ctx context.Context, id string) (*catalogDoc, error) { + doc, err := e.fetchDocFrom(ctx, e.catalogURL("/definitions/"+url.PathEscape(id)+".json"), id) + countOutcome(metricCatalogRead, err) + return doc, err +} + +// fetchDocFresh bypasses the CDN by reading through the worker when +// configured, so read-modify-write never merges a stale cached base. +func (e *deviceDefinitionCatalogService) fetchDocFresh(ctx context.Context, id string) (*catalogDoc, error) { + base := e.settings.DefinitionsWorkerURL + if base == "" { + return e.fetchDoc(ctx, id) + } + doc, err := e.fetchDocFrom(ctx, strings.TrimSuffix(base, "/")+"/definitions/"+url.PathEscape(id), id) + countOutcome(metricCatalogRead, err) + return doc, err +} + +func (e *deviceDefinitionCatalogService) fetchDocFrom(ctx context.Context, reqURL, id string) (*catalogDoc, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, reqURL, nil) + if err != nil { + return nil, err + } + resp, err := e.httpClient.Do(req) + if err != nil { + return nil, errors.Wrapf(err, "failed to fetch definition %s from catalog", id) + } + defer resp.Body.Close() //nolint:errcheck + if resp.StatusCode == http.StatusNotFound { + return nil, nil + } + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("catalog returned %d for definition %s", resp.StatusCode, id) + } + var doc catalogDoc + if err := json.NewDecoder(resp.Body).Decode(&doc); err != nil { + return nil, errors.Wrapf(err, "failed to decode definition %s", id) + } + return &doc, nil +} + +func (e *deviceDefinitionCatalogService) manifest(ctx context.Context) (*catalogManifest, error) { + if v, ok := e.memCache.Get(manifestCacheKey); ok { + return v.(*catalogManifest), nil + } + // Every exit counts itself. Previously only a decode failure incremented the + // error metric, so a catalog outage showed up as these series dropping to + // zero rather than as an error spike -- invisible to any alert written as + // "error rate > X". + req, err := http.NewRequestWithContext(ctx, http.MethodGet, e.catalogURL("/manifest.json"), nil) + if err != nil { + countOutcome(metricManifestRead, err) + return nil, err + } + resp, err := e.httpClient.Do(req) + if err != nil { + countOutcome(metricManifestRead, err) + return nil, errors.Wrap(err, "failed to fetch definitions manifest") + } + defer resp.Body.Close() //nolint:errcheck + if resp.StatusCode != http.StatusOK { + err := fmt.Errorf("catalog returned %d for manifest", resp.StatusCode) + countOutcome(metricManifestRead, err) + return nil, err + } + var m catalogManifest + if err := json.NewDecoder(resp.Body).Decode(&m); err != nil { + countOutcome(metricManifestRead, err) + return nil, errors.Wrap(err, "failed to decode definitions manifest") + } + countOutcome(metricManifestRead, nil) + e.memCache.Set(manifestCacheKey, &m, manifestCacheTTL) + return &m, nil +} + +func (e *deviceDefinitionCatalogService) CatalogIDs(ctx context.Context) ([]string, error) { + m, err := e.manifest(ctx) + if err != nil { + return nil, err + } + ids := make([]string, 0, len(m.Definitions)) + for _, d := range m.Definitions { + ids = append(ids, d.ID) + } + return ids, nil +} + +func (e *deviceDefinitionCatalogService) PinCatalogSnapshot(ctx context.Context) error { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, e.catalogURL("/manifest.json"), nil) + if err != nil { + countOutcome(metricManifestRead, err) + return err + } + // Cheap insurance if an edge cache is ever put in front of the catalog. + req.Header.Set("Cache-Control", "no-cache") + resp, err := e.httpClient.Do(req) + if err != nil { + countOutcome(metricManifestRead, err) + return errors.Wrap(err, "failed to fetch a fresh definitions manifest") + } + defer resp.Body.Close() //nolint:errcheck + if resp.StatusCode != http.StatusOK { + err := fmt.Errorf("catalog returned %d for a fresh manifest", resp.StatusCode) + countOutcome(metricManifestRead, err) + return err + } + var m catalogManifest + if err := json.NewDecoder(resp.Body).Decode(&m); err != nil { + countOutcome(metricManifestRead, err) + return errors.Wrap(err, "failed to decode the fresh definitions manifest") + } + if m.Count != len(m.Definitions) { + err := fmt.Errorf("manifest count %d does not match the %d definitions it carries", m.Count, len(m.Definitions)) + countOutcome(metricManifestRead, err) + return err + } + countOutcome(metricManifestRead, nil) + // Long TTL so every page of the caller's run reads the same snapshot. + e.memCache.Set(manifestCacheKey, &m, pinnedManifestTTL) + return nil +} + +func (e *deviceDefinitionCatalogService) GetManufacturer(manufacturerSlug string) (*coremodels.Manufacturer, error) { + return e.identityAPI.GetManufacturer(manufacturerSlug) +} + +func (e *deviceDefinitionCatalogService) GetManufacturerNameByID(_ context.Context, manufacturerID *big.Int) (string, error) { + byID := map[int]string{} + if v, ok := e.memCache.Get(manufacturersCached); ok { + byID = v.(map[int]string) + } else { + all, err := e.identityAPI.GetManufacturers() + if err != nil { + return "", errors.Wrap(err, "failed to get manufacturers from identity") + } + // identity answers 200 with an `errors` array and null data when it + // fails, which the client surfaces as (nil, nil). Caching that empty + // map for ten minutes turns a brief blip into ten minutes of every + // lookup failing, and callers that treat the failure as "skip this row" + // drop work silently. + if len(all) == 0 { + return "", fmt.Errorf("identity returned no manufacturers") + } + for _, m := range all { + byID[m.TokenID] = m.Name + } + e.memCache.Set(manufacturersCached, byID, 10*time.Minute) + } + name, ok := byID[int(manufacturerID.Int64())] + if !ok { + return "", fmt.Errorf("no manufacturer found for token id %d", manufacturerID.Int64()) + } + return name, nil +} + +func (e *deviceDefinitionCatalogService) GetDeviceDefinitionByID(ctx context.Context, manufacturerID *big.Int, ID string) (*coremodels.DeviceDefinitionTablelandModel, error) { + doc, err := e.fetchDoc(ctx, ID) + if err != nil || doc == nil { + return nil, err + } + if manufacturerID != nil && int64(doc.Manufacturer.TokenID) != manufacturerID.Int64() { + return nil, nil + } + return &doc.DeviceDefinitionTablelandModel, nil +} + +func (e *deviceDefinitionCatalogService) GetDefinition(ctx context.Context, manufacturerID *big.Int, ID string) (*coremodels.DeviceDefinitionTablelandModel, error) { + return e.GetDeviceDefinitionByID(ctx, manufacturerID, ID) +} + +func (e *deviceDefinitionCatalogService) GetDefinitionByID(ctx context.Context, ID string) (*coremodels.DeviceDefinitionTablelandModel, *big.Int, error) { + doc, err := e.fetchDoc(ctx, ID) + if err != nil || doc == nil { + return nil, nil, err + } + return &doc.DeviceDefinitionTablelandModel, big.NewInt(int64(doc.Manufacturer.TokenID)), nil +} + +func (e *deviceDefinitionCatalogService) GetDefinitionByIDFresh(ctx context.Context, ID string) (*coremodels.DeviceDefinitionTablelandModel, *big.Int, error) { + doc, err := e.fetchDocFresh(ctx, ID) + if err != nil || doc == nil { + return nil, nil, err + } + return &doc.DeviceDefinitionTablelandModel, big.NewInt(int64(doc.Manufacturer.TokenID)), nil +} + +func (e *deviceDefinitionCatalogService) GetDeviceDefinitions(ctx context.Context, manufacturerID types.NullDecimal, ID string, model string, year int, pageIndex, pageSize int32) ([]coremodels.DeviceDefinitionTablelandModel, error) { + m, err := e.manifest(ctx) + if err != nil { + return nil, err + } + var manufTokenID *int64 + if !manufacturerID.IsZero() { + v := manufacturerID.Big.Int(nil).Int64() + manufTokenID = &v + } + matches := make([]coremodels.DeviceDefinitionTablelandModel, 0) + for _, d := range m.Definitions { + if manufTokenID != nil && int64(d.Manufacturer.TokenID) != *manufTokenID { + continue + } + if ID != "" && d.ID != ID { + continue + } + if model != "" && !strings.EqualFold(d.Model, model) { + continue + } + if year > 0 && d.Year != year { + continue + } + matches = append(matches, d.DeviceDefinitionTablelandModel) + } + return paginate(matches, int(pageIndex), int(pageSize)), nil +} + +func (e *deviceDefinitionCatalogService) QueryDefinitionsByManufacturer(ctx context.Context, manufacturerID int, pageIndex int) ([]coremodels.DeviceDefinitionTablelandModel, error) { + m, err := e.manifest(ctx) + if err != nil { + return nil, err + } + matches := make([]coremodels.DeviceDefinitionTablelandModel, 0) + for _, d := range m.Definitions { + if d.Manufacturer.TokenID == manufacturerID { + matches = append(matches, d.DeviceDefinitionTablelandModel) + } + } + return paginate(matches, pageIndex, CatalogPageSize), nil +} + +func paginate(items []coremodels.DeviceDefinitionTablelandModel, pageIndex, pageSize int) []coremodels.DeviceDefinitionTablelandModel { + if pageSize <= 0 { + pageSize = CatalogPageSize + } + start := pageIndex * pageSize + if start >= len(items) { + return []coremodels.DeviceDefinitionTablelandModel{} + } + end := start + pageSize + if end > len(items) { + end = len(items) + } + return items[start:end] +} + +// workerRequest sends an authenticated request to the definitions-worker. +// An unconfigured worker URL is an error, not a mode: silently skipping the +// write and reporting success meant a decode could answer 200 with a definition +// id that was never written to R2, and a delete could log success for a +// definition that still exists. +func (e *deviceDefinitionCatalogService) workerRequest(ctx context.Context, method, pathSuffix string, body any) (bool, error) { + if e.settings.DefinitionsWorkerURL == "" { + metrics.InternalError.With(prometheus.Labels{"method": metricCatalogWrite}).Inc() + return false, fmt.Errorf("definitions-worker is not configured (DEFINITIONS_WORKER_URL is empty); refusing to report %s %s as written", method, pathSuffix) + } + var reader io.Reader + if body != nil { + b, err := json.Marshal(body) + if err != nil { + return false, err + } + reader = bytes.NewReader(b) + } + reqURL := strings.TrimSuffix(e.settings.DefinitionsWorkerURL, "/") + pathSuffix + req, err := http.NewRequestWithContext(ctx, method, reqURL, reader) + if err != nil { + return false, err + } + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", "Bearer "+e.settings.DefinitionsWorkerToken) + resp, err := e.httpClient.Do(req) + if err != nil { + metrics.InternalError.With(prometheus.Labels{"method": metricCatalogWrite}).Inc() + return false, errors.Wrapf(err, "definitions-worker %s %s failed", method, pathSuffix) + } + defer resp.Body.Close() //nolint:errcheck + if resp.StatusCode >= 300 { + metrics.InternalError.With(prometheus.Labels{"method": metricCatalogWrite}).Inc() + msg, _ := io.ReadAll(io.LimitReader(resp.Body, 2048)) + return false, fmt.Errorf("definitions-worker %s %s returned %d: %s", method, pathSuffix, resp.StatusCode, string(msg)) + } + metrics.Success.With(prometheus.Labels{"method": metricCatalogWrite}).Inc() + return true, nil +} + +type workerPutBody struct { + ID string `json:"id"` + Model string `json:"model"` + Year int `json:"year"` + DeviceType string `json:"devicetype,omitempty"` + ImageURI string `json:"imageuri,omitempty"` + Metadata *coremodels.DeviceDefinitionMetadata `json:"metadata,omitempty"` + KSUID string `json:"ksuid,omitempty"` +} + +func (e *deviceDefinitionCatalogService) Create(ctx context.Context, manufacturerName string, dd coremodels.DeviceDefinitionTablelandModel) (*string, error) { + e.logger.Info().Msgf("catalog create for device definition %s (manufacturer %s)", dd.ID, manufacturerName) + // The worker PUT is an upsert; preserve the old create semantics so a + // create can never silently overwrite a curated definition. Fresh read so + // a stale CDN 404 can't slip through. + existing, err := e.fetchDocFresh(ctx, dd.ID) + if err != nil { + return nil, err + } + if existing != nil { + return nil, fmt.Errorf("cannot create device definition, already exists: %s", dd.ID) + } + _, err = e.workerRequest(ctx, http.MethodPut, "/definitions/"+url.PathEscape(dd.ID), workerPutBody{ + ID: dd.ID, + Model: dd.Model, + Year: dd.Year, + DeviceType: dd.DeviceType, + ImageURI: dd.ImageURI, + Metadata: dd.Metadata, + KSUID: dd.KSUID, + }) + if err != nil { + return nil, err + } + e.memCache.Delete(manifestCacheKey) + return &dd.ID, nil +} + +func (e *deviceDefinitionCatalogService) Update(ctx context.Context, _ string, input coremodels.DeviceDefinitionUpdateInput) (*string, error) { + existingDoc, err := e.fetchDocFresh(ctx, input.ID) + var existing *coremodels.DeviceDefinitionTablelandModel + if existingDoc != nil { + existing = &existingDoc.DeviceDefinitionTablelandModel + } + if err != nil { + return nil, err + } + if existing == nil { + return nil, fmt.Errorf("device definition %s not found in catalog to update", input.ID) + } + body := workerPutBody{ + ID: input.ID, + Model: existing.Model, + Year: existing.Year, + KSUID: existing.KSUID, + Metadata: existing.Metadata, + } + body.DeviceType = existing.DeviceType + if input.DeviceType != "" { + body.DeviceType = input.DeviceType + } + body.ImageURI = existing.ImageURI + if input.ImageURI != "" { + body.ImageURI = input.ImageURI + } + if input.Metadata != nil { + body.Metadata = input.Metadata + } + if _, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+url.PathEscape(input.ID), body); err != nil { + return nil, err + } + e.memCache.Delete(manifestCacheKey) + return &input.ID, nil +} + +func (e *deviceDefinitionCatalogService) Delete(ctx context.Context, manufacturerName, id string) (*string, error) { + e.logger.Info().Msgf("catalog delete for device definition %s (manufacturer %s)", id, manufacturerName) + if _, err := e.workerRequest(ctx, http.MethodDelete, "/definitions/"+url.PathEscape(id), nil); err != nil { + return nil, err + } + e.memCache.Delete(manifestCacheKey) + return &id, nil +} diff --git a/internal/infrastructure/gateways/device_definition_catalog_service_test.go b/internal/infrastructure/gateways/device_definition_catalog_service_test.go new file mode 100644 index 00000000..7f2e5eac --- /dev/null +++ b/internal/infrastructure/gateways/device_definition_catalog_service_test.go @@ -0,0 +1,75 @@ +package gateways + +import ( + "context" + "encoding/json" + "testing" + + "github.com/DIMO-Network/device-definitions-api/internal/config" + "github.com/rs/zerolog" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// Worker-written document, verbatim shape. +const catalogDocJSON = `{ + "id": "dodge_town-&-country_2012", + "ksuid": "26G3iFH7Xc9Wvsw7pg6sD7uzoSS", + "model": "Town & Country", + "year": 2012, + "devicetype": "vehicle", + "imageuri": "https://image", + "metadata": {"device_attributes": [{"name": "powertrain_type", "value": "ICE"}]}, + "manufacturer": {"tokenId": 22, "slug": "dodge", "name": "Dodge"}, + "createdAt": "2026-08-19T00:00:00.000Z", + "updatedAt": "2026-08-19T00:00:00.000Z" +}` + +// The embedded tableland model has a custom UnmarshalJSON; without the +// catalogDoc override it gets promoted and Manufacturer silently stays zero. +func TestCatalogDocUnmarshalKeepsManufacturer(t *testing.T) { + var doc catalogDoc + require.NoError(t, json.Unmarshal([]byte(catalogDocJSON), &doc)) + + assert.Equal(t, "dodge_town-&-country_2012", doc.ID) + assert.Equal(t, "Town & Country", doc.Model) + assert.Equal(t, 2012, doc.Year) + assert.Equal(t, "vehicle", doc.DeviceType) + assert.Equal(t, "https://image", doc.ImageURI) + require.NotNil(t, doc.Metadata) + require.Len(t, doc.Metadata.DeviceAttributes, 1) + assert.Equal(t, "powertrain_type", doc.Metadata.DeviceAttributes[0].Name) + + assert.Equal(t, 22, doc.Manufacturer.TokenID) + assert.Equal(t, "dodge", doc.Manufacturer.Slug) + assert.Equal(t, "Dodge", doc.Manufacturer.Name) +} + +func TestCatalogDocUnmarshalToleratesEmptyMetadata(t *testing.T) { + var doc catalogDoc + require.NoError(t, json.Unmarshal([]byte(`{"id":"bmw_x5_2019","model":"X5","year":2019,"metadata":"","manufacturer":{"tokenId":13,"slug":"bmw","name":"BMW"}}`), &doc)) + assert.Nil(t, doc.Metadata) + assert.Equal(t, 13, doc.Manufacturer.TokenID) +} + +func TestCatalogManifestDecode(t *testing.T) { + var m catalogManifest + require.NoError(t, json.Unmarshal([]byte(`{"updatedAt":"2026-08-19T00:00:00.000Z","count":1,"definitions":[`+catalogDocJSON+`]}`), &m)) + require.Len(t, m.Definitions, 1) + assert.Equal(t, 22, m.Definitions[0].Manufacturer.TokenID) + assert.Equal(t, "dodge_town-&-country_2012", m.Definitions[0].ID) +} + +// An unconfigured worker URL used to make every write a no-op that still +// reported success: Create returned the id, Delete logged "Deleted", and the +// API answered 200 while nothing reached R2. A missing write endpoint is a +// misconfiguration, not a mode of operation. +func TestWritesFailWhenWorkerURLUnset(t *testing.T) { + logger := zerolog.Nop() + svc := NewDeviceDefinitionCatalogService(&config.Settings{DefinitionsCatalogURL: "http://127.0.0.1:1"}, &logger) + + id, err := svc.Delete(context.Background(), "Toyota", "toyota_camry_2020") + require.Error(t, err, "a delete with no worker configured must not report success") + assert.Nil(t, id) + assert.Contains(t, err.Error(), "not configured") +} diff --git a/internal/infrastructure/gateways/device_definition_on_chain_service.go b/internal/infrastructure/gateways/device_definition_on_chain_service.go deleted file mode 100644 index e7c0443f..00000000 --- a/internal/infrastructure/gateways/device_definition_on_chain_service.go +++ /dev/null @@ -1,776 +0,0 @@ -//nolint:tagliatelle -package gateways - -import ( - "context" - "database/sql" - "encoding/json" - "fmt" - "io" - "math/big" - "net/http" - "net/url" - "path" - "strings" - "time" - - "github.com/DIMO-Network/device-definitions-api/internal/config" - "github.com/DIMO-Network/device-definitions-api/internal/contracts" - coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models" - "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/db/models" - "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/metrics" - "github.com/DIMO-Network/device-definitions-api/internal/infrastructure/sender" - "github.com/DIMO-Network/device-definitions-api/pkg/grpc" - "github.com/DIMO-Network/shared/pkg/db" - stringutils "github.com/DIMO-Network/shared/pkg/strings" - "github.com/aarondl/null/v8" - "github.com/aarondl/sqlboiler/v4/boil" - "github.com/aarondl/sqlboiler/v4/types" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - eth_types "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/patrickmn/go-cache" - "github.com/pkg/errors" - "github.com/prometheus/client_golang/prometheus" - "github.com/rs/zerolog" - "github.com/tidwall/gjson" -) - -//go:generate mockgen -source device_definition_on_chain_service.go -destination mocks/device_definition_on_chain_service_mock.go -package mocks -type DeviceDefinitionOnChainService interface { - GetManufacturer(manufacturerSlug string) (*coremodels.Manufacturer, error) - GetManufacturerNameByID(ctx context.Context, manufacturerID *big.Int) (string, error) - // GetDeviceDefinitionByID get DD from tableland by slug ID and specifying the manufacturer for the table to lookup in - GetDeviceDefinitionByID(ctx context.Context, manufacturerID *big.Int, ID string) (*coremodels.DeviceDefinitionTablelandModel, error) - // GetDefinitionByID get DD from tableland by slug ID, automatically figures out table by oem portion of slug. returns the manufacturer token id too - GetDefinitionByID(ctx context.Context, ID string) (*coremodels.DeviceDefinitionTablelandModel, *big.Int, error) - GetDefinitionTableland(ctx context.Context, manufacturerID *big.Int, ID string) (*coremodels.DeviceDefinitionTablelandModel, error) - GetDeviceDefinitions(ctx context.Context, manufacturerID types.NullDecimal, ID string, model string, year int, pageIndex, pageSize int32) ([]coremodels.DeviceDefinitionTablelandModel, error) - Create(ctx context.Context, manufacturerName string, dd coremodels.DeviceDefinitionTablelandModel) (*string, error) - Update(ctx context.Context, manufacturerName string, input contracts.DeviceDefinitionUpdateInput) (*string, error) - Delete(ctx context.Context, manufacturerName, id string) (*string, error) - QueryDefinitionsCustom(ctx context.Context, manufacturerID int, whereClause string, pageIndex int) ([]coremodels.DeviceDefinitionTablelandModel, error) -} - -type deviceDefinitionOnChainService struct { - settings *config.Settings - logger *zerolog.Logger - client *ethclient.Client - sender sender.Sender - chainID *big.Int - identityAPI IdentityAPI - inmemCache *cache.Cache - dbs func() *db.ReaderWriter -} - -func NewDeviceDefinitionOnChainService(settings *config.Settings, logger *zerolog.Logger, client *ethclient.Client, - chainID *big.Int, sender sender.Sender, dbs func() *db.ReaderWriter) DeviceDefinitionOnChainService { - return &deviceDefinitionOnChainService{ - settings: settings, - logger: logger, - client: client, - chainID: chainID, - sender: sender, - identityAPI: NewIdentityAPIService(logger, settings), - inmemCache: cache.New(128*time.Hour, 1*time.Hour), - dbs: dbs, - } -} - -// GetDeviceDefinitionByID gets dd from tableland with a select statement, returning a db model object -func (e *deviceDefinitionOnChainService) GetDeviceDefinitionByID(ctx context.Context, manufacturerID *big.Int, ID string) (*coremodels.DeviceDefinitionTablelandModel, error) { - tablelandDD, err := e.GetDefinitionTableland(ctx, manufacturerID, ID) - if err != nil { - return nil, err - } - - return tablelandDD, nil -} - -func (e *deviceDefinitionOnChainService) getTablelandTableName(ctx context.Context, manufacturerID *big.Int) (string, error) { - cacheKey := "manufacturer_" + manufacturerID.String() - value, found := e.inmemCache.Get(cacheKey) - if found { - return value.(string), nil - } - - contractAddress := e.settings.EthereumRegistryAddress - queryInstance, err := contracts.NewRegistry(contractAddress, e.client) - if err != nil { - return "", fmt.Errorf("failed to establish NewRegistry: %w", err) - } - - tableName, err := queryInstance.GetDeviceDefinitionTableName(&bind.CallOpts{Context: ctx, Pending: true}, manufacturerID) - - if err != nil { - return "", errors.Wrapf(err, "failed to getTablelandTableName for %d", manufacturerID.Uint64()) - } - e.inmemCache.Set(cacheKey, tableName, time.Hour*300) - - return tableName, nil -} - -func (e *deviceDefinitionOnChainService) GetManufacturerNameByID(ctx context.Context, manufacturerID *big.Int) (string, error) { - contractAddress := e.settings.EthereumRegistryAddress - queryInstance, err := contracts.NewRegistry(contractAddress, e.client) - if err != nil { - return "", fmt.Errorf("failed to establish NewRegistry: %w", err) - } - return queryInstance.GetManufacturerNameById(&bind.CallOpts{Context: ctx, Pending: true}, manufacturerID) -} - -// GetDefinitionByID returns the tableland on chain DD model and the manufacturer token id -func (e *deviceDefinitionOnChainService) GetDefinitionByID(ctx context.Context, ID string) (*coremodels.DeviceDefinitionTablelandModel, *big.Int, error) { - split := strings.Split(ID, "_") - if len(split) != 3 { - return nil, nil, fmt.Errorf("get dd by slug - invalid slug: %s", ID) - } - manufacturerSlug := split[0] - // call out to identity-api w/ caching - manufacturer, err := e.GetManufacturer(manufacturerSlug) - if err != nil { - return nil, nil, errors.Wrapf(err, "failed get DeviceMake: %s", manufacturerSlug) - } - manufacturerID := big.NewInt(int64(manufacturer.TokenID)) - tblDD, err := e.GetDefinitionTableland(ctx, manufacturerID, ID) - return tblDD, manufacturerID, err -} - -func (e *deviceDefinitionOnChainService) GetManufacturer(manufacturerSlug string) (*coremodels.Manufacturer, error) { - value, found := e.inmemCache.Get(manufacturerSlug) - if found { - return value.(*coremodels.Manufacturer), nil - } - manufacturer, err := e.identityAPI.GetManufacturer(manufacturerSlug) - if err != nil { - return nil, err - } - e.inmemCache.Set(manufacturerSlug, manufacturer, time.Hour*300) - return manufacturer, nil -} - -// GetDefinitionTableland gets dd from tableland with a select statement and returns tbl object -func (e *deviceDefinitionOnChainService) GetDefinitionTableland(ctx context.Context, manufacturerID *big.Int, ID string) (*coremodels.DeviceDefinitionTablelandModel, error) { - if manufacturerID == nil || manufacturerID.Uint64() == 0 { - return nil, fmt.Errorf("GetDefinitionTableland - manufacturerID cannot be 0") - } - - tableName, err := e.getTablelandTableName(ctx, manufacturerID) - if err != nil { - e.logger.Info().Msgf("%s", err) - return nil, err - } - - statement := fmt.Sprintf("SELECT * FROM %s WHERE id = '%s'", tableName, ID) - queryParams := map[string]string{ - "statement": statement, - } - - var modelTableland []coremodels.DeviceDefinitionTablelandModel - if err := e.QueryTableland(queryParams, &modelTableland); err != nil { - return nil, errors.Wrapf(err, "failed to query tableland, manufacturer: %d", manufacturerID.Int64()) - } - if len(modelTableland) == 0 { - return nil, nil - } - - return &modelTableland[0], nil -} - -func (e *deviceDefinitionOnChainService) GetDeviceDefinitions(ctx context.Context, manufacturerID types.NullDecimal, ID string, model string, year int, pageIndex, pageSize int32) ([]coremodels.DeviceDefinitionTablelandModel, error) { - if manufacturerID.IsZero() { - return nil, fmt.Errorf("manufacturerID cannot be 0") - } - bigManufID := manufacturerID.Int(new(big.Int)) - tableName, err := e.getTablelandTableName(ctx, bigManufID) - if err != nil { - return nil, err - } - - var conditions []string - if year > 1980 && year < 2999 { - conditions = append(conditions, fmt.Sprintf("year = %d", year)) - } - if len(model) > 0 { - conditions = append(conditions, fmt.Sprintf("model = '%s'", model)) - } - if len(ID) > 0 { - conditions = append(conditions, fmt.Sprintf("id = '%s'", ID)) - } - - whereClause := strings.Join(conditions, " AND ") - if whereClause != "" { - whereClause = " WHERE " + whereClause - } - - statement := fmt.Sprintf("SELECT * FROM %s%s LIMIT %d OFFSET %d", tableName, whereClause, pageSize, pageIndex) - - queryParams := map[string]string{ - "statement": statement, - } - - var modelTableland []coremodels.DeviceDefinitionTablelandModel - if err := e.QueryTableland(queryParams, &modelTableland); err != nil { - return nil, err - } - - return modelTableland, nil -} - -// QueryDefinitionsCustom queries tableland definitions oem table based on manuf ID. Always page size of 500, but you can alter the page index -func (e *deviceDefinitionOnChainService) QueryDefinitionsCustom(ctx context.Context, manufacturerID int, whereClause string, pageIndex int) ([]coremodels.DeviceDefinitionTablelandModel, error) { - if manufacturerID == 0 { - return nil, fmt.Errorf("manufacturerID cannot be 0") - } - - bigManufID := big.NewInt(int64(manufacturerID)) - tableName, err := e.getTablelandTableName(ctx, bigManufID) - if err != nil { - return nil, err - } - if tableName == "" { - return nil, fmt.Errorf("tableName cannot be empty for manufacturer token id %d", manufacturerID) - } - - const pageSize = 500 - statement := fmt.Sprintf("SELECT * FROM %s %s LIMIT %d OFFSET %d", tableName, whereClause, pageSize, pageIndex*pageSize) - - queryParams := map[string]string{ - "statement": statement, - } - - var modelTableland []coremodels.DeviceDefinitionTablelandModel - if err := e.QueryTableland(queryParams, &modelTableland); err != nil { - return nil, err - } - - return modelTableland, nil -} - -func (e *deviceDefinitionOnChainService) QueryTableland(queryParams map[string]string, result interface{}) error { - fullURL, err := url.Parse(e.settings.TablelandAPIGateway) - if err != nil { - return err - } - - fullURL.Path = path.Join(fullURL.Path, "api/v1/query") - - if queryParams != nil { - values := fullURL.Query() - for key, value := range queryParams { - values.Set(key, value) - } - fullURL.RawQuery = values.Encode() - } - - resp, err := http.Get(fullURL.String()) - if err != nil { - return err - } - defer resp.Body.Close() //nolint - - body, err := io.ReadAll(resp.Body) - if err != nil { - return err - } - - if err := json.Unmarshal(body, result); err != nil { - return errors.Wrapf(err, "resp body: %s. url: %s", string(body), fullURL.String()) - } - return nil -} - -const ( - TablelandRequests = "Tableland_All_Request" - TablelandFindByID = "Tableland_FindByID_Request" - TablelandCreated = "Tableland_Created_Request" - TablelandUpdated = "Tableland_Updated_Request" - TablelandDeleted = "Tableland_Deleted_Request" - TablelandExists = "Tableland_Exists_Request" - TablelandErrors = "Tableland_Error_Request" -) - -// Create does a create for tableland, on-chain operation - checks if already exists, inserts transaction in db. returns the onchain transaction -func (e *deviceDefinitionOnChainService) Create(ctx context.Context, manufacturerName string, dd coremodels.DeviceDefinitionTablelandModel) (*string, error) { - - metrics.Success.With(prometheus.Labels{"method": TablelandRequests}).Inc() - e.logger.Info().Msgf("OnChain Start Create for device definition %s. EthereumSendTransaction %t. payload: %+v", dd.ID, e.settings.EthereumSendTransaction, dd) - - if !e.settings.EthereumSendTransaction { - return nil, nil - } - - contractAddress := e.settings.EthereumRegistryAddress - fromAddress := e.sender.Address() - - nonce, err := e.client.PendingNonceAt(ctx, fromAddress) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", dd.ID) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get PendingNonceAt: %w", err) - } - - gasPrice, err := e.client.SuggestGasPrice(ctx) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", dd.ID) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get SuggestGasPrice: %w", err) - } - - bump := big.NewInt(20) - bumpedPrice := getGasPrice(gasPrice, bump) - - e.logger.Info().Msgf("bumped gas price: %d", bumpedPrice) - - auth, err := NewKeyedTransactorWithChainID(ctx, e.sender, e.chainID) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", dd.ID) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get NewKeyedTransactorWithChainID: %w", err) - } - //auth.Value = big.NewInt(0) - auth.Nonce = big.NewInt(int64(nonce)) - auth.GasLimit = uint64(300000) - auth.GasPrice = bumpedPrice - auth.From = fromAddress - - // call identity instead of the chain since more reliable - manufacturer, err := e.GetManufacturer(stringutils.SlugString(manufacturerName)) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", dd.ID) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get manufacturer from identity: %w", err) - } - if manufacturer == nil { - return nil, fmt.Errorf("manufacturer not found in identity") - } - e.logger.Info().Msgf("manufacturer to create DD with: %+v", manufacturer) - - instance, err := contracts.NewRegistryTransactor(contractAddress, e.client) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", dd.ID) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed create NewRegistryTransactor: %w", err) - } - - if dd.DeviceType == "" { - return nil, fmt.Errorf("dd DeviceTypeId is required") - } - if dd.ImageURI == "" { - dd.ImageURI = GetDefaultImageURL(ctx, dd.ID, e.dbs().Reader.DB) - } - - deviceInputs := contracts.DeviceDefinitionInput{ - Id: dd.ID, - Model: dd.Model, - Year: big.NewInt(int64(dd.Year)), - Ksuid: dd.ID, - DeviceType: dd.DeviceType, - ImageURI: dd.ImageURI, - } - - if dd.Metadata != nil { - jsonData, _ := json.Marshal(dd.Metadata) - deviceInputs.Metadata = string(jsonData) - } - - bigManufID := big.NewInt(int64(manufacturer.TokenID)) - - // check for duplicate create - currentDeviceDefinition, err := e.GetDeviceDefinitionByID(ctx, bigManufID, deviceInputs.Id) - if err != nil { - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - e.logger.Err(err).Msgf("error occurred get device definition %s from tableland when checking for existence.", deviceInputs.Id) - return nil, err - } - if currentDeviceDefinition != nil { - return nil, fmt.Errorf("cannot create device definition, already exists: %s", deviceInputs.Id) - } - - tx, err := instance.InsertDeviceDefinition(auth, bigManufID, deviceInputs) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", dd.ID) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed insert InsertDeviceDefinition: %w", err) - } - - metrics.Success.With(prometheus.Labels{"method": TablelandCreated}).Inc() - - trx := tx.Hash().Hex() - e.logger.Info().Msgf("Executed InsertDeviceDefinition %s with Trx %s in ManufacturerID %s", deviceInputs.Id, trx, bigManufID) - - dbTrx := models.DefinitionTransaction{ - TransactionHash: trx, - DefinitionID: dd.ID, - ManufacturerID: bigManufID.Int64(), - } - err = dbTrx.Insert(ctx, e.dbs().Writer, boil.Infer()) - if err != nil { - return nil, err - } - - return &trx, nil -} - -// Update on-chain device definition, only has basic validation that some fields be present. Requires existing tableland record to exist to update -func (e *deviceDefinitionOnChainService) Update(ctx context.Context, manufacturerName string, input contracts.DeviceDefinitionUpdateInput) (*string, error) { - // todo add retry logic to this call - metrics.Success.With(prometheus.Labels{"method": TablelandRequests}).Inc() - e.logger.Info().Msgf("OnChain Start Update for device definition %s. EthereumSendTransaction %t. payload: %+v", input.Id, e.settings.EthereumSendTransaction, input) - - if !e.settings.EthereumSendTransaction { - return nil, nil - } - - // validations - if input.DeviceType == "" { - return nil, fmt.Errorf("dd DeviceType is required") - } - if len(input.Metadata) > 4 { - if !gjson.Get(input.Metadata, "device_attributes").Exists() { - return nil, fmt.Errorf("device_attributes node is required in metadata if field is set: %s", input.Metadata) - } - } - - contractAddress := e.settings.EthereumRegistryAddress - fromAddress := e.sender.Address() - - nonce, err := e.client.PendingNonceAt(ctx, fromAddress) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", input.Id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get PendingNonceAt: %w", err) - } - - gasPrice, err := e.client.SuggestGasPrice(ctx) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", input.Id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get SuggestGasPrice: %w", err) - } - - bump := big.NewInt(20) - bumpedPrice := getGasPrice(gasPrice, bump) - - e.logger.Info().Msgf("bumped gas price: %d", bumpedPrice) - - auth, err := NewKeyedTransactorWithChainID(ctx, e.sender, e.chainID) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", input.Id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get NewKeyedTransactorWithChainID: %w", err) - } - //auth.Value = big.NewInt(0) - auth.Nonce = big.NewInt(int64(nonce)) - auth.GasLimit = uint64(300000) - auth.GasPrice = bumpedPrice - auth.From = fromAddress - - queryInstance, err := contracts.NewRegistry(contractAddress, e.client) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", input.Id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed create NewRegistry: %w", err) - } - - // Validate if manufacturer exists - bigManufID, err := queryInstance.GetManufacturerIdByName(&bind.CallOpts{Context: ctx, Pending: true}, manufacturerName) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", input.Id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get GetManufacturerIdByName => %s: %w", manufacturerName, err) - } - instance, err := contracts.NewRegistryTransactor(contractAddress, e.client) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", input.Id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed create NewRegistryTransactor: %w", err) - } - - // check if any field changed - e.logger.Info().Msgf("Validating if device definition %s with tokenID %s exists in tableland", input.Id, bigManufID) - existingTblDD, err := e.GetDeviceDefinitionByID(ctx, bigManufID, input.Id) - if existingTblDD != nil { - e.logger.Info().Msgf("DD %s found.", existingTblDD.ID) - } - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", input.Id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - e.logger.Err(err).Msgf("Error occurred get device definition %s from tableland.", input.Id) - return nil, err - } - metrics.Success.With(prometheus.Labels{"method": TablelandFindByID}).Inc() - // change this up if want this method to do update and or create - if existingTblDD == nil { - return nil, fmt.Errorf("device definition %s not found in tableland to update", input.Id) - } - metrics.Success.With(prometheus.Labels{"method": TablelandExists}).Inc() - // todo - change GetDeviceDefinition above to return just the tableland object, and compare with our input for any changes. - // if no changes just return nil trx hash. do not allow changing model or year since it changes the slug id - need to look into these cases better - // as they have vehicle NFT implications. - - e.logger.Info().Msgf("Executing UpdateDeviceDefinition %s with manufacturer ID %s", input.Id, bigManufID) - - tx, err := instance.UpdateDeviceDefinition(auth, bigManufID, input) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", input.Id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed update UpdateDeviceDefinition: %w", err) - } - metrics.Success.With(prometheus.Labels{"method": TablelandUpdated}).Inc() - - trx := tx.Hash().Hex() - - e.logger.Info().Msgf("Executed UpdateDeviceDefinition %s with Trx %s in ManufacturerID %s", input.Id, trx, bigManufID) - dbTrx := models.DefinitionTransaction{ - TransactionHash: trx, - DefinitionID: existingTblDD.ID, - ManufacturerID: bigManufID.Int64(), - } - err = dbTrx.Insert(ctx, e.dbs().Writer, boil.Infer()) - if err != nil { - return nil, err - } - - return &trx, nil -} - -// Delete on-chain device definition by id. Requires existing tableland record to exist to delete -func (e *deviceDefinitionOnChainService) Delete(ctx context.Context, manufacturerName, id string) (*string, error) { - - metrics.Success.With(prometheus.Labels{"method": TablelandRequests}).Inc() - e.logger.Info().Msgf("OnChain Start Delete for device definition %s. EthereumSendTransaction %t.", id, e.settings.EthereumSendTransaction) - - if !e.settings.EthereumSendTransaction { - return nil, nil - } - - // validations - if len(id) == 0 { - return nil, fmt.Errorf("id is required") - } - - contractAddress := e.settings.EthereumRegistryAddress - fromAddress := e.sender.Address() - - nonce, err := e.client.PendingNonceAt(ctx, fromAddress) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get PendingNonceAt: %w", err) - } - - gasPrice, err := e.client.SuggestGasPrice(ctx) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get SuggestGasPrice: %w", err) - } - - bump := big.NewInt(20) - bumpedPrice := getGasPrice(gasPrice, bump) - - e.logger.Info().Msgf("bumped gas price: %d", bumpedPrice) - - auth, err := NewKeyedTransactorWithChainID(ctx, e.sender, e.chainID) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get NewKeyedTransactorWithChainID: %w", err) - } - //auth.Value = big.NewInt(0) - auth.Nonce = big.NewInt(int64(nonce)) - auth.GasLimit = uint64(300000) - auth.GasPrice = bumpedPrice - auth.From = fromAddress - - queryInstance, err := contracts.NewRegistry(contractAddress, e.client) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed create NewRegistry: %w", err) - } - - // Validate if manufacturer exists - bigManufID, err := queryInstance.GetManufacturerIdByName(&bind.CallOpts{Context: ctx, Pending: true}, manufacturerName) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed get GetManufacturerIdByName => %s: %w", manufacturerName, err) - } - instance, err := contracts.NewRegistryTransactor(contractAddress, e.client) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed create NewRegistryTransactor: %w", err) - } - - // check if any field changed - existingTblDD, err := e.GetDeviceDefinitionByID(ctx, bigManufID, id) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - e.logger.Err(err).Msgf("Error occurred get device definition %s from tableland, manuf id: %d.", id, bigManufID.Int64()) - return nil, err - } - metrics.Success.With(prometheus.Labels{"method": TablelandFindByID}).Inc() - if existingTblDD == nil { - return nil, fmt.Errorf("device definition %s not found in tableland to update", id) - } - metrics.Success.With(prometheus.Labels{"method": TablelandExists}).Inc() - // todo - change GetDeviceDefinition above to return just the tableland object, and compare with our input for any changes. - // if no changes just return nil trx hash. do not allow changing model or year since it changes the slug id - need to look into these cases better - // as they have vehicle NFT implications. - - e.logger.Info().Msgf("Executing DeleteDeviceDefinition %s with manufacturer ID %d", id, bigManufID.Int64()) - - tx, err := instance.DeleteDeviceDefinition(auth, bigManufID, id) - if err != nil { - e.logger.Err(err).Msgf("OnChainError - %s", id) - metrics.InternalError.With(prometheus.Labels{"method": TablelandErrors}).Inc() - return nil, fmt.Errorf("failed delete DeleteDeviceDefinition: %w", err) - } - metrics.Success.With(prometheus.Labels{"method": TablelandDeleted}).Inc() - - trx := tx.Hash().Hex() - - e.logger.Info().Msgf("Executed DeleteDeviceDefinition %s with Trx %s in ManufacturerID %s", id, trx, bigManufID) - dbTrx := models.DefinitionTransaction{ - TransactionHash: trx, - DefinitionID: existingTblDD.ID, - ManufacturerID: bigManufID.Int64(), - } - err = dbTrx.Insert(ctx, e.dbs().Writer, boil.Infer()) - if err != nil { - return nil, err - } - - return &trx, nil -} - -func validateAttributes(current, newAttrs []coremodels.DeviceTypeAttribute) ([]coremodels.DeviceTypeAttribute, []coremodels.DeviceTypeAttribute) { - currentMap := attributesToMap(current) - newMap := attributesToMap(newAttrs) - - var newOrModifiedAttributes []coremodels.DeviceTypeAttribute - var removedAttributes []coremodels.DeviceTypeAttribute - - // Find new or changed attributes - for name, newValue := range newMap { - if currentValue, exists := currentMap[name]; !exists || currentValue != newValue { - newOrModifiedAttributes = append(newOrModifiedAttributes, coremodels.DeviceTypeAttribute{ - Name: name, - Value: newValue, - }) - } - } - - // Find deleted attributes - for name, currentValue := range currentMap { - if _, exists := newMap[name]; !exists { - removedAttributes = append(removedAttributes, coremodels.DeviceTypeAttribute{ - Name: name, - Value: currentValue, - }) - } - } - - return newOrModifiedAttributes, removedAttributes -} - -func attributesToMap(attributes []coremodels.DeviceTypeAttribute) map[string]string { - attrMap := make(map[string]string) - for _, attr := range attributes { - attrMap[attr.Name] = attr.Value - } - return attrMap -} - -func getGasPrice(price *big.Int, bump *big.Int) *big.Int { - // Calculating the bumped gas price - bumpAmount := new(big.Int).Mul(price, bump) - bumpAmount.Div(bumpAmount, big.NewInt(100)) - bumpedPrice := new(big.Int).Add(bumpAmount, price) - - return bumpedPrice -} - -func NewKeyedTransactorWithChainID(context context.Context, send sender.Sender, chainID *big.Int) (*bind.TransactOpts, error) { - signer := eth_types.LatestSignerForChainID(chainID) - return &bind.TransactOpts{ - From: send.Address(), - Signer: func(_ common.Address, tx *eth_types.Transaction) (*eth_types.Transaction, error) { - signature, err := send.Sign(context, signer.Hash(tx)) - if err != nil { - return nil, err - } - return tx.WithSignature(signer, signature) - }, - Context: context, - }, nil -} - -func GetDeviceAttributesTyped(metadata null.JSON, key string) []coremodels.DeviceTypeAttribute { - var respAttrs []coremodels.DeviceTypeAttribute - var ai map[string]any - if err := metadata.Unmarshal(&ai); err == nil { - if ai != nil { - if a, ok := ai[key]; ok && a != nil { - attributes := ai[key].(map[string]any) - for key, value := range attributes { - v := fmt.Sprint(value) - if len(v) > 0 { - respAttrs = append(respAttrs, coremodels.DeviceTypeAttribute{ - Name: key, - Value: v, - }) - } - } - } - } - } - return respAttrs -} - -func GetDefaultImageURL(ctx context.Context, definitionID string, db2 *sql.DB) string { - - all, err := models.Images(models.ImageWhere.DefinitionID.EQ(definitionID)).All(ctx, db2) - if err != nil { - return "" - } - imgURI := "" - if all != nil { - w := 0 - for _, image := range all { - extra := 0 - if !image.NotExactImage { - extra = 2000 // we want to give preference to exact images - } - if image.Width.Int+extra > w { - w = image.Width.Int + extra - imgURI = image.SourceURL - } - } - } - return imgURI -} - -// note: below code is duplicated in identity-api - -// BuildDeviceTypeAttributesTbland converts a list of DeviceTypeAttributeRequest to a JSON string for the given device type ID. -// It works the same as BuildDeviceTypeAttributes but the metadatakey is always "device_attributes" and does no attribute name validation -func BuildDeviceTypeAttributesTbland(attributes []*grpc.DeviceTypeAttributeRequest) string { - if attributes == nil { - return "" - } - deviceTypeInfo := coremodels.DeviceDefinitionMetadata{} - metaData := make([]coremodels.DeviceTypeAttribute, len(attributes)) - for i, prop := range attributes { - metaData[i].Name = prop.Name - metaData[i].Value = prop.Value - } - deviceTypeInfo.DeviceAttributes = metaData - j, _ := json.Marshal(deviceTypeInfo) - return string(j) -} diff --git a/internal/infrastructure/gateways/device_definition_on_chain_service_test.go b/internal/infrastructure/gateways/device_definition_on_chain_service_test.go deleted file mode 100644 index f35f0ff5..00000000 --- a/internal/infrastructure/gateways/device_definition_on_chain_service_test.go +++ /dev/null @@ -1,76 +0,0 @@ -package gateways - -import ( - _ "embed" // import the embed package - "testing" - - "github.com/DIMO-Network/device-definitions-api/internal/core/models" - - "github.com/stretchr/testify/assert" -) - -func Test_deviceDefinitionOnChainService_validateAttributes(t *testing.T) { - tests := []struct { - name string - currentAttributes []models.DeviceTypeAttribute - newAttributes []models.DeviceTypeAttribute - expectedNewOrMod []models.DeviceTypeAttribute - expectedRemoved []models.DeviceTypeAttribute - }{ - { - name: "add new attribute", - currentAttributes: []models.DeviceTypeAttribute{ - {Name: "driven_wheels", Value: "AWD"}, - {Name: "manufacturer_code", Value: "K3S"}, - }, - newAttributes: []models.DeviceTypeAttribute{ - {Name: "driven_wheels", Value: "AWD"}, - {Name: "manufacturer_code", Value: "K3S"}, - {Name: "number_of_doors", Value: "4"}, - }, - expectedNewOrMod: []models.DeviceTypeAttribute{ - {Name: "number_of_doors", Value: "4"}, - }, - expectedRemoved: []models.DeviceTypeAttribute{}, - }, - { - name: "remove current attribute", - currentAttributes: []models.DeviceTypeAttribute{ - {Name: "driven_wheels", Value: "AWD"}, - {Name: "manufacturer_code", Value: "K3S"}, - }, - newAttributes: []models.DeviceTypeAttribute{ - {Name: "powertrain_type", Value: "BEV"}, - }, - expectedNewOrMod: []models.DeviceTypeAttribute{ - {Name: "powertrain_type", Value: "BEV"}, - }, - expectedRemoved: []models.DeviceTypeAttribute{ - {Name: "driven_wheels", Value: "AWD"}, - {Name: "manufacturer_code", Value: "K3S"}, - }, - }, - { - name: "update current attribute", - currentAttributes: []models.DeviceTypeAttribute{ - {Name: "fuel_type", Value: "AWD"}, - }, - newAttributes: []models.DeviceTypeAttribute{ - {Name: "fuel_type", Value: "Electric"}, - }, - expectedNewOrMod: []models.DeviceTypeAttribute{ - {Name: "fuel_type", Value: "Electric"}, - }, - expectedRemoved: []models.DeviceTypeAttribute{}, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - newOrModified, removed := validateAttributes(test.currentAttributes, test.newAttributes) - - assert.ElementsMatch(t, test.expectedNewOrMod, newOrModified, "New or modified attributes should match expected") - assert.ElementsMatch(t, test.expectedRemoved, removed, "Removed attributes should match expected") - }) - } -} diff --git a/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go b/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go new file mode 100644 index 00000000..14e6ed76 --- /dev/null +++ b/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go @@ -0,0 +1,240 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: internal/infrastructure/gateways/device_definition_catalog_service.go +// +// Generated by this command: +// +// mockgen -source internal/infrastructure/gateways/device_definition_catalog_service.go -destination internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go -package mocks +// + +// Package mocks is a generated GoMock package. +package mocks + +import ( + context "context" + big "math/big" + reflect "reflect" + + models "github.com/DIMO-Network/device-definitions-api/internal/core/models" + types "github.com/aarondl/sqlboiler/v4/types" + gomock "go.uber.org/mock/gomock" +) + +// MockDeviceDefinitionCatalogService is a mock of DeviceDefinitionCatalogService interface. +type MockDeviceDefinitionCatalogService struct { + ctrl *gomock.Controller + recorder *MockDeviceDefinitionCatalogServiceMockRecorder + isgomock struct{} +} + +// MockDeviceDefinitionCatalogServiceMockRecorder is the mock recorder for MockDeviceDefinitionCatalogService. +type MockDeviceDefinitionCatalogServiceMockRecorder struct { + mock *MockDeviceDefinitionCatalogService +} + +// NewMockDeviceDefinitionCatalogService creates a new mock instance. +func NewMockDeviceDefinitionCatalogService(ctrl *gomock.Controller) *MockDeviceDefinitionCatalogService { + mock := &MockDeviceDefinitionCatalogService{ctrl: ctrl} + mock.recorder = &MockDeviceDefinitionCatalogServiceMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockDeviceDefinitionCatalogService) EXPECT() *MockDeviceDefinitionCatalogServiceMockRecorder { + return m.recorder +} + +// CatalogIDs mocks base method. +func (m *MockDeviceDefinitionCatalogService) CatalogIDs(ctx context.Context) ([]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CatalogIDs", ctx) + ret0, _ := ret[0].([]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// CatalogIDs indicates an expected call of CatalogIDs. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) CatalogIDs(ctx any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CatalogIDs", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).CatalogIDs), ctx) +} + +// Create mocks base method. +func (m *MockDeviceDefinitionCatalogService) Create(ctx context.Context, manufacturerName string, dd models.DeviceDefinitionTablelandModel) (*string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Create", ctx, manufacturerName, dd) + ret0, _ := ret[0].(*string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Create indicates an expected call of Create. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) Create(ctx, manufacturerName, dd any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).Create), ctx, manufacturerName, dd) +} + +// Delete mocks base method. +func (m *MockDeviceDefinitionCatalogService) Delete(ctx context.Context, manufacturerName, id string) (*string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Delete", ctx, manufacturerName, id) + ret0, _ := ret[0].(*string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Delete indicates an expected call of Delete. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) Delete(ctx, manufacturerName, id any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).Delete), ctx, manufacturerName, id) +} + +// GetDefinition mocks base method. +func (m *MockDeviceDefinitionCatalogService) GetDefinition(ctx context.Context, manufacturerID *big.Int, ID string) (*models.DeviceDefinitionTablelandModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetDefinition", ctx, manufacturerID, ID) + ret0, _ := ret[0].(*models.DeviceDefinitionTablelandModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDefinition indicates an expected call of GetDefinition. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) GetDefinition(ctx, manufacturerID, ID any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefinition", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).GetDefinition), ctx, manufacturerID, ID) +} + +// GetDefinitionByID mocks base method. +func (m *MockDeviceDefinitionCatalogService) GetDefinitionByID(ctx context.Context, ID string) (*models.DeviceDefinitionTablelandModel, *big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetDefinitionByID", ctx, ID) + ret0, _ := ret[0].(*models.DeviceDefinitionTablelandModel) + ret1, _ := ret[1].(*big.Int) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetDefinitionByID indicates an expected call of GetDefinitionByID. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) GetDefinitionByID(ctx, ID any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefinitionByID", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).GetDefinitionByID), ctx, ID) +} + +// GetDefinitionByIDFresh mocks base method. +func (m *MockDeviceDefinitionCatalogService) GetDefinitionByIDFresh(ctx context.Context, ID string) (*models.DeviceDefinitionTablelandModel, *big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetDefinitionByIDFresh", ctx, ID) + ret0, _ := ret[0].(*models.DeviceDefinitionTablelandModel) + ret1, _ := ret[1].(*big.Int) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 +} + +// GetDefinitionByIDFresh indicates an expected call of GetDefinitionByIDFresh. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) GetDefinitionByIDFresh(ctx, ID any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefinitionByIDFresh", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).GetDefinitionByIDFresh), ctx, ID) +} + +// GetDeviceDefinitionByID mocks base method. +func (m *MockDeviceDefinitionCatalogService) GetDeviceDefinitionByID(ctx context.Context, manufacturerID *big.Int, ID string) (*models.DeviceDefinitionTablelandModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetDeviceDefinitionByID", ctx, manufacturerID, ID) + ret0, _ := ret[0].(*models.DeviceDefinitionTablelandModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDeviceDefinitionByID indicates an expected call of GetDeviceDefinitionByID. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) GetDeviceDefinitionByID(ctx, manufacturerID, ID any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDeviceDefinitionByID", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).GetDeviceDefinitionByID), ctx, manufacturerID, ID) +} + +// GetDeviceDefinitions mocks base method. +func (m *MockDeviceDefinitionCatalogService) GetDeviceDefinitions(ctx context.Context, manufacturerID types.NullDecimal, ID, model string, year int, pageIndex, pageSize int32) ([]models.DeviceDefinitionTablelandModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetDeviceDefinitions", ctx, manufacturerID, ID, model, year, pageIndex, pageSize) + ret0, _ := ret[0].([]models.DeviceDefinitionTablelandModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDeviceDefinitions indicates an expected call of GetDeviceDefinitions. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) GetDeviceDefinitions(ctx, manufacturerID, ID, model, year, pageIndex, pageSize any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDeviceDefinitions", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).GetDeviceDefinitions), ctx, manufacturerID, ID, model, year, pageIndex, pageSize) +} + +// GetManufacturer mocks base method. +func (m *MockDeviceDefinitionCatalogService) GetManufacturer(manufacturerSlug string) (*models.Manufacturer, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetManufacturer", manufacturerSlug) + ret0, _ := ret[0].(*models.Manufacturer) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetManufacturer indicates an expected call of GetManufacturer. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) GetManufacturer(manufacturerSlug any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetManufacturer", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).GetManufacturer), manufacturerSlug) +} + +// GetManufacturerNameByID mocks base method. +func (m *MockDeviceDefinitionCatalogService) GetManufacturerNameByID(ctx context.Context, manufacturerID *big.Int) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetManufacturerNameByID", ctx, manufacturerID) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetManufacturerNameByID indicates an expected call of GetManufacturerNameByID. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) GetManufacturerNameByID(ctx, manufacturerID any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetManufacturerNameByID", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).GetManufacturerNameByID), ctx, manufacturerID) +} + +// PinCatalogSnapshot mocks base method. +func (m *MockDeviceDefinitionCatalogService) PinCatalogSnapshot(ctx context.Context) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PinCatalogSnapshot", ctx) + ret0, _ := ret[0].(error) + return ret0 +} + +// PinCatalogSnapshot indicates an expected call of PinCatalogSnapshot. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) PinCatalogSnapshot(ctx any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PinCatalogSnapshot", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).PinCatalogSnapshot), ctx) +} + +// QueryDefinitionsByManufacturer mocks base method. +func (m *MockDeviceDefinitionCatalogService) QueryDefinitionsByManufacturer(ctx context.Context, manufacturerID, pageIndex int) ([]models.DeviceDefinitionTablelandModel, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "QueryDefinitionsByManufacturer", ctx, manufacturerID, pageIndex) + ret0, _ := ret[0].([]models.DeviceDefinitionTablelandModel) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// QueryDefinitionsByManufacturer indicates an expected call of QueryDefinitionsByManufacturer. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) QueryDefinitionsByManufacturer(ctx, manufacturerID, pageIndex any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryDefinitionsByManufacturer", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).QueryDefinitionsByManufacturer), ctx, manufacturerID, pageIndex) +} + +// Update mocks base method. +func (m *MockDeviceDefinitionCatalogService) Update(ctx context.Context, manufacturerName string, input models.DeviceDefinitionUpdateInput) (*string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Update", ctx, manufacturerName, input) + ret0, _ := ret[0].(*string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Update indicates an expected call of Update. +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) Update(ctx, manufacturerName, input any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).Update), ctx, manufacturerName, input) +} diff --git a/internal/infrastructure/gateways/mocks/device_definition_on_chain_service_mock.go b/internal/infrastructure/gateways/mocks/device_definition_on_chain_service_mock.go deleted file mode 100644 index 5d600c41..00000000 --- a/internal/infrastructure/gateways/mocks/device_definition_on_chain_service_mock.go +++ /dev/null @@ -1,196 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: device_definition_on_chain_service.go -// -// Generated by this command: -// -// mockgen -source device_definition_on_chain_service.go -destination mocks/device_definition_on_chain_service_mock.go -package mocks -// - -// Package mocks is a generated GoMock package. -package mocks - -import ( - context "context" - big "math/big" - reflect "reflect" - - contracts "github.com/DIMO-Network/device-definitions-api/internal/contracts" - models "github.com/DIMO-Network/device-definitions-api/internal/core/models" - types "github.com/aarondl/sqlboiler/v4/types" - gomock "go.uber.org/mock/gomock" -) - -// MockDeviceDefinitionOnChainService is a mock of DeviceDefinitionOnChainService interface. -type MockDeviceDefinitionOnChainService struct { - ctrl *gomock.Controller - recorder *MockDeviceDefinitionOnChainServiceMockRecorder - isgomock struct{} -} - -// MockDeviceDefinitionOnChainServiceMockRecorder is the mock recorder for MockDeviceDefinitionOnChainService. -type MockDeviceDefinitionOnChainServiceMockRecorder struct { - mock *MockDeviceDefinitionOnChainService -} - -// NewMockDeviceDefinitionOnChainService creates a new mock instance. -func NewMockDeviceDefinitionOnChainService(ctrl *gomock.Controller) *MockDeviceDefinitionOnChainService { - mock := &MockDeviceDefinitionOnChainService{ctrl: ctrl} - mock.recorder = &MockDeviceDefinitionOnChainServiceMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockDeviceDefinitionOnChainService) EXPECT() *MockDeviceDefinitionOnChainServiceMockRecorder { - return m.recorder -} - -// Create mocks base method. -func (m *MockDeviceDefinitionOnChainService) Create(ctx context.Context, manufacturerName string, dd models.DeviceDefinitionTablelandModel) (*string, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Create", ctx, manufacturerName, dd) - ret0, _ := ret[0].(*string) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Create indicates an expected call of Create. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) Create(ctx, manufacturerName, dd any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).Create), ctx, manufacturerName, dd) -} - -// Delete mocks base method. -func (m *MockDeviceDefinitionOnChainService) Delete(ctx context.Context, manufacturerName, id string) (*string, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Delete", ctx, manufacturerName, id) - ret0, _ := ret[0].(*string) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Delete indicates an expected call of Delete. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) Delete(ctx, manufacturerName, id any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).Delete), ctx, manufacturerName, id) -} - -// GetDefinitionByID mocks base method. -func (m *MockDeviceDefinitionOnChainService) GetDefinitionByID(ctx context.Context, ID string) (*models.DeviceDefinitionTablelandModel, *big.Int, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDefinitionByID", ctx, ID) - ret0, _ := ret[0].(*models.DeviceDefinitionTablelandModel) - ret1, _ := ret[1].(*big.Int) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 -} - -// GetDefinitionByID indicates an expected call of GetDefinitionByID. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetDefinitionByID(ctx, ID any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefinitionByID", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).GetDefinitionByID), ctx, ID) -} - -// GetDefinitionTableland mocks base method. -func (m *MockDeviceDefinitionOnChainService) GetDefinitionTableland(ctx context.Context, manufacturerID *big.Int, ID string) (*models.DeviceDefinitionTablelandModel, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDefinitionTableland", ctx, manufacturerID, ID) - ret0, _ := ret[0].(*models.DeviceDefinitionTablelandModel) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetDefinitionTableland indicates an expected call of GetDefinitionTableland. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetDefinitionTableland(ctx, manufacturerID, ID any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefinitionTableland", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).GetDefinitionTableland), ctx, manufacturerID, ID) -} - -// GetDeviceDefinitionByID mocks base method. -func (m *MockDeviceDefinitionOnChainService) GetDeviceDefinitionByID(ctx context.Context, manufacturerID *big.Int, ID string) (*models.DeviceDefinitionTablelandModel, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDeviceDefinitionByID", ctx, manufacturerID, ID) - ret0, _ := ret[0].(*models.DeviceDefinitionTablelandModel) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetDeviceDefinitionByID indicates an expected call of GetDeviceDefinitionByID. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetDeviceDefinitionByID(ctx, manufacturerID, ID any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDeviceDefinitionByID", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).GetDeviceDefinitionByID), ctx, manufacturerID, ID) -} - -// GetDeviceDefinitions mocks base method. -func (m *MockDeviceDefinitionOnChainService) GetDeviceDefinitions(ctx context.Context, manufacturerID types.NullDecimal, ID, model string, year int, pageIndex, pageSize int32) ([]models.DeviceDefinitionTablelandModel, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDeviceDefinitions", ctx, manufacturerID, ID, model, year, pageIndex, pageSize) - ret0, _ := ret[0].([]models.DeviceDefinitionTablelandModel) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetDeviceDefinitions indicates an expected call of GetDeviceDefinitions. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetDeviceDefinitions(ctx, manufacturerID, ID, model, year, pageIndex, pageSize any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDeviceDefinitions", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).GetDeviceDefinitions), ctx, manufacturerID, ID, model, year, pageIndex, pageSize) -} - -// GetManufacturer mocks base method. -func (m *MockDeviceDefinitionOnChainService) GetManufacturer(manufacturerSlug string) (*models.Manufacturer, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetManufacturer", manufacturerSlug) - ret0, _ := ret[0].(*models.Manufacturer) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetManufacturer indicates an expected call of GetManufacturer. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetManufacturer(manufacturerSlug any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetManufacturer", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).GetManufacturer), manufacturerSlug) -} - -// GetManufacturerNameByID mocks base method. -func (m *MockDeviceDefinitionOnChainService) GetManufacturerNameByID(ctx context.Context, manufacturerID *big.Int) (string, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetManufacturerNameByID", ctx, manufacturerID) - ret0, _ := ret[0].(string) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetManufacturerNameByID indicates an expected call of GetManufacturerNameByID. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetManufacturerNameByID(ctx, manufacturerID any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetManufacturerNameByID", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).GetManufacturerNameByID), ctx, manufacturerID) -} - -// QueryDefinitionsCustom mocks base method. -func (m *MockDeviceDefinitionOnChainService) QueryDefinitionsCustom(ctx context.Context, manufacturerID int, whereClause string, pageIndex int) ([]models.DeviceDefinitionTablelandModel, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "QueryDefinitionsCustom", ctx, manufacturerID, whereClause, pageIndex) - ret0, _ := ret[0].([]models.DeviceDefinitionTablelandModel) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// QueryDefinitionsCustom indicates an expected call of QueryDefinitionsCustom. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) QueryDefinitionsCustom(ctx, manufacturerID, whereClause, pageIndex any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryDefinitionsCustom", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).QueryDefinitionsCustom), ctx, manufacturerID, whereClause, pageIndex) -} - -// Update mocks base method. -func (m *MockDeviceDefinitionOnChainService) Update(ctx context.Context, manufacturerName string, input contracts.DeviceDefinitionUpdateInput) (*string, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Update", ctx, manufacturerName, input) - ret0, _ := ret[0].(*string) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// Update indicates an expected call of Update. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) Update(ctx, manufacturerName, input any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).Update), ctx, manufacturerName, input) -} diff --git a/internal/infrastructure/sender/kms.go b/internal/infrastructure/sender/kms.go deleted file mode 100644 index 91f88c69..00000000 --- a/internal/infrastructure/sender/kms.go +++ /dev/null @@ -1,135 +0,0 @@ -package sender - -import ( - "context" - "crypto/x509/pkix" - "encoding/asn1" - "fmt" - "math/big" - - "github.com/aws/aws-sdk-go-v2/aws" - "github.com/aws/aws-sdk-go-v2/service/kms" - "github.com/aws/aws-sdk-go-v2/service/kms/types" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/crypto/secp256k1" - "golang.org/x/exp/slices" -) - -var secp256k1N = crypto.S256().Params().N -var secp256k1HalfN = new(big.Int).Div(secp256k1N, big.NewInt(2)) - -type kmsSender struct { - keyID string - pub []byte - address common.Address - client *kms.Client -} - -func (s *kmsSender) Address() common.Address { - return s.address -} - -func (s *kmsSender) Sign(ctx context.Context, hash common.Hash) ([]byte, error) { - signInput := &kms.SignInput{ - KeyId: aws.String(s.keyID), - SigningAlgorithm: types.SigningAlgorithmSpecEcdsaSha256, - MessageType: types.MessageTypeDigest, - Message: hash[:], - } - - out, err := s.client.Sign(ctx, signInput) - if err != nil { - return nil, err - } - - sig := new(ecdsaSigFields) - _, err = asn1.Unmarshal(out.Signature, sig) - if err != nil { - return nil, err - } - - sigR, sigS := sig.R.Bytes, sig.S.Bytes - - // Correct S, if necessary, so that it's in the lower half of the group. - sigSNum := new(big.Int).SetBytes(sigS) - if sigSNum.Cmp(secp256k1HalfN) > 0 { - sigS = new(big.Int).Sub(secp256k1N, sigSNum).Bytes() - } - - // Determine whether V ought to be 0 or 1. - sigRS := append(fixLen(sigR), fixLen(sigS)...) - sigRSV := append(sigRS, 0) - - recPub, err := crypto.Ecrecover(hash[:], sigRSV) - if err != nil { - return nil, err - } - - if slices.Equal(recPub, s.pub) { - return sigRSV, nil - } - - sigRSV = append(sigRS, 1) - recPub, err = crypto.Ecrecover(hash[:], sigRSV) - if err != nil { - return nil, err - } - - if slices.Equal(recPub, s.pub) { - return sigRSV, nil - } - - return nil, fmt.Errorf("couldn't choose a working V from the returned R and S") -} - -func fixLen(in []byte) []byte { - outStart := 0 - inLen := len(in) - inStart := 0 - - if inLen > 32 { - inStart = inLen - 32 - } else if inLen < 32 { - outStart = 32 - inLen - } - - out := make([]byte, common.HashLength) - copy(out[outStart:], in[inStart:]) - return out -} - -type publicKeyFields struct { - Algorithm pkix.AlgorithmIdentifier - SubjectPublicKey asn1.BitString -} - -type ecdsaSigFields struct { - R asn1.RawValue - S asn1.RawValue -} - -func FromKMS(ctx context.Context, client *kms.Client, keyID string) (Sender, error) { - pubResp, err := client.GetPublicKey(ctx, &kms.GetPublicKeyInput{KeyId: aws.String(keyID)}) - if err != nil { - return nil, err - } - - cert := new(publicKeyFields) - - _, err = asn1.Unmarshal(pubResp.PublicKey, cert) - if err != nil { - return nil, err - } - - pub, err := crypto.UnmarshalPubkey(cert.SubjectPublicKey.Bytes) - if err != nil { - return nil, err - } - - pubBytes := secp256k1.S256().Marshal(pub.X, pub.Y) - - addr := crypto.PubkeyToAddress(*pub) - - return &kmsSender{keyID: keyID, pub: pubBytes, address: addr, client: client}, nil -} diff --git a/internal/infrastructure/sender/privatekey.go b/internal/infrastructure/sender/privatekey.go deleted file mode 100644 index 390db990..00000000 --- a/internal/infrastructure/sender/privatekey.go +++ /dev/null @@ -1,34 +0,0 @@ -package sender - -import ( - "context" - "crypto/ecdsa" - - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" -) - -type privateKeySender struct { - privateKey *ecdsa.PrivateKey - address common.Address -} - -func (a *privateKeySender) Address() common.Address { - return a.address -} - -func (a *privateKeySender) Sign(_ context.Context, hash common.Hash) ([]byte, error) { - return crypto.Sign(hash[:], a.privateKey) -} - -func FromKey(hexPriv string) (Sender, error) { - privBytes := common.FromHex(hexPriv) - priv, err := crypto.ToECDSA(privBytes) - if err != nil { - return nil, err - } - - address := crypto.PubkeyToAddress(priv.PublicKey) - - return &privateKeySender{privateKey: priv, address: address}, nil -} diff --git a/internal/infrastructure/sender/sender.go b/internal/infrastructure/sender/sender.go deleted file mode 100644 index e6821b33..00000000 --- a/internal/infrastructure/sender/sender.go +++ /dev/null @@ -1,12 +0,0 @@ -package sender - -import ( - "context" - - "github.com/ethereum/go-ethereum/common" -) - -type Sender interface { - Address() common.Address - Sign(ctx context.Context, hash common.Hash) ([]byte, error) -} diff --git a/settings.sample.yaml b/settings.sample.yaml index f377c957..973b5b80 100644 --- a/settings.sample.yaml +++ b/settings.sample.yaml @@ -42,15 +42,12 @@ DAT_GROUP_CUSTOMER_PASSWORD: xxx DAT_GROUP_INTERFACE_PARTNER_NUMBER: xxx DAT_GROUP_INTERFACE_PARTNER_SIGNATURE: xxx # Hardhat default port. -ETHEREUM_RPC_URL: http://127.0.0.1:8545 # Use the next variable. Never use this in production! -PRIVATE_KEY_MODE: true # localhost Private key for default Hardhat account 0. Well-known. -SENDER_PRIVATE_KEY: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 -ETHEREUM_REGISTRY_ADDRESS: 0xdc64a140aa3e981100a9beca4e685f962f0cf6c9 # Send transaction to etherum network -ETHEREUM_SEND_TRANSACTION: true -TABLELAND_API_GATEWAY: http://localhost:8080/ +DEFINITIONS_CATALOG_URL: https://definitions.dev.dimo.org +DEFINITIONS_WORKER_URL: "" +DEFINITIONS_WORKER_TOKEN: "" SEARCH_SERVICE_API_URL: http://localhost:8108/ SEARCH_SERVICE_API_KEY: xyz SEARCH_SERVICE_DEVICE_DEFINITION_INDEX: definitions_dev