diff --git a/packages/lease-observer/package.json b/packages/lease-observer/package.json index 9348634..e07fe98 100644 --- a/packages/lease-observer/package.json +++ b/packages/lease-observer/package.json @@ -17,7 +17,7 @@ "@project-serum/anchor": "^0.24.2", "@solana/web3.js": "1.33.0", "@switchboard-xyz/switchboard-v2": "^0.0.97", - "@switchboard-xyz/sbv2-utils": "^0.0.10", + "@switchboard-xyz/sbv2-utils": "^0.0.13", "dotenv": "^16.0.0", "node-pagerduty": "^1.3.6" }, diff --git a/website/api/_tasks.md b/website/api/_tasks.md index dd138e5..31cac34 100644 --- a/website/api/_tasks.md +++ b/website/api/_tasks.md @@ -84,7 +84,7 @@ This schema Oracle nodes respond with when fulfilling a job. ### OracleJob -Represnts a list of tasks to be performed by a switchboard oracle. +Represents a list of tasks to be performed by a switchboard oracle. | Field | Type | Label | Description | | ----- | --------------------------------- | -------- | ------------------------------------------------- | @@ -155,7 +155,7 @@ 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. | +| aggregator_pubkey | string | optional | Specifies another aggregator result to divide by. | | job | [OracleJob](#OracleJob) | optional | A job whose result is computed before dividing our numerical input by that result. | @@ -319,7 +319,7 @@ Fetch the current price of a Solana oracle protocol | 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/markets/ | | chainlink_address | string | optional | Devnet 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. | +| 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 threshold are rejected. | @@ -400,13 +400,13 @@ aggregate. ### OracleJob.SushiswapExchangeRateTask -| Field | Type | Label | Description | -| ----------------- | ----------------- | -------- | ----------- | -| in_token_address | string | optional | | -| out_token_address | string | optional | | +| Field | Type | Label | Description | +| ----------------- | ------ | -------- | ----------- | +| in_token_address | string | optional | | +| out_token_address | string | optional | | | in_token_amount | uint32 | optional | | -| slippage | double | optional | | -| provider | string | optional | | +| slippage | double | optional | | +| provider | string | optional | | @@ -456,25 +456,25 @@ aggregate. 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](#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 | +| 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](#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 | ### OracleJob.UniswapExchangeRateTask -| Field | Type | Label | Description | -| ----------------- | ----------------- | -------- | ----------- | -| in_token_address | string | optional | | -| out_token_address | string | optional | | +| Field | Type | Label | Description | +| ----------------- | ------ | -------- | ----------- | +| in_token_address | string | optional | | +| out_token_address | string | optional | | | in_token_amount | uint32 | optional | | -| slippage | double | optional | | -| provider | string | optional | | +| slippage | double | optional | | +| provider | string | optional | | @@ -485,7 +485,7 @@ 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. | +| aggregator_pubkey | string | optional | Specifies an aggregator to pull the value of. | @@ -515,11 +515,11 @@ Opens and maintains a websocket for light speed data retrieval. 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. | +| Name | Number | Description | +| -------------- | ------ | -------------------------------------------- | +| METHOD_UNKNOWN | 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. | diff --git a/website/api/cli/_aggregator.md b/website/api/cli/_aggregator.md index 67e3a56..196f1df 100644 --- a/website/api/cli/_aggregator.md +++ b/website/api/cli/_aggregator.md @@ -1,23 +1,22 @@ - interact with a switchboard aggregator account -* [`sbv2 aggregator:add:job AGGREGATORKEY`](#sbv2-aggregatoraddjob-aggregatorkey) -* [`sbv2 aggregator:create:copy AGGREGATORSOURCE`](#sbv2-aggregatorcreatecopy-aggregatorsource) -* [`sbv2 aggregator:create:json DEFINITIONFILE`](#sbv2-aggregatorcreatejson-definitionfile) -* [`sbv2 aggregator:lock AGGREGATORKEY`](#sbv2-aggregatorlock-aggregatorkey) -* [`sbv2 aggregator:permission:create AGGREGATORKEY`](#sbv2-aggregatorpermissioncreate-aggregatorkey) -* [`sbv2 aggregator:remove:job AGGREGATORKEY JOBKEY`](#sbv2-aggregatorremovejob-aggregatorkey-jobkey) -* [`sbv2 aggregator:set AGGREGATORKEY`](#sbv2-aggregatorset-aggregatorkey) -* [`sbv2 aggregator:set:authority AGGREGATORKEY NEWAUTHORITY`](#sbv2-aggregatorsetauthority-aggregatorkey-newauthority) -* [`sbv2 aggregator:set:batchSize AGGREGATORKEY BATCHSIZE`](#sbv2-aggregatorsetbatchsize-aggregatorkey-batchsize) -* [`sbv2 aggregator:set:forceReportPeriod AGGREGATORKEY FORCEREPORTPERIOD`](#sbv2-aggregatorsetforcereportperiod-aggregatorkey-forcereportperiod) -* [`sbv2 aggregator:set:history AGGREGATORKEY SIZE`](#sbv2-aggregatorsethistory-aggregatorkey-size) -* [`sbv2 aggregator:set:minJobs AGGREGATORKEY MINJOBRESULTS`](#sbv2-aggregatorsetminjobs-aggregatorkey-minjobresults) -* [`sbv2 aggregator:set:minOracles AGGREGATORKEY MINORACLERESULTS`](#sbv2-aggregatorsetminoracles-aggregatorkey-minoracleresults) -* [`sbv2 aggregator:set:queue AGGREGATORKEY QUEUEKEY`](#sbv2-aggregatorsetqueue-aggregatorkey-queuekey) -* [`sbv2 aggregator:set:updateInterval AGGREGATORKEY UPDATEINTERVAL`](#sbv2-aggregatorsetupdateinterval-aggregatorkey-updateinterval) -* [`sbv2 aggregator:set:varianceThreshold AGGREGATORKEY VARIANCETHRESHOLD`](#sbv2-aggregatorsetvariancethreshold-aggregatorkey-variancethreshold) -* [`sbv2 aggregator:update AGGREGATORKEY`](#sbv2-aggregatorupdate-aggregatorkey) +- [`sbv2 aggregator:add:job AGGREGATORKEY`](#sbv2-aggregatoraddjob-aggregatorkey) +- [`sbv2 aggregator:create:copy AGGREGATORSOURCE`](#sbv2-aggregatorcreatecopy-aggregatorsource) +- [`sbv2 aggregator:create:json DEFINITIONFILE`](#sbv2-aggregatorcreatejson-definitionfile) +- [`sbv2 aggregator:lock AGGREGATORKEY`](#sbv2-aggregatorlock-aggregatorkey) +- [`sbv2 aggregator:permission:create AGGREGATORKEY`](#sbv2-aggregatorpermissioncreate-aggregatorkey) +- [`sbv2 aggregator:remove:job AGGREGATORKEY JOBKEY`](#sbv2-aggregatoremovejob-aggregatorkey-jobkey) +- [`sbv2 aggregator:set AGGREGATORKEY`](#sbv2-aggregatorset-aggregatorkey) +- [`sbv2 aggregator:set:authority AGGREGATORKEY NEWAUTHORITY`](#sbv2-aggregatorsetauthority-aggregatorkey-newauthority) +- [`sbv2 aggregator:set:batchSize AGGREGATORKEY BATCHSIZE`](#sbv2-aggregatorsetbatchsize-aggregatorkey-batchsize) +- [`sbv2 aggregator:set:forceReportPeriod AGGREGATORKEY FORCEREPORTPERIOD`](#sbv2-aggregatorsetforcereportperiod-aggregatorkey-forcereportperiod) +- [`sbv2 aggregator:set:history AGGREGATORKEY SIZE`](#sbv2-aggregatorsethistory-aggregatorkey-size) +- [`sbv2 aggregator:set:minJobs AGGREGATORKEY MINJOBRESULTS`](#sbv2-aggregatorsetminjobs-aggregatorkey-minjobresults) +- [`sbv2 aggregator:set:minOracles AGGREGATORKEY MINORACLERESULTS`](#sbv2-aggregatorsetminoracles-aggregatorkey-minoracleresults) +- [`sbv2 aggregator:set:queue AGGREGATORKEY QUEUEKEY`](#sbv2-aggregatorsetqueue-aggregatorkey-queuekey) +- [`sbv2 aggregator:set:updateInterval AGGREGATORKEY UPDATEINTERVAL`](#sbv2-aggregatorsetupdateinterval-aggregatorkey-updateinterval) +- [`sbv2 aggregator:set:varianceThreshold AGGREGATORKEY VARIANCETHRESHOLD`](#sbv2-aggregatorsetvariancethreshold-aggregatorkey-variancethreshold) +- [`sbv2 aggregator:update AGGREGATORKEY`](#sbv2-aggregatorupdate-aggregatorkey) ## `sbv2 aggregator:add:job AGGREGATORKEY` @@ -108,7 +107,7 @@ OPTIONS --varianceThreshold=varianceThreshold override source aggregator's varianceThreshold EXAMPLE - $ sbv2 aggregator:create:copy 8SXvChNYFhRq4EZuZvnhjrB3jJRQCv4k3P4W6hesH3Ee + $ sbv2 aggregator:create:copy 8SXvChNYFhRq4EZuZvnhjrB3jJRQCv4k3P4W6hesH3Ee AY3vpUu6v49shWajeFjHjgikYfaBWNJgax8zoEouUDTs --keypair ../payer-keypair.json ``` @@ -151,7 +150,7 @@ ALIASES $ sbv2 json:create:aggregator EXAMPLE - $ sbv2 aggregator:create:json examples/aggregator.json --keypair ../payer-keypair.json --queueKey + $ sbv2 aggregator:create:json examples/aggregator.json --keypair ../payer-keypair.json --queueKey GhYg3R1V6DmJbwuc57qZeoYG6gUuvCotUF1zU3WCj98U --outputFile aggregator.schema.json ``` @@ -302,7 +301,7 @@ ALIASES $ sbv2 set:aggregator EXAMPLE - $ sbv2 aggregator:set GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR --updateInterval 300 --minOracles 3 --keypair + $ sbv2 aggregator:set GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR --updateInterval 300 --minOracles 3 --keypair ../payer-keypair.json ``` @@ -407,7 +406,7 @@ ALIASES $ sbv2 aggregator:set:forceReport EXAMPLE - $ sbv2 aggregator:set:forceReportPeriod GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR 300 --keypair + $ sbv2 aggregator:set:forceReportPeriod GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR 300 --keypair ../payer-keypair.json ``` @@ -617,7 +616,7 @@ ALIASES $ sbv2 aggregator:set:variance EXAMPLE - $ sbv2 aggregator:set:varianceThreshold GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR 0.1 --keypair + $ sbv2 aggregator:set:varianceThreshold GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR 0.1 --keypair ../payer-keypair.json ``` diff --git a/website/api/switchboard-tasks.md b/website/api/switchboard-tasks.md index f881abb..aab53f9 100644 --- a/website/api/switchboard-tasks.md +++ b/website/api/switchboard-tasks.md @@ -20,7 +20,7 @@ Switchboard tasks can be divided into the following categories: - [**Web3 Fetch**](#web3-fetch): Retrieve on-chain data - [**Parse**](#parse): Extract a value from a response - [**Logic**](#logic): Perform some logical operation like if..else clauses -- [**Math**](#math): Perform a mathmatical operation like taking the maximum value of a list or raising a value to an exponent. +- [**Math**](#math): Perform a mathematical operation like taking the maximum value of a list or raising a value to an exponent. :::tip @@ -56,11 +56,11 @@ An object that represents a header to add to an HTTP request. 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. | +| Name | Number | Description | +| -------------- | ------ | -------------------------------------------- | +| METHOD_UNKNOWN | 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 @@ -93,7 +93,7 @@ Fetch the current price of a Solana oracle protocol | 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/markets/ | | chainlink_address | string | optional | Devnet 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. | +| 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 threshold are rejected. | ### đź› JupiterSwapTask @@ -349,7 +349,7 @@ 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. | +| aggregator_pubkey | string | optional | Specifies another aggregator result to divide by. | | job | [OracleJob](#OracleJob) | optional | A job whose result is computed before dividing our numerical input by that result. | ### đź› PowTask @@ -469,7 +469,7 @@ Fetch the current price of a Solana oracle protocol | 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/markets/ | | chainlink_address | string | optional | Devnet 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](#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. | +| pyth_allowed_confidence_interval | [double](#double) | optional | Value (as a percentage) that the lower bound confidence interval is of the actual value. Confidence intervals that are larger that this threshold are rejected. | ## đź› JsonParseTask diff --git a/website/cSpell.json b/website/cSpell.json index d3ff810..4bf9382 100644 --- a/website/cSpell.json +++ b/website/cSpell.json @@ -104,7 +104,40 @@ "jobinitparams", "setbatchsize", "aggregatorupdate", - "openround" + "aggregatorcreatejson", + "definitionfile", + "addjob", + "aggregatoraddjob", + "removejob", + "aggregatoremovejob", + "sethistorybuffer", + "setminjobs", + "setminoracles", + "crankinitparams", + "openround", + "Sysvar", + "AAAA", + "BADC", + "BACD", + "ADDA", + "CBCB", + "ABDC", + "DBBD", + "CACA", + "disincentivize", + "repush", + "repushed", + "Composability", + "pyth", + "chainlink", + "walkthrough", + "defi", + "sushiswap", + "solend", + "larix", + "mbps", + "genesys", + "syndica" ], "ignoreRegExpList": [ "\\((.*)\\)", // Markdown links diff --git a/website/docs-1/feeds/publisher/overview.mdx b/website/docs-1/feeds/publisher/overview.mdx index 8c91841..bb8f992 100644 --- a/website/docs-1/feeds/publisher/overview.mdx +++ b/website/docs-1/feeds/publisher/overview.mdx @@ -9,7 +9,6 @@ import MarkdownImage from "/src/components/MarkdownImage"; import { Box, Typography, Grid } from "@mui/material"; import Link from "@docusaurus/Link"; - Link: publish.switchboard.xyz @@ -17,7 +16,7 @@ import Link from "@docusaurus/Link"; ## Overview -The publisher site is a decentralized marketplace that allows anyone to build a data feed and deploy it on-chain. The site includes a directory of pre-defined feeds from popular sources such as FTX, Coinbase, or any permissionless Serum market. The publisher site streamlines the on-chain workflow and allows a user to configure a data feed from a convienent UI. A Switchboard data feed has the following account structure: +The publisher site is a decentralized marketplace that allows anyone to build a data feed and deploy it on-chain. The site includes a directory of pre-defined feeds from popular sources such as FTX, Coinbase, or any permissionless Serum market. The publisher site streamlines the on-chain workflow and allows a user to configure a data feed from a convenient UI. A Switchboard data feed has the following account structure: diff --git a/website/docs-1/private-queues.mdx b/website/docs-1/private-queues.mdx index 13afb9b..0383183 100644 --- a/website/docs-1/private-queues.mdx +++ b/website/docs-1/private-queues.mdx @@ -11,7 +11,7 @@ Switchboard provides the ability to create your own queue with your own set of o Oracles can be provided a `configs.json` file to store various configurations needed to execute job definitions. If an oracle encounters a job definition with a variable, it will parse the `configs.json` and embed the value in the job definition. -Oracles can embed API Keys on a per job basis by specifying the jobAccount public key or by using an asterik character to use the variable for multiple job definitions. **_Wildcard variables should use a unique name to prevent incorrect substitution._** +Oracles can embed API Keys on a per job basis by specifying the jobAccount public key or by using an asterisk character to use the variable for multiple job definitions. **_Wildcard variables should use a unique name to prevent incorrect substitution._** ```json title="configs.json" { @@ -30,7 +30,7 @@ Oracles can embed API Keys on a per job basis by specifying the jobAccount publi :::caution -Private queue's should **_ALWAYS_** have `unpermissionedFeedsEnabled` set to false. Allowing unpermitted feeds could result in a malicous actor creating a job definition that leaks your sensitive API keys. +Private queue's should **_ALWAYS_** have `unpermissionedFeedsEnabled` set to false. Allowing unpermitted feeds could result in a malicious actor creating a job definition that leaks your sensitive API keys. ::: diff --git a/website/docs/feed/publisher/overview.mdx b/website/docs/feed/publisher/overview.mdx index ed360f8..76a0e8b 100644 --- a/website/docs/feed/publisher/overview.mdx +++ b/website/docs/feed/publisher/overview.mdx @@ -12,7 +12,7 @@ import Link from "@docusaurus/Link"; # publish.switchboard.xyz -The publisher site is a decentralized marketplace that allows anyone to build a data feed and deploy it on-chain. The site includes a directory of pre-defined feeds from popular sources such as FTX, Coinbase, or any permissionless Serum market. The publisher site streamlines the on-chain workflow and allows a user to configure a data feed from a convienent UI. +The publisher site is a decentralized marketplace that allows anyone to build a data feed and deploy it on-chain. The site includes a directory of pre-defined feeds from popular sources such as FTX, Coinbase, or any permissionless Serum market. The publisher site streamlines the on-chain workflow and allows a user to configure a data feed from a convenient UI. ## Connect diff --git a/website/docs/oracle/service/gcp.mdx b/website/docs/oracle/service/gcp.mdx index e06ebd9..f3b1064 100644 --- a/website/docs/oracle/service/gcp.mdx +++ b/website/docs/oracle/service/gcp.mdx @@ -318,7 +318,7 @@ gcloud config set project switchboard-oracle-cluster [Google - gcloud projects create](https://cloud.google.com/sdk/gcloud/reference/projects/create) -gCloud Conifg +gCloud Config Set the default zone using [list of regions and zones](https://cloud.google.com/compute/docs/regions-zones#available) diff --git a/website/docs/oracle/service/requirements.mdx b/website/docs/oracle/service/requirements.mdx index 234b663..7c49dac 100644 --- a/website/docs/oracle/service/requirements.mdx +++ b/website/docs/oracle/service/requirements.mdx @@ -24,7 +24,7 @@ Currently the Switchboard oracle is a single threaded Node.js application with n A Switchboard oracle should have a reliable RPC endpoint with no rate limiting in order to respond in a timely manner. RPC providers will need to have `--full-rpc-api` enabled in their validator config, along with the ability to support fetching 100 program accounts in a single getProgramAccounts request. -Switchboard recommendeds the following RPC providers: +Switchboard recommends the following RPC providers: - RPC Pool - GenesysGo diff --git a/website/docs/queue/architecture.mdx b/website/docs/queue/architecture.mdx index 649ae61..a2e5232 100644 --- a/website/docs/queue/architecture.mdx +++ b/website/docs/queue/architecture.mdx @@ -79,7 +79,7 @@ The queue uses `queue.gcIdx` to track its garbage collection index. When an orac Oracle queue resources, such as oracles, aggregators, VRF accounts, or buffer relayer accounts, _MUST_ have an associated [PermissionAccount](/idl/accounts/PermissionAccountData) initialized before interacting with a queue. Permissions are granted by `queue.authority`, which could be a DAO controlled account to allow network participants to vote on new entrants. -Oracles _MUST_ have **PermitOracleHeartbeat** permissions before heartbeating on a queue. This is to prevent a malicous actor from spinning up a plethora of oracles until it obtains the super majority, at which point it could misreport data feed results and cause honest oracles to be slashed. +Oracles _MUST_ have **PermitOracleHeartbeat** permissions before heartbeating on a queue. This is to prevent a malicious actor from spinning up a plethora of oracles until it obtains the super majority, at which point it could misreport data feed results and cause honest oracles to be slashed. See the table below for the minimum required permissions for a resource based on the queues settings: @@ -132,7 +132,7 @@ An oracle queue can be governed by its network participants to control the vario - `queue.minStake` - require a higher up-front cost for oracles to entice honest behavior - `queue.reward` - control the oracle reward payout for successfully fulfilling update request -- `queue.slashingEnabled` - to disincentivize malcious oracle behavior +- `queue.slashingEnabled` - to disincentivize malicious oracle behavior - Permit new oracles to join the network ## More Information diff --git a/website/docs/queue/private-queues.mdx b/website/docs/queue/private-queues.mdx index e6ba9f0..9fd244c 100644 --- a/website/docs/queue/private-queues.mdx +++ b/website/docs/queue/private-queues.mdx @@ -13,7 +13,7 @@ Switchboard provides the ability to create your own queue with your own set of o Oracles can be provided a `configs.json` file to store various configurations needed to execute job definitions. If an oracle encounters a job definition with a variable, it will parse the `configs.json` and embed the value in the job definition. -Oracles can embed API Keys on a per job basis by specifying the jobAccount public key or by using an asterik character to use the variable for multiple job definitions. **_Wildcard variables should use a unique name to prevent incorrect substitution._** +Oracles can embed API Keys on a per job basis by specifying the jobAccount public key or by using an asterisk character to use the variable for multiple job definitions. **_Wildcard variables should use a unique name to prevent incorrect substitution._** ```json title="configs.json" { @@ -32,7 +32,7 @@ Oracles can embed API Keys on a per job basis by specifying the jobAccount publi :::caution -Private queue's should **_ALWAYS_** have `unpermissionedFeedsEnabled` set to false. Allowing unpermitted feeds could result in a malicous actor creating a job definition that leaks your sensitive API keys. +Private queue's should **_ALWAYS_** have `unpermissionedFeedsEnabled` set to false. Allowing unpermitted feeds could result in a malicious actor creating a job definition that leaks your sensitive API keys. ::: diff --git a/website/idl/_aggregator_instructions.mdx b/website/idl/_aggregator_instructions.mdx index dbd09b6..0f43f33 100644 --- a/website/idl/_aggregator_instructions.mdx +++ b/website/idl/_aggregator_instructions.mdx @@ -109,7 +109,7 @@ import { Typography } from "@mui/material";
CLI diff --git a/website/idl/_crank_instructions.mdx b/website/idl/_crank_instructions.mdx index 4625945..ffe922a 100644 --- a/website/idl/_crank_instructions.mdx +++ b/website/idl/_crank_instructions.mdx @@ -28,7 +28,7 @@ import { Typography } from "@mui/material"; Typescript
- + Python diff --git a/website/idl/accounts/OracleQueueAccountData.md b/website/idl/accounts/OracleQueueAccountData.md index c53de4c..1db201a 100644 --- a/website/idl/accounts/OracleQueueAccountData.md +++ b/website/idl/accounts/OracleQueueAccountData.md @@ -24,4 +24,4 @@ | enableBufferRelayers | bool | Whether oracles are permitted to fulfill buffer relayer update request. | | ebuf | u8[968] | Reserved. | | maxSize | u32 | Maximum number of oracles a queue can support. | -| dataBuffer | publicKey | The public key of the OracleQueueBuffer account holding a collection of Oracle pubkeys that haver succesfully heartbeated before the queues `oracleTimeout`. | +| dataBuffer | publicKey | The public key of the OracleQueueBuffer account holding a collection of Oracle pubkeys that haver successfully heartbeated before the queues `oracleTimeout`. | diff --git a/website/idl/accounts/VrfAccountData.md b/website/idl/accounts/VrfAccountData.md index 5c71a5a..982c26c 100644 --- a/website/idl/accounts/VrfAccountData.md +++ b/website/idl/accounts/VrfAccountData.md @@ -1,16 +1,16 @@ Size: 29058 Bytes
Rent Exemption: 0.203134560SOL

