Switchboard oracles read on-chain job accounts to determine how to fetch and
respond to update request. An OracleJob is a collection of tasks that are
chained together to arrive at a single numerical value.
Switchboard tasks are executed sequentially with the output of the previous task
provided as the input to the next task in a chain. After the final task, the
TaskRunner will attempt to convert the running result to a numeric value.
NOTE: Some task do not consume the running input such as HttpTask,
WebsocketTask, and most of the fetch tasks. If the TaskRunner sees one of these
task types in the middle of a job definition, it will effectively reset the
running result.
Field | Type | Label | Description |
---|
tasks | Task | repeated | The chain of tasks to perform for this OracleJob. |
Switchboard tasks can be divided into the following categories:
- Web2 Fetch: Retrieve data from the web
- Web3 Fetch: Retrieve on-chain data
- Parse: Extract a value from a response
- Logic: Perform some logical operation like if..else clauses
- Utils: Helpful utility tasks like caching values or calculating
a timestamp
- Historical: Parse an on-chain history buffer and perform some
calculation
- Math: Perform a mathematical operation like taking the maximum
value of a list or raising a value to an exponent.
📦Web2 Fetch​
🛠HttpTask​
The adapter will report the text body of a successful HTTP request to the
specified url, or return an error if the response status code is greater than or
equal to 400. @return string representation of it's output.
Field | Type | Label | Description |
---|
url | string | optional | A string containing the URL to direct this HTTP request to. |
method | Method | optional | The type of HTTP request to make. |
headers | Header | repeated | A list of headers to add to this HttpTask. |
body | string | optional | A stringified body (if any) to add to this HttpTask. |
An object that represents a header to add to an HTTP request.
Field | Type | Label | Description |
---|
key | string | optional | |
value | string | optional | |
An enumeration representing the types of HTTP requests available to make.
Name | Number | Description |
---|
METHOD_UNKOWN | 0 | Unset HTTP method will default to METHOD_GET |
METHOD_GET | 1 | Perform an HTTP 'GET' request. |
METHOD_POST | 2 | Perform an HTTP 'POST' request. |
🛠WebsocketTask​
Opens and maintains a websocket for light speed data retrieval.
Field | Type | Label | Description |
---|
url | string | optional | The websocket url. |
subscription | string | optional | The websocket message to notify of a new subscription. |
max_data_age_seconds | int32 | optional | Minimum amount of time required between when the horses are taking out. |
filter | string | optional | Incoming message JSONPath filter. Example: "$[?(@.channel == 'ticker' && @.market == 'BTC/USD')]" |
📦Web3 Fetch​
🛠AnchorFetchTask​
Load a parse an Anchor based solana account.
Field | Type | Label | Description |
---|
program_id | string | optional | Owning program of the account to parse. |
account_address | string | optional | The account to parse. |
🛠OracleTask​
Fetch the current price of a Solana oracle protocol.
Field | Type | Label | Description |
---|
switchboard_address | string | optional | Mainnet address of a Switchboard V2 feed. Switchboard is decentralized and allows anyone to build their own feed. A small subset of feeds is available here: https://switchboard.xyz/explorer |
pyth_address | string | optional | Mainnet address for a Pyth feed. A full list can be found here: https://pyth.network/price-feeds/ |
chainlink_address | string | optional | Mainnet address for a Chainlink feed. A full list can be found here: https://docs.chain.link/docs/solana/data-feeds-solana |
pyth_allowed_confidence_interval | double | optional | Value (as a percentage) that the lower bound confidence interval is of the actual value. Confidence intervals that are larger that this treshold are rejected. |
🛠SolanaAccountDataFetchTask​
Fetch the account data in a stringified buffer format.
Field | Type | Label | Description |
---|
pubkey | string | optional | The on-chain account to fetch the account data from. |
🛠JupiterSwapTask​
Fetch the simulated price for a swap on JupiterSwap.
Field | Type | Label | Description |
---|
in_token_address | string | optional | The input token address. |
out_token_address | string | optional | The output token address. |
base_amount | double | optional | The amount of tokens to swap. |
allow_list | FilterList | optional | |
deny_list | FilterList | optional | |
FilterList​
A list of Jupiter AMM labels to allow or deny (e.g. 'Raydium',
'Orca')
Field | Type | Label | Description |
---|
labels | string | repeated | |
Note: Jupiter currently supports the following AMMs which can be inputted
into the allow_list
or deny_list
property to change the route selection:
- Aldrin
- Crema
- Cropper
- Cykura
- DeltaFi
- GooseFX
- Invariant
- Lifinity
- Lifinity V2
- Marinade
- Mercurial
- Meteora
- Raydium
- Saber
- Serum
- Orca
- Step
- Penguin
- Saros
- Stepn
- Orca (Whirlpools)
- Sencha
- Saber (Decimals)
- Dradex
- Balansol
- Unknown
🛠SerumSwapTask​
Fetch the latest swap price on Serum's orderbook.
Field | Type | Label | Description |
---|
serum_pool_address | string | optional | The serum pool to fetch swap price for |
Update (11/17/2022): This task now points to the community fork of Serum.
🛠UniswapExchangeRateTask​
Fetch the swap price from UniSwap.
Field | Type | Label | Description |
---|
in_token_address | string | optional | The input token address. |
out_token_address | string | optional | The output token address. |
in_token_amount | double | optional | The amount of tokens to swap. |
slippage | double | optional | The allowable slippage in percent for the swap. |
provider | string | optional | The RPC provider to use for the swap. |
🛠SushiSwapExchangeRateTask​
Fetch the swap price from SushiSwap.
Field | Type | Label | Description |
---|
in_token_address | string | optional | The input token address. |
out_token_address | string | optional | The output token address. |
in_token_amount | double | optional | The amount of tokens to swap. |
slippage | double | optional | The allowable slippage in percent for the swap. |
provider | string | optional | The RPC provider to use for the swap. |
🛠PancakeswapExchangeRateTask​
Fetch the swap price from PancakeSwap.
Field | Type | Label | Description |
---|
in_token_address | string | optional | The input token address. |
out_token_address | string | optional | The output token address. |
in_token_amount | double | optional | The amount of tokens to swap. |
slippage | double | optional | The allowable slippage in percent for the swap. |
provider | string | optional | The RPC provider to use for the swap. |
🛠DefiKingdomsTask​
Fetch the swap price from DefiKingdoms.
Field | Type | Label | Description |
---|
provider | string | optional | The RPC provider to use for the swap. |
in_token | Token | optional | The input token of the swap. |
out_token | Token | optional | The output token of the swap. |
Field | Type | Label | Description |
---|
address | string | optional | The address of the token. |
decimals | int32 | optional | The number of decimal places for a token. |
🛠MangoPerpTask​
Fetch the current price for a Mango perpetual market
🛠LendingRateTask​
Fetch the lending rates for various Solana protocols
Field | Type | Label | Description |
---|
protocol | string | optional | 01, apricot, francium, jet, larix, mango, port, solend, tulip |
asset_mint | string | optional | A token mint address supported by the chosen protocol |
field | Field | optional | |
Name | Number | Description |
---|
FIELD_DEPOSIT_RATE | 0 | deposit lending rate |
FIELD_BORROW_RATE | 1 | borrow lending rate |
🛠XStepPriceTask​
Field | Type | Label | Description |
---|
step_job | MedianTask | optional | median task containing the job definitions to fetch the STEP/USD price |
step_aggregator_pubkey | string | optional | existing aggregator pubkey for STEP/USD |
🛠SplTokenParseTask​
Fetch the JSON representation of an SPL token mint.
Field | Type | Label | Description |
---|
token_account_address | string | optional | The publicKey of a token account to fetch the mintInfo for. |
mint_address | string | optional | The publicKey of the token mint address. |
🛠SplStakePoolTask​
Fetch the JSON representation of an SPL Stake Pool account.
Field | Type | Label | Description |
---|
pubkey | string | optional | The pubkey of the SPL Stake Pool. |
🛠LpExchangeRateTask​
Fetch the current swap price for a given liquidity pool
Field | Type | Label | Description |
---|
in_token_address | string | optional | Used alongside mercurial_pool_address to specify the input token for a swap. |
out_token_address | string | optional | Used alongside mercurial_pool_address to specify the output token for a swap. |
mercurial_pool_address | string | optional | Mercurial finance pool address. A full list can be found here: https://github.com/mercurial-finance/stable-swap-n-pool-js |
saber_pool_address | string | optional | Saber pool address. A full list can be found here: https://github.com/saber-hq/saber-registry-dist |
orca_pool_token_mint_address | string | optional | Deprecated. Orca pool address. |
raydium_pool_address | string | optional | The Raydium liquidity pool ammId. A full list can be found here: https://sdk.raydium.io/liquidity/mainnet.json |
orca_pool_address | string | optional | Pool address for an Orca LP pool or whirlpool. A full list of Orca LP pools can be found here: https://www.orca.so/pools |
🛠LpTokenPriceTask​
Fetch LP token price info from a number of supported exchanges.
📦Parse​
🛠JsonParseTask​
The adapter walks the path specified and returns the value found at that result.
If returning JSON data from the HttpGet or HttpPost adapters, you must use this
adapter to parse the response.
AggregationMethod​
The methods of combining a list of numerical results.
Name | Number | Description |
---|
NONE | 0 | |
MIN | 1 | Grab the minimum value of the results. |
MAX | 2 | Grab the maximum value of the results. |
SUM | 3 | Sum up all of the results. |
MEAN | 4 | Average all of the results. |
MEDIAN | 5 | Grab the median of the results. |
Find a pattern within a string of a previous task and extract a group number.
Field | Type | Label | Description |
---|
pattern | string | optional | Regex pattern to find. |
group_number | int32 | optional | Group number to extract. |
🛠BufferLayoutParseTask​
Return the deserialized value from a stringified buffer.
Field | Type | Label | Description |
---|
offset | uint32 | optional | The buffer offset to start deserializing from. |
endian | Endian | optional | The endianness of the stored value. |
type | BufferParseType | optional | The type of value to deserialize. |
BufferParseType​
Name | Number | Description |
---|
pubkey | 1 | A public key. |
bool | 2 | A boolean. |
u8 | 3 | An 8-bit unsigned value. |
i8 | 4 | An 8-bit signed value. |
u16 | 5 | A 16-bit unsigned value. |
i16 | 6 | A 16-bit signed value. |
u32 | 7 | A 32-bit unsigned value. |
i32 | 8 | A 32-bit signed value. |
f32 | 9 | A 32-bit IEEE floating point value. |
u64 | 10 | A 64-bit unsigned value. |
i64 | 11 | A 64-bit signed value. |
f64 | 12 | A 64-bit IEEE floating point value. |
u128 | 13 | A 128-bit unsigned value. |
i128 | 14 | A 128-bit signed value. |
Name | Number | Description |
---|
LITTLE_ENDIAN | 0 | |
BIG_ENDIAN | 1 | |
📦Logic​
🛠BoundTask​
Bound a final result to a min or max. If an onExceeds
field is not provided
then the job will fail if the result is outside the bounds.
Field | Type | Label | Description |
---|
lower_bound | OracleJob | optional | |
lower_bound_value | string | optional | |
upper_bound | OracleJob | optional | |
upper_bound_value | string | optional | |
on_exceeds_upper_bound | OracleJob | optional | |
on_exceeds_upper_bound_value | string | optional | |
on_exceeds_lower_bound | OracleJob | optional | |
on_exceeds_lower_bound_value | string | optional | |
🛠ConditionalTask​
This task will run the attempt
subtasks in an effort to produce a valid
numerical result. If attempt
fails to produce an acceptable result,
on_failure
subtasks will be run instead.
Field | Type | Label | Description |
---|
attempt | Task | repeated | A list of subtasks to process in an attempt to produce a valid numerical result. |
on_failure | Task | repeated | A list of subtasks that will be run if attempt subtasks are unable to produce an acceptable result. |
🛠ComparisonTask​
Perform a numerical comparison on two values
ComparisonTask.Operation​
Name | Number | Description |
---|
OPERATION_EQ | 0 | |
OPERATION_GT | 1 | |
OPERATION_LT | 2 | |
📦Utils​
🛠CacheTask​
Execute a job and store the result in a variable to reference later.
Field | Type | Label | Description |
---|
cache_items | CacheItem | repeated | A list of cached variables to reference in the job with ${VARIABLE_NAME} . |
CacheItem​
Field | Type | Label | Description |
---|
variable_name | string | optional | The name of the variable to store in cache to reference later with ${VARIABLE_NAME} . |
job | OracleJob | optional | The OracleJob to execute to yield the value to store in cache. |
🛠SysclockOffsetTask​
Return the difference between an oracle's clock and the current timestamp at
SYSVAR_CLOCK_PUBKEY
.
🛠CronParseTask​
Return a timestamp from a crontab instruction.
Field | Type | Label | Description |
---|
cron_pattern | string | optional | The cron pattern to parse |
clock_offset | int32 | optional | The timestamp offset to calculate the next run |
clock | ClockType | optional | The type of clock to use, oracle or the solana cluster sysclock. |
ClockType​
The type of clock.
Name | Number | Description |
---|
ORACLE | 0 | The oracles current clock. |
SYSCLOCK | 1 | The solana cluster's sysclock. |
🛠TpsTask​
Fetch the current transactions per second.
📦Historical​
Task types which parse historical data from an on-chain history buffer
🛠TwapTask​
Takes a twap over a set period for a certain aggregator.
Field | Type | Label | Description |
---|
aggregator_pubkey | string | optional | The target aggregator for the TWAP. |
period | int32 | optional | Period, in seconds, the twap should account for |
weight_by_propagation_time | bool | optional | Weight samples by their propagation time |
min_samples | uint32 | optional | Minimum number of samples in the history to calculate a valid result |
ending_unix_timestamp | int32 | optional | Ending unix timestamp to collect values up to |
ending_unix_timestamp_task | CronParseTask | optional | Execute the task to get the ending unix timestamp |
🛠EwmaTask​
NOT LIVE, IN DEVELOPMENT.
Field | Type | Label | Description |
---|
aggregator_address | string | optional | |
period | int32 | optional | |
lambda | double | optional | |
🛠HistoryFunctionTask​
NOT LIVE, IN DEVELOPMENT.
HistoryFunctionTask.Method​
Name | Number | Description |
---|
METHOD_MIN | 0 | |
METHOD_MAX | 1 | |
🛠VwapTask​
NOT LIVE, IN DEVELOPMENT.
Field | Type | Label | Description |
---|
price_aggregator_address | string | optional | |
volume_aggregator_address | string | optional | |
period | uint32 | optional | |
📦Math​
🛠MaxTask​
Returns the maximum value of all the results returned by the provided subtasks
and subjobs.
Field | Type | Label | Description |
---|
tasks | Task | repeated | A list of subtasks to process and produce a list of result values. |
jobs | OracleJob | repeated | A list of subjobs to process and produce a list of result values. |
🛠MeanTask​
Returns the mean of all the results returned by the provided subtasks and
subjobs.
Field | Type | Label | Description |
---|
tasks | Task | repeated | A list of subtasks to process and produce a list of result values. |
jobs | OracleJob | repeated | A list of subjobs to process and produce a list of result values. |
Returns the median of all the results returned by the provided subtasks and
subjobs. Nested tasks must return a Number.
Field | Type | Label | Description |
---|
tasks | Task | repeated | A list of subtasks to process and produce a list of result values. |
jobs | OracleJob | repeated | A list of subjobs to process and produce a list of result values. |
min_successful_required | int32 | optional | |
🛠AddTask​
This task will add a numerical input by a scalar value or by another aggregate.
Field | Type | Label | Description |
---|
scalar | double | optional | Specifies a scalar to add by. |
aggregator_pubkey | string | optional | Specifies an aggregator to add by. |
job | OracleJob | optional | A job whose result is computed before adding our numerical input by that result. |
big | string | optional | A stringified big.js. Accepts variable expansion syntax. |
🛠SubtractTask​
This task will subtract a numerical input by a scalar value or by another
aggregate.
Field | Type | Label | Description |
---|
scalar | double | optional | Specifies a scalar to subtract by. |
aggregator_pubkey | string | optional | Specifies an aggregator to subtract by. |
job | OracleJob | optional | A job whose result is computed before subtracting our numerical input by that result. |
big | string | optional | A stringified big.js. Accepts variable expansion syntax. |
🛠MultiplyTask​
This task will multiply a numerical input by a scalar value or by another
aggregator.
Field | Type | Label | Description |
---|
scalar | double | optional | Specifies a scalar to multiply by. |
aggregator_pubkey | string | optional | Specifies an aggregator to multiply by. |
job | OracleJob | optional | A job whose result is computed before multiplying our numerical input by that result. |
big | string | optional | A stringified big.js. Accepts variable expansion syntax. |
🛠DivideTask​
This task will divide a numerical input by a scalar value or by another
aggregate.
Field | Type | Label | Description |
---|
scalar | double | optional | Specifies a basic scalar denominator to divide by. |
aggregator_pubkey | string | optional | Specifies another aggregator resut to divide by. |
job | OracleJob | optional | A job whose result is computed before dividing our numerical input by that result. |
big | string | optional | A stringified big.js. Accepts variable expansion syntax. |
🛠PowTask​
Take the power of the working value.
Field | Type | Label | Description |
---|
scalar | double | optional | Take the working value to the exponent of value. |
aggregator_pubkey | string | optional | Take the working value to the exponent of the aggregators value. |
big | string | optional | A stringified big.js. Accepts variable expansion syntax. |
🛠ValueTask​
Returns a specified value.
Field | Type | Label | Description |
---|
value | double | optional | The value that will be returned from this task. |
aggregator_pubkey | string | optional | Specifies an aggregatorr to pull the value of. |
big | string | optional | A stringified big.js. Accepts variable expansion syntax. |
🛠RoundTask​
RoundTask.Method​
Name | Number | Description |
---|
METHOD_ROUND_UP | 0 | |
METHOD_ROUND_DOWN | 1 | |