Skip to main content

Orivon standards

Around the strong core part of orivon-runtime, the rest are just standards built on top of it, making up the structure of how these modules works and communicate together in a safe manner

It's the Client job to ensure that the safety and correctness of a standard is correctly applied by modules

Here I will show you some of these standards:

General Orivon Group Modules

Groups serves to grant permission to work effectively with multiple modules without exposing them directly, while still allowing them to be used together

group.net.dns

Example modules:
domains.dns.ens
web3.dns.arweave
icann.dns.eu-gov

Requires ->

  • Module.resolveDomain(domain) | JSON Object

  • Module.supportedDomains() | Array<string>

Provides access to ->

  • DNS.resolve(domain, retries, fallbacks) | JSON Object
    Resolve a DNS using the first capable module by priority level
    domain: domain to resolve | String
    retries: amount of retries before giving up | Number
    fallbacks: amount of fallbacks with different modules before giving up | Number
    RETURN: JSON Object containing successful module id and DNS Records

  • DNS.setModulePriority(module, level) | void
    Set priority level for a module

  • DNS.getModules() | Array<{module, level}>

  • DNS.isSupported(domain) | Boolean

  • DNS.supportedDomains() | Array<string>


group.net.data-gather

Example modules:
ipfs.data-gather.tech
web3.data-gather.arweave
torrent.data-gather.utorrent
ethereum.data-gather.orivon
https.data-gather.orivon

Requires ->

  • Module.gatherFile(domain) | JSON Object

  • Module.supportedGatherings() | Array<string>

Provides access to ->

  • DG.getFile(path, method, options) | Object{ Stream<bytes> data, bool DDOC }

  • DG.setModulePriority(string, number) | void

  • DG.getModules | Array<{module, level}>

  • DG.supportedMethods | Array<string>


group.net.web3score

Example modules:
score.web3score.orivon
score.web3score.wowseoweb3

Requires ->

  • Module.getWeb3Score(string) | JSON Object

Provides access to ->

  • WS.getScore(string) | JSON Object

  • WS.setModulePriority(string, number) | void

  • WS.getModules | Array<{module, level}>


group.net.connection

Handles how modules open, manage and close network connections (TCP, UDP, WebSocket etc.)

This group allows modules to use network connections without getting direct OS-level access, keeping the system secure and sandboxed.

To be defined


group.storage

Handles how modules persist data locally in a sandboxed and secure way.

To be defined


group.io

Handles how modules interact with input/output clients (browser, CLI etc.), including rendering UI, sending events and receiving user input.

Example sub groups:
group.io.gui
group.io.textual

To be defined


group.crypto.account

You can look at Accounts as a compatibility layer between a signing method and whatever crypto/system it is compatible with

Some examples of Account modules which could be connected to that group are:
hardware-wallet.crypto.keystone
mnemonic.crypto.orivon
smart-card.crypto.eu-gov

Connected modules exposes getAccountDescriptor() which allows the caller to know what encryption systems that account type supports, so that implementations (like group.crypto.btc0-1 or group.crypto.eth0-1) can know if they are compatible at all in the first place and for what specific operations they are compatible with

For that manner an array of CapabilityDescriptor will be shared by each account type to inform about everything it is capable of and what not.
Such information is going to be used from modules like group.crypto.address-book, group.crypto.btc0-1, group.crypto.eth0-1 etc...

Requires ->

  • Module.accountTypes() | JSON (CapabilityDescriptor included)

  • Module.createAccount(type, options) | JSON

  • Module.accountList() | Array<account>

  • Module.getAccountDescriptor(accountId) | JSON<[CapabilityDescriptor]>

  • Module.accountOperate(accountId, payload, options) | JSON

  • Module accountGetKey(accountId, path) | bytes

Provides access to ->

  • Account.accountTypes() | JSON (CapabilityDescriptor and Module Id included)

  • Account.createAccount(moduleId, type, options)

  • Account.accountList() | Array<{account, moduleId}>

  • Account.getAccountDescriptor(moduleId, accountId) | JSON<[CapabilityDescriptor]>

  • Account.accountOperate(moduleId, accountId, payload, options) | JSON

  • Account accountGetKey(moduleId, accountId, path) | bytes

  • Account.setModulePriority(string, number) | void

  • Account.getModules | Array<{module, level}>


group.crypto-impl.{crypto}

This is the generic standard that all crypto implementation groups must follow (e.g. group.crypto.btc0-1, group.crypto.eth0-1, group.crypto.monero0-1).

Every crypto implementation group exposes the same set of functions, so that higher level groups like group.crypto.address-book only need to know this one standard interface — regardless of which specific crypto is behind it.

The child modules of a crypto implementation group (e.g. bitcoin.crypto.orivon) implement the crypto-specific logic and expose it through this standard interface.

Requires ->

  • group.crypto.account

  • Module.{crypto}GetDescriptor(accountId) | Array<CryptoDescriptor>
    Returns the capabilities this crypto implementation supports, including allowed derivation paths

  • Module.{crypto}Operate(accountId, payload, options) | JSON
    Used for signing and other crypto operations

  • Module.{crypto}GetKey(accountId, path) | bytes | Error
    Derives a key at the given path — whether the path is valid is determined by the account or the crypto implementation module based on their supported capabilities