-| Field | Type | Description | -|--|--|--| -| status | [VrfStatus](/idl/types/VrfStatus) | The current status of the VRF account. | -| counter | u128 | Incremental counter for tracking VRF rounds. | -| authority | publicKey | On-chain account delegated for making account changes. | -| oracleQueue | publicKey | The [OracleQueueAccountData](/idl/accounts/OracleQueueAccountData) that is assigned to fulfill VRF update request. | -| escrow | publicKey | The token account used to hold funds for VRF update request. | -| callback | [CallbackZC](/idl/types/CallbackZC) | The callback that is invoked when an update request is succesfully verified. | -| batchSize | u32 | The number of oracles assigned to a VRF update request. | -| builders | [VrfBuilder](/idl/types/VrfBuilder)[8] | Struct containing the intermediate state between VRF crank actions. | -| buildersLen | u32 | The number of builders. | -| testMode | bool | | -| currentRound | [VrfRound](/idl/types/VrfRound) | Oracle results from the current round of update request that has not been accepted as valid yet | -| ebuf | u8[1024] | Reserved. | +| Field | Type | Description | +| ------------ | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| status | [VrfStatus](/idl/types/VrfStatus) | The current status of the VRF account. | +| counter | u128 | Incremental counter for tracking VRF rounds. | +| authority | publicKey | On-chain account delegated for making account changes. | +| oracleQueue | publicKey | The [OracleQueueAccountData](/idl/accounts/OracleQueueAccountData) that is assigned to fulfill VRF update request. | +| escrow | publicKey | The token account used to hold funds for VRF update request. | +| callback | [CallbackZC](/idl/types/CallbackZC) | The callback that is invoked when an update request is successfully verified. | +| batchSize | u32 | The number of oracles assigned to a VRF update request. | +| builders | [VrfBuilder](/idl/types/VrfBuilder)[8] | Struct containing the intermediate state between VRF crank actions. | +| buildersLen | u32 | The number of builders. | +| testMode | bool | | +| currentRound | [VrfRound](/idl/types/VrfRound) | Oracle results from the current round of update request that has not been accepted as valid yet | +| ebuf | u8[1024] | Reserved. | diff --git a/website/idl/descriptions.json b/website/idl/descriptions.json index 0c102c8..a6a7fea 100644 --- a/website/idl/descriptions.json +++ b/website/idl/descriptions.json @@ -430,7 +430,7 @@ }, { "name": "dataBuffer", - "description": "The public key of the OracleQueueBuffer account holding a collection of Oracle pubkeys that haver succesfully heartbeated before the queues `oracleTimeout`." + "description": "The public key of the OracleQueueBuffer account holding a collection of Oracle pubkeys that haver successfully heartbeated before the queues `oracleTimeout`." } ] }, @@ -516,7 +516,7 @@ }, { "name": "callback", - "description": "The callback that is invoked when an update request is succesfully verified." + "description": "The callback that is invoked when an update request is successfully verified." }, { "name": "batchSize", @@ -1687,7 +1687,7 @@ }, { "name": "dataBuffer", - "description": "The public key of the OracleQueueBuffer account holding a collection of Oracle pubkeys that haver succesfully heartbeated before the queues `oracleTimeout`." + "description": "The public key of the OracleQueueBuffer account holding a collection of Oracle pubkeys that haver successfully heartbeated before the queues `oracleTimeout`." }, { "name": "tokenProgram", diff --git a/website/static/api/py/switchboardpy.html b/website/static/api/py/switchboardpy.html index 5cd79f6..4981289 100644 --- a/website/static/api/py/switchboardpy.html +++ b/website/static/api/py/switchboardpy.html @@ -1,863 +1,2275 @@ - + - - - - + + + + switchboardpy API documentation - - - - - - - + + + + + + + +
-
-

-switchboardpy

+
+

switchboardpy

-

The Switchboard Python v2 Wrapper.

-
+

The Switchboard Python v2 Wrapper.

-
- View Source -
"""The Switchboard Python v2 Wrapper."""
+        
+ View Source +
+
"""The Switchboard Python v2 Wrapper."""
 
 from switchboardpy.aggregator import (
     AggregatorAccount, 
@@ -910,24 +2322,24 @@ switchboardpy    
     "VaultTransferParams",
     "SwitchboardDecimal"
 ]
-
- +
+
+
+
+
+ #   -
-
-
- #   +
@dataclass
-
@dataclass
+ class + AccountParams: +
- class - AccountParams: - - -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class AccountParams:
 
     """program referencing the Switchboard program and IDL."""
@@ -941,77 +2353,83 @@ switchboardpy    
 
     """Keypair of the account being referenced. This may not always be populated."""
     keypair: Keypair = None
-
- +
+
-

program referencing the Switchboard program and IDL.

-
+
+

program referencing the Switchboard program and IDL.

+
+
+
+ #   -
-
#   + AccountParams( program: anchorpy.program.core.Program, public_key: + solana.publickey.PublicKey = None, keypair: solana.keypair.Keypair + = None ) +
+
+
+
+ #   - - AccountParams( - program: anchorpy.program.core.Program, - public_key: solana.publickey.PublicKey = None, - keypair: solana.keypair.Keypair = None -) -
+ program: anchorpy.program.core.Program +
- - +
+

+ Public key of the account being referenced. This will always be + populated within the account wrapper. +

+
+
+
+
+ #   -
-
-
#   + public_key: solana.publickey.PublicKey = None +
- program: anchorpy.program.core.Program -
+
+

+ Keypair of the account being referenced. This may not always be + populated. +

+
+
+
+
+ #   - -

Public key of the account being referenced. This will always be populated -within the account wrapper.

-
+ keypair: solana.keypair.Keypair = None +
+
+
+
+
+ #   + class + AggregatorAccount: +
- -
-
#   - - public_key: solana.publickey.PublicKey = None -
- - -

Keypair of the account being referenced. This may not always be populated.

-
- - -
-
-
#   - - keypair: solana.keypair.Keypair = None -
- - - - -
-
-
-
- #   - - - class - AggregatorAccount: -
- -
- View Source -
class AggregatorAccount:
+        
+ View Source +
+
class AggregatorAccount:
     """AggregatorAccount is the wrapper for an Aggregator, the structure for that keeps aggregated feed data / metadata.
 
     Attributes:
@@ -1595,29 +3013,40 @@ within the account wrapper.

remaining_accounts=[{"is_signer": False, "is_writable": True, "pubkey": pubkey} for pubkey in remaining_accounts] ) ) -
- +
+
-

AggregatorAccount is the wrapper for an Aggregator, the structure for that keeps aggregated feed data / metadata.

+
+

+ AggregatorAccount is the wrapper for an Aggregator, the structure + for that keeps aggregated feed data / metadata. +

-

Attributes: - program (anchor.Program): The anchor program ref - public_key (PublicKey | None): This aggregator's public key - keypair (Keypair | None): this aggregator's keypair

-
+

+ Attributes: program (anchor.Program): The anchor program ref + public_key (PublicKey | None): This aggregator's public key keypair + (Keypair | None): this aggregator's keypair +

+
+
+
+ #   -
-
#   + AggregatorAccount(params: + switchboardpy.AccountParams) +
- - AggregatorAccount(params: switchboardpy.AccountParams) -
- -
+
View Source -
    def __init__(self, params: AccountParams):
+            
+
    def __init__(self, params: AccountParams):
         if params.public_key is None and params.keypair is None:
             raise ValueError('User must provide either a publicKey or keypair for account use.')
         if params.keypair and params.public_key and params.keypair.public_key != params.public_key:
@@ -1625,84 +3054,89 @@ within the account wrapper.

self.program = params.program self.public_key = params.keypair.public_key if params.keypair else params.public_key self.keypair = params.keypair -
+
+
+
+
+
+
+ #   - + keypair +
- +
+

Get name of an aggregator.

-
-
-
#   +

Args: aggregator (Any): Anchor-loaded aggregator

- keypair -
+

Returns: name string of the aggregator

+
+
+
+
+ #   - -

Get name of an aggregator.

- -

Args: - aggregator (Any): Anchor-loaded aggregator

- -

Returns: - name string of the aggregator

-
- - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - get_name(aggregator: Any) -> str: -
+ get_name(aggregator: Any) -> str: +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def get_name(aggregator: Any) -> str:
         return  ''.join(map(chr, *aggregator.name)).decode("utf-8").replace(u"\u0000", "*").encode("utf-8")
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - load_data(self): -
+ load_data(self): +
-
+
View Source -
    async def load_data(self):
+            
+
    async def load_data(self):
         aggregator = await self.program.account["AggregatorAccountData"].fetch(self.public_key)
         aggregator.ebuf = None
         return aggregator
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - load_history(self, aggregator: Any = None) -> Any: -
+ load_history(self, aggregator: Any = None) -> Any: +
-
+
View Source -
    async def load_history(self, aggregator: Any = None) -> Any:
+            
+
    async def load_history(self, aggregator: Any = None) -> Any:
 
         # if aggregator data passed in - use that, else load this aggregator
         aggregator = aggregator if aggregator else await self.load_data()
@@ -1740,70 +3174,85 @@ within the account wrapper.

else: front.append(row) return front.extend(tail) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - get_latest_value(self, aggregator: Optional[Any] = None) -> decimal.Decimal: -
+ get_latest_value(self, aggregator: Optional[Any] = None) -> + decimal.Decimal: +
-
+
View Source -
    async def get_latest_value(self, aggregator: Optional[Any] = None) -> Decimal:
+            
+
    async def get_latest_value(self, aggregator: Optional[Any] = None) -> Decimal:
         aggregator = aggregator if aggregator else await self.load_data()
         if hasattr(aggregator, 'latest_confirmed_round') and aggregator.latest_confirmed_round.num_success == 0:
             raise ValueError('Aggregator currently holds no value.')
         return SwitchboardDecimal.sbd_to_decimal(aggregator.latest_confirmed_round.result)
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - get_latest_feed_timestamp(self, aggregator: Optional[Any] = None) -> decimal.Decimal: -
+ get_latest_feed_timestamp(self, aggregator: Optional[Any] = None) -> + decimal.Decimal: +
-
+
View Source -
    async def get_latest_feed_timestamp(self, aggregator: Optional[Any] = None) -> Decimal:
+            
+
    async def get_latest_feed_timestamp(self, aggregator: Optional[Any] = None) -> Decimal:
         aggregator = aggregator if aggregator else await self.load_data()
         if hasattr(aggregator, 'latest_confirmed_round') and aggregator.latest_confirmed_round.num_success == 0:
             raise ValueError('Aggregator currently holds no value.')
 
         return aggregator.latest_confirmed_round.round_open_timestamp
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - should_report_value(value: decimal.Decimal, aggregator: Optional[Any] = None) -> bool: -
+ should_report_value(value: decimal.Decimal, aggregator: Optional[Any] = None) -> + bool: +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def should_report_value(value: Decimal, aggregator: Optional[Any] = None) -> bool:
         if aggregator.latestConfirmedRound and aggregator.latest_confirmed_round.num_success == 0:
             return True
@@ -1821,24 +3270,33 @@ within the account wrapper.

if value > latest_result + variance_threshold: return True return False -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - get_confirmed_round_results(self, aggregator: Optional[Any] = None) -> decimal.Decimal: -
+ get_confirmed_round_results(self, aggregator: Optional[Any] = None) -> + decimal.Decimal: +
-
+
View Source -
    async def get_confirmed_round_results(self, aggregator: Optional[Any] = None) -> Decimal:
+            
+
    async def get_confirmed_round_results(self, aggregator: Optional[Any] = None) -> Decimal:
         
         aggregator = aggregator if aggregator else await self.load_data()
         if hasattr(aggregator, 'latest_confirmed_round') and aggregator.latest_confirmed_round.num_success == 0:
@@ -1851,25 +3309,30 @@ within the account wrapper.

"value": SwitchboardDecimal.sbd_to_decimal(aggregator.latest_confirmed_round.medians_data[i]) }) return results -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - produce_job_hash(jobs: list[switchboardpy.OracleJob]): -
+ produce_job_hash(jobs: list[switchboardpy.OracleJob]): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def produce_job_hash(jobs: list[OracleJob]):
         hash = hashlib.sha256()
         for job in jobs:
@@ -1877,24 +3340,28 @@ within the account wrapper.

job_hasher.update(job.SerializeToString()) hash.update(job_hasher.digest()) return hash -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - load_jobs(self, aggregator: Optional[Any] = None) -> decimal.Decimal: -
+ load_jobs(self, aggregator: Optional[Any] = None) -> + decimal.Decimal: +
-
+
View Source -
    async def load_jobs(self, aggregator: Optional[Any] = None) -> Decimal:
+            
+
    async def load_jobs(self, aggregator: Optional[Any] = None) -> Decimal:
         coder = anchorpy.AccountsCoder(self.program.idl)
         aggregator = aggregator if aggregator else await self.load_data()
         job_accounts_raw = await anchorpy.utils.rpc.get_multiple_accounts(self.program.provider, aggregator.job_pubkeys_data)[:aggregator.job_pubkeys_size]
@@ -1903,24 +3370,28 @@ within the account wrapper.

# Deserialize OracleJob objects from each decoded JobAccountData return [OracleJob.ParseFromString(coder.decode(job)) for job in job_accounts_raw] -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - load_hashes(self, aggregator: Optional[Any] = None) -> decimal.Decimal: -
+ load_hashes(self, aggregator: Optional[Any] = None) -> + decimal.Decimal: +
-
+
View Source -
    async def load_hashes(self, aggregator: Optional[Any] = None) -> Decimal:
+            
+
    async def load_hashes(self, aggregator: Optional[Any] = None) -> Decimal:
         coder = anchorpy.AccountsCoder(self.program.idl)
         aggregator = aggregator if aggregator else await self.loadData()
         job_accounts_raw = await anchorpy.utils.rpc.get_multiple_accounts(self.program.provider, aggregator.job_pubkeys_data)[:aggregator.job_pubkeys_size]
@@ -1929,47 +3400,52 @@ within the account wrapper.

# get hashes from each decoded JobAccountData return [coder.decode(job).hash for job in job_accounts_raw] -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - def size(self): -
+
-
+
View Source -
    def size(self):
+            
+
    def size(self):
         return self.program.account["AggregatorAccountData"].size
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
async def - create( - program: anchorpy.program.core.Program, - aggregator_init_params: switchboardpy.AggregatorInitParams -): -
+ create( program: anchorpy.program.core.Program, aggregator_init_params: + switchboardpy.AggregatorInitParams + ): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     async def create(program: anchorpy.Program, aggregator_init_params: AggregatorInitParams):
         aggregator_account = aggregator_init_params.keypair or Keypair.generate()
         authority = aggregator_init_params.authority or aggregator_account.public_key
@@ -2017,27 +3493,31 @@ within the account wrapper.

) ) return AggregatorAccount(AccountParams(program=program, keypair=aggregator_account)) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - set_history_buffer( - self, - params: switchboardpy.AggregatorSetHistoryBufferParams -): -
+ set_history_buffer( self, params: + switchboardpy.AggregatorSetHistoryBufferParams + ): +
-
+
View Source -
    async def set_history_buffer(self, params: AggregatorSetHistoryBufferParams):
+            
+
    async def set_history_buffer(self, params: AggregatorSetHistoryBufferParams):
         buffer = Keypair.generate()
         program = self.program
         authority = params.authority or self.keypair
@@ -2068,28 +3548,30 @@ within the account wrapper.

] ) ) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - add_job( - self, - job: switchboardpy.JobAccount, - authority: Optional[solana.keypair.Keypair] = None -) -> <function NewType.<locals>.new_type at 0x10deb5b80>: -
+ add_job( self, job: switchboardpy.JobAccount, + authority: Optional[solana.keypair.Keypair] = None ) -> + <function NewType.<locals>.new_type at + 0x10deb5b80>: +
-
+
View Source -
    async def add_job(self, job: JobAccount, authority: Optional[Keypair] = None) -> TransactionSignature:
+            
+
    async def add_job(self, job: JobAccount, authority: Optional[Keypair] = None) -> TransactionSignature:
         authority = authority or self.keypair
         
         return await self.program.rpc['aggregator_add_job'](
@@ -2105,27 +3587,29 @@ within the account wrapper.

signers=[authority] ) ) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - lock( - self, - authority: Optional[solana.keypair.Keypair] = None -) -> <function NewType.<locals>.new_type at 0x10deb5b80>: -
+ lock( self, authority: Optional[solana.keypair.Keypair] = None ) + -> <function NewType.<locals>.new_type at + 0x10deb5b80>: +
-
+
View Source -
    async def lock(self, authority: Optional[Keypair] = None) -> TransactionSignature:
+            
+
    async def lock(self, authority: Optional[Keypair] = None) -> TransactionSignature:
         authority = authority or self.keypair
         return await self.program.rpc['aggregator_lock'](
             ctx=anchorpy.Context(
@@ -2136,28 +3620,29 @@ within the account wrapper.

signers=[authority] ) ) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - set_authority( - self, - new_authority: solana.keypair.Keypair, - current_authority: Optional[solana.keypair.Keypair] = None -) -> <function NewType.<locals>.new_type at 0x10deb5b80>: -
+ set_authority( self, new_authority: solana.keypair.Keypair, current_authority: + Optional[solana.keypair.Keypair] = None ) -> <function + NewType.<locals>.new_type at 0x10deb5b80>: +
-
+
View Source -
    async def set_authority(self, new_authority: Keypair, current_authority: Optional[Keypair] = None) -> TransactionSignature:
+            
+
    async def set_authority(self, new_authority: Keypair, current_authority: Optional[Keypair] = None) -> TransactionSignature:
         current_authority = current_authority or self.keypair
         return await self.program.rpc['aggregator_set_authoirty'](
             ctx=anchorpy.Context(
@@ -2169,29 +3654,33 @@ within the account wrapper.

signers=[current_authority] ) ) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - remove_job( - self, - aggregator: Any, - oracle_account: switchboardpy.OracleAccount, - params: switchboardpy.AggregatorSaveResultParams -) -> <function NewType.<locals>.new_type at 0x10deb5b80>: -
+ remove_job( self, aggregator: Any, oracle_account: + switchboardpy.OracleAccount, params: + switchboardpy.AggregatorSaveResultParams + ) -> <function NewType.<locals>.new_type at + 0x10deb5b80>: +
-
+
View Source -
    async def remove_job(self, aggregator: Any, oracle_account: OracleAccount, params: AggregatorSaveResultParams) -> TransactionSignature:
+            
+
    async def remove_job(self, aggregator: Any, oracle_account: OracleAccount, params: AggregatorSaveResultParams) -> TransactionSignature:
         return await self.program.provider.send(
             tx=(
                 await self.save_result_txn(
@@ -2201,52 +3690,58 @@ within the account wrapper.

) ) ) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - get_oracle_index(self, oracle_pubkey: solana.publickey.PublicKey): -
+ get_oracle_index(self, oracle_pubkey: solana.publickey.PublicKey): +
-
+
View Source -
    async def get_oracle_index(self, oracle_pubkey: PublicKey):
+            
+
    async def get_oracle_index(self, oracle_pubkey: PublicKey):
         aggregator = await self.load_data()
         for i, curr_oracle_pubkey in enumerate(aggregator.current_round.oracle_pubkeys_data):
             if curr_oracle_pubkey == oracle_pubkey:
                 return i
         return -1
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - save_result_txn( - self, - aggregator: Any, - oracle_account: switchboardpy.OracleAccount, - params: switchboardpy.AggregatorSaveResultParams -): -
+ save_result_txn( self, aggregator: Any, oracle_account: + switchboardpy.OracleAccount, params: + switchboardpy.AggregatorSaveResultParams + ): +
-
+
View Source -
    async def save_result_txn(self, aggregator: Any, oracle_account: OracleAccount, params: AggregatorSaveResultParams):
+            
+
    async def save_result_txn(self, aggregator: Any, oracle_account: OracleAccount, params: AggregatorSaveResultParams):
         payer_keypair = Keypair.from_secret_key(self.program.provider.wallet.payer.secret_key)
         remaining_accounts: list[PublicKey] = []
         for i in range(aggregator.oracle_request_batch_size):
@@ -2308,27 +3803,25 @@ within the account wrapper.

remaining_accounts=[{"is_signer": False, "is_writable": True, "pubkey": pubkey} for pubkey in remaining_accounts] ) ) -
+
+
+
+
+
+
+
+ #   - +
@dataclass
- + class + AggregatorHistoryRow: +
- -
-
-
- #   - -
@dataclass
- - class - AggregatorHistoryRow: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class AggregatorHistoryRow:
     """AggregatorHistoryRow is a wrapper for the row structure of elements in the aggregator history buffer.
     
@@ -2356,59 +3849,75 @@ within the account wrapper.

decimal = SwitchboardDecimal.sbd_to_decimal({"mantissa": mantissa, "scale": scale}) res = AggregatorHistoryRow(timestamp, decimal) return res -
- +
+
-

AggregatorHistoryRow is a wrapper for the row structure of elements in the aggregator history buffer.

+
+

+ AggregatorHistoryRow is a wrapper for the row structure of elements + in the aggregator history buffer. +

-

Attributes: - timestamp (int): timestamp of the aggregator result - value (Decimal): Aggregator value at the timestamp

-
+

+ Attributes: timestamp (int): timestamp of the aggregator result + value (Decimal): Aggregator value at the timestamp +

+
+
+
+ #   -
-
#   + AggregatorHistoryRow(timestamp: int, value: decimal.Decimal) +
+
+
+
+ #   - - AggregatorHistoryRow(timestamp: int, value: decimal.Decimal) -
+ value: decimal.Decimal +
- - +
+

+ Generate an AggregatorHistoryRow from a retrieved buffer + representation +

-
-
-
#   +

+ Args: buf (list): Anchor-loaded buffer representation of + AggregatorHistoryRow +

- value: decimal.Decimal -
+

Returns: AggregatorHistoryRow

+
+
+
+
+ #   - -

Generate an AggregatorHistoryRow from a retrieved buffer representation

- -

Args: - buf (list): Anchor-loaded buffer representation of AggregatorHistoryRow

- -

Returns: - AggregatorHistoryRow

-
- - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - from_buffer(buf: bytes): -
+ from_buffer(buf: bytes): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def from_buffer(buf: bytes):
         timestamp: int = struct.unpack_from("<L", buf[:8])[0]
         mantissa: int = struct.unpack_from("<L", buf[8:24])[0]
@@ -2416,27 +3925,25 @@ within the account wrapper.

decimal = SwitchboardDecimal.sbd_to_decimal({"mantissa": mantissa, "scale": scale}) res = AggregatorHistoryRow(timestamp, decimal) return res -
+
+
+
+
+
+
+
+ #   - +
@dataclass
- + class + AggregatorInitParams: +
- -
-
-
- #   - -
@dataclass
- - class - AggregatorInitParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class AggregatorInitParams:
     """Number of oracles to request on aggregator update."""
     batch_size: int
@@ -2497,226 +4004,298 @@ within the account wrapper.

the aggregator keypair. """ authority: PublicKey = None -
- +
+
-

Number of oracles to request on aggregator update.

-
+
+

Number of oracles to request on aggregator update.

+
+
+
+ #   -
-
#   + AggregatorInitParams( batch_size: int, min_required_oracle_results: int, + min_required_job_results: int, min_update_delay_seconds: int, + queue_account: + switchboardpy.OracleQueueAccount, name: bytes = None, metadata: bytes = None, start_after: int = + None, variance_threshold: decimal.Decimal = None, + force_report_period: int = None, expiration: int = None, keypair: + solana.keypair.Keypair = None, author_wallet: + solana.publickey.PublicKey = None, authority: + solana.publickey.PublicKey = None ) +
+
+
+
+ #   - - AggregatorInitParams( - batch_size: int, - min_required_oracle_results: int, - min_required_job_results: int, - min_update_delay_seconds: int, - queue_account: switchboardpy.OracleQueueAccount, - name: bytes = None, - metadata: bytes = None, - start_after: int = None, - variance_threshold: decimal.Decimal = None, - force_report_period: int = None, - expiration: int = None, - keypair: solana.keypair.Keypair = None, - author_wallet: solana.publickey.PublicKey = None, - authority: solana.publickey.PublicKey = None -) -
+ batch_size: int +
- - +
+

+ Minimum number of oracle responses required before a round is + validated. +

+
+
+
+
+ #   -
-
-
#   + min_required_oracle_results: int +
- batch_size: int -
+
+

Minimum number of seconds required between aggregator rounds.

+
+
+
+
+ #   - -

Minimum number of oracle responses required before a round is validated.

-
+ min_required_job_results: int +
+
+

Minimum number of seconds required between aggregator rounds.

+
+
+
+
+ #   -
-
-
#   + min_update_delay_seconds: int +
- min_required_oracle_results: int -
+
+

The queue to which this aggregator will be linked

+
+
+
+
+ #   - -

Minimum number of seconds required between aggregator rounds.

-
+ queue_account: + switchboardpy.OracleQueueAccount +
+
+

Name of the aggregator to store on-chain.

+
+
+
+
+ #   -
-
-
#   + name: bytes = None +
- min_required_job_results: int -
+
+

Metadata of the aggregator to store on-chain.

+
+
+
+
+ #   - -

Minimum number of seconds required between aggregator rounds.

-
+ metadata: bytes = None +
+
+

unix_timestamp for which no feed update will occur before.

+
+
+
+
+ #   -
-
-
#   + start_after: int = None +
- min_update_delay_seconds: int -
+
+

+ Change percentage required between a previous round and the + current round. If variance percentage is not met, reject new + oracle responses. +

+
+
+
+
+ #   - -

The queue to which this aggregator will be linked

-
+ variance_threshold: decimal.Decimal = None +
+
+

+ Number of seconds for which, even if the variance threshold is not + passed, accept new responses from oracles. +

+
+
+
+
+ #   -
-
-
#   + force_report_period: int = None +
- queue_account: switchboardpy.OracleQueueAccount -
+
+

+ unix_timestamp after which funds may be withdrawn from the + aggregator. null/undefined/0 means the feed has no expiration. +

+
+
+
+
+ #   - -

Name of the aggregator to store on-chain.

-
+ expiration: int = None +
+
+

+ An optional wallet for receiving kickbacks from job usage in + feeds. Defaults to token vault. +

+
+
+
+
+ #   -
-
-
#   + keypair: solana.keypair.Keypair = None +
- name: bytes = None -
+
+

+ An optional wallet for receiving kickbacks from job usage in + feeds. Defaults to token vault. +

+
+
+
+
+ #   - -

Metadata of the aggregator to store on-chain.

-
+ author_wallet: solana.publickey.PublicKey = None +
+
+

+ If included, this keypair will be the aggregator authority rather + than the aggregator keypair. +

+
+
+
+
+ #   -
-
-
#   + authority: solana.publickey.PublicKey = None +
+
+
+
+
+ #   - metadata: bytes = None -
+
@dataclass
- -

unix_timestamp for which no feed update will occur before.

-
+ class + AggregatorOpenRoundParams: + - - -
-
#   - - start_after: int = None -
- - -

Change percentage required between a previous round and the current round. -If variance percentage is not met, reject new oracle responses.

-
- - -
-
-
#   - - variance_threshold: decimal.Decimal = None -
- - -

Number of seconds for which, even if the variance threshold is not passed, -accept new responses from oracles.

-
- - -
-
-
#   - - force_report_period: int = None -
- - -

unix_timestamp after which funds may be withdrawn from the aggregator. -null/undefined/0 means the feed has no expiration.

-
- - -
-
-
#   - - expiration: int = None -
- - -

An optional wallet for receiving kickbacks from job usage in feeds. -Defaults to token vault.

-
- - -
-
-
#   - - keypair: solana.keypair.Keypair = None -
- - -

An optional wallet for receiving kickbacks from job usage in feeds. -Defaults to token vault.

-
- - -
-
-
#   - - author_wallet: solana.publickey.PublicKey = None -
- - -

If included, this keypair will be the aggregator authority rather than -the aggregator keypair.

-
- - -
-
-
#   - - authority: solana.publickey.PublicKey = None -
- - - - -
-
-
-
- #   - -
@dataclass
- - class - AggregatorOpenRoundParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class AggregatorOpenRoundParams:
 
     """The oracle queue from which oracles are assigned this update."""
@@ -2724,54 +4303,72 @@ the aggregator keypair.

"""The token wallet which will receive rewards for calling update on this feed.""" payout_wallet: PublicKey -
- +
+
-

The oracle queue from which oracles are assigned this update.

-
+
+

The oracle queue from which oracles are assigned this update.

+
+
+
+ #   -
-
#   + AggregatorOpenRoundParams( oracle_queue_account: + switchboardpy.OracleQueueAccount, payout_wallet: solana.publickey.PublicKey ) +
+
+
+
+ #   - - AggregatorOpenRoundParams( - oracle_queue_account: switchboardpy.OracleQueueAccount, - payout_wallet: solana.publickey.PublicKey -) -
+ oracle_queue_account: + switchboardpy.OracleQueueAccount +
- - +
+

+ The token wallet which will receive rewards for calling update on + this feed. +

+
+
+
+
+
+ #   -
-
-
#   +
@dataclass
- oracle_queue_account: switchboardpy.OracleQueueAccount -
+ class + AggregatorSaveResultParams: +
- -

The token wallet which will receive rewards for calling update on this feed.

-
- - - -
-
-
- #   - -
@dataclass
- - class - AggregatorSaveResultParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class AggregatorSaveResultParams:
 
     """Index in the list of oracles in the aggregator assigned to this round update."""
@@ -2806,147 +4403,175 @@ the aggregator keypair.

"""List of parsed oracles""" oracles: list[Any] -
- +
+
-

Index in the list of oracles in the aggregator assigned to this round update.

-
+
+

+ Index in the list of oracles in the aggregator assigned to this + round update. +

+
+
+
+ #   -
-
#   + AggregatorSaveResultParams( oracle_idx: int, error: bool, value: decimal.Decimal, + min_response: decimal.Decimal, max_response: decimal.Decimal, + jobs: list[switchboardpy.OracleJob], + queue_authority: solana.publickey.PublicKey, token_mint: + solana.publickey.PublicKey, oracles: list[typing.Any] ) +
+
+
+
+ #   - - AggregatorSaveResultParams( - oracle_idx: int, - error: bool, - value: decimal.Decimal, - min_response: decimal.Decimal, - max_response: decimal.Decimal, - jobs: list[switchboardpy.OracleJob], - queue_authority: solana.publickey.PublicKey, - token_mint: solana.publickey.PublicKey, - oracles: list[typing.Any] -) -
+ oracle_idx: int +
- - +
+

+ Reports that an error occured and the oracle could not send a + value. +

+
+
+
+
+ #   -
-
-
#   + error: bool +
- oracle_idx: int -
+
+

Value the oracle is responding with for this update.

+
+
+
+
+ #   - -

Reports that an error occured and the oracle could not send a value.

-
+ value: decimal.Decimal +
+
+

+ The minimum value this oracle has seen this round for the jobs + listed in the aggregator. +

+
+
+
+
+ #   -
-
-
#   + min_response: decimal.Decimal +
- error: bool -
+
+

+ The maximum value this oracle has seen this round for the jobs + listed in the aggregator. +

+
+
+
+
+ #   - -

Value the oracle is responding with for this update.

-
+ max_response: decimal.Decimal +
+
+

List of OracleJobs that were performed to produce this result

+
+
+
+
+ #   -
-
- - value: decimal.Decimal -
+
+

Authority of the queue the aggregator is attached to

+
+
+
+
+ #   - -

The minimum value this oracle has seen this round for the jobs listed in the -aggregator.

-
+ queue_authority: solana.publickey.PublicKey +
+

Program token mint

+
+
+
+ #   -
-
-
#   + token_mint: solana.publickey.PublicKey +
- min_response: decimal.Decimal -
+

List of parsed oracles

+
+
+
+
+ #   - -

The maximum value this oracle has seen this round for the jobs listed in the -aggregator.

-
+
@dataclass
+ class + AggregatorSetHistoryBufferParams: +
- -
-
#   - - max_response: decimal.Decimal -
- - -

List of OracleJobs that were performed to produce this result

-
- - -
-
-
#   - - jobs: list[switchboardpy.OracleJob] -
- - -

Authority of the queue the aggregator is attached to

-
- - -
-
-
#   - - queue_authority: solana.publickey.PublicKey -
- - -

Program token mint

-
- - -
-
-
#   - - token_mint: solana.publickey.PublicKey -
- - -

List of parsed oracles

-
- - -
-
-
-
- #   - -
@dataclass
- - class - AggregatorSetHistoryBufferParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class AggregatorSetHistoryBufferParams:
     
     """Number of elements for the history buffer to fit"""
@@ -2954,60 +4579,67 @@ aggregator.

"""Authority keypair for the aggregator""" authority: Keypair = None -
- +
+
-

Number of elements for the history buffer to fit

-
+
+

Number of elements for the history buffer to fit

+
+
+
+ #   -
-
#   + AggregatorSetHistoryBufferParams(size: int, authority: solana.keypair.Keypair = None) +
+
+
+
+ #   - - AggregatorSetHistoryBufferParams(size: int, authority: solana.keypair.Keypair = None) -
+ size: int +
- - +
+

Authority keypair for the aggregator

+
+
+
+
+ #   -
-
-
#   + authority: solana.keypair.Keypair = None +
+
+
+
+
+ #   - size: int -
+ class + CrankAccount: + - -

Authority keypair for the aggregator

-
- - - -
-
#   - - authority: solana.keypair.Keypair = None -
- - - - -
-
-
-
- #   - - - class - CrankAccount: -
- -
- View Source -
class CrankAccount:
+        
+ View Source +
+
class CrankAccount:
     """ A Switchboard account representing a crank of aggregators ordered by next update time.
 
     Attributes:
@@ -3298,29 +4930,38 @@ aggregator.

pq_data: list[CrankRow] = crank.pq_data[:crank.pq_size] pq_data.sort(key=lambda crank_row: crank_row.next_timestamp) return [item.pubkey for item in pq_data[:n]] -
- +
+
-

A Switchboard account representing a crank of aggregators ordered by next update time.

+
+

+ A Switchboard account representing a crank of aggregators ordered by + next update time. +

-

Attributes: - program (anchor.Program): The anchor program ref - public_key (PublicKey | None): This crank's public key - keypair (Keypair | None): this crank's keypair

-
+

+ Attributes: program (anchor.Program): The anchor program ref + public_key (PublicKey | None): This crank's public key keypair + (Keypair | None): this crank's keypair +

+
+
+
+ #   -
-
#   + CrankAccount(params: + switchboardpy.AccountParams) +
- - CrankAccount(params: switchboardpy.AccountParams) -
- -
+
View Source -
    def __init__(self, params: AccountParams):
+            
+
    def __init__(self, params: AccountParams):
         if params.public_key is None and params.keypair is None:
             raise ValueError('User must provide either a publicKey or keypair for account use.')
         if params.keypair and params.public_key and params.keypair.public_key != params.public_key:
@@ -3328,85 +4969,83 @@ aggregator.

self.program = params.program self.public_key = params.keypair.public_key if params.keypair else params.public_key self.keypair = params.keypair -
+
+
+
+
+
+
+ #   - + keypair +
- +
+

Get the size of an CrankAccount on chain

-
-
-
#   +

Args:

- keypair -
+

Returns: int: size of the CrankAccount type on chain

+
+
+
+
+ #   - -

Get the size of an CrankAccount on chain

- -

Args:

- -

Returns: - int: size of the CrankAccount type on chain

-
- - -
-
-
#   - - def size(self): -
+
-
+
View Source -
    def size(self):
+            
+
    def size(self):
         return self.program.account["CrankAccountData"].size
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - load_data(self): -
+ load_data(self): +
-
+
View Source -
    async def load_data(self):
+            
+
    async def load_data(self):
         crank = await self.program.account["CrankAccountData"].fetch(self.public_key)
         crank.ebuf = None
         return crank
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
async def - create( - program: anchorpy.program.core.Program, - params: switchboardpy.CrankInitParams -): -
+ create( program: anchorpy.program.core.Program, params: + switchboardpy.CrankInitParams + ): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     async def create(program: anchorpy.Program, params: CrankInitParams):
         crank_account = Keypair.generate()
         buffer = Keypair.generate()
@@ -3445,24 +5084,27 @@ aggregator.

) return CrankAccount(AccountParams(program=program, keypair=crank_account)) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - push(self, params: switchboardpy.CrankPushParams): -
+ push(self, params: + switchboardpy.CrankPushParams): +
-
+
View Source -
    async def push(self, params: CrankPushParams):
