models

package
v0.0.5 Latest Latest
Warning

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

Go to latest
Published: Dec 31, 2021 License: MIT Imports: 42 Imported by: 0

Documentation

Overview

Package models contain the key job components used by the Chainlink application.

Common

Common contains types and functions that are useful across the application. Particularly dealing with the URL field, dates, and time.

Eth

Eth creates transactions and tracks transaction attempts on the Ethereum blockchain.

JobSpec

A JobSpec is the largest unit of work that a Chainlink node can take on. It will have Initiators, which is how a JobRun is started from the job definition, and Tasks, which are the specific instructions for what work needs to be performed. The BridgeType is also located here, and is used to define the location (URL) of external adapters.

ORM

The ORM is the wrapper around the database. It gives a limited set of functions to allow for safe storing and withdrawing of information.

Run

A Run is the actual invocation of work being done on the Job and Task. This comprises of JobRuns and TaskRuns. A JobRun is like a workflow where the steps are the TaskRuns.

i.e. We have a Scheduler Initiator that creates a JobRun every monday based on a JobDefinition. And in turn, those JobRuns have TaskRuns based on the JobDefinition's TaskDefinitions.

Index

Constants

View Source
const (
	// RunStatusUnstarted is the default state of any run status.
	RunStatusUnstarted = RunStatus("unstarted")
	// RunStatusInProgress is used for when a run is actively being executed.
	RunStatusInProgress = RunStatus("in_progress")
	// RunStatusPendingIncomingConfirmations is used for when a run is awaiting for incoming block confirmations
	// e.g. waiting for the log event to be N blocks deep
	RunStatusPendingIncomingConfirmations = RunStatus("pending_incoming_confirmations")
	// RunStatusPendingConnection states that the run is waiting on a connection to the block chain.
	RunStatusPendingConnection = RunStatus("pending_connection")
	// RunStatusPendingBridge is used for when a run is waiting on the completion
	// of another event.
	RunStatusPendingBridge = RunStatus("pending_bridge")
	// RunStatusPendingSleep is used for when a run is waiting on a sleep function to finish.
	RunStatusPendingSleep = RunStatus("pending_sleep")
	// RunStatusPendingOutgoingConfirmations is used for when a run is waiting for outgoing block confirmations
	// e.g. we have sent a transaction using ethtx and are now waiting for it to be N blocks deep
	RunStatusPendingOutgoingConfirmations = RunStatus("pending_outgoing_confirmations")
	// RunStatusErrored is used for when a run has errored and will not complete.
	RunStatusErrored = RunStatus("errored")
	// RunStatusCompleted is used for when a run has successfully completed execution.
	RunStatusCompleted = RunStatus("completed")
	// RunStatusCancelled is used to indicate a run is no longer desired.
	RunStatusCancelled = RunStatus("cancelled")
)
View Source
const (
	ResultKey           = "result"
	ResultCollectionKey = "__chainlink_result_collection__"
)
View Source
const (
	EthTxUnstarted               = EthTxState("unstarted")
	EthTxInProgress              = EthTxState("in_progress")
	EthTxFatalError              = EthTxState("fatal_error")
	EthTxUnconfirmed             = EthTxState("unconfirmed")
	EthTxConfirmed               = EthTxState("confirmed")
	EthTxConfirmedMissingReceipt = EthTxState("confirmed_missing_receipt")

	EthTxAttemptInProgress      = EthTxAttemptState("in_progress")
	EthTxAttemptInsufficientEth = EthTxAttemptState("insufficient_eth")
	EthTxAttemptBroadcast       = EthTxAttemptState("broadcast")
)
View Source
const (
	// InitiatorRunLog for tasks in a job to watch an ethereum address
	// and expect a JSON payload from a log event.
	InitiatorRunLog = "runlog"
	// InitiatorCron for tasks in a job to be ran on a schedule.
	InitiatorCron = "cron"
	// InitiatorEthLog for tasks in a job to use the Ethereum blockchain.
	InitiatorEthLog = "ethlog"
	// InitiatorRunAt for tasks in a job to be ran once.
	InitiatorRunAt = "runat"
	// InitiatorWeb for tasks in a job making a web request.
	InitiatorWeb = "web"
	// InitiatorServiceAgreementExecutionLog for tasks in a job to watch a
	// Solidity Coordinator contract and expect a payload from a log event.
	InitiatorServiceAgreementExecutionLog = "execagreement"
	// InitiatorExternal for tasks in a job to be trigger by an external party.
	InitiatorExternal = "external"
	// InitiatorFluxMonitor for tasks in a job to be run on price deviation
	// or request for a new round of prices.
	InitiatorFluxMonitor = "fluxmonitor"
	// InitiatorRandomnessLog for tasks from a VRF specific contract
	InitiatorRandomnessLog = "randomnesslog"
)

Types of Initiators (see Initiator struct just below.)

View Source
const (
	RequestLogTopicSignature = iota
	RequestLogTopicJobID
	RequestLogTopicRequester
	RequestLogTopicPayment
)

Descriptive indices of a RunLog's Topic array

View Source
const FunctionSelectorLength = 4

FunctionSelectorLength should always be a length of 4 as a byte.

View Source
const (
	MaxBcryptPasswordLength = 50
)

https://security.stackexchange.com/questions/39849/does-bcrypt-have-a-maximum-password-length

View Source
const (
	// SignatureLength is the length of the signature in bytes: v = 1, r = 32, s
	// = 32; v + r + s = 65
	SignatureLength = 65
)

Variables

View Source
var (
	// RunLogTopic20190207withoutIndexes was the new RunRequest filter topic as of 2019-01-28,
	// after renaming Solidity variables, moving data version, and removing the cast of requestId to uint256
	RunLogTopic20190207withoutIndexes = utils.MustHash("OracleRequest(bytes32,address,bytes32,uint256,address,bytes4,uint256,uint256,bytes)")
	// RandomnessRequestLogTopic is the signature for the event log
	// VRFCoordinator.RandomnessRequest.
	RandomnessRequestLogTopic = VRFRandomnessRequestLogTopic()
	// OracleFulfillmentFunctionID20190128withoutCast is the function selector for fulfilling Ethereum requests,
	// as updated on 2019-01-28, removing the cast to uint256 for the requestId.
	OracleFulfillmentFunctionID20190128withoutCast = utils.MustHash("fulfillOracleRequest(bytes32,uint256,address,bytes4,uint256,bytes32)").Hex()[:10]
	OracleFulfillmentFunctionID2020                = utils.MustHash("fulfillOracleRequest2(bytes32,uint256,address,bytes4,uint256,bytes)").Hex()[:10]
)
View Source
var ChainlinkFulfilledTopic = utils.MustHash("ChainlinkFulfilled(bytes32)")

ChainlinkFulfilledTopic is the signature for the event emitted after calling ChainlinkClient.validateChainlinkCallback(requestId). See ../../contracts/src/v0.6/ChainlinkClient.sol

View Source
var CronParser cron.Parser

CronParser is the global parser for crontabs. It accepts the standard 5 field cron syntax as well as an optional 6th field at the front to represent seconds.

View Source
var LogBasedChainlinkJobInitiators = []string{InitiatorRunLog, InitiatorEthLog, InitiatorRandomnessLog}

LogBasedChainlinkJobInitiators are initiators which kick off a user-specified chainlink job when an appropriate ethereum log is received. (InitiatorFluxMonitor kicks off work, but not a user-specified job.)

View Source
var NilJobID = JobID{}

NilJobID is special form of JobID that is specified to have all 128 bits set to zero.

View Source
var TopicsForInitiatorsWhichRequireJobSpecIDTopic = map[string][]common.Hash{
	InitiatorRunLog:        {RunLogTopic20190207withoutIndexes},
	InitiatorRandomnessLog: {RandomnessRequestLogTopic},
}

TopicsForInitiatorsWhichRequireJobSpecIDTopic are the log topics which kick off a user job with the given type of initiator. If chainlink has any jobs with these initiators, it subscribes on startup to logs which match both these topics and some representation of the job spec ID.

View Source
var WeiPerEth = new(big.Int).Exp(big.NewInt(10), big.NewInt(18), nil)

WeiPerEth is amount of Wei currency units in one Eth.

Functions

func AuthenticateBridgeType

func AuthenticateBridgeType(bt *BridgeType, token string) (bool, error)

AuthenticateBridgeType returns true if the passed token matches its IncomingToken, or returns false with an error.

func AuthenticateExternalInitiator

func AuthenticateExternalInitiator(eia *auth.Token, ea *ExternalInitiator) (bool, error)

AuthenticateExternalInitiator compares an auth against an initiator and returns true if the password hashes match

func AuthenticateUserByToken

func AuthenticateUserByToken(token *auth.Token, user *User) (bool, error)

AuthenticateUserByToken returns true on successful authentication of the user against the given Authentication Token.

func CoerceInterfaceMapToStringMap

func CoerceInterfaceMapToStringMap(in interface{}) (interface{}, error)

CoerceInterfaceMapToStringMap converts map[interface{}]interface{} (interface maps) to map[string]interface{} (string maps) and []interface{} with interface maps to string maps. Relevant when serializing between CBOR and JSON.

It also handles the CBOR 'bignum' type as documented here: https://tools.ietf.org/html/rfc7049#section-2.4.2

func FilterQueryFactory

func FilterQueryFactory(i Initiator, from *big.Int, addresses ...common.Address) (q ethereum.FilterQuery, err error)

FilterQueryFactory returns the ethereum FilterQuery for this initiator.

