keeper

package
v2.2.0-mercury-20230526 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 26, 2023 License: MIT Imports: 42 Imported by: 3

Documentation

Index

Constants

View Source
const (
	ZeroPrefix   = "0x"
	UpkeepPrefix = "UPx"
)
View Source
const ActiveUpkeepIDBatchSize int64 = 10000

Variables

View Source
var (
	ErrContractCallFailure = errors.New("failure in calling contract")
)

Functions

func CalcPositioningConstant

func CalcPositioningConstant(upkeepID *utils.Big, registryAddress ethkey.EIP55Address) (int32, error)

CalcPositioningConstant calculates a positioning constant. The positioning constant is fixed because upkeepID and registryAddress are immutable

func LeastSignificant32

func LeastSignificant32(num *big.Int) uint64

LeastSignificant32 returns the least significant 32 bits of the input as a big int

func ParseUpkeepId

func ParseUpkeepId(upkeepIdStr string) (*big.Int, bool)

ParseUpkeepId parses the upkeep id input string to a big int pointer. It can handle the following 4 formats: 1. decimal format like 123471239047239047243709... 2. hex format like AbC13D354eFF... 3. 0x-prefixed hex like 0xAbC13D354eFF... 4. Upkeep-prefixed hex like UPxAbC13D354eFF...

func ValidatedKeeperSpec

func ValidatedKeeperSpec(tomlString string) (job.Job, error)

ValidatedKeeperSpec analyses the tomlString passed as parameter and returns a newly-created Job if there are no validation errors inside the toml.

Types

type Config

type Config interface {
	EvmEIP1559DynamicFees() bool
	KeySpecificMaxGasPriceWei(addr common.Address) *assets.Wei
	KeeperDefaultTransactionQueueDepth() uint32
	KeeperGasPriceBufferPercent() uint16
	KeeperGasTipCapBufferPercent() uint16
	KeeperBaseFeeBufferPercent() uint16
	KeeperMaximumGracePeriod() int64
	KeeperRegistryCheckGasOverhead() uint32
	KeeperRegistryPerformGasOverhead() uint32
	KeeperRegistryMaxPerformDataSize() uint32
	KeeperRegistrySyncInterval() time.Duration
	KeeperRegistrySyncUpkeepQueueSize() uint32
	KeeperTurnLookBack() int64
	pg.QConfig
}

type Delegate

type Delegate struct {
	// contains filtered or unexported fields
}

func NewDelegate

func NewDelegate(
	db *sqlx.DB,
	jrm job.ORM,
	pr pipeline.Runner,
	logger logger.Logger,
	chainSet evm.ChainSet,
	mailMon *utils.MailboxMonitor,
) *Delegate

NewDelegate is the constructor of Delegate

func (*Delegate) AfterJobCreated

func (d *Delegate) AfterJobCreated(spec job.Job)

func (*Delegate) BeforeJobCreated

func (d *Delegate) BeforeJobCreated(spec job.Job)

func (*Delegate) BeforeJobDeleted

func (d *Delegate) BeforeJobDeleted(spec job.Job)

func (*Delegate) JobType

func (d *Delegate) JobType() job.Type

JobType returns job type

func (*Delegate) OnDeleteJob

func (d *Delegate) OnDeleteJob(spec job.Job, q pg.Queryer) error

func (*Delegate) ServicesForSpec

func (d *Delegate) ServicesForSpec(spec job.Job) (services []job.ServiceCtx, err error)

ServicesForSpec satisfies the job.Delegate interface.

type KeeperIndexMap

type KeeperIndexMap map[ethkey.EIP55Address]int32

func (*KeeperIndexMap) Scan

func (k *KeeperIndexMap) Scan(val interface{}) error

func (*KeeperIndexMap) Value

func (k *KeeperIndexMap) Value() (driver.Value, error)

type ORM

type ORM struct {
	// contains filtered or unexported fields
}

ORM implements ORM layer using PostgreSQL

func NewORM

func NewORM(db *sqlx.DB, lggr logger.Logger, config Config) ORM

