ipni / specs Goto Github PK
View Code? Open in Web Editor NEW:book: Technical Specification of IPNI Protocols
:book: Technical Specification of IPNI Protocols
In specific situations such as HTTP providers, there may not be any peer ID or peer ID may be redundant because HTTP provider uses TLS.
Is there a way to relax the need for Peer ID in such cases?
There are no IPNI specifications for discovering addresses given a peer ID even though the IPNI implementation running at cid.contact
offers this via the /providers/<peer-id>
endpoint.
Relates to: ipni/caskadht#10
Add lint for all markdown files similar to the setup used by ipfs/specs
Calculating the height of advertisement chain is cheap and fast for a provider. That information can provide a significant cause in conflict resolution across indexers.
Indexers can also calculate this number while ingesting ads. However
The concept topic
is present in gossipsub announcements which separates publications by network name. But direct HTTP announce has no such primitive defined in message schema.
We most likely want the topic
separation at IPNI protocol level to reduce testing noise from non-mainnet announcements.
Specify a HTTP protocol for retrieving advertisements from other indexers via their mirror instance. The specification should provide additional headers to communicate rate limits on retrieval to its users. It may also be only limited to indexers in the same federation (instead of public access)
currently this is the behavior described in https://github.com/ipni/specs/blob/main/IPNI.md#http-1
we probably want to express a specific implicit path we might want as a root for the advertisement chain over http.
This would be a more specific doc targeted at defining what a provider would need to do to be considered an 'http index provider'
The response structure used by IPNI for GET /multihash/<multihash>
is optimised for batch find: it includes the multihash that is being looked up as base64 encoded string, along with a nested array of results.
I believe the rationale has been to use the same response model for both batch find, and single find request. For non-streaming responses this is fine; however, for responses streamted using new-line delimited json (i.e. ndjson) it becomes suboptimal:
This is less than optimum considering the vast majority of traffic received by cid.contact is for explicit multihash lookups.
Consider spec changes for a more optimal response structure for single multihash lookup, such that:
GET
request is not repeated in the response or optionally included.Accept
request header permits it.If all of the advertisements in the oldest segment of an advertisement chain no longer advertise valid content, then it may be reasonable for the provider to have a way to stop serving those advertisements. The reasons for doing so are:
Even if all of the advertisements at the oldest end of the advertisement chain have been deleted by removal ads later in the chain, indexers will still traverse those advertisements looking for non-deleted advertisements. This incurs a chain traversal for each indexer that could be prevented if a chain truncation mechanism were available.
Chain truncation may also be wanted in cases where a lost/corrupt database results in older advertisement data being unavailable and unrecoverable, yet it is not desirable to start an entirely new chain. Indexing will not be able to proceed unless the unavailable end of the chain is understood by indexers to be truncated.
Possible truncation mechanisms:
TruncateAt
field that specifies where to end traversal of the ad chain.NotFound
or new Truncated
error when fetching advertisement after truncation point.Requiring a new advertisement that specifies chain truncation is explicit, so cannot happen due to some error condition as interpreting an error can.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.