func IDToHexTopic

func IDToHexTopic(id JobID) common.Hash

IDToHexTopic encodes the string representation of the JobID

func IDToTopic

func IDToTopic(id JobID) common.Hash

IDToTopic encodes the bytes representation of the JobID padded to fit into a bytes32

func JobSpecIDTopics

func JobSpecIDTopics(jsID JobID) []common.Hash

JobSpecIDTopics lists the ways jsID could be represented as a log topic. This allows log subscriptions to respond to all possible representations.

func MarshalBridgeMetaData

func MarshalBridgeMetaData(latestAnswer *big.Int, updatedAt *big.Int) (map[string]interface{}, error)

func MarshalToMap

func MarshalToMap(input interface{}) (map[string]interface{}, error)

MarshalToMap converts a struct (typically) to a map[string] so it can be manipulated without repeatedly serializing/deserializing

func NewBridgeType

NewBridgeType returns a bridge bridge type authentication (with plaintext password) and a bridge type (with hashed password, for persisting)

func NewDatabaseAccessError

func NewDatabaseAccessError(msg string) error

NewDatabaseAccessError returns a database access error.

func NewValidationError

func NewValidationError(msg string, values ...interface{}) error

NewValidationError returns a validation error.

func ReceiptIndicatesRunLogFulfillment

func ReceiptIndicatesRunLogFulfillment(txr types.Receipt) bool

ReceiptIndicatesRunLogFulfillment returns true if this tx receipt is the result of a fulfilled run log.

func ReceiptIsUnconfirmed

func ReceiptIsUnconfirmed(txr *types.Receipt) bool

Unconfirmed returns true if the transaction is not confirmed.

func VRFCoordinatorABI

func VRFCoordinatorABI() abi.ABI

VRFCoordinatorABI returns the ABI for the VRFCoordinator contract

func VRFFulfillMethod

func VRFFulfillMethod() abi.Method

VRFFulfillMethod returns the golang abstraction of the fulfillRandomnessRequest method

func VRFFulfillSelector

func VRFFulfillSelector() string

VRFFulfillSelector returns the signature of the fulfillRandomnessRequest method on the VRFCoordinator contract

func VRFRandomnessRequestLogTopic

func VRFRandomnessRequestLogTopic() common.Hash

VRFRandomnessRequestLogTopic returns the signature of the RandomnessRequest log emitted by the VRFCoordinator contract

func ValidateBulkDeleteRunRequest

func ValidateBulkDeleteRunRequest(request *BulkDeleteRunRequest) error

ValidateBulkDeleteRunRequest returns a task from a request to make a task

Types

type AddressCollection

type AddressCollection []common.Address

AddressCollection is an array of common.Address serializable to and from a database.

func (*AddressCollection) Scan

func (r *AddressCollection) Scan(value interface{}) error

Scan parses the database value as a string.

func (AddressCollection) ToStrings

func (r AddressCollection) ToStrings() []string

ToStrings returns this address collection as an array of strings.

func (AddressCollection) Value

func (r AddressCollection) Value() (driver.Value, error)

Value returns the string value to be written to the database.

type AnyTime

type AnyTime struct {
	time.Time
	Valid bool
}

AnyTime holds a common field for time, and serializes it as a json number.

func NewAnyTime

func NewAnyTime(t time.Time) AnyTime

NewAnyTime creates a new Time.

func (AnyTime) MarshalJSON

func (t AnyTime) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler. It will encode null if this time is null.

func (AnyTime) MarshalText

func (t AnyTime) MarshalText() ([]byte, error)

MarshalText returns null if not set, or the time.

func (*AnyTime) Scan

func (t *AnyTime) Scan(value interface{}) error

Scan reads the database value and returns an instance.

func (*AnyTime) UnmarshalJSON

func (t *AnyTime) UnmarshalJSON(b []byte) error

UnmarshalJSON parses the raw time stored in JSON-encoded data and stores it to the Time field.

func (*AnyTime) UnmarshalText

func (t *AnyTime) UnmarshalText(text []byte) error

UnmarshalText parses null or a valid time.

func (AnyTime) Value

func (t AnyTime) Value() (driver.Value, error)

Value returns this instance serialized for database storage.

type BridgeMetaData

type BridgeMetaData struct {
	LatestAnswer *big.Int `json:"latestAnswer"`
	UpdatedAt    *big.Int `json:"updatedAt"` // A unix timestamp
}

NOTE: latestAnswer and updatedAt is the only metadata used. Currently market closer adapter and outlier detection depend latestAnswer. https://github.com/smartcontractkit/external-adapters-js/tree/f474bd2e2de13ebe5c9dc3df36ebb7018817005e/composite/market-closure https://github.com/smartcontractkit/external-adapters-js/tree/5abb8e5ec2024f724fd39122897baa63c3cd0167/composite/outlier-detection

type BridgeMetaDataJSON

type BridgeMetaDataJSON struct {
	Meta BridgeMetaData
}

type BridgeRunResult

type BridgeRunResult struct {
	Data            JSON        `json:"data"`
	Status          RunStatus   `json:"status"`
	ErrorMessage    null.String `json:"error"`
	ExternalPending bool        `json:"pending"`
	AccessToken     string      `json:"accessToken"`
}

BridgeRunResult handles the parsing of RunResults from external adapters.

func (BridgeRunResult) GetError

func (brr BridgeRunResult) GetError() error

GetError returns the error of a BridgeRunResult if it is present.

func (BridgeRunResult) HasError

func (brr BridgeRunResult) HasError() bool

HasError returns true if the status is errored or the error message is set

func (*BridgeRunResult) UnmarshalJSON

func (brr *BridgeRunResult) UnmarshalJSON(input []byte) error

UnmarshalJSON parses the given input and updates the BridgeRunResult in the external adapter format.

type BridgeType

type BridgeType struct {
	Name                   TaskType `gorm:"primary_key"`
	URL                    WebURL
	Confirmations          uint32
	IncomingTokenHash      string
	Salt                   string
	OutgoingToken          string
	MinimumContractPayment *assets.Link `gorm:"type:varchar(255)"`
	CreatedAt              time.Time
	UpdatedAt              time.Time
}

BridgeType is used for external adapters and has fields for the name of the adapter and its URL.

type BridgeTypeAuthentication

type BridgeTypeAuthentication struct {
	Name                   TaskType
	URL                    WebURL
	Confirmations          uint32
	IncomingToken          string
	OutgoingToken          string
	MinimumContractPayment *assets.Link
}

BridgeTypeAuthentication is the record returned in response to a request to create a BridgeType

type BridgeTypeRequest

type BridgeTypeRequest struct {
	Name                   TaskType     `json:"name"`
	URL                    WebURL       `json:"url"`
	Confirmations          uint32       `json:"confirmations"`
	MinimumContractPayment *assets.Link `json:"minimumContractPayment"`
}

BridgeTypeRequest is the incoming record used to create a BridgeType

func (BridgeTypeRequest) GetID

func (bt BridgeTypeRequest) GetID() string

GetID returns the ID of this structure for jsonapi serialization.

func (BridgeTypeRequest) GetName

func (bt BridgeTypeRequest) GetName() string

GetName returns the pluralized "type" of this structure for jsonapi serialization.

func (*BridgeTypeRequest) SetID

func (bt *BridgeTypeRequest) SetID(value string) error

SetID is used to set the ID of this structure when deserializing from jsonapi documents.

type BulkDeleteRunRequest

type BulkDeleteRunRequest struct {
	ID            uint                `gorm:"primary_key"`
	Status        RunStatusCollection `json:"status" gorm:"type:text"`
	UpdatedBefore time.Time           `json:"updatedBefore"`
}

BulkDeleteRunRequest describes the query for deletion of runs

type ChangeAuthTokenRequest

type ChangeAuthTokenRequest struct {
	Password string `json:"password"`
}

Changeauth.TokenRequest is sent when updating a User's authentication token.

type Configuration

type Configuration struct {
	ID        int64  `gorm:"primary_key"`
	Name      string `gorm:"not null;unique;index"`
	Value     string `gorm:"not null"`
	CreatedAt time.Time
	UpdatedAt time.Time
	DeletedAt *gorm.DeletedAt
}

Configuration stores key value pairs for overriding global configuration

type Cron

type Cron string

Cron holds the string that will represent the spec of the cron-job.

func (Cron) String

func (c Cron) String() string

String returns the current Cron spec string.

func (*Cron) UnmarshalJSON

func (c *Cron) UnmarshalJSON(b []byte) error

UnmarshalJSON parses the raw spec stored in JSON-encoded data and stores it to the Cron string.

type DatabaseAccessError

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

DatabaseAccessError is an error that occurs during database access.

func (*DatabaseAccessError) Error

func (e *DatabaseAccessError) Error() string

type Duration

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

Duration is a non-negative time duration.

func MakeDuration

func MakeDuration(d time.Duration) (Duration, error)

func MustMakeDuration

func MustMakeDuration(d time.Duration) Duration

func (Duration) Before

func (d Duration) Before(t time.Time) time.Time

Before returns the time d units before time t

func (Duration) Duration

func (d Duration) Duration() time.Duration

Duration returns the value as the standard time.Duration value.

func (Duration) IsInstant

func (d Duration) IsInstant() bool

IsInstant is true if and only if d is of duration 0

func (Duration) MarshalJSON

func (d Duration) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler interface.

func (*Duration) Scan

func (d *Duration) Scan(v interface{}) (err error)

func (Duration) Shorter

func (d Duration) Shorter(od Duration) bool

