@redstone-finance/canton-connector
v1.0.0
Published
[](https://discord.gg/2CT6hN6C) [](https://twitter.com/intent/follow?screen_name=redstone_defi
Readme
🔗 @redstone-finance/canton-connector
RedStone proposes a completely new modular design where data is first put into a data availability layer and then fetched on-chain. This allows us to broadcast a large number of assets at high frequency to a cheaper layer and put it on-chain only when required by the protocol.
The @redstone-finance/canton-connector module implements an alternative design of providing oracle data to smart
contracts. Instead of constantly persisting data on the Canton network storage (by data providers), the information is
brought on-chain only when needed (by end users). Until that moment data remains in the decentralised cache layer, which
is powered by RedStone light cache gateways. The information integrity is verified on-chain through signature checking.
Here also you can find the description of the whole RedStone Oracle model.
👨💻 Code structure
- daml directory contains the canton-network on-chain contracts.
- You can read here how the contracts work.
- src directory contains the TypeScript classes, useful for establishing a connection between TypeScript and
canton-network layers.
- See below, how to connect to the contract.
🔥 Connecting to the contract
Push model (Adapter + PricePill)
The adapter stores price data on-ledger and creates PricePill contracts for individual feed reads.
import { PricesCantonContractAdapter, CantonBlockchainService } from "@redstone-finance/canton-connector";
import { sampleRun } from "@redstone-finance/multichain-kit";
import { ContractParamsProvider, getSignersForDataServiceId } from "@redstone-finance/sdk";
const ADAPTER_ID = "RedStoneAdapter-v12-0.4.0";
const client = makeDefaultClient("RedStoneOracleViewer");
const updateClient = makeDefaultClient("RedStoneOracleUpdater");
const adapter = new PricesCantonContractAdapter(client, updateClient, ADAPTER_ID);
const service = new CantonBlockchainService(client);
const paramsProvider = new ContractParamsProvider({
dataPackagesIds: ["ETH", "BTC"],
dataServiceId: "redstone-primary-prod",
uniqueSignersCount: 3,
authorizedSigners: getSignersForDataServiceId("redstone-primary-prod"),
});
await sampleRun(paramsProvider, adapter, service);Pull model (Core)
The pull model processes data directly in the transaction without persisting it on-ledger.
import { CoreCantonContractAdapter } from "@redstone-finance/canton-connector";
import { ContractParamsProvider, getSignersForDataServiceId } from "@redstone-finance/sdk";
const client = makeDefaultClient("RedStoneOracleViewer");
const coreId = "RedStoneCore-v12-0.4.0";
const adapter = new CoreCantonContractAdapter(client, coreId);
const paramsProvider = new ContractParamsProvider({
dataPackagesIds: ["ETH", "BTC"],
dataServiceId: "redstone-primary-prod",
uniqueSignersCount: 3,
authorizedSigners: getSignersForDataServiceId("redstone-primary-prod"),
});
await adapter.getPricesFromPayload(paramsProvider);Reading individual price feeds (PricePill)
import {
makePartyId,
PricePillCantonContractAdapter,
} from "@redstone-finance/canton-connector";
const client = makeDefaultClient("RedStoneOracleViewer");
const ADAPTER_ID = "RedStoneAdapter-v12-0.4.0";
const ethFeed = new PricePillCantonContractAdapter(
client,
makePartyId("RedStoneOracleViewer"),
ADAPTER_ID,
"ETH"
);
const { value, timestamp } = await ethFeed.getPriceAndTimestamp();Installing the dependencies
yarn install📄 License
RedStone Canton connector is an open-source and free software released under the BUSL-1.1 License.
