cmd

package
v0.0.3 Latest Latest
Warning

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

Go to latest
Published: May 11, 2021 License: MIT Imports: 61 Imported by: 0

Documentation

Overview

Package cmd is the front-end interface for the application as a command-line utility.

KeyStoreAuthenticator

KeyStoreAuthenticator prompts the user for their password, which is used to unlock their keystore file to interact with the Ethereum blockchain. Since multiple keystore files can exist at the configured directory, the KeyStoreAuthenticator will try the password on all keystore files present.

Client

Client is how the application is invoked from the command line. When you run the binary, for example `./chainlink n`, client.RunNode is called to start the Chainlink core. Similarly, running `./chainlink j` returns information on all jobs in the node, and `./chainlink s` with another argument as a JobID gives information specific to that job.

Renderer

Renderer helps format and display data (based on the kind of data it is) to the command line.

Index

Constants

This section is empty.

Variables

View Source
var ErrNoCredentialFile = errors.New("no API user credential file was passed")
View Source
var (
	// ErrorNoAPICredentialsAvailable is returned when not run from a terminal
	// and no API credentials have been provided
	ErrorNoAPICredentialsAvailable = errors.New("API credentials must be supplied")
)

Functions

func NewApp

func NewApp(client *Client) *cli.App

NewApp returns the command-line parser/function-router for the given client

Types

type APIInitializer

type APIInitializer interface {
	// Initialize creates a new user for API access, or does nothing if one exists.
	Initialize(store *store.Store) (models.User, error)
}

APIInitializer is the interface used to create the API User credentials needed to access the API. Does nothing if API user already exists.

func NewFileAPIInitializer

func NewFileAPIInitializer(file string) APIInitializer

NewFileAPIInitializer creates a concrete instance of APIInitializer that pulls API user credentials from the passed file path.

func NewPromptingAPIInitializer

func NewPromptingAPIInitializer(prompter Prompter) APIInitializer

NewPromptingAPIInitializer creates a concrete instance of APIInitializer that uses the terminal to solicit credentials from the user.

type AppFactory

type AppFactory interface {
	NewApplication(*orm.Config, ...func(chainlink.Application)) (chainlink.Application, error)
}

AppFactory implements the NewApplication method.

type ChainlinkAppFactory

type ChainlinkAppFactory struct{}

ChainlinkAppFactory is used to create a new Application.

func (ChainlinkAppFactory) NewApplication

func (n ChainlinkAppFactory) NewApplication(config *orm.Config, onConnectCallbacks ...func(chainlink.Application)) (chainlink.Application, error)

NewApplication returns a new instance of the node with the given config.

type ChainlinkRunner

type ChainlinkRunner struct{}

ChainlinkRunner is used to run the node application.

func (ChainlinkRunner) Run

Run sets the log level based on config and starts the web router to listen for input and return data.

type ChangePasswordPrompter

type ChangePasswordPrompter interface {
	Prompt() (web.UpdatePasswordRequest, error)
}

ChangePasswordPrompter is an interface primarily used for DI to obtain a password change request from the User.

func NewChangePasswordPrompter

func NewChangePasswordPrompter() ChangePasswordPrompter

NewChangePasswordPrompter returns the production password change request prompter

type Client

type Client struct {
	Renderer
	Config                         *orm.Config
	AppFactory                     AppFactory
	KeyStoreAuthenticator          KeyStoreAuthenticator
	FallbackAPIInitializer         APIInitializer
	Runner                         Runner
	HTTP                           HTTPClient
	CookieAuthenticator            CookieAuthenticator
	FileSessionRequestBuilder      SessionRequestBuilder
	PromptingSessionRequestBuilder SessionRequestBuilder
	ChangePasswordPrompter         ChangePasswordPrompter
	PasswordPrompter               PasswordPrompter
}

Client is the shell for the node, local commands and remote commands.

func (*Client) ArchiveJobSpec

func (cli *Client) ArchiveJobSpec(c *clipkg.Context) error

ArchiveJobSpec soft deletes a job and its associated runs.

func (*Client) CancelJobRun

func (cli *Client) CancelJobRun(c *clipkg.Context) error