Shorter returns true if and only if d is shorter than od.

func (Duration) String

func (d Duration) String() string

String returns a string representing the duration in the form "72h3m0.5s". Leading zero units are omitted. As a special case, durations less than one second format use a smaller unit (milli-, micro-, or nanoseconds) to ensure that the leading digit is non-zero. The zero duration formats as 0s.

func (*Duration) UnmarshalJSON

func (d *Duration) UnmarshalJSON(input []byte) error

UnmarshalJSON implements the json.Unmarshaler interface.

func (Duration) Value

func (d Duration) Value() (driver.Value, error)

type Encumbrance

type Encumbrance struct {
	// Corresponds to requestDigest in solidity ServiceAgreement struct
	ID int64 `json:"-" gorm:"primary_key;auto_increment"`
	// Price to request a report based on this agreement
	Payment *assets.Link `json:"payment,omitempty"`
	// Expiration is the amount of time an oracle has to answer a request
	Expiration uint64 `json:"expiration"`
	// Agreement is valid until this time
	EndAt AnyTime `json:"endAt"`
	// Addresses of oracles committed to this agreement
	Oracles ethkey.EIP55AddressCollection `json:"oracles" gorm:"type:text"`
	// Address of aggregator contract
	Aggregator ethkey.EIP55Address `json:"aggregator" gorm:"not null"`
	// selector for initialization method on aggregator contract
	AggInitiateJobSelector FunctionSelector `json:"aggInitiateJobSelector" gorm:"not null"`
	// selector for fulfillment (oracle reporting) method on aggregator contract
	AggFulfillSelector FunctionSelector `json:"aggFulfillSelector" gorm:"not null"`
	CreatedAt          time.Time        `json:"-"`
	UpdatedAt          time.Time        `json:"-"`
}

Encumbrance connects job specifications with on-chain encumbrances.

func (Encumbrance) ABI

func (e Encumbrance) ABI(digest common.Hash) ([]byte, error)

ABI packs the encumberance as a byte array using the same rules as the abi.encodePacked in Coordinator#getId.

Used only for constructing a stable hash which will be signed by all oracles, so it does not have to be easily parsed or unambiguous (e.g., re-ordering Oracles will result in different output.) It just has to be an injective function.

type EthLogEvent

type EthLogEvent struct {
	InitiatorLogEvent
}

EthLogEvent provides functionality specific to a log event emitted for an eth log initiator.

type EthReceipt

type EthReceipt struct {
	ID               int64
	TxHash           common.Hash
	BlockHash        common.Hash
	BlockNumber      int64
	TransactionIndex uint
	Receipt          []byte
	CreatedAt        time.Time
}

type EthTaskRunTx

type EthTaskRunTx struct {
	TaskRunID uuid.UUID
	EthTxID   int64
	EthTx     EthTx
}

type EthTx

type EthTx struct {
	ID             int64
	Nonce          *int64
	FromAddress    common.Address
	ToAddress      common.Address
	EncodedPayload []byte
	Value          assets.Eth
	GasLimit       uint64
	Error          *string
	// BroadcastAt is updated every time an attempt for this eth_tx is re-sent
	// In almost all cases it will be within a second or so of the actual send time.
	BroadcastAt   *time.Time
	CreatedAt     time.Time
	State         EthTxState
	EthTxAttempts []EthTxAttempt `gorm:"->"`
	// Marshalled EthTxMeta
	// Used for additional context around transactions which you want to log
	// at send time.
	Meta postgres.Jsonb
}

func (EthTx) GetError

func (e EthTx) GetError() error

func (EthTx) GetID

func (e EthTx) GetID() string

GetID allows EthTx to be used as jsonapi.MarshalIdentifier

type EthTxAttempt

type EthTxAttempt struct {
	ID                      int64
	EthTxID                 int64
	EthTx                   EthTx `gorm:"foreignkey:EthTxID;->"`
	GasPrice                utils.Big
	SignedRawTx             []byte
	Hash                    common.Hash
	CreatedAt               time.Time
	BroadcastBeforeBlockNum *int64
	State                   EthTxAttemptState
	EthReceipts             []EthReceipt `gorm:"foreignKey:TxHash;references:Hash;association_foreignkey:Hash;->"`
}

func (EthTxAttempt) GetSignedTx

func (a EthTxAttempt) GetSignedTx() (*types.Transaction, error)

GetSignedTx decodes the SignedRawTx into a types.Transaction struct

type EthTxAttemptState

type EthTxAttemptState string

type EthTxMeta

type EthTxMeta struct {
	TaskRunID        uuid.UUID
	RunRequestID     *common.Hash
	RunRequestTxHash *common.Hash
}

type EthTxMetaV2

type EthTxMetaV2 struct {
	JobID         int32
	RequestID     common.Hash
	RequestTxHash common.Hash
}

type EthTxState

type EthTxState string

type ExternalInitiator

type ExternalInitiator struct {
	ID             int64   `gorm:"primary_key"`
	Name           string  `gorm:"not null;unique"`
	URL            *WebURL `gorm:"url,omitempty"`
	AccessKey      string  `gorm:"not null"`
	Salt           string  `gorm:"not null"`
	HashedSecret   string  `gorm:"not null"`
	OutgoingSecret string  `gorm:"not null"`
	OutgoingToken  string  `gorm:"not null"`

	CreatedAt time.Time
	UpdatedAt time.Time
}

ExternalInitiator represents a user that can initiate runs remotely

func NewExternalInitiator

func NewExternalInitiator(
	eia *auth.Token,
	eir *ExternalInitiatorRequest,
) (*ExternalInitiator, error)

NewExternalInitiator generates an ExternalInitiator from an auth.Token, hashing the password for storage

type ExternalInitiatorRequest

type ExternalInitiatorRequest struct {
	Name string  `json:"name"`
	URL  *WebURL `json:"url,omitempty"`
}

ExternalInitiatorRequest is the incoming record used to create an ExternalInitiator.

type Feeds

type Feeds = JSON

Feeds holds the json of the feeds parameter in the job spec. It is an array of URL strings and/or objects containing the names of bridges

type FluxMonitorRoundStats

type FluxMonitorRoundStats struct {
	ID              uint64         `gorm:"primary key;not null;auto_increment"`
	JobRunID        uuid.NullUUID  `gorm:"default:null;foreignkey:JobRunID"`
	Aggregator      common.Address `gorm:"not null"`
	RoundID         uint32         `gorm:"not null"`
	NumNewRoundLogs uint64         `gorm:"not null;default 0"`
	NumSubmissions  uint64         `gorm:"not null;default 0"`
}

type FunctionSelector

type FunctionSelector [FunctionSelectorLength]byte

FunctionSelector is the first four bytes of the call data for a function call and specifies the function to be called.

func BytesToFunctionSelector

func BytesToFunctionSelector(b []byte) FunctionSelector

BytesToFunctionSelector converts the given bytes to a FunctionSelector.

func HexToFunctionSelector

func HexToFunctionSelector(s string) FunctionSelector

HexToFunctionSelector converts the given string to a FunctionSelector.

func (FunctionSelector) Bytes

func (f FunctionSelector) Bytes() []byte

Bytes returns the FunctionSelector as a byte slice

func (FunctionSelector) MarshalJSON

func (f FunctionSelector) MarshalJSON() ([]byte, error)

MarshalJSON returns the JSON encoding of f

func (*FunctionSelector) Scan

func (f *FunctionSelector) Scan(value interface{}) error

Scan returns the selector from its serialization in the database

func (*FunctionSelector) SetBytes

func (f *FunctionSelector) SetBytes(b []byte)

SetBytes sets the FunctionSelector to that of the given bytes (will trim).

func (FunctionSelector) String

func (f FunctionSelector) String() string

String returns the FunctionSelector as a string type.

func (*FunctionSelector) UnmarshalJSON

func (f *FunctionSelector) UnmarshalJSON(input []byte) error

UnmarshalJSON parses the raw FunctionSelector and sets the FunctionSelector type to the given input.

func (FunctionSelector) Value

func (f FunctionSelector) Value() (driver.Value, error)

Value returns this instance serialized for database storage

type Head struct {
	ID            uint64
	Hash          common.Hash
	Number        int64
	L1BlockNumber null.Int64
	ParentHash    common.Hash
	Parent        *Head `gorm:"-"`
	Timestamp     time.Time
	CreatedAt     time.Time
}

Head represents a BlockNumber, BlockHash.

func NewHead

func NewHead(number *big.Int, blockHash common.Hash, parentHash common.Hash, timestamp uint64) Head

NewHead returns a Head instance.

func (Head) ChainHashes

func (h Head) ChainHashes() []common.Hash

ChainHashes returns an array of block hashes by recursively looking up parents

func (Head) ChainLength

func (h Head) ChainLength() uint32

ChainLength returns the length of the chain followed by recursively looking up parents

func (Head) EarliestInChain

func (h Head) EarliestInChain() Head

EarliestInChain recurses through parents until it finds the earliest one

func (*Head) GreaterThan

func (h *Head) GreaterThan(r *Head) bool

GreaterThan compares BlockNumbers and returns true if the receiver BlockNumber is greater than the supplied BlockNumber

func (Head) HashAtHeight

func (h Head) HashAtHeight(blockNum int64) common.Hash

HashAtHeight returns the hash of the block at the given heigh, if it is in the chain. If not in chain, returns the zero hash

func (Head) IsInChain

func (h Head) IsInChain(blockHash common.Hash) bool

IsInChain returns true if the given hash matches the hash of a head in the chain

