Skip to main content

Introduction

Oracles are devices or entities that connect a blockchain network to the outside world. They enable smart contracts to access all kinds of off-chain information by entering every data input through an external transaction.

Umbrella

Available Price feeds

https://umbrella-network.github.io/technical-documentation/umbrella-network/docs/price-feeds.html

Deployed Smart contracts

https://umbrella-network.github.io/technical-documentation/umbrella-network/docs/umb-token-contracts.html#contract-registry

Example: fetching a price feed

import keccak256 from '@indeliblelabs/keccak256';
import {
Args,
IDeserializedResult,
ISerializable,
JsonRpcPublicProvider,
} from '@massalabs/massa-web3';

export class PriceData implements ISerializable<PriceData> {
constructor(
private data = 0n,
private heartbeat = 0n,
private timestamp = 0n,
private price = 0n,
) {}

serialize(): Uint8Array {
let args = new Args()
.addU8(this.data)
.addU32(this.heartbeat)
.addU32(this.timestamp)
.addU128(this.price);
return new Uint8Array(args.serialize());
}
deserialize(
data: Uint8Array,
offset: number,
): IDeserializedResult<PriceData> {
const args = new Args(data, offset);
this.data = args.nextU8();
this.heartbeat = args.nextU32();
this.timestamp = args.nextU32();
this.price = args.nextU128();
return { instance: this, offset: args.getOffset() };
}
}

const RegistryContract = 'AS1xBPxEPYoqnXEgC2nJN5s6oeJdKobVqZF3CTvSQCtK582fSDhR';
const publicProvider = JsonRpcPublicProvider.mainnet();

let resp = await publicProvider.readSC({
target: RegistryContract,
func: 'getAddressByString',
parameter : new Args().addString('UmbrellaFeeds'),
});

const UMBPriceFeedContract = new Args(resp.value).nextString();

console.log('UMBPriceFeedContract:', UMBPriceFeedContract);

const pairhash = keccak256('BTC-USD');
const parameter = new Args().addUint8Array(new Uint8Array(pairhash));

resp = await publicProvider.readSC({
target: UMBPriceFeedContract,
func: 'getPriceData',
parameter,
});

const priceData = new Args(resp.value).nextSerializable(PriceData);
console.log('priceData:', priceData);