# Paralink Query Language
PQL definitions represent ETL (extract, transform, load) piplines for sourcing, aggregating and
validating information. They are the basis of oracle requests (jobs). While this may sound
daunting, PQL definitions are just a small subset of what you as a developer are already familiar
with: json
and sql
.
# Features
PQL currently supports http.get
, sql.postgres
, ethereum.function
, ethereum.balance
methods.
It can parse JSON and SQL responses. For Ethereum it also automatically finds and initiates the appropirate ABIs.
Information from multiple data sources can be aggregated using mean
, median
or mode
.
It also supports basic math operations such as +
, -
, *
, /
, %
.
The information can be validated off-chain using validation functions such as min_participation
, mode_consensus
and variance_threshold
.
And lastly, the results can be type casted into common data types as expected by virtual machines running the smart contracts.
# Query Builder
The Paralink Node offers a built in PQL query editor, which can also be used for testing and
publishing of the PQL defintions.
# IPFS
IPFS is used to immutably store the job definition and provide an addressable content hash. Paralink Oracles accept 32 bytes long address for the PQL definition. This is significantly shorter than the job definition itself, making it suitable for request signalling in resource constrained smart contract environments.
The IPFS multihash has additional metadata that is stripped out to fit into 32 bytes. We also assume that the hash is always SHA-256. The stripping is done by removing first 2 bytes of the multihash like so:
# Examples
Check out example PQL definitions to see how to:
- Query multiple real world data sources and aggregate results
- Query public and private SQL databases
- Query Ethereum smart contracts
- Relay the results back to your smart contract or oracle