func (*Head) MarshalJSON

func (h *Head) MarshalJSON() ([]byte, error)

func (*Head) NextInt

func (h *Head) NextInt() *big.Int

NextInt returns the next BlockNumber as big.int, or nil if nil to represent latest.

func (*Head) String

func (h *Head) String() string

String returns a string representation of this number.

func (*Head) ToInt

func (h *Head) ToInt() *big.Int

ToInt return the height as a *big.Int. Also handles nil by returning nil.

func (*Head) UnmarshalJSON

func (h *Head) UnmarshalJSON(bs []byte) error

type IdleTimerConfig

type IdleTimerConfig struct {
	Disabled bool     `json:"disabled,omitempty"`
	Duration Duration `json:"duration,omitempty"`
}

func (*IdleTimerConfig) Scan

func (itc *IdleTimerConfig) Scan(value interface{}) error

Scan is defined so that we can read IdleTimerConfig as JSONB, because of an error with GORM where it has trouble with nested structs as JSONB. See https://github.com/jinzhu/gorm/issues/2704

func (IdleTimerConfig) Value

func (itc IdleTimerConfig) Value() (driver.Value, error)

Value is defined so that we can store IdleTimerConfig as JSONB, because of an error with GORM where it has trouble with nested structs as JSONB. See https://github.com/jinzhu/gorm/issues/2704

type Initiator

type Initiator struct {
	ID        int64 `json:"id" gorm:"primary_key;auto_increment"`
	JobSpecID JobID `json:"jobSpecId"`

	// Type is one of the Initiator* string constants defined just above.
	Type            string    `json:"type" gorm:"index;not null"`
	CreatedAt       time.Time `json:"createdAt" gorm:"index"`
	InitiatorParams `json:"params,omitempty"`
	DeletedAt       gorm.DeletedAt `json:"-" gorm:"index"`
	UpdatedAt       time.Time      `json:"-"`
}

Initiator could be thought of as a trigger, defines how a Job can be started, or rather, how a JobRun can be created from a Job. Initiators will have their own unique ID, but will be associated to a parent JobID.

func NewInitiatorFromRequest

func NewInitiatorFromRequest(
	initr InitiatorRequest,
	jobSpec JobSpec,
) Initiator

NewInitiatorFromRequest creates an Initiator from the corresponding parameters in a InitiatorRequest

func (Initiator) IsLogInitiated

func (i Initiator) IsLogInitiated() bool

IsLogInitiated Returns true if triggered by event logs.

type InitiatorLogEvent

type InitiatorLogEvent struct {
	Log       types.Log
	Initiator Initiator
}

InitiatorLogEvent encapsulates all information as a result of a received log from an InitiatorSubscription, and acts as a base struct for other log-initiated events

func (InitiatorLogEvent) BlockNumber

func (le InitiatorLogEvent) BlockNumber() *big.Int

BlockNumber returns the block number for the given InitiatorSubscriptionLogEvent.

func (InitiatorLogEvent) ForLogger

func (le InitiatorLogEvent) ForLogger(kvs ...interface{}) []interface{}

ForLogger formats the InitiatorSubscriptionLogEvent for easy common formatting in logs (trace statements, not ethereum events).

func (InitiatorLogEvent) GetInitiator

func (le InitiatorLogEvent) GetInitiator() Initiator

GetInitiator returns the initiator.

func (InitiatorLogEvent) GetJobSpecID

func (le InitiatorLogEvent) GetJobSpecID() JobID

GetJobSpecID returns the associated JobSpecID

func (InitiatorLogEvent) GetLog

func (le InitiatorLogEvent) GetLog() types.Log

GetLog returns the log.

func (InitiatorLogEvent) JSON

func (le InitiatorLogEvent) JSON() (JSON, error)

JSON returns the eth log as JSON.

func (InitiatorLogEvent) LogRequest

func (le InitiatorLogEvent) LogRequest() LogRequest

LogRequest is a factory method that coerces this log event to the correct type based on Initiator.Type, exposed by the LogRequest interface.

func (InitiatorLogEvent) RunRequest

func (le InitiatorLogEvent) RunRequest() (RunRequest, error)

RunRequest returns a run request instance with the transaction hash, present on all log initiated runs.

func (InitiatorLogEvent) ToDebug

func (le InitiatorLogEvent) ToDebug()

ToDebug prints this event via logger.Debug.

func (InitiatorLogEvent) Validate

func (le InitiatorLogEvent) Validate() bool

Validate returns true, no validation on this log event type.

func (InitiatorLogEvent) ValidateRequester

func (le InitiatorLogEvent) ValidateRequester() error

ValidateRequester returns true since all requests are valid for base initiator log events.

type InitiatorParams

type InitiatorParams struct {
	// Common parameters
	Address common.Address `json:"address,omitempty" gorm:"index"`
	Name    string         `json:"name,omitempty"`

	// Cron parameters
	Schedule Cron `json:"schedule,omitempty"`

	// RunAt parameters.
	Time AnyTime `json:"time,omitempty"`
	Ran  bool    `json:"ran,omitempty"`

	// External initiator job parameters.
	Body *JSON `json:"body,omitempty" gorm:"column:params"`

	// Log specific job parameters.
	Requesters AddressCollection `json:"requesters,omitempty" gorm:"type:text"`
	FromBlock  *utils.Big        `json:"fromBlock,omitempty" gorm:"type:varchar(255)"`
	ToBlock    *utils.Big        `json:"toBlock,omitempty" gorm:"type:varchar(255)"`
	Topics     Topics            `json:"topics,omitempty"`
	// JobIDTopicFilter, if present, is used in addition to the job's actual ID when filtering
	// initiator logs
	JobIDTopicFilter JobID `json:"jobIDTopicFilter,omitempty"`

	// Flux monitior specific parameters.
	RequestData JSON    `json:"requestData,omitempty" gorm:"type:text"`
	Feeds       Feeds   `json:"feeds,omitempty" gorm:"type:text"`
	Precision   int32   `json:"precision,omitempty" gorm:"type:smallint"`
	Threshold   float32 `json:"threshold,omitempty"`
	// AbsoluteThreshold is the maximum absolute change allowed in a fluxmonitored
	// value before a new round should be kicked off, so that the current value
	// can be reported on-chain.
	AbsoluteThreshold float32         `json:"absoluteThreshold" gorm:"type:float;not null"`
	PollTimer         PollTimerConfig `json:"pollTimer,omitempty" gorm:"type:jsonb"`
	IdleTimer         IdleTimerConfig `json:"idleTimer,omitempty" gorm:"type:jsonb"`
}

InitiatorParams is a collection of the possible parameters that different Initiators may require.

type InitiatorRequest

type InitiatorRequest struct {
	Type            string `json:"type"`
	InitiatorParams `json:"params,omitempty"`
}

InitiatorRequest represents a schema for incoming initiator requests as used by the API.

type Interval

type Interval time.Duration

Interval represents a time.Duration stored as a Postgres interval type

func (Interval) IsZero

func (i Interval) IsZero() bool

func (Interval) MarshalText

func (i Interval) MarshalText() ([]byte, error)

MarshalText implements the text.Marshaler interface.

func (*Interval) Scan

func (i *Interval) Scan(v interface{}) error

func (*Interval) UnmarshalText

func (i *Interval) UnmarshalText(input []byte) error

UnmarshalText implements the text.Unmarshaler interface.

func (Interval) Value

func (i Interval) Value() (driver.Value, error)

type JSON

type JSON struct {
	gjson.Result
}

JSON stores the json types string, number, bool, and null. Arrays and Objects are returned as their raw json types.

func Merge

func Merge(inputs ...JSON) (JSON, error)

Merge returns a new map with all keys merged from left to right On conflicting keys, rightmost inputs will clobber leftmost inputs

func MergeExceptResult

func MergeExceptResult(inputs ...JSON) (JSON, error)

MergeExceptResult does a merge, but will never clobber the field called "result" On conflicting keys, rightmost inputs will clobber leftmost inputs EXCEPT if the field is named "result", in which case the leftmost result wins This is needed to work around idiosyncrasies in the V1 job pipeline where "result" has special meaning

func MustParseJSON

func MustParseJSON(b []byte) JSON

func ParseCBOR

func ParseCBOR(b []byte) (JSON, error)

ParseCBOR attempts to coerce the input byte array into valid CBOR and then coerces it into a JSON object.

func ParseJSON

func ParseJSON(b []byte) (JSON, error)

ParseJSON attempts to coerce the input byte array into valid JSON and parse it into a JSON object.

func ParseRunLog

func ParseRunLog(log types.Log) (JSON, error)

ParseRunLog decodes the CBOR in the ABI of the log event.

func (JSON) Add

func (j JSON) Add(insertKey string, insertValue interface{}) (JSON, error)

Add returns a new instance of JSON with the new value added.

func (JSON) AsMap

func (j JSON) AsMap() (map[string]interface{}, error)

AsMap returns j as a map

func (JSON) Bytes

func (j JSON) Bytes() []byte

Bytes returns the raw JSON.

func (JSON) CBOR

func (j JSON) CBOR() ([]byte, error)

CBOR returns a bytes array of the JSON map or array encoded to CBOR.

func (JSON) Delete

func (j JSON) Delete(key string) (JSON, error)

Delete returns a new instance of JSON with the specified key removed.

func (JSON) GormDBDataType

func (JSON) GormDBDataType(db *gorm.DB, field *schema.Field) string

GormDBDataType gorm db data type

func (JSON) GormDataType