NewORM is the constructor of postgresORM

func (ORM) AllUpkeepIDsForRegistry

func (korm ORM) AllUpkeepIDsForRegistry(regID int64) (upkeeps []utils.Big, err error)

func (ORM) BatchDeleteUpkeepsForJob

func (korm ORM) BatchDeleteUpkeepsForJob(jobID int32, upkeepIDs []utils.Big) (int64, error)

BatchDeleteUpkeepsForJob deletes all upkeeps by the given IDs for the job with the given ID

func (ORM) EligibleUpkeepsForRegistry

func (korm ORM) EligibleUpkeepsForRegistry(registryAddress ethkey.EIP55Address, blockNumber int64, gracePeriod int64, binaryHash string) (upkeeps []UpkeepRegistration, err error)

EligibleUpkeepsForRegistry fetches eligible upkeeps for processing The query checks the following conditions - checks the registry address is correct and the registry has some keepers associated -- is it my turn AND my keeper was not the last perform for this upkeep OR my keeper was the last before BUT it is past the grace period -- OR is it my buddy's turn AND they were the last keeper to do the perform for this upkeep DEV: note we cast upkeep_id and binaryHash as 32 bits, even though both are 256 bit numbers when performing XOR. This is enough information to distribute the upkeeps over the keepers so long as num keepers < 4294967296

func (ORM) Q

func (korm ORM) Q() pg.Q

func (ORM) Registries

func (korm ORM) Registries() ([]Registry, error)

Registries returns all registries

func (ORM) RegistryByContractAddress

func (korm ORM) RegistryByContractAddress(registryAddress ethkey.EIP55Address) (Registry, error)

RegistryByContractAddress returns a single registry based on provided address

func (ORM) RegistryForJob

func (korm ORM) RegistryForJob(jobID int32) (Registry, error)

RegistryForJob returns a specific registry for a job with the given ID

func (ORM) SetLastRunInfoForUpkeepOnJob

func (korm ORM) SetLastRunInfoForUpkeepOnJob(jobID int32, upkeepID *utils.Big, height int64, fromAddress ethkey.EIP55Address, qopts ...pg.QOpt) (int64, error)

SetLastRunInfoForUpkeepOnJob sets the last run block height and the associated keeper index only if the new block height is greater than the previous.

func (ORM) UpdateUpkeepLastKeeperIndex

func (korm ORM) UpdateUpkeepLastKeeperIndex(jobID int32, upkeepID *utils.Big, fromAddress ethkey.EIP55Address) error

UpdateUpkeepLastKeeperIndex updates the last keeper index for an upkeep

func (ORM) UpsertRegistry

func (korm ORM) UpsertRegistry(registry *Registry) error

UpsertRegistry upserts registry by the given input

func (ORM) UpsertUpkeep

func (korm ORM) UpsertUpkeep(registration *UpkeepRegistration) error

UpsertUpkeep upserts upkeep by the given input

type Registry

type Registry struct {
	ID                int64
	BlockCountPerTurn int32
	CheckGas          uint32
	ContractAddress   ethkey.EIP55Address
	FromAddress       ethkey.EIP55Address
	JobID             int32
	KeeperIndex       int32
	NumKeepers        int32
	KeeperIndexMap    KeeperIndexMap
}

type RegistryConfig

type RegistryConfig struct {
	BlockCountPerTurn int32
	CheckGas          uint32
	KeeperAddresses   []common.Address
}

type RegistryGasChecker

type RegistryGasChecker interface {
	KeeperRegistryCheckGasOverhead() uint32
	KeeperRegistryPerformGasOverhead() uint32
	KeeperRegistryMaxPerformDataSize() uint32
}

type RegistrySynchronizer

type RegistrySynchronizer struct {
	utils.StartStopOnce
	// contains filtered or unexported fields
}

func NewRegistrySynchronizer

func NewRegistrySynchronizer(opts RegistrySynchronizerOptions) *RegistrySynchronizer

