From 2d9c828bf9b641ff8d8ab26650cf8cbcd8844cb6 Mon Sep 17 00:00:00 2001 From: waalge Date: Tue, 4 Nov 2025 17:58:16 +0000 Subject: [PATCH] draft --- proposals/custom-feeds.md | 188 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 proposals/custom-feeds.md diff --git a/proposals/custom-feeds.md b/proposals/custom-feeds.md new file mode 100644 index 0000000..db176c7 --- /dev/null +++ b/proposals/custom-feeds.md @@ -0,0 +1,188 @@ +--- +author: @waalge +status: draft +--- + +# Custom feeds :: Proposal + +## Problem + +1. People want to put their custom data on-chain +2. They want it reported via an oracle +3. Orcfax currently has no way to do this + +We need a way that "customer" can get their data on-chain via Orcfax. +The solution needs to meet consumers' needs, and align with Orcfax's +belief in audit-ability. + +## Solution + +Custom, signed, data feeds. + +Process: + +1. Off-chain Registration: + It is often not possible nor prudent to do all things on-chain. + Consumer seeks Orcfax network approval and develop the data pipeline + for the feed. + In this step it is established: - The definition of the feed. - In particular, the data type that will appear in the fact statement body. + This can treated simply as `Data` if desired. - It may also include additional verification checks. - In particular, signing. - The scheme of publication (see below). - An "owner" key is established. - All of this is published to a public repo. + Probably orcfax github. + It is also where it is made clear who is paying who for what. +2. On-chain Registration: + - Registration inserts the feed into the register. + - Consumer registers their feed with their "owner" key. + - The register contains pointers to both the feed definition, + the hot keys used for signing, and the data sources (ie servers/ endpoints) +3. Publishing Statements: - Data collectors will query the data sources. + They will check signatures are valid with respect to the specified scheme and keys + +- Collectors can then sign with data embedded as a bytestring (TBC) including the timestamp. + +4. Update Registration: + - Owner key can update some of the data fields. + For example when the server updates. + - There may be a lag time between an update, + and Orcfax data collectors aligning with the new feed details. + Customer is responsible for ensuring both feeds until data collectors have updated. + - Customer may also seek to update offline registration. + Customer is responsible to considering any impacts to downstream consumers. +5. Deregistration: + - Owner can remove their registration. + The feed will cease to be published. + +### Off-chain Registration + +The output of this stage is a "feed specification" document as part of the Orcfax Feed Register repo. + +The feed specification includes: + +- Feed definition +- Owner key + +#### Feed definition + +##### Source definition + +The specific endpoints are to be found in the on-line registration. +The endpoints should be globally available, otherwise collection may fail. + +Multiple endpoints are recommended. +Note that this is for redundancy: A collector will attempt to collect data from any of the endpoints, not all. +Each endpoint must provide the same or equivalent data. +Failure to do so may result in issues downstream. + +Off-chain registration specifies the expected format of the response. +Orfax supports multiple permissible variations of serving data and signature: + +- as a json with base64 or base16 encoded `{body: , signature: }` +- as a json with signature in the header (base64 or base16) +- as above but in bytes + +##### Collection definition + +Data collectors request data from the data sources. + +Data collectors do "Phase one" data validation. +Phase one validation may include: + +- Signature : Key specified in the on-line registration +- Time bound: some kind of time check +- (TBC) + +Orcfax can work with customers to tailor the needs of the definition. +Data collectors broadcast the results of their collection to validators. + +Data collectors report the following errors: + +- `Unreachable` - No server was reached. +- `ServerError` - No server responded a status code `200`. + (Caveat: Redirects should be followed.) +- `Unparseable` - A server responded with `200`, but the data did not match the form the definition. +- `PhaseOneValidationFail` - Fails Phase One validation. + +##### Validation & Aggregation definition + +Validator definition parts: + +1. Rerun phase one validation. + Note that for time bounds this is relative to the collector's claimed time of collection. + Any failure will result in collector not being part of the aggregation. +2. Phase two validation/ aggregation: + This may involve logic applied to multiple collector results. + +Phase two may fail in some cases if, say, +the divergence is too great, or there are too many reported errors, +or there is insufficient successful collector results. + +The output is: + +- the fact statement to be published on Cardano +- the "data trace" to be put on Arweave + +##### Publish + +A fact statement is of the form: + +```ts +{ + id: X//, + created_at: Timestamp, + body: Data, +} +``` + +This is the same as is currently in use. +Consumer data will be delivered inside `body`. + +The feed id `version` is owner's key (raw bytes, **NOT** hex encoded). +It is up to the customer to communicate to downstream consumers +as to whether or not they ought to be verifying the full feed id (including version). + +Orcfax must lay out some examples of feed definitions for customers to understand this stage. + +### On-chain registration + +The customer performs on-chain registration. +This is a transaction that creates an OrcfaxRegister token at the corresponding address +with an inline datum with the following data: + +```ts +{ + owner: VerificationKey, + info: { + hot-key: VerificationKey (Scheme dependent), + source: [], + offline-registration-url: , + repo-version: , + } +} +``` + +- A token is minted, with name equal to customers cold key +- Future (continuing) spends, (or end) must be singed by the owner key +- The hot key can be updated. +- Source info is probably : URL(s) and the expect request info (HTTP/JSON/BYTES). + +The feed id will use the customer's cold key digest as the version. + +- Other members of the validator network can independently verify the signatures + and do not need to collect the data separately. + +### Open questions + +There are many open questions concerning how rigid or flexible this process ought to be. +Here are just some. + +1. Data source schemes: do we support json and bytes + +- Plutus data encoded. +- Data as bytestring + +2. Phase one validation: do we support more than signatures. + If so, we need to parse the bodies and extract, say, signatures. + Which schemes and formats do we support? + +3. What if there are multiple on-chain registrations of the same owner? + +4. What precisely is the point of the on-chain registration?