func (JSON) GormDataType() string

func (JSON) MarshalJSON

func (j JSON) MarshalJSON() ([]byte, error)

MarshalJSON returns the JSON data if it already exists, returns an empty JSON object as bytes if not.

func (JSON) MultiAdd

func (j JSON) MultiAdd(keyValues KV) (JSON, error)

MultiAdd returns a new instance of j with the new values added.

func (JSON) PrependAtArrayKey

func (j JSON) PrependAtArrayKey(insertKey string, insertValue interface{}) (JSON, error)

func (*JSON) Scan

func (j *JSON) Scan(value interface{}) error

Scan reads the database value and returns an instance.

func (*JSON) UnmarshalJSON

func (j *JSON) UnmarshalJSON(b []byte) error

UnmarshalJSON parses the JSON bytes and stores in the *JSON pointer.

func (*JSON) UnmarshalTOML

func (j *JSON) UnmarshalTOML(val interface{}) error

func (JSON) Value

func (j JSON) Value() (driver.Value, error)

Value returns this instance serialized for database storage.

type JSONAPIError

type JSONAPIError struct {
	Detail string `json:"detail"`
}

JSONAPIError is an individual JSONAPI Error.

type JSONAPIErrors

type JSONAPIErrors struct {
	Errors []JSONAPIError `json:"errors"`
}

JSONAPIErrors holds errors conforming to the JSONAPI spec.

func NewJSONAPIErrors

func NewJSONAPIErrors() *JSONAPIErrors

NewJSONAPIErrors creates an instance of JSONAPIErrors, with the intention of managing a collection of them.

func NewJSONAPIErrorsWith

func NewJSONAPIErrorsWith(detail string) *JSONAPIErrors

NewJSONAPIErrorsWith creates an instance of JSONAPIErrors populated with this single detail.

func (*JSONAPIErrors) Add

func (jae *JSONAPIErrors) Add(detail string)

Add adds a new error to JSONAPIErrors with the passed detail.

func (*JSONAPIErrors) CoerceEmptyToNil

func (jae *JSONAPIErrors) CoerceEmptyToNil() error

CoerceEmptyToNil will return nil if JSONAPIErrors has no errors.

func (*JSONAPIErrors) Error

func (jae *JSONAPIErrors) Error() string

Error collapses the collection of errors into a collection of comma separated strings.

func (*JSONAPIErrors) Merge

func (jae *JSONAPIErrors) Merge(e error)

Merge combines the arrays of the passed error if it is of type JSONAPIErrors, otherwise simply adds a single error with the error string as detail.

type JobID

type JobID uuid.UUID

ONLY USE FOR JPV1 JOBS JobID is a UUID that has a custom display format

func NewJobID

func NewJobID() JobID

NewJobID returns a new JobID

func NewJobIDFromString

func NewJobIDFromString(input string) (JobID, error)

NewJobIDFromString is a convenience function to return an id from an input string

func (JobID) Hash

func (id JobID) Hash() common.Hash

Hash converts it to a common.Hash

func (JobID) IsZero

func (id JobID) IsZero() bool

IsZero returns true if the JobID is the zero ID

func (JobID) MarshalText

func (id JobID) MarshalText() ([]byte, error)

MarshalText implements encoding.TextMarshaler, using String()

func (*JobID) Scan

func (id *JobID) Scan(src interface{}) error

Scan hands off to the uuid lib

func (JobID) String

func (id JobID) String() string

String satisfies the Stringer interface and removes all '-'s from the string representation of the uuid

func (JobID) UUID

func (id JobID) UUID() uuid.UUID

UUID converts it back into a uuid.UUID

func (*JobID) UnmarshalString

func (id *JobID) UnmarshalString(input string) error

UnmarshalString is a wrapper for UnmarshalText which takes a string

func (*JobID) UnmarshalText

func (id *JobID) UnmarshalText(input []byte) error

UnmarshalText implements encoding.TextUnmarshaler.

func (JobID) Value

func (id JobID) Value() (driver.Value, error)

Value hands off to the uuid lib

type JobRun

type JobRun struct {
	ID             uuid.UUID      `json:"id" gorm:"type:uuid;primary_key;not null"`
	JobSpecID      JobID          `json:"jobId" gorm:"type:uuid"`
	Result         RunResult      `json:"result" gorm:"foreignkey:ResultID"`
	ResultID       clnull.Int64   `json:"-"`
	RunRequest     RunRequest     `json:"-" gorm:"foreignkey:RunRequestID"`
	RunRequestID   clnull.Int64   `json:"-"`
	Status         RunStatus      `json:"status" gorm:"default:'unstarted'"`
	TaskRuns       []TaskRun      `json:"taskRuns" gorm:"foreignKey:JobRunID"`
	CreatedAt      time.Time      `json:"createdAt"`
	FinishedAt     null.Time      `json:"finishedAt"`
	UpdatedAt      time.Time      `json:"updatedAt"`
	Initiator      Initiator      `json:"initiator" gorm:"foreignkey:InitiatorID;->"`
	InitiatorID    int64          `json:"-"`
	CreationHeight *utils.Big     `json:"creationHeight"`
	ObservedHeight *utils.Big     `json:"observedHeight"`
	DeletedAt      gorm.DeletedAt `json:"-"`
	Payment        *assets.Link   `json:"payment,omitempty"`
}

JobRun tracks the status of a job by holding its TaskRuns and the Result of each Run.

func MakeJobRun

func MakeJobRun(job *JobSpec, now time.Time, initiator *Initiator, currentHeight *big.Int, runRequest *RunRequest) JobRun

MakeJobRun returns a new JobRun copy

func (*JobRun) ApplyBridgeRunResult

func (jr *JobRun) ApplyBridgeRunResult(result BridgeRunResult)

ApplyBridgeRunResult saves the input from a BridgeAdapter

func (*JobRun) ApplyOutput

func (jr *JobRun) ApplyOutput(result RunOutput)

ApplyOutput updates the JobRun's Result and Status

func (*JobRun) Cancel

func (jr *JobRun) Cancel()

Cancel sets this run as cancelled, it should no longer be processed.

func (*JobRun) ErrorString

func (jr *JobRun) ErrorString() string

ErrorString returns the error as a string if present, otherwise "".

func (JobRun) ForLogger

func (jr JobRun) ForLogger(kvs ...interface{}) []interface{}

ForLogger formats the JobRun for a common formatting in the log.

func (JobRun) GetID

func (jr JobRun) GetID() string

GetID returns the ID of this structure for jsonapi serialization.

func (JobRun) GetName

func (jr JobRun) GetName() string

GetName returns the pluralized "type" of this structure for jsonapi serialization.

func (*JobRun) GetStatus

func (jr *JobRun) GetStatus() RunStatus

GetStatus returns the JobRun's RunStatus

func (JobRun) HasError

func (jr JobRun) HasError() bool

HasError returns true if this JobRun has errored

func (*JobRun) NextTaskRun

func (jr *JobRun) NextTaskRun() *TaskRun

NextTaskRun returns the next immediate TaskRun in the list of unfinished TaskRuns.

func (*JobRun) NextTaskRunIndex

func (jr *JobRun) NextTaskRunIndex() (int, bool)

NextTaskRunIndex returns the position of the next unfinished task

func (*JobRun) PreviousTaskRun

func (jr *JobRun) PreviousTaskRun() *TaskRun

PreviousTaskRun returns the last task to be processed, if it exists

func (*JobRun) SetError

func (jr *JobRun) SetError(err error)

SetError sets this job run to failed and saves the error message

func (*JobRun) SetID

func (jr *JobRun) SetID(value string) error

SetID is used to set the ID of this structure when deserializing from jsonapi documents.

func (*JobRun) SetStatus

func (jr *JobRun) SetStatus(status RunStatus)

SetStatus updates run status.

func (*JobRun) TasksRemain

func (jr *JobRun) TasksRemain() bool

TasksRemain returns true if there are unfinished tasks left for this job run

type JobSpec

type JobSpec struct {
	ID         JobID          `json:"id,omitempty" gorm:"primary_key;not null"`
	Name       string         `json:"name"`
	CreatedAt  time.Time      `json:"createdAt" gorm:"index"`
	Initiators []Initiator    `json:"initiators"`
	MinPayment *assets.Link   `json:"minPayment,omitempty"`
	Tasks      []TaskSpec     `json:"tasks"`
	StartAt    null.Time      `json:"startAt" gorm:"index"`
	EndAt      null.Time      `json:"endAt" gorm:"index"`
	DeletedAt  gorm.DeletedAt `json:"-" gorm:"index"`
	UpdatedAt  time.Time      `json:"-"`
	Errors     []JobSpecError `json:"-" gorm:"foreignkey:JobSpecID;->"`
}

JobSpec is the definition for all the work to be carried out by the node for a given contract. It contains the Initiators, Tasks (which are the individual steps to be carried out), StartAt, EndAt, and CreatedAt fields.

func NewJob

func NewJob() JobSpec

NewJob initializes a new job by generating a unique ID and setting the CreatedAt field to the time of invokation.

func NewJobFromRequest

func NewJobFromRequest(jsr JobSpecRequest) JobSpec

NewJobFromRequest creates a JobSpec from the corresponding parameters in a JobSpecRequest

func (JobSpec) Archived

func (j JobSpec) Archived() bool

Archived returns true if the job spec has been soft deleted

func (JobSpec) Ended

func (j JobSpec) Ended(t time.Time) bool

Ended returns true if the job has ended.

func (JobSpec) GetID

func (j JobSpec) GetID() string

