Back to godoc.org

Package orm

v0.8.12
Latest Go to latest
Published: 1 day ago | License: MIT | Module: github.com/smartcontractkit/chainlink

Index

Package Files

Constants

const BatchSize = 100

BatchSize is the safe number of records to cache during Batch calls for SQLite without causing load problems. NOTE: Now we no longer support SQLite, perhaps this can be tuned?

Variables

var (
	// ErrorNotFound is returned when finding a single value fails.
	ErrorNotFound = gorm.ErrRecordNotFound
	// ErrNoAdvisoryLock is returned when an advisory lock can't be acquired.
	ErrNoAdvisoryLock = errors.New("can't acquire advisory lock")
	// ErrReleaseLockFailed  is returned when releasing the advisory lock fails.
	ErrReleaseLockFailed = errors.New("advisory lock release failed")
	// ErrOptimisticUpdateConflict is returned when a record update failed
	// because another update occurred while the model was in memory and the
	// differences must be reconciled.
	ErrOptimisticUpdateConflict = errors.New("conflict while updating record")
)

func Batch

func Batch(chunkSize uint, cb func(offset, limit uint) (uint, error)) error

Batch is an iterator _like_ for batches of records

func EnvVarName

func EnvVarName(field string) string

EnvVarName gets the environment variable name for a config schema field

type Config

type Config struct {
	SecretGenerator SecretGenerator

	Dialect        DialectName
	AdvisoryLockID int64
	// contains filtered or unexported fields
}

Config holds parameters used by the application which can be overridden by setting environment variables.

If you add an entry here which does not contain sensitive information, you should also update presenters.ConfigWhitelist and cmd_test.TestClient_RunNodeShowsEnv.

func NewConfig

func NewConfig() *Config

NewConfig returns the config with the environment variables set to their respective fields, or their defaults if environment variables are not set.

func (Config) AllowOrigins

func (c Config) AllowOrigins() string

AllowOrigins returns the CORS hosts used by the frontend.

func (Config) BlockBackfillDepth

func (c Config) BlockBackfillDepth() uint64

BlockBackfillDepth specifies the number of blocks before the current HEAD that the log broadcaster will try to re-consume logs from

func (Config) BridgeResponseURL

func (c Config) BridgeResponseURL() *url.URL

BridgeResponseURL represents the URL for bridges to send a response to.

func (Config) CertFile

func (c Config) CertFile() string

CertFile returns the path where the server certificate is kept

func (Config) ChainID

func (c Config) ChainID() *big.Int

ChainID represents the chain ID to use for transactions.

func (Config) ClientNodeURL

func (c Config) ClientNodeURL() string

ClientNodeURL is the URL of the Ethereum node this Chainlink node should connect to.

func (Config) CreateProductionLogger

func (c Config) CreateProductionLogger() *zap.Logger

CreateProductionLogger returns a custom logger for the config's root directory and LogLevel, with pretty printing for stdout. If LOG_TO_DISK is false, the logger will only log to stdout.

func (Config) DatabaseTimeout

func (c Config) DatabaseTimeout() models.Duration

DatabaseTimeout represents how long to tolerate non response from the DB.

func (Config) DatabaseURL

func (c Config) DatabaseURL() string