NewRegistrySynchronizer is the constructor of RegistrySynchronizer

func (*RegistrySynchronizer) Close

func (rs *RegistrySynchronizer) Close() error

func (*RegistrySynchronizer) HandleLog

func (rs *RegistrySynchronizer) HandleLog(broadcast log.Broadcast)

func (*RegistrySynchronizer) JobID

func (rs *RegistrySynchronizer) JobID() int32

func (*RegistrySynchronizer) Start

Start starts RegistrySynchronizer.

type RegistrySynchronizerOptions

type RegistrySynchronizerOptions struct {
	Job                      job.Job
	RegistryWrapper          RegistryWrapper
	ORM                      ORM
	JRM                      job.ORM
	LogBroadcaster           log.Broadcaster
	MailMon                  *utils.MailboxMonitor
	SyncInterval             time.Duration
	MinIncomingConfirmations uint32
	Logger                   logger.Logger
	SyncUpkeepQueueSize      uint32
	EffectiveKeeperAddress   common.Address
}

type RegistryVersion

type RegistryVersion int32
const (
	RegistryVersion_1_0 RegistryVersion = iota
	RegistryVersion_1_1
	RegistryVersion_1_2
	RegistryVersion_1_3
	RegistryVersion_2_0
)

func (RegistryVersion) String

func (rv RegistryVersion) String() string

type RegistryWrapper

type RegistryWrapper struct {
	Address ethkey.EIP55Address
	Version RegistryVersion
	// contains filtered or unexported fields
}

RegistryWrapper implements a layer on top of different versions of registry wrappers to provide a unified layer to rest of the codebase

func NewRegistryWrapper

func NewRegistryWrapper(address ethkey.EIP55Address, evmClient evmclient.Client) (*RegistryWrapper, error)

func (*RegistryWrapper) AddFunds

func (rw *RegistryWrapper) AddFunds(opts *bind.TransactOpts, id *big.Int, amount *big.Int) (*types.Transaction, error)

func (*RegistryWrapper) CancelUpkeep

func (rw *RegistryWrapper) CancelUpkeep(opts *bind.TransactOpts, id *big.Int) (*types.Transaction, error)

func (*RegistryWrapper) GetActiveUpkeepIDs

func (rw *RegistryWrapper) GetActiveUpkeepIDs(opts *bind.CallOpts) ([]*big.Int, error)

func (*RegistryWrapper) GetCancelledUpkeepIDFromLog

func (rw *RegistryWrapper) GetCancelledUpkeepIDFromLog(broadcast log.Broadcast) (*big.Int, error)

func (*RegistryWrapper) GetConfig

func (rw *RegistryWrapper) GetConfig(opts *bind.CallOpts) (*RegistryConfig, error)

func (*RegistryWrapper) GetIDFromGasLimitSetLog

func (rw *RegistryWrapper) GetIDFromGasLimitSetLog(broadcast log.Broadcast) (*big.Int, error)

func (*RegistryWrapper) GetLogListenerOpts

func (rw *RegistryWrapper) GetLogListenerOpts(minIncomingConfirmations uint32, upkeepPerformedFilter [][]log.Topic) (*log.ListenerOpts, error)

func (*RegistryWrapper) GetUpkeep

func (rw *RegistryWrapper) GetUpkeep(opts *bind.CallOpts, id *big.Int) (*UpkeepConfig, error)

func (*RegistryWrapper) GetUpkeepIdFromMigratedLog

func (rw *RegistryWrapper) GetUpkeepIdFromMigratedLog(broadcast log.Broadcast) (*big.Int, error)

func (*RegistryWrapper) GetUpkeepIdFromReceivedLog

func (rw *RegistryWrapper) GetUpkeepIdFromReceivedLog(broadcast log.Broadcast) (*big.Int, error)

func (*RegistryWrapper) GetUpkeepIdFromRegistrationLog

func (rw *RegistryWrapper) GetUpkeepIdFromRegistrationLog(broadcast log.Broadcast) (*big.Int, error)