GetID returns the ID of this structure for jsonapi serialization.

func (JobSpec) GetName

func (j JobSpec) GetName() string

GetName returns the pluralized "type" of this structure for jsonapi serialization.

func (JobSpec) InitiatorExternal

func (j JobSpec) InitiatorExternal(name string) *Initiator

InitiatorExternal finds the Job Spec's Initiator field associated with the External Initiator's name using a case insensitive search.

Returns nil if not found.

func (JobSpec) InitiatorsFor

func (j JobSpec) InitiatorsFor(types ...string) []Initiator

InitiatorsFor returns an array of Initiators for the given list of Initiator types.

func (JobSpec) IsLogInitiated

func (j JobSpec) IsLogInitiated() bool

IsLogInitiated Returns true if any of the job's initiators are triggered by event logs.

func (*JobSpec) SetID

func (j *JobSpec) SetID(value string) error

SetID is used to set the ID of this structure when deserializing from jsonapi documents.

func (JobSpec) Started

func (j JobSpec) Started(t time.Time) bool

Started returns true if the job has started.

type JobSpecError

type JobSpecError struct {
	ID          int64     `json:"id"`
	JobSpecID   JobID     `json:"-"`
	Description string    `json:"description"`
	Occurrences uint      `json:"occurrences"`
	CreatedAt   time.Time `json:"createdAt"`
	UpdatedAt   time.Time `json:"updatedAt"`
}

JobSpecError represents an asynchronous error caused by a JobSpec

func NewJobSpecError

func NewJobSpecError(jobSpecID JobID, description string) JobSpecError

NewJobSpecError creates a new JobSpecError struct

type JobSpecRequest

type JobSpecRequest struct {
	Name       string             `json:"name"`
	Initiators []InitiatorRequest `json:"initiators"`
	Tasks      []TaskSpecRequest  `json:"tasks"`
	StartAt    null.Time          `json:"startAt"`
	EndAt      null.Time          `json:"endAt"`
	MinPayment *assets.Link       `json:"minPayment,omitempty"`
}

JobSpecRequest represents a schema for the incoming job spec request as used by the API.

type KV

type KV map[string]interface{}

KV represents a key/value pair to be added to a JSON object

type LogCursor

type LogCursor struct {
	Name        string `gorm:"primary_key"`
	Initialized bool   `gorm:"not null;default true"`
	BlockIndex  int64  `gorm:"not null;default 0"`
	LogIndex    int64  `gorm:"not null;default 0"`
}

type LogRequest

type LogRequest interface {
	GetLog() types.Log
	GetJobSpecID() JobID
	GetInitiator() Initiator

	Validate() bool
	JSON() (JSON, error)
	ToDebug()
	ForLogger(kvs ...interface{}) []interface{}
	ValidateRequester() error
	BlockNumber() *big.Int
	RunRequest() (RunRequest, error)
}

LogRequest is the interface to allow polymorphic functionality of different types of LogEvents. i.e. EthLogEvent, RunLogEvent, OracleLogEvent

type NodeVersion

type NodeVersion struct {
	Version   string    `gorm:"primary_key"`
	CreatedAt time.Time `gorm:"index"`
}

func NewNodeVersion

func NewNodeVersion(version string) NodeVersion

type NullSigner

type NullSigner struct{}

func (NullSigner) SignHash

func (NullSigner) SignHash(common.Hash) (Signature, error)

type PollTimerConfig

type PollTimerConfig struct {
	Disabled bool     `json:"disabled,omitempty"`
	Period   Duration `json:"period,omitempty"`
}

func (*PollTimerConfig) Scan

func (ptc *PollTimerConfig) Scan(value interface{}) error

Scan is defined so that we can read PollTimerConfig as JSONB, because of an error with GORM where it has trouble with nested structs as JSONB. See https://github.com/jinzhu/gorm/issues/2704

func (PollTimerConfig) Value

func (ptc PollTimerConfig) Value() (driver.Value, error)

Value is defined so that we can store PollTimerConfig as JSONB, because of an error with GORM where it has trouble with nested structs as JSONB. See https://github.com/jinzhu/gorm/issues/2704

type RandomnessLogEvent

type RandomnessLogEvent struct{ InitiatorLogEvent }

RandomnessLogEvent provides functionality specific to a log event emitted for a run log initiator.

func (RandomnessLogEvent) JSON

func (le RandomnessLogEvent) JSON() (js JSON, err error)

JSON returns the JSON from this RandomnessRequest log, as it will be passed to the Randomn adapter

func (RandomnessLogEvent) Requester

func (le RandomnessLogEvent) Requester() common.Address

Requester pulls the requesting address out of the LogEvent's topics.

func (RandomnessLogEvent) RunRequest

func (le RandomnessLogEvent) RunRequest() (RunRequest, error)

RunRequest returns a RunRequest instance with all parameters from a run log topic, like RequestID.

func (RandomnessLogEvent) Validate

func (le RandomnessLogEvent) Validate() bool

Validate() is true if the contained log is parseable as a RandomnessRequest, and it's from the address specified by the job's initiator. The log filter and the go-ethereum parser should prevent any invalid logs from reacching this point, so Validate emits an error log on failure.

func (RandomnessLogEvent) ValidateRequester

func (le RandomnessLogEvent) ValidateRequester() error

ValidateRequester never errors, because the requester is not important to the node's functionality. A requesting contract cannot request the VRF output on behalf of another contract, because the initial input seed is hashed with the requesting contract's address (plus a nonce) to get the actual VRF input.

type RandomnessRequestLog

type RandomnessRequestLog struct {
	KeyHash   common.Hash
	Seed      *big.Int // uint256
	JobID     common.Hash
	Sender    common.Address
	Fee       *assets.Link // uint256
	RequestID common.Hash
	Raw       RawRandomnessRequestLog
}

RandomnessRequestLog contains the data for a RandomnessRequest log, represented as compatible golang types.

func ParseRandomnessRequestLog

func ParseRandomnessRequestLog(log types.Log) (*RandomnessRequestLog, error)

ParseRandomnessRequestLog returns the RandomnessRequestLog corresponding to the raw logData

func RawRandomnessRequestLogToRandomnessRequestLog

func RawRandomnessRequestLogToRandomnessRequestLog(
	l *RawRandomnessRequestLog) *RandomnessRequestLog

func (*RandomnessRequestLog) ComputedRequestID

func (l *RandomnessRequestLog) ComputedRequestID() common.Hash

func (*RandomnessRequestLog) Equal

Equal(ol) is true iff l is the same log as ol, and both represent valid RandomnessRequest logs.

func (*RandomnessRequestLog) RawData

func (l *RandomnessRequestLog) RawData() ([]byte, error)

RawData returns the raw bytes corresponding to l in a solidity log

This serialization does not include the JobID, because that's an indexed field.

type RawRandomnessRequestLog

RawRandomnessRequestLog is used to parse a RandomnessRequest log into types go-ethereum knows about.

type RunInput

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

RunInput represents the input for performing a Task

func NewRunInput

func NewRunInput(jobRun JobRun, taskRunID uuid.UUID, data JSON, status RunStatus) *RunInput

NewRunInput creates a new RunInput with arbitrary data

func NewRunInputWithResult

func NewRunInputWithResult(jobRun JobRun, taskRunID uuid.UUID, value interface{}, status RunStatus) *RunInput

NewRunInputWithResult creates a new RunInput with a value in the "result" field

func (RunInput) CloneWithData

func (ri RunInput) CloneWithData(data JSON) RunInput

func (RunInput) Data

func (ri RunInput) Data() JSON

Data returns the RunInput's data

func (RunInput) JobRun

func (ri RunInput) JobRun() JobRun

func (RunInput) JobRunID

func (ri RunInput) JobRunID() uuid.UUID

JobRunID returns this RunInput's JobRunID

func (RunInput) Result

func (ri RunInput) Result() gjson.Result

Result returns the result as a gjson object

func (RunInput) ResultCollection

func (ri RunInput) ResultCollection() gjson.Result

func (RunInput) ResultString

func (ri RunInput) ResultString() (string, error)

ResultString returns the string result of the Data JSON field.

func (RunInput) Status

func (ri RunInput) Status() RunStatus

Status returns the RunInput's status

func (RunInput) TaskRunID

func (ri RunInput) TaskRunID() uuid.UUID

TaskRunID returns this RunInput's TaskRunID

type RunLogEvent

type RunLogEvent struct {
	InitiatorLogEvent
}

RunLogEvent provides functionality specific to a log event emitted for a run log initiator.

func (RunLogEvent) JSON

func (le RunLogEvent) JSON() (JSON, error)

JSON decodes the RunLogEvent's data converts it to a JSON object.

func (RunLogEvent) Requester

func (le RunLogEvent) Requester() (common.Address, error)

Requester pulls the requesting address out of the LogEvent's topics.

func (RunLogEvent) RunRequest

func (le RunLogEvent) RunRequest() (RunRequest, error)

RunRequest returns an RunRequest instance with all parameters from a run log topic, like RequestID.

func (RunLogEvent) Validate

func (le RunLogEvent) Validate() bool

Validate returns whether or not the contained log has a properly encoded job id.

func (RunLogEvent) ValidateRequester

func (le RunLogEvent) ValidateRequester() error

ValidateRequester returns true if the requester matches the one associated with the initiator.

type RunOutput

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

RunOutput represents the result of performing a Task

func NewRunOutputComplete

func NewRunOutputComplete(data JSON) RunOutput

NewRunOutputComplete returns a new RunOutput that is complete and contains raw data