Provides access to ->

  • CRYPTO.getDescriptor(accountId) | Array<CryptoDescriptor>
    Returns the capabilities of this crypto implementation for a given account
    The website uses this to know what derivation paths and operations are available before making any requests

  • CRYPTO.operate(accountId, payload, options) | JSON
    Executes a crypto operation (sign, verify etc.) through the connected account

  • CRYPTO.getKey(accountId, path) | bytes | Error
    Returns a derived key at the given path
    The error is returned by either the account or the crypto implementation if the path is not within their supported range

  • CRYPTO.setModulePriority(module, level) | void

  • CRYPTO.getModules() | Array<{module, level}>


group.crypto-impl.btc0-1

Implements the group.crypto-impl.{crypto} standard for Bitcoin.

Child modules implement Bitcoin-specific cryptographic operations (ECDSA, Schnorr, PSBT) and expose them through the standard crypto-impl interface.

Example modules:
bitcoin.crypto.orivon
bitcoin.crypto.sparrow

Requires ->

  • group.crypto.account

  • Module.bitcoinGetDescriptor(accountId) | Array<CryptoDescriptor>
    Must include Bitcoin-compatible capabilities: SECP256K1_SIGN and allowed BIP44/49/84/86 derivation paths

  • Module.bitcoinOperate(accountId, payload, options) | JSON
    Used for ECDSA and Schnorr signing operations

  • Module.bitcoinGetKey(accountId, path) | bytes | Error
    Derives keys at BIP44/49/84/86 paths — error is returned by the account or the module if the path is not supported

Provides access to ->

Follows the group.crypto-impl.{crypto} standard interface.

Additionally exposes:

  • BTC.buildTransaction(accountId, inputs, outputs, feeRate) | PSBT
    Constructs an unsigned PSBT from the given UTXOs and outputs
    inputs: UTXOs to spend | Array<UTXO>
    outputs: recipients and amounts | Array<{address, value}>
    feeRate: sat/vB | Number

  • BTC.signTransaction(accountId, psbt) | PSBT
    Signs all inputs of a PSBT using the connected account
    RETURN: Finalized PSBT ready for broadcast


group.crypto.address-book

Manages address lists across all connected crypto implementation groups.
Does not know which specific cryptos exist — only interacts with groups implementing the group.crypto-impl.{crypto} standard.

The website uses AB.getCapabilities() to know what derivation paths and address types are available for a given account and crypto group, before requesting any addresses.

Child modules under address-book implement specific address list strategies. The website decides which address list module to use, or it can use all available ones based on the CapabilityDescriptor.

Example child modules:
bitcoin.address-book.orivon — default Bitcoin address list following BIP44/84/86
vanity-ethereum.address-book.devbob — generates vanity Ethereum addresses

Requires ->

  • group.crypto.account

  • Module.getAccountDescriptor(accountId) | Array<CapabilityDescriptor>

  • Any group implementing group.crypto-impl.{crypto} standard

Provides access to ->

  • AB.getAddress(accountId, cryptoGroupId, index) | AddressInfo | Error
    Returns the address at the given index

  • AB.getAvailableCryptoGroups() | Array<string>
    Returns all crypto group IDs currently connected to the address book

  • AB.getAddressListModules(cryptoGroupId) | Array<{moduleId, descriptor}>
    Returns all available address list modules for a given crypto group
    The website can choose which one to use


group.network.btc-0-1

Standard access functions for interacting with the Bitcoin network. Modules implementing this standard handle the actual network communication (Electrum servers, REST APIs, or direct P2P).

Example modules:
electrum.btc-network.orivon
esplora.btc-network.blockstream
mempool.btc-network.mempool-space

Requires ->

  • Module.broadcastTransaction(rawHex) | JSON

  • Module.getUTXOs(scriptHash) | Array<UTXO>

  • Module.getTransaction(txid) | JSON

  • Module.estimateFees() | JSON

  • Module.getBlockHeight() | Number

Provides access to ->

  • BNET.broadcastTransaction(rawHex) | string
    Broadcasts a signed raw transaction to the Bitcoin network
    RETURN: txid on success

  • BNET.getUTXOs(scriptHash) | Array<UTXO>
    Returns unspent outputs for a given script hash
    RETURN: Array<{txid, vout, value, height}>

  • BNET.getTransaction(txid) | JSON
    Returns full transaction data including confirmation status

  • BNET.estimateFees() | JSON
    Returns fee estimates per confirmation target
    RETURN: {fast, standard, economy, minimum} in sat/vB

  • BNET.getBlockHeight() | Number
    Returns the current best block height

  • BNET.subscribeAddress(scriptHash, callback) | Subscription
    Real-time notifications when a script hash receives or spends outputs

  • BNET.setModulePriority(module, level) | void

  • BNET.getModules() | Array<{module, level}>

TODO's:
group.crypto.eth0-1 Effectively interact with group.crypto.account to implement ethereum
group.crypto.view-only-address-book Interact with supported crypto groups to print out a view only address book
group.network.eth-0-1 Implement a standard of access functions to Ethereum Network