+            
+
    async def push(self, params: CrankPushParams):
         aggregator_account: AggregatorAccount = params.aggregator_account
         crank = await self.load_data()
         queue_account = OracleQueueAccount(AccountParams(program=self.program, public_key=crank.queue_pubkey))
@@ -3504,24 +5146,26 @@ aggregator.

} ) ) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - pop_txn(self, params: switchboardpy.CrankPopParams): -
+ pop_txn(self, params: + switchboardpy.CrankPopParams): +
-
+
View Source -
    async def pop_txn(self, params: CrankPopParams):
+            
+
    async def pop_txn(self, params: CrankPopParams):
         fail_open_on_account_mismatch = params.fail_open_on_mismatch or False
         next = params.ready_pubkeys or await self.peak_next_ready(5)
         if len(next) == 0:
@@ -3586,45 +5230,48 @@ aggregator.

signers=[payer_keypair] ) ) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - pop(self, params: switchboardpy.CrankPopParams): -
+ pop(self, params: + switchboardpy.CrankPopParams): +
-
+
View Source -
    async def pop(self, params: CrankPopParams):
+            
+
    async def pop(self, params: CrankPopParams):
         payer_keypair = Keypair.from_secret_key(self.program.provider.wallet.payer.secret_key)
         txn = await self.pop_txn(params)
         return await self.program.provider.connection.send_transaction(txn, [payer_keypair])
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - peak_next_with_time(self, n: int): -
+ peak_next_with_time(self, n: int): +
-
+
View Source -
    async def peak_next_with_time(self, n: int):