func NewRunOutputCompleteWithResult

func NewRunOutputCompleteWithResult(resultVal interface{}, resultCollection gjson.Result) RunOutput

NewRunOutputCompleteWithResult returns a new RunOutput that is complete and contains a result and preserves the resultCollection.

func NewRunOutputError

func NewRunOutputError(err error) RunOutput

NewRunOutputError returns a new RunOutput with an error

func NewRunOutputInProgress

func NewRunOutputInProgress(data JSON) RunOutput

NewRunOutputInProgress returns a new RunOutput that indicates the task is still in progress

func NewRunOutputPendingBridge

func NewRunOutputPendingBridge() RunOutput

NewRunOutputPendingBridge returns a new RunOutput that indicates the task is still in progress

func NewRunOutputPendingConnection

func NewRunOutputPendingConnection() RunOutput

NewRunOutputPendingConnection returns a new RunOutput that indicates the task got disconnected

func NewRunOutputPendingConnectionWithData

func NewRunOutputPendingConnectionWithData(data JSON) RunOutput

NewRunOutputPendingConnectionWithData returns a new RunOutput that indicates the task got disconnected but also has some data that needs to be fed in on next invocation

func NewRunOutputPendingOutgoingConfirmationsWithData

func NewRunOutputPendingOutgoingConfirmationsWithData(data JSON) RunOutput

NewRunOutputPendingOutgoingConfirmationsWithData returns a new RunOutput that indicates the task is pending outgoing confirmations but also has some data that needs to be fed in on next invocation

func (RunOutput) Data

func (ro RunOutput) Data() JSON

Data returns the data held by this RunOutput

func (RunOutput) Error

func (ro RunOutput) Error() error

Error returns error for this RunOutput

func (RunOutput) Get

func (ro RunOutput) Get(path string) gjson.Result

Get searches for and returns the JSON at the given path.

func (RunOutput) HasError

func (ro RunOutput) HasError() bool

HasError returns true if the status is errored or the error message is set

func (RunOutput) Result

func (ro RunOutput) Result() gjson.Result

Result returns the result as a gjson object

func (RunOutput) ResultCollection

func (ro RunOutput) ResultCollection() gjson.Result

func (RunOutput) Status

func (ro RunOutput) Status() RunStatus

Status returns the status returned from a task

type RunRequest

type RunRequest struct {
	ID            int64 `gorm:"primary_key"`
	RequestID     *common.Hash
	TxHash        *common.Hash
	BlockHash     *common.Hash
	Requester     *common.Address
	CreatedAt     time.Time
	Payment       *assets.Link
	RequestParams JSON `gorm:"type:jsonb;default:'{}'"`
}

RunRequest stores the fields used to initiate the parent job run.

func NewRunRequest

func NewRunRequest(requestParams JSON) *RunRequest

NewRunRequest returns a new RunRequest instance.

type RunResult

type RunResult struct {
	ID           int64       `json:"-" gorm:"primary_key;auto_increment"`
	Data         JSON        `json:"data"`
	ErrorMessage null.String `json:"error"`
	CreatedAt    time.Time   `json:"-"`
	UpdatedAt    time.Time   `json:"-"`
}

RunResult keeps track of the outcome of a TaskRun or JobRun. It stores the Data and ErrorMessage.

type RunStatus

type RunStatus string

RunStatus is a string that represents the run status

func (RunStatus) Cancelled

func (s RunStatus) Cancelled() bool

Cancelled returns true if the status is RunStatusCancelled.

func (RunStatus) Completed

func (s RunStatus) Completed() bool

Completed returns true if the status is RunStatusCompleted.

func (RunStatus) Errored

func (s RunStatus) Errored() bool

Errored returns true if the status is RunStatusErrored.

func (RunStatus) Finished

func (s RunStatus) Finished() bool

Finished returns true if the status is final and can't be changed.

func (RunStatus) Pending

func (s RunStatus) Pending() bool

Pending returns true if the status is pending external or confirmations.

func (RunStatus) PendingBridge

func (s RunStatus) PendingBridge() bool

PendingBridge returns true if the status is pending_bridge.

func (RunStatus) PendingConnection

func (s RunStatus) PendingConnection() bool

PendingConnection returns true if the status is pending_connection.

func (RunStatus) PendingIncomingConfirmations

func (s RunStatus) PendingIncomingConfirmations() bool

PendingIncomingConfirmations returns true if the status is pending_incoming_confirmations.

func (RunStatus) PendingOutgoingConfirmations

func (s RunStatus) PendingOutgoingConfirmations() bool

PendingOutgoingConfirmations returns true if the status is pending_incoming_confirmations.

func (RunStatus) PendingSleep

func (s RunStatus) PendingSleep() bool

PendingSleep returns true if the status is pending_sleep.

func (RunStatus) Runnable

func (s RunStatus) Runnable() bool

Runnable returns true if the status is ready to be run.

func (*RunStatus) Scan

func (s *RunStatus) Scan(value interface{}) error

Scan reads the database value and returns an instance.

func (RunStatus) Unstarted

func (s RunStatus) Unstarted() bool

Unstarted returns true if the status is the initial state.

func (RunStatus) Value

func (s RunStatus) Value() (driver.Value, error)

Value returns this instance serialized for database storage.

type RunStatusCollection

type RunStatusCollection []RunStatus

RunStatusCollection is an array of RunStatus.

func (*RunStatusCollection) Scan

func (r *RunStatusCollection) Scan(value interface{}) error

Scan reads the database value and returns an instance.

func (RunStatusCollection) ToStrings

func (r RunStatusCollection) ToStrings() []string

ToStrings returns a copy of RunStatusCollection as an array of strings.

func (RunStatusCollection) Value

func (r RunStatusCollection) Value() (driver.Value, error)

Value returns this instance serialized for database storage.

type SendEtherRequest

type SendEtherRequest struct {
	DestinationAddress common.Address `json:"address"`
	FromAddress        common.Address `json:"from"`
	Amount             assets.Eth     `json:"amount"`
}

SendEtherRequest represents a request to transfer ETH.

type ServiceAgreement

type ServiceAgreement struct {
	ID            string      `json:"id" gorm:"primary_key"`
	CreatedAt     time.Time   `json:"createdAt" gorm:"index"`
	Encumbrance   Encumbrance `json:"encumbrance"`
	EncumbranceID int64       `json:"-"`
	RequestBody   string      `json:"requestBody"`
	Signature     Signature   `json:"signature" gorm:"type:varchar(255)"`
	JobSpec       JobSpec     `gorm:"foreignkey:JobSpecID"`
	JobSpecID     JobID       `json:"jobSpecId"`
	UpdatedAt     time.Time   `json:"-"`
}

ServiceAgreement connects job specifications with on-chain encumbrances.

func BuildServiceAgreement

func BuildServiceAgreement(us UnsignedServiceAgreement, signer Signer) (ServiceAgreement, error)

BuildServiceAgreement builds a signed service agreement

func (ServiceAgreement) GetID

func (sa ServiceAgreement) GetID() string

GetID returns the ID of this structure for jsonapi serialization.

func (ServiceAgreement) GetName

func (sa ServiceAgreement) GetName() string

GetName returns the pluralized "type" of this structure for jsonapi serialization.

func (*ServiceAgreement) SetID

func (sa *ServiceAgreement) SetID(value string) error

SetID is used to set the ID of this structure when deserializing from jsonapi documents.

type ServiceAgreementRequest

type ServiceAgreementRequest struct {
	Initiators             []InitiatorRequest            `json:"initiators"`
	Tasks                  []TaskSpecRequest             `json:"tasks"`
	Payment                *assets.Link                  `json:"payment,omitempty"`
	Expiration             uint64                        `json:"expiration"`
	EndAt                  AnyTime                       `json:"endAt"`
	Oracles                ethkey.EIP55AddressCollection `json:"oracles"`
	Aggregator             ethkey.EIP55Address           `json:"aggregator"`
	AggInitiateJobSelector FunctionSelector              `json:"aggInitiateJobSelector"`
	AggFulfillSelector     FunctionSelector              `json:"aggFulfillSelector"`
	StartAt                AnyTime                       `json:"startAt"`
}

ServiceAgreementRequest encodes external ServiceAgreement json representation.

type Session

type Session struct {
	ID        string    `json:"id" gorm:"primary_key"`
	LastUsed  time.Time `json:"lastUsed" gorm:"index"`
	CreatedAt time.Time `json:"createdAt" gorm:"index"`
}

Session holds the unique id for the authenticated session.

func NewSession

func NewSession() Session

NewSession returns a session instance with ID set to a random ID and LastUsed to to now.

type SessionRequest

type SessionRequest struct {
	Email    string `json:"email"`
	Password string `json:"password"`
}

SessionRequest encapsulates the fields needed to generate a new SessionID, including the hashed password.

type Sha256Hash

type Sha256Hash [32]byte

Explicit type indicating a 32-byte sha256 hash

func MustSha256HashFromHex

func MustSha256HashFromHex(x string) Sha256Hash

func Sha256HashFromHex

func Sha256HashFromHex(x string) (Sha256Hash, error)

func (Sha256Hash) MarshalJSON

func (s Sha256Hash) MarshalJSON() ([]byte, error)

MarshalJSON converts a Sha256Hash to a JSON byte slice.

func (*Sha256Hash) Scan

func (s *Sha256Hash) Scan(value interface{}) error

func (Sha256Hash) String

func (s Sha256Hash) String() string

func (*Sha256Hash) UnmarshalJSON

