Pluggable single purpose intelligence gathering for blockchain applications


Borrowing from work I did at Loyyal I expand on the concept of I/Oracle. Read more about the base concept here

In order for our sidechains to be able to have business logic that acts upon events on external (Ethereum, Bitcoin, etc) distributed ledgers, our Sidechains need to be informed of interesting transactions that happen on these external ledgers.

Servers managed by us & hosted throughout the network will run copies of these oracles.

Centralized oracles are an anti-pattern in this decentralized / distributed space, so we have designed the oracle system as lightweight as possible. This enables this system to run on many user's machines (or hosted in the cloud)

This dual integration approach is an example of how we choose to mitigate the occasional centralization that tends to creep in from time to time.

The specific mechanics & economics of the oracle is a work in progress but I can lay out one proposed method of operation.


Server (Us)

  • Our hosted infrastructure will run one or more copies of each oracle (to ensure uptime and redundancy)
  • Server Oracles are considered to have a higher degree of trust than any single Client Oracle.

Clients (Users)

  • Users of the desktop version of our software will have the ability to earn rewards in exchange for operating oracles from time to time.
  • User Oracles might report every interesting transaction they see to our sidechain.
  • Users might be selected at random as the Oracle(s) considered the source of truth for a period of time. The users may or may not know if their oracle results will be used or not. This should reduce the ability to be dishonest.
  • While any single User Oracle is considered less trustable than it's Server Oracle, A group of user oracles in consensus and a server oracle being the outlier would be a condition that might require some human intervention.

Plugin internals

  • Plugin should be able to connect to the p2p network of the ledger being built against.
  • Plugin should be able grab a list of addresses a sidechain thinks are interesting or otherwise needs to watch for.
  • Plugin should maintain a record of the last block found on the network.
  • Plugin should maintain a record of interesting transactions
    • Should maintain if these transactions were reported to the sidechain or not
  • Plugin may support historical reporting but is not required.
  • Plugin should store any data in the local filesystem with a dot at the beginning of the foldername followed by the name of the ledger/plugin ./.bitcoin/
  • Plugin filename should be the name of the ledger/plugin .js bitcoin.js, foocash.js

Plugin interface

/* Required Method to start your plugin */
function initialize() {}

/* Required Method to report interesting transactions to sidechain*/
function report() {}

/* Required Method used to identify the plugin */
function name() { return "bitcoin" }