CancelJobRun cancels a running job, Run ID must be passed

func (*Client) ChangePassword

func (cli *Client) ChangePassword(c *clipkg.Context) (err error)

ChangePassword prompts the user for the old password and a new one, then posts it to Chainlink to change the password.

func (*Client) CreateAndExportWeakVRFKey

func (cli *Client) CreateAndExportWeakVRFKey(c *cli.Context) error

CreateAndExportWeakVRFKey creates a key in the VRF keystore, protected by the password in the password file, but with weak key-derivation-function parameters, which makes it cheaper for testing, but also more vulnerable to bruteforcing of the encrypted key material. For testing purposes only!

The key is only stored at the specified file location, not stored in the DB.

func (*Client) CreateBridge

func (cli *Client) CreateBridge(c *cli.Context) (err error)

CreateBridge adds a new bridge to the chainlink node

func (*Client) CreateETHKey

func (cli *Client) CreateETHKey(c *cli.Context) (err error)

CreateETHKey creates a new ethereum key with the same password as the one used to unlock the existing key.

func (*Client) CreateExternalInitiator

func (cli *Client) CreateExternalInitiator(c *clipkg.Context) (err error)

CreateExternalInitiator adds an external initiator

func (*Client) CreateJobRun

func (cli *Client) CreateJobRun(c *clipkg.Context) (err error)

CreateJobRun creates job run based on SpecID and optional JSON

func (*Client) CreateJobSpec

func (cli *Client) CreateJobSpec(c *clipkg.Context) (err error)

CreateJobSpec creates a JobSpec based on JSON input

func (*Client) CreateJobV2

func (cli *Client) CreateJobV2(c *cli.Context) (err error)

CreateJobV2 creates a V2 job Valid input is a TOML string or a path to TOML file

func (*Client) CreateOCRKeyBundle

func (cli *Client) CreateOCRKeyBundle(c *cli.Context) error

CreateOCRKeyBundle creates a key and inserts it into encrypted_ocr_key_bundles, protected by the password in the password file

func (*Client) CreateP2PKey

func (cli *Client) CreateP2PKey(c *cli.Context) (err error)

CreateP2PKey creates a new P2P key

func (*Client) CreateServiceAgreement

func (cli *Client) CreateServiceAgreement(c *clipkg.Context) (err error)

CreateServiceAgreement creates a ServiceAgreement based on JSON input

func (*Client) CreateVRFKey

func (cli *Client) CreateVRFKey(c *cli.Context) error

CreateVRFKey creates a key in the VRF keystore, protected by the password in the password file

func (*Client) DeleteETHKey

func (cli *Client) DeleteETHKey(c *cli.Context) (err error)

DeleteETHKey deletes an Ethereum key, address of key must be passed

func (*Client) DeleteExternalInitiator

func (cli *Client) DeleteExternalInitiator(c *clipkg.Context) (err error)

DeleteExternalInitiator removes an external initiator

func (*Client) DeleteJobV2

func (cli *Client) DeleteJobV2(c *cli.Context) error

DeleteJobV2 deletes a V2 job

func (*Client) DeleteOCRKeyBundle

func (cli *Client) DeleteOCRKeyBundle(c *cli.Context) error

DeleteOCRKeyBundle creates a key and inserts it into encrypted_ocr_keys, protected by the password in the password file

func (*Client) DeleteP2PKey

func (cli *Client) DeleteP2PKey(c *cli.Context) (err error)

DeleteP2PKey deletes a P2P key, key ID must be passed

func (*Client) DeleteUser

func (cli *Client) DeleteUser(c *clipkg.Context) (err error)

DeleteUser is run locally to remove the User row from the node's database.

func (*Client) DeleteVRFKey

func (cli *Client) DeleteVRFKey(c *cli.Context) error

DeleteVRFKey soft-deletes the VRF key with given public key from the db

Since this runs in an independent process from any chainlink node, it cannot cause running nodes to forget the key, if they already have it unlocked.

func (*Client) ExportETHKey

func (cli *Client) ExportETHKey(c *cli.Context) (err error)

ExportETHKey exports an ETH key, address must be passed

func (*Client) ExportOCRKey

func (cli *Client) ExportOCRKey(c *cli.Context) (err error)

ExportOCRKey exports OCR key bundles by ID ID of the key must be passed

func (*Client) ExportP2PKey

func (cli *Client) ExportP2PKey(c *cli.Context) (err error)

ExportP2PKey exports a P2P key, key ID must be passed

func (*Client) ExportVRFKey

func (cli *Client) ExportVRFKey(c *cli.Context) error

ExportVRFKey saves encrypted copy of VRF key with given public key to requested file path.

func (*Client) GetConfiguration

func (cli *Client) GetConfiguration(c *clipkg.Context) (err error)

GetConfiguration gets the nodes environment variables

func (*Client) HardReset

func (cli *Client) HardReset(c *clipkg.Context) error

HardReset will remove all non-started transactions if any are found.

func (*Client) ImportETHKey

func (cli *Client) ImportETHKey(c *cli.Context) (err error)

ImportETHKey imports an Ethereum key, file path must be passed

func (*Client) ImportKey

func (cli *Client) ImportKey(c *clipkg.Context) error

ImportKey imports a key to be used with the chainlink node

func (*Client) ImportOCRKey

func (cli *Client) ImportOCRKey(c *cli.Context) (err error)

ImportOCRKey imports OCR key bundle, file path must be passed

func (*Client) ImportP2PKey

func (cli *Client) ImportP2PKey(c *cli.Context) (err error)

ImportP2PKey imports and stores a P2P key, path to key must be passed

func (*Client) ImportVRFKey

func (cli *Client) ImportVRFKey(c *cli.Context) error

ImportVRFKey reads a file into an EncryptedVRFKey in the db

func (*Client) IndexBridges

func (cli *Client) IndexBridges(c *cli.Context) (err error)

IndexBridges returns all bridges.

func (*Client) IndexJobRuns

func (cli *Client) IndexJobRuns(c *clipkg.Context) error

IndexJobRuns returns the list of all job runs for a specific job if no jobid is passed, defaults to returning all jobruns

func (*Client) IndexJobSpecs

func (cli *Client) IndexJobSpecs(c *clipkg.Context) error

IndexJobSpecs returns all job specs.

func (*Client) IndexTransactions

func (cli *Client) IndexTransactions(c *clipkg.Context) error

IndexTransactions returns the list of transactions in descending order, taking an optional page parameter

func (*Client) IndexTxAttempts

func (cli *Client) IndexTxAttempts(c *clipkg.Context) error

IndexTxAttempts returns the list of transactions in descending order, taking an optional page parameter

func (*Client) ListETHKeys

func (cli *Client) ListETHKeys(c *cli.Context) (err error)

ListETHKeys renders the active account address with its ETH & LINK balance

func (*Client) ListJobsV2

func (cli *Client) ListJobsV2(c *cli.Context) (err error)

ListJobsV2 lists all v2 jobs

func (*Client) ListOCRKeyBundles

func (cli *Client) ListOCRKeyBundles(c *cli.Context) error

ListOCRKeyBundles lists the available OCR Key Bundles

func (*Client) ListP2PKeys

func (cli *Client) ListP2PKeys(c *cli.Context) (err error)

ListP2PKeys retrieves a list of all P2P keys

func (*Client) ListVRFKeys

func (cli *Client) ListVRFKeys(c *cli.Context) error

ListKeys Lists the keys in the db

func (*Client) PrepareTestDatabase

func (cli *Client) PrepareTestDatabase(c *clipkg.Context) error

PrepareTestDatabase calls ResetDatabase then loads fixtures required for tests

func (*Client) RebroadcastTransactions

func (cli *Client) RebroadcastTransactions(c *clipkg.Context) (err error)

RebroadcastTransactions run locally to force manual rebroadcasting of transactions in a given nonce range.

func (*Client) RemoteLogin

func (cli *Client) RemoteLogin(c *clipkg.Context) error

RemoteLogin creates a cookie session to run remote commands.

func (*Client) RemoveBridge

func (cli *Client) RemoveBridge(c *cli.Context) (err error)

RemoveBridge removes a specific Bridge by name.

func (*Client) ResetDatabase

func (cli *Client) ResetDatabase(c *clipkg.Context) error

ResetDatabase drops, creates and migrates the database specified by DATABASE_URL This is useful to setup the database for testing

func (*Client) RunNode

func (cli *Client) RunNode(c *clipkg.Context) error

RunNode starts the Chainlink core.

func (*Client) SendEther

func (cli *Client) SendEther(c *clipkg.Context) (err error)

SendEther transfers ETH from the node's account to a specified address.

func (*Client) SetLogLevel

func (cli *Client) SetLogLevel(c *clipkg.Context) (err error)

SetLogLevel sets the log level on the node

func (*Client) SetLogSQL

func (cli *Client) SetLogSQL(c *clipkg.Context) (err error)

SetLogSQL enables or disables the log sql statemnts

func (*Client) SetMinimumGasPrice

func (cli *Client) SetMinimumGasPrice(c *clipkg.Context) (err error)

SetMinimumGasPrice specifies the minimum gas price to use for outgoing transactions

func (*Client) SetNextNonce

func (cli *Client) SetNextNonce(c *clipkg.Context) error

SetNextNonce manually updates the keys.next_nonce field for the given key with the given nonce value

func (*Client) ShowBridge

func (cli *Client) ShowBridge(c *cli.Context) (err error)

ShowBridge returns the info for the given Bridge name.

func (*Client) ShowJobRun

func (cli *Client) ShowJobRun(c *clipkg.Context) (err error)

ShowJobRun returns the status of the given Jobrun.

func (*Client) ShowJobSpec

func (cli *Client) ShowJobSpec(c *clipkg.Context) (err error)

ShowJobSpec returns the status of the given JobID.

func (*Client) ShowTransaction

func (cli *Client) ShowTransaction(c *clipkg.Context) (err error)

ShowTransaction returns the info for the given transaction hash

func (*Client) TriggerPipelineRun

func (cli *Client) TriggerPipelineRun(c *clipkg.Context) error

TriggerPipelineRun triggers a V2 job run based on a job ID

type CookieAuthenticator

type CookieAuthenticator interface {
	Cookie() (*http.Cookie, error)
	Authenticate(models.SessionRequest) (*http.Cookie, error)
}

CookieAuthenticator is the interface to generating a cookie to authenticate future HTTP requests.

func NewSessionCookieAuthenticator

func NewSessionCookieAuthenticator(config *orm.Config, store CookieStore) CookieAuthenticator

NewSessionCookieAuthenticator creates a SessionCookieAuthenticator using the passed config and builder.

type CookieStore

type CookieStore interface {
	Save(cookie *http.Cookie) error
	Retrieve() (*http.Cookie, error)
}

CookieStore is a place to store and retrieve cookies.

type DiskCookieStore

type DiskCookieStore struct {
	Config *orm.Config
}

DiskCookieStore saves a single cookie in the local cli working directory.

func (DiskCookieStore) Retrieve

func (d DiskCookieStore) Retrieve() (*http.Cookie, error)

Retrieve returns any Saved cookies.

func (DiskCookieStore) Save

func (d DiskCookieStore) Save(cookie *http.Cookie) error

Save stores a cookie.

type HTTPClient

type HTTPClient interface {
	Get(string, ...map[string]string) (*http.Response, error)
	Post(string, io.Reader) (*http.Response, error)
	Put(string, io.Reader) (*http.Response, error)
	Patch(string, io.Reader, ...map[string]string) (*http.Response, error)
	Delete(string) (*http.Response, error)
}

HTTPClient encapsulates all methods used to interact with a chainlink node API.

func NewAuthenticatedHTTPClient

func NewAuthenticatedHTTPClient(config orm.ConfigReader, cookieAuth CookieAuthenticator, sessionRequest models.SessionRequest) HTTPClient

NewAuthenticatedHTTPClient uses the CookieAuthenticator to generate a sessionID which is then used for all subsequent HTTP API requests.

type JAID

type JAID struct {
	ID string `json:"id"`
}

JAID represents a JSON API ID.

It implements the api2go MarshalIdentifier and UnmarshalIdentitier interface.

When you embed a JSONAPI resource into a presenter, it will not render the ID into the JSON object when you perform a json.Marshal. Instead we use this to override the ID field of the resource with a JSON tag that will render.

Embed this into a Presenter to render the ID. For example

type JobPresenter struct {
	JAID
	presenters.JobResource
}

func NewJAID

func NewJAID(id string) JAID

func (JAID) GetID

func (jaid JAID) GetID() string

GetID implements the api2go MarshalIdentifier interface.

func (*JAID) SetID

func (jaid *JAID) SetID(value string) error

SetID implements the api2go UnmarshalIdentitier interface.

type JobPresenter

type JobPresenter struct {
	JAID // This is needed to render the id for a JSONAPI Resource as normal JSON
	presenters.JobResource
}

JobRenderer wraps the JSONAPI Job Resource and adds rendering functionality

func (JobPresenter) FriendlyCreatedAt

func (j JobPresenter) FriendlyCreatedAt() string

FriendlyCreatedAt returns the created at timestamp of the spec which matches the type in RFC3339 format.

func (JobPresenter) FriendlyTasks

func (j JobPresenter) FriendlyTasks() []string

FriendlyTasks returns the tasks

func (JobPresenter) GetTasks

func (j JobPresenter) GetTasks() ([]string, error)

GetTasks extracts the tasks from the dependency graph

func (JobPresenter) ToRows

func (j JobPresenter) ToRows() [][]string

ToRows returns the job as a multiple rows per task

type KeyStoreAuthenticator

type KeyStoreAuthenticator interface {
	Authenticate(*store.Store, string) (string, error)
	AuthenticateVRFKey(*store.Store, string) error
	AuthenticateOCRKey(store *store.Store, password string) error
}

KeyStoreAuthenticator implements the Authenticate method for the store and a password string.

type MemoryCookieStore

type MemoryCookieStore struct {
	Cookie *http.Cookie
}

MemoryCookieStore keeps a single cookie in memory

func (*MemoryCookieStore) Retrieve

func (m *MemoryCookieStore) Retrieve() (*http.Cookie, error)

Retrieve returns any Saved cookies.

func (*MemoryCookieStore) Save

func (m *MemoryCookieStore) Save(cookie *http.Cookie) error

Save stores a cookie.

type OCRKeyBundlePresenter

type OCRKeyBundlePresenter struct {
	JAID // Include this to overwrite the presenter JAID so it can correctly render the ID in JSON
	presenters.OCRKeysBundleResource
}

func (*OCRKeyBundlePresenter) RenderTable

func (p *OCRKeyBundlePresenter) RenderTable(rt RendererTable) error

RenderTable implements TableRenderer

func (*OCRKeyBundlePresenter) ToRow

func (p *OCRKeyBundlePresenter) ToRow() []string

type OCRKeyBundlePresenters

type OCRKeyBundlePresenters []OCRKeyBundlePresenter

func (OCRKeyBundlePresenters) RenderTable

func (ps OCRKeyBundlePresenters) RenderTable(rt RendererTable) error

RenderTable implements TableRenderer

type P2PKeyPresenter

type P2PKeyPresenter struct {
	JAID
	presenters.P2PKeyResource
}

type PasswordPrompter

type PasswordPrompter interface {
	Prompt() string
}

PasswordPrompter is an interface primarily used for DI to obtain a password from the User.

func NewPasswordPrompter

func NewPasswordPrompter() PasswordPrompter

NewPasswordPrompter returns the production password change request prompter

type Prompter

type Prompter interface {
	Prompt(string) string
	PasswordPrompt(string) string
	IsTerminal() bool
}

Prompter implements the Prompt function to be used to display at the console.

func NewTerminalPrompter

func NewTerminalPrompter() Prompter

NewTerminalPrompter prompts the user via terminal.

type Renderer

type Renderer interface {
	Render(interface{}, ...string) error
}

Renderer implements the Render method.

type RendererJSON

type RendererJSON struct {
	io.Writer
}

