Pull based oracles
Last updated
Last updated
model enables the creation of requests for asset prices on a source blockchain. These requests are sent through a mailbox on the current chain and ultimately delivered to the DIA chain, which retrieves and delivers the required price data.
A request is made from the source chain for an asset symbol whose price is required (e.g. ETH/USD) which then passes through the chain's mailbox to be then delivered to the destination chain. You check all the contracts in .
The request body is formatted as follows in JavaScript:
And this is how it is formatted in Solidity:
Once a request is created, it is transmitted to the Hyperlane mailbox. The message is then relayed to the OracleRequestRecipient
contract , where the price data is fetched from the Oracle Metadata Contract.
Upon receiving the request, the DIA chain initiates a transaction to deliver the message back to the end contract on the source chain. The recipient contract on the source chain must implement the IMessageRecipient interface, which includes a handle function that will receive the price quotation.
In this example, we’ll be sending an ETH/USD price request from Base Sepolia to DIA Lasernet. Start by cloning the Spectra Interoperability
repository to your local machine and switching to the deploy
branch:
Then install the node packages and compile the contracts using hardhat:
Next, cd contracts
folder, and export your wallet's private key in your terminal as follows:
Now, the sendMessage.mjs
script will trigger a request
transaction to fetch the latest price of ETH/USD from DIA lasernet. To run the script:
You can also run the script on other networks by changing the value passed to the --network
flag (e.g. --network sepolia
).
The price returned is around 2,718$!
Once the price update takes place on the destination chain, which you can track from the , you can check the txn logs for the ReceivedMessage
event on the pull oracle contract or call the updates
function.