+            
+
    async def peak_next_with_time(self, n: int):
         crank = await self.load_data()
 
         # get list slice of length pq_size 
@@ -3635,72 +5282,72 @@ aggregator.

# return items return pq_data[:n] -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - peak_next_ready(self, n: Optional[int] = None): -
+ peak_next_ready(self, n: Optional[int] = None): +
-
+
View Source -
    async def peak_next_ready(self, n: Optional[int] = None):
+            
+
    async def peak_next_ready(self, n: Optional[int] = None):
         now = math.floor(time.time())
         crank = await self.load_data()
         pq_data: list[CrankRow] = crank.pq_data[:crank.pq_size]
         key = lambda crank_row: crank_row.next_timestamp
         return [item.pubkey for item in list(filter(lambda item: now >= item.next_timestamp, pq_data)).sort(key=key)[:(n or len(pq_data))]]
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - peak_next(self, n: int): -
+ peak_next(self, n: int): +
-
+
View Source -
    async def peak_next(self, n: int):
+            
+
    async def peak_next(self, n: int):
         crank = await self.load_data()
         pq_data: list[CrankRow] = crank.pq_data[:crank.pq_size]
         pq_data.sort(key=lambda crank_row: crank_row.next_timestamp)
         return [item.pubkey for item in pq_data[:n]]
-
+
+
+
+
+
+
+
+ #   - +
@dataclass
- + class + CrankPopParams: +
- -
-
-
- #   - -
@dataclass
- - class - CrankPopParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class CrankPopParams:
 
     """Specifies the wallet to reward for turning the crank."""
@@ -3730,154 +5377,157 @@ aggregator.

"""Nonce to allow consecutive crank pops with the same blockhash.""" nonce: int = None fail_open_on_mismatch: bool = None -
- +
+
-

Specifies the wallet to reward for turning the crank.

-
+
+

Specifies the wallet to reward for turning the crank.

+
+
+
+ #   -
-
#   + CrankPopParams( payout_wallet: solana.publickey.PublicKey, queue_pubkey: + solana.publickey.PublicKey, queue_authority: + solana.publickey.PublicKey, crank: Any, queue: Any, token_mint: + solana.publickey.PublicKey, ready_pubkeys: + list[solana.publickey.PublicKey] = None, nonce: int = None, + fail_open_on_mismatch: bool = None ) +
+
+
+
+ #   - - CrankPopParams( - payout_wallet: solana.publickey.PublicKey, - queue_pubkey: solana.publickey.PublicKey, - queue_authority: solana.publickey.PublicKey, - crank: Any, - queue: Any, - token_mint: solana.publickey.PublicKey, - ready_pubkeys: list[solana.publickey.PublicKey] = None, - nonce: int = None, - fail_open_on_mismatch: bool = None -) -
+ payout_wallet: solana.publickey.PublicKey +
- - +
+

The pubkey of the linked oracle queue.

+
+
+
+
+ #   -
-
-
#   + queue_pubkey: solana.publickey.PublicKey +
- payout_wallet: solana.publickey.PublicKey -
+
+

The pubkey of the linked oracle queue authority.

+
+
+
+
+ #   - -

The pubkey of the linked oracle queue.

-
+ queue_authority: solana.publickey.PublicKey +
+

CrankAccount data

+
+
+
+ #   -
-
-
#   + crank: Any +
- queue_pubkey: solana.publickey.PublicKey -
+

QueueAccount data

+
+
+
+ #   - -

The pubkey of the linked oracle queue authority.

-
+ queue: Any +
+

Token mint pubkey

+
+
+
+ #   -
-
-
#   + token_mint: solana.publickey.PublicKey +
- queue_authority: solana.publickey.PublicKey -
+
+

+ Array of pubkeys to attempt to pop. If discluded, this will be + loaded from the crank upon calling. +

+
+
+
+
+ #   - -

CrankAccount data

-
+ ready_pubkeys: list[solana.publickey.PublicKey] = None +
+
+

+ Nonce to allow consecutive crank pops with the same blockhash. +

+
+
+
+
+ #   -
-
-
#   + nonce: int = None +
+
+
+
+ #   - crank: Any -
+ fail_open_on_mismatch: bool = None +
+
+
+
+
+ #   - -

QueueAccount data

-
+
@dataclass
+ class + CrankInitParams: +
- -
-
#   - - queue: Any -
- - -

Token mint pubkey

-
- - -
-
-
#   - - token_mint: solana.publickey.PublicKey -
- - -

Array of pubkeys to attempt to pop. If discluded, this will be loaded -from the crank upon calling.

-
- - -
-
-
#   - - ready_pubkeys: list[solana.publickey.PublicKey] = None -
- - -

Nonce to allow consecutive crank pops with the same blockhash.

-
- - -
-
-
#   - - nonce: int = None -
- - - - -
-
-
#   - - fail_open_on_mismatch: bool = None -
- - - - -
-
-
-
- #   - -
@dataclass
- - class - CrankInitParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class CrankInitParams:
 
     """OracleQueueAccount for which this crank is associated"""
@@ -3891,125 +5541,137 @@ from the crank upon calling.

"""Optional max number of rows""" max_rows: int = None -
- +
+
-

OracleQueueAccount for which this crank is associated

-
+
+

OracleQueueAccount for which this crank is associated

+
+
+
+ #   -
-
#   + CrankInitParams( queue_account: + switchboardpy.OracleQueueAccount, name: bytes = None, metadata: bytes = None, max_rows: int = + None ) +
+
+
+
+ #   - - CrankInitParams( - queue_account: switchboardpy.OracleQueueAccount, - name: bytes = None, - metadata: bytes = None, - max_rows: int = None -) -
+ queue_account: + switchboardpy.OracleQueueAccount +
- - +

Buffer specifying crank name

+
+
+
+ #   -
-
-
#   + name: bytes = None +
- queue_account: switchboardpy.OracleQueueAccount -
+

Buffer specifying crank metadata

+
+
+
+ #   - -

Buffer specifying crank name

-
+ metadata: bytes = None +
+

Optional max number of rows

+
+
+
+ #   -
-
-
#   + max_rows: int = None +
+
+
+
+
+ #   - name: bytes = None -
+
@dataclass
- -

Buffer specifying crank metadata

-
+ class + CrankPushParams: + - - -
-
#   - - metadata: bytes = None -
- - -

Optional max number of rows

-
- - -
-
-
#   - - max_rows: int = None -
- - - - -
-
-
-
- #   - -
@dataclass
- - class - CrankPushParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class CrankPushParams:
     aggregator_account: AggregatorAccount
-
- +
+
-

CrankPushParams(aggregator_account: switchboardpy.AggregatorAccount)

-
+
+

+ CrankPushParams(aggregator_account: + switchboardpy.AggregatorAccount) +

+
+
+
+ #   -
-
#   + CrankPushParams(aggregator_account: + switchboardpy.AggregatorAccount) +
+
+
+
+
+ #   - - CrankPushParams(aggregator_account: switchboardpy.AggregatorAccount) -
+
@dataclass
- - + class + CrankRow: + - -
-
-
- #   - -
@dataclass
- - class - CrankRow: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class CrankRow:
 
     """Aggregator account pubkey"""
@@ -4021,71 +5683,68 @@ from the crank upon calling.

@staticmethod def from_bytes(buf: bytes): pass -
- +
+
-

Aggregator account pubkey

-
+

Aggregator account pubkey

+
+
+ #   -
-
#   + CrankRow(pubkey: solana.publickey.PublicKey, next_timestamp: int) +
+
+
+
+ #   - - CrankRow(pubkey: solana.publickey.PublicKey, next_timestamp: int) -
+ pubkey: solana.publickey.PublicKey +
- - +
+

Next aggregator update timestamp to order the crank by

+
+
+
+
+ #   -
-
-
#   - - pubkey: solana.publickey.PublicKey -
- - -

Next aggregator update timestamp to order the crank by

-
- - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - from_bytes(buf: bytes): -
+ from_bytes(buf: bytes): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def from_bytes(buf: bytes):
         pass
-
+
+
+
+
+
+
+
+ #   - + class + JobAccount: +
- - - -
-
-
- #   - - - class - JobAccount: -
- -
- View Source -
class JobAccount:
+        
+ View Source +
+
class JobAccount:
     """ A Switchboard account representing a job for an oracle to perform, stored as
         a protocol buffer.
 
@@ -4201,30 +5860,38 @@ from the crank upon calling.

) ) return JobAccount(AccountParams(program=program, keypair=job_account)) -
- +
+
-

A Switchboard account representing a job for an oracle to perform, stored as - a protocol buffer.

+
+

+ A Switchboard account representing a job for an oracle to perform, + stored as a protocol buffer. +

-

Attributes: - program (anchor.Program): The anchor program ref - public_key (PublicKey | None): This aggregator's public key - keypair (Keypair | None): this aggregator's keypair

-
+

+ Attributes: program (anchor.Program): The anchor program ref + public_key (PublicKey | None): This aggregator's public key keypair + (Keypair | None): this aggregator's keypair +

+
+
+
+ #   -
-
#   + JobAccount(params: + switchboardpy.AccountParams) +
- - JobAccount(params: switchboardpy.AccountParams) -
- -
+
View Source -
    def __init__(self, params: AccountParams):
+            
+
    def __init__(self, params: AccountParams):
         if params.public_key is None and params.keypair is None:
             raise ValueError('User must provide either a publicKey or keypair for account use.')
         if params.keypair and params.public_key and params.keypair.public_key != params.public_key:
@@ -4232,113 +5899,115 @@ from the crank upon calling.

self.program = params.program self.public_key = params.keypair.public_key if params.keypair else params.public_key self.keypair = params.keypair -
+
+
+
+
+
+
+ #   - + keypair +
- +
+

Load and parse JobAccount state based on the program IDL.

-
-
-
#   +

+ Returns: name (JobAccount): data parsed in accordance with the + Switchboard IDL. +

- keypair -
+

Args:

- -

Load and parse JobAccount state based on the program IDL.

+

+ Raises: AccountDoesNotExistError: If the account doesn't exist. + AccountInvalidDiscriminator: If the discriminator doesn't match + the IDL. +

+
+
+
+
+ #   -

Returns: - name (JobAccount): data parsed in accordance with the - Switchboard IDL.

- -

Args:

- -

Raises: - AccountDoesNotExistError: If the account doesn't exist. - AccountInvalidDiscriminator: If the discriminator doesn't match the IDL.

-
- - -
-
-
#   - - async def - load_data(self): -
+ load_data(self): +
-
+
View Source -
    async def load_data(self):
+            
+
    async def load_data(self):
         job = await self.program.account["JobAccountData"].fetch(self.public_key)
         job.ebuf = None
         return job
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - load_job(self): -
+ load_job(self): +
-
+
View Source -
    async def load_job(self):
+            
+
    async def load_job(self):
         job = await self.load_job()
         return OracleJob.ParseFromString(job.data)
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - decode(program: anchorpy.program.core.Program, buf: bytes): -
+ decode(program: anchorpy.program.core.Program, buf: bytes): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def decode(program: anchorpy.Program, buf: bytes):
         coder = anchorpy.Coder(program.idl)
         return coder.accounts.decode(buf)
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
async def - create( - program: anchorpy.program.core.Program, - params: switchboardpy.JobInitParams -): -
+ create( program: anchorpy.program.core.Program, params: + switchboardpy.JobInitParams ): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     async def create(program: anchorpy.Program, params: JobInitParams):
 
         job_account = params.keypair or Keypair.generate()
@@ -4376,27 +6045,25 @@ from the crank upon calling.

) ) return JobAccount(AccountParams(program=program, keypair=job_account)) -
+
+
+
+
+
+
+
+ #   - +
@dataclass
- + class + JobInitParams: +
- -
-
-
- #   - -
@dataclass
- - class - JobInitParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class JobInitParams:
 
     """A serialized protocol buffer holding the schema of the job."""
@@ -4419,116 +6086,122 @@ from the crank upon calling.

Defaults to token vault. """ author_wallet: PublicKey = None -
- +
+
-

A serialized protocol buffer holding the schema of the job.

-
+
+

A serialized protocol buffer holding the schema of the job.

+
+
+
+ #   -
-
#   + JobInitParams( data: bytes, name: bytes = None, expiration: int = None, + variables: list[str] = None, keypair: solana.keypair.Keypair = + None, author_wallet: solana.publickey.PublicKey = None ) +
+
+
+
+ #   - - JobInitParams( - data: bytes, - name: bytes = None, - expiration: int = None, - variables: list[str] = None, - keypair: solana.keypair.Keypair = None, - author_wallet: solana.publickey.PublicKey = None -) -
+ data: bytes +
- - +
+

An optional name to apply to the job account.

+
+
+
+
+ #   -
-
-
#   + name: bytes = None +
- data: bytes -
+
+

+ unix_timestamp of when funds can be withdrawn from this account. +

+
+
+
+
+ #   - -

An optional name to apply to the job account.

-
+ expiration: int = None +
+
+

A required variables oracles must fill to complete the job.

+
+
+
+
+ #   -
-
-
#   + variables: list[str] = None +
- name: bytes = None -
+

A pre-generated keypair to use.

+
+
+
+ #   - -

unix_timestamp of when funds can be withdrawn from this account.

-
+ keypair: solana.keypair.Keypair = None +
+
+

+ An optional wallet for receiving kickbacks from job usage in + feeds. Defaults to token vault. +

+
+
+
+
+ #   -
-
-
#   + author_wallet: solana.publickey.PublicKey = None +
+
+
+
+
+ #   - expiration: int = None -
+ class + LeaseAccount: + - -

A required variables oracles must fill to complete the job.

-
- - - -
-
#   - - variables: list[str] = None -
- - -

A pre-generated keypair to use.

-
- - -
-
-
#   - - keypair: solana.keypair.Keypair = None -
- - -

An optional wallet for receiving kickbacks from job usage in feeds. -Defaults to token vault.

-
- - -
-
-
#   - - author_wallet: solana.publickey.PublicKey = None -
- - - - -
-
-
-
- #   - - - class - LeaseAccount: -
- -
- View Source -
class LeaseAccount:
+        
+ View Source +
+
class LeaseAccount:
     """ A Switchboard account representing a lease for managing funds for oracle payouts
     for fulfilling feed updates.
 
@@ -4736,30 +6409,38 @@ Defaults to token vault.

signers=[params.withdraw_authority] ) ) -
- +
+
-

A Switchboard account representing a lease for managing funds for oracle payouts -for fulfilling feed updates.

+
+

+ A Switchboard account representing a lease for managing funds for + oracle payouts for fulfilling feed updates. +

-

Attributes: - program (anchor.Program): The anchor program ref - public_key (PublicKey | None): This lease's public key - keypair (Keypair | None): this lease's keypair

-
+

+ Attributes: program (anchor.Program): The anchor program ref + public_key (PublicKey | None): This lease's public key keypair + (Keypair | None): this lease's keypair +

+
+
+
+ #   -
-
#   + LeaseAccount(params: + switchboardpy.AccountParams) +
- - LeaseAccount(params: switchboardpy.AccountParams) -
- -
+
View Source -
    def __init__(self, params: AccountParams):
+            
+
    def __init__(self, params: AccountParams):
         if params.public_key is None and params.keypair is None:
             raise ValueError('User must provide either a publicKey or keypair for account use.')
         if params.keypair and params.public_key and params.keypair.public_key != params.public_key:
@@ -4767,86 +6448,87 @@ for fulfilling feed updates.

self.program = params.program self.public_key = params.keypair.public_key if params.keypair else params.public_key self.keypair = params.keypair -
+
+
+
+
+
+
+ #   - + keypair +
- +
+

Get the size of an LeaseAccount on chain

-
-
-
#   +

Args:

- keypair -
+

Returns: int: size of the LeaseAccount type on chain

+
+
+
+
+ #   - -

Get the size of an LeaseAccount on chain

- -

Args:

- -

Returns: - int: size of the LeaseAccount type on chain

-
- - -
-
-
#   - - def size(self): -
+
-
+
View Source -
    def size(self):
+            
+
    def size(self):
         return self.program.account["LeaseAccountData"].size
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - load_data(self): -
+ load_data(self): +
-
+
View Source -
    async def load_data(self):
+            
+
    async def load_data(self):
         lease = await self.program.account["LeaseAccountData"].fetch(self.public_key)
         lease.ebuf = None
         return lease
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - from_seed( - program: anchorpy.program.core.Program, - queue_account: switchboardpy.OracleQueueAccount, - aggregator_account: switchboardpy.AggregatorAccount -): -
+ from_seed( program: anchorpy.program.core.Program, queue_account: + switchboardpy.OracleQueueAccount, aggregator_account: + switchboardpy.AggregatorAccount + ): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def from_seed(program: anchorpy.Program, queue_account: OracleQueueAccount, aggregator_account: AggregatorAccount):
         pubkey, bump = publickey.PublicKey.find_program_address(
             [
@@ -4858,28 +6540,29 @@ for fulfilling feed updates.

) return LeaseAccount(AccountParams(program=program, public_key=pubkey)), bump -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
async def - create( - program: anchorpy.program.core.Program, - params: switchboardpy.LeaseInitParams -): -
+ create( program: anchorpy.program.core.Program, params: + switchboardpy.LeaseInitParams + ): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     async def create(program: anchorpy.Program, params: LeaseInitParams):
         program_state_account, state_bump = ProgramStateAccount.from_seed(program)
         switch_token_mint = await program_state_account.get_token_mint()
@@ -4914,24 +6597,27 @@ for fulfilling feed updates.

) ) return LeaseAccount(AccountParams(program=program, public_key=lease_account.public_key)) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - extend(self, params: switchboardpy.LeaseExtendParams): -
+ extend(self, params: + switchboardpy.LeaseExtendParams): +
-
+
View Source -
    async def extend(self, params: LeaseExtendParams):
+            
+
    async def extend(self, params: LeaseExtendParams):
         program = self.program
         lease = await self.load_data()
         escrow = lease.escrow
@@ -4964,24 +6650,28 @@ for fulfilling feed updates.

signers=[params.funder_authority] ) ) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - withdraw(self, params: switchboardpy.LeaseWithdrawParams): -
+ withdraw(self, params: + switchboardpy.LeaseWithdrawParams): +
-
+
View Source -
    async def withdraw(self, params: LeaseWithdrawParams):
+            
+
    async def withdraw(self, params: LeaseWithdrawParams):
         program = self.program
         lease = await self.load_data()
         escrow = lease.escrow
@@ -5013,27 +6703,25 @@ for fulfilling feed updates.

signers=[params.withdraw_authority] ) ) -
+
+
+
+
+
+
+
+ #   - +
@dataclass
- + class + LeaseExtendParams: +
- -
-
-
- #   - -
@dataclass
- - class - LeaseExtendParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class LeaseExtendParams:
 
     """Token amount to load into the lease escrow"""
@@ -5044,67 +6732,68 @@ for fulfilling feed updates.

"""The authority of the funding wallet""" funder_authority: Keypair -
- +
+
-

Token amount to load into the lease escrow

-
+
+

Token amount to load into the lease escrow

+
+
+
+ #   -
-
#   + LeaseExtendParams( load_amount: int, funder: solana.publickey.PublicKey, + funder_authority: solana.keypair.Keypair ) +
+
+
+
+ #   - - LeaseExtendParams( - load_amount: int, - funder: solana.publickey.PublicKey, - funder_authority: solana.keypair.Keypair -) -
+ load_amount: int +
- - +

The funding wallet of the lease

+
+
+
+ #   -
-
-
#   + funder: solana.publickey.PublicKey +
- load_amount: int -
+
+

The authority of the funding wallet

+
+
+
+
+
+ #   - -

The funding wallet of the lease

-
+
@dataclass
+ class + LeaseInitParams: +
- -
-
#   - - funder: solana.publickey.PublicKey -
- - -

The authority of the funding wallet

-
- - -
-
-
-
- #   - -
@dataclass
- - class - LeaseInitParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class LeaseInitParams:
 
     """Token amount to load into the lease escrow"""
@@ -5124,116 +6813,137 @@ for fulfilling feed updates.

"""This authority will be permitted to withdraw funds from this lease""" withdraw_authority: PublicKey = None -
- +
+
-

Token amount to load into the lease escrow

-
+
+

Token amount to load into the lease escrow

+
+
+
+ #   -
-
#   + LeaseInitParams( load_amount: int, funder: solana.publickey.PublicKey, + funder_authority: solana.keypair.Keypair, oracle_queue_account: + switchboardpy.OracleQueueAccount, aggregator_account: + switchboardpy.AggregatorAccount, + withdraw_authority: solana.publickey.PublicKey = None ) +
+
+
+
+ #   - - LeaseInitParams( - load_amount: int, - funder: solana.publickey.PublicKey, - funder_authority: solana.keypair.Keypair, - oracle_queue_account: switchboardpy.OracleQueueAccount, - aggregator_account: switchboardpy.AggregatorAccount, - withdraw_authority: solana.publickey.PublicKey = None -) -
+ load_amount: int +
- - +

The funding wallet of the lease

+
+
+
+ #   -
-
-
#   + funder: solana.publickey.PublicKey +
- load_amount: int -
+
+

The authority of the funding wallet

+
+
+
+
+ #   - -

The funding wallet of the lease

-
+ funder_authority: solana.keypair.Keypair +
+
+

The target to which this lease is applied

+
+
+
+
+ #   -
-
-
#   + oracle_queue_account: + switchboardpy.OracleQueueAccount +
- funder: solana.publickey.PublicKey -
+
+

The feed which the lease grants permission

+
+
+
+
+ #   - -

The authority of the funding wallet

-
+ aggregator_account: + switchboardpy.AggregatorAccount +
+
+

+ This authority will be permitted to withdraw funds from this lease +

+
+
+
+
+ #   -
-
-
#   + withdraw_authority: solana.publickey.PublicKey = None +
+
+
+
+
+ #   - funder_authority: solana.keypair.Keypair -
+
@dataclass
- -

The target to which this lease is applied

-
+ class + LeaseWithdrawParams: + - - -
-
#   - - oracle_queue_account: switchboardpy.OracleQueueAccount -
- - -

The feed which the lease grants permission

-
- - -
-
-
#   - - aggregator_account: switchboardpy.AggregatorAccount -
- - -

This authority will be permitted to withdraw funds from this lease

-
- - -
-
-
#   - - withdraw_authority: solana.publickey.PublicKey = None -
- - - - -
-
-
-
- #   - -
@dataclass
- - class - LeaseWithdrawParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class LeaseWithdrawParams:
 
     """Token amount to withdraw from the lease escrow"""
@@ -5244,66 +6954,66 @@ for fulfilling feed updates.

"""The withdraw authority of the lease""" withdraw_authority: Keypair -
- +
+
-

Token amount to withdraw from the lease escrow

-
+
+

Token amount to withdraw from the lease escrow

+
+
+
+ #   -
-
#   + LeaseWithdrawParams( amount: int, withdraw_wallet: solana.publickey.PublicKey, + withdraw_authority: solana.keypair.Keypair ) +
+
+
+
+ #   - - LeaseWithdrawParams( - amount: int, - withdraw_wallet: solana.publickey.PublicKey, - withdraw_authority: solana.keypair.Keypair -) -
+ amount: int +
- - +

The wallet of to withdraw to

+
+
+
+ #   -
-
-
#   + withdraw_wallet: solana.publickey.PublicKey +
- amount: int -
+
+

The withdraw authority of the lease

+
+
+
+
+
+ #   - -

The wallet of to withdraw to

-
+ class + OracleAccount: +
- - -
-
#   - - withdraw_wallet: solana.publickey.PublicKey -
- - -

The withdraw authority of the lease

-
- - -
-
-
-
- #   - - - class - OracleAccount: -
- -
- View Source -
class OracleAccount:
+        
+ View Source +
+
class OracleAccount:
     """ A Switchboard account representing an oracle account and its associated queue
     and escrow account.
 
@@ -5525,30 +7235,40 @@ for fulfilling feed updates.

signers=[params.oracle_authority] ) ) -
- +
+
-

A Switchboard account representing an oracle account and its associated queue -and escrow account.

+
+

+ A Switchboard account representing an oracle account and its + associated queue and escrow account. +

-

Attributes: - program (anchor.Program): The anchor program ref - public_key (PublicKey | None): This aggregator's public key - keypair (Keypair | None): this aggregator's keypair

-
+

+ Attributes: program (anchor.Program): The anchor program ref + public_key (PublicKey | None): This aggregator's public key keypair + (Keypair | None): this aggregator's keypair +

+
+
+
+ #   -
-
#   + OracleAccount(params: + switchboardpy.AccountParams) +
- - OracleAccount(params: switchboardpy.AccountParams) -
- -
+
View Source -
    def __init__(self, params: AccountParams):
+            
+
    def __init__(self, params: AccountParams):
         if params.public_key is None and params.keypair is None:
             raise ValueError('User must provide either a publicKey or keypair for account use.')
         if params.keypair and params.public_key and params.keypair.public_key != params.public_key:
@@ -5556,86 +7276,85 @@ and escrow account.

self.program = params.program self.public_key = params.keypair.public_key if params.keypair else params.public_key self.keypair = params.keypair -
+
+
+
+
+
+
+ #   - + keypair +
- +
+

Get the size of an OracleAccount on chain

-
-
-
#   +

Args:

- keypair -
+

Returns: int: size of the OracleAccount type on chain

+
+
+
+
+ #   - -

Get the size of an OracleAccount on chain

- -

Args:

- -

Returns: - int: size of the OracleAccount type on chain

-
- - -
-
-
#   - - def size(self): -
+
-
+
View Source -
    def size(self):
+            
+
    def size(self):
         return self.program.account["OracleAccountData"].size
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - load_data(self): -
+ load_data(self): +
-
+
View Source -
    async def load_data(self):
+            
+
    async def load_data(self):
         oracle = await self.program.account["OracleAccountData"].fetch(self.public_key)
         oracle.ebuf = None
         return oracle
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - from_seed( - program: anchorpy.program.core.Program, - queue_account: switchboardpy.OracleQueueAccount, - wallet: solana.publickey.PublicKey -): -
+ from_seed( program: anchorpy.program.core.Program, queue_account: + switchboardpy.OracleQueueAccount, wallet: solana.publickey.PublicKey ): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def from_seed(program: anchorpy.Program, queue_account: OracleQueueAccount, wallet: PublicKey):
         oracle_pubkey, bump = PublicKey.find_program_address(
             [
@@ -5647,28 +7366,29 @@ and escrow account.

) return OracleAccount(AccountParams(program=program, public_key=oracle_pubkey)), bump -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
async def - create( - program: anchorpy.program.core.Program, - params: switchboardpy.OracleInitParams -): -
+ create( program: anchorpy.program.core.Program, params: + switchboardpy.OracleInitParams + ): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     async def create(program: anchorpy.Program, params: OracleInitParams):
         payer_keypair = Keypair.from_secret_key(program.provider.wallet.payer.secret_key)
         program_state_account, state_bump = ProgramStateAccount.from_seed(program)
@@ -5707,24 +7427,25 @@ and escrow account.

) ) return OracleAccount(AccountParams(program=program, public_key=oracle_account.public_key)) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - heartbeat(self): -
+ heartbeat(self): +
-
+
View Source -
    async def heartbeat(self):
+            
+
    async def heartbeat(self):
         payer_keypair = Keypair.from_secret_key(self.program.provider.wallet.payer.secret_key)
         oracle = await self.load_data()
         queue_account = OracleQueueAccount(AccountParams(program=self.program,public_key=oracle.queue_pubkey))
@@ -5760,24 +7481,30 @@ and escrow account.

signers=[self.keypair] ) ) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - withdraw(self, params: switchboardpy.OracleWithdrawParams): -
+ withdraw(self, params: + switchboardpy.OracleWithdrawParams): +
-
+
View Source -
    async def withdraw(self, params: OracleWithdrawParams):
+            
+
    async def withdraw(self, params: OracleWithdrawParams):
         payer_keypair = Keypair.from_secret_key(self.program.provider.wallet.payer.secret_key)
         oracle = await self.load_data()
         queue_pubkey = oracle.queue_pubkey
@@ -5813,27 +7540,25 @@ and escrow account.

signers=[params.oracle_authority] ) ) -
+
+
+
+
+
+
+
+ #   - +
@dataclass
- + class + OracleInitParams: +
- -
-
-
- #   - -
@dataclass
- - class - OracleInitParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class OracleInitParams:
     
     """Specifies the oracle queue to associate with this OracleAccount."""
@@ -5844,77 +7569,83 @@ and escrow account.

"""Buffer specifying oralce metadata""" metadata: bytes = None -
- +
+
-

Specifies the oracle queue to associate with this OracleAccount.

-
+
+

+ Specifies the oracle queue to associate with this OracleAccount. +

+
+
+
+ #   -
-
#   + OracleInitParams( queue_account: + switchboardpy.OracleQueueAccount, name: bytes = None, metadata: bytes = None ) +
+
+
+
+ #   - - OracleInitParams( - queue_account: switchboardpy.OracleQueueAccount, - name: bytes = None, - metadata: bytes = None -) -
+ queue_account: + switchboardpy.OracleQueueAccount +
- - +

Buffer specifying orace name

+
+
+
+ #   -
-
-
#   + name: bytes = None +
- queue_account: switchboardpy.OracleQueueAccount -
+

Buffer specifying oralce metadata

+
+
+
+ #   - -

Buffer specifying orace name

-
+ metadata: bytes = None +
+
+
+
+
+ #   +
@dataclass
-
-
-
#   + class + OracleWithdrawParams: +
- name: bytes = None -
- - -

Buffer specifying oralce metadata

-
- - - -
-
#   - - metadata: bytes = None -
- - - - -
-
-
-
- #   - -
@dataclass
- - class - OracleWithdrawParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class OracleWithdrawParams:
     
     """Amount to withdraw"""
@@ -5925,66 +7656,63 @@ and escrow account.

"""Oracle authority keypair""" oracle_authority: Keypair -
- +
+
-

Amount to withdraw

-
+

Amount to withdraw

+
+
+ #   -
-
#   + OracleWithdrawParams( amount: decimal.Decimal, withdraw_account: + solana.publickey.PublicKey, oracle_authority: + solana.keypair.Keypair ) +
+
+
+
+ #   - - OracleWithdrawParams( - amount: decimal.Decimal, - withdraw_account: solana.publickey.PublicKey, - oracle_authority: solana.keypair.Keypair -) -
+ amount: decimal.Decimal +
- - +

Token Account to withdraw to

+
+
+
+ #   -
-
-
#   + withdraw_account: solana.publickey.PublicKey +
- amount: decimal.Decimal -
+

Oracle authority keypair

+
+
+
+
+ #   - -

Token Account to withdraw to

-
+ class + OracleQueueAccount: +
- - -
-
#   - - withdraw_account: solana.publickey.PublicKey -
- - -

Oracle authority keypair

-
- - -
-
-
-
- #   - - - class - OracleQueueAccount: -
- -
- View Source -
class OracleQueueAccount:
+        
+ View Source +
+
class OracleQueueAccount:
     """A Switchboard account representing a queue for distributing oracles to
     permitted data feeds.
 
@@ -6089,30 +7817,40 @@ and escrow account.

) ) return OracleQueueAccount(AccountParams(program=program, keypair=oracle_queue_account)); -
- +
+
-

A Switchboard account representing a queue for distributing oracles to -permitted data feeds.

+
+

+ A Switchboard account representing a queue for distributing oracles + to permitted data feeds. +

-

Attributes: - program (anchor.Program): The anchor program ref - public_key (PublicKey | None): This OracleQueueAccount's public key - keypair (Keypair | None): this OracleQueueAccount's keypair

-
+

+ Attributes: program (anchor.Program): The anchor program ref + public_key (PublicKey | None): This OracleQueueAccount's public key + keypair (Keypair | None): this OracleQueueAccount's keypair +

+
+
+
+ #   -
-
#   + OracleQueueAccount(params: + switchboardpy.AccountParams) +
- - OracleQueueAccount(params: switchboardpy.AccountParams) -
- -
+
View Source -
    def __init__(self, params: AccountParams):
+            
+
    def __init__(self, params: AccountParams):
         if params.public_key is None and params.keypair is None:
             raise ValueError('User must provide either a publicKey or keypair for account use.')
         if params.keypair and params.public_key and params.keypair.public_key != params.public_key:
@@ -6120,85 +7858,91 @@ permitted data feeds.

self.program = params.program self.public_key = params.keypair.public_key if params.keypair else params.public_key self.keypair = params.keypair -
+
+
+
+
+
+
+ #   - + keypair +
- +
+

Get the size of an OracleQueueAccount on chain

-
-
-
#   +

Args:

- keypair -
+

Returns: int: size of the OracleQueueAccount type on chain

+
+
+
+
+ #   - -

Get the size of an OracleQueueAccount on chain

- -

Args:

- -

Returns: - int: size of the OracleQueueAccount type on chain

-
- - -
-
-
#   - - def size(self): -
+
-
+
View Source -
    def size(self):
+            
+
    def size(self):
         return self.program.account["OracleQueueAccountData"].size
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - load_data(self): -
+ load_data(self): +
-
+
View Source -
    async def load_data(self):
+            
+
    async def load_data(self):
         queue = await self.program.account["OracleQueueAccountData"].fetch(self.public_key)
         queue.ebuf = None
         return queue
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
async def - create( - program: anchorpy.program.core.Program, - params: switchboardpy.OracleQueueInitParams -): -
+ create( program: anchorpy.program.core.Program, params: + switchboardpy.OracleQueueInitParams + ): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     async def create(program: anchorpy.Program, params: OracleQueueInitParams):
         oracle_queue_account = Keypair.generate()
         buffer = Keypair.generate()
@@ -6246,27 +7990,25 @@ permitted data feeds.

) ) return OracleQueueAccount(AccountParams(program=program, keypair=oracle_queue_account)); -
+
+
+
+
+
+
+
+ #   - +
@dataclass
- + class + OracleQueueInitParams: +
- -
-
-
- #   - -
@dataclass
- - class - OracleQueueInitParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class OracleQueueInitParams:
 
     """Rewards to provide oracles and round openers on this queue."""
@@ -6326,1315 +8068,2639 @@ permitted data feeds.

"""Buffer for queue metadata.""" metadata: bytes = None -
- +
+
-

Rewards to provide oracles and round openers on this queue.

-
- - -
-
#   - - - OracleQueueInitParams( - reward: int, - min_stake: int, - authority: solana.publickey.PublicKey, - oracle_timeout: int = None, - variance_tolerance_multiplier: decimal.Decimal = None, - consecutive_feed_failure_limit: int = None, - consecutive_oracle_failure_limit: int = None, - minimum_delay_seconds: int = None, - queue_size: int = None, - unpermissioned_feeds: bool = None, - slashing_enabled: bool = None, - feed_probation_period: int = None, - name: bytes = None, - metadata: bytes = None -) -
- - - - -
-
-
#   - - reward: int -
- - -

The minimum amount of stake oracles must present to remain on the queue.

-
- - -
-
-
#   - - min_stake: int -
- - -

The account to delegate authority to for creating permissions targeted -at the queue.

-
- - -
-
-
#   - - authority: solana.publickey.PublicKey -
- - -

Time period we should remove an oracle after if no response.

-
- - -
-
-
#   - - oracle_timeout: int = None -
- - -

The tolerated variance amount oracle results can have from the -accepted round result before being slashed. -slashBound = varianceToleranceMultiplier * stdDeviation -Default: 2

-
- - -
-
-
#   - - variance_tolerance_multiplier: decimal.Decimal = None -
- - -

Consecutive failure limit for a feed before feed permission is revoked.

-
- - -
-
-
#   - - consecutive_feed_failure_limit: int = None -
- - -

Consecutive failure limit for an oracle before oracle permission is revoked.

-
- - -
-
-
#   - - consecutive_oracle_failure_limit: int = None -
- - -

the minimum update delay time for Aggregators

-
- - -
-
-
#   - - minimum_delay_seconds: int = None -
- - -

Optionally set the size of the queue.

-
- - -
-
-
#   - - queue_size: int = None -
- - -

Enabling this setting means data feeds do not need explicit permission -to join the queue.

-
- - -
-
-
#   - - unpermissioned_feeds: bool = None -
- - -

Whether slashing is enabled on this queue

-
- - -
-
-
#   - - slashing_enabled: bool = None -
- - -

After a feed lease is funded or re-funded, it must consecutively succeed -N amount of times or its authorization to use the queue is auto-revoked.

-
- - -
-
-
#   - - feed_probation_period: int = None -
- - -

A name to assign to this OracleQueue.

-
- - -
-
-
#   - - name: bytes = None -
- - -

Buffer for queue metadata.

-
- - -
-
-
#   - - metadata: bytes = None -
- - - - -
-
-
-
- #   - - - class - OracleJob(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
- - -

A ProtocolMessage

-
- - -
-
#   - - DESCRIPTOR = <google.protobuf.pyext._message.MessageDescriptor object> -
- - - - -
-
-
#   - - tasks -
- - - - - -
-
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
- +
+

Rewards to provide oracles and round openers on this queue.

+
+ +
+
+ #   + + OracleQueueInitParams( reward: int, min_stake: int, authority: + solana.publickey.PublicKey, oracle_timeout: int = None, + variance_tolerance_multiplier: decimal.Decimal = None, + consecutive_feed_failure_limit: int = None, + consecutive_oracle_failure_limit: int = None, + minimum_delay_seconds: int = None, queue_size: int = None, + unpermissioned_feeds: bool = None, slashing_enabled: bool = None, + feed_probation_period: int = None, name: bytes = None, metadata: + bytes = None ) +
+
+
+
+ #   + + reward: int +
+ +
+

+ The minimum amount of stake oracles must present to remain on the + queue. +

+
+
+
+
+ #   + + min_stake: int +
+ +
+

+ The account to delegate authority to for creating permissions + targeted at the queue. +

+
+
+
+
+ #   + + authority: solana.publickey.PublicKey +
+ +
+

Time period we should remove an oracle after if no response.

+
+
+
+
+ #   + + oracle_timeout: int = None +
+ +
+

+ The tolerated variance amount oracle results can have from the + accepted round result before being slashed. slashBound = + varianceToleranceMultiplier * stdDeviation Default: 2 +

+
+
+
+
+ #   + + variance_tolerance_multiplier: decimal.Decimal = None +
+ +
+

+ Consecutive failure limit for a feed before feed permission is + revoked. +

+
+
+
+
+ #   + + consecutive_feed_failure_limit: int = None +
+ +
+

+ Consecutive failure limit for an oracle before oracle permission + is revoked. +

+
+
+
+
+ #   + + consecutive_oracle_failure_limit: int = None +
+ +
+

the minimum update delay time for Aggregators

+
+
+
+
+ #   + + minimum_delay_seconds: int = None +
+ +
+

Optionally set the size of the queue.

+
+
+
+
+ #   + + queue_size: int = None +
+ +
+

+ Enabling this setting means data feeds do not need explicit + permission to join the queue. +

+
+
+
+
+ #   + + unpermissioned_feeds: bool = None +
+ +
+

Whether slashing is enabled on this queue

+
+
+
+
+ #   + + slashing_enabled: bool = None +
+ +
+

+ After a feed lease is funded or re-funded, it must consecutively + succeed N amount of times or its authorization to use the queue is + auto-revoked. +

+
+
+
+
+ #   + + feed_probation_period: int = None +
+ +
+

A name to assign to this OracleQueue.

+
+
+
+
+ #   + + name: bytes = None +
+ +

Buffer for queue metadata.

+
+
+
+ #   + + metadata: bytes = None +
+
+
+
+
+ #   + + class + OracleJob(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): +
+ +

A ProtocolMessage

+ +
+
+ #   + + DESCRIPTOR + = <google.protobuf.pyext._message.MessageDescriptor + object> +
+
+
+
+ #   + + tasks +
+ +
+

Field OracleJob.tasks

+
+
+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
CMessage
+
MergeFrom
+
CopyFrom
+
Clear
+
SetInParent
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
ListFields
+
HasField
+
ClearField
+
WhichOneof
+
HasExtension
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
ByteSize
+
FromString
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
Extensions
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.HttpTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.HttpTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.HttpTask
-
DESCRIPTOR
-
Header
-
url
-
method
-
headers
-
body
-
Method
-
METHOD_UNKOWN
-
METHOD_GET
-
METHOD_POST
- +
+
job_schemas_pb2.HttpTask
+
+ DESCRIPTOR +
+
Header
+
url
+
method
+
headers
+
body
+
Method
+
+ METHOD_UNKNOWN +
+
+ METHOD_GET +
+
+ METHOD_POST +
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.JsonParseTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.JsonParseTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.JsonParseTask
-
DESCRIPTOR
-
path
-
aggregation_method
-
AggregationMethod
-
NONE
-
MIN
-
MAX
-
SUM
- +
+
job_schemas_pb2.JsonParseTask
+
+ DESCRIPTOR +
+
path
+
+ aggregation_method +
+
+ AggregationMethod +
+
NONE
+
MIN
+
MAX
+
SUM
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.MedianTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.MedianTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.MedianTask
-
DESCRIPTOR
-
tasks
-
jobs
- +
+
job_schemas_pb2.MedianTask
+
+ DESCRIPTOR +
+
tasks
+
jobs
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.MeanTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.MeanTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.MeanTask
-
DESCRIPTOR
-
tasks
-
jobs
- +
+
job_schemas_pb2.MeanTask
+
+ DESCRIPTOR +
+
tasks
+
jobs
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.MaxTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.MaxTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
CMessage
+
+ MergeFrom +
+
CopyFrom
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
HasField
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
ByteSize
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.MaxTask
-
DESCRIPTOR
-
tasks
-
jobs
- +
+
job_schemas_pb2.MaxTask
+
+ DESCRIPTOR +
+
tasks
+
jobs
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.ValueTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.ValueTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.ValueTask
-
DESCRIPTOR
-
value
- +
+
job_schemas_pb2.ValueTask
+
+ DESCRIPTOR +
+
value
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.WebsocketTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.WebsocketTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.WebsocketTask
-
DESCRIPTOR
-
url
-
subscription
-
max_data_age_seconds
-
filter
- +
+
job_schemas_pb2.WebsocketTask
+
+ DESCRIPTOR +
+
url
+
+ subscription +
+
+ max_data_age_seconds +
+
+ filter +
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.ConditionalTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.ConditionalTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
+ Clear +
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.ConditionalTask
-
DESCRIPTOR
-
attempt
-
on_failure
- +
+
job_schemas_pb2.ConditionalTask
+
+ DESCRIPTOR +
+
+ attempt +
+
+ on_failure +
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.DivideTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.DivideTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.DivideTask
-
DESCRIPTOR
-
scalar
-
aggregator_pubkey
-
job
- +
+
job_schemas_pb2.DivideTask
+
+ DESCRIPTOR +
+
scalar
+
+ aggregator_pubkey +
+
job
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.MultiplyTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.MultiplyTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.MultiplyTask
-
DESCRIPTOR
-
scalar
-
aggregator_pubkey
-
job
- +
+
job_schemas_pb2.MultiplyTask
+
+ DESCRIPTOR +
+
+ scalar +
+
+ aggregator_pubkey +
+
job
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.AddTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.AddTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
CMessage
+
+ MergeFrom +
+
CopyFrom
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
HasField
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
ByteSize
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.AddTask
-
DESCRIPTOR
-
scalar
-
aggregator_pubkey
-
job
- +
+
job_schemas_pb2.AddTask
+
+ DESCRIPTOR +
+
scalar
+
+ aggregator_pubkey +
+
job
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.SubtractTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.SubtractTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.SubtractTask
-
DESCRIPTOR
-
scalar
-
aggregator_pubkey
-
job
- +
+
job_schemas_pb2.SubtractTask
+
+ DESCRIPTOR +
+
+ scalar +
+
+ aggregator_pubkey +
+
job
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.LpTokenPriceTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.LpTokenPriceTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
+ Clear +
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.LpTokenPriceTask
-
DESCRIPTOR
-
mercurial_pool_address
-
saber_pool_address
-
orca_pool_address
- +
+
job_schemas_pb2.LpTokenPriceTask
+
+ DESCRIPTOR +
+
+ mercurial_pool_address +
+
+ saber_pool_address +
+
+ orca_pool_address +
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.LpExchangeRateTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.LpExchangeRateTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
+ Clear +
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.LpExchangeRateTask
-
DESCRIPTOR
-
in_token_address
-
out_token_address
-
mercurial_pool_address
-
saber_pool_address
-
orca_pool_token_mint_address
- +
+
job_schemas_pb2.LpExchangeRateTask
+
+ DESCRIPTOR +
+
+ in_token_address +
+
+ out_token_address +
+
+ mercurial_pool_address +
+
+ saber_pool_address +
+
+ orca_pool_token_mint_address +
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.RegexExtractTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.RegexExtractTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
+ Clear +
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.RegexExtractTask
-
DESCRIPTOR
-
pattern
-
group_number
- +
+
job_schemas_pb2.RegexExtractTask
+
+ DESCRIPTOR +
+
+ pattern +
+
+ group_number +
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.XStepPriceTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.XStepPriceTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
+ Clear +
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.XStepPriceTask
-
DESCRIPTOR
- +
+
job_schemas_pb2.XStepPriceTask
+
+ DESCRIPTOR +
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.TwapTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.TwapTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.TwapTask
-
DESCRIPTOR
-
aggregator_pubkey
-
period
- +
+
job_schemas_pb2.TwapTask
+
+ DESCRIPTOR +
+
+ aggregator_pubkey +
+
period
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.SerumSwapTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.SerumSwapTask(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
+ CMessage +
+
+ MergeFrom +
+
+ CopyFrom +
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
+ HasField +
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
+ ByteSize +
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.SerumSwapTask
-
DESCRIPTOR
-
serum_pool_address
- +
+
job_schemas_pb2.SerumSwapTask
+
+ DESCRIPTOR +
+
+ serum_pool_address +
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - OracleJob.Task(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): -
+ class + OracleJob.Task(google.protobuf.pyext._message.CMessage, google.protobuf.message.Message): + - -

A ProtocolMessage

-
- - -
-
Inherited Members
-
-
google.protobuf.pyext._message.CMessage
-
CMessage
-
MergeFrom
-
CopyFrom
-
Clear
-
SetInParent
-
IsInitialized
-
MergeFromString
-
ParseFromString
-
SerializeToString
-
SerializePartialToString
-
ListFields
-
HasField
-
ClearField
-
WhichOneof
-
HasExtension
-
ClearExtension
-
UnknownFields
-
DiscardUnknownFields
-
ByteSize
-
FromString
-
RegisterExtension
-
FindInitializationErrors
-
Extensions
+

A ProtocolMessage

+
+
Inherited Members
+
+
+
google.protobuf.pyext._message.CMessage
+
CMessage
+
MergeFrom
+
CopyFrom
+
Clear
+
+ SetInParent +
+
+ IsInitialized +
+
+ MergeFromString +
+
+ ParseFromString +
+
+ SerializeToString +
+
+ SerializePartialToString +
+
+ ListFields +
+
HasField
+
+ ClearField +
+
+ WhichOneof +
+
+ HasExtension +
+
+ ClearExtension +
+
+ UnknownFields +
+
+ DiscardUnknownFields +
+
ByteSize
+
+ FromString +
+
+ RegisterExtension +
+
+ FindInitializationErrors +
+
+ Extensions +
-
job_schemas_pb2.Task
-
DESCRIPTOR
-
http_task
-
json_parse_task
-
median_task
-
mean_task
-
websocket_task
-
divide_task
-
multiply_task
-
lp_token_price_task
-
lp_exchange_rate_task
-
conditional_task
-
value_task
-
max_task
-
regex_extract_task
-
xstep_price_task
-
add_task
-
subtract_task
-
twap_task
-
serum_swap_task
- +
+
job_schemas_pb2.Task
+
+ DESCRIPTOR +
+
http_task
+
+ json_parse_task +
+
+ median_task +
+
mean_task
+
+ websocket_task +
+
+ divide_task +
+
+ multiply_task +
+
+ lp_token_price_task +
+
+ lp_exchange_rate_task +
+
+ conditional_task +
+
+ value_task +
+
max_task
+
+ regex_extract_task +
+
+ xstep_price_task +
+
add_task
+
+ subtract_task +
+
twap_task
+
+ serum_swap_task +
-
-
-
-
-
- #   + +
+
+
+
+ #   - - class - PermissionAccount: -
+ class + PermissionAccount: + -
- View Source -
class PermissionAccount:
+        
+ View Source +
+
class PermissionAccount:
     """A Switchboard account representing a permission or privilege granted by one
     account signer to another account.
 
@@ -7781,30 +10847,40 @@ N amount of times or its authorization to use the queue is auto-revoked.

signers=[params.authority] ) ) -
- +
+
-

A Switchboard account representing a permission or privilege granted by one -account signer to another account.

+
+

+ A Switchboard account representing a permission or privilege granted + by one account signer to another account. +

-

Attributes: - program (anchor.Program): The anchor program ref - public_key (PublicKey | None): This permission's public key - keypair (Keypair | None): this permission's keypair

-
+

+ Attributes: program (anchor.Program): The anchor program ref + public_key (PublicKey | None): This permission's public key keypair + (Keypair | None): this permission's keypair +

+
+
+
+ #   -
-
#   + PermissionAccount(params: + switchboardpy.AccountParams) +
- - PermissionAccount(params: switchboardpy.AccountParams) -
- -
+
View Source -
    def __init__(self, params: AccountParams):
+            
+
    def __init__(self, params: AccountParams):
         if params.public_key is None and params.keypair is None:
             raise ValueError('User must provide either a publicKey or keypair for account use.')
         if params.keypair and params.public_key and params.keypair.public_key != params.public_key:
@@ -7812,110 +10888,121 @@ account signer to another account.

self.program = params.program self.public_key = params.keypair.public_key if params.keypair else params.public_key self.keypair = params.keypair -
+
+
+
+
+
+
+ #   - + keypair +
- +
+

+ Check if a specific permission is enabled on this permission + account +

-
-
-
#   +

Args: permission (SwitchboardPermissionValue)

- keypair -
+

Returns: bool: whether or not the permission is enabled

+
+
+
+
+ #   - -

Check if a specific permission is enabled on this permission account

- -

Args: - permission (SwitchboardPermissionValue)

- -

Returns: - bool: whether or not the permission is enabled

-
- - -
-
-
#   - - async def - is_permission_enabled( - self, - permission: switchboardpy.permission.SwitchboardPermissionValue -): -
+ is_permission_enabled( self, permission: + switchboardpy.permission.SwitchboardPermissionValue ): +
-
+
View Source -
    async def is_permission_enabled(self, permission: SwitchboardPermissionValue):
+            
+
    async def is_permission_enabled(self, permission: SwitchboardPermissionValue):
         perm_data = await self.load_data()
         permissions = perm_data.permissions
         return (permissions & permission) != 0
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - load_data(self): -
+ load_data(self): +
-
+
View Source -
    async def load_data(self):
+            
+
    async def load_data(self):
         permission = await self.program.account["PermissionAccountData"].fetch(self.public_key)
         permission.ebuf = None
         return permission
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - def size(self): -
+
-
+
View Source -
    def size(self):
+            
+
    def size(self):
         return self.program.account["PermissionAccountData"].size
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
async def - create( - program: anchorpy.program.core.Program, - params: switchboardpy.PermissionInitParams -): -
+ create( program: anchorpy.program.core.Program, params: + switchboardpy.PermissionInitParams + ): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     async def create(program: anchorpy.Program, params: PermissionInitParams):
         permission_account, permission_bump = PermissionAccount.from_seed(
             program,
@@ -7940,30 +11027,31 @@ account signer to another account.

) ) return permission_account -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - from_seed( - program: anchorpy.program.core.Program, - authority: solana.publickey.PublicKey, - granter: solana.publickey.PublicKey, - grantee: solana.publickey.PublicKey -): -
+ from_seed( program: anchorpy.program.core.Program, authority: + solana.publickey.PublicKey, granter: solana.publickey.PublicKey, + grantee: solana.publickey.PublicKey ): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def from_seed(program: anchorpy.Program, authority: PublicKey, granter: PublicKey, grantee: PublicKey):
         pubkey, bump = PublicKey.find_program_address(
             [
@@ -7976,24 +11064,28 @@ account signer to another account.

) return PermissionAccount(AccountParams(program=program, public_key=pubkey)), bump -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - set(self, params: switchboardpy.PermissionSetParams): -
+ set(self, params: + switchboardpy.PermissionSetParams): +
-
+
View Source -
    async def set(self, params: PermissionSetParams):
+            
+
    async def set(self, params: PermissionSetParams):
         self.program.rpc["permission_set"](
             {
                 "permission": self.program.type["SwitchboardPermission"][params.permission](),
@@ -8007,27 +11099,25 @@ account signer to another account.

signers=[params.authority] ) ) -
+
+
+
+
+
+
+
+ #   - +
@dataclass
- + class + PermissionInitParams: +
- -
-
-
- #   - -
@dataclass
- - class - PermissionInitParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class PermissionInitParams:
 
     """Pubkey of the account granting the permission"""
@@ -8038,67 +11128,73 @@ account signer to another account.

"""The authority that is allowed to set permissions for this account""" authority: PublicKey -
- +
+
-

Pubkey of the account granting the permission

-
+
+

Pubkey of the account granting the permission

+
+
+
+ #   -
-
#   + PermissionInitParams( granter: solana.publickey.PublicKey, grantee: + solana.publickey.PublicKey, authority: solana.publickey.PublicKey + ) +
+
+
+
+ #   - - PermissionInitParams( - granter: solana.publickey.PublicKey, - grantee: solana.publickey.PublicKey, - authority: solana.publickey.PublicKey -) -
+ granter: solana.publickey.PublicKey +
- - +
+

The receiving amount of a permission

+
+
+
+
+ #   -
-
-
#   + grantee: solana.publickey.PublicKey +
- granter: solana.publickey.PublicKey -
+
+

+ The authority that is allowed to set permissions for this account +

+
+
+
+
+
+ #   - -

The receiving amount of a permission

-
+
@dataclass
+ class + PermissionSetParams: +
- -
-
#   - - grantee: solana.publickey.PublicKey -
- - -

The authority that is allowed to set permissions for this account

-
- - -
-
-
-
- #   - -
@dataclass
- - class - PermissionSetParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class PermissionSetParams:
 
     """The permission to set"""
@@ -8109,66 +11205,68 @@ account signer to another account.

"""Specifies whether to enable or disable the permission""" enable: bool -
- +
+
-

The permission to set

-
+

The permission to set

+
+
+ #   -
-
#   + PermissionSetParams( permission: switchboardpy.permission.SwitchboardPermission, + authority: solana.keypair.Keypair, enable: bool ) +
+
+
+
+ #   - - PermissionSetParams( - permission: switchboardpy.permission.SwitchboardPermission, - authority: solana.keypair.Keypair, - enable: bool -) -
+ permission: switchboardpy.permission.SwitchboardPermission +
- - +
+

The authority controlling this permission

+
+
+
+
+ #   -
-
-
#   + authority: solana.keypair.Keypair +
- permission: switchboardpy.permission.SwitchboardPermission -
+
+

Specifies whether to enable or disable the permission

+
+
+
+
+
+ #   - -

The authority controlling this permission

-
+ class + ProgramStateAccount: +
- - -
-
#   - - authority: solana.keypair.Keypair -
- - -

Specifies whether to enable or disable the permission

-
- - -
-
-
-
- #   - - - class - ProgramStateAccount: -
- -
- View Source -
class ProgramStateAccount:
+        
+ View Source +
+
class ProgramStateAccount:
     """Account type representing Switchboard global program state.
 
     Attributes:
@@ -8329,29 +11427,37 @@ account signer to another account.

signers=[authority] ) ) -
- +
+
-

Account type representing Switchboard global program state.

+
+

Account type representing Switchboard global program state.

-

Attributes: - program (anchor.Program): The anchor program ref - public_key (PublicKey | None): This program's public key - keypair (Keypair | None): this program's keypair

-
+

+ Attributes: program (anchor.Program): The anchor program ref + public_key (PublicKey | None): This program's public key keypair + (Keypair | None): this program's keypair +

+
+
+
+ #   -
-
#   + ProgramStateAccount(params: + switchboardpy.AccountParams) +
- - ProgramStateAccount(params: switchboardpy.AccountParams) -
- -
+
View Source -
    def __init__(self, params: AccountParams):
+            
+
    def __init__(self, params: AccountParams):
         if params.public_key is None and params.keypair is None:
             raise ValueError('User must provide either a publicKey or keypair for account use.')
         if params.keypair and params.public_key and params.keypair.public_key != params.public_key:
@@ -8359,130 +11465,143 @@ account signer to another account.

self.program = params.program self.public_key = params.keypair.public_key if params.keypair else params.public_key self.keypair = params.keypair -
+
+
+
+
+
+
+ #   - + keypair +
- +
+

+ Constructs ProgramStateAccount from the static seed from which it + was generated. +

-
-
-
#   +

Args: program (anchorpy.Program): Anchor-loaded aggregator

- keypair -
+

Returns: ProgramStateAccount and PDA bump tuple.

+
+
+
+
+ #   - -

Constructs ProgramStateAccount from the static seed from which it was generated.

- -

Args: - program (anchorpy.Program): Anchor-loaded aggregator

- -

Returns: - ProgramStateAccount and PDA bump tuple.

-
- - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - from_seed(program: anchorpy.program.core.Program): -
+ from_seed(program: anchorpy.program.core.Program): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def from_seed(program: anchorpy.Program):
         state_pubkey, state_bump = publickey.PublicKey.find_program_address(['STATE'.encode()], program.program_id)
         return ProgramStateAccount(AccountParams(program=program, public_key=state_pubkey)), state_bump
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - load_data(self): -
+ load_data(self): +
-
+
View Source -
    async def load_data(self):
+            
+
    async def load_data(self):
         state = await self.program.account["SbState"].fetch(self.public_key)
         state.ebuf = None
         return state
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - get_token_mint(self) -> spl.token.async_client.AsyncToken: -
+ get_token_mint(self) -> spl.token.async_client.AsyncToken: +
-
+
View Source -
    async def get_token_mint(self) -> AsyncToken:
+            
+
    async def get_token_mint(self) -> AsyncToken:
         payer_keypair = Keypair.from_secret_key(self.program.provider.wallet.payer.secret_key)
         state = await self.load_data()
         switch_token_mint = AsyncToken(self.program.provider.connection, state.token_mint, TOKEN_PROGRAM_ID, payer_keypair)
         return switch_token_mint
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - def size(self): -
+
-
+
View Source -
    def size(self):
+            
+
    def size(self):
         return self.program.account["SbState"].size
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
async def - create( - program: anchorpy.program.core.Program, - params: switchboardpy.ProgramInitParams -): -
+ create( program: anchorpy.program.core.Program, params: + switchboardpy.ProgramInitParams + ): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     async def create(program: anchorpy.Program, params: ProgramInitParams):
         payer_keypair = Keypair.from_secret_key(program.provider.wallet.payer.secret_key)
         state_account, state_bump = ProgramStateAccount.from_seed(program)
@@ -8527,29 +11646,32 @@ account signer to another account.

}, ) ) -
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - async def - vault_transfer( - self, - to: solana.publickey.PublicKey, - authority: solana.keypair.Keypair, - params: switchboardpy.VaultTransferParams -): -
+ vault_transfer( self, to: solana.publickey.PublicKey, authority: + solana.keypair.Keypair, params: + switchboardpy.VaultTransferParams + ): +
-
+
View Source -
    async def vault_transfer(self, to: PublicKey, authority: Keypair, params: VaultTransferParams):
+            
+
    async def vault_transfer(self, to: PublicKey, authority: Keypair, params: VaultTransferParams):
         state_pubkey, state_bump = ProgramStateAccount.from_seed(self.program)
         state = await self.load_data()
         vault = state.token_vault
@@ -8569,111 +11691,108 @@ account signer to another account.

signers=[authority] ) ) -
+
+
+
+
+
+
+
+ #   - +
@dataclass
- + class + ProgramInitParams: +
- -
-
-
- #   - -
@dataclass
- - class - ProgramInitParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class ProgramInitParams:
 
     """Optional token mint"""
     mint: PublicKey = None
-
- +
+
-

Optional token mint

-
+

Optional token mint

+
+
+ #   -
-
#   + ProgramInitParams(mint: solana.publickey.PublicKey = None) +
+
+
+
+ #   - - ProgramInitParams(mint: solana.publickey.PublicKey = None) -
+ mint: solana.publickey.PublicKey = None +
+
+
+
+
+ #   - - +
@dataclass
-
-
-
#   + class + VaultTransferParams: +
- mint: solana.publickey.PublicKey = None -
- - - - - -
-
-
- #   - -
@dataclass
- - class - VaultTransferParams: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class VaultTransferParams:
 
     """Amount being transferred"""
     amount: Decimal
-
- +
+
-

Amount being transferred

-
+

Amount being transferred

+
+
+ #   -
-
#   + VaultTransferParams(amount: decimal.Decimal) +
+
+
+
+
+ #   - - VaultTransferParams(amount: decimal.Decimal) -
+
@dataclass
- - + class + SwitchboardDecimal: + - -
-
-
- #   - -
@dataclass
- - class - SwitchboardDecimal: -
- -
- View Source -
@dataclass
+        
+ View Source +
+
@dataclass
 class SwitchboardDecimal:
     mantissa: int
     scale: int
@@ -8720,154 +11839,165 @@ account signer to another account.

if not (hasattr(__o, 'mantissa') and hasattr(__o, 'scale')): return False return self.mantissa == __o.mantissa and self.scale == __o.scale -
- +
+
-

SwitchboardDecimal(mantissa: int, scale: int)

-
+
+

SwitchboardDecimal(mantissa: int, scale: int)

+
+
+
+ #   -
-
#   + SwitchboardDecimal(mantissa: int, scale: int) +
+
+
+
+ #   - - SwitchboardDecimal(mantissa: int, scale: int) -
+ scale: int +
- - +
+

Convert BN.js style num and return SwitchboardDecimal

-
-
-
#   +

+ Args: obj (Any): Object with integer fields scale and mantissa + (hex val) +

- scale: int -
+

Returns: sbd (SwitchboardDecimal): SwitchboardDecimal

+
+
+
+
+ #   - -

Convert BN.js style num and return SwitchboardDecimal

- -

Args: - obj (Any): Object with integer fields scale and mantissa (hex val)

- -

Returns: - sbd (SwitchboardDecimal): SwitchboardDecimal

-
- - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - fromObj(obj: Any): -
+ fromObj(obj: Any): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def fromObj(obj: Any):
         return SwitchboardDecimal(
             mantissa=obj.mantissa,
             scale=obj.scale
         )
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - def - to_decimal(self, sbd: object): -
+ to_decimal(self, sbd: object): +
-
+
View Source -
    def to_decimal(self, sbd: object):
+            
+
    def to_decimal(self, sbd: object):
         mantissa = Decimal(sbd.mantissa)
         scale = sbd.scale
         return mantissa / Decimal(10 ** scale)
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - from_decimal(dec: decimal.Decimal): -
+ from_decimal(dec: decimal.Decimal): +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def from_decimal(dec: Decimal):
         _, digits, exponent = dec.as_tuple()
         integer = reduce(lambda rst, x: rst * 10 + x, digits)
         return SwitchboardDecimal(integer, exponent)
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - -
@staticmethod
+
@staticmethod
def - sbd_to_decimal(sbd: object) -> decimal.Decimal: -
+ sbd_to_decimal(sbd: object) -> decimal.Decimal: +
-
+
View Source -
    @staticmethod
+            
+
    @staticmethod
     def sbd_to_decimal(sbd: object) -> Decimal:
         mantissa = Decimal(sbd.mantissa)
         scale = sbd.scale
         return mantissa / Decimal(10 ** scale)
-
+
+
+
+
+
+
+ #   - - - - -
-
-
#   - - def - as_proper_sbd(self, program: anchorpy.program.core.Program): -
+ as_proper_sbd(self, program: anchorpy.program.core.Program): +
-
+
View Source -
    def as_proper_sbd(self, program: anchorpy.Program):
+            
+
    def as_proper_sbd(self, program: anchorpy.Program):
         return program.type['SwitchboardDecimal'](self.mantissa, self.scale)
-
- -
- - - -
-
+ + + + +
- - \ No newline at end of file + + diff --git a/yarn.lock b/yarn.lock index 5c563c4..9c0498d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4687,23 +4687,6 @@ "@svgr/plugin-jsx" "^6.2.1" "@svgr/plugin-svgo" "^6.2.0" -"@switchboard-xyz/sbv2-utils@^0.0.10": - version "0.0.11" - resolved "https://registry.npmjs.org/@switchboard-xyz/sbv2-utils/-/sbv2-utils-0.0.10.tgz#a30a7209d7c16e119943e7eaef33cddcf663cdd4" - integrity sha512-q9GHnHp+ZUZ642+caVfsuIBXWdvioQtGSk6UTLfpxYFoRMDPGdH5I7T/cjM08xbxK1YaA1fW4bv2K9L1Cu8Ing== - dependencies: - "@orca-so/sdk" "^1.2.24" - "@project-serum/anchor" "^0.24.2" - "@saberhq/token-utils" "^1.12.68" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.42.0" - "@switchboard-xyz/switchboard-v2" "^0.0.97" - big.js "^6.1.1" - chalk "4" - decimal.js "^10.3.1" - dotenv "^16.0.0" - toml "^3.0.0" - "@switchboard-xyz/switchboard-api@^0.2.193": version "0.2.200" resolved "https://registry.npmjs.org/@switchboard-xyz/switchboard-api/-/switchboard-api-0.2.200.tgz#16c7d95390693e5992a7f96287143361b4d38cc9"