RendererJSON is used to render JSON data.

func (RendererJSON) Render

func (rj RendererJSON) Render(v interface{}, _ ...string) error

Render writes the given input as a JSON string.

type RendererTable

type RendererTable struct {
	io.Writer
}

RendererTable is used for data to be rendered as a table.

func (RendererTable) Render

func (rt RendererTable) Render(v interface{}, headers ...string) error

Render returns a formatted table of text for a given Job or presenter and relevant information.

type Runner

type Runner interface {
	Run(chainlink.Application) error
}

Runner implements the Run method.

type SessionCookieAuthenticator

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

SessionCookieAuthenticator is a concrete implementation of CookieAuthenticator that retrieves a session id for the user with credentials from the session request.

func (*SessionCookieAuthenticator) Authenticate

func (t *SessionCookieAuthenticator) Authenticate(sessionRequest models.SessionRequest) (*http.Cookie, error)

Authenticate retrieves a session ID via a cookie and saves it to disk.

func (*SessionCookieAuthenticator) Cookie

func (t *SessionCookieAuthenticator) Cookie() (*http.Cookie, error)

Cookie Returns the previously saved authentication cookie.

type SessionRequestBuilder

type SessionRequestBuilder interface {
	Build(flag string) (models.SessionRequest, error)
}

SessionRequestBuilder is an interface that returns a SessionRequest, abstracting how session requests are generated, whether they be from the prompt or from a file.

func NewFileSessionRequestBuilder

func NewFileSessionRequestBuilder() SessionRequestBuilder

NewFileSessionRequestBuilder pulls credentials from a file to generate a SessionRequest.

func NewPromptingSessionRequestBuilder

func NewPromptingSessionRequestBuilder(prompter Prompter) SessionRequestBuilder

NewPromptingSessionRequestBuilder uses a prompter, often via terminal, to solicit information from a user to generate the SessionRequest.

type TableRenderer

type TableRenderer interface {
	RenderTable(rt RendererTable) error
}

type TerminalKeyStoreAuthenticator

type TerminalKeyStoreAuthenticator struct {
	Prompter Prompter
}

TerminalKeyStoreAuthenticator contains fields for prompting the user and an exit code.

func (TerminalKeyStoreAuthenticator) Authenticate

func (auth TerminalKeyStoreAuthenticator) Authenticate(store *store.Store, password string) (string, error)

Authenticate checks to see if there are accounts present in the KeyStore, and if there are none, a new account will be created by prompting for a password. If there are accounts present, all accounts will be unlocked.

func (TerminalKeyStoreAuthenticator) AuthenticateOCRKey

func (auth TerminalKeyStoreAuthenticator) AuthenticateOCRKey(store *store.Store, password string) error

AuthenticateOCRKey authenticates OCR keypairs

func (TerminalKeyStoreAuthenticator) AuthenticateVRFKey

func (auth TerminalKeyStoreAuthenticator) AuthenticateVRFKey(store *store.Store, password string) error

AuthenticateVRFKey creates an encrypted VRF key protected by password in store's db if db store has no extant keys. It unlocks at least one VRF key with given password, or returns an error. password must be non-trivial, as an empty password signifies that the VRF oracle functionality is disabled.

type VRFKeyPresenter

type VRFKeyPresenter struct {
	Compressed   string     `json:"compressed"`
	Uncompressed string     `json:"uncompressed"`
	Hash         string     `json:"hash"`
	CreatedAt    *time.Time `json:"createdAt"`
	UpdatedAt    *time.Time `json:"updatedAt"`
	DeletedAt    *time.Time `json:"deletedAt"`
}

func (VRFKeyPresenter) FriendlyCreatedAt

func (p VRFKeyPresenter) FriendlyCreatedAt() string

func (VRFKeyPresenter) FriendlyDeletedAt

func (p VRFKeyPresenter) FriendlyDeletedAt() string

func (VRFKeyPresenter) FriendlyUpdatedAt

func (p VRFKeyPresenter) FriendlyUpdatedAt() string

Directories

Path Synopsis
testscript

Jump to

Keyboard shortcuts

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