From b62b944e59aa9c2aa1393973c002f5de5b914243 Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Wed, 19 Aug 2026 14:29:02 -0400 Subject: [PATCH 01/16] Replace Tableland on-chain device definitions with R2 catalog service Device definitions now live as JSON documents in R2 behind a CDN, written through the definitions-worker. This service reads docs and the catalog manifest over HTTP and sends writes to the worker with a bearer token. - New DeviceDefinitionCatalogService gateway replaces the on-chain service; same method surface, no chain, no KMS, no tableland-node. - Deleted contracts bindings, sender package, and all Ethereum settings. - DD gRPC RPCs (create/update/filtered-list) return Unimplemented; the worker and identity-api are the new write/read paths. VIN decoder, integrations, device styles, and device types gRPC stay. - decode-vin now creates missing definitions through the worker. - Typesense sync job reads the R2 manifest instead of tableland tables. - vin_repo uses the manufacturer token id from identity instead of a registry contract call. --- .../templates/secret.yaml | 7 +- .../device-definitions-api/values-prod.yaml | 5 +- charts/device-definitions-api/values.yaml | 5 +- cmd/device-definitions-api/add_vin.go | 19 +- cmd/device-definitions-api/add_vins_csv.go | 2 - .../bulk_update_powertrain.go | 33 +- cmd/device-definitions-api/decode_vin.go | 19 +- cmd/device-definitions-api/delete_dd.go | 20 +- cmd/device-definitions-api/main.go | 39 +- .../sync_device_definition_search.go | 33 +- .../sync_device_definition_search_test.go | 44 +- go.mod | 31 +- go.sum | 200 - internal/api/api.go | 48 +- internal/api/grpc_definitions_service.go | 144 +- internal/api/grpc_server.go | 6 +- internal/config/settings.go | 11 +- internal/contracts/registry.go | 12686 ---------------- internal/core/commands/create_dd.go | 8 +- .../core/models/device_definition_models.go | 9 + internal/core/queries/decode_vin.go | 22 +- internal/core/queries/decode_vin_test.go | 38 +- internal/core/queries/get_dd_by_id.go | 8 +- internal/core/queries/get_dd_by_id_v2.go | 8 +- .../core/queries/get_dd_by_make_model_year.go | 10 +- .../core/queries/get_dd_dynamic_filter.go | 14 +- internal/core/queries/get_ds_by_id.go | 8 +- internal/core/queries/upsert_vin_decode.go | 10 +- .../core/services/powertrain_type_service.go | 6 +- .../services/powertrain_type_service_test.go | 4 +- .../core/services/vin_decoding_service.go | 8 +- .../services/vin_decoding_service_test.go | 4 +- .../db/repositories/vin_repo.go | 17 +- .../device_definition_catalog_service.go | 348 + .../device_definition_on_chain_service.go | 776 - ...device_definition_on_chain_service_test.go | 76 - ...device_definition_catalog_service_mock.go} | 115 +- internal/infrastructure/sender/kms.go | 135 - internal/infrastructure/sender/privatekey.go | 34 - internal/infrastructure/sender/sender.go | 12 - settings.sample.yaml | 9 +- 41 files changed, 593 insertions(+), 14438 deletions(-) delete mode 100644 internal/contracts/registry.go create mode 100644 internal/infrastructure/gateways/device_definition_catalog_service.go delete mode 100644 internal/infrastructure/gateways/device_definition_on_chain_service.go delete mode 100644 internal/infrastructure/gateways/device_definition_on_chain_service_test.go rename internal/infrastructure/gateways/mocks/{device_definition_on_chain_service_mock.go => device_definition_catalog_service_mock.go} (57%) delete mode 100644 internal/infrastructure/sender/kms.go delete mode 100644 internal/infrastructure/sender/privatekey.go delete mode 100644 internal/infrastructure/sender/sender.go diff --git a/charts/device-definitions-api/templates/secret.yaml b/charts/device-definitions-api/templates/secret.yaml index 20e89724..b7b77d88 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 diff --git a/charts/device-definitions-api/values-prod.yaml b/charts/device-definitions-api/values-prod.yaml index 313192f4..9e824e54 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-worker.dimo.workers.dev 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..5020e037 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-worker-dev.dimo.workers.dev 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..b665a9fe 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,13 +104,13 @@ 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)) 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..5067d347 100644 --- a/cmd/device-definitions-api/bulk_update_powertrain.go +++ b/cmd/device-definitions-api/bulk_update_powertrain.go @@ -3,21 +3,18 @@ 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" + coremodels "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 +23,6 @@ import ( type bulkUpdatePowertrain struct { logger zerolog.Logger settings config.Settings - - sender sender.Sender } func (*bulkUpdatePowertrain) Name() string { return "bulk-update-powertrain" } @@ -66,16 +61,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 +87,7 @@ 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) + deviceDefinition, manufID, err := catalogSvc.GetDefinitionByID(ctx, definitionID) if err != nil { fmt.Printf("%s: Error getting device definition: %v\n", definitionID, err) notFoundDefinitions = append(notFoundDefinitions, definitionID) @@ -113,7 +99,7 @@ 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 @@ -138,16 +124,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 := coremodels.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..5a51ca4f 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" @@ -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..8c1a17c1 100644 --- a/cmd/device-definitions-api/delete_dd.go +++ b/cmd/device-definitions-api/delete_dd.go @@ -13,7 +13,6 @@ import ( 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,25 +51,12 @@ 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) + trx, err := deviceDefinitionCatalogService.Delete(ctx, manufacturer, id) if err != nil { p.logger.Fatal().Err(err).Msg("Failed to delete.") } @@ -88,7 +74,7 @@ func (p *deleteDefinition) Execute(ctx context.Context, _ *flag.FlagSet, _ ...in 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) + onchainDD, _, err := deviceDefinitionCatalogService.GetDefinitionByID(ctx, id) fmt.Println("onchainDD: ", onchainDD, err) if onchainDD != nil { break 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/sync_device_definition_search.go b/cmd/device-definitions-api/sync_device_definition_search.go index 24a4284d..146c078c 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,9 +20,9 @@ import ( ) const ( - minSearchYear = 2007 - tablelandPageSize = 500 - searchDefaultScore = 1 + minSearchYear = 2007 + catalogPageSize = 500 + searchDefaultScore = 1 ) type syncDeviceDefinitionSearchCmd struct { @@ -33,7 +30,6 @@ type syncDeviceDefinitionSearchCmd struct { settings config.Settings createIndex bool - sender sender.Sender } func (*syncDeviceDefinitionSearchCmd) Name() string { return "sync-device-definitions-search" } @@ -52,16 +48,7 @@ func (p *syncDeviceDefinitionSearchCmd) Execute(ctx context.Context, _ *flag.Fla 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 +66,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); err != nil { p.logger.Error().Err(err).Msg("sync failed") return subcommands.ExitFailure } @@ -94,7 +81,7 @@ 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, ) error { @@ -105,7 +92,7 @@ func runSearchSync( fmt.Printf("Found %d manufacturers\n", len(makes)) 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) } @@ -125,7 +112,7 @@ func runSearchSync( // and converts the ones from model year >= minSearchYear into SearchEntryItems. func buildManufacturerDocuments( ctx context.Context, - onChainSvc gateways.DeviceDefinitionOnChainService, + catalogSvc gateways.DeviceDefinitionCatalogService, dm coremodels.Manufacturer, ) ([]SearchEntryItem, error) { makeSlug := stringutils.SlugString(dm.Name) @@ -133,7 +120,7 @@ func buildManufacturerDocuments( 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 } @@ -156,7 +143,7 @@ func buildManufacturerDocuments( Score: searchDefaultScore, }) } - if len(page) < tablelandPageSize { + if len(page) < catalogPageSize { break } pageIndex++ 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..4c5c10d5 100644 --- a/cmd/device-definitions-api/sync_device_definition_search_test.go +++ b/cmd/device-definitions-api/sync_device_definition_search_test.go @@ -23,11 +23,11 @@ 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"), @@ -43,11 +43,11 @@ 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) @@ -73,7 +73,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,7 +82,7 @@ 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) @@ -93,34 +93,34 @@ func TestBuildManufacturerDocuments_TerminatesOnShortPage(t *testing.T) { 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, 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) require.NoError(t, err) - assert.Len(t, docs, 2*tablelandPageSize+1) + assert.Len(t, docs, 2*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) @@ -130,7 +130,7 @@ func TestBuildManufacturerDocuments_PropagatesError(t *testing.T) { 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) identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{ @@ -138,9 +138,9 @@ func TestRunSearchSync_FlushesPerManufacturer(t *testing.T) { {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. @@ -164,7 +164,7 @@ func TestRunSearchSync_FlushesPerManufacturer(t *testing.T) { 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) identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{ @@ -172,7 +172,7 @@ func TestRunSearchSync_SkipsMakeWithNoEligibleDefs(t *testing.T) { }, 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. @@ -184,7 +184,7 @@ func TestRunSearchSync_SkipsMakeWithNoEligibleDefs(t *testing.T) { 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) boom := errors.New("identity down") @@ -197,13 +197,13 @@ func TestRunSearchSync_PropagatesManufacturersError(t *testing.T) { 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) 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") 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/config/settings.go b/internal/config/settings.go index 5a2baed0..8e9c20de 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"` 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/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..efdd4a67 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,7 @@ 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{ + trx, err := dc.deviceDefinitionCatalogService.Create(ctx, resp.Manufacturer, coremodels.DeviceDefinitionTablelandModel{ ID: tid, KSUID: ksuid.New().String(), Model: resp.Model, @@ -320,7 +320,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 +331,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 +467,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_id.go b/internal/core/queries/get_ds_by_id.go index 6b2cf98b..19671bab 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,7 @@ 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 { 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..a336c5ae 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,11 @@ 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 { 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_service.go b/internal/infrastructure/gateways/device_definition_catalog_service.go new file mode 100644 index 00000000..1ab7b541 --- /dev/null +++ b/internal/infrastructure/gateways/device_definition_catalog_service.go @@ -0,0 +1,348 @@ +//nolint:tagliatelle +package gateways + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "math/big" + "net/http" + "strings" + "time" + + "github.com/DIMO-Network/device-definitions-api/internal/config" + coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models" + "github.com/aarondl/sqlboiler/v4/types" + "github.com/patrickmn/go-cache" + "github.com/pkg/errors" + "github.com/rs/zerolog" +) + +//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) + // 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) + 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 = 500 + manifestCacheKey = "definitions_manifest" + manifestCacheTTL = time.Minute + 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"` +} + +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) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, e.catalogURL("/definitions/"+id+".json"), 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 + } + req, err := http.NewRequestWithContext(ctx, http.MethodGet, e.catalogURL("/manifest.json"), nil) + if err != nil { + return nil, err + } + resp, err := e.httpClient.Do(req) + if err != nil { + return nil, errors.Wrap(err, "failed to fetch definitions manifest") + } + defer resp.Body.Close() //nolint:errcheck + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("catalog returned %d for manifest", resp.StatusCode) + } + var m catalogManifest + if err := json.NewDecoder(resp.Body).Decode(&m); err != nil { + return nil, errors.Wrap(err, "failed to decode definitions manifest") + } + e.memCache.Set(manifestCacheKey, &m, manifestCacheTTL) + return &m, 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") + } + 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) 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. +// When no worker URL is configured (local dev), writes are no-ops. +func (e *deviceDefinitionCatalogService) workerRequest(ctx context.Context, method, pathSuffix string, body any) (bool, error) { + if e.settings.DefinitionsWorkerURL == "" { + e.logger.Info().Msgf("DefinitionsWorkerURL not set, skipping %s %s", method, pathSuffix) + return false, nil + } + var reader io.Reader + if body != nil { + b, err := json.Marshal(body) + if err != nil { + return false, err + } + reader = bytes.NewReader(b) + } + url := strings.TrimSuffix(e.settings.DefinitionsWorkerURL, "/") + pathSuffix + req, err := http.NewRequestWithContext(ctx, method, url, 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 { + return false, errors.Wrapf(err, "definitions-worker %s %s failed", method, pathSuffix) + } + defer resp.Body.Close() //nolint:errcheck + if resp.StatusCode >= 300 { + 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)) + } + 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) + sent, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+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 || !sent { + return nil, err + } + e.memCache.Delete(manifestCacheKey) + return &dd.ID, nil +} + +func (e *deviceDefinitionCatalogService) Update(ctx context.Context, manufacturerName string, input coremodels.DeviceDefinitionUpdateInput) (*string, error) { + existing, _, err := e.GetDefinitionByID(ctx, input.ID) + 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 + } + sent, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+input.ID, body) + if err != nil || !sent { + 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) + sent, err := e.workerRequest(ctx, http.MethodDelete, "/definitions/"+id, nil) + if err != nil || !sent { + return nil, err + } + e.memCache.Delete(manifestCacheKey) + return &id, nil +} 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_on_chain_service_mock.go b/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go similarity index 57% rename from internal/infrastructure/gateways/mocks/device_definition_on_chain_service_mock.go rename to internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go index 5d600c41..3bc711b9 100644 --- a/internal/infrastructure/gateways/mocks/device_definition_on_chain_service_mock.go +++ b/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go @@ -1,9 +1,9 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: device_definition_on_chain_service.go +// Source: internal/infrastructure/gateways/device_definition_catalog_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 +// 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. @@ -14,38 +14,37 @@ import ( 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 { +// MockDeviceDefinitionCatalogService is a mock of DeviceDefinitionCatalogService interface. +type MockDeviceDefinitionCatalogService struct { ctrl *gomock.Controller - recorder *MockDeviceDefinitionOnChainServiceMockRecorder + recorder *MockDeviceDefinitionCatalogServiceMockRecorder isgomock struct{} } -// MockDeviceDefinitionOnChainServiceMockRecorder is the mock recorder for MockDeviceDefinitionOnChainService. -type MockDeviceDefinitionOnChainServiceMockRecorder struct { - mock *MockDeviceDefinitionOnChainService +// MockDeviceDefinitionCatalogServiceMockRecorder is the mock recorder for MockDeviceDefinitionCatalogService. +type MockDeviceDefinitionCatalogServiceMockRecorder struct { + mock *MockDeviceDefinitionCatalogService } -// NewMockDeviceDefinitionOnChainService creates a new mock instance. -func NewMockDeviceDefinitionOnChainService(ctrl *gomock.Controller) *MockDeviceDefinitionOnChainService { - mock := &MockDeviceDefinitionOnChainService{ctrl: ctrl} - mock.recorder = &MockDeviceDefinitionOnChainServiceMockRecorder{mock} +// 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 *MockDeviceDefinitionOnChainService) EXPECT() *MockDeviceDefinitionOnChainServiceMockRecorder { +func (m *MockDeviceDefinitionCatalogService) EXPECT() *MockDeviceDefinitionCatalogServiceMockRecorder { return m.recorder } // Create mocks base method. -func (m *MockDeviceDefinitionOnChainService) Create(ctx context.Context, manufacturerName string, dd models.DeviceDefinitionTablelandModel) (*string, error) { +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) @@ -54,13 +53,13 @@ func (m *MockDeviceDefinitionOnChainService) Create(ctx context.Context, manufac } // Create indicates an expected call of Create. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) Create(ctx, manufacturerName, dd any) *gomock.Call { +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((*MockDeviceDefinitionOnChainService)(nil).Create), ctx, manufacturerName, dd) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).Create), ctx, manufacturerName, dd) } // Delete mocks base method. -func (m *MockDeviceDefinitionOnChainService) Delete(ctx context.Context, manufacturerName, id string) (*string, error) { +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) @@ -69,44 +68,44 @@ func (m *MockDeviceDefinitionOnChainService) Delete(ctx context.Context, manufac } // Delete indicates an expected call of Delete. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) Delete(ctx, manufacturerName, id any) *gomock.Call { +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((*MockDeviceDefinitionOnChainService)(nil).Delete), ctx, manufacturerName, id) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).Delete), ctx, manufacturerName, id) } -// GetDefinitionByID mocks base method. -func (m *MockDeviceDefinitionOnChainService) GetDefinitionByID(ctx context.Context, ID string) (*models.DeviceDefinitionTablelandModel, *big.Int, error) { +// 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, "GetDefinitionByID", ctx, ID) + ret := m.ctrl.Call(m, "GetDefinition", ctx, manufacturerID, ID) ret0, _ := ret[0].(*models.DeviceDefinitionTablelandModel) - ret1, _ := ret[1].(*big.Int) - ret2, _ := ret[2].(error) - return ret0, ret1, ret2 + ret1, _ := ret[1].(error) + return ret0, ret1 } -// GetDefinitionByID indicates an expected call of GetDefinitionByID. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetDefinitionByID(ctx, ID any) *gomock.Call { +// 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, "GetDefinitionByID", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).GetDefinitionByID), ctx, ID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefinition", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).GetDefinition), ctx, manufacturerID, ID) } -// GetDefinitionTableland mocks base method. -func (m *MockDeviceDefinitionOnChainService) GetDefinitionTableland(ctx context.Context, manufacturerID *big.Int, ID string) (*models.DeviceDefinitionTablelandModel, error) { +// 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, "GetDefinitionTableland", ctx, manufacturerID, ID) + ret := m.ctrl.Call(m, "GetDefinitionByID", ctx, ID) ret0, _ := ret[0].(*models.DeviceDefinitionTablelandModel) - ret1, _ := ret[1].(error) - return ret0, ret1 + ret1, _ := ret[1].(*big.Int) + ret2, _ := ret[2].(error) + return ret0, ret1, ret2 } -// GetDefinitionTableland indicates an expected call of GetDefinitionTableland. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetDefinitionTableland(ctx, manufacturerID, ID any) *gomock.Call { +// 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, "GetDefinitionTableland", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).GetDefinitionTableland), ctx, manufacturerID, ID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDefinitionByID", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).GetDefinitionByID), ctx, ID) } // GetDeviceDefinitionByID mocks base method. -func (m *MockDeviceDefinitionOnChainService) GetDeviceDefinitionByID(ctx context.Context, manufacturerID *big.Int, ID string) (*models.DeviceDefinitionTablelandModel, error) { +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) @@ -115,13 +114,13 @@ func (m *MockDeviceDefinitionOnChainService) GetDeviceDefinitionByID(ctx context } // GetDeviceDefinitionByID indicates an expected call of GetDeviceDefinitionByID. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetDeviceDefinitionByID(ctx, manufacturerID, ID any) *gomock.Call { +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((*MockDeviceDefinitionOnChainService)(nil).GetDeviceDefinitionByID), ctx, manufacturerID, ID) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDeviceDefinitionByID", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(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) { +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) @@ -130,13 +129,13 @@ func (m *MockDeviceDefinitionOnChainService) GetDeviceDefinitions(ctx context.Co } // GetDeviceDefinitions indicates an expected call of GetDeviceDefinitions. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetDeviceDefinitions(ctx, manufacturerID, ID, model, year, pageIndex, pageSize any) *gomock.Call { +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((*MockDeviceDefinitionOnChainService)(nil).GetDeviceDefinitions), ctx, manufacturerID, ID, model, year, pageIndex, pageSize) + 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 *MockDeviceDefinitionOnChainService) GetManufacturer(manufacturerSlug string) (*models.Manufacturer, error) { +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) @@ -145,13 +144,13 @@ func (m *MockDeviceDefinitionOnChainService) GetManufacturer(manufacturerSlug st } // GetManufacturer indicates an expected call of GetManufacturer. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetManufacturer(manufacturerSlug any) *gomock.Call { +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) GetManufacturer(manufacturerSlug any) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetManufacturer", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).GetManufacturer), manufacturerSlug) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetManufacturer", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).GetManufacturer), manufacturerSlug) } // GetManufacturerNameByID mocks base method. -func (m *MockDeviceDefinitionOnChainService) GetManufacturerNameByID(ctx context.Context, manufacturerID *big.Int) (string, error) { +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) @@ -160,28 +159,28 @@ func (m *MockDeviceDefinitionOnChainService) GetManufacturerNameByID(ctx context } // GetManufacturerNameByID indicates an expected call of GetManufacturerNameByID. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) GetManufacturerNameByID(ctx, manufacturerID any) *gomock.Call { +func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) 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) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetManufacturerNameByID", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).GetManufacturerNameByID), ctx, manufacturerID) } -// QueryDefinitionsCustom mocks base method. -func (m *MockDeviceDefinitionOnChainService) QueryDefinitionsCustom(ctx context.Context, manufacturerID int, whereClause string, pageIndex int) ([]models.DeviceDefinitionTablelandModel, error) { +// 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, "QueryDefinitionsCustom", ctx, manufacturerID, whereClause, pageIndex) + ret := m.ctrl.Call(m, "QueryDefinitionsByManufacturer", ctx, manufacturerID, 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 { +// 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, "QueryDefinitionsCustom", reflect.TypeOf((*MockDeviceDefinitionOnChainService)(nil).QueryDefinitionsCustom), ctx, manufacturerID, whereClause, pageIndex) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "QueryDefinitionsByManufacturer", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(nil).QueryDefinitionsByManufacturer), ctx, manufacturerID, pageIndex) } // Update mocks base method. -func (m *MockDeviceDefinitionOnChainService) Update(ctx context.Context, manufacturerName string, input contracts.DeviceDefinitionUpdateInput) (*string, error) { +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) @@ -190,7 +189,7 @@ func (m *MockDeviceDefinitionOnChainService) Update(ctx context.Context, manufac } // Update indicates an expected call of Update. -func (mr *MockDeviceDefinitionOnChainServiceMockRecorder) Update(ctx, manufacturerName, input any) *gomock.Call { +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((*MockDeviceDefinitionOnChainService)(nil).Update), ctx, manufacturerName, input) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockDeviceDefinitionCatalogService)(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 From aeb89cfbffdaf8f6866247ac63843515dd66d35e Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Wed, 19 Aug 2026 14:44:02 -0400 Subject: [PATCH 02/16] Path-escape definition ids in catalog/worker URLs Catalog ids can contain characters like & + ( ) " (e.g. dodge_town-&-country_2012), which must be percent-encoded in URL paths. --- .../gateways/device_definition_catalog_service.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/infrastructure/gateways/device_definition_catalog_service.go b/internal/infrastructure/gateways/device_definition_catalog_service.go index 1ab7b541..2a742733 100644 --- a/internal/infrastructure/gateways/device_definition_catalog_service.go +++ b/internal/infrastructure/gateways/device_definition_catalog_service.go @@ -9,6 +9,7 @@ import ( "io" "math/big" "net/http" + "net/url" "strings" "time" @@ -89,7 +90,7 @@ func (e *deviceDefinitionCatalogService) catalogURL(pathSuffix string) string { } func (e *deviceDefinitionCatalogService) fetchDoc(ctx context.Context, id string) (*catalogDoc, error) { - req, err := http.NewRequestWithContext(ctx, http.MethodGet, e.catalogURL("/definitions/"+id+".json"), nil) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, e.catalogURL("/definitions/"+url.PathEscape(id)+".json"), nil) if err != nil { return nil, err } @@ -256,8 +257,8 @@ func (e *deviceDefinitionCatalogService) workerRequest(ctx context.Context, meth } reader = bytes.NewReader(b) } - url := strings.TrimSuffix(e.settings.DefinitionsWorkerURL, "/") + pathSuffix - req, err := http.NewRequestWithContext(ctx, method, url, reader) + reqURL := strings.TrimSuffix(e.settings.DefinitionsWorkerURL, "/") + pathSuffix + req, err := http.NewRequestWithContext(ctx, method, reqURL, reader) if err != nil { return false, err } @@ -287,7 +288,7 @@ type workerPutBody struct { 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) - sent, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+dd.ID, workerPutBody{ + sent, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+url.PathEscape(dd.ID), workerPutBody{ ID: dd.ID, Model: dd.Model, Year: dd.Year, @@ -329,7 +330,7 @@ func (e *deviceDefinitionCatalogService) Update(ctx context.Context, manufacture if input.Metadata != nil { body.Metadata = input.Metadata } - sent, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+input.ID, body) + sent, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+url.PathEscape(input.ID), body) if err != nil || !sent { return nil, err } @@ -339,7 +340,7 @@ func (e *deviceDefinitionCatalogService) Update(ctx context.Context, manufacture 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) - sent, err := e.workerRequest(ctx, http.MethodDelete, "/definitions/"+id, nil) + sent, err := e.workerRequest(ctx, http.MethodDelete, "/definitions/"+url.PathEscape(id), nil) if err != nil || !sent { return nil, err } From 3c6987822ad043337a1d15b591a84adbd1ff4783 Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Wed, 19 Aug 2026 21:10:27 -0400 Subject: [PATCH 03/16] Fix catalog doc decoding and nil handling found in verification - catalogDoc now overrides UnmarshalJSON: the embedded tableland model's custom unmarshaler was promoted and silently dropped the manufacturer field, so every catalog read returned token id 0. Regression tests cover doc, empty-metadata, and manifest decoding. - Create/Update/Delete always return the definition id on success so callers (decode-vin NewTrxHash deref) can't hit a nil pointer when the worker URL is unset. - delete-dd CLI no longer polls Polygonscan for a transaction that is now a synchronous worker call; dead CheckTransactionStatus helper and POLYGON_SCAN_API_KEY setting/secret removed. --- .../templates/secret.yaml | 3 - cmd/device-definitions-api/delete_dd.go | 28 +-------- internal/config/settings.go | 1 - internal/core/common/utils.go | 26 --------- .../device_definition_catalog_service.go | 28 +++++++-- .../device_definition_catalog_service_test.go | 58 +++++++++++++++++++ 6 files changed, 83 insertions(+), 61 deletions(-) create mode 100644 internal/infrastructure/gateways/device_definition_catalog_service_test.go diff --git a/charts/device-definitions-api/templates/secret.yaml b/charts/device-definitions-api/templates/secret.yaml index b7b77d88..7c7c7548 100644 --- a/charts/device-definitions-api/templates/secret.yaml +++ b/charts/device-definitions-api/templates/secret.yaml @@ -74,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/cmd/device-definitions-api/delete_dd.go b/cmd/device-definitions-api/delete_dd.go index 8c1a17c1..95cb982b 100644 --- a/cmd/device-definitions-api/delete_dd.go +++ b/cmd/device-definitions-api/delete_dd.go @@ -7,10 +7,8 @@ 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/google/subcommands" @@ -56,32 +54,12 @@ func (p *deleteDefinition) Execute(ctx context.Context, _ *flag.FlagSet, _ ...in id := os.Args[len(os.Args)-1] - trx, err := deviceDefinitionCatalogService.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 := deviceDefinitionCatalogService.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/internal/config/settings.go b/internal/config/settings.go index 8e9c20de..023fa511 100644 --- a/internal/config/settings.go +++ b/internal/config/settings.go @@ -44,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/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/infrastructure/gateways/device_definition_catalog_service.go b/internal/infrastructure/gateways/device_definition_catalog_service.go index 2a742733..015c6538 100644 --- a/internal/infrastructure/gateways/device_definition_catalog_service.go +++ b/internal/infrastructure/gateways/device_definition_catalog_service.go @@ -61,6 +61,22 @@ type catalogDoc struct { 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"` @@ -288,7 +304,7 @@ type workerPutBody struct { 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) - sent, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+url.PathEscape(dd.ID), workerPutBody{ + _, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+url.PathEscape(dd.ID), workerPutBody{ ID: dd.ID, Model: dd.Model, Year: dd.Year, @@ -297,10 +313,12 @@ func (e *deviceDefinitionCatalogService) Create(ctx context.Context, manufacture Metadata: dd.Metadata, KSUID: dd.KSUID, }) - if err != nil || !sent { + if err != nil { return nil, err } e.memCache.Delete(manifestCacheKey) + // Returns the id even when the worker call was skipped (no URL set in + // local dev) so callers never dereference a nil result. return &dd.ID, nil } @@ -330,8 +348,7 @@ func (e *deviceDefinitionCatalogService) Update(ctx context.Context, manufacture if input.Metadata != nil { body.Metadata = input.Metadata } - sent, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+url.PathEscape(input.ID), body) - if err != nil || !sent { + if _, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+url.PathEscape(input.ID), body); err != nil { return nil, err } e.memCache.Delete(manifestCacheKey) @@ -340,8 +357,7 @@ func (e *deviceDefinitionCatalogService) Update(ctx context.Context, manufacture 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) - sent, err := e.workerRequest(ctx, http.MethodDelete, "/definitions/"+url.PathEscape(id), nil) - if err != nil || !sent { + if _, err := e.workerRequest(ctx, http.MethodDelete, "/definitions/"+url.PathEscape(id), nil); err != nil { return nil, err } e.memCache.Delete(manifestCacheKey) 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..d9c5d756 --- /dev/null +++ b/internal/infrastructure/gateways/device_definition_catalog_service_test.go @@ -0,0 +1,58 @@ +package gateways + +import ( + "encoding/json" + "testing" + + "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) +} From 596517005a89647b76fe21528105314b24b8729e Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Thu, 20 Aug 2026 13:49:14 -0400 Subject: [PATCH 04/16] Add opt-in catalog E2E test (CATALOG_E2E_URL) --- .../device_definition_catalog_e2e_test.go | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 internal/infrastructure/gateways/device_definition_catalog_e2e_test.go 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) +} From 98a66be18ee4a890dfbd6e70ddd3aa626e9d2354 Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Thu, 20 Aug 2026 14:52:27 -0400 Subject: [PATCH 05/16] Lint: unused params, duplicate import --- cmd/device-definitions-api/bulk_update_powertrain.go | 5 ++--- cmd/device-definitions-api/decode_vin.go | 2 +- .../gateways/device_definition_catalog_service.go | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/cmd/device-definitions-api/bulk_update_powertrain.go b/cmd/device-definitions-api/bulk_update_powertrain.go index 5067d347..f62c0645 100644 --- a/cmd/device-definitions-api/bulk_update_powertrain.go +++ b/cmd/device-definitions-api/bulk_update_powertrain.go @@ -10,11 +10,10 @@ import ( "time" "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/config" - coremodels "github.com/DIMO-Network/device-definitions-api/internal/core/models" + "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" @@ -124,7 +123,7 @@ func (p *bulkUpdatePowertrain) Execute(ctx context.Context, _ *flag.FlagSet, _ . Value: powertrain, }) } - updateInput := coremodels.DeviceDefinitionUpdateInput{ + updateInput := models.DeviceDefinitionUpdateInput{ ID: deviceDefinition.ID, Metadata: deviceDefinition.Metadata, KSUID: deviceDefinition.KSUID, diff --git a/cmd/device-definitions-api/decode_vin.go b/cmd/device-definitions-api/decode_vin.go index 5a51ca4f..701902d7 100644 --- a/cmd/device-definitions-api/decode_vin.go +++ b/cmd/device-definitions-api/decode_vin.go @@ -253,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) diff --git a/internal/infrastructure/gateways/device_definition_catalog_service.go b/internal/infrastructure/gateways/device_definition_catalog_service.go index 015c6538..3a2b44d6 100644 --- a/internal/infrastructure/gateways/device_definition_catalog_service.go +++ b/internal/infrastructure/gateways/device_definition_catalog_service.go @@ -322,7 +322,7 @@ func (e *deviceDefinitionCatalogService) Create(ctx context.Context, manufacture return &dd.ID, nil } -func (e *deviceDefinitionCatalogService) Update(ctx context.Context, manufacturerName string, input coremodels.DeviceDefinitionUpdateInput) (*string, error) { +func (e *deviceDefinitionCatalogService) Update(ctx context.Context, _ string, input coremodels.DeviceDefinitionUpdateInput) (*string, error) { existing, _, err := e.GetDefinitionByID(ctx, input.ID) if err != nil { return nil, err From 7ab18c4dae97aaeb66f7d7f6345d1b0e1323fefb Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Thu, 20 Aug 2026 21:06:02 -0400 Subject: [PATCH 06/16] Catalog service: Prometheus metrics + CDN-bypassing read for updates - Success/InternalError counters with CatalogRead / CatalogManifestRead / CatalogWrite method labels replace the retired Tableland* series. - Update() now reads its merge base through the worker (uncached) when DEFINITIONS_WORKER_URL is set, so read-modify-write can't merge a stale CDN-cached document. --- .../device_definition_catalog_service.go | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/internal/infrastructure/gateways/device_definition_catalog_service.go b/internal/infrastructure/gateways/device_definition_catalog_service.go index 3a2b44d6..a4694cba 100644 --- a/internal/infrastructure/gateways/device_definition_catalog_service.go +++ b/internal/infrastructure/gateways/device_definition_catalog_service.go @@ -15,12 +15,30 @@ import ( "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 @@ -106,7 +124,25 @@ func (e *deviceDefinitionCatalogService) catalogURL(pathSuffix string) string { } func (e *deviceDefinitionCatalogService) fetchDoc(ctx context.Context, id string) (*catalogDoc, error) { - req, err := http.NewRequestWithContext(ctx, http.MethodGet, e.catalogURL("/definitions/"+url.PathEscape(id)+".json"), nil) + 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 } @@ -146,8 +182,10 @@ func (e *deviceDefinitionCatalogService) manifest(ctx context.Context) (*catalog } var m catalogManifest if err := json.NewDecoder(resp.Body).Decode(&m); err != nil { + metrics.InternalError.With(prometheus.Labels{"method": metricManifestRead}).Inc() return nil, errors.Wrap(err, "failed to decode definitions manifest") } + metrics.Success.With(prometheus.Labels{"method": metricManifestRead}).Inc() e.memCache.Set(manifestCacheKey, &m, manifestCacheTTL) return &m, nil } @@ -282,13 +320,16 @@ func (e *deviceDefinitionCatalogService) workerRequest(ctx context.Context, meth 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 } @@ -323,7 +364,11 @@ func (e *deviceDefinitionCatalogService) Create(ctx context.Context, manufacture } func (e *deviceDefinitionCatalogService) Update(ctx context.Context, _ string, input coremodels.DeviceDefinitionUpdateInput) (*string, error) { - existing, _, err := e.GetDefinitionByID(ctx, input.ID) + existingDoc, err := e.fetchDocFresh(ctx, input.ID) + var existing *coremodels.DeviceDefinitionTablelandModel + if existingDoc != nil { + existing = &existingDoc.DeviceDefinitionTablelandModel + } if err != nil { return nil, err } From 944f8ad0e676d8dc23cd2bd47909cf853e7b9bfa Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Mon, 24 Aug 2026 09:24:20 -0400 Subject: [PATCH 07/16] Lint: preallocate device style response --- internal/core/queries/get_ds_by_filter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From ed28e91083807cd8825a3fd4f7c0da042e79a8ee Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Mon, 24 Aug 2026 13:26:02 -0400 Subject: [PATCH 08/16] Fix review findings: nil-404 guards, create exists-guard, metadata wipe - upsert-vin-decoding and device-style lookups now return NotFound instead of nil-dereferencing when a definition is missing from the catalog (the catalog returns nil, nil on 404). - Create re-gains the old already-exists guard, using a CDN-bypassing read, so a create can never silently overwrite a curated definition. - bulk-update-powertrain: inverted nil-check (pre-existing) wiped all device attributes on every processed row and panicked on absent metadata; now initializes only when metadata is actually nil. --- cmd/device-definitions-api/bulk_update_powertrain.go | 2 +- internal/core/queries/get_ds_by_id.go | 3 +++ internal/core/queries/upsert_vin_decode.go | 3 +++ .../gateways/device_definition_catalog_service.go | 12 +++++++++++- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/cmd/device-definitions-api/bulk_update_powertrain.go b/cmd/device-definitions-api/bulk_update_powertrain.go index f62c0645..3aa63ef7 100644 --- a/cmd/device-definitions-api/bulk_update_powertrain.go +++ b/cmd/device-definitions-api/bulk_update_powertrain.go @@ -104,7 +104,7 @@ func (p *bulkUpdatePowertrain) Execute(ctx context.Context, _ *flag.FlagSet, _ . continue } set := false - if deviceDefinition.Metadata != nil { + if deviceDefinition.Metadata == nil { deviceDefinition.Metadata = &models.DeviceDefinitionMetadata{ DeviceAttributes: make([]models.DeviceTypeAttribute, 0), } diff --git a/internal/core/queries/get_ds_by_id.go b/internal/core/queries/get_ds_by_id.go index 19671bab..d2162d35 100644 --- a/internal/core/queries/get_ds_by_id.go +++ b/internal/core/queries/get_ds_by_id.go @@ -51,6 +51,9 @@ func (ch GetDeviceStyleByIDQueryHandler) Handle(ctx context.Context, query media } } 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 a336c5ae..f670c2b1 100644 --- a/internal/core/queries/upsert_vin_decode.go +++ b/internal/core/queries/upsert_vin_decode.go @@ -55,6 +55,9 @@ func (dc UpsertDecodingQueryHandler) Handle(ctx context.Context, query mediator. // check if the definition id exists on chain 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) } diff --git a/internal/infrastructure/gateways/device_definition_catalog_service.go b/internal/infrastructure/gateways/device_definition_catalog_service.go index a4694cba..e0f20b55 100644 --- a/internal/infrastructure/gateways/device_definition_catalog_service.go +++ b/internal/infrastructure/gateways/device_definition_catalog_service.go @@ -345,7 +345,17 @@ type workerPutBody struct { 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) - _, err := e.workerRequest(ctx, http.MethodPut, "/definitions/"+url.PathEscape(dd.ID), workerPutBody{ + // 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, From 4925c55b8a42aac67701b469e14b7bd0b40e2820 Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Mon, 24 Aug 2026 16:26:28 -0400 Subject: [PATCH 09/16] fix: prune search documents whose definition left the catalog The Typesense sync pass only ever upserted, and the prod CronJob runs it without -create-index, so the index was never rebuilt from scratch. A definition deleted from R2 therefore stayed searchable forever: the worker's delete-on-write was the only path that removed it, and if that Typesense call failed the orphan became permanent, with search returning a definition_id that 404s. runSearchSync now collects every id it upserts and deletes anything else the index still holds. Two guards, because this deletes from a live index: - an empty catalog set skips the prune entirely, so a failed or empty catalog read can never empty the index; - a prune larger than 10% of the index (floor 100) is refused and reported, since that is far more likely to mean a partial catalog read than a real deletion of that size. -allow-bulk-prune overrides it. Orphans are removed one id at a time rather than through a filter_by set: definition ids legitimately contain & + ( ) and ", which would need escaping inside a filter expression. --- cmd/device-definitions-api/search_indexer.go | 50 ++++++++++++ .../search_indexer_mock_test.go | 33 +++++++- .../sync_device_definition_search.go | 80 ++++++++++++++++++- .../sync_device_definition_search_test.go | 53 +++++++++++- cmd/device-definitions-api/sync_prune_test.go | 77 ++++++++++++++++++ 5 files changed, 284 insertions(+), 9 deletions(-) create mode 100644 cmd/device-definitions-api/sync_prune_test.go diff --git a/cmd/device-definitions-api/search_indexer.go b/cmd/device-definitions-api/search_indexer.go index 8ac1b3e3..ecfe461a 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,10 @@ 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 document ids from the collection. + DeleteDocuments(ctx context.Context, collectionName string, ids []string) error } type typesenseSearchIndexer struct { @@ -51,3 +58,46 @@ 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) error { + for _, id := range ids { + if _, err := t.client.Collection(collectionName).Document(id).Delete(ctx); err != nil { + return errors.Wrapf(err, "failed to delete document %s", id) + } + } + return 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..774522d4 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,35 @@ func (m *MockSearchIndexer) EXPECT() *MockSearchIndexerMockRecorder { return m.recorder } +// DeleteDocuments mocks base method. +func (m *MockSearchIndexer) DeleteDocuments(ctx context.Context, collectionName string, ids []string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteDocuments", ctx, collectionName, ids) + ret0, _ := ret[0].(error) + return ret0 +} + +// 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 146c078c..09b84558 100644 --- a/cmd/device-definitions-api/sync_device_definition_search.go +++ b/cmd/device-definitions-api/sync_device_definition_search.go @@ -20,7 +20,12 @@ import ( ) const ( - minSearchYear = 2007 + minSearchYear = 2007 + // Guardrail on the prune pass: deleting more than pruneFraction of the + // index (with a pruneFloor allowance for small collections) requires an + // explicit flag. + pruneFloor = 100 + pruneFraction = 0.10 catalogPageSize = 500 searchDefaultScore = 1 ) @@ -29,7 +34,8 @@ type syncDeviceDefinitionSearchCmd struct { logger zerolog.Logger settings config.Settings - createIndex bool + createIndex bool + allowBulkPrune bool } func (*syncDeviceDefinitionSearchCmd) Name() string { return "sync-device-definitions-search" } @@ -42,6 +48,8 @@ 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 { @@ -66,7 +74,7 @@ func (p *syncDeviceDefinitionSearchCmd) Execute(ctx context.Context, _ *flag.Fla fmt.Printf("Index %s created\n", collectionName) } - if err := runSearchSync(ctx, identity, catalogSvc, 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 } @@ -84,6 +92,7 @@ func runSearchSync( catalogSvc gateways.DeviceDefinitionCatalogService, indexer SearchIndexer, collectionName string, + allowBulkPrune bool, ) error { makes, err := identity.GetManufacturers() if err != nil { @@ -91,11 +100,19 @@ func runSearchSync( } fmt.Printf("Found %d manufacturers\n", len(makes)) + // Every id we upsert; the prune pass treats anything else in the index as + // an orphan. Pre-2007 definitions are deliberately absent, so a stale + // pre-2007 entry gets cleaned up too. + catalogIDs := make(map[string]struct{}) + for _, dm := range makes { docs, err := buildManufacturerDocuments(ctx, catalogSvc, dm) if err != nil { return fmt.Errorf("build documents for %s: %w", dm.Name, err) } + for _, d := range docs { + catalogIDs[d.ID] = struct{}{} + } if len(docs) == 0 { fmt.Printf("%s: no definitions to sync\n", dm.Name) continue @@ -105,6 +122,16 @@ 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 { + return err + } + if pruned > 0 { + fmt.Printf("pruned %d search documents with no definition in the catalog\n", pruned) + } return nil } @@ -151,6 +178,53 @@ func buildManufacturerDocuments( return docs, 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 limit := pruneLimit(len(indexed)); len(stale) > limit && !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), limit) + } + + if err := indexer.DeleteDocuments(ctx, collectionName, stale); err != nil { + return 0, fmt.Errorf("delete orphaned search documents: %w", err) + } + return len(stale), nil +} + +func pruneLimit(indexed int) int { + if limit := int(float64(indexed) * pruneFraction); limit > pruneFloor { + return limit + } + return pruneFloor +} + func deviceDefinitionSearchSchema(collectionName string) *api.CollectionSchema { hasFacet := true nestedFields := false 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 4c5c10d5..d9927c2b 100644 --- a/cmd/device-definitions-api/sync_device_definition_search_test.go +++ b/cmd/device-definitions-api/sync_device_definition_search_test.go @@ -157,7 +157,10 @@ 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) } @@ -177,7 +180,7 @@ func TestRunSearchSync_SkipsMakeWithNoEligibleDefs(t *testing.T) { // No UpsertDocuments expectation → gomock will fail the test if it's called. - err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search") + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) require.NoError(t, err) } @@ -190,7 +193,7 @@ func TestRunSearchSync_PropagatesManufacturersError(t *testing.T) { 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) } @@ -209,6 +212,48 @@ func TestRunSearchSync_PropagatesUpsertError(t *testing.T) { 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) + + 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(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) + + 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..584e1e66 --- /dev/null +++ b/cmd/device-definitions-api/sync_prune_test.go @@ -0,0 +1,77 @@ +package main + +import ( + "context" + "fmt" + "testing" + + "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(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(nil) + + n, err := pruneOrphans(context.Background(), indexer, "defs", idSet("id_0"), true) + require.NoError(t, err) + assert.Equal(t, 999, n) +} From 0c323f0fc2f199fe8190721d346ac1d882a87798 Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Tue, 25 Aug 2026 08:19:20 -0400 Subject: [PATCH 10/16] fix: prune only definitions that are actually gone, not unindexed ones The prune pass built its keep-set from the documents it upserts, which are filtered to year >= minSearchYear. Anything older therefore looked like an orphan, so a definition that exists in the catalog but sits below the index cutoff would be deleted from the search index. Measured against prod: definitions_prod carries 1,216 documents that are not in the year >= 2007 catalog set, and 1,173 of them are real definitions from 2005 and 2006 -- acura_mdx_2005 and the like -- indexed before the cutoff existed and searchable today. Only 43 are genuinely absent from the catalog. The bulk guard would not have caught it either: the limit at that index size is 1,791, and 1,216 slides underneath. buildManufacturerDocuments now returns every id it saw alongside the documents it built, and the keep-set uses those. A definition below the cutoff is not an orphan -- it exists, it is simply not indexed going forward. Whether to drop pre-cutoff documents is a product decision, not something a cleanup pass should do silently on its first run. --- .../sync_device_definition_search.go | 27 ++++++++------- .../sync_device_definition_search_test.go | 12 ++++--- cmd/device-definitions-api/sync_prune_test.go | 33 +++++++++++++++++++ 3 files changed, 56 insertions(+), 16 deletions(-) diff --git a/cmd/device-definitions-api/sync_device_definition_search.go b/cmd/device-definitions-api/sync_device_definition_search.go index 09b84558..1f667657 100644 --- a/cmd/device-definitions-api/sync_device_definition_search.go +++ b/cmd/device-definitions-api/sync_device_definition_search.go @@ -100,18 +100,19 @@ func runSearchSync( } fmt.Printf("Found %d manufacturers\n", len(makes)) - // Every id we upsert; the prune pass treats anything else in the index as - // an orphan. Pre-2007 definitions are deliberately absent, so a stale - // pre-2007 entry gets cleaned up too. + // Every id that exists in the catalog, whether or not it is indexed. The + // prune pass deletes index entries whose definition is gone; a definition + // below the year cutoff is not gone, it is just not indexed going forward, + // and deleting it would remove a document that is live and searchable. catalogIDs := make(map[string]struct{}) for _, dm := range makes { - docs, err := buildManufacturerDocuments(ctx, catalogSvc, dm) + docs, ids, err := buildManufacturerDocuments(ctx, catalogSvc, dm) if err != nil { return fmt.Errorf("build documents for %s: %w", dm.Name, err) } - for _, d := range docs { - catalogIDs[d.ID] = struct{}{} + for _, id := range ids { + catalogIDs[id] = struct{}{} } if len(docs) == 0 { fmt.Printf("%s: no definitions to sync\n", dm.Name) @@ -135,23 +136,27 @@ func runSearchSync( 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, indexed or not: a definition below the cutoff +// still exists, so the prune pass must not treat it as an orphan. func buildManufacturerDocuments( ctx context.Context, 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 := 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 } @@ -175,7 +180,7 @@ func buildManufacturerDocuments( } pageIndex++ } - return docs, nil + return docs, allIDs, nil } // pruneOrphans deletes search documents whose definition no longer exists in 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 d9927c2b..daa0d082 100644 --- a/cmd/device-definitions-api/sync_device_definition_search_test.go +++ b/cmd/device-definitions-api/sync_device_definition_search_test.go @@ -34,7 +34,7 @@ func TestBuildManufacturerDocuments_FiltersPre2007(t *testing.T) { 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) @@ -52,7 +52,7 @@ func TestBuildManufacturerDocuments_PopulatesFields(t *testing.T) { {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) @@ -86,7 +86,7 @@ func TestBuildManufacturerDocuments_TerminatesOnShortPage(t *testing.T) { 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) } @@ -108,7 +108,7 @@ func TestBuildManufacturerDocuments_PagesUntilShortPage(t *testing.T) { 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*catalogPageSize+1) } @@ -123,7 +123,7 @@ func TestBuildManufacturerDocuments_PropagatesError(t *testing.T) { 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) } @@ -179,6 +179,8 @@ func TestRunSearchSync_SkipsMakeWithNoEligibleDefs(t *testing.T) { 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", 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 index 584e1e66..43b70d78 100644 --- a/cmd/device-definitions-api/sync_prune_test.go +++ b/cmd/device-definitions-api/sync_prune_test.go @@ -5,6 +5,8 @@ import ( "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" @@ -75,3 +77,34 @@ func TestPruneOrphans_AllowsBulkPruneWhenFlagged(t *testing.T) { 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) + + 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(nil) + + err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) + require.NoError(t, err) +} From b9c2ddd4cef68c6f26cb0f8be5db0eb37614b951 Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Tue, 25 Aug 2026 10:33:49 -0400 Subject: [PATCH 11/16] fix: stop silent write no-ops, decouple the sync page size, fail an empty sync Three ways a failure was being reported as success. An empty DEFINITIONS_WORKER_URL made every write a no-op that still answered success. workerRequest returned (false, nil) and all three callers discarded the bool, so Create returned an id, Delete logged "Deleted device definition", and a VIN decode answered 200 with a definitionId that had never been written to R2 -- traceable only through an Info log. A missing write endpoint is a misconfiguration, not a mode of operation, so it is now an error. catalogPageSize was declared twice, in package main and in package gateways. The sync loop terminated on len(page) < the main copy while pages actually came from the gateway copy. Lowering the gateway constant would have ended paging early for the 11 manufacturers holding more than 500 definitions -- BMW alone has 1618 -- leaving the rest out of the prune keep-set and deleting their search documents. Against a 16,697-document index the bulk guard sits at 1,669, so it would not have tripped. The gateway constant is now exported and used by both. identity-api answers HTTP 200 with a populated `errors` array and null data when it fails, which the client surfaces as (nil, nil). The daily cron then printed "Index Updated" having indexed nothing. Zero manufacturers is now a hard error. --- .../sync_device_definition_search.go | 10 ++++++++-- .../sync_device_definition_search_test.go | 5 +++-- cmd/device-definitions-api/sync_prune_test.go | 18 +++++++++++++++++ .../device_definition_catalog_service.go | 20 +++++++++++-------- .../device_definition_catalog_service_test.go | 17 ++++++++++++++++ 5 files changed, 58 insertions(+), 12 deletions(-) diff --git a/cmd/device-definitions-api/sync_device_definition_search.go b/cmd/device-definitions-api/sync_device_definition_search.go index 1f667657..9afbfdee 100644 --- a/cmd/device-definitions-api/sync_device_definition_search.go +++ b/cmd/device-definitions-api/sync_device_definition_search.go @@ -26,7 +26,6 @@ const ( // explicit flag. pruneFloor = 100 pruneFraction = 0.10 - catalogPageSize = 500 searchDefaultScore = 1 ) @@ -98,6 +97,13 @@ func runSearchSync( 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)) // Every id that exists in the catalog, whether or not it is indexed. The @@ -175,7 +181,7 @@ func buildManufacturerDocuments( Score: searchDefaultScore, }) } - if len(page) < catalogPageSize { + if len(page) < gateways.CatalogPageSize { break } pageIndex++ 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 daa0d082..8843f5b9 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" @@ -96,7 +97,7 @@ func TestBuildManufacturerDocuments_PagesUntilShortPage(t *testing.T) { onChain := mock_gateways.NewMockDeviceDefinitionCatalogService(ctrl) dm := coremodels.Manufacturer{TokenID: 1, Name: "Honda"} - full := make([]coremodels.DeviceDefinitionTablelandModel, catalogPageSize) + full := make([]coremodels.DeviceDefinitionTablelandModel, gateways.CatalogPageSize) for i := range full { full[i] = defToyota(2020, "Civic", "id") } @@ -110,7 +111,7 @@ func TestBuildManufacturerDocuments_PagesUntilShortPage(t *testing.T) { docs, _, err := buildManufacturerDocuments(context.Background(), onChain, dm) require.NoError(t, err) - assert.Len(t, docs, 2*catalogPageSize+1) + assert.Len(t, docs, 2*gateways.CatalogPageSize+1) } func TestBuildManufacturerDocuments_PropagatesError(t *testing.T) { diff --git a/cmd/device-definitions-api/sync_prune_test.go b/cmd/device-definitions-api/sync_prune_test.go index 43b70d78..7d2e6609 100644 --- a/cmd/device-definitions-api/sync_prune_test.go +++ b/cmd/device-definitions-api/sync_prune_test.go @@ -108,3 +108,21 @@ func TestRunSearchSync_DoesNotPruneDefinitionsBelowTheIndexYearCutoff(t *testing 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) + + 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") +} diff --git a/internal/infrastructure/gateways/device_definition_catalog_service.go b/internal/infrastructure/gateways/device_definition_catalog_service.go index e0f20b55..0dd65871 100644 --- a/internal/infrastructure/gateways/device_definition_catalog_service.go +++ b/internal/infrastructure/gateways/device_definition_catalog_service.go @@ -62,7 +62,10 @@ type DeviceDefinitionCatalogService interface { } const ( - catalogPageSize = 500 + // 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 manufacturersCached = "manufacturers_by_token_id" @@ -278,12 +281,12 @@ func (e *deviceDefinitionCatalogService) QueryDefinitionsByManufacturer(ctx cont matches = append(matches, d.DeviceDefinitionTablelandModel) } } - return paginate(matches, pageIndex, catalogPageSize), nil + return paginate(matches, pageIndex, CatalogPageSize), nil } func paginate(items []coremodels.DeviceDefinitionTablelandModel, pageIndex, pageSize int) []coremodels.DeviceDefinitionTablelandModel { if pageSize <= 0 { - pageSize = catalogPageSize + pageSize = CatalogPageSize } start := pageIndex * pageSize if start >= len(items) { @@ -297,11 +300,14 @@ func paginate(items []coremodels.DeviceDefinitionTablelandModel, pageIndex, page } // workerRequest sends an authenticated request to the definitions-worker. -// When no worker URL is configured (local dev), writes are no-ops. +// 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 == "" { - e.logger.Info().Msgf("DefinitionsWorkerURL not set, skipping %s %s", method, pathSuffix) - return false, nil + 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 { @@ -368,8 +374,6 @@ func (e *deviceDefinitionCatalogService) Create(ctx context.Context, manufacture return nil, err } e.memCache.Delete(manifestCacheKey) - // Returns the id even when the worker call was skipped (no URL set in - // local dev) so callers never dereference a nil result. return &dd.ID, nil } diff --git a/internal/infrastructure/gateways/device_definition_catalog_service_test.go b/internal/infrastructure/gateways/device_definition_catalog_service_test.go index d9c5d756..7f2e5eac 100644 --- a/internal/infrastructure/gateways/device_definition_catalog_service_test.go +++ b/internal/infrastructure/gateways/device_definition_catalog_service_test.go @@ -1,9 +1,12 @@ 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" ) @@ -56,3 +59,17 @@ func TestCatalogManifestDecode(t *testing.T) { 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") +} From cc3bfd27061fde3a13fe49eb26fad66cb62ff2cd Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Tue, 25 Aug 2026 10:50:44 -0400 Subject: [PATCH 12/16] fix: stale read-modify-write, misleading trx hash, blind metrics, pageSize panic bulk-update-powertrain read each definition through the CDN, mutated its metadata and wrote the result back. Documents are served with max-age=86400, so an edit made through the worker earlier that day was read as its pre-edit version and silently overwritten -- Update fetches a fresh base and then has it replaced by the caller's stale copy. Added GetDefinitionByIDFresh, which reads through the worker, and the command now uses it. Read-modify-write callers cannot use the cached path. decode-vin put the definition slug into NewTrxHash, surfaced as new_trx_hash / NewTransactionHash. Definitions are no longer written on-chain, so there is no transaction, and any consumer treating that field as a hash -- checking a 0x prefix, polling an explorer, storing it in a tx_hash column -- gets a slug instead. It stays empty now; the id was already returned in DefinitionId. manifest() counted only its decode failure, so a catalog outage made CatalogManifestRead drop to zero rather than spike, which no "error rate > X" alert would fire on. Every exit now counts itself. Finally, fiber's Query default applies only when a parameter is absent, so an explicit pageSize=0 or pageSize=abc reached the search handler as 0 and divided by zero computing totalPages. Pre-existing on main, but this PR is what makes admin call the endpoint. Both page and pageSize are clamped. --- .../bulk_update_powertrain.go | 4 ++- .../api/handlers/device_definition_handler.go | 9 +++++++ internal/core/queries/decode_vin.go | 9 ++++--- .../device_definition_catalog_service.go | 27 ++++++++++++++++--- .../device_definition_catalog_service_mock.go | 16 +++++++++++ 5 files changed, 58 insertions(+), 7 deletions(-) diff --git a/cmd/device-definitions-api/bulk_update_powertrain.go b/cmd/device-definitions-api/bulk_update_powertrain.go index 3aa63ef7..3befe30b 100644 --- a/cmd/device-definitions-api/bulk_update_powertrain.go +++ b/cmd/device-definitions-api/bulk_update_powertrain.go @@ -86,7 +86,9 @@ func (p *bulkUpdatePowertrain) Execute(ctx context.Context, _ *flag.FlagSet, _ . } fmt.Printf("DefinitionID: %s, Powertrain: %s\n", definitionID, powertrain) - deviceDefinition, manufID, err := catalogSvc.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) diff --git a/internal/api/handlers/device_definition_handler.go b/internal/api/handlers/device_definition_handler.go index 23c80f2b..74ec9260 100644 --- a/internal/api/handlers/device_definition_handler.go +++ b/internal/api/handlers/device_definition_handler.go @@ -226,6 +226,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/core/queries/decode_vin.go b/internal/core/queries/decode_vin.go index efdd4a67..754a2a6c 100644 --- a/internal/core/queries/decode_vin.go +++ b/internal/core/queries/decode_vin.go @@ -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.deviceDefinitionCatalogService.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 diff --git a/internal/infrastructure/gateways/device_definition_catalog_service.go b/internal/infrastructure/gateways/device_definition_catalog_service.go index 0dd65871..b9d2a0fd 100644 --- a/internal/infrastructure/gateways/device_definition_catalog_service.go +++ b/internal/infrastructure/gateways/device_definition_catalog_service.go @@ -51,6 +51,11 @@ type DeviceDefinitionCatalogService interface { 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) @@ -171,24 +176,32 @@ func (e *deviceDefinitionCatalogService) manifest(ctx context.Context) (*catalog 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 { - return nil, fmt.Errorf("catalog returned %d for manifest", resp.StatusCode) + 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 { - metrics.InternalError.With(prometheus.Labels{"method": metricManifestRead}).Inc() + countOutcome(metricManifestRead, err) return nil, errors.Wrap(err, "failed to decode definitions manifest") } - metrics.Success.With(prometheus.Labels{"method": metricManifestRead}).Inc() + countOutcome(metricManifestRead, nil) e.memCache.Set(manifestCacheKey, &m, manifestCacheTTL) return &m, nil } @@ -241,6 +254,14 @@ func (e *deviceDefinitionCatalogService) GetDefinitionByID(ctx context.Context, 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 { diff --git a/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go b/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go index 3bc711b9..424ac180 100644 --- a/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go +++ b/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go @@ -104,6 +104,22 @@ func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) GetDefinitionByID(ctx, 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() From 52daf737018d3cf47891254914d60b7d7692389a Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Tue, 25 Aug 2026 11:30:45 -0400 Subject: [PATCH 13/16] fix: clamp pageSize on the r1 compatibility search too, and use the real worker host cc3bfd2 clamped the definitions search handler and missed the byte-identical one sixty lines above it, which feeds the same (found + pageSize - 1) / pageSize arithmetic. GET /device-definitions/search-r1?pageSize=0 still divided by zero; fiber's recover middleware turned it into a 500 rather than a crash, but it was the same defect the commit claimed to fix. DEFINITIONS_WORKER_URL also pointed at definitions-worker.dimo.workers.dev in both values files. That host has no A record -- wrangler disables workers.dev once custom domains are configured -- so every write would have failed on DNS. --- charts/device-definitions-api/values-prod.yaml | 2 +- charts/device-definitions-api/values.yaml | 2 +- internal/api/handlers/device_definition_handler.go | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/charts/device-definitions-api/values-prod.yaml b/charts/device-definitions-api/values-prod.yaml index 9e824e54..31358dca 100644 --- a/charts/device-definitions-api/values-prod.yaml +++ b/charts/device-definitions-api/values-prod.yaml @@ -21,7 +21,7 @@ env: REDIS_TLS: true KAFKA_BROKERS: kafka-prod-dimo-kafka-kafka-brokers:9092 DEFINITIONS_CATALOG_URL: https://definitions.dimo.org - DEFINITIONS_WORKER_URL: https://definitions-worker.dimo.workers.dev + 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 5020e037..ce2a73c6 100644 --- a/charts/device-definitions-api/values.yaml +++ b/charts/device-definitions-api/values.yaml @@ -52,7 +52,7 @@ env: DAT_GROUP_URL: https://www.datgroup.com/myClaim/soap/v2/VehicleIdentificationService PRIVATE_KEY_MODE: false DEFINITIONS_CATALOG_URL: https://definitions.dev.dimo.org - DEFINITIONS_WORKER_URL: https://definitions-worker-dev.dimo.workers.dev + 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/internal/api/handlers/device_definition_handler.go b/internal/api/handlers/device_definition_handler.go index 74ec9260..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} From 86f10a0aa7366669ebc1fb761240886dcd4765a9 Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Tue, 25 Aug 2026 11:37:56 -0400 Subject: [PATCH 14/16] fix: base deletions on a pinned fresh manifest, not a manufacturer walk The prune's keep-set decides what gets deleted and it was built from whatever `manifest()` happened to return. Two ways that was wrong. It came from the CDN, which serves manifest.json with max-age=300, so any definition created in the five minutes before a sync was absent from the keep-set and its search document deleted. And the per-page cache expires after a minute while a full run takes several, so pages could come from different snapshots -- a definition that shifted position between pages was returned by neither and deleted too. PinCatalogSnapshot fetches once, bypassing the CDN, and holds it for the run. The keep-set was also assembled by walking identity-api's manufacturer list, which made it only as complete as that list. One make missing meant every one of its definitions looked like an orphan: BMW alone is 1,618 documents, and the bulk guard at that index size is 1,669, so it would have deleted them all without tripping. The keep-set now comes from the manifest, which is the catalog. The walk still drives indexing, where an incomplete list only means less gets refreshed. Also: add_vin dereferenced a definition that is nil both for a missing id and for one owned by another manufacturer; an identity blip could cache an empty manufacturer map for ten minutes, turning a brief outage into ten minutes of silently skipped rows; and the prune now logs every id it removes, because documents below the index year cutoff are never re-upserted and would otherwise vanish without a record. --- cmd/device-definitions-api/add_vin.go | 6 ++ .../sync_device_definition_search.go | 38 +++++++--- .../sync_device_definition_search_test.go | 12 +++ cmd/device-definitions-api/sync_prune_test.go | 42 +++++++++++ .../device_definition_catalog_service.go | 73 ++++++++++++++++++- .../device_definition_catalog_service_mock.go | 29 ++++++++ 6 files changed, 188 insertions(+), 12 deletions(-) diff --git a/cmd/device-definitions-api/add_vin.go b/cmd/device-definitions-api/add_vin.go index b665a9fe..f78c20de 100644 --- a/cmd/device-definitions-api/add_vin.go +++ b/cmd/device-definitions-api/add_vin.go @@ -116,6 +116,12 @@ func (p *addVINCmd) Execute(ctx context.Context, _ *flag.FlagSet, _ ...interface 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/sync_device_definition_search.go b/cmd/device-definitions-api/sync_device_definition_search.go index 9afbfdee..844f4e70 100644 --- a/cmd/device-definitions-api/sync_device_definition_search.go +++ b/cmd/device-definitions-api/sync_device_definition_search.go @@ -93,6 +93,15 @@ func runSearchSync( collectionName string, allowBulkPrune bool, ) error { + // Pin one fresh manifest for the whole run before anything reads the + // catalog. The keep-set built below decides what gets deleted, and the CDN + // serves the manifest with max-age=300 while the per-page cache expires + // mid-run -- either would leave a live definition out of the keep-set and + // delete its search document. + 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) @@ -106,20 +115,25 @@ func runSearchSync( } fmt.Printf("Found %d manufacturers\n", len(makes)) - // Every id that exists in the catalog, whether or not it is indexed. The - // prune pass deletes index entries whose definition is gone; a definition - // below the year cutoff is not gone, it is just not indexed going forward, - // and deleting it would remove a document that is live and searchable. - catalogIDs := make(map[string]struct{}) + // 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) + } + catalogIDs := make(map[string]struct{}, len(allIDs)) + for _, id := range allIDs { + catalogIDs[id] = struct{}{} + } for _, dm := range makes { - docs, ids, err := buildManufacturerDocuments(ctx, catalogSvc, dm) + docs, _, err := buildManufacturerDocuments(ctx, catalogSvc, dm) if err != nil { return fmt.Errorf("build documents for %s: %w", dm.Name, err) } - for _, id := range ids { - catalogIDs[id] = struct{}{} - } if len(docs) == 0 { fmt.Printf("%s: no definitions to sync\n", dm.Name) continue @@ -223,6 +237,12 @@ func pruneOrphans(ctx context.Context, indexer SearchIndexer, collectionName str len(stale), len(indexed), limit) } + // Log every id before deleting. Documents below the index year cutoff are + // never re-upserted by a sync, so if this pass ever removes one wrongly + // there is otherwise no record of what it was. + for _, id := range stale { + fmt.Printf(" pruning search document with no definition: %s\n", id) + } if err := indexer.DeleteDocuments(ctx, collectionName, stale); err != nil { return 0, fmt.Errorf("delete orphaned search documents: %w", err) } 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 8843f5b9..07699a60 100644 --- a/cmd/device-definitions-api/sync_device_definition_search_test.go +++ b/cmd/device-definitions-api/sync_device_definition_search_test.go @@ -133,6 +133,8 @@ func TestRunSearchSync_FlushesPerManufacturer(t *testing.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", "t1"}, nil).AnyTimes() identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{ {TokenID: 1, Name: "Honda"}, @@ -170,6 +172,8 @@ func TestRunSearchSync_SkipsMakeWithNoEligibleDefs(t *testing.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{"s1"}, nil).AnyTimes() identity.EXPECT().GetManufacturers().Return([]coremodels.Manufacturer{ {TokenID: 9, Name: "Studebaker"}, @@ -192,6 +196,8 @@ func TestRunSearchSync_PropagatesManufacturersError(t *testing.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(nil, nil).AnyTimes() boom := errors.New("identity down") identity.EXPECT().GetManufacturers().Return(nil, boom) @@ -205,6 +211,8 @@ func TestRunSearchSync_PropagatesUpsertError(t *testing.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"}, @@ -224,6 +232,8 @@ func TestRunSearchSync_PrunesDefinitionsMissingFromCatalog(t *testing.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"}, @@ -247,6 +257,8 @@ func TestRunSearchSync_DoesNotPruneDefinitionsThatAreStillInTheCatalog(t *testin 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"}, diff --git a/cmd/device-definitions-api/sync_prune_test.go b/cmd/device-definitions-api/sync_prune_test.go index 7d2e6609..063bbcc6 100644 --- a/cmd/device-definitions-api/sync_prune_test.go +++ b/cmd/device-definitions-api/sync_prune_test.go @@ -86,6 +86,8 @@ func TestRunSearchSync_DoesNotPruneDefinitionsBelowTheIndexYearCutoff(t *testing 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"}, @@ -118,6 +120,7 @@ func TestRunSearchSync_FailsWhenIdentityReturnsNoManufacturers(t *testing.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. @@ -126,3 +129,42 @@ func TestRunSearchSync_FailsWhenIdentityReturnsNoManufacturers(t *testing.T) { require.Error(t, err) assert.Contains(t, err.Error(), "no manufacturers") } + +// The keep-set decides what gets deleted, so it must come from a manifest that +// is both fresh and stable for the whole run. The CDN serves the manifest with +// max-age=300, and the per-page cache expires mid-run, so without pinning a +// definition created minutes ago -- or one that shifts pages during the run -- +// is absent from the keep-set and its search document is deleted. +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) +} diff --git a/internal/infrastructure/gateways/device_definition_catalog_service.go b/internal/infrastructure/gateways/device_definition_catalog_service.go index b9d2a0fd..cdea5b56 100644 --- a/internal/infrastructure/gateways/device_definition_catalog_service.go +++ b/internal/infrastructure/gateways/device_definition_catalog_service.go @@ -61,6 +61,18 @@ type DeviceDefinitionCatalogService interface { 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 bypassing the CDN and holds it for + // the caller's whole run. Anything that pages over the catalog to decide what + // to delete must call this first: the CDN serves the manifest with + // max-age=300, so a definition created in the last five minutes is missing + // from it, and the per-page cache expires mid-run so pages can come from + // different snapshots and skip a definition entirely. + 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) @@ -70,9 +82,11 @@ 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 + 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" ) @@ -206,6 +220,51 @@ func (e *deviceDefinitionCatalogService) manifest(ctx context.Context) (*catalog 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 { + url := e.catalogURL("/manifest.json") + if base := e.settings.DefinitionsWorkerURL; base != "" { + url = strings.TrimSuffix(base, "/") + "/manifest.json" + } + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + if err != nil { + countOutcome(metricManifestRead, err) + return err + } + 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") + } + 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) } @@ -219,6 +278,14 @@ func (e *deviceDefinitionCatalogService) GetManufacturerNameByID(_ context.Conte 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 } diff --git a/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go b/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go index 424ac180..14e6ed76 100644 --- a/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go +++ b/internal/infrastructure/gateways/mocks/device_definition_catalog_service_mock.go @@ -43,6 +43,21 @@ func (m *MockDeviceDefinitionCatalogService) EXPECT() *MockDeviceDefinitionCatal 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() @@ -180,6 +195,20 @@ func (mr *MockDeviceDefinitionCatalogServiceMockRecorder) GetManufacturerNameByI 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() From ebb8bdd3eb02ecb2698dc4e24b35948113817f5e Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Tue, 25 Aug 2026 11:56:11 -0400 Subject: [PATCH 15/16] fix: correct the pin's rationale, tighten the prune guard, report real deletes PinCatalogSnapshot's justification was wrong. It claimed to bypass a CDN serving the manifest with max-age=300, but the worker generates every response for definitions.dimo.org -- no cf-cache-status, no age, and the date header advances per request across colos -- so there is no edge cache in front of it, and after the URL fix the worker and catalog hosts are the same anyway. The pin still earns its place for the other reason: the per-request cache expires after a minute while a full sync takes several, so without it pages come from different manifests and a definition that shifts between them is returned by neither and deleted as an orphan. The comments now say that instead. The prune guard was calibrated above the failure it exists to catch. Ten percent of the live index is ~1,790 deletions, and one large manufacturer missing from the keep-set is 1,618 documents for BMW alone, so the motivating disaster slid underneath it. Two percent, against routine churn of tens. An empty keep-set is now a hard error rather than a silent no-op sync, matching the treatment identity's manufacturer list already got -- and this is the input that drives deletions. The manifest's own count is checked against the definitions it carries. DeleteDocuments now reports how many it removed and logs each one as it succeeds. It deletes one at a time and stops on the first error, so logging the whole batch up front claimed ids that still existed -- in the audit trail for deletions that cannot be undone. --- cmd/device-definitions-api/search_indexer.go | 14 ++++++---- .../search_indexer_mock_test.go | 7 +++-- .../sync_device_definition_search.go | 24 ++++++++-------- .../sync_device_definition_search_test.go | 2 +- cmd/device-definitions-api/sync_prune_test.go | 6 ++-- .../device_definition_catalog_service.go | 28 +++++++++++-------- 6 files changed, 47 insertions(+), 34 deletions(-) diff --git a/cmd/device-definitions-api/search_indexer.go b/cmd/device-definitions-api/search_indexer.go index ecfe461a..58e7d9b2 100644 --- a/cmd/device-definitions-api/search_indexer.go +++ b/cmd/device-definitions-api/search_indexer.go @@ -18,8 +18,9 @@ type SearchIndexer interface { 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 document ids from the collection. - DeleteDocuments(ctx context.Context, collectionName string, ids []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 { @@ -93,11 +94,14 @@ func (t *typesenseSearchIndexer) ExportIDs(ctx context.Context, collectionName s // 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) error { +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 errors.Wrapf(err, "failed to delete document %s", id) + return deleted, errors.Wrapf(err, "failed to delete document %s", id) } + deleted++ + fmt.Printf(" pruned search document with no definition: %s\n", id) } - return nil + 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 774522d4..2725bb05 100644 --- a/cmd/device-definitions-api/search_indexer_mock_test.go +++ b/cmd/device-definitions-api/search_indexer_mock_test.go @@ -42,11 +42,12 @@ func (m *MockSearchIndexer) EXPECT() *MockSearchIndexerMockRecorder { } // DeleteDocuments mocks base method. -func (m *MockSearchIndexer) DeleteDocuments(ctx context.Context, collectionName string, ids []string) error { +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].(error) - return ret0 + ret0, _ := ret[0].(int) + ret1, _ := ret[1].(error) + return ret0, ret1 } // DeleteDocuments indicates an expected call of DeleteDocuments. diff --git a/cmd/device-definitions-api/sync_device_definition_search.go b/cmd/device-definitions-api/sync_device_definition_search.go index 844f4e70..737310c6 100644 --- a/cmd/device-definitions-api/sync_device_definition_search.go +++ b/cmd/device-definitions-api/sync_device_definition_search.go @@ -124,6 +124,9 @@ func runSearchSync( 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{}{} @@ -158,8 +161,8 @@ func runSearchSync( // buildManufacturerDocuments pulls every definition for a manufacturer and // converts the ones from model year >= minSearchYear into SearchEntryItems. It -// also returns every id it saw, indexed or not: a definition below the cutoff -// still exists, so the prune pass must not treat it as an orphan. +// 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, catalogSvc gateways.DeviceDefinitionCatalogService, @@ -237,16 +240,15 @@ func pruneOrphans(ctx context.Context, indexer SearchIndexer, collectionName str len(stale), len(indexed), limit) } - // Log every id before deleting. Documents below the index year cutoff are - // never re-upserted by a sync, so if this pass ever removes one wrongly - // there is otherwise no record of what it was. - for _, id := range stale { - fmt.Printf(" pruning search document with no definition: %s\n", id) - } - if err := indexer.DeleteDocuments(ctx, collectionName, stale); err != nil { - return 0, fmt.Errorf("delete orphaned search documents: %w", err) + // 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 len(stale), nil + return deleted, nil } func pruneLimit(indexed int) int { 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 07699a60..28fde765 100644 --- a/cmd/device-definitions-api/sync_device_definition_search_test.go +++ b/cmd/device-definitions-api/sync_device_definition_search_test.go @@ -246,7 +246,7 @@ func TestRunSearchSync_PrunesDefinitionsMissingFromCatalog(t *testing.T) { indexer.EXPECT().ExportIDs(gomock.Any(), "dd-search"). Return([]string{"h1", "deleted_1"}, nil) indexer.EXPECT().DeleteDocuments(gomock.Any(), "dd-search", []string{"deleted_1"}). - Return(nil) + Return(1, nil) 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 index 063bbcc6..e3c6031b 100644 --- a/cmd/device-definitions-api/sync_prune_test.go +++ b/cmd/device-definitions-api/sync_prune_test.go @@ -26,7 +26,7 @@ func TestPruneOrphans_DeletesIndexedIDsMissingFromCatalog(t *testing.T) { 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(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) @@ -71,7 +71,7 @@ func TestPruneOrphans_AllowsBulkPruneWhenFlagged(t *testing.T) { indexer.EXPECT().ExportIDs(gomock.Any(), "defs").Return(indexed, nil) indexer.EXPECT(). DeleteDocuments(gomock.Any(), "defs", gomock.Len(999)). - Return(nil) + Return(999, nil) n, err := pruneOrphans(context.Background(), indexer, "defs", idSet("id_0"), true) require.NoError(t, err) @@ -105,7 +105,7 @@ func TestRunSearchSync_DoesNotPruneDefinitionsBelowTheIndexYearCutoff(t *testing 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(nil) + Return(1, nil) err := runSearchSync(context.Background(), identity, onChain, indexer, "dd-search", false) require.NoError(t, err) diff --git a/internal/infrastructure/gateways/device_definition_catalog_service.go b/internal/infrastructure/gateways/device_definition_catalog_service.go index cdea5b56..c4eea292 100644 --- a/internal/infrastructure/gateways/device_definition_catalog_service.go +++ b/internal/infrastructure/gateways/device_definition_catalog_service.go @@ -66,12 +66,16 @@ type DeviceDefinitionCatalogService interface { // 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 bypassing the CDN and holds it for - // the caller's whole run. Anything that pages over the catalog to decide what - // to delete must call this first: the CDN serves the manifest with - // max-age=300, so a definition created in the last five minutes is missing - // from it, and the per-page cache expires mid-run so pages can come from - // different snapshots and skip a definition entirely. + // 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) @@ -233,15 +237,12 @@ func (e *deviceDefinitionCatalogService) CatalogIDs(ctx context.Context) ([]stri } func (e *deviceDefinitionCatalogService) PinCatalogSnapshot(ctx context.Context) error { - url := e.catalogURL("/manifest.json") - if base := e.settings.DefinitionsWorkerURL; base != "" { - url = strings.TrimSuffix(base, "/") + "/manifest.json" - } - req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + 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 { @@ -259,6 +260,11 @@ func (e *deviceDefinitionCatalogService) PinCatalogSnapshot(ctx context.Context) 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) From 28152d91729bcaa359e84fdc2cb74051d794defe Mon Sep 17 00:00:00 2001 From: zer0stars <74260741+zer0stars@users.noreply.github.com> Date: Tue, 25 Aug 2026 12:52:49 -0400 Subject: [PATCH 16/16] fix: replace the prune fraction with a flat cap The guard was a percentage of the index with a floor underneath it, which meant two constants, a helper to combine them, and a regime where each silently took over from the other. Below ~5,000 documents the floor decided; above it the fraction did. Both existing bulk-prune tests sat in the floor regime, so the suite stayed green for any fraction between 0.02 and 0.99 -- which is how the last change to it shipped in a commit message and not in the code. The ratio was never doing the work. What matters is one number above routine churn and below the smallest failure worth catching: prod carries 41 orphans, and a keep-set that lost a whole manufacturer is ~1,615 documents. 500 sits between them and says so directly. The test now pins that relationship rather than an arithmetic result. --- .../sync_device_definition_search.go | 37 ++++++++----------- cmd/device-definitions-api/sync_prune_test.go | 18 ++++++--- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/cmd/device-definitions-api/sync_device_definition_search.go b/cmd/device-definitions-api/sync_device_definition_search.go index 737310c6..8f76e3da 100644 --- a/cmd/device-definitions-api/sync_device_definition_search.go +++ b/cmd/device-definitions-api/sync_device_definition_search.go @@ -21,12 +21,12 @@ import ( const ( minSearchYear = 2007 - // Guardrail on the prune pass: deleting more than pruneFraction of the - // index (with a pruneFloor allowance for small collections) requires an - // explicit flag. - pruneFloor = 100 - pruneFraction = 0.10 - searchDefaultScore = 1 + // 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 { @@ -93,11 +93,11 @@ func runSearchSync( collectionName string, allowBulkPrune bool, ) error { - // Pin one fresh manifest for the whole run before anything reads the - // catalog. The keep-set built below decides what gets deleted, and the CDN - // serves the manifest with max-age=300 while the per-page cache expires - // mid-run -- either would leave a live definition out of the keep-set and - // delete its search document. + // 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) } @@ -151,7 +151,9 @@ func runSearchSync( // forever, returning an id that 404s. pruned, err := pruneOrphans(ctx, indexer, collectionName, catalogIDs, allowBulkPrune) if err != nil { - return err + // 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) @@ -234,10 +236,10 @@ func pruneOrphans(ctx context.Context, indexer SearchIndexer, collectionName str // 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 limit := pruneLimit(len(indexed)); len(stale) > limit && !allowBulk { + 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), limit) + len(stale), len(indexed), maxPruneWithoutFlag) } // Documents below the index year cutoff are never re-upserted by a sync, so @@ -251,13 +253,6 @@ func pruneOrphans(ctx context.Context, indexer SearchIndexer, collectionName str return deleted, nil } -func pruneLimit(indexed int) int { - if limit := int(float64(indexed) * pruneFraction); limit > pruneFloor { - return limit - } - return pruneFloor -} - func deviceDefinitionSearchSchema(collectionName string) *api.CollectionSchema { hasFacet := true nestedFields := false diff --git a/cmd/device-definitions-api/sync_prune_test.go b/cmd/device-definitions-api/sync_prune_test.go index e3c6031b..407ac623 100644 --- a/cmd/device-definitions-api/sync_prune_test.go +++ b/cmd/device-definitions-api/sync_prune_test.go @@ -130,11 +130,9 @@ func TestRunSearchSync_FailsWhenIdentityReturnsNoManufacturers(t *testing.T) { assert.Contains(t, err.Error(), "no manufacturers") } -// The keep-set decides what gets deleted, so it must come from a manifest that -// is both fresh and stable for the whole run. The CDN serves the manifest with -// max-age=300, and the per-page cache expires mid-run, so without pinning a -// definition created minutes ago -- or one that shifts pages during the run -- -// is absent from the keep-set and its search document is deleted. +// 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) @@ -168,3 +166,13 @@ func TestRunSearchSync_FailsWhenTheSnapshotCannotBePinned(t *testing.T) { 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) +}