func (s *Sha256Hash) UnmarshalJSON(input []byte) error

UnmarshalJSON converts a bytes slice of JSON to a TaskType.

func (*Sha256Hash) UnmarshalText

func (s *Sha256Hash) UnmarshalText(bs []byte) error

func (Sha256Hash) Value

func (s Sha256Hash) Value() (driver.Value, error)

type Signature

type Signature [SignatureLength]byte

Signature is a byte array fixed to the size of a signature

func BytesToSignature

func BytesToSignature(b []byte) Signature

BytesToSignature converts an arbitrary length byte array to a Signature

func NewSignature

func NewSignature(s string) (Signature, error)

NewSignature returns a new Signature

func (Signature) Big

func (s Signature) Big() *big.Int

Big returns a big.Int representation

func (Signature) Bytes

func (s Signature) Bytes() []byte

Bytes returns the raw bytes

func (Signature) Format

func (s Signature) Format(state fmt.State, c rune)

Format implements fmt.Formatter

func (Signature) Hex

func (s Signature) Hex() string

Hex returns a hexadecimal string

func (Signature) MarshalJSON

func (s Signature) MarshalJSON() ([]byte, error)

MarshalJSON prints the signature as a hexadecimal encoded string

func (Signature) MarshalText

func (s Signature) MarshalText() ([]byte, error)

MarshalText encodes the signature in hexadecimal

func (*Signature) Scan

func (s *Signature) Scan(value interface{}) error

Scan reads the database value and returns an instance.

func (*Signature) SetBytes

func (s *Signature) SetBytes(b []byte)

SetBytes assigns the byte array to the signature

func (Signature) String

func (s Signature) String() string

String implements the stringer interface and is used also by the logger.

func (*Signature) UnmarshalJSON

func (s *Signature) UnmarshalJSON(input []byte) error

UnmarshalJSON parses a signature from a JSON string

func (*Signature) UnmarshalText

func (s *Signature) UnmarshalText(input []byte) error

UnmarshalText parses the signature from a hexadecimal representation

func (Signature) Value

func (s Signature) Value() (driver.Value, error)

Value returns this instance serialized for database storage.

type Signer

type Signer interface {
	SignHash(hash common.Hash) (Signature, error)
}

Signer is used to produce a HMAC signature from an input digest

type SyncEvent

type SyncEvent struct {
	ID        int64 `gorm:"primary_key"`
	CreatedAt time.Time
	UpdatedAt time.Time
	Body      string
}

SyncEvent represents an event sourcing style event, which is used to sync data upstream with another service

type TaskRun

type TaskRun struct {
	ID                               uuid.UUID     `json:"id" gorm:"type:uuid;primary_key;not null"`
	JobRunID                         uuid.UUID     `json:"-" gorm:"type:uuid"`
	Result                           RunResult     `json:"result"`
	ResultID                         clnull.Int64  `json:"-"`
	Status                           RunStatus     `json:"status" gorm:"default:'unstarted'"`
	TaskSpec                         TaskSpec      `json:"task" gorm:"->"`
	TaskSpecID                       int64         `json:"-"`
	MinRequiredIncomingConfirmations clnull.Uint32 `json:"minimumConfirmations" gorm:"column:minimum_confirmations"`
	ObservedIncomingConfirmations    clnull.Uint32 `json:"confirmations" gorm:"column:confirmations"`
	CreatedAt                        time.Time     `json:"-"`
	UpdatedAt                        time.Time     `json:"-"`
}

TaskRun stores the Task and represents the status of the Task to be ran.

func (*TaskRun) ApplyBridgeRunResult

func (tr *TaskRun) ApplyBridgeRunResult(result BridgeRunResult)

ApplyBridgeRunResult updates the TaskRun's Result and Status

func (*TaskRun) ApplyOutput

func (tr *TaskRun) ApplyOutput(result RunOutput)

ApplyOutput updates the TaskRun's Result and Status

func (*TaskRun) SetError

func (tr *TaskRun) SetError(err error)

SetError sets this task run to failed and saves the error message

func (TaskRun) String

func (tr TaskRun) String() string

String returns info on the TaskRun as "ID,Type,Status,Result".

type TaskSpec

type TaskSpec struct {
	ID                               int64         `gorm:"primary_key"`
	JobSpecID                        JobID         `json:"jobSpecId"`
	Type                             TaskType      `json:"type" gorm:"index;not null"`
	MinRequiredIncomingConfirmations clnull.Uint32 `json:"confirmations" gorm:"column:confirmations"`
	Params                           JSON          `json:"params" gorm:"type:text"`
	CreatedAt                        time.Time
	UpdatedAt                        time.Time
	DeletedAt                        gorm.DeletedAt
}

TaskSpec is the definition of work to be carried out. The Type will be an adapter, and the Params will contain any additional information that adapter would need to operate.

type TaskSpecRequest

type TaskSpecRequest struct {
	Type                             TaskType      `json:"type"`
	MinRequiredIncomingConfirmations clnull.Uint32 `json:"confirmations"`
	Params                           JSON          `json:"params"`
}

TaskSpecRequest represents a schema for incoming TaskSpec requests as used by the API.

type TaskType

type TaskType string

TaskType defines what Adapter a TaskSpec will use.

func MustNewTaskType

func MustNewTaskType(val string) TaskType

MustNewTaskType instantiates a new TaskType, and panics if a bad input is provided.

func NewTaskType

func NewTaskType(val string) (TaskType, error)

NewTaskType returns a formatted Task type.

func (TaskType) MarshalJSON

func (t TaskType) MarshalJSON() ([]byte, error)

MarshalJSON converts a TaskType to a JSON byte slice.

func (*TaskType) Scan

func (t *TaskType) Scan(value interface{}) error

Scan reads the database value and returns an instance.

func (TaskType) String

func (t TaskType) String() string

String returns this TaskType as a string.

func (*TaskType) UnmarshalJSON

func (t *TaskType) UnmarshalJSON(input []byte) error

UnmarshalJSON converts a bytes slice of JSON to a TaskType.

func (TaskType) Value

func (t TaskType) Value() (driver.Value, error)

Value returns this instance serialized for database storage.

type Topics

type Topics [][]common.Hash

Topics handle the serialization of ethereum log topics to and from the data store.

func (*Topics) Scan

func (t *Topics) Scan(value interface{}) error

Scan coerces the value returned from the data store to the proper data in this instance.

func (Topics) Value

func (t Topics) Value() (driver.Value, error)

Value returns this instance serialized for database storage.

type UnsignedServiceAgreement

type UnsignedServiceAgreement struct {
	Encumbrance    Encumbrance
	ID             common.Hash
	RequestBody    string
	JobSpecRequest JobSpecRequest
}

UnsignedServiceAgreement contains the information to sign a service agreement

func NewUnsignedServiceAgreementFromRequest

func NewUnsignedServiceAgreementFromRequest(reader io.Reader) (UnsignedServiceAgreement, error)

NewUnsignedServiceAgreementFromRequest builds the information required to sign a service agreement

type UntrustedBytes

type UntrustedBytes []byte

This data can contain anything and is submitted by user on-chain, so we must be extra careful how we interact with it

func (UntrustedBytes) SafeByteSlice

func (ary UntrustedBytes) SafeByteSlice(start int, end int) ([]byte, error)

SafeByteSlice returns an error on out of bounds access to a byte array, where a normal slice would panic instead

type User

type User struct {
	Email             string `gorm:"primary_key"`
	HashedPassword    string
	CreatedAt         time.Time `gorm:"index"`
	TokenKey          string
	TokenSalt         string
	TokenHashedSecret string
	UpdatedAt         time.Time
}

User holds the credentials for API user.

func NewUser

func NewUser(email, plainPwd string) (User, error)

NewUser creates a new user by hashing the passed plainPwd with bcrypt.

func (*User) DeleteAuthToken

func (u *User) DeleteAuthToken()

DeleteAuthToken clears and disables the users Authentication Token.

func (*User) GenerateAuthToken

func (u *User) GenerateAuthToken() (*auth.Token, error)

GenerateAuthToken randomly generates and sets the users Authentication Token.

func (*User) SetAuthToken

func (u *User) SetAuthToken(token *auth.Token) error

SetAuthToken updates the user to use the given Authentication Token.

type ValidationError

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

ValidationError is an error that occurs during validation.

func (*ValidationError) Error

func (e *ValidationError) Error() string

type WebURL

type WebURL url.URL

WebURL contains the URL of the endpoint.

func (WebURL) MarshalJSON

func (w WebURL) MarshalJSON() ([]byte, error)

MarshalJSON returns the JSON-encoded string of the given data.

func (*WebURL) Scan

func (w *WebURL) Scan(value interface{}) error

Scan reads the database value and returns an instance.

func (WebURL) String

func (w WebURL) String() string

String delegates to the wrapped URL struct or an empty string when it is nil

func (*WebURL) UnmarshalJSON

func (w *WebURL) UnmarshalJSON(j []byte) error

UnmarshalJSON parses the raw URL stored in JSON-encoded data to a URL structure and sets it to the URL field.

func (WebURL) Value

func (w WebURL) Value() (driver.Value, error)

Value returns this instance serialized for database storage.

type WithdrawalRequest

type WithdrawalRequest struct {
	DestinationAddress common.Address `json:"address"`
	ContractAddress    common.Address `json:"contractAddress"`
	Amount             *assets.Link   `json:"amount"`
}

WithdrawalRequest request to withdraw LINK.

Jump to

Keyboard shortcuts

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