func (*RegistryWrapper) GetUpkeepIdFromUpkeepPausedLog

func (rw *RegistryWrapper) GetUpkeepIdFromUpkeepPausedLog(broadcast log.Broadcast) (*big.Int, error)

func (*RegistryWrapper) GetUpkeepIdFromUpkeepUnpausedLog

func (rw *RegistryWrapper) GetUpkeepIdFromUpkeepUnpausedLog(broadcast log.Broadcast) (*big.Int, error)

func (*RegistryWrapper) ParseUpkeepCheckDataUpdatedLog

func (rw *RegistryWrapper) ParseUpkeepCheckDataUpdatedLog(broadcast log.Broadcast) (*UpkeepCheckDataUpdatedLog, error)

func (*RegistryWrapper) ParseUpkeepPerformedLog

func (rw *RegistryWrapper) ParseUpkeepPerformedLog(broadcast log.Broadcast) (*UpkeepPerformedLog, error)

func (*RegistryWrapper) PerformUpkeep

func (rw *RegistryWrapper) PerformUpkeep(opts *bind.TransactOpts, id *big.Int, performData []byte) (*types.Transaction, error)

func (*RegistryWrapper) RegisterUpkeep

func (rw *RegistryWrapper) RegisterUpkeep(opts *bind.TransactOpts, target common.Address, gasLimit uint32, admin common.Address, checkData []byte) (*types.Transaction, error)

func (*RegistryWrapper) SetKeepers

func (rw *RegistryWrapper) SetKeepers(opts *bind.TransactOpts, keepers []common.Address, payees []common.Address) (*types.Transaction, error)

type UpkeepCheckDataUpdatedLog

type UpkeepCheckDataUpdatedLog struct {
	UpkeepID     *big.Int
	NewCheckData []byte
}

type UpkeepConfig

type UpkeepConfig struct {
	ExecuteGas uint32
	CheckData  []byte
	LastKeeper common.Address
}

type UpkeepExecuter

type UpkeepExecuter struct {
	utils.StartStopOnce
	// contains filtered or unexported fields
}

UpkeepExecuter implements the logic to communicate with KeeperRegistry

func NewUpkeepExecuter

func NewUpkeepExecuter(
	job job.Job,
	orm ORM,
	pr pipeline.Runner,
	ethClient evmclient.Client,
	headBroadcaster httypes.HeadBroadcaster,
	gasEstimator gas.EvmFeeEstimator,
	logger logger.Logger,
	config Config,
	effectiveKeeperAddress common.Address,
) *UpkeepExecuter

NewUpkeepExecuter is the constructor of UpkeepExecuter

func (*UpkeepExecuter) Close

func (ex *UpkeepExecuter) Close() error

Close stops and closes upkeep executer

func (*UpkeepExecuter) OnNewLongestChain

func (ex *UpkeepExecuter) OnNewLongestChain(_ context.Context, head *evmtypes.Head)

OnNewLongestChain handles the given head of a new longest chain

func (*UpkeepExecuter) Start

func (ex *UpkeepExecuter) Start(context.Context) error

Start starts the upkeep executer logic

type UpkeepIdentifier

type UpkeepIdentifier utils.Big

func NewUpkeepIdentifier

func NewUpkeepIdentifier(i *utils.Big) *UpkeepIdentifier

func (UpkeepIdentifier) String

func (ui UpkeepIdentifier) String() string

String produces a hex encoded value, zero padded, prefixed with UpkeepPrefix

type UpkeepPerformedLog

type UpkeepPerformedLog struct {
	UpkeepID   *big.Int
	FromKeeper common.Address
}

type UpkeepRegistration

type UpkeepRegistration struct {
	ID                  int32
	CheckData           []byte
	ExecuteGas          uint32
	LastRunBlockHeight  int64
	RegistryID          int64
	Registry            Registry
	UpkeepID            *utils.Big
	LastKeeperIndex     null.Int64
	PositioningConstant int32
}

func (UpkeepRegistration) PrettyID

func (upkeep UpkeepRegistration) PrettyID() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL