diff --git a/Makefile b/Makefile index 056d1687..ae568d2a 100644 --- a/Makefile +++ b/Makefile @@ -37,8 +37,8 @@ perf-test: MOCKREG = $$(pwd)/tests/e2e/misccontracts/contract_mock_registry -.PHONY: e2e-test-recompile-mock -e2e-test-recompile-mock: +.PHONY: e2e-test-mock +e2e-test-mock: solc --bin --abi -o $(MOCKREG) --include-path . --base-path $(MOCKREG) --overwrite --input-file $(MOCKREG)/MockRegistry.sol abigen --out $(MOCKREG)/mock_registry.go --pkg contract_mock_registry --type MockRegistry --abi $(MOCKREG)/MockRegistry.abi --bin $(MOCKREG)/MockRegistry.bin diff --git a/cmd/updater/updater.go b/cmd/updater/updater.go index 96417b67..0a64ec8f 100644 --- a/cmd/updater/updater.go +++ b/cmd/updater/updater.go @@ -96,7 +96,7 @@ func initServices(ctx context.Context, cfg config.Config) ([]services.Service, e updaterService := updater.NewUpdaterService( ctx, registryClient, releaseClient, config.DefaultContainerPort, - developmentMode, cfg.AutoUpdate.TrackPrereleases, updateDelay, 0, + developmentMode, cfg.AutoUpdate.TrackPrereleases, updateDelay, cfg.AutoUpdate.CheckIntervalSeconds, ) return []services.Service{ diff --git a/config/config.go b/config/config.go index 7f5c422c..187a6833 100644 --- a/config/config.go +++ b/config/config.go @@ -96,9 +96,10 @@ type TelemetryConfig struct { } type AutoUpdateConfig struct { - Disable bool `yaml:"disable" json:"disable"` - UpdateDelay *int `yaml:"updateDelay" json:"updateDelay"` - TrackPrereleases bool `yaml:"trackPrereleases" json:"trackPrereleases"` + Disable bool `yaml:"disable" json:"disable"` + UpdateDelay *int `yaml:"updateDelay" json:"updateDelay"` + TrackPrereleases bool `yaml:"trackPrereleases" json:"trackPrereleases"` + CheckIntervalSeconds int `yaml:"checkIntervalSeconds" json:"checkIntervalSeconds" default:"60"` // 1m } type AgentLogsConfig struct { diff --git a/go.mod b/go.mod index 3a9e55fc..4e10a4f9 100644 --- a/go.mod +++ b/go.mod @@ -32,7 +32,7 @@ require ( ) require ( - github.com/forta-network/forta-core-go v0.0.0-20230301144359-910b79dcd336 + github.com/forta-network/forta-core-go v0.0.0-20230302095116-b0f98655df8a github.com/libp2p/go-libp2p v0.23.2 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/rs/cors v1.7.0 diff --git a/go.sum b/go.sum index d3b7a6f4..aa096a21 100644 --- a/go.sum +++ b/go.sum @@ -325,8 +325,8 @@ github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:1i71OnUq3iUe github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/forta-network/forta-core-go v0.0.0-20230301144359-910b79dcd336 h1:avtTwbM+M/lRSPd1h98rwc21yB1ESGyGLPvmRNV/E8M= -github.com/forta-network/forta-core-go v0.0.0-20230301144359-910b79dcd336/go.mod h1:gffFqv24ErxEILzjvhXCaVHa2dljzdILlaJyUlkDnfw= +github.com/forta-network/forta-core-go v0.0.0-20230302095116-b0f98655df8a h1:VISkcUsebS9E12aent55EsP0lbXIJKLb8TspL0GPlFg= +github.com/forta-network/forta-core-go v0.0.0-20230302095116-b0f98655df8a/go.mod h1:gffFqv24ErxEILzjvhXCaVHa2dljzdILlaJyUlkDnfw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= diff --git a/nodeutils/error_counter.go b/nodeutils/error_counter.go new file mode 100644 index 00000000..c9890806 --- /dev/null +++ b/nodeutils/error_counter.go @@ -0,0 +1,31 @@ +package nodeutils + +import "sync" + +// ErrorCounter checks incoming errors and tells if we are over +// the max amount of consecutive errors. +type ErrorCounter struct { + max uint + isCriticalError func(error) bool + count uint + mu sync.Mutex +} + +// NewErrorCounter creates a new error counter. +func NewErrorCounter(max uint, isCriticalError func(error) bool) *ErrorCounter { + return &ErrorCounter{ + max: max, + isCriticalError: isCriticalError, + } +} + +func (ec *ErrorCounter) TooManyErrs(err error) bool { + ec.mu.Lock() + defer ec.mu.Unlock() + if err == nil || !ec.isCriticalError(err) { + ec.count = 0 // reset if other errors or no errors + return false + } + ec.count++ + return ec.count >= ec.max +} diff --git a/nodeutils/error_counter_test.go b/nodeutils/error_counter_test.go new file mode 100644 index 00000000..94b71e80 --- /dev/null +++ b/nodeutils/error_counter_test.go @@ -0,0 +1,22 @@ +package nodeutils + +import ( + "errors" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestErrorCounter(t *testing.T) { + r := require.New(t) + + // max two consecutive non-nil errors means a red flag + counter := NewErrorCounter(2, func(err error) bool { + return err != nil + }) + + r.False(counter.TooManyErrs(errors.New("error 1"))) + r.False(counter.TooManyErrs(nil)) // no error - back to zero + r.False(counter.TooManyErrs(errors.New("error 1"))) + r.True(counter.TooManyErrs(errors.New("error 2"))) // hit the limit - we're done +} diff --git a/services/publisher/publisher.go b/services/publisher/publisher.go index 8ee65e75..074efd11 100644 --- a/services/publisher/publisher.go +++ b/services/publisher/publisher.go @@ -152,9 +152,10 @@ func (pub *Publisher) publishNextBatch(batch *protocol.AlertBatch) (published bo // add release info if it's available if pub.cfg.ReleaseSummary != nil { batch.ScannerVersion = &protocol.ScannerVersion{ - Commit: pub.cfg.ReleaseSummary.Commit, - Ipfs: pub.cfg.ReleaseSummary.IPFS, - Version: pub.cfg.ReleaseSummary.Version, + Commit: pub.cfg.ReleaseSummary.Commit, + Ipfs: pub.cfg.ReleaseSummary.IPFS, + Version: pub.cfg.ReleaseSummary.Version, + AutoUpdates: !pub.cfg.Config.AutoUpdate.Disable, } } lastBatchRef, err := pub.batchRefStore.Get() diff --git a/services/scanner/agentpool/poolagent/agent.go b/services/scanner/agentpool/poolagent/agent.go index 687c53cf..e5975b64 100644 --- a/services/scanner/agentpool/poolagent/agent.go +++ b/services/scanner/agentpool/poolagent/agent.go @@ -13,6 +13,7 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/forta-network/forta-node/metrics" + "github.com/forta-network/forta-node/nodeutils" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -47,7 +48,7 @@ type Agent struct { combinationRequests chan *CombinationRequest // never closed - deallocated when agent is discarded combinationResults chan<- *scanner.CombinationAlertResult - errCounter *errorCounter + errCounter *nodeutils.ErrorCounter msgClient clients.MessageClient client clients.AgentClient @@ -113,7 +114,7 @@ func New(ctx context.Context, agentCfg config.AgentConfig, msgClient clients.Mes blockResults: blockResults, combinationRequests: make(chan *CombinationRequest, DefaultBufferSize), combinationResults: alertResults, - errCounter: NewErrorCounter(3, isCriticalErr), + errCounter: nodeutils.NewErrorCounter(3, isCriticalErr), msgClient: msgClient, ready: make(chan struct{}), closed: make(chan struct{}), diff --git a/services/scanner/agentpool/poolagent/error_counter.go b/services/scanner/agentpool/poolagent/error_counter.go deleted file mode 100644 index 63ff28a8..00000000 --- a/services/scanner/agentpool/poolagent/error_counter.go +++ /dev/null @@ -1,31 +0,0 @@ -package poolagent - -import "sync" - -// errorCounter checks incoming errors and tells if we are over -// the max amount of consecutive errors. -type errorCounter struct { - max uint - errCheck func(error) bool - count uint - sync.Mutex -} - -// NewErrorCounter creates a new error counter. -func NewErrorCounter(max uint, errCheck func(error) bool) *errorCounter { - return &errorCounter{ - max: max, - errCheck: errCheck, - } -} - -func (ec *errorCounter) TooManyErrs(err error) bool { - ec.Lock() - defer ec.Unlock() - if err == nil || !ec.errCheck(err) { - ec.count = 0 // reset if other errors or no errors - return false - } - ec.count++ - return ec.count >= ec.max -} diff --git a/services/updater/updater.go b/services/updater/updater.go index 145a937d..5f11a719 100644 --- a/services/updater/updater.go +++ b/services/updater/updater.go @@ -18,6 +18,7 @@ import ( "github.com/forta-network/forta-core-go/utils" "github.com/forta-network/forta-node/config" + "github.com/forta-network/forta-node/nodeutils" log "github.com/sirupsen/logrus" ) @@ -25,6 +26,7 @@ var ( errNotAvailable = errors.New("new release not available") defaultUpdateCheckIntervalSeconds = 60 + maxConsecutiveUpdateErrors = 60 ) // UpdaterService receives the release updates. @@ -46,6 +48,8 @@ type UpdaterService struct { updateDelay time.Duration updateCheckInterval time.Duration + errCounter *nodeutils.ErrorCounter + lastChecked health.TimeTracker lastErr health.ErrorTracker latestVersion health.MessageTracker @@ -69,6 +73,9 @@ func NewUpdaterService(ctx context.Context, registryClient registry.Client, rele trackPrereleases: trackPrereleases, updateDelay: time.Duration(updateDelaySeconds) * time.Second, updateCheckInterval: time.Duration(updateCheckIntervalSeconds) * time.Second, + errCounter: nodeutils.NewErrorCounter(uint(maxConsecutiveUpdateErrors), func(err error) bool { + return err != nil // all non-nil errors are critical errors + }), } } @@ -116,6 +123,9 @@ func (updater *UpdaterService) Start() error { return case <-t.C: err := updater.updateLatestReleaseWithDelay(updater.updateDelay) + if updater.errCounter.TooManyErrs(err) { + log.WithError(err).Panic("too many update errors - exiting") + } updater.lastErr.Set(err) updater.lastChecked.Set() if err != nil { diff --git a/store/ens_override.go b/store/ens_override.go index 84ff0d9e..db1c12a4 100644 --- a/store/ens_override.go +++ b/store/ens_override.go @@ -5,18 +5,15 @@ import ( "path" "github.com/ethereum/go-ethereum/common" - "github.com/forta-network/forta-core-go/domain/registry" - "github.com/forta-network/forta-core-go/ens" "github.com/forta-network/forta-node/config" "github.com/goccy/go-json" ) type ensOverrideStore struct { - contracts registry.RegistryContracts contractsMap map[string]string } -func NewENSOverrideStore(cfg config.Config) (*ensOverrideStore, error) { +func NewENSOverrideResolver(cfg config.Config) (*ensOverrideStore, error) { var store ensOverrideStore b, err := ioutil.ReadFile(path.Join(cfg.FortaDir, "ens-override.json")) if err != nil { @@ -25,18 +22,9 @@ func NewENSOverrideStore(cfg config.Config) (*ensOverrideStore, error) { if err := json.Unmarshal(b, &store.contractsMap); err != nil { return nil, err } - store.contracts.Dispatch = common.HexToAddress(store.contractsMap[ens.DispatchContract]) - store.contracts.AgentRegistry = common.HexToAddress(store.contractsMap[ens.AgentRegistryContract]) - store.contracts.ScannerRegistry = common.HexToAddress(store.contractsMap[ens.ScannerRegistryContract]) - store.contracts.ScannerNodeVersion = common.HexToAddress(store.contractsMap[ens.ScannerNodeVersionContract]) - store.contracts.FortaStaking = common.HexToAddress(store.contractsMap[ens.StakingContract]) return &store, nil } func (store *ensOverrideStore) Resolve(input string) (common.Address, error) { return common.HexToAddress(store.contractsMap[input]), nil } - -func (store *ensOverrideStore) ResolveRegistryContracts() (*registry.RegistryContracts, error) { - return &store.contracts, nil -} diff --git a/store/registry.go b/store/registry.go index 7651bfff..d1f10cb4 100644 --- a/store/registry.go +++ b/store/registry.go @@ -12,6 +12,7 @@ import ( "github.com/ipfs/go-cid" log "github.com/sirupsen/logrus" + "github.com/forta-network/forta-core-go/ens" "github.com/forta-network/forta-core-go/ethereum" "github.com/forta-network/forta-core-go/feeds" "github.com/forta-network/forta-core-go/manifest" @@ -431,10 +432,11 @@ func NewPrivateRegistryStore(ctx context.Context, cfg config.Config) (*privateRe // GetRegistryClient checks the config and returns the suitaable registry. func GetRegistryClient(ctx context.Context, cfg config.Config, registryClientCfg registry.ClientConfig) (registry.Client, error) { if cfg.ENSConfig.Override { - ensStore, err := NewENSOverrideStore(cfg) + ensResolver, err := NewENSOverrideResolver(cfg) if err != nil { - return nil, fmt.Errorf("failed to create ens override store: %v", err) + return nil, fmt.Errorf("failed to create ens override resolver: %v", err) } + ensStore := ens.NewENStoreWithResolver(ensResolver) return registry.NewClientWithENSStore(ctx, registryClientCfg, ensStore) } return registry.NewClient(ctx, registryClientCfg) diff --git a/tests/e2e/e2e_suite_test.go b/tests/e2e/e2e_suite_test.go index 385ed370..a8b42aee 100644 --- a/tests/e2e/e2e_suite_test.go +++ b/tests/e2e/e2e_suite_test.go @@ -219,11 +219,15 @@ func (s *Suite) SetupTest() { // point ENS to mock ensOverrides := map[string]string{ - ens.DispatchContract: mockRegistryAddr.Hex(), - ens.AgentRegistryContract: mockRegistryAddr.Hex(), - ens.ScannerRegistryContract: mockRegistryAddr.Hex(), - ens.ScannerNodeVersionContract: mockRegistryAddr.Hex(), - ens.StakingContract: mockRegistryAddr.Hex(), + ens.DispatchContract: mockRegistryAddr.Hex(), + ens.AgentRegistryContract: mockRegistryAddr.Hex(), + ens.ScannerRegistryContract: mockRegistryAddr.Hex(), + ens.ScannerPoolRegistryContract: mockRegistryAddr.Hex(), + ens.ScannerNodeVersionContract: mockRegistryAddr.Hex(), + ens.StakingContract: mockRegistryAddr.Hex(), + ens.RewardsContract: mockRegistryAddr.Hex(), + ens.StakeAllocatorContract: mockRegistryAddr.Hex(), + ens.MigrationContract: mockRegistryAddr.Hex(), } b, _ := json.MarshalIndent(ensOverrides, "", " ") s.r.NoError(ioutil.WriteFile(".forta/ens-override.json", b, 0644)) diff --git a/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.abi b/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.abi index 729d1a33..f37a3999 100644 --- a/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.abi +++ b/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"string","name":"__scannerNodeVersion","type":"string"},{"internalType":"string","name":"__agentManifest","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"scannerId","type":"uint256"},{"internalType":"uint256","name":"pos","type":"uint256"}],"name":"agentRefAt","outputs":[{"internalType":"bool","name":"registered","type":"bool"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"uint256","name":"agentVersion","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"},{"internalType":"uint256[]","name":"chainIds","type":"uint256[]"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"disabledFlags","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"getAgent","outputs":[{"internalType":"bool","name":"registered","type":"bool"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"agentVersion","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"},{"internalType":"uint256[]","name":"chainIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"scanner","type":"address"}],"name":"getScanner","outputs":[{"components":[{"internalType":"bool","name":"registered","type":"bool"},{"internalType":"bool","name":"disabled","type":"bool"},{"internalType":"uint256","name":"scannerPoolId","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"}],"internalType":"struct MockRegistry.ScannerNode","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"scannerId","type":"uint256"}],"name":"getScanner","outputs":[{"internalType":"bool","name":"registered","type":"bool"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linkTestAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"scannerId","type":"uint256"}],"name":"numAgentsFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"numScannersFor","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"scannerId","type":"uint256"}],"name":"scannerHash","outputs":[{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"bytes32","name":"manifest","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scannerNodeVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"uint256","name":"pos","type":"uint256"}],"name":"scannerRefAt","outputs":[{"internalType":"bool","name":"registered","type":"bool"},{"internalType":"uint256","name":"scannerId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"disabledFlags","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlinkTestAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"string","name":"__scannerNodeVersion","type":"string"},{"internalType":"string","name":"__agentManifest","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"scannerId","type":"uint256"},{"internalType":"uint256","name":"pos","type":"uint256"}],"name":"agentRefAt","outputs":[{"internalType":"bool","name":"registered","type":"bool"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"uint256","name":"agentVersion","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"},{"internalType":"uint256[]","name":"chainIds","type":"uint256[]"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"disabledFlags","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"getAgent","outputs":[{"internalType":"bool","name":"registered","type":"bool"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"agentVersion","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"},{"internalType":"uint256[]","name":"chainIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"scanner","type":"address"}],"name":"getScanner","outputs":[{"components":[{"internalType":"bool","name":"registered","type":"bool"},{"internalType":"bool","name":"disabled","type":"bool"},{"internalType":"uint256","name":"scannerPoolId","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"}],"internalType":"struct MockRegistry.ScannerNode","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"id","type":"address"}],"name":"isScannerOperational","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"linkTestAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"scannerId","type":"uint256"}],"name":"numAgentsFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"}],"name":"numScannersFor","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"scannerId","type":"uint256"}],"name":"scannerHash","outputs":[{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"bytes32","name":"manifest","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scannerNodeVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"agentId","type":"uint256"},{"internalType":"uint256","name":"pos","type":"uint256"}],"name":"scannerRefAt","outputs":[{"internalType":"bool","name":"registered","type":"bool"},{"internalType":"uint256","name":"scannerId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"disabledFlags","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlinkTestAgent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.bin b/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.bin index 9e56404b..757c259a 100644 --- a/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.bin +++ b/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b506040516200135e3803806200135e833981810160405281019062000037919062000210565b8160009081620000489190620004e0565b506000600181905550600060028190555080600390816200006a9190620004e0565b505050620005c7565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000dc8262000091565b810181811067ffffffffffffffff82111715620000fe57620000fd620000a2565b5b80604052505050565b60006200011362000073565b9050620001218282620000d1565b919050565b600067ffffffffffffffff821115620001445762000143620000a2565b5b6200014f8262000091565b9050602081019050919050565b60005b838110156200017c5780820151818401526020810190506200015f565b838111156200018c576000848401525b50505050565b6000620001a9620001a38462000126565b62000107565b905082815260208101848484011115620001c857620001c76200008c565b5b620001d58482856200015c565b509392505050565b600082601f830112620001f557620001f462000087565b5b81516200020784826020860162000192565b91505092915050565b600080604083850312156200022a57620002296200007d565b5b600083015167ffffffffffffffff8111156200024b576200024a62000082565b5b6200025985828601620001dd565b925050602083015167ffffffffffffffff8111156200027d576200027c62000082565b5b6200028b85828601620001dd565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002e857607f821691505b602082108103620002fe57620002fd620002a0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000329565b62000374868362000329565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003c1620003bb620003b5846200038c565b62000396565b6200038c565b9050919050565b6000819050919050565b620003dd83620003a0565b620003f5620003ec82620003c8565b84845462000336565b825550505050565b600090565b6200040c620003fd565b62000419818484620003d2565b505050565b5b8181101562000441576200043560008262000402565b6001810190506200041f565b5050565b601f82111562000490576200045a8162000304565b620004658462000319565b8101602085101562000475578190505b6200048d620004848562000319565b8301826200041e565b50505b505050565b600082821c905092915050565b6000620004b56000198460080262000495565b1980831691505092915050565b6000620004d08383620004a2565b9150826002028217905092915050565b620004eb8262000295565b67ffffffffffffffff811115620005075762000506620000a2565b5b620005138254620002cf565b6200052082828562000445565b600060209050601f83116001811462000558576000841562000543578287015190505b6200054f8582620004c2565b865550620005bf565b601f198416620005688662000304565b60005b8281101562000592578489015182556001820191506020850194506020810190506200056b565b86831015620005b25784890151620005ae601f891682620004a2565b8355505b6001600288020188555050505b505050505050565b610d8780620005d76000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637c9acefc1161008c578063b1774f9d11610066578063b1774f9d1461024e578063bd3c3a1a1461027f578063c783034c146102af578063d20f1f64146102df576100cf565b80637c9acefc146101db5780638b2e98d6146101e5578063a97fe43e1461021b576100cf565b80632de5aaf7146100d457806332dee2f614610108578063345db3e11461013f5780633820d2431461015d57806354fd4d501461018d5780636877063a146101ab575b600080fd5b6100ee60048036038101906100e991906106d1565b6102e9565b6040516100ff9594939291906108c0565b60405180910390f35b610122600480360381019061011d9190610921565b61040a565b604051610136989796959493929190610961565b60405180910390f35b61014761045b565b60405161015491906109ed565b60405180910390f35b610177600480360381019061017291906106d1565b6104e9565b6040516101849190610a0f565b60405180910390f35b6101956104f4565b6040516101a291906109ed565b60405180910390f35b6101c560048036038101906101c09190610a56565b61052d565b6040516101d29190610b52565b60405180910390f35b6101e361057e565b005b6101ff60048036038101906101fa9190610921565b610590565b6040516102129796959493929190610b74565b60405180910390f35b610235600480360381019061023091906106d1565b6105fa565b6040516102459493929190610bea565b60405180910390f35b610268600480360381019061026391906106d1565b610626565b604051610276929190610c4f565b60405180910390f35b610299600480360381019061029491906106d1565b61063b565b6040516102a69190610a0f565b60405180910390f35b6102c960048036038101906102c491906106d1565b610647565b6040516102d69190610c78565b60405180910390f35b6102e7610652565b005b60008060006060806000600167ffffffffffffffff81111561030e5761030d610c93565b5b60405190808252806020026020018201604052801561033c5781602001602082028036833780820191505090505b50905060898160008151811061035557610354610cc2565b5b60200260200101818152505060016000600160038481805461037690610d20565b80601f01602080910402602001604051908101604052809291908181526020018280546103a290610d20565b80156103ef5780601f106103c4576101008083540402835291602001916103ef565b820191906000526020600020905b8154815290600101906020018083116103d257829003601f168201915b50505050509150955095509550955095505091939590929450565b60008060008060608060008061042060016102e9565b809750819850829950839b50849c50505050505087878787878760016000975097509750975097509750975097509295985092959890939650565b6000805461046890610d20565b80601f016020809104026020016040519081016040528092919081815260200182805461049490610d20565b80156104e15780601f106104b6576101008083540402835291602001916104e1565b820191906000526020600020905b8154815290600101906020018083116104c457829003601f168201915b505050505081565b600060019050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b610535610663565b61053d610663565b600181600001901515908115158152505060018160200190151590811515815250506001816040018181525050608981606001818152505080915050919050565b60026001819055506000600281905550565b6000806000806060600080600173222244861c15a8f2a05fbd15e747ea8f20c2c0c973ffffffffffffffffffffffffffffffffffffffff16600060896040518060200160405280600081525060016000965096509650965096509650965092959891949750929550565b600080600060606001600060896040518060200160405280600081525093509350935093509193509193565b60008060025460015460001b91509150915091565b60006002549050919050565b600060019050919050565b600180819055506001600281905550565b6040518060a001604052806000151581526020016000151581526020016000815260200160008152602001606081525090565b600080fd5b6000819050919050565b6106ae8161069b565b81146106b957600080fd5b50565b6000813590506106cb816106a5565b92915050565b6000602082840312156106e7576106e6610696565b5b60006106f5848285016106bc565b91505092915050565b60008115159050919050565b610713816106fe565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061074482610719565b9050919050565b61075481610739565b82525050565b6107638161069b565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156107a3578082015181840152602081019050610788565b838111156107b2576000848401525b50505050565b6000601f19601f8301169050919050565b60006107d482610769565b6107de8185610774565b93506107ee818560208601610785565b6107f7816107b8565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6108378161069b565b82525050565b6000610849838361082e565b60208301905092915050565b6000602082019050919050565b600061086d82610802565b610877818561080d565b93506108828361081e565b8060005b838110156108b357815161089a888261083d565b97506108a583610855565b925050600181019050610886565b5085935050505092915050565b600060a0820190506108d5600083018861070a565b6108e2602083018761074b565b6108ef604083018661075a565b818103606083015261090181856107c9565b905081810360808301526109158184610862565b90509695505050505050565b6000806040838503121561093857610937610696565b5b6000610946858286016106bc565b9250506020610957858286016106bc565b9150509250929050565b600061010082019050610977600083018b61070a565b610984602083018a61074b565b610991604083018961075a565b61099e606083018861075a565b81810360808301526109b081876107c9565b905081810360a08301526109c48186610862565b90506109d360c083018561070a565b6109e060e083018461075a565b9998505050505050505050565b60006020820190508181036000830152610a0781846107c9565b905092915050565b6000602082019050610a24600083018461075a565b92915050565b610a3381610739565b8114610a3e57600080fd5b50565b600081359050610a5081610a2a565b92915050565b600060208284031215610a6c57610a6b610696565b5b6000610a7a84828501610a41565b91505092915050565b610a8c816106fe565b82525050565b600082825260208201905092915050565b6000610aae82610769565b610ab88185610a92565b9350610ac8818560208601610785565b610ad1816107b8565b840191505092915050565b600060a083016000830151610af46000860182610a83565b506020830151610b076020860182610a83565b506040830151610b1a604086018261082e565b506060830151610b2d606086018261082e565b5060808301518482036080860152610b458282610aa3565b9150508091505092915050565b60006020820190508181036000830152610b6c8184610adc565b905092915050565b600060e082019050610b89600083018a61070a565b610b96602083018961075a565b610ba3604083018861074b565b610bb0606083018761075a565b8181036080830152610bc281866107c9565b9050610bd160a083018561070a565b610bde60c083018461075a565b98975050505050505050565b6000608082019050610bff600083018761070a565b610c0c602083018661074b565b610c19604083018561075a565b8181036060830152610c2b81846107c9565b905095945050505050565b6000819050919050565b610c4981610c36565b82525050565b6000604082019050610c64600083018561075a565b610c716020830184610c40565b9392505050565b6000602082019050610c8d600083018461070a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610d3857607f821691505b602082108103610d4b57610d4a610cf1565b5b5091905056fea2646970667358221220127ec93d6fd02127e30de9a1d3f0e1e5f1bcc71974456c2a0952d5d2bfe316ce64736f6c634300080f0033 \ No newline at end of file +60806040523480156200001157600080fd5b506040516200135b3803806200135b833981810160405281019062000037919062000210565b8160009081620000489190620004e0565b506000600181905550600060028190555080600390816200006a9190620004e0565b505050620005c7565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000dc8262000091565b810181811067ffffffffffffffff82111715620000fe57620000fd620000a2565b5b80604052505050565b60006200011362000073565b9050620001218282620000d1565b919050565b600067ffffffffffffffff821115620001445762000143620000a2565b5b6200014f8262000091565b9050602081019050919050565b60005b838110156200017c5780820151818401526020810190506200015f565b838111156200018c576000848401525b50505050565b6000620001a9620001a38462000126565b62000107565b905082815260208101848484011115620001c857620001c76200008c565b5b620001d58482856200015c565b509392505050565b600082601f830112620001f557620001f462000087565b5b81516200020784826020860162000192565b91505092915050565b600080604083850312156200022a57620002296200007d565b5b600083015167ffffffffffffffff8111156200024b576200024a62000082565b5b6200025985828601620001dd565b925050602083015167ffffffffffffffff8111156200027d576200027c62000082565b5b6200028b85828601620001dd565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002e857607f821691505b602082108103620002fe57620002fd620002a0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000329565b62000374868362000329565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003c1620003bb620003b5846200038c565b62000396565b6200038c565b9050919050565b6000819050919050565b620003dd83620003a0565b620003f5620003ec82620003c8565b84845462000336565b825550505050565b600090565b6200040c620003fd565b62000419818484620003d2565b505050565b5b8181101562000441576200043560008262000402565b6001810190506200041f565b5050565b601f82111562000490576200045a8162000304565b620004658462000319565b8101602085101562000475578190505b6200048d620004848562000319565b8301826200041e565b50505b505050565b600082821c905092915050565b6000620004b56000198460080262000495565b1980831691505092915050565b6000620004d08383620004a2565b9150826002028217905092915050565b620004eb8262000295565b67ffffffffffffffff811115620005075762000506620000a2565b5b620005138254620002cf565b6200052082828562000445565b600060209050601f83116001811462000558576000841562000543578287015190505b6200054f8582620004c2565b865550620005bf565b601f198416620005688662000304565b60005b8281101562000592578489015182556001820191506020850194506020810190506200056b565b86831015620005b25784890151620005ae601f891682620004a2565b8355505b6001600288020188555050505b505050505050565b610d8480620005d76000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80637c9acefc1161008c578063b1774f9d11610066578063b1774f9d14610296578063bd3c3a1a146102c7578063c783034c146102f7578063d20f1f6414610327576100ea565b80637c9acefc146102265780638b2e98d614610230578063911b7b3014610266576100ea565b80633820d243116100c85780633820d2431461017857806354fd4d50146101a85780636352211e146101c65780636877063a146101f6576100ea565b80632de5aaf7146100ef57806332dee2f614610123578063345db3e11461015a575b600080fd5b610109600480360381019061010491906106ff565b610331565b60405161011a9594939291906108ee565b60405180910390f35b61013d6004803603810190610138919061094f565b610452565b60405161015198979695949392919061098f565b60405180910390f35b6101626104a3565b60405161016f9190610a1b565b60405180910390f35b610192600480360381019061018d91906106ff565b610531565b60405161019f9190610a3d565b60405180910390f35b6101b061053c565b6040516101bd9190610a1b565b60405180910390f35b6101e060048036038101906101db91906106ff565b610575565b6040516101ed9190610a58565b60405180910390f35b610210600480360381019061020b9190610a9f565b61057c565b60405161021d9190610b9b565b60405180910390f35b61022e6105cd565b005b61024a6004803603810190610245919061094f565b6105df565b60405161025d9796959493929190610bbd565b60405180910390f35b610280600480360381019061027b9190610a9f565b610649565b60405161028d9190610c33565b60405180910390f35b6102b060048036038101906102ab91906106ff565b610654565b6040516102be929190610c67565b60405180910390f35b6102e160048036038101906102dc91906106ff565b610669565b6040516102ee9190610a3d565b60405180910390f35b610311600480360381019061030c91906106ff565b610675565b60405161031e9190610c33565b60405180910390f35b61032f610680565b005b60008060006060806000600167ffffffffffffffff81111561035657610355610c90565b5b6040519080825280602002602001820160405280156103845781602001602082028036833780820191505090505b50905060898160008151811061039d5761039c610cbf565b5b6020026020010181815250506001600060016003848180546103be90610d1d565b80601f01602080910402602001604051908101604052809291908181526020018280546103ea90610d1d565b80156104375780601f1061040c57610100808354040283529160200191610437565b820191906000526020600020905b81548152906001019060200180831161041a57829003601f168201915b50505050509150955095509550955095505091939590929450565b6000806000806060806000806104686001610331565b809750819850829950839b50849c50505050505087878787878760016000975097509750975097509750975097509295985092959890939650565b600080546104b090610d1d565b80601f01602080910402602001604051908101604052809291908181526020018280546104dc90610d1d565b80156105295780601f106104fe57610100808354040283529160200191610529565b820191906000526020600020905b81548152906001019060200180831161050c57829003601f168201915b505050505081565b600060019050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000919050565b610584610691565b61058c610691565b600181600001901515908115158152505060018160200190151590811515815250506001816040018181525050608981606001818152505080915050919050565b60026001819055506000600281905550565b6000806000806060600080600173222244861c15a8f2a05fbd15e747ea8f20c2c0c973ffffffffffffffffffffffffffffffffffffffff16600060896040518060200160405280600081525060016000965096509650965096509650965092959891949750929550565b600060019050919050565b60008060025460015460001b91509150915091565b60006002549050919050565b600060019050919050565b600180819055506001600281905550565b6040518060a001604052806000151581526020016000151581526020016000815260200160008152602001606081525090565b600080fd5b6000819050919050565b6106dc816106c9565b81146106e757600080fd5b50565b6000813590506106f9816106d3565b92915050565b600060208284031215610715576107146106c4565b5b6000610723848285016106ea565b91505092915050565b60008115159050919050565b6107418161072c565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061077282610747565b9050919050565b61078281610767565b82525050565b610791816106c9565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156107d15780820151818401526020810190506107b6565b838111156107e0576000848401525b50505050565b6000601f19601f8301169050919050565b600061080282610797565b61080c81856107a2565b935061081c8185602086016107b3565b610825816107e6565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610865816106c9565b82525050565b6000610877838361085c565b60208301905092915050565b6000602082019050919050565b600061089b82610830565b6108a5818561083b565b93506108b08361084c565b8060005b838110156108e15781516108c8888261086b565b97506108d383610883565b9250506001810190506108b4565b5085935050505092915050565b600060a0820190506109036000830188610738565b6109106020830187610779565b61091d6040830186610788565b818103606083015261092f81856107f7565b905081810360808301526109438184610890565b90509695505050505050565b60008060408385031215610966576109656106c4565b5b6000610974858286016106ea565b9250506020610985858286016106ea565b9150509250929050565b6000610100820190506109a5600083018b610738565b6109b2602083018a610779565b6109bf6040830189610788565b6109cc6060830188610788565b81810360808301526109de81876107f7565b905081810360a08301526109f28186610890565b9050610a0160c0830185610738565b610a0e60e0830184610788565b9998505050505050505050565b60006020820190508181036000830152610a3581846107f7565b905092915050565b6000602082019050610a526000830184610788565b92915050565b6000602082019050610a6d6000830184610779565b92915050565b610a7c81610767565b8114610a8757600080fd5b50565b600081359050610a9981610a73565b92915050565b600060208284031215610ab557610ab46106c4565b5b6000610ac384828501610a8a565b91505092915050565b610ad58161072c565b82525050565b600082825260208201905092915050565b6000610af782610797565b610b018185610adb565b9350610b118185602086016107b3565b610b1a816107e6565b840191505092915050565b600060a083016000830151610b3d6000860182610acc565b506020830151610b506020860182610acc565b506040830151610b63604086018261085c565b506060830151610b76606086018261085c565b5060808301518482036080860152610b8e8282610aec565b9150508091505092915050565b60006020820190508181036000830152610bb58184610b25565b905092915050565b600060e082019050610bd2600083018a610738565b610bdf6020830189610788565b610bec6040830188610779565b610bf96060830187610788565b8181036080830152610c0b81866107f7565b9050610c1a60a0830185610738565b610c2760c0830184610788565b98975050505050505050565b6000602082019050610c486000830184610738565b92915050565b6000819050919050565b610c6181610c4e565b82525050565b6000604082019050610c7c6000830185610788565b610c896020830184610c58565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610d3557607f821691505b602082108103610d4857610d47610cee565b5b5091905056fea26469706673582212202d8e0b974b8c591e0a481151a9e7e17538e25946173a932d710c768e3d06b0bc64736f6c634300080f0033 \ No newline at end of file diff --git a/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.sol b/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.sol index a9fd02fb..222fc91f 100644 --- a/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.sol +++ b/tests/e2e/misccontracts/contract_mock_registry/MockRegistry.sol @@ -30,6 +30,10 @@ contract MockRegistry { _agentManifest = __agentManifest; } + function ownerOf(uint256 id) public view returns (address) { + return address(0x0); + } + function getAgent(uint256 agentId) public view returns (bool registered, address owner,uint256 agentVersion, string memory metadata, uint256[] memory chainIds) { @@ -53,24 +57,16 @@ contract MockRegistry { return scannerNode; } - function getScanner(uint256 scannerId) - external - view - returns ( - bool registered, - address owner, - uint256 chainId, - string memory metadata - ) - { - return (true, address(0x0), 137, ""); - } - /// dev: for both of scanners and agents - anything is enabled function isEnabled(uint256 id) public view returns (bool) { return true; } + /// dev: just for scanners (ScannerPoolRegistry) + function isScannerOperational(address id) public view returns (bool) { + return true; + } + /// dev: does not exist in production contract ABIs function linkTestAgent() public { _agentsHash = 1; diff --git a/tests/e2e/misccontracts/contract_mock_registry/mock_registry.go b/tests/e2e/misccontracts/contract_mock_registry/mock_registry.go index 71795ba1..3c81ddca 100644 --- a/tests/e2e/misccontracts/contract_mock_registry/mock_registry.go +++ b/tests/e2e/misccontracts/contract_mock_registry/mock_registry.go @@ -39,8 +39,8 @@ type MockRegistryScannerNode struct { // MockRegistryMetaData contains all meta data concerning the MockRegistry contract. var MockRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"__scannerNodeVersion\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"__agentManifest\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"scannerId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pos\",\"type\":\"uint256\"}],\"name\":\"agentRefAt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"agentId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"agentVersion\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"chainIds\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disabledFlags\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"agentId\",\"type\":\"uint256\"}],\"name\":\"getAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"agentVersion\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"chainIds\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"scanner\",\"type\":\"address\"}],\"name\":\"getScanner\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"scannerPoolId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"structMockRegistry.ScannerNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"scannerId\",\"type\":\"uint256\"}],\"name\":\"getScanner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"isEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"linkTestAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"scannerId\",\"type\":\"uint256\"}],\"name\":\"numAgentsFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"agentId\",\"type\":\"uint256\"}],\"name\":\"numScannersFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"scannerId\",\"type\":\"uint256\"}],\"name\":\"scannerHash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"manifest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scannerNodeVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"agentId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pos\",\"type\":\"uint256\"}],\"name\":\"scannerRefAt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"scannerId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disabledFlags\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlinkTestAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60806040523480156200001157600080fd5b506040516200135e3803806200135e833981810160405281019062000037919062000210565b8160009081620000489190620004e0565b506000600181905550600060028190555080600390816200006a9190620004e0565b505050620005c7565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000dc8262000091565b810181811067ffffffffffffffff82111715620000fe57620000fd620000a2565b5b80604052505050565b60006200011362000073565b9050620001218282620000d1565b919050565b600067ffffffffffffffff821115620001445762000143620000a2565b5b6200014f8262000091565b9050602081019050919050565b60005b838110156200017c5780820151818401526020810190506200015f565b838111156200018c576000848401525b50505050565b6000620001a9620001a38462000126565b62000107565b905082815260208101848484011115620001c857620001c76200008c565b5b620001d58482856200015c565b509392505050565b600082601f830112620001f557620001f462000087565b5b81516200020784826020860162000192565b91505092915050565b600080604083850312156200022a57620002296200007d565b5b600083015167ffffffffffffffff8111156200024b576200024a62000082565b5b6200025985828601620001dd565b925050602083015167ffffffffffffffff8111156200027d576200027c62000082565b5b6200028b85828601620001dd565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002e857607f821691505b602082108103620002fe57620002fd620002a0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000329565b62000374868362000329565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003c1620003bb620003b5846200038c565b62000396565b6200038c565b9050919050565b6000819050919050565b620003dd83620003a0565b620003f5620003ec82620003c8565b84845462000336565b825550505050565b600090565b6200040c620003fd565b62000419818484620003d2565b505050565b5b8181101562000441576200043560008262000402565b6001810190506200041f565b5050565b601f82111562000490576200045a8162000304565b620004658462000319565b8101602085101562000475578190505b6200048d620004848562000319565b8301826200041e565b50505b505050565b600082821c905092915050565b6000620004b56000198460080262000495565b1980831691505092915050565b6000620004d08383620004a2565b9150826002028217905092915050565b620004eb8262000295565b67ffffffffffffffff811115620005075762000506620000a2565b5b620005138254620002cf565b6200052082828562000445565b600060209050601f83116001811462000558576000841562000543578287015190505b6200054f8582620004c2565b865550620005bf565b601f198416620005688662000304565b60005b8281101562000592578489015182556001820191506020850194506020810190506200056b565b86831015620005b25784890151620005ae601f891682620004a2565b8355505b6001600288020188555050505b505050505050565b610d8780620005d76000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80637c9acefc1161008c578063b1774f9d11610066578063b1774f9d1461024e578063bd3c3a1a1461027f578063c783034c146102af578063d20f1f64146102df576100cf565b80637c9acefc146101db5780638b2e98d6146101e5578063a97fe43e1461021b576100cf565b80632de5aaf7146100d457806332dee2f614610108578063345db3e11461013f5780633820d2431461015d57806354fd4d501461018d5780636877063a146101ab575b600080fd5b6100ee60048036038101906100e991906106d1565b6102e9565b6040516100ff9594939291906108c0565b60405180910390f35b610122600480360381019061011d9190610921565b61040a565b604051610136989796959493929190610961565b60405180910390f35b61014761045b565b60405161015491906109ed565b60405180910390f35b610177600480360381019061017291906106d1565b6104e9565b6040516101849190610a0f565b60405180910390f35b6101956104f4565b6040516101a291906109ed565b60405180910390f35b6101c560048036038101906101c09190610a56565b61052d565b6040516101d29190610b52565b60405180910390f35b6101e361057e565b005b6101ff60048036038101906101fa9190610921565b610590565b6040516102129796959493929190610b74565b60405180910390f35b610235600480360381019061023091906106d1565b6105fa565b6040516102459493929190610bea565b60405180910390f35b610268600480360381019061026391906106d1565b610626565b604051610276929190610c4f565b60405180910390f35b610299600480360381019061029491906106d1565b61063b565b6040516102a69190610a0f565b60405180910390f35b6102c960048036038101906102c491906106d1565b610647565b6040516102d69190610c78565b60405180910390f35b6102e7610652565b005b60008060006060806000600167ffffffffffffffff81111561030e5761030d610c93565b5b60405190808252806020026020018201604052801561033c5781602001602082028036833780820191505090505b50905060898160008151811061035557610354610cc2565b5b60200260200101818152505060016000600160038481805461037690610d20565b80601f01602080910402602001604051908101604052809291908181526020018280546103a290610d20565b80156103ef5780601f106103c4576101008083540402835291602001916103ef565b820191906000526020600020905b8154815290600101906020018083116103d257829003601f168201915b50505050509150955095509550955095505091939590929450565b60008060008060608060008061042060016102e9565b809750819850829950839b50849c50505050505087878787878760016000975097509750975097509750975097509295985092959890939650565b6000805461046890610d20565b80601f016020809104026020016040519081016040528092919081815260200182805461049490610d20565b80156104e15780601f106104b6576101008083540402835291602001916104e1565b820191906000526020600020905b8154815290600101906020018083116104c457829003601f168201915b505050505081565b600060019050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b610535610663565b61053d610663565b600181600001901515908115158152505060018160200190151590811515815250506001816040018181525050608981606001818152505080915050919050565b60026001819055506000600281905550565b6000806000806060600080600173222244861c15a8f2a05fbd15e747ea8f20c2c0c973ffffffffffffffffffffffffffffffffffffffff16600060896040518060200160405280600081525060016000965096509650965096509650965092959891949750929550565b600080600060606001600060896040518060200160405280600081525093509350935093509193509193565b60008060025460015460001b91509150915091565b60006002549050919050565b600060019050919050565b600180819055506001600281905550565b6040518060a001604052806000151581526020016000151581526020016000815260200160008152602001606081525090565b600080fd5b6000819050919050565b6106ae8161069b565b81146106b957600080fd5b50565b6000813590506106cb816106a5565b92915050565b6000602082840312156106e7576106e6610696565b5b60006106f5848285016106bc565b91505092915050565b60008115159050919050565b610713816106fe565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061074482610719565b9050919050565b61075481610739565b82525050565b6107638161069b565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156107a3578082015181840152602081019050610788565b838111156107b2576000848401525b50505050565b6000601f19601f8301169050919050565b60006107d482610769565b6107de8185610774565b93506107ee818560208601610785565b6107f7816107b8565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6108378161069b565b82525050565b6000610849838361082e565b60208301905092915050565b6000602082019050919050565b600061086d82610802565b610877818561080d565b93506108828361081e565b8060005b838110156108b357815161089a888261083d565b97506108a583610855565b925050600181019050610886565b5085935050505092915050565b600060a0820190506108d5600083018861070a565b6108e2602083018761074b565b6108ef604083018661075a565b818103606083015261090181856107c9565b905081810360808301526109158184610862565b90509695505050505050565b6000806040838503121561093857610937610696565b5b6000610946858286016106bc565b9250506020610957858286016106bc565b9150509250929050565b600061010082019050610977600083018b61070a565b610984602083018a61074b565b610991604083018961075a565b61099e606083018861075a565b81810360808301526109b081876107c9565b905081810360a08301526109c48186610862565b90506109d360c083018561070a565b6109e060e083018461075a565b9998505050505050505050565b60006020820190508181036000830152610a0781846107c9565b905092915050565b6000602082019050610a24600083018461075a565b92915050565b610a3381610739565b8114610a3e57600080fd5b50565b600081359050610a5081610a2a565b92915050565b600060208284031215610a6c57610a6b610696565b5b6000610a7a84828501610a41565b91505092915050565b610a8c816106fe565b82525050565b600082825260208201905092915050565b6000610aae82610769565b610ab88185610a92565b9350610ac8818560208601610785565b610ad1816107b8565b840191505092915050565b600060a083016000830151610af46000860182610a83565b506020830151610b076020860182610a83565b506040830151610b1a604086018261082e565b506060830151610b2d606086018261082e565b5060808301518482036080860152610b458282610aa3565b9150508091505092915050565b60006020820190508181036000830152610b6c8184610adc565b905092915050565b600060e082019050610b89600083018a61070a565b610b96602083018961075a565b610ba3604083018861074b565b610bb0606083018761075a565b8181036080830152610bc281866107c9565b9050610bd160a083018561070a565b610bde60c083018461075a565b98975050505050505050565b6000608082019050610bff600083018761070a565b610c0c602083018661074b565b610c19604083018561075a565b8181036060830152610c2b81846107c9565b905095945050505050565b6000819050919050565b610c4981610c36565b82525050565b6000604082019050610c64600083018561075a565b610c716020830184610c40565b9392505050565b6000602082019050610c8d600083018461070a565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610d3857607f821691505b602082108103610d4b57610d4a610cf1565b5b5091905056fea2646970667358221220127ec93d6fd02127e30de9a1d3f0e1e5f1bcc71974456c2a0952d5d2bfe316ce64736f6c634300080f0033", + ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"__scannerNodeVersion\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"__agentManifest\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"scannerId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pos\",\"type\":\"uint256\"}],\"name\":\"agentRefAt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"agentId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"agentVersion\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"chainIds\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disabledFlags\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"agentId\",\"type\":\"uint256\"}],\"name\":\"getAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"agentVersion\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"chainIds\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"scanner\",\"type\":\"address\"}],\"name\":\"getScanner\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"disabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"scannerPoolId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"structMockRegistry.ScannerNode\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"isEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"id\",\"type\":\"address\"}],\"name\":\"isScannerOperational\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"linkTestAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"scannerId\",\"type\":\"uint256\"}],\"name\":\"numAgentsFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"agentId\",\"type\":\"uint256\"}],\"name\":\"numScannersFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"scannerId\",\"type\":\"uint256\"}],\"name\":\"scannerHash\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"manifest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scannerNodeVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"agentId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pos\",\"type\":\"uint256\"}],\"name\":\"scannerRefAt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"scannerId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"disabledFlags\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unlinkTestAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b506040516200135b3803806200135b833981810160405281019062000037919062000210565b8160009081620000489190620004e0565b506000600181905550600060028190555080600390816200006a9190620004e0565b505050620005c7565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620000dc8262000091565b810181811067ffffffffffffffff82111715620000fe57620000fd620000a2565b5b80604052505050565b60006200011362000073565b9050620001218282620000d1565b919050565b600067ffffffffffffffff821115620001445762000143620000a2565b5b6200014f8262000091565b9050602081019050919050565b60005b838110156200017c5780820151818401526020810190506200015f565b838111156200018c576000848401525b50505050565b6000620001a9620001a38462000126565b62000107565b905082815260208101848484011115620001c857620001c76200008c565b5b620001d58482856200015c565b509392505050565b600082601f830112620001f557620001f462000087565b5b81516200020784826020860162000192565b91505092915050565b600080604083850312156200022a57620002296200007d565b5b600083015167ffffffffffffffff8111156200024b576200024a62000082565b5b6200025985828601620001dd565b925050602083015167ffffffffffffffff8111156200027d576200027c62000082565b5b6200028b85828601620001dd565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002e857607f821691505b602082108103620002fe57620002fd620002a0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003687fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000329565b62000374868362000329565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003c1620003bb620003b5846200038c565b62000396565b6200038c565b9050919050565b6000819050919050565b620003dd83620003a0565b620003f5620003ec82620003c8565b84845462000336565b825550505050565b600090565b6200040c620003fd565b62000419818484620003d2565b505050565b5b8181101562000441576200043560008262000402565b6001810190506200041f565b5050565b601f82111562000490576200045a8162000304565b620004658462000319565b8101602085101562000475578190505b6200048d620004848562000319565b8301826200041e565b50505b505050565b600082821c905092915050565b6000620004b56000198460080262000495565b1980831691505092915050565b6000620004d08383620004a2565b9150826002028217905092915050565b620004eb8262000295565b67ffffffffffffffff811115620005075762000506620000a2565b5b620005138254620002cf565b6200052082828562000445565b600060209050601f83116001811462000558576000841562000543578287015190505b6200054f8582620004c2565b865550620005bf565b601f198416620005688662000304565b60005b8281101562000592578489015182556001820191506020850194506020810190506200056b565b86831015620005b25784890151620005ae601f891682620004a2565b8355505b6001600288020188555050505b505050505050565b610d8480620005d76000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80637c9acefc1161008c578063b1774f9d11610066578063b1774f9d14610296578063bd3c3a1a146102c7578063c783034c146102f7578063d20f1f6414610327576100ea565b80637c9acefc146102265780638b2e98d614610230578063911b7b3014610266576100ea565b80633820d243116100c85780633820d2431461017857806354fd4d50146101a85780636352211e146101c65780636877063a146101f6576100ea565b80632de5aaf7146100ef57806332dee2f614610123578063345db3e11461015a575b600080fd5b610109600480360381019061010491906106ff565b610331565b60405161011a9594939291906108ee565b60405180910390f35b61013d6004803603810190610138919061094f565b610452565b60405161015198979695949392919061098f565b60405180910390f35b6101626104a3565b60405161016f9190610a1b565b60405180910390f35b610192600480360381019061018d91906106ff565b610531565b60405161019f9190610a3d565b60405180910390f35b6101b061053c565b6040516101bd9190610a1b565b60405180910390f35b6101e060048036038101906101db91906106ff565b610575565b6040516101ed9190610a58565b60405180910390f35b610210600480360381019061020b9190610a9f565b61057c565b60405161021d9190610b9b565b60405180910390f35b61022e6105cd565b005b61024a6004803603810190610245919061094f565b6105df565b60405161025d9796959493929190610bbd565b60405180910390f35b610280600480360381019061027b9190610a9f565b610649565b60405161028d9190610c33565b60405180910390f35b6102b060048036038101906102ab91906106ff565b610654565b6040516102be929190610c67565b60405180910390f35b6102e160048036038101906102dc91906106ff565b610669565b6040516102ee9190610a3d565b60405180910390f35b610311600480360381019061030c91906106ff565b610675565b60405161031e9190610c33565b60405180910390f35b61032f610680565b005b60008060006060806000600167ffffffffffffffff81111561035657610355610c90565b5b6040519080825280602002602001820160405280156103845781602001602082028036833780820191505090505b50905060898160008151811061039d5761039c610cbf565b5b6020026020010181815250506001600060016003848180546103be90610d1d565b80601f01602080910402602001604051908101604052809291908181526020018280546103ea90610d1d565b80156104375780601f1061040c57610100808354040283529160200191610437565b820191906000526020600020905b81548152906001019060200180831161041a57829003601f168201915b50505050509150955095509550955095505091939590929450565b6000806000806060806000806104686001610331565b809750819850829950839b50849c50505050505087878787878760016000975097509750975097509750975097509295985092959890939650565b600080546104b090610d1d565b80601f01602080910402602001604051908101604052809291908181526020018280546104dc90610d1d565b80156105295780601f106104fe57610100808354040283529160200191610529565b820191906000526020600020905b81548152906001019060200180831161050c57829003601f168201915b505050505081565b600060019050919050565b6040518060400160405280600581526020017f302e302e3100000000000000000000000000000000000000000000000000000081525081565b6000919050565b610584610691565b61058c610691565b600181600001901515908115158152505060018160200190151590811515815250506001816040018181525050608981606001818152505080915050919050565b60026001819055506000600281905550565b6000806000806060600080600173222244861c15a8f2a05fbd15e747ea8f20c2c0c973ffffffffffffffffffffffffffffffffffffffff16600060896040518060200160405280600081525060016000965096509650965096509650965092959891949750929550565b600060019050919050565b60008060025460015460001b91509150915091565b60006002549050919050565b600060019050919050565b600180819055506001600281905550565b6040518060a001604052806000151581526020016000151581526020016000815260200160008152602001606081525090565b600080fd5b6000819050919050565b6106dc816106c9565b81146106e757600080fd5b50565b6000813590506106f9816106d3565b92915050565b600060208284031215610715576107146106c4565b5b6000610723848285016106ea565b91505092915050565b60008115159050919050565b6107418161072c565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061077282610747565b9050919050565b61078281610767565b82525050565b610791816106c9565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156107d15780820151818401526020810190506107b6565b838111156107e0576000848401525b50505050565b6000601f19601f8301169050919050565b600061080282610797565b61080c81856107a2565b935061081c8185602086016107b3565b610825816107e6565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610865816106c9565b82525050565b6000610877838361085c565b60208301905092915050565b6000602082019050919050565b600061089b82610830565b6108a5818561083b565b93506108b08361084c565b8060005b838110156108e15781516108c8888261086b565b97506108d383610883565b9250506001810190506108b4565b5085935050505092915050565b600060a0820190506109036000830188610738565b6109106020830187610779565b61091d6040830186610788565b818103606083015261092f81856107f7565b905081810360808301526109438184610890565b90509695505050505050565b60008060408385031215610966576109656106c4565b5b6000610974858286016106ea565b9250506020610985858286016106ea565b9150509250929050565b6000610100820190506109a5600083018b610738565b6109b2602083018a610779565b6109bf6040830189610788565b6109cc6060830188610788565b81810360808301526109de81876107f7565b905081810360a08301526109f28186610890565b9050610a0160c0830185610738565b610a0e60e0830184610788565b9998505050505050505050565b60006020820190508181036000830152610a3581846107f7565b905092915050565b6000602082019050610a526000830184610788565b92915050565b6000602082019050610a6d6000830184610779565b92915050565b610a7c81610767565b8114610a8757600080fd5b50565b600081359050610a9981610a73565b92915050565b600060208284031215610ab557610ab46106c4565b5b6000610ac384828501610a8a565b91505092915050565b610ad58161072c565b82525050565b600082825260208201905092915050565b6000610af782610797565b610b018185610adb565b9350610b118185602086016107b3565b610b1a816107e6565b840191505092915050565b600060a083016000830151610b3d6000860182610acc565b506020830151610b506020860182610acc565b506040830151610b63604086018261085c565b506060830151610b76606086018261085c565b5060808301518482036080860152610b8e8282610aec565b9150508091505092915050565b60006020820190508181036000830152610bb58184610b25565b905092915050565b600060e082019050610bd2600083018a610738565b610bdf6020830189610788565b610bec6040830188610779565b610bf96060830187610788565b8181036080830152610c0b81866107f7565b9050610c1a60a0830185610738565b610c2760c0830184610788565b98975050505050505050565b6000602082019050610c486000830184610738565b92915050565b6000819050919050565b610c6181610c4e565b82525050565b6000604082019050610c7c6000830185610788565b610c896020830184610c58565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610d3557607f821691505b602082108103610d4857610d47610cee565b5b5091905056fea26469706673582212202d8e0b974b8c591e0a481151a9e7e17538e25946173a932d710c768e3d06b0bc64736f6c634300080f0033", } // MockRegistryABI is the input ABI used to generate the binding from. @@ -376,67 +376,43 @@ func (_MockRegistry *MockRegistryCallerSession) GetScanner(scanner common.Addres return _MockRegistry.Contract.GetScanner(&_MockRegistry.CallOpts, scanner) } -// GetScanner0 is a free data retrieval call binding the contract method 0xa97fe43e. +// IsEnabled is a free data retrieval call binding the contract method 0xc783034c. // -// Solidity: function getScanner(uint256 scannerId) view returns(bool registered, address owner, uint256 chainId, string metadata) -func (_MockRegistry *MockRegistryCaller) GetScanner0(opts *bind.CallOpts, scannerId *big.Int) (struct { - Registered bool - Owner common.Address - ChainId *big.Int - Metadata string -}, error) { +// Solidity: function isEnabled(uint256 id) view returns(bool) +func (_MockRegistry *MockRegistryCaller) IsEnabled(opts *bind.CallOpts, id *big.Int) (bool, error) { var out []interface{} - err := _MockRegistry.contract.Call(opts, &out, "getScanner0", scannerId) + err := _MockRegistry.contract.Call(opts, &out, "isEnabled", id) - outstruct := new(struct { - Registered bool - Owner common.Address - ChainId *big.Int - Metadata string - }) if err != nil { - return *outstruct, err + return *new(bool), err } - outstruct.Registered = *abi.ConvertType(out[0], new(bool)).(*bool) - outstruct.Owner = *abi.ConvertType(out[1], new(common.Address)).(*common.Address) - outstruct.ChainId = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) - outstruct.Metadata = *abi.ConvertType(out[3], new(string)).(*string) + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - return *outstruct, err + return out0, err } -// GetScanner0 is a free data retrieval call binding the contract method 0xa97fe43e. +// IsEnabled is a free data retrieval call binding the contract method 0xc783034c. // -// Solidity: function getScanner(uint256 scannerId) view returns(bool registered, address owner, uint256 chainId, string metadata) -func (_MockRegistry *MockRegistrySession) GetScanner0(scannerId *big.Int) (struct { - Registered bool - Owner common.Address - ChainId *big.Int - Metadata string -}, error) { - return _MockRegistry.Contract.GetScanner0(&_MockRegistry.CallOpts, scannerId) +// Solidity: function isEnabled(uint256 id) view returns(bool) +func (_MockRegistry *MockRegistrySession) IsEnabled(id *big.Int) (bool, error) { + return _MockRegistry.Contract.IsEnabled(&_MockRegistry.CallOpts, id) } -// GetScanner0 is a free data retrieval call binding the contract method 0xa97fe43e. +// IsEnabled is a free data retrieval call binding the contract method 0xc783034c. // -// Solidity: function getScanner(uint256 scannerId) view returns(bool registered, address owner, uint256 chainId, string metadata) -func (_MockRegistry *MockRegistryCallerSession) GetScanner0(scannerId *big.Int) (struct { - Registered bool - Owner common.Address - ChainId *big.Int - Metadata string -}, error) { - return _MockRegistry.Contract.GetScanner0(&_MockRegistry.CallOpts, scannerId) +// Solidity: function isEnabled(uint256 id) view returns(bool) +func (_MockRegistry *MockRegistryCallerSession) IsEnabled(id *big.Int) (bool, error) { + return _MockRegistry.Contract.IsEnabled(&_MockRegistry.CallOpts, id) } -// IsEnabled is a free data retrieval call binding the contract method 0xc783034c. +// IsScannerOperational is a free data retrieval call binding the contract method 0x911b7b30. // -// Solidity: function isEnabled(uint256 id) view returns(bool) -func (_MockRegistry *MockRegistryCaller) IsEnabled(opts *bind.CallOpts, id *big.Int) (bool, error) { +// Solidity: function isScannerOperational(address id) view returns(bool) +func (_MockRegistry *MockRegistryCaller) IsScannerOperational(opts *bind.CallOpts, id common.Address) (bool, error) { var out []interface{} - err := _MockRegistry.contract.Call(opts, &out, "isEnabled", id) + err := _MockRegistry.contract.Call(opts, &out, "isScannerOperational", id) if err != nil { return *new(bool), err @@ -448,18 +424,18 @@ func (_MockRegistry *MockRegistryCaller) IsEnabled(opts *bind.CallOpts, id *big. } -// IsEnabled is a free data retrieval call binding the contract method 0xc783034c. +// IsScannerOperational is a free data retrieval call binding the contract method 0x911b7b30. // -// Solidity: function isEnabled(uint256 id) view returns(bool) -func (_MockRegistry *MockRegistrySession) IsEnabled(id *big.Int) (bool, error) { - return _MockRegistry.Contract.IsEnabled(&_MockRegistry.CallOpts, id) +// Solidity: function isScannerOperational(address id) view returns(bool) +func (_MockRegistry *MockRegistrySession) IsScannerOperational(id common.Address) (bool, error) { + return _MockRegistry.Contract.IsScannerOperational(&_MockRegistry.CallOpts, id) } -// IsEnabled is a free data retrieval call binding the contract method 0xc783034c. +// IsScannerOperational is a free data retrieval call binding the contract method 0x911b7b30. // -// Solidity: function isEnabled(uint256 id) view returns(bool) -func (_MockRegistry *MockRegistryCallerSession) IsEnabled(id *big.Int) (bool, error) { - return _MockRegistry.Contract.IsEnabled(&_MockRegistry.CallOpts, id) +// Solidity: function isScannerOperational(address id) view returns(bool) +func (_MockRegistry *MockRegistryCallerSession) IsScannerOperational(id common.Address) (bool, error) { + return _MockRegistry.Contract.IsScannerOperational(&_MockRegistry.CallOpts, id) } // NumAgentsFor is a free data retrieval call binding the contract method 0xbd3c3a1a. @@ -524,6 +500,37 @@ func (_MockRegistry *MockRegistryCallerSession) NumScannersFor(agentId *big.Int) return _MockRegistry.Contract.NumScannersFor(&_MockRegistry.CallOpts, agentId) } +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 id) view returns(address) +func (_MockRegistry *MockRegistryCaller) OwnerOf(opts *bind.CallOpts, id *big.Int) (common.Address, error) { + var out []interface{} + err := _MockRegistry.contract.Call(opts, &out, "ownerOf", id) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 id) view returns(address) +func (_MockRegistry *MockRegistrySession) OwnerOf(id *big.Int) (common.Address, error) { + return _MockRegistry.Contract.OwnerOf(&_MockRegistry.CallOpts, id) +} + +// OwnerOf is a free data retrieval call binding the contract method 0x6352211e. +// +// Solidity: function ownerOf(uint256 id) view returns(address) +func (_MockRegistry *MockRegistryCallerSession) OwnerOf(id *big.Int) (common.Address, error) { + return _MockRegistry.Contract.OwnerOf(&_MockRegistry.CallOpts, id) +} + // ScannerHash is a free data retrieval call binding the contract method 0xb1774f9d. // // Solidity: function scannerHash(uint256 scannerId) view returns(uint256 length, bytes32 manifest)