DatabaseURL configures the URL for chainlink to connect to. This must be a properly formatted URL, with a valid scheme (postgres://)

func (Config) DefaultHTTPLimit

func (c Config) DefaultHTTPLimit() int64

DefaultHTTPLimit defines the size limit for HTTP requests and responses

func (Config) DefaultHTTPTimeout

func (c Config) DefaultHTTPTimeout() models.Duration

DefaultHTTPTimeout defines the default timeout for http requests

func (Config) DefaultMaxHTTPAttempts

func (c Config) DefaultMaxHTTPAttempts() uint

DefaultMaxHTTPAttempts defines the limit for HTTP requests.

func (Config) Dev

func (c Config) Dev() bool

Dev configures "development" mode for chainlink.

func (Config) EnableBulletproofTxManager

func (c Config) EnableBulletproofTxManager() bool

EnableBulletproofTxManager uses the new tx manager for ethtx tasks. Careful, toggling this on and off could cause transactions to become lost

func (Config) EnableExperimentalAdapters

func (c Config) EnableExperimentalAdapters() bool

EnableExperimentalAdapters enables support for experimental adapters

func (Config) EthBalanceMonitorBlockDelay

func (c Config) EthBalanceMonitorBlockDelay() uint16

EthBalanceMonitorBlockDelay is the number of blocks that the balance monitor trails behind head. This is required e.g. for Infura because they will often announce a new head, then route a request to a different node which does not have this head yet.

func (Config) EthFinalityDepth

func (c Config) EthFinalityDepth() uint

EthFinalityDepth is the number of blocks after which an ethereum transaction is considered "final" BlocksConsideredFinal determines how deeply we look back to ensure that transactions are confirmed onto the longest chain There is not a large performance penalty to setting this relatively high (on the order of hundreds) It is practically limited by the number of heads we store in the database and should be less than this with a comfortable margin. If a transaction is mined in a block more than this many blocks ago, and is reorged out, we will NOT retransmit this transaction and undefined behaviour can occur including gaps in the nonce sequence that require manual intervention to fix. Therefore this number represents a number of blocks we consider large enough that no re-org this deep will ever feasibly happen.

func (Config) EthGasBumpPercent

func (c Config) EthGasBumpPercent() uint16

EthGasBumpPercent is the minimum percentage by which gas is bumped on each transaction attempt Change with care since values below geth's default will fail with "underpriced replacement transaction"

func (Config) EthGasBumpThreshold

func (c Config) EthGasBumpThreshold() uint64

EthGasBumpThreshold is the number of blocks to wait for confirmations before bumping gas again

func (Config) EthGasBumpWei

func (c Config) EthGasBumpWei() *big.Int

EthGasBumpWei is the minimum fixed amount of wei by which gas is bumped on each transaction attempt

func (Config) EthGasLimitDefault

func (c Config) EthGasLimitDefault() uint64

EthGasLimitDefault sets the default gas limit for outgoing transactions.

func (Config) EthGasPriceDefault

func (c Config) EthGasPriceDefault() *big.Int

EthGasPriceDefault is the starting gas price for every transaction

func (Config) EthHeadTrackerHistoryDepth

func (c Config) EthHeadTrackerHistoryDepth() uint

EthHeadTrackerBlocksToKeep is the number of heads to keep in the `heads` database table. This number should be at least as large as `EthFinalityDepth`. There may be a small performance penalty to setting this to something very large (10,000+)

func (Config) EthMaxGasPriceWei

func (c Config) EthMaxGasPriceWei() *big.Int

EthMaxGasPriceWei is the maximum amount in Wei that a transaction will be bumped to before abandoning it and marking it as errored.

func (Config) EthereumDisabled

func (c Config) EthereumDisabled() bool

EthereumDisabled shows whether Ethereum interactions are supported.

func (Config) EthereumURL

func (c Config) EthereumURL() string

EthereumURL represents the URL of the Ethereum node to connect Chainlink to.

func (Config) ExplorerAccessKey

func (c Config) ExplorerAccessKey() string

ExplorerAccessKey returns the access key for authenticating with explorer

func (Config) ExplorerSecret

func (c Config) ExplorerSecret() string

ExplorerSecret returns the secret for authenticating with explorer

func (Config) ExplorerURL

func (c Config) ExplorerURL() *url.URL

ExplorerURL returns the websocket URL for this node to push stats to, or nil.

func (Config) FeatureExternalInitiators

func (c Config) FeatureExternalInitiators() bool

FeatureExternalInitiators enables the External Initiator feature.

func (Config) FeatureFluxMonitor

func (c Config) FeatureFluxMonitor() bool

FeatureFluxMonitor enables the Flux Monitor feature.

func (Config) GasUpdaterBlockDelay

func (c Config) GasUpdaterBlockDelay() uint16

GasUpdaterBlockDelay is the number of blocks that the gas updater trails behind head. E.g. if this is set to 3, and we receive block 10, gas updater will fetch block 7. CAUTION: You might be tempted to set this to 0 to use the latest possible block, but it is possible to receive a head BEFORE that block is actually available from the connected node via RPC. In this case you will get false "zero" blocks that are missing transactions.

func (Config) GasUpdaterBlockHistorySize

func (c Config) GasUpdaterBlockHistorySize() uint16

GasUpdaterBlockHistorySize is the number of past blocks to keep in memory to use as a basis for calculating a percentile gas price

func (Config) GasUpdaterEnabled

func (c Config) GasUpdaterEnabled() bool

GasUpdaterEnabled turns on the automatic gas updater if set to true It is disabled by default

func (Config) GasUpdaterTransactionPercentile

func (c Config) GasUpdaterTransactionPercentile() uint16

GasUpdaterTransactionPercentile is the percentile gas price to choose. E.g. if the past transaction history contains four transactions with gas prices: [100, 200, 300, 400], picking 25 for this number will give a value of 200

func (Config) GetAdvisoryLockIDConfiguredOrDefault

func (c Config) GetAdvisoryLockIDConfiguredOrDefault() int64

func (Config) GetDatabaseDialectConfiguredOrDefault

func (c Config) GetDatabaseDialectConfiguredOrDefault() DialectName

func (Config) JSONConsole

func (c Config) JSONConsole() bool

JSONConsole enables the JSON console.

func (Config) KeyFile

func (c Config) KeyFile() string

KeyFile returns the path where the server key is kept

func (Config) KeysDir

func (c Config) KeysDir() string

KeysDir returns the path of the keys directory (used for keystore files).

func (Config) LinkContractAddress

func (c Config) LinkContractAddress() string

LinkContractAddress represents the address

func (Config) LogLevel

func (c Config) LogLevel() LogLevel

LogLevel represents the maximum level of log messages to output.

func (Config) LogSQLMigrations

func (c Config) LogSQLMigrations() bool

LogSQLMigrations tells chainlink to log all SQL migrations made using the default logger

func (Config) LogSQLStatements

func (c Config) LogSQLStatements() bool

LogSQLStatements tells chainlink to log all SQL statements made using the default logger

func (Config) LogToDisk

func (c Config) LogToDisk() bool

LogToDisk configures disk preservation of logs.

func (Config) MaxRPCCallsPerSecond

func (c Config) MaxRPCCallsPerSecond() uint64

MaxRPCCallsPerSecond returns the rate at which RPC calls can be fired

func (Config) MaximumServiceDuration

func (c Config) MaximumServiceDuration() models.Duration

MaximumServiceDuration is the maximum time that a service agreement can run from after the time it is created. Default 1 year = 365 * 24h = 8760h

func (Config) MigrateDatabase

func (c Config) MigrateDatabase() bool

MigrateDatabase determines whether the database will be automatically migrated on application startup if set to true

func (Config) MinIncomingConfirmations

func (c Config) MinIncomingConfirmations() uint32

MinIncomingConfirmations represents the minimum number of block confirmations that need to be recorded since a job run started before a task can proceed.

func (Config) MinRequiredOutgoingConfirmations

func (c Config) MinRequiredOutgoingConfirmations() uint64

MinRequiredOutgoingConfirmations represents the default minimum number of block confirmations that need to be recorded on an outgoing ethtx task before the run can move onto the next task. This can be overridden on a per-task basis by setting the `MinRequiredOutgoingConfirmations` parameter.

func (Config) MinimumContractPayment

func (c Config) MinimumContractPayment() *assets.Link

MinimumContractPayment represents the minimum amount of LINK that must be supplied for a contract to be considered.

func (Config) MinimumRequestExpiration

func (c Config) MinimumRequestExpiration() uint64

MinimumRequestExpiration is the minimum allowed request expiration for a Service Agreement.

func (Config) MinimumServiceDuration

func (c Config) MinimumServiceDuration() models.Duration

MinimumServiceDuration is the shortest duration from now that a service is allowed to run.

func (Config) OracleContractAddress

func (c Config) OracleContractAddress() *common.Address

OracleContractAddress represents the deployed Oracle contract's address.

func (Config) Port

func (c Config) Port() uint16

Port represents the port Chainlink should listen on for client requests.

func (Config) ReaperExpiration

func (c Config) ReaperExpiration() models.Duration

ReaperExpiration represents

func (Config) ReplayFromBlock

func (c Config) ReplayFromBlock() int64

func (Config) RootDir

func (c Config) RootDir() string

RootDir represents the location on the file system where Chainlink should keep its files.

func (Config) SecureCookies

func (c Config) SecureCookies() bool

SecureCookies allows toggling of the secure cookies HTTP flag

func (Config) SessionOptions

func (c Config) SessionOptions() sessions.Options

SessionOptions returns the sesssions.Options struct used to configure the session store.

func (Config) SessionSecret

func (c Config) SessionSecret() ([]byte, error)

SessionSecret returns a sequence of bytes to be used as a private key for session signing or encryption.

func (Config) SessionTimeout

func (c Config) SessionTimeout() models.Duration

SessionTimeout is the maximum duration that a user session can persist without any activity.

func (Config) Set

func (c Config) Set(name string, value interface{})

Set a specific configuration variable

func (Config) SetEthGasPriceDefault

func (c Config) SetEthGasPriceDefault(value *big.Int) error

SetEthGasPriceDefault saves a runtime value for the default gas price for transactions

func (*Config) SetRuntimeStore

func (c *Config) SetRuntimeStore(orm *ORM)

SetRuntimeStore tells the configuration system to use a store for retrieving configuration variables that can be configured at runtime.

func (Config) TLSCertPath

func (c Config) TLSCertPath() string

TLSCertPath represents the file system location of the TLS certificate Chainlink should use for HTTPS.

func (Config) TLSHost

func (c Config) TLSHost() string

TLSHost represents the hostname to use for TLS clients. This should match the TLS certificate.

func (Config) TLSKeyPath

func (c Config) TLSKeyPath() string

TLSKeyPath represents the file system location of the TLS key Chainlink should use for HTTPS.

func (Config) TLSPort

func (c Config) TLSPort() uint16

TLSPort represents the port Chainlink should listen on for encrypted client requests.

func (Config) TLSRedirect

func (c Config) TLSRedirect() bool

TLSRedirect forces TLS redirect for unencrypted connections

func (Config) TxAttemptLimit

func (c Config) TxAttemptLimit() uint16

TxAttemptLimit is the maximum number of transaction attempts (gas bumps) that will occur before giving a transaction up as errored NOTE: That initial transactions are retried forever until they succeed

func (*Config) Validate

func (c *Config) Validate() error

Validate performs basic sanity checks on config and returns error if any misconfiguration would be fatal to the application

type ConfigReader

type ConfigReader interface {
	AllowOrigins() string
	BlockBackfillDepth() uint64
	BridgeResponseURL() *url.URL
	ChainID() *big.Int
	ClientNodeURL() string
	DatabaseTimeout() models.Duration
	DatabaseURL() string
	DefaultMaxHTTPAttempts() uint
	DefaultHTTPLimit() int64
	DefaultHTTPTimeout() models.Duration
	Dev() bool
	FeatureExternalInitiators() bool
	FeatureFluxMonitor() bool
	MaximumServiceDuration() models.Duration
	MinimumServiceDuration() models.Duration
	EnableExperimentalAdapters() bool
	EnableBulletproofTxManager() bool
	EthBalanceMonitorBlockDelay() uint16
	EthGasBumpPercent() uint16
	EthGasBumpThreshold() uint64
	EthGasBumpWei() *big.Int
	EthGasLimitDefault() uint64
	EthGasPriceDefault() *big.Int
	EthMaxGasPriceWei() *big.Int
	EthFinalityDepth() uint
	EthHeadTrackerHistoryDepth() uint
	SetEthGasPriceDefault(value *big.Int) error
	EthereumURL() string
	GasUpdaterBlockDelay() uint16
	GasUpdaterBlockHistorySize() uint16
	GasUpdaterTransactionPercentile() uint16
	JSONConsole() bool
	LinkContractAddress() string
	ExplorerURL() *url.URL
	ExplorerAccessKey() string
	ExplorerSecret() string
	OracleContractAddress() *common.Address
	LogLevel() LogLevel
	LogToDisk() bool
	LogSQLStatements() bool
	MinIncomingConfirmations() uint32
	MinRequiredOutgoingConfirmations() uint64
	MinimumContractPayment() *assets.Link
	MinimumRequestExpiration() uint64
	MigrateDatabase() bool
	Port() uint16
	ReaperExpiration() models.Duration
	RootDir() string
	SecureCookies() bool
	SessionTimeout() models.Duration
	TLSCertPath() string
	TLSHost() string
	TLSKeyPath() string
	TLSPort() uint16
	TLSRedirect() bool
	TxAttemptLimit() uint16
	KeysDir() string

	KeyFile() string
	CertFile() string
	CreateProductionLogger() *zap.Logger
	SessionSecret() ([]byte, error)
	SessionOptions() sessions.Options
	// contains filtered or unexported methods
}

ConfigReader represents just the read side of the config

type ConfigSchema

type ConfigSchema struct {
	AllowOrigins                     string          `env:"ALLOW_ORIGINS" default:"http://localhost:3000,http://localhost:6688"`
	BlockBackfillDepth               string          `env:"BLOCK_BACKFILL_DEPTH" default:"10"`
	BridgeResponseURL                url.URL         `env:"BRIDGE_RESPONSE_URL"`
	ChainID                          big.Int         `env:"ETH_CHAIN_ID" default:"1"`
	ClientNodeURL                    string          `env:"CLIENT_NODE_URL" default:"http://localhost:6688"`
	DatabaseTimeout                  models.Duration `env:"DATABASE_TIMEOUT" default:"500ms"`
	DatabaseURL                      string          `env:"DATABASE_URL"`
	DefaultHTTPLimit                 int64           `env:"DEFAULT_HTTP_LIMIT" default:"32768"`
	DefaultHTTPTimeout               models.Duration `env:"DEFAULT_HTTP_TIMEOUT" default:"15s"`
	Dev                              bool            `env:"CHAINLINK_DEV" default:"false"`
	EnableExperimentalAdapters       bool            `env:"ENABLE_EXPERIMENTAL_ADAPTERS" default:"false"`
	EnableBulletproofTxManager       bool            `env:"ENABLE_BULLETPROOF_TX_MANAGER" default:"false"`
	FeatureExternalInitiators        bool            `env:"FEATURE_EXTERNAL_INITIATORS" default:"false"`
	FeatureFluxMonitor               bool            `env:"FEATURE_FLUX_MONITOR" default:"false"`
	MaximumServiceDuration           models.Duration `env:"MAXIMUM_SERVICE_DURATION" default:"8760h" `
	MinimumServiceDuration           models.Duration `env:"MINIMUM_SERVICE_DURATION" default:"0s" `
	EthGasBumpThreshold              uint64          `env:"ETH_GAS_BUMP_THRESHOLD" default:"3" `
	EthGasBumpWei                    big.Int         `env:"ETH_GAS_BUMP_WEI" default:"5000000000"`
	EthGasBumpPercent                uint16          `env:"ETH_GAS_BUMP_PERCENT" default:"20"`
	EthGasLimitDefault               uint64          `env:"ETH_GAS_LIMIT_DEFAULT" default:"500000"`
	EthGasPriceDefault               big.Int         `env:"ETH_GAS_PRICE_DEFAULT" default:"20000000000"`
	EthMaxGasPriceWei                uint64          `env:"ETH_MAX_GAS_PRICE_WEI" default:"5000000000000"`
	EthFinalityDepth                 uint            `env:"ETH_FINALITY_DEPTH" default:"50"`
	EthHeadTrackerHistoryDepth       uint            `env:"ETH_HEAD_TRACKER_HISTORY_DEPTH" default:"100"`
	EthBalanceMonitorBlockDelay      uint16          `env:"ETH_BALANCE_MONITOR_BLOCK_DELAY" default:"1"`
	EthereumURL                      string          `env:"ETH_URL" default:"ws://localhost:8546"`
	EthereumDisabled                 bool            `env:"ETH_DISABLED" default:"false"`
	GasUpdaterBlockDelay             uint16          `env:"GAS_UPDATER_BLOCK_DELAY" default:"3"`
	GasUpdaterBlockHistorySize       uint16          `env:"GAS_UPDATER_BLOCK_HISTORY_SIZE" default:"24"`
	GasUpdaterTransactionPercentile  uint16          `env:"GAS_UPDATER_TRANSACTION_PERCENTILE" default:"60"`
	GasUpdaterEnabled                bool            `env:"GAS_UPDATER_ENABLED" default:"false"`
	JSONConsole                      bool            `env:"JSON_CONSOLE" default:"false"`
	LinkContractAddress              string          `env:"LINK_CONTRACT_ADDRESS" default:"0x514910771AF9Ca656af840dff83E8264EcF986CA"`
	ExplorerURL                      *url.URL        `env:"EXPLORER_URL"`
	ExplorerAccessKey                string          `env:"EXPLORER_ACCESS_KEY"`
	ExplorerSecret                   string          `env:"EXPLORER_SECRET"`
	LogLevel                         LogLevel        `env:"LOG_LEVEL" default:"info"`
	LogToDisk                        bool            `env:"LOG_TO_DISK" default:"true"`
	LogSQLStatements                 bool            `env:"LOG_SQL" default:"false"`
	LogSQLMigrations                 bool            `env:"LOG_SQL_MIGRATIONS" default:"true"`
	DefaultMaxHTTPAttempts           uint            `env:"MAX_HTTP_ATTEMPTS" default:"5"`
	MigrateDatabase                  bool            `env:"MIGRATE_DATABASE" default:"true"`
	MinIncomingConfirmations         uint32          `env:"MIN_INCOMING_CONFIRMATIONS" default:"3"`
	MinRequiredOutgoingConfirmations uint64          `env:"MIN_OUTGOING_CONFIRMATIONS" default:"12"`
	MinimumContractPayment           assets.Link     `env:"MINIMUM_CONTRACT_PAYMENT" default:"1000000000000000000"`
	MinimumRequestExpiration         uint64          `env:"MINIMUM_REQUEST_EXPIRATION" default:"300"`
	MaxRPCCallsPerSecond             uint64          `env:"MAX_RPC_CALLS_PER_SECOND" default:"500"`
	OracleContractAddress            common.Address  `env:"ORACLE_CONTRACT_ADDRESS"`
	Port                             uint16          `env:"CHAINLINK_PORT" default:"6688"`
	ReaperExpiration                 models.Duration `env:"REAPER_EXPIRATION" default:"240h"`
	ReplayFromBlock                  int64           `env:"REPLAY_FROM_BLOCK" default:"-1"`
	RootDir                          string          `env:"ROOT" default:"~/.chainlink"`
	SecureCookies                    bool            `env:"SECURE_COOKIES" default:"true"`
	SessionTimeout                   models.Duration `env:"SESSION_TIMEOUT" default:"15m"`
	TLSCertPath                      string          `env:"TLS_CERT_PATH" `
	TLSHost                          string          `env:"CHAINLINK_TLS_HOST" `
	TLSKeyPath                       string          `env:"TLS_KEY_PATH" `
	TLSPort                          uint16          `env:"CHAINLINK_TLS_PORT" default:"6689"`
	TLSRedirect                      bool            `env:"CHAINLINK_TLS_REDIRECT" default:"false"`
	TxAttemptLimit                   uint16          `env:"CHAINLINK_TX_ATTEMPT_LIMIT" default:"10"`
}

ConfigSchema records the schema of configuration at the type level

type Connection

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

Connection manages all of the possible database connection setup and config.

func NewConnection

func NewConnection(dialect DialectName, uri string, advisoryLockID int64) (Connection, error)

NewConnection returns a Connection which holds all of the configuration necessary for managing the database connection.

type DialectName

type DialectName string

DialectName is a compiler enforced type used that maps to gorm's dialect names.

const (
	// DialectPostgres represents the postgres dialect.
	DialectPostgres DialectName = "postgres"
	// DialectTransactionWrappedPostgres is useful for tests.
	// When the connection is opened, it starts a transaction and all
	// operations performed on the DB will be within that transaction.
	//
	// HACK: This must be the string 'cloudsqlpostgres' because of an absolutely
	// horrible design in gorm. We need gorm to enable postgres-specific
	// features for the txdb driver, but it can only do that if the dialect is
	// called "postgres" or "cloudsqlpostgres".
	//
	// Since "postgres" is already taken, "cloudsqlpostgres" is our only
	// remaining option
	//
	// See: https://github.com/jinzhu/gorm/blob/master/dialect_postgres.go#L15
	DialectTransactionWrappedPostgres DialectName = "cloudsqlpostgres"
	// DialectPostgresWithoutLock represents the postgres dialect but it does not
	// wait for a lock to connect. Intended to be used for read only access.
	DialectPostgresWithoutLock DialectName = "postgresWithoutLock"
)

type LockingStrategy

type LockingStrategy interface {
	Lock(timeout models.Duration) error
	Unlock(timeout models.Duration) error
}

LockingStrategy employs the locking and unlocking of an underlying resource for exclusive access, usually a file or database.

func NewLockingStrategy

func NewLockingStrategy(ct Connection) (LockingStrategy, error)

NewLockingStrategy returns the locking strategy for a particular dialect to ensure exlusive access to the orm.

func NewPostgresLockingStrategy

func NewPostgresLockingStrategy(ct Connection) (LockingStrategy, error)

NewPostgresLockingStrategy returns a new instance of the PostgresLockingStrategy.

type LogLevel

type LogLevel struct {
	zapcore.Level
}

LogLevel determines the verbosity of the events to be logged.

func (LogLevel) ForGin

func (ll LogLevel) ForGin() string

ForGin keeps Gin's mode at the appropriate level with the LogLevel.

type ORM

type ORM struct {
	DB *gorm.DB
	// contains filtered or unexported fields
}

ORM contains the database object used by Chainlink.

func NewORM

func NewORM(uri string, timeout models.Duration, shutdownSignal gracefulpanic.Signal, dialect DialectName, advisoryLockID int64) (*ORM, error)

NewORM initializes a new database file at the configured uri.

func (*ORM) AddTxAttempt

func (orm *ORM) AddTxAttempt(tx *models.Tx, newTxAttempt *models.Tx) (*models.TxAttempt, error)

AddTxAttempt attaches a new attempt to a Tx, after the attempt has been sent to the chain

func (*ORM) AllSyncEvents

func (orm *ORM) AllSyncEvents(cb func(models.SyncEvent) error) error

AllSyncEvents returns all sync events

func (*ORM) AnyJobWithType

func (orm *ORM) AnyJobWithType(taskTypeName string) (bool, error)

AnyJobWithType returns true if there is at least one job associated with the type name specified and false otherwise

func (*ORM) ArchiveJob

func (orm *ORM) ArchiveJob(ID *models.ID) error

ArchiveJob soft deletes the job, job_runs and its initiator.

func (*ORM) AuthorizedUserWithSession

func (orm *ORM) AuthorizedUserWithSession(sessionID string, sessionDuration time.Duration) (models.User, error)

AuthorizedUserWithSession will return the one API user if the Session ID exists and hasn't expired, and update session's LastUsed field.

func (*ORM) BridgeTypes

func (orm *ORM) BridgeTypes(offset int, limit int) ([]models.BridgeType, int, error)

BridgeTypes returns bridge types ordered by name filtered limited by the passed params.

func (*ORM) BulkDeleteRuns

func (orm *ORM) BulkDeleteRuns(bulkQuery *models.BulkDeleteRunRequest) error

BulkDeleteRuns removes JobRuns and their related records: TaskRuns and RunResults.

RunResults and RunRequests are pointed at by JobRuns so we must use two CTEs to remove both parents in one hit.

TaskRuns are removed by ON DELETE CASCADE when the JobRuns and RunResults are deleted.

func (*ORM) Chain

func (orm *ORM) Chain(hash common.Hash, lookback uint) (models.Head, error)

Chain returns the chain of heads starting at hash and up to lookback parents Returns RecordNotFound if no head with the given hash exists

func (*ORM) ClearNonCurrentSessions

func (orm *ORM) ClearNonCurrentSessions(sessionID string) error

ClearNonCurrentSessions removes all sessions but the id passed in.

func (*ORM) ClearSessions

func (orm *ORM) ClearSessions() error

ClearSessions removes all sessions.

func (*ORM) ClobberDiskKeyStoreWithDBKeys

func (orm *ORM) ClobberDiskKeyStoreWithDBKeys(keysDir string) error

ClobberDiskKeyStoreWithDBKeys writes all keys stored in the orm to the keys folder on disk, deleting anything there prior.

func (*ORM) Close

func (orm *ORM) Close() error

Close closes the underlying database connection.

func (*ORM) CountOf

func (orm *ORM) CountOf(t interface{}) (int, error)

func (*ORM) CreateBridgeType

func (orm *ORM) CreateBridgeType(bt *models.BridgeType) error

CreateBridgeType saves the bridge type.

func (*ORM) CreateExternalInitiator

func (orm *ORM) CreateExternalInitiator(externalInitiator *models.ExternalInitiator) error

CreateExternalInitiator inserts a new external initiator

func (*ORM) CreateInitiator

func (orm *ORM) CreateInitiator(initr *models.Initiator) error

CreateInitiator saves the initiator.

func (*ORM) CreateJob

func (orm *ORM) CreateJob(job *models.JobSpec) error

CreateJob saves a job to the database and adds IDs to associated tables.

func (*ORM) CreateJobRun

func (orm *ORM) CreateJobRun(run *models.JobRun) error

CreateJobRun inserts a new JobRun

func (*ORM) CreateKeyIfNotExists

func (orm *ORM) CreateKeyIfNotExists(k models.Key) error

CreateKeyIfNotExists inserts a key if a key with that address doesn't exist already If a key with this address exists, it does nothing

func (*ORM) CreateLogConsumption

func (orm *ORM) CreateLogConsumption(lc *models.LogConsumption) error

CreateLogConsumption creates a new LogConsumption record

func (*ORM) CreateServiceAgreement

func (orm *ORM) CreateServiceAgreement(sa *models.ServiceAgreement) error

CreateServiceAgreement saves a Service Agreement, its JobSpec and its associations to the database.

func (*ORM) CreateSession

func (orm *ORM) CreateSession(sr models.SessionRequest) (string, error)

CreateSession will check the password in the SessionRequest against the hashed API User password in the db.

func (*ORM) CreateTx

func (orm *ORM) CreateTx(tx *models.Tx) (*models.Tx, error)

CreateTx finds and overwrites a transaction by its surrogate key, if it exists, or creates it

func (*ORM) DeleteBridgeType

func (orm *ORM) DeleteBridgeType(bt *models.BridgeType) error

DeleteBridgeType removes the bridge type

func (*ORM) DeleteEncryptedSecretVRFKey

func (orm *ORM) DeleteEncryptedSecretVRFKey(k *vrfkey.EncryptedVRFKey) error

DeleteEncryptedVRFKey deletes k from the encrypted keys table, or errors

func (*ORM) DeleteExternalInitiator

func (orm *ORM) DeleteExternalInitiator(name string) error

DeleteExternalInitiator removes an external initiator

func (*ORM) DeleteFluxMonitorRoundsBackThrough

func (orm *ORM) DeleteFluxMonitorRoundsBackThrough(aggregator common.Address, roundID uint32) error

DeleteFluxMonitorRoundsBackThrough deletes all the RoundStat records for a given oracle address starting from the most recent round back through the given round

func (*ORM) DeleteJobSpecError

func (orm *ORM) DeleteJobSpecError(ID int64) error

DeleteJobSpecError removes a JobSpecError

func (*ORM) DeleteKey

func (orm *ORM) DeleteKey(address []byte) error

DeleteKey deletes a key whose address matches the supplied bytes.

func (*ORM) DeleteStaleSessions

func (orm *ORM) DeleteStaleSessions(before time.Time) error

DeleteStaleSessions deletes all sessions before the passed time.

func (*ORM) DeleteTransaction

func (orm *ORM) DeleteTransaction(ethtx *models.Tx) error

DeleteTransaction deletes a transaction an all of its attempts.

func (*ORM) DeleteUser

func (orm *ORM) DeleteUser() (models.User, error)

DeleteUser will delete the API User in the db.

func (*ORM) DeleteUserSession

func (orm *ORM) DeleteUserSession(sessionID string) error

DeleteUserSession will erase the session ID for the sole API User.

func (*ORM) FindAllTxsInNonceRange

func (orm *ORM) FindAllTxsInNonceRange(beginningNonce uint, endingNonce uint) ([]models.Tx, error)

FindAllTxsInNonceRange returns an array of transactions matching the inclusive range between beginningNonce and endingNonce

func (*ORM) FindBridge

func (orm *ORM) FindBridge(name models.TaskType) (models.BridgeType, error)

FindBridge looks up a Bridge by its Name.

func (*ORM) FindBridgesByNames

func (orm *ORM) FindBridgesByNames(names []string) ([]models.BridgeType, error)

FindBridgesByNames finds multiple bridges by their names.

func (*ORM) FindEncryptedP2PKeys

func (orm *ORM) FindEncryptedP2PKeys() (keys []p2pkey.EncryptedP2PKey, err error)

func (*ORM) FindEncryptedSecretVRFKeys

func (orm *ORM) FindEncryptedSecretVRFKeys(where ...vrfkey.EncryptedVRFKey) (
	retrieved []*vrfkey.EncryptedVRFKey, err error)

FindEncryptedVRFKeys retrieves matches to where from the encrypted keys table, or errors

func (*ORM) FindEthTaskRunTxByTaskRunID

func (orm *ORM) FindEthTaskRunTxByTaskRunID(taskRunID uuid.UUID) (*models.EthTaskRunTx, error)

FindEthTaskRunTxByTaskRunID finds the EthTaskRunTx with its EthTxes and EthTxAttempts preloaded

func (*ORM) FindEthTxWithAttempts

func (orm *ORM) FindEthTxWithAttempts(etxID int64) (models.EthTx, error)

FindEthTxWithAttempts finds the EthTx with its attempts and receipts preloaded

func (*ORM) FindExternalInitiator

func (orm *ORM) FindExternalInitiator(
	eia *auth.Token,
) (*models.ExternalInitiator, error)

FindExternalInitiator finds an external initiator given an authentication request

func (*ORM) FindExternalInitiatorByName

func (orm *ORM) FindExternalInitiatorByName(iname string) (models.ExternalInitiator, error)

FindExternalInitiatorByName finds an external initiator given an authentication request

func (*ORM) FindInitiator

func (orm *ORM) FindInitiator(ID int64) (models.Initiator, error)

FindInitiator returns the single initiator defined by the passed ID.

func (*ORM) FindJob

func (orm *ORM) FindJob(id *models.ID) (models.JobSpec, error)

FindJob looks up a Job by its ID.

func (*ORM) FindJobRun

func (orm *ORM) FindJobRun(id *models.ID) (models.JobRun, error)

FindJobRun looks up a JobRun by its ID.

func (*ORM) FindJobSpecError

func (orm *ORM) FindJobSpecError(jobID *models.ID, description string) (*models.JobSpecError, error)

FindJobSpecError looks for a JobSpecError record with the given jobID and description

func (*ORM) FindJobWithErrors

func (orm *ORM) FindJobWithErrors(id *models.ID) (models.JobSpec, error)

FindJobWithErrors looks up a Job by its ID and preloads JobSpecErrors.

func (*ORM) FindLogConsumer

func (orm *ORM) FindLogConsumer(lc *models.LogConsumption) (models.JobSpec, error)

FindLogConsumer finds the consuming job of a particular LogConsumption record

func (*ORM) FindOrCreateFluxMonitorRoundStats

func (orm *ORM) FindOrCreateFluxMonitorRoundStats(aggregator common.Address, roundID uint32) (models.FluxMonitorRoundStats, error)

FindOrCreateFluxMonitorRoundStats find the round stats record for agiven oracle on a given round, or creates it if no record exists

func (*ORM) FindServiceAgreement

func (orm *ORM) FindServiceAgreement(id string) (models.ServiceAgreement, error)

FindServiceAgreement looks up a ServiceAgreement by its ID.

func (*ORM) FindTx

func (orm *ORM) FindTx(ID uint64) (*models.Tx, error)

FindTx returns the specific transaction for the passed ID.

func (*ORM) FindTxAttempt

func (orm *ORM) FindTxAttempt(hash common.Hash) (*models.TxAttempt, error)

FindTxAttempt returns an individual TxAttempt

func (*ORM) FindTxByAttempt

func (orm *ORM) FindTxByAttempt(hash common.Hash) (*models.Tx, *models.TxAttempt, error)

FindTxByAttempt returns the specific transaction attempt with the hash.

func (*ORM) FindTxsBySenderAndRecipient

func (orm *ORM) FindTxsBySenderAndRecipient(sender, recipient common.Address, offset, limit uint) ([]models.Tx, error)

FindTxsBySenderAndRecipient returns an array of transactions sent by `sender` to `recipient`

func (*ORM) FindUser

func (orm *ORM) FindUser() (models.User, error)

FindUser will return the one API user, or an error.

func (*ORM) FirstOrCreateEncryptedSecretVRFKey

func (orm *ORM) FirstOrCreateEncryptedSecretVRFKey(k *vrfkey.EncryptedVRFKey) error

FirstOrCreateEncryptedVRFKey returns the first key found or creates a new one in the orm.

func (*ORM) GetConfigValue

func (orm *ORM) GetConfigValue(field string, value encoding.TextUnmarshaler) error

GetConfigValue returns the value for a named configuration entry

func (*ORM) GetLastNonce

func (orm *ORM) GetLastNonce(address common.Address) (uint64, error)

GetLastNonce retrieves the last known nonce in the database for an account

func (*ORM) GetRoundRobinAddress

func (orm *ORM) GetRoundRobinAddress(addresses ...common.Address) (address common.Address, err error)

GetRoundRobinAddress queries the database for the address of a random ethereum key derived from the id. This takes an optional param for a slice of addresses it should pick from. Leave empty to pick from all addresses in the database. NOTE: We can add more advanced logic here later such as sorting by priority etc

func (*ORM) HasConsumedLog

func (orm *ORM) HasConsumedLog(rawLog models.RawLog, JobID *models.ID) (bool, error)

HasConsumedLog reports whether the given consumer had already consumed the given log

func (*ORM) HeadByHash

func (orm *ORM) HeadByHash(hash common.Hash) (*models.Head, error)

HeadByHash fetches the head with the given hash from the db, returns nil if none exists

func (*ORM) IdempotentInsertEthTaskRunTx

func (orm *ORM) IdempotentInsertEthTaskRunTx(taskRunID models.ID, fromAddress common.Address, toAddress common.Address, encodedPayload []byte, gasLimit uint64) error

IdempotentInsertEthTaskRunTx creates both eth_task_run_transaction and eth_tx in one hit It can be called multiple times without error as long as the outcome would have resulted in the same database state

func (*ORM) IdempotentInsertHead

func (orm *ORM) IdempotentInsertHead(h models.Head) error

IdempotentInsertHead inserts a head only if the hash is new. Will do nothing if hash exists already. No advisory lock required because this is thread safe.

func (*ORM) IncrFluxMonitorRoundSubmissions

func (orm *ORM) IncrFluxMonitorRoundSubmissions(aggregator common.Address, roundID uint32) error

IncrFluxMonitorRoundSubmissions trys to create a RoundStat record for the given oracle at the given round. If one already exists, it increments the num_submissions column.

func (*ORM) JobRunsCountFor

func (orm *ORM) JobRunsCountFor(jobSpecID *models.ID) (int, error)

JobRunsCountFor returns the current number of runs for the job

func (*ORM) JobRunsFor

func (orm *ORM) JobRunsFor(jobSpecID *models.ID, limit ...int) ([]models.JobRun, error)

JobRunsFor fetches all JobRuns with a given Job ID, sorted by their created at time.

func (*ORM) JobRunsSorted

func (orm *ORM) JobRunsSorted(sort SortType, offset int, limit int) ([]models.JobRun, int, error)

JobRunsSorted returns job runs ordered and filtered by the passed params.

func (*ORM) JobRunsSortedFor

func (orm *ORM) JobRunsSortedFor(id *models.ID, order SortType, offset int, limit int) ([]models.JobRun, int, error)

JobRunsSortedFor returns job runs for a specific job spec ordered and filtered by the passed params.

func (*ORM) Jobs

func (orm *ORM) Jobs(cb func(*models.JobSpec) bool, initrTypes ...string) error

Jobs fetches all jobs.

func (*ORM) JobsSorted

func (orm *ORM) JobsSorted(sort SortType, offset int, limit int) ([]models.JobSpec, int, error)

JobsSorted returns many JobSpecs sorted by CreatedAt from the store adhering to the passed parameters.

func (*ORM) KeyByAddress

func (orm *ORM) KeyByAddress(address common.Address) (models.Key, error)

KeyByAddress returns the key matching provided address

func (*ORM) KeyExists

func (orm *ORM) KeyExists(address []byte) (bool, error)

KeyExists returns true if a key exists in the database for this address

func (*ORM) Keys

func (orm *ORM) Keys() ([]models.Key, error)

Keys returns all of the keys recorded in the database.

func (*ORM) LastHead

func (orm *ORM) LastHead() (*models.Head, error)

LastHead returns the head with the highest number. In the case of ties (e.g. due to re-org) it returns the most recently seen head entry.

func (*ORM) LinkEarnedFor

func (orm *ORM) LinkEarnedFor(spec *models.JobSpec) (*assets.Link, error)

LinkEarnedFor shows the total link earnings for a job

func (*ORM) LogConsumptionExists

func (orm *ORM) LogConsumptionExists(lc *models.LogConsumption) (bool, error)

LogConsumptionExists reports whether a given LogConsumption record already exists

func (*ORM) MarkRan

func (orm *ORM) MarkRan(i models.Initiator, ran bool) error

MarkRan will set Ran to true for a given initiator

func (*ORM) MarkTxSafe

func (orm *ORM) MarkTxSafe(tx *models.Tx, txAttempt *models.TxAttempt) error

MarkTxSafe updates the database for the given transaction and attempt to show that the transaction has not just been confirmed, but has met the minimum number of outgoing confirmations to be deemed safely written on the blockchain.

func (*ORM) MostRecentFluxMonitorRoundID

func (orm *ORM) MostRecentFluxMonitorRoundID(aggregator common.Address) (uint32, error)

MostRecentFluxMonitorRoundID finds roundID of the most recent round that the provided oracle address submitted to

func (*ORM) MustEnsureAdvisoryLock

func (orm *ORM) MustEnsureAdvisoryLock()

MustEnsureAdvisoryLock sends a shutdown signal to the ORM if it an advisory lock cannot be acquired.

func (*ORM) PendingBridgeType

func (orm *ORM) PendingBridgeType(jr models.JobRun) (models.BridgeType, error)

PendingBridgeType returns the bridge type of the current pending task, or error if not pending bridge.

func (*ORM) RawDB

func (orm *ORM) RawDB(fn func(*gorm.DB) error) error

func (*ORM) SaveJobRun

func (orm *ORM) SaveJobRun(run *models.JobRun) error

SaveJobRun updates UpdatedAt for a JobRun and saves it

func (*ORM) SaveSession

func (orm *ORM) SaveSession(session *models.Session) error

SaveSession saves the session.

func (*ORM) SaveTx

func (orm *ORM) SaveTx(tx *models.Tx) error

SaveTx saves the Ethereum Transaction.

func (*ORM) SaveUser

func (orm *ORM) SaveUser(user *models.User) error

SaveUser saves the user.

func (*ORM) Sessions

func (orm *ORM) Sessions(offset, limit int) ([]models.Session, error)

Sessions returns all sessions limited by the parameters.

func (*ORM) SetConfigValue

func (orm *ORM) SetConfigValue(field string, value encoding.TextMarshaler) error

SetConfigValue returns the value for a named configuration entry

func (*ORM) SetLogging

func (orm *ORM) SetLogging(enabled bool)

SetLogging turns on SQL statement logging

func (*ORM) Transaction

func (orm *ORM) Transaction(fc func(tx *gorm.DB) error) (err error)

NOTE: Copied verbatim from gorm master Transaction start a transaction as a block, return error will rollback, otherwise to commit.

func (*ORM) Transactions

func (orm *ORM) Transactions(offset, limit int) ([]models.Tx, int, error)

Transactions returns all transactions limited by passed parameters.

func (*ORM) TrimOldHeads

func (orm *ORM) TrimOldHeads(n uint) (err error)

TrimOldHeads deletes heads such that only the top N block numbers remain

func (*ORM) TxAttempts

func (orm *ORM) TxAttempts(offset, limit int) ([]models.TxAttempt, int, error)

TxAttempts returns the last tx attempts sorted by sent at descending.

func (*ORM) TxFrom

func (orm *ORM) TxFrom(from common.Address) ([]models.Tx, error)

TxFrom returns all transactions from a particular address.

func (*ORM) UnconfirmedTxAttempts

func (orm *ORM) UnconfirmedTxAttempts() ([]models.TxAttempt, error)

UnconfirmedTxAttempts returns all TxAttempts for which the associated Tx is still unconfirmed.

func (*ORM) Unscoped

func (orm *ORM) Unscoped() *ORM

Unscoped returns a new instance of this ORM that includes soft deleted items.

func (*ORM) UnscopedJobRunsWithStatus

func (orm *ORM) UnscopedJobRunsWithStatus(cb func(*models.JobRun), statuses ...models.RunStatus) error

UnscopedJobRunsWithStatus passes all JobRuns to a callback, one by one, including those that were soft deleted.

func (*ORM) UpdateBridgeType

func (orm *ORM) UpdateBridgeType(bt *models.BridgeType, btr *models.BridgeTypeRequest) error

UpdateBridgeType updates the bridge type.

func (*ORM) UpsertEncryptedP2PKey

func (orm *ORM) UpsertEncryptedP2PKey(k *p2pkey.EncryptedP2PKey) error

func (*ORM) UpsertErrorFor

func (orm *ORM) UpsertErrorFor(jobID *models.ID, description string)

UpsertErrorFor upserts a JobSpecError record, incrementing the occurrences counter by 1 if the record is found

type PostgresLockingStrategy

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

PostgresLockingStrategy uses a postgres advisory lock to ensure exclusive access.

func (*PostgresLockingStrategy) Lock

func (s *PostgresLockingStrategy) Lock(timeout models.Duration) error

Lock uses a blocking postgres advisory lock that times out at the passed timeout.

func (*PostgresLockingStrategy) Unlock

func (s *PostgresLockingStrategy) Unlock(timeout models.Duration) error

Unlock unlocks the locked postgres advisory lock.

type SecretGenerator

type SecretGenerator interface {
	Generate(Config) ([]byte, error)
}

SecretGenerator is the interface for objects that generate a secret used to sign or encrypt.

type SortType

type SortType int

SortType defines the different sort orders available.

const (
	// Ascending is the sort order going up, i.e. 1,2,3.
	Ascending SortType = iota
	// Descending is the sort order going down, i.e. 3,2,1.
	Descending
)

func (SortType) String

func (s SortType) String() string
Documentation was rendered with GOOS=linux and GOARCH=amd64.

Jump to identifier

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to identifier