### 1 Select the chain you want to use.
Chronicle Oracles are live on several chains, with more integrations rolling out regularly. Using the [Dashboard](https://chroniclelabs.org/dashboard/oracles), you can quickly find the available chains.
### 2 Select the Oracle(s) to use and its address
Before reading from an Oracle, the address making the call needs to be whitelisted for that Oracle. To find the Testnet addresses for the Oracles, simply select the `Testnets` tab on the [Dashboard](https://chroniclelabs.org/dashboard/oracles), then select the desired chain.
### 3 Get the address of the SelfKisser for the selected chain
Chronicle Oracles are read protected by a whitelist. On Testnet networks, you can whitelist yourself using the [SelfKisser](https://github.com/chronicleprotocol/self-kisser/blob/main/src/SelfKisser.sol) contract. **Ensure you're using the correct SelfKisser address for each chain.**
| Testnet Network | SelfKisser Address |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| Ethereum Sepolia | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| Base Sepolia | [0x70E58b7A1c884fFFE7dbce5249337603a28b8422](https://sepolia.basescan.org/address/0x70E58b7A1c884fFFE7dbce5249337603a28b8422#code) |
| Arbitrum Sepolia | [0xc0fe3a070Bc98b4a45d735A52a1AFDd134E0283f](https://sepolia.arbiscan.io/address/0xc0fe3a070Bc98b4a45d735A52a1AFDd134E0283f#code) |
| Gnosis Mainnet | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://gnosisscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d) |
| Mantle Testnet | [0x9ee0DC1f7cF1a5c083914e3de197Fd1F484E0578](https://explorer.sepolia.mantle.xyz/address/0x9ee0DC1f7cF1a5c083914e3de197Fd1F484E0578) |
| Scroll Sepolia | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.scrollscan.com/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| zkSync Sepolia | [0x25f594edde4f58A14970b2ef6616badBa4B1CdDD](https://sepolia.explorer.zksync.io/address/0x25f594edde4f58A14970b2ef6616badBa4B1CdDD#contract) |
| Optimism Sepolia | [0xfF619a90cDa4020897808D74557ce3b648922C37](https://sepolia-optimism.etherscan.io/address/0xfF619a90cDa4020897808D74557ce3b648922C37#code) |
| Berachain Bepolia | [0x584914a893aBefB95abC02A5604338c0390F328B](https://bepolia.beratrail.io/address/0x584914a893aBefB95abC02A5604338c0390F328B) |
| Superseed Sepolia | [0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B](https://sepolia-explorer.superseed.xyz/address/0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B#code) |
| Corn Sepolia | [0x8CA2E3a09c79233127dC21955e28A6b9C4bf166E](https://testnet.cornscan.io/address/0x8CA2E3a09c79233127dC21955e28A6b9C4bf166E) |
| Plume Testnet | [0xd6de00f82738c966c88F55017e8aCcA192AF42a1](https://testnet-explorer.plumenetwork.xyz/address/0xd6de00f82738c966c88F55017e8aCcA192AF42a1) |
| Monad Testnet | [0x9a0de663c20127a229891eA0C7Db99c785BF91e3](https://monad-testnet.socialscan.io/address/0x9a0de663c20127a229891eA0C7Db99c785BF91e3) |
| Unichain Sepolia | [0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B](https://unichain-sepolia.blockscout.com/address/0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B) |
| Avalanche Fuji Testnet|[0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B](https://testnet.snowtrace.io/address/0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B) |
*If you need to read from multiple Oracles, make sure that you repeat the whitelisting process for each Oracle.*
### 4 Using the SelfKisser, whitelist the address used to read from the oracle
The [ISelfKisser](https://github.com/chronicleprotocol/self-kisser/blob/main/src/ISelfKisser.sol) interface defines 2 function for whitelisting:
- `function selfKiss(address oracle) external;` - whitelist your own address (msg.sender)
- ` function selfKiss(address oracle, address who) external;` - specifies a different address to whitelist, such as a smart contract
In most cases, you'll use the second option to whitelist another address.
Ensure you have sufficient funds for the whitelisting process, as it’s a write operation requiring gas to complete.
On Mainnet, the process is similar, but the whitelisting is permissioned. To get whitelisted, please open a ticket on [Discord](https://discord.com/invite/CjgvJ9EspJ) via the 🆘 | support channel to reach out to the team.
---
// File: Developers/Guides/whitelistAddress
# Getting Read Access to Chronicle Oracles
Our contracts are read-protected by a whitelist, meaning you won't be able to read them on-chain without your address being added to the whitelist.
:::info
On Testnet, the [SelfKisser contract](https://github.com/chronicleprotocol/self-kisser) allows users to whitelist themselves, whimsically termed 'kiss' themselves.
On Mainnet, to get access to production Oracles, please open a ticket on [Discord](https://discord.com/invite/CjgvJ9EspJ) via the 🆘 | support channel.
:::
| Testnet Network | SelfKisser Address |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| Ethereum Sepolia | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| Base Sepolia | [0x70E58b7A1c884fFFE7dbce5249337603a28b8422](https://sepolia.basescan.org/address/0x70E58b7A1c884fFFE7dbce5249337603a28b8422#code) |
| Arbitrum Sepolia | [0xc0fe3a070Bc98b4a45d735A52a1AFDd134E0283f](https://sepolia.arbiscan.io/address/0xc0fe3a070Bc98b4a45d735A52a1AFDd134E0283f#code) |
| Gnosis Mainnet | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://gnosisscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d) |
| Mantle Testnet | [0x9ee0DC1f7cF1a5c083914e3de197Fd1F484E0578](https://explorer.sepolia.mantle.xyz/address/0x9ee0DC1f7cF1a5c083914e3de197Fd1F484E0578) |
| Scroll Sepolia | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.scrollscan.com/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| zkSync Sepolia | [0x25f594edde4f58A14970b2ef6616badBa4B1CdDD](https://sepolia.explorer.zksync.io/address/0x25f594edde4f58A14970b2ef6616badBa4B1CdDD#contract) |
| Optimism Sepolia | [0xfF619a90cDa4020897808D74557ce3b648922C37](https://sepolia-optimism.etherscan.io/address/0xfF619a90cDa4020897808D74557ce3b648922C37#code) |
| Berachain Bepolia | [0x584914a893aBefB95abC02A5604338c0390F328B](https://bepolia.beratrail.io/address/0x584914a893aBefB95abC02A5604338c0390F328B) |
| Superseed Sepolia | [0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B](https://sepolia-explorer.superseed.xyz/address/0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B#code) |
| Corn Sepolia | [0x8CA2E3a09c79233127dC21955e28A6b9C4bf166E](https://testnet.cornscan.io/address/0x8CA2E3a09c79233127dC21955e28A6b9C4bf166E) |
| Plume Testnet | [0xd6de00f82738c966c88F55017e8aCcA192AF42a1](https://testnet-explorer.plumenetwork.xyz/address/0xd6de00f82738c966c88F55017e8aCcA192AF42a1) |
| Monad Testnet | [0x9a0de663c20127a229891eA0C7Db99c785BF91e3](https://monad-testnet.socialscan.io/address/0x9a0de663c20127a229891eA0C7Db99c785BF91e3) |
| Unichain Sepolia | [0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B](https://unichain-sepolia.blockscout.com/address/0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B) |
| Avalanche Fuji Testnet|[0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B](https://testnet.snowtrace.io/address/0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B) |
# Whitelisting Yourself on Testnet and Reading from Smart Contracts
:::warning
This example demonstrates the whitelisting process on **Ethereum Sepolia**. The addresses used correspond to the SelfKisser and Oracles on Ethereum Sepolia.
Depending on the testnet you select, make sure to use the appropriate oracle address for that specific chain. You can find the correct address by visiting the [Chronicle Dashboard](https://chroniclelabs.org/dashboard) and selecting the `Testnets` tab to view available testnets and their corresponding oracle addresses.
The address of the **SelfKisser** for each chain can be found in the table at the top of this page.
:::
## Option 1: Using the CLI with `cast`
### Whitelisting Using the CLI
[Cast](https://book.getfoundry.sh/reference/cast/cast) is a command-line interface (CLI) tool developed by the Foundry team to streamline interactions with Ethereum and other EVM-based chains. Whether you're making smart contract calls, sending transactions, or retrieving chain data, Cast simplifies the process.
#### Whitelist the Address That Sends the Request
```bash
$ cast send 0x0dcc19657007713483a5ca76e6a7bbe5f56ea37d "selfKiss(address)()" --rpc-url $rpc
```
Here, `0x0dcc19657007713483a5ca76e6a7bbe5f56ea37d` is the SelfKisser contract address on Ethereum Sepolia. This command will whitelist the address that sends the request.
#### Whitelist a Different Address
If you need to whitelist a different address than the one sending the request, use:
```bash
$ cast send 0x0dcc19657007713483a5ca76e6a7bbe5f56ea37d "selfKiss(address, address)()" --rpc-url $rpc
```
Here, `0x0dcc19657007713483a5ca76e6a7bbe5f56ea37d` is the SelfKisser contract address on Ethereum Sepolia. This command will whitelist the address that you provide as a parameter.
#### Verify Whitelist Status:
For quick testing, feel free to use the following Oracle address:
- Chronicle_ETH_USD_3: `0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603` on Ethereum Sepolia.
**Alternatively, you can find a specific Oracle address for your chosen chain using the [Chronicle Dashboard](https://chroniclelabs.org/dashboard)** by selecting `Testnets` and then selecting the desired Testnet chain.
```bash
$ cast call "tolled(address)(bool)" --rpc-url $rpc
```
A response of `true` confirms your whitelisted status.
### Reading from Smart Contracts using the CLI
Once you are whitelisted, interacting with the oracle is easy. The `read()` function returns a uint value representing the data you are trying to get:
```bash
$ cast call 0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603 "read()(uint)" --rpc-url $rpc
```
Here, `0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603` represents Chronicle_ETH_USD_3 on Ethereum Sepolia.
Response:
`1656870000000000045440`
Note that Chronicle Oracles use 18 decimal places of precision, so the price is `1656.87`.
## Option 2: Using Etherscan
### Whitelisting Using Etherscan
If you do not want to use the CLI, you can whitelist yourself directly on Etherscan.
1. Navigate to the SelfKisser contract address on Etherscan Ethereum Sepolia: [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code). If you are using a different Testnet, make sure to use the right corresponding blockchain explorer for that chain as well as the right SelfKisser address (you can find the SelfKisser address on different Testnet chains in the table at the top of this page).
2. Click on the `Contract` tab and then on `Write Contract`
3. You'll have to hit the `Connect to Web3` button to connect your wallet.
4. Scroll down to the `selfKiss()` function and enter the Oracle address you wish to interact with in the oracle (address) field. Then, click `Write`.
You will see that there are two `selfKiss()` functions (overloads). One of them takes two parameters (oracle (address), who (address)), and the other only one parameter (oracle (address)).
- When you want to whitelist your own address (msg.sender), you can use `selfKiss(address oracle)`.
- In contrast, when you need to specify a different address to perform the whitelist on, you should use `selfKiss(address oracle, address who)`.
:::warning
Make sure you have enough native tokens of the network where you want to use the Oracle to cover the gas for your request.
Make sure you are connected to the correct network corresponding to the contract you are interacting with.
:::
### Checking if Your Address Was Successfully Whitelisted/Kissed on Etherscan
In the contract that you wan to read, go to the `Read Contract` tab and locate the `tolled` function.
Enter your wallet address in the `who` (address) field.
Hit `Query`. The data returned should look like this:
Once you verify that you are whitelisted, you are ready to read from the Oracle's smart contract.
## Option 3: Directly on the Chronicle Dashboard
You can also whitelist addresses directly on the Chronicle Dashboard.
Simply select the Oracle you want read-access to, then click the 'Use this oracle for free' option in the top right corner, as shown in the image below.
Please keep in mind that you'll need some native gas tokens from the selected testnet to cover the gas costs for the whitelisting process, as it's a write operation. You can find a list of faucets for different networks [here](/Resources/Utils.md).
A window will pop up to connect your wallet.
After selecting and connecting your wallet, you’ll be prompted to paste the address you want to whitelist.
Press the 'Use Oracle' button, confirm, and then wait a few seconds for the process to finalize.
Your address is now whitelisted and ready to read from the oracle.
---
// File: Developers/Guides/contracts
# Contract Implementation Example of IChronicle
:::info
You can find an example of our IChronicle.sol interface [here](https://github.com/chronicleprotocol/chronicle-std/blob/ea9afe78a1d33245afcdbcc3f530ee9cbd7cde28/src/IChronicle.sol#L4) . Please see the comments corresponding to each function to better understand the utility it provides.
:::
# Example Contract
The Example contract is a basic implementation of the [IChronicle interface](https://github.com/chronicleprotocol/chronicle-std/blob/ea9afe78a1d33245afcdbcc3f530ee9cbd7cde28/src/IChronicle.sol#L4). It demonstrates basic interaction with an oracle interface defined by IChronicle.
The contract has no protections, and should only be used for **learning purposes**.
## Key Features
1. State Variables:
`_val`: Stores the current value from the oracle.
`_age`: Stores the age of the value.
2. Immutable Variables:
`wat`: A public immutable variable set during contract deployment that represents the Oracle's identifier.
3. Functions:
**`read()`**:
Returns the current value of the Oracle stored in `_val`.
**`tryRead()`**:
Checks if `_val` is non-zero and returns a tuple with a boolean result and the value of `_val`.
If `_val` is non-zero, it returns `(true, val)`; otherwise, it returns `(false, val)`.
**`readWithAge()`**:
Retrieves the values of `_val` and `_age`, checks that `_val` is non-zero, and returns a tuple with these two values. If `_val` is zero, the function call will fail, and no values will be returned.
**`tryReadWithAge()`**:
Checks if `_val` is non-zero and returns a tuple indicating the result of this check along with the values of `_val` and `_age` (or zeros if `_val` is zero).
**`poke()`**:
Allows an external caller to update the values of the state variables `_val` and `_age`. This function can be used to set or change the Oracle's value and its age.
```js
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;
import {IChronicle} from "chronicle-std/IChronicle.sol";
// This contract has ZERO protections, never use for anything other than learning!
contract Example is IChronicle {
uint private _val;
uint32 private _age;
/// @inheritdoc IChronicle
/// The Oracle identifier; mostly asset pairs, e.g. ETH/USD
bytes32 public immutable wat;
constructor(bytes32 _wat) {
wat = _wat;
}
/// @inheritdoc IChronicle
function read() external view returns (uint) {
return _val;
}
/// @inheritdoc IChronicle
function tryRead() external view returns (bool, uint) {
uint val = _val;
return (val != 0, val);
}
/// @inheritdoc IChronicle
/// @return value The oracle's current value.
/// @return age The value's age.
function readWithAge() external view returns (uint, uint) {
uint val = _val;
uint age = _age;
require(val != 0);
return (val, age);
}
/// @inheritdoc IChronicle
function tryReadWithAge() external view returns (bool, uint, uint)
{
uint val = _val;
uint age = _age;
return val != 0 ? (true, val, age) : (false, 0, 0);
}
function poke(uint val, uint32 age) external {
_val = val;
_age = age;
}
}
```
---
// File: Developers/Guides/morphoVault
# Deploy a Chronicle Oracle for Morpho Markets
Chronicle's Oracles are partially compatible with Chainlink oracles implementing the most widely used (and not deprecated) functions of the IChainlinkAggregatorV3 interface such as latestRoundData(), decimals(), and latestAnswer().
To integrate Chronicle Oracles into Morpho Markets, you can deploy the [Morpho Chainlink Adapter](https://github.com/morpho-org/morpho-blue-oracles/blob/main/src/morpho-chainlink/MorphoChainlinkOracleV2.sol). This adapter enables compatibility between Chronicle’s Oracles and Morpho's infrastructure.
For easier deployment, you can use the [MorphoChainlinkOracleV2Factory](https://github.com/morpho-org/morpho-blue-oracles/blob/main/src/morpho-chainlink/MorphoChainlinkOracleV2.sol). A step-by-step guide is available in [Morpho’s documentation](https://docs.morpho.org/curation/tutorials/deploying-oracle/).
:::warning
**Before deploying the Morpho Chainlink Adapter using the MorphoChainlinkOracleV2Factory, the target address of the Adapter must be whitelisted (also referred to as "kissed")** by the Chronicle team. Read access will fail if the requesting address is not whitelisted, as Chronicle's oracles are protected by a whitelist. To get the address whitelisted, get in touch with the team by [opening a ticket on Discord](https://discord.com/invite/CjgvJ9EspJ), and check below the details needed for the whitelist.
:::
## Getting Read Access for the Adapter
Chronicle oracles enforce read protection via a whitelist. To request read access for your Adapter:
- [Open a ticket on Discord](https://discord.com/invite/CjgvJ9EspJ)
- Share the address to be whitelisted with the Chronicle team.
Since the Adapter hasn’t been deployed yet, you’ll need to **pre-compute its address**. There are two ways to do this:
### Option 1: Simulate Deployment
- Deploy the oracle adapter locally or on a forked network (e.g., Tenderly, Anvil). The failing deployment attempt will reveal the pre-computed address.
- Send that resulting address to the Chronicle team for whitelisting.
### Option 2: Provide Deployment Parameters
If you prefer not to simulate the deployment, send the following instead:
- The address of the MorphoChainlinkOracleV2Factory.
- The [salt](https://github.com/morpho-org/morpho-blue-oracles/blob/main/src/morpho-chainlink/MorphoChainlinkOracleV2Factory.sol#L37) you intend to use for the oracle deployment.
The Chronicle team will use this information to whitelist the address ahead of time.
:::note
If you need any additional help with the process mentioned above, feel free to mention it in the [Discord ticket](https://discord.com/invite/CjgvJ9EspJ) you open — we're happy to support you with the deployment.
:::
Once you receive the confirmation form the Chronicle team that the target address has been whitelisted, you can proceed with the actual deployment of the Adapter using the Factory.
---
// File: Developers/Guides/runChallengerK8s
# Running a challenger in kubernetes
challenger: A Helm chart for deploying the OpPoke Challenger Bot (go and rust) in Kubernetes
---
You can run a Chronicle Challenger Bot to help secure the price messages our validators emit. A Challenger searches for opPoked events for ScribeOptimistic contract. It Verifies poke schnorr signature and challenges it, if it's invalid.
#### Repos:
Challenger Implementations:
- [chronicleprotocol/challenger](https://github.com/chronicleprotocol/challenger)
- [chronicleprotocol/challenger-rs](https://github.com/chronicleprotocol/challenger-rs)
Challenger helm chart:
- [challenger helm chart](https://github.com/chronicleprotocol/charts/blob/main/charts/challenger/)
## Requirements
- A Kubernetes cluster (Managed cluster like EKS, GKE, AKS, or something like K3s, K0s, kind, etc.)
- [kubectl](https://kubernetes.io/docs/tasks/tools/)
- [helm](https://helm.sh/)
- Foundry [cast](https://book.getfoundry.sh/cast/)
- 5 minutes of your time
## Create a new EOA/Wallet
First, create an Ethereum key. Using Foundry's `cast` can be done like this:
```
cast wallet new -p .
Enter secret:
Created new encrypted keystore file: /path/to/dir/59b09efc-752f-48a3-a2e3-01e172936ef7
Address: 0x985CFfB504fCDcBe3676a0f5E7E9B52F27be3989
```
## Prep the kubernetes secret
Take note of the encryption password you used when creating the keystore, as it will be needed for this next step:
```
kubectl create secret generic my-eth-keys \
--from-file=ethKeyStore=/path/to/dir/59b09efc-752f-48a3-a2e3-01e172936ef7 \
--from-literal=ethFrom=0x985CFfB504fCDcBe3676a0f5E7E9B52F27be3989 \
--from-literal=ethPass=
```
You will now have a kuberenetes secret called `my-eth-keys`. this secret will have `ethKeyStore`, `ethFrom` and `ethPass` that will be referenced when installing the challenger helm chart.
## Installing the Challenger
The challenger has two different implemantations that can be run, in Go and Rust. Challengers all need a valid ethereum rpc node, and optionally a flashbots/mev protected rpc for submitting transactions to a private mempool.
You can view the [default values](https://github.com/chronicleprotocol/charts/blob/main/charts/challenger/values.yaml) to see what the helm chart expects.
Examples of minimal values needed can be viewed [here](https://github.com/chronicleprotocol/charts/tree/main/charts/challenger/ci)
You will want to create a values file containg your challenger bot's config like this:
#### file: values.yaml
```
# -- [REQUIRED] can be `go` ro `rs`, default `go`
implementation: rs
# -- [REQUIRED]: you need a valid ethereum rpc node
ethRpcUrl: "https://my-eth-rpc-node:8551"
# -- [OPTIONAL]: provide an MEV rpc endpoint for private txs
flashbotsRpcUrl: "https://rpc.flashbots.net/fast"
# -- Provide a list of oracle contract addresses to monitor.
# Chronicle_ETH_USD_3
- 0x46ef0071b1E2fF6B42d36e5A177EA43Ae5917f4E
# Chronicle_FOO_BAR_1
- 0x1234.......
# -- Reference the k8s secret/s containing your eoa keystore, and passphrase
ethConfig:
ethKeys:
existingSecret: "my-eth-keys"
key: "ethKeyStore"
ethPass:
existingSecret: "my-eth-keys"
key: "ethPass"
# -- OR you can supply only ETH private key:
# ethPrivateKey:
# existingSecret: "eth-private-key"
# key: "ethPrivateKey"
```
We can now install the challenger bot:
Add the chronicle helm chart repo:
```
helm repo add chronicle https://chronicleprotocol.github.io/charts/
```
update the help repos:
```
helm repo update
```
Finally, install the challenger:
```
helm install my-challenger -f path/to/values.yaml chronicle/challenger --version 0.1.0
```
Verify that the challenger is running without errors:
```
kubectl get pods
```
Then get the logs for the challenger pod:
```
kubectl logs rs-challenger-6645776c5-c4mpg
[2025-05-20T11:14:27Z INFO challenger] Using RPC URL: "http://my-eth:8554"
[2025-05-20T11:14:27Z DEBUG challenger::wallet] Using Keystore file from `"/keystore/keystore.json"` and password from file
[2025-05-20T11:14:27Z INFO challenger] Using 0x0833fc5f5944a307fa210535fbd355763b8cad47 for signing transactions.
[2025-05-20T11:14:27Z INFO challenger] Starting Prometheus metrics collector on port: 9090
[2025-05-20T11:14:27Z DEBUG scribe::event_processor] ScribeEventsProcessor[0x46ef0071b1e2ff6b42d36e5a177ea43ae5917f4e] Starting new contract handler
[2025-05-20T11:14:27Z INFO challenger] Starting events poller
[2025-05-20T11:14:27Z INFO scribe::events_poller] Poller: Starting polling events from RPC...
[2025-05-20T11:14:27Z INFO challenger] Starting metrics collector
[2025-05-20T11:14:28Z DEBUG scribe::event_processor] ScribeEventsProcessor[0x46ef0071b1e2ff6b42d36e5a177ea43ae5917f4e] Challenge period fetched: 600
```
---
// File: Developers/tutorials/Remix
# Consuming Oracle Data
import Button from '@site/src/components/Button';
Chronicle oracles are read-protected by a whitelist, meaning you won't be able to read them on-chain without your address being added to the whitelist.
:::info
On Testnet, the [SelfKisser contract](https://github.com/chronicleprotocol/self-kisser) allows users to whitelist themselves, whimsically termed 'kiss' themselves.
On Mainnet, to get access to production Oracles, please open a ticket on [Discord](https://discord.com/invite/CjgvJ9EspJ) via the 🆘 | support channel.
:::
| Testnet Network | SelfKisser Address |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| Ethereum Sepolia | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| Base Sepolia | [0x70E58b7A1c884fFFE7dbce5249337603a28b8422](https://sepolia.basescan.org/address/0x70E58b7A1c884fFFE7dbce5249337603a28b8422#code) |
| Arbitrum Sepolia | [0xc0fe3a070Bc98b4a45d735A52a1AFDd134E0283f](https://sepolia.arbiscan.io/address/0xc0fe3a070Bc98b4a45d735A52a1AFDd134E0283f#code) |
| Gnosis Mainnet | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://gnosisscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| Mantle Testnet | [0x9ee0DC1f7cF1a5c083914e3de197Fd1F484E0578](https://explorer.sepolia.mantle.xyz/address/0x9ee0DC1f7cF1a5c083914e3de197Fd1F484E0578#code) |
| Scroll Sepolia | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.scrollscan.com/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| zkSync Sepolia | [0x25f594edde4f58A14970b2ef6616badBa4B1CdDD](https://sepolia.explorer.zksync.io/address/0x25f594edde4f58A14970b2ef6616badBa4B1CdDD#contract) |
| Optimism Sepolia | [0xfF619a90cDa4020897808D74557ce3b648922C37](https://sepolia-optimism.etherscan.io/address/0xfF619a90cDa4020897808D74557ce3b648922C37#code) |
| Berachain Bepolia | [0x584914a893aBefB95abC02A5604338c0390F328B](https://bepolia.beratrail.io/address/0x584914a893aBefB95abC02A5604338c0390F328B) |
| Superseed Sepolia | [0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B](https://sepolia-explorer.superseed.xyz/address/0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B#code) |
| Corn Sepolia | [0x8CA2E3a09c79233127dC21955e28A6b9C4bf166E](https://testnet.cornscan.io/address/0x8CA2E3a09c79233127dC21955e28A6b9C4bf166E) |
| Plume Testnet | [0xd6de00f82738c966c88F55017e8aCcA192AF42a1](https://testnet-explorer.plumenetwork.xyz/address/0xd6de00f82738c966c88F55017e8aCcA192AF42a1) |
| Monad Testnet | [0x9a0de663c20127a229891eA0C7Db99c785BF91e3](https://monad-testnet.socialscan.io/address/0x9a0de663c20127a229891eA0C7Db99c785BF91e3) |
| Unichain Sepolia | [0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B](https://unichain-sepolia.blockscout.com/address/0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B) |
| Avalanche Fuji Testnet| [0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B](https://testnet.snowtrace.io/address/0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B) |
### Consuming Oracle Data (Remix)
An example contract named `OracleReader.sol` allows you to consume Oracle data and can be quickly deployed on [Remix](https://remix.ethereum.org/). Remix is a web-based integrated development environment (IDE) for creating, running, and debugging smart contracts directly in your browser.
:::info
- In the table above you can find the address of the SelfKisser on different chains.
- Addresses in this contract are hardcoded for the **Sepolia testnet**.
- For other supported networks, please check the [Dashboard](https://chroniclelabs.org/dashboard), under the `Testnets` tab.
:::
```js
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;
/**
* @title OracleReader
* @notice A simple contract to read from Chronicle oracles
* @dev To see the full repository, visit https://github.com/chronicleprotocol/OracleReader-Example.
* @dev Addresses in this contract are hardcoded for the Sepolia testnet.
* For other supported networks, check the https://chroniclelabs.org/dashboard/oracles.
*/
contract OracleReader {
/**
* @notice The Chronicle oracle to read from.
* Chronicle_ETH_USD_3:0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603
* Network: Sepolia
*/
IChronicle public chronicle = IChronicle(address(0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603));
/**
* @notice The SelfKisser granting access to Chronicle oracles.
* SelfKisser_1:0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d
* Network: Sepolia
*/
ISelfKisser public selfKisser = ISelfKisser(address(0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d));
constructor() {
// Note to add address(this) to chronicle oracle's whitelist.
// This allows the contract to read from the chronicle oracle.
selfKisser.selfKiss(address(chronicle));
}
/**
* @notice Function to read the latest data from the Chronicle oracle.
* @return val The current value returned by the oracle.
* @return age The timestamp of the last update from the oracle.
*/
function read() external view returns (uint256 val, uint256 age) {
(val, age) = chronicle.readWithAge();
}
}
// Copied from [chronicle-std](https://github.com/chronicleprotocol/chronicle-std/blob/main/src/IChronicle.sol).
interface IChronicle {
/**
* @notice Returns the oracle's current value.
* @dev Reverts if no value set.
* @return value The oracle's current value.
*/
function read() external view returns (uint256 value);
/**
* @notice Returns the oracle's current value and its age.
* @dev Reverts if no value set.
* @return value The oracle's current value using 18 decimals places.
* @return age The value's age as a Unix Timestamp .
* */
function readWithAge() external view returns (uint256 value, uint256 age);
}
// Copied from [self-kisser](https://github.com/chronicleprotocol/self-kisser/blob/main/src/ISelfKisser.sol).
interface ISelfKisser {
/// @notice Kisses caller on oracle `oracle`.
function selfKiss(address oracle) external;
}
```
Ensure your environment is set to **Remix VM - Sepolia Fork** (since this example is hardcoded for Sepolia).
import deploy from '../../../static/img/remix_deploy.png'
import result from '../../../static/img/remix_result.png'
Deploy the `OracleReader.sol` contract and you should see the following:
- **chronicle**: returns ` 0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603`, which is the address of the `Chronicle_ETH_USD_3` Oracle
- **read**: returns the current price (3533995000000000000000) and its age (1718091840) at the moment of calling.
Note: the price uses 18 decimals, meaning that the actual price is 3533.995. Age uses Unix Timestamp, meaning that 1718091840 corresponds to 'Tue Jun 11 2024 07:44:00 GMT'.
- **selfKisser**: returns the address of the SelfKisser `0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d`
:::info
Please be aware that, as the project currently stands, you should use **Foundry** in terms of programming environments, and deploy your contracts to the **Sepolia** network.
:::
Please refer to the following [GitHub Repo](https://github.com/chronicleprotocol/scaffold-oracle-reader) to take advantage of the boilerplate we have created in conjunction with [Scaffold-ETH2](https://scaffoldeth.io/).
To find our `OracleReader.sol` contract, follow the following path:
```
- packages
- foundry
- contracts
- OracleReader.sol
```
Below is an example of the contract integrated into the repo:
```js
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;
/**
* @title OracleReader
* @notice A simple contract to read from Chronicle oracles
* @dev Addresses in this contract are hardcoded for the Sepolia testnet.
* For other supported networks, check https://chroniclelabs.org/dashboard/oracles.
*/
contract OracleReader {
/// @notice The Chronicle ETH/USD oracle.
IChronicle public immutable chronicle;
/// @notice The SelfKisser granting access to Chronicle oracles.
ISelfKisser public immutable selfKisser;
constructor(address chronicle_, address selfKisser_) {
chronicle = IChronicle(chronicle_);
selfKisser = ISelfKisser(selfKisser_);
// Note to add address(this) to chronicle oracle's whitelist.
// This allows the contract to read from the chronicle oracle.
selfKisser.selfKiss(address(chronicle));
}
/// @notice Function to read the latest data from the Chronicle oracle.
/// @return val The current value returned by the oracle.
function read() external view returns (uint256 val) {
return chronicle.read();
}
}
// Copied from [chronicle-std](https://github.com/chronicleprotocol/chronicle-std/blob/main/src/IChronicle.sol).
interface IChronicle {
/**
* @notice Returns the oracle's current value.
* @dev Reverts if no value set.
* @return value The oracle's current value.
* /
function read() external view returns (uint256 value);
}
// Copied from [self-kisser](https://github.com/chronicleprotocol/self-kisser/blob/main/src/ISelfKisser.sol).
interface ISelfKisser {
/// @notice Kisses caller on oracle `oracle`.
function selfKiss(address oracle) external;
}
```
Add your environment variables in the `.env.example` file and rename it to `.env`:
```
- packages
- foundry
- .env.example
```
```js
/*
* Template for environment variables.
* To use this template, copy this file, rename it .env, and fill in the values.
* The Chronicle ETH/USD Oracle on Sepolia.
*/
DEPLOYER_PRIVATE_KEY=
ETHERSCAN_API_KEY=
ALCHEMY_API_KEY=
# The Chronicle ETH/USD Oracle on Sepolia.
CHRONICLE_ORACLE=0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603
# The Chronicle SelfKisser contract on Sepolia.
SELF_KISSER=0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d
```
---
// File: Intro/intro
# Understanding Chronicle
## **Welcome to Chronicle Protocol**
Chronicle Protocol is a novel Oracle solution that has exclusively secured at times over $20B in assets for MakerDAO and its ecosystem since 2017. With a history of innovation, including the invention of the first Oracle on Ethereum, Chronicle Protocol continues to redefine Oracle networks. A blockchain-agnostic protocol, Chronicle overcomes the current limitations of transferring data on-chain by developing the first truly scalable, cost-efficient, decentralized, and verifiable Oracles, rewriting the rulebook on data transparency and accessibility.
### **Why Chronicle**
Cost Efficient
While other Oracles rely on the Elliptical Curve Digital Signature Algorithm (ECDSA), which creates a one-to-one relationship between the number of validators and their signatures, Scribe utilizes a novel application of **Schnorr Signature cryptography**. This allows the consolidation of signatures from a scalable set of validators into a single "super signature" that is then verified by ECDSA. The result? **A near-constant gas cost for Oracle updates, regardless of how many validators are involved.**
Scalable
The ingenious application of Schnorr Signature cryptography allows Chronicle Oracles to achieve scalability by **decoupling the validator number from the gas cost**.
Verifiable Data
The Dashboard ensures **verifiability at every level**. Users can cryptographically verify any Validator's Signature in the browser, as well as the Schnorr Signature used to push the price onchain to the corresponding Oracle.
Plug & Play
The protocol architecture prioritizes accessibility. Chronicle is a **blockchain-agnostic protocol** that can be deployed easily to almost any chain. Chronicle Oracles offer seamless integration capabilities, allowing them to be incorporated into existing protocols on supported chains within minutes.
Decentralized
Chronicle’s validators are run by the community. Given the decoupling of the number of validators and gas costs, Chronicle enables greater decentralization, delivering **more security and more resilience at a near-constant price**.
Reputable & Secure
Chronicle’s **validators are represented by a community of leading blockchain protocols** including [MakerDAO](https://makerdao.com/), [Infura](https://www.infura.io/), [Gitcoin](https://www.gitcoin.co/), [Etherscan](https://etherscan.io/), [Gnosis](https://www.gnosis.io/), [DeFi Saver](https://defisaver.com/), and more. This approach is unique to Chronicle and ensures that the Oracle data is being signed by some of the most trusted and reputable projects in the blockchain space, further reinforcing trust in the protocol.
Chronicle is the [second largest Oracle provider by Total Value Secured (TVS)](https://defillama.com/oracles) and currently secures over **$10B** in assets for reputable protocols such as MakerDAO, Spark, Morpho, and more.
---
// File: Intro/mission
# Our Mission
Our goal is to build infrastructure that allows the founding ethos of decentralization and transparency to flourish. Ensuring convenience but no longer at the cost of true decentralization or verifiability. We are on a mission to develop frictionless, decentralized & verifiable infrastructure for all on-chain data transmission.
### Who we are
At Chronicle, we believe all data should be verifiable, censorship-resistant, and ubiquitously accessible. We believe that data should be delivered via a decentralized network securely, on demand, and with users in control of their cost center.
### What we do
We are building the future of on-chain infrastructure. Verifiable and decentralized data highways, empowering the world with unfettered and uncensored information. Chronicle Oracles define a new paradigm in access to scalable, secure, resilient, and affordable on and off-chain data.
### Who we work for
Chronicle Protocol is being built for those who want to know where every element of their data comes from. For those who want to hedge against increased centralized control and censorship in the data space. And for those who think that access to on-chain data in its current form is too expensive, a barrier to growth, and a cost hard to predict and control. Ultimately, Chronicle Protocol has been designed to operate automatically and ubiquitously, connecting users that require immediate and verifiable data with a gold standard of Validators.
---
// File: Intro/network
# Decentralized Oracle Network
You can think of Chronicle as a decentralized protocol managing a network of trusted participants (validators) that report pricing information from various sources (both on-chain and off-chain). One aspect that sets Chronicle apart from other Oracle providers is that the validators of Chronicle are represented by a community of the leading blockchain protocols including [MakerDAO](https://makerdao.com), [Infura](https://www.infura.io/), [Gitcoin](https://www.gitcoin.co/), [Etherscan](https://etherscan.io/), [DeFi Saver](https://defisaver.com/), [Gnosis](https://www.gnosis.io/), [Nethermind](https://www.nethermind.io/), [Euler](https://www.euler.finance/), [Mantle](https://www.mantle.xyz/), [ETH Global](https://ethglobal.com/), [SteakHouse Financial](https://www.steakhouse.financial/), [Bitcoin Suisse](https://bitcoinsuisse.com/), [Block Analitica](https://blockanalitica.com/). This approach is unique to Chronicle and ensures that the Oracle data is being signed by some of the most trusted and reputable projects in the blockchain space, further reinforcing trust in the protocol.
Smart contracts often perform real-time operations based on asset price data, particularly in DeFi. For example, MakerDAO uses Chronicle’s Oracles to calculate the value of borrowers' deposits.
Each Oracle provider has its own peer-to-peer (P2P) network of these participants (validators), who report prices based on strategies (such as source and update threshold) defined by the data model through an on-chain registry. All validators query external sources, then sign and broadcast (send) those prices assembled into a sorted grouping (the median) by a relay that posts the value on-chain.
An aggregation strategy determines the “true” price for any Oracle. This is typically in the form of median of medians (to filter outliers) and requires a minimum number of unique validator “answers”([bar](/Developers/glossary#bar)) to calculate.
### Components of a Decentralized Oracle Network
Oracle Networks include the following components:
- The consumer (either a contract or an Externally Owned Account)
- The Validator Registry
- Oracles
A Consumer uses Chronicle Oracles to consume aggregated data. Consumers must reference the correct IChronicle contract and invoke one of the available functions.
```
e.g.,
...
IChronicle public chronicle = IChronicle(address(0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603)); // Chronicle_ETH_USD_3:0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603 on Sepolia
return chronicle.read();
```
The **Validator Registry** maintains a comprehensive list of all validators that are recognized as valid participants in the network.
Each **Oracle** receives periodic data from the validators and stores data on-chain so that consumers can retrieve it. Oracles receive updates from the validator network when either the Deviation Threshold or the Update Threshold triggers an update during the aggregation round.
**Deviation Threshold**: A new aggregation round is triggered when a node identifies that the off-chain values deviate more than a pre-defined threshold for that on-chain value.
**Update Threshold**: A new aggregation round is triggered after a specified amount of time since the latest update. If the data values stay within the Deviation Threshold, an update will only be triggered every X minutes / hours.
---
// File: Intro/feeds
# Type of Oracles
When creating an oracle, customers have multiple configuration options. The following characterization is based on the sources the oracle uses.
## Market Rate Oracles
Market rate oracles aggregate data from multiple sources, including onchain data from DEXs and offchain data from CEXs. This approach ensures real-time pricing but is also sensitive to market fluctuations.
- [METH/ETH](https://chroniclelabs.org/dashboard/oracle/METH/ETH?blockchain=MANTLE&txn=0x0942ab3efafd5a04f9a97215a02b67388ede279f1e212dbf7a2a5dd477c40554&contract=0xBFE568Ea8f6bDFFe7c03F83dC8348517f8E7010A)
## Exchange Rate Oracles
Also called **Fundamental Oracles**, Exchange Rate Oracles are computed based on the value of underlying assets. They provide stable reference rates but they may not always reflect real-time market fluctuations. These are most frequently associated with LSTs (Liquid Staked Tokens) and yield-earning token wrappers (e.g. ERC4626 tokens).
In other words, an exchange rate oracle indicates how much an asset is worth based on what the asset is backed by.
- [WSTETH / ETH](https://chroniclelabs.org/dashboard/oracle/WSTETH%23fundamental/ETH#blockchain=UNICHAIN&contract=0x74661a9ea74fD04975c6eBc6B155Abf8f885636c&txn=0x41b689e145fa7983df6f979c2191cf4c10c927f6ec835b199ec08fcddddfb455)
## Hybrid Oracle
This type of oracle uses a combination of exchange and market rates.
For example, the
[WSTETH/USD](https://chroniclelabs.org/dashboard/oracle/WSTETH/USD#blockchain=ETH&contract=0xA770582353b573CbfdCC948751750EeB3Ccf23CF&txn=0x729386eca08be935623c5ca6bac032cb01d4bb2c1ab221f307d5275af24bc6c3) oracle uses both market prices for WSTETH as well as the fundamental value of the unwrapping WSTETH to STETH along with STETH market prices.
---
// File: Intro/validators
# Chronicle's Validator Set
Validators are the backbone of the Chronicle Protocol, maintaining the decentralized infrastructure that powers the oracle network. Their responsibilities include:
- Collecting data from diverse sources (onchain and offchain).
- Aggregating inputs to ensure accuracy.
- Submitting final values onchain in a secure, verifiable manner.
By participating in this distributed network, validators enhance the protocol’s security, reliability, and resilience.
## What Makes Chronicle Different
Chronicle's validator set is composed of reputable, battle-tested organizations across Web3.
This approach ensures that:
- Validators are aligned with the long-term success of Web3.
- They are resilient to coercion and capable of maintaining service under pressure.
- They bring deep expertise and proven security practices, ensuring reliable onchain data flows.
- Each new validator strengthens the network’s resilience while contributing unique expertise.
The validator network includes some of the most respected names in the ecosystem, such as:
- [Sky](https://sky.money/)
- [Infura](https://www.infura.io/)
- [Gitcoin](https://www.gitcoin.co/)
- [Etherscan](https://etherscan.io/)
- [DeFi Saver](https://defisaver.com/)
- [Gnosis](https://www.gnosis.io/)
- [Nethermind](https://www.nethermind.io/)
- [Euler](https://www.euler.finance/)
- [Mantle](https://www.mantle.xyz/)
- [ETH Global](https://ethglobal.com/)
- [SteakHouse Financial](https://www.steakhouse.financial/)
- [Bitcoin Suisse](https://bitcoinsuisse.com/)
- [Block Analitica](https://blockanalitica.com/)
A full list of validators can be accessed via [the Chronicle Dashboard](https://chroniclelabs.org/dashboard/validators).
This unique validator composition ensures that Chronicle’s oracle data is signed and verified by trusted leaders in Web3, further reinforcing confidence in the protocol.
---
// File: Intro/Scribe/scribeOptimistic
# ScribeOptimistic
## Background
[ScribeOptimistic](https://github.com/chronicleprotocol/scribe/blob/41f25a8a40f1a1d2ef62d6a073f98a3c57d23579/src/ScribeOptimistic.sol) is a contract that builds upon [Scribe](https://github.com/chronicleprotocol/scribe/blob/41f25a8a40f1a1d2ef62d6a073f98a3c57d23579/src/Scribe.sol), providing additional optimistic poke functionality on **Layer 1 blockchains**.
### Problem Statement
On Layer 1 blockchains, computation is expensive, and signature aggregation is a gas-intensive process. This makes the onchain verification of the Schnorr aggregated signature costly, as it requires a significant amount of gas.
### Solution
ScribeOptimistic addresses this issue by introducing the `opPoke()` function, which enables offchain verification of the Schnorr aggregated signature. This allows for a more efficient and cost-effective way to verify signatures on Layer 1 blockchains.
## How Does it Work?
With ScribeOptimistic all values optimistically proposed by validators are put into a public “buffer” and get automatically accepted after the challenge period.
During the challenge period, anyone can verify the signature offchain. If you find a signature to be invalid you can additionally call `opChallenge()` to collect an ETH reward by having the Oracle verify the signature onchain. `OpChallenge()` can be called at any time, but only successful challenges will procure the reward.
Upon a successful challenge, the challenger will receive a reward in ETH, the optimistic answer gets dropped, and the validator responsible for the answer will be removed.
The ETH reward is sent directly inside the `opChallenge()` transaction to the challenger if the opPoke is invalid. In other words, Chronicle Protocol will pay you to monitor their Oracles and challenge invalid data.
To check the current challenge period, you can check the `opChallengePeriod`’s value using `opChallengePeriod()` which returns a value in seconds. Similarly, you can check the reward for successfully challenging the opPoke using the `challengeReward()`.
## `OpPoke()`
The `opPoke()`allows a validator to sign a (value, age) tuple and a corresponding Schnorr signature, using ECDSA. Here, the value represents the data that the validators reached consensus on as the next data for the Oracle to deliver, and the age is the timestamp of this value.
### Steps:
- Each validator collects a set of data from multiple trusted data sources and signs an aggregated value (median). All of these values and signatures are aggregated into a single Schnorr signature aggregated again into a final proposed value (median).
- The signed data (median of medians) is then sent by a validator to the `opPoke()`.
- `OpPoke()` binds the validator to the signed data. A public callable `opChallenge()` can be called to challenge the data.
- The validator is now associated with the signed data, and the data is considered "poked" after the challenge period ends without a successful challenge.
## `OpChallenge()`
The `opChallenge()` function is a public callable function that can be called at any time. Its purpose is to verify the current optimistically poked data to remove any potential invalid opPokes and remove the validator that submitted an invalid `opPoke()`.
### Steps:
- `OpChallenge()` is called, which triggers the verification process.
- The function performs the Schnorr signature verification of the currently opPoked data.
- If the verification succeeds, the data is finalized.
- If the verification fails, the validator bound to the data is removed, the data is deleted, and the challenger gets an ETH reward.
## How does ScribeOptimistic differ from Scribe?
Scribe Oracles provide instant updates and are optimized for Layer 2 (L2) networks that prioritize speed, where gas costs are low. This means that as soon as a new price is published, it becomes available.
ScribeOptimistic Oracles are tailored for Layer 1 (L1) networks, where computation costs are significantly higher. With ScribeOptimistic, an incoming price is not finalized until the challenge period has concluded. You can think of it as a delayed oracle. The shorter the challenge period, the less phase-shifted the oracle becomes.
*Scribe Optimistic example with a 20-minute challenge period.*
Currently, Chronicle's challenge period is set to **10 minutes**, though this value is customizable. Once the challenge period ends, the optimistic price is finalized and published on the oracle, even if the market price has shifted in the meantime.
## Running a Challenger
Users who want to actively participate in the network can look into [running a challenger](../../Developers/Guides/runChallengerK8s.md). You can choose from either the [Rust implementation](https://github.com/chronicleprotocol/challenger-rs) or the [Go implementation](https://github.com/chronicleprotocol/charts/tree/main/charts/challenger). Monitoring optimistic pokes and, if necessary, challenging them is incentivized via [ETH rewards](https://github.com/chronicleprotocol/scribe/blob/main/src/IScribeOptimistic.sol).
---
// File: Intro/Scribe/scribe
# Scribe
Scribe is the name for a new type of Oracle architecture developed by the team at Chronicle Labs. The design is built around 5 pillars:
- Scalability
- Transparency
- Accessibility
- Resilience
- Security
Scribe v1 achieves significant progress towards each pillar; however, there are more features planned that will further enhance Scribe’s STARS.
Scribe is an extremely gas-efficient Oracle based on aggregated Schnorr signatures. Providing nearly constant gas costs on Layer 2s and on Layer 1s, Scribe boasts of fixed gas costs, leading to substantial savings—over 60% relative to competing Oracles and an impressive 80% compared to Chainlink. This approach to gas management significantly boosts the scalability of the Oracle.
Prior to Scribe, architecturally, all blockchain Oracles used a standalone implementation of the elliptic curve digital signature algorithm (ECDSA) to generate public keys to cryptographically authenticate the identity of the signer or validator and, therefore, the integrity of the reported data.
:::tip
The Elliptic Curve Digital Signature Algorithm (ECDSA) signatures typically exhibit a one-to-one relationship between the signature and the signer, implying that more signers result in more signatures for an oracle response. Consequently, this leads to an increase in the volume of data that must be stored on the blockchain, resulting in higher costs due to the larger data size.
:::
Scribe uses a novel application of Schnorr Signature cryptography, a signature, and key aggregation algorithm to create a single ‘super signature’, which is then authenticated via ECDSA.
The Chronicle Scribe Oracle interface is plug-and-play with Chainlink and Maker Oracles, providing a smooth transition for developers used to these platforms.
## Why this matters
The original ECDSA design created a tradeoff for Oracle designers. The more signers or validators that an Oracle protocol has, the more it would cost the Oracle builder/operator to update the latest reported data of the Oracle.
This is because every signer or validator must individually sign ‘the message’ to attest to its integrity.
This ultimately meant those looking to utilize oracles had to consider the pros and cons when it came to the importance of cost, speed, and decentralization.
### Cheap-to-operate Oracle
- Pro: A low cost to update the Oracle (and therefore a low operating cost for the Oracle provider). This is achieved by having less signers attesting to the data.
- Con: Lower security and decentralization of the Oracle protocol.
### Secure and decentralized Oracle
- Pro: Highly secure and decentralized Oracle protocol
- Con: A high cost to update the Oracle
### Enter Scribe
The goal with Scribe was to eliminate this tradeoff. Creating the first Oracle that could support a huge number of validators and post updated data on-chain at a low cost.
The result is an Oracle that can have unlimited validators and costs 6x less to update than Chainlink, and 3.5x less than Pyth (on L1 & L2), making it the most secure, decentralized, and cost-efficient option available.
To read more on Scribe, please see the links below
#### **More on Scribe**
- [Eth Magician Post](https://ethereum-magicians.org/t/an-efficient-schnorr-multi-signature-implementation/15510)
- [Twitter Thread](https://twitter.com/merkleplant_eth/status/1693652385980379593)
- [Scribe's docs](https://github.com/chronicleprotocol/scribe/blob/main/docs/Scribe.md)
- [What is Scribe? The novel Oracle by Chronicle](https://chroniclelabs.org/blog/what-is-scribe-the-novel-oracle-by-chronicle)
---
// File: Intro/dive/onchain
# Onchain Components
- **List of Validators**: This refers to the entities or individuals who are authorized to participate in the MultiSig validation process for a particular data model. MultiSig validation typically requires multiple parties to sign off on a transaction or data update before it is considered valid. The list of validators outlines who these authorized parties are.
- **Quorum**: This represents the minimum number of validations or "feeds" required for a MultiSig validation to be considered valid for a specific data model. For example, if the quorum for a particular data model is set to 11, it means that exactly 11 out of the total number of validators listed must sign off on the transaction or data update for it to be accepted.
- **ValidatorRegistry** maintains a list of all Validators that are recognized as valid participants in the network/protocol. Validators, in this context, are trusted entities within the network that collaborate through a *peer-to-peer* (p2p) network to supply new oracle data.
- An onchain enforced consensus mechanism ensures that data provided by these Validators is validated by a specific number, known as the `bar` of Validators. The ValidatorRegistry provides functionalities such as filtering p2p connections based on the identities of Validators and translating validator addresses to/from their corresponding 1-byte identifier. By leveraging the ValidatorRegistry, Chronicle Protocol ensures that only authenticated and authorized Validators participate in the network activities, thereby enhancing the security and integrity of the oracle data provided by the protocol.
---
// File: Intro/dive/offchain
# Offchain Components
- **Validators** read data from different sources, also known as origins - i.e. where the data originates from. Those sources can be both onchain and offchain. Validators then apply a data model to the raw data to calculate a final price that is resistant to market manipulation.
The validators interact with each other during the Schnorr signing session.
- **Challenger** is an offchain component that listens to Oracle’s updates and makes sure that no invalid optimistic update is made. Thus we can be sure that our Optimistic Oracles are functioning properly. Both challengers and relays are permissionless jobs with challengers even getting paid for their effort. Participation from the community is both encouraged and supported.
- **Origins** are the data sources about the asset prices that can exist on-chain (DEX) such as UniSwap, dYdX, Balancer, etc. or be offchain from CEXs ( e.g. Kraken, Binance, Coinbase).
- **Relays** actively listen to the peer-to-peer network (the Transport Layer) and create EVM transactions out of these messages. Subsequently, these EVM transactions are recorded onchain.
- **Archiver** aggregates the messages created by Validators and stores it in a database. It collect all signed messages, not the intermediate messages like used for MuSig creating.
- **Dashboard**: The [chroniclelabs.org](https://chroniclelabs.org/dashboard) queries the archiver to present the prices on its dashboard. You can find all of our current Oracles [here](https://chroniclelabs.org/dashboard/oracles)
You can find your token name by using the search box or by selecting your preferred blockchain from the filter located in the top-right corner (see Figure below).

---
// File: Intro/dive/dive
# Architecture
The Chronicle's Oracle protocol comprises a distributed architecture spanning both onchain and offchain components. The diagram below highlights both types of components, with offchain components depicted with a green on the left-hand side, and onchain components (brown) on the right-hand side.
Origins, such as primary data sources, can exist on both onchain and offchain layers.

To read in further detail about our approach to onchain and offchain usage please view the sub menu options under Architecture.
---
// File: Products/productsOverview
# Products Overview
## DeFi Oracles
Chronicle provides [DeFi Oracles](../Products/DeFiOracle/DeFiOracle.md) for various types of data, including cryptocurrencies, fiat currencies, yield rates, and more. Chronicle Oracles use a PUSH model. The Oracles proactively deliver data to smart contracts without requiring an explicit request. They automatically update the smart contract with fresh data whenever a specified event or condition is met.
For example, a PUSH oracle can provide real-time price updates at regular intervals (e.g., every X minutes or hours) or trigger updates when price fluctuations exceed a defined threshold.
## Chronicle's Verified Asset Oracle
The [Verified Asset Oracle (VAO)](../Products/VerifiedAssetOracle/verifiedAssetOracle.md), formerly known as the RWA Oracle, securely and transparently verifies the integrity and quality of offchain assets. It then transmits the resulting data onchain, distributing it directly to smart contracts and onchain products.
---
// File: Products/DeFiOracle/DeFiOracle
# DeFi Oracle
You can use Chronicle's PUSH-based DeFi Oracles to connect your smart contracts to real-time asset pricing data. Our oracles proactively deliver fresh data without requiring explicit requests, ensuring your contracts always have the latest information.
Data is aggregated from a decentralized network of reputable validators, sourcing from both onchain and offchain providers, including DEXs and CEXs. Chronicle Oracles support a wide range of data types, including cryptocurrencies, fiat currencies, yield rates, and more.
## How Does a PUSH Oracle Work?
Protocol validators fetch data from different sources. The data used is verifiable and identifiable to its underlying source. This functionality is available to both decentralized sources (like DEXes) and centralized sources (like CEXes). Validators sign and publish this data on an offchain peer-to-peer network. After publication, the data is aggregated through an aggregation mechanism (e.g. the median of medians), to eliminate outliers and determine the final value to be published onchain. Data is then published onchain based on a [predefined threshold](#oracle-updates). Once onchain, this data can be consumed by any dApps that read from the oracle smart contract.
### When Does an Oracle Update? {#oracle-updates}
PUSH oracles actively deliver data to smart contracts without requiring an explicit request. Upon the occurrence of a specific event or condition, the PUSH oracle automatically updates the oracle smart contract with the new data. For example, a PUSH Oracle might update price data every X minutes/hours, or whenever the underlying price deviates beyond a specified threshold.
```mermaid
sequenceDiagram
participant DS as Data Source (offchain)
participant PO as PUSH Oracle (offchain)
participant OC as Oracle Smart Contract (onchain)
participant SC as Smart Contract
DS->>PO: Event or condition occurs
PO->>OC: Push data to Oracle Smart Contract
OC->>OC: Process data and update the state
SC->>OC: Request data from Oracle
OC->>SC: Deliver data to Smart Contract
SC->>SC: Process and use data
```
---
// File: Products/DeFiOracle/yieldRateOracle
# Types of Data for DeFi Oracles
Chronicle provides data essential for DeFi protocols, including cryptocurrency prices, fiat exchange rates, staking yield rates, and more. This data is aggregated from multiple sources and verified by a decentralized network of [reputable validators](../../Intro/network.md).
## Cryptocurrencies Feeds
Chronicle delivers cryptocurrency price feeds across all major EVM-compatible chains. These feeds aggregate pricing data from multiple onchain and offchain tier-one data sources to ensure accuracy and verifiability.
## Fiat Currencies Feeds
Chronicle provides feeds for fiat currencies such as [BRL](https://chroniclelabs.org/dashboard/oracle/BRL/USD?blockchain=), [GBP](https://chroniclelabs.org/dashboard/oracle/GBP/USD?blockchain=), and more.
## Yield Rate Feeds
In collaboration with [Block Analitica](https://blockanalitica.com/), Chronicle has developed a [Yield Rate Oracle](https://github.com/chronicleprotocol/scribe/blob/main/src/extensions/ScribeLST.sol) that tracks and delivers the value of the ETH staking yield onchain. This solution is designed to improve the DeFi user experience and reduce governance overhead.
The Yield Rate Oracle is a Schnorr based Oracle with an additional functionality, `getAPR()` - callable by toll'ed (authorized) addresses.
### Purpose
This Oracle provides lending protocols such as [Spark](https://spark.fi/) with a safe and automated way to customize the interest rate of ETH and ETH-backed derivatives. It eliminates the need for manual rate setting and updates, which are common in many decentralized lending protocols.
The liquid staking token interest rate derives from Lido's [stETH](https://etherscan.io/address/0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84) contract. As the largest validator, Lido’s interest rate reduces randomness in block proposal rewards. To smooth out block rewards, a higher number of validators is necessary, particularly to capture dynamic rewards during market fluctuations.
### Automated Interest Rate Customization
The Oracle tracks the Staking Yield of the Ethereum validator population and publishes this value onchain. This mechanism enables DeFi platforms to:
- access staking yield data
- automatically adjust interest rates for Liquid Staking Tokens (LSTs)
- customize lending product parameters without manual intervention
By leveraging this onchain data, DeFi protocols can implement dynamic, market-responsive interest rates for LST-based lending products, enhancing both efficiency and user experience.
---
// File: Products/DeFiOracle/dashboard
# The Chronicle Dashboard
The **[Chronicle Dashboard](https://chroniclelabs.org/dashboard)** enables full transparency over where the Oracle-reported data was sourced and who reported/signed it.
On the dashboard, you can find details such as the validator set used by Chronicle, the different oracles for the supported chains, and oracle-specific information like update thresholds, contract addresses, and data sources, among others.
# The Chronicle Dashboard Tabs and Functionality
In the top left corner, you can find three tabs: Dashboard, Oracles, and Validators.
**Dashboard**
The Dashboard tab provides an overview of the Chronicle Dashboard. You can see the total number of oracles, a summary of the oracles available, and a snapshot of the validator set.
**Oracles**
The Oracles tab allows users to find oracle addresses for specific chains. Inside this tab, you can toggle between Mainnets and Testnets to view oracle addresses for production and test environments. For each, you can select the specific chain you're interested in.
**Validators**
The Validators tab offers an overview of Chronicle’s validator set, which includes reputable Web3 projects such as Sky, Euler, ETHGlobal, and Etherscan, among others.
## Where is the Data Sourced From?
Using the dashboard, users can select a time interval on the graph and, for each validator, use the drop-down arrow to see the different data sources that have been used. Typically, the data sources are a mix of onchain and off-chain data sources with high liquidity.
## Verifiability on Every Level
Users can cryptographically verify in the browser using the Dashboard any **Validator's Signature**, as well as the **Schnorr Signature** used to push the price onchain to the corresponding Oracle.
### The Validator Signature
The validator's signature allows users to verify the behaviour of the validator. Users can check the message that has been signed by each validator to calculate the price for the Oracle.
Modifying even one character of the signature will result in invalidating the signature.
### The Schnorr Signature of the Oracle
Users can also verify the authenticity of the Schnorr signature of the Oracle. This value is used to push data onchain. Unlike the validator's signature, the Schnorr signature allows to verify the Oracle instead of a single validator.
---
// File: Products/VerifiedAssetOracle/verifiedAssetOracle
# Chronicle's Verified Asset Oracle
## What are RWAs?
In the context of blockchain, Real-World Assets (RWAs) refer to physical assets and traditional financial instruments represented as digital assets on a blockchain network. These assets can range from assets such as real estate, commodities, art, and even intellectual property, to financial assets such as bonds, stocks, or ETFs. RWAs provide a bridge between traditional and decentralized finance opening up new opportunities for market inclusion, accessibility, and innovation.
## The Chronicle Verified Asset Oracle
The Verified Asset Oracle (VAO) - formerly known as the RWA Oracle - can securely and transparently verify the integrity and quality of any offchain asset, transport the resulting data onchain, and distribute it directly to smart contracts and onchain products.
The Verified Asset Oracle utilizes the unique advantages and long-standing reputation of Chronicle Protocol, extending it to any asset that originated offchain, such as Treasury Bills, FIAT currency, and gold, amongst others.
### Leveraging Chronicle Protocol
Verified Asset’s unique advantages are imbued by Chronicle Protocol, the infrastructure layer that the VAO employs.
- Industry-Leading Validators: Chronicle’s decentralized and distributed network comprises reputable Validators like Gnosis, Gitcoin, Etherscan, MakerDAO, ETHGlobal, Infura, Nethermind, and many more. This network enhances the typical Byzantine Fault Tolerance of decentralized Validators with a unique 'Proof of Reputation' model, where each Validator effectively stakes its reputation. The canonical value of an Oracle is derived through the majority consensus of this community consortium, making the trust requirements for using a Chronicle Oracle equivalent to the trust in the crypto applications people use every day. The more Validators that join, the stronger this trust guarantee becomes.
- Unrivaled Transparency & Verifiability: A uniquely transparent oracle network, every piece of information on Chronicle Protocol can be cryptographically verified by using the online dashboard, The Chronicle. This ensures the highest levels of transparency and data integrity, creating the first truly trustless Oracle network.
- Increased Security and Decreased Cost: Independently verified as the most cost-efficient blockchain Oracle network, Chronicle uniquely applies Schnorr signatures to unlock an unlimited number of validators and reduce gas costs for delivering data onchain by 60-80% versus the competition. This innovation allows for a more decentralized, and therefore more secure, network.
## Chronicle's Verified Asset Oracle Integrations
- Chronicle launched its Verified Asset Oracle (formerly known as Real World Asset Oracle) with an integration with [M0](https://www.m0.org/). M0 uses Chronicle’s Verified Asset Oracle to provide proof of reserves for the M0 network supply, which is backed by U.S. Treasuries. By verifying offchain collateral before minting, Chronicle enables M0's stablecoin platform to scale with continuous solvency guarantees, eliminating unbacked issuance risk and supporting programmable digital dollars.
To learn more, please refer to the following [article](https://chroniclelabs.org/blog/m-0-and-chronicle-raising-the-standard-in-collateral-verification-with-the-rwa-oracle).
- [Chronicle partnered with Centrifuge](https://chroniclelabs.org/blog/raising-the-standard-of-real-world-assets-with-centrifuge-anemoy-and-the-rwa-oracle), a leading platform for innovative financial technology, to enhance the transparency of the Anemoy Liquid Treasury Fund (LTF). By integrating Chronicle’s Verified Asset Oracle, Centrifuge can now provide real-time price updates and third-party verification for LTF, bringing unprecedented transparency to the fund’s operations.
- [Chronicle partnered with Superstate](https://chroniclelabs.org/blog/superstate-opts-for-chronicle-verified-asset-oracle-for-ustb-fund), an asset management firm focused on modernizing investing for institutional investors through tokenized financial product, to integrate the Verified Asset Oracle, raising the standard of verification of ‘real-world assets’. Initially, this integration will provide the onchain net asset value (NAV) data for Superstate’s Short Duration US Government Securities Fund (USTB).
- Chronicle announced that its Verified Asset Oracle (VAO) technology is [enabling all winners of the Spark $1 Billion Tokenization Grand Prix](https://chroniclelabs.org/blog/chronicle-powers-grand-prix-winners-with-innovative-verified-asset-oracle-technology) to verify and manage their tokenized assets. BlackRock’s BUIDL, Superstate, and Centrifuge were named as the winners of the Spark Tokenization Grand Prix, securing allocations from Sky’s planned $1 Billion investment in tokenized real-world assets.
- [Chronicle has been named the Exclusive Oracle Partner to Grove](https://chroniclelabs.org/blog/chronicle-named-exclusive-oracle-partner-to-grove-enabling-a-new-era-of-onchain-credit), an institutional-grade credit protocol. [Grove](https://www.grove.finance/) is a new star in the Sky ecosystem and recently announced a $1B commitment to a tokenized asset strategy including initial allocations to the Janus Henderson Anemoy AAA CLO Fund (JAAA) and the JTRSY Treasury Fund (JTRSY), both issued natively through Centrifuge. As Grove prepares to launch tokenized yield strategies backed by real-world assets (RWAs), Chronicle will provide the oracle infrastructure required to safely and transparently scale credit allocation across the ecosystem they serve.
---
// File: Products/VerifiedAssetOracle/data
# Bringing Transparency to Tokenized Assets
The Verified Asset Oracle provides onchain, cryptographic attestations that verify the reserves behind tokenized assets (stablecoins, wrapped tokens, RWAs, and more), ensuring transparent backing for depositors and protocols.
## Why Chronicle VAO?
- Customizable inputs – Accepts data in any format: API (preferred), email, SFTP, or other formats
- Cryptographic integrity – End-to-end verifiability through signature validation and consensus among independent validators
- Institutional alignment – Designed to meet the operational needs and privacy considerations of regulated financial entities
- Flexible outputs – Send any structured data onchain (not just prices), such as attestation proofs, NAVs, balances
- Scalable infra – Built on top of Chronicle’s battle-tested Scribe Oracles, optimized for gas efficiency and resilience
- Independent Attestation: provides a credibly-neutral attestation by fetching data directly from the custodian
## How It Works
The VAO pipeline has three core roles:
### 1. Agent
The Agent is responsible for retrieving your data, performing computations, and preparing the payload to be verified and published onchain.
- Pulls data from your preferred source (ideally an web API, but it can also be an email, SFTP, or other formats given our modular components that are able to adapt to enterprise environments)
- Applies custom logic or transformations as agreed (e.g., aggregations, formatting, cryptographic proof generation)
- Packages original + computed data, signs it, and uploads to IPFS
### 2. Validator
The Validator is a neutral party that ensures the data's authenticity and correctness:
- Retrieves the payload from IPFS and verifies input data signature
- Verifies outputs independently
- Participates in the distributed signature (a Schnorr-based multi-signature scheme) that attests to the correctness of the data
### 3. Relay
The Relay submits the verified payload to the onchain uScribe contract:
- uScribe is a universal oracle contract that can publish any arbitrary data (not just prices) which is built on top of Scribe, Chronicle’s gas-efficient oracle framework
- Enables integration with smart contracts, dashboards, proof-of-reserve systems, and more
---
// File: Products/VerifiedAssetOracle/vaoDashboard
# Verified Asset Oracle Dashboard
The Verified Asset Oracle Dashboard enables users to visualize data verified by [Chronicle's Verified Asset Oracle](/Products/VerifiedAssetOracle/verifiedAssetOracle.md). It provides insights into key financial metrics associated with verified assets such as Net Asset Value per Share (NAV/S), 7-day average annualized yield, custodian information, and more.
This dashboard is designed to enhance transparency and trust in onchain representations of real-world assets by offering a clear visualization of their value and underlying assets.
# How is the Chronicle Dashboard different from other RWA visual representations?
Chronicle provides end-to-end data about a tokenized fund by connecting directly to the custodian. Users can verify attestation signatures in the browser via the `Verify` button.
The signature process has two layers:
**1. Publishing to IPFS:** Data is fetched from the custodian, formatted, and published to IPFS. The IPFS URL is content-based, so any change in the data alters the URL, helping detect potential manipulation.
Data is pulled from the IPFS document stored which can be accessed using a unique [CID (Content Identifier).](https://docs.ipfs.tech/concepts/content-addressing#) The CID itself is based on a hash of the document, meaning that if the content changes **at all** (even a single byte), the CID will change. This acts like a built-in verification layer, if the CID matches, the content matches as well. There is also a **`?checksum=`** parameter in the URL, which is a keccak256 hash of the document’s actual contents expressed as a JSON string.
`e.g.: ipfs://QmPv8UFfZAk7CiNLAW16ZBic741aWtFMXjbU3KkxrRR8Ma?checksum=0xd3e407f7243336f4ba79027b439bcf6a534ffed8fb4d1cc3acfe014d28127774`
The **CID ensures the data hasn’t been tampered with**, as it won’t resolve if the content changes.
**2. Checksum verification:** A checksum of the data is added and verified on-chain via a verifier contract.
The checksum proves that the content of the document has remained the same since its initial publication.
### Verification Flow
When someone downloads the document from the link:
- They can calculate the hash of the content themselves.
- Then they compare it to the `?checksum=` in the URL (which was previously published).
- If it matches, it proves that the document is the same one that was originally published
## Blockchains
This module shows the contract addresses of all oracles deployed for the asset. These contracts are responsible for reporting the price of the asset on the chain where they are deployed.
## Administration
The administration module outlines the asset's traditional finance infrastructure. It includes identifiers like the CUSIP, details of the asset's custodial bank, identifies the independent auditor/s ensuring reporting accuracy. It will also identify the asset's investment manager and any sub-advisors handling portfolio decisions and specify the fund’s legal structure, domicile, and eligibility requirements for investors.
## Token supply
Contains the addresses for all ERC20 token contracts for the asset, which chains they live on, and how many tokens have been minted by each contract.
## Latest Oracle Events
The latest oracle events module displays all blockchain transactions that have included any of the asset's oracle contracts. These are primarily price updates but other transactions may appear here such as the whitelisting of new validators.
## Holdings
This section displays all underlying real-world asset holdings that contribute to the asset’s value, AUM and NAV. It allows users to see the precise composition of the fund. Information may include each asset’s value, purchase price, and, where applicable (such as for bonds or warrants), the expiry date.
## Transfers
This section shows all ERC-20 token transfers related to the fund’s tokenized representation.
## Onchain Activity
The onchain activity section provides a transparent view of all onchain events associated with the fund’s tokenized representation. These may correspond to key events such as issuance, purchases, or deposits into DeFi protocols. Each entry includes details such as:
- Type – The kind of activity, such as Offchain Redeem (redeeming tokenized assets against underlying holdings) or Approval (granting smart contract permissions).
- Blockchain – The network where the transaction occurred (e.g.: Ethereum, Plume Mainnet).
- Quantity – The amount of tokens involved in the transaction.
- Transaction Hash – A unique identifier that links to the onchain transaction for verification.
- Date – The timestamp of when the activity occurred.
These records enable users to trace and verify all relevant token activity directly onchain, ensuring transparency across networks.
---
// File: Products/VerifiedAssetOracle/glossary
# Glossary
## General Key Concepts
**NAV (Net Asset Value)**
Represents the total value of the investment fund. The value is calculated by subtracting its liabilities from its assets.
NAV = Assets - Liabilities
**NAV/S (Net Asset Value per Share)**
The value of a single share, calculated as the total Net Asset Value divided by the total number of shares.
**AUM (Assets Under Management)**
Represents the total market value of all assets managed by the fund held by the portfolio manager or investment company on behalf of its clients.
**TVL (Total Value Locked)**
Calculated as:
TVL = NAV/S * Total Supply
Reflects the total onchain value tied to the asset.
**Yield**
The earnings generated and realized on an investment over a period of time.
**Token Price**
The price of the token on a given exchange or as an aggregated token price. It may differ from the price per share because the actual token price is determined by the exchange, not by the fund.
e.g.: the token price on [ByBit](https://www.bybit.com/en/price/superstate-short-duration-us-government-securities-fund-ustb/) and the NAV per share on the [Superstate](https://superstate.com/ustb#key-facts) itself for the same timestamp.
**CUSIP (Committee on Uniform Securities Identification Procedures number)**
It is a unique identifier for securities issued in the United States. A CUSIP is similar to an ISIN but does not include the country code. To convert a CUSIP into an ISIN, simply add the country prefix (e.g:"US").
**Yield to maturity (YTM)**
The total return anticipated on a bond if the bond is held until it matures.
To compute [YTM](https://www.investopedia.com/terms/y/yieldtomaturity.asp), the following formula can be used:
YTM = [ C+ (FV - PV) ÷ t ] ÷ [ (FV + PV) ÷ 2 ]
Where:
C = Coupon Payment
FV = Face Value
PV = Present Value/Current Price
t = Years to Maturity
---
// File: Resources/Community
# Community and Support
## Community
- Join the community on [Discord](https://discord.com/invite/CjgvJ9EspJ)
- [Chronicle Points Program Announcement](https://chroniclelabs.org/blog/chronicle-points-have-arrived)
## Support
### Ask Chronicle AI
Get your questions answered in seconds using the Ask Chronicle AI chatbot integration located in the bottom right corner of the documentation platform.
### Open a support ticket
1. Join our [Discord](https://discord.com/invite/CjgvJ9EspJ)
2. Check the 🆘 | support Discord channel
3. Open a ticket (General support or Integration request)
---
// File: Resources/UseCases
# Use Cases
## Use Cases for Price Feeds
**Stablecoins**: enable adjusting the supply mechanisms to maintain their peg to a fiat currency.
**Marketplaces with multi-currency support**: price feeds enable dynamic currency conversions.
**Decentralized Lending**: used for loan collateralization, margin calls, and to prevent under-collateralization.
**Decentralized Reputation Networks where users can get rewards in various tokens**: price feeds help calculate the fair value of rewards when distributed in various tokens.
**Decentralized Perpetual Futures**: price feeds enable calculating funding rates and margin requirements.
**In-game Currencies for Decentralized Gaming**: price feeds can help convert in-game assets into real-world currency equivalents.
**Interest-bearing Stablecoins**: price feeds enable converting between yield-bearing assets and fiat.
**Portfolio Rebalancing**: price feeds determine the current value of assets in a portfolio to rebalance effectively.
**Decentralized Payout Systems**: enable payouts in various tokens, ensuring that the value distributed is accurate.
**Multi-token Decentralized Investment Platforms**: provide the necessary data to manage and display the value of multi-token portfolios.
**Yield Farming**: calculating returns in yield farming strategies.
**Decentralized Insurance**: determining the value of insured assets and claims payouts.
---
// File: Resources/Utils
# Utils
This page provides useful information, including testnet faucets for various chains and RPC endpoints.
## Faucets
| Testnet Network | Faucet |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| Ethereum Sepolia | https://cloud.google.com/application/web3/faucet/ethereum/sepolia |
| Base Sepolia | https://www.alchemy.com/faucets/base-sepolia |
| Arbitrum Sepolia | https://arbitrum.faucet.dev/ArbSepolia |
| Gnosis Mainnet | https://faucet.gnosischain.com/ |
| Mantle Testnet | https://faucet.testnet.mantle.xyz/ |
| Scroll Sepolia | https://docs.scroll.io/en/user-guide/faucet/ |
| zkSync Sepolia | https://docs.zksync.io/zksync-era/ecosystem/network-faucets |
| Optimism Sepolia | https://console.optimism.io/faucet |
| Berachain Bartio | https://www.faucet.kodiak.finance/ |
| Superseed Sepolia | https://docs.superseed.xyz/integrations/faucets|
| Corn Sepolia | https://faucet.usecorn.com/ |
| Plume Devnet | https://test-faucet.plumenetwork.xyz/ |
| Monad Testnet | https://faucet.morkie.xyz/monad |
## RPCs
To find free RPC URLs, you can check out [ChainList](https://chainlist.org/).
---
// File: Resources/Audits
# Audits
You can access the different audit reports via GitHub in the [following repository](https://github.com/chronicleprotocol/scribe/tree/main/audits). Alternatively, the reports are also listed in the table below.
| Auditor | Report |
| ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| ABDK | [ABDK report](https://github.com/chronicleprotocol/scribe/blob/main/audits/ABDK%40v1.0.0.pdf)|
| Cantina | [Cantina report #1](https://github.com/chronicleprotocol/scribe/blob/main/audits/Cantina%40v2.0.0.pdf) |
|Cantina |[Cantina report #2](https://github.com/chronicleprotocol/scribe/blob/main/audits/Cantina%40v2.0.0_2.pdf)|
|ChainSecurity |[ChainSecurity report](https://github.com/chronicleprotocol/scribe/blob/main/audits/Cantina%40v2.0.0_2.pdf)|
---
// File: Resources/FAQ/Background
## Is Chronicle owned by/part of MakerDAO?
Chronicle spun out of MakerDAO Oracle Core Unit in 2023 as a separate entity.
## What is the difference between Chronicle Protocol & Chronicle Labs?
Chronicle Protocol refers to the decentralized infrastructure (or protocol) that enables the operation of Chronicle’s Oracles. Chronicle Labs houses the development team that contributes to the building and maintaining of the protocol and core products.
## Does Chronicle have a bug bounty program?
Yes, you can find more details about Chronicle's Bug Bounty [here](https://cantina.xyz/bounties/5240b7c7-6fec-4902-bec0-8cad12f14ec4).
## Where can I find the audit reports for Chronicle Protocol?
Chronicle has undergone several audits from Cantina, ChainSecurity, and ABDK. You can find the reports [here](https://github.com/chronicleprotocol/scribe/tree/main/audits).
---
// File: Resources/FAQ/General
## Which chains is Chronicle integrated with?
At the moment, Chronicle Protocol is integrated on fifteen blockchains:
- Ethereum
- Arbitrum
- Mantle
- Gnosis Chain
- zkSync
- Base
- Optimism
- Scroll
- Berachain
- Superseed
- Corn
- Plume Network
- Monad
- Unichain
This is being updated all the time as new chains come online. Please check out the [dashboard](https://chroniclelabs.org/dashboard/oracles) for the most up-to-date overview of the blockchains we are currently integrated with.
## How many decimals do Chronicle Oracles use?
All Chronicle Oracles use 18 decimals.
## Are price feeds chain-specific or chain agnostic?
Chronicle provides price feeds, which can be implemented on any supported chain. These prices are based on global sources, the data is gathered directly from CEXs and DEXs and is not chain specific.
E.g.: GNO on Sepolia: [https://sepolia.etherscan.io/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8#code](https://sepolia.etherscan.io/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8#code)
GNO on Gnosis: [https://gnosisscan.io/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8#code](https://gnosisscan.io/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8#code)
## Where does the data come from?
The data originates from primary on-chain sources such as DEXes (e.g., Uniswap, dYdX, Balancer) and off-chain CEXes (e.g., Kraken, Binance, Coinbase). Only high-quality sources are used in Chronicle’s data models.
## What types of Oracles does Chronicle Protocol enable?
In addition to the core price feed Oracles, two new products have been introduced: the [Yield Rate Oracle](https://chroniclelabs.org/blog/the-yield-rate-oracle) and the [Verified Asset Oracle](https://chroniclelabs.org/blog/m-0-and-chronicle-raising-the-standard-in-collateral-verification-with-the-rwa-oracle) (formerly known as the Real World Asset Oracle).
## What is the difference between PUSH and PULL oracles?
A push oracle proactively provides data to smart contracts without being explicitly requested, whenever a condition or event happens (sometimes referred to as a threshold or a heartbeat). On the other hand, PULL oracles require smart contracts to request data explicitly. The data is pulled from external sources in response to a query from the smart contract.
## Does Chronicle use a PULL or a PUSH model for its Oracles?
Chronicle operates using a PUSH model.
## Does Chronicle support contract upgrades?
Chronicle contracts are not upgradeable. If oracles are switched, new contracts are deployed, and customers must update the oracle addresses in their contracts accordingly.
## Who are the validators for Chronicle?
The validators of Chronicle are represented by a community of the leading blockchain protocols including:
[MakerDAO](https://makerdao.com), [Infura](https://www.infura.io/), [Gitcoin](https://www.gitcoin.co/), [Etherscan](https://etherscan.io/), [DeFi Saver](https://defisaver.com/), [Gnosis](https://www.gnosis.io/), [Nethermind](https://www.nethermind.io/), [Euler](https://www.euler.finance/), [Mantle](https://www.mantle.xyz/), [ETH Global](https://ethglobal.com/), [SteakHouse Financial](https://www.steakhouse.financial/), [Bitcoin Suisse](https://bitcoinsuisse.com/), [Block Analitica](https://blockanalitica.com/).
This approach to validators is unique to Chronicle, and ensures that the Oracle data is being signed by some of the most trusted and reputable brands in the blockchain space, further reinforcing trust in the protocol.
## Does the Chronicle dashboard pull data from the Chronicle Archive?
The Dashboard pulls from a combination of on-chain sources and off-chain network traffic that is the basis for the Oracle updates. Specifically, the feeds pass cryptographically (ECDSA)-signed price messages that are then computed into a median value for on-chain updates. Those messages are ephemeral, so our archiving system saves them in a database for historical preservation.
## Can you provide a comparison of gas usage for a Chronicle Oracle update versus competitors that use a PUSH-based model?
| Oracle Network | Chain | Pair | Gas | No. validators | Etherscan link |
| ------------- | ------------- | ------------- | ------------- | ------------- | ------------- |
| Chronicle |ETH Mainnet | ETH/USD| 54,620 | 13 | https://etherscan.io/tx/0xf365e0c8def94e3aa666dd443ad10c7b86d9bf55b74878e42cf42e9f5b56fdf3 |
| Chainlink |ETH Mainnet | ETH/USD| 333,602 | 11 | https://etherscan.io/tx/0xe236f406773bd2049549131646cda58497a1a9cb9c03fd624a5552fdd1503bd3 |
| Chronicle | Arbitrum | ETH/USD| 143,266 | 13 | https://arbiscan.io/tx/0xf9e83b4515303b22bbae8274f5b4e3c7b64c988c3b026d40b0984075913609d9 |
| Chainlink | Arbitrum | ETH/USD| 185,113 | 4 | https://arbiscan.io/tx/0xfd7a955985634bba3e26a5820aa277479be096b0695872eee0ccf1b7728b3774 |
---
// File: Resources/FAQ/Oracles
## I am currently using Chainlink. How difficult is it to change to Chronicle?
If you are using Chainlink, you would only have to change the address of your oracle to the Chronicle equivalent. This is because Scribe is partially Chainlink compatible, implementing the most widely, and not deprecated, used functions of the `IChainlinkAggregatorV3` interface such as `latestRoundData()`, `decimals()`, and `latestAnswer()`.
One thing to keep an eye on is the number of decimals. Chronicle always uses 18 decimals, whereas Chainlink uses different decimals for different oracles. However, if implemented correctly, one can check the decimals and scale them up or down accordingly. Please conduct integration tests and feel free to [reach out](https://discord.com/invite/CjgvJ9EspJ) if there are any issues.
## How can I deploy a Chronicle Oracle for Morpho markets?
Chronicle Oracles are compatible with the [Morpho Chainlink adaptor](https://github.com/morpho-org/morpho-blue-oracles/blob/main/src/morpho-chainlink/MorphoChainlinkOracleV2.sol). Morpho can dynamically handle differences in Feed decimals using the [SCALE_FACTOR](https://github.com/jar-o/morpho-blue-oracles/blob/b6c8ddb4666a6b7fe0b568ea3a5238bc8335de2a/src/morpho-chainlink/MorphoChainlinkOracleV2.sol#L145). This is important because Chronicle operates with 18 decimal places for all its Oracles, while most Chainlink's Oracles use 8 decimal places.
- You can find a tutorial on deploying a Chronicle Oracle for Morpho Markets in the [following section](docs/Developers/Guides/morphoVault.md).
## How do I check if an Oracle becomes inactive/ gets deprecated?
In the event that an Oracle gets deprecated, we will notify all whitelisted customers before offboarding it.
From a technical point of view, if an oracle becomes inactive, the price is set to `0`, and the validators (also known as feeds), are removed from the contract. Therefore, the `read()` function will revert with `0`, the `tryRead()` function will return `(false, 0)`, and the `latestRoundData()` will return `0` as well.
## What do I need to do to read from a Chronicle Oracle?
Chronicle Oracles are read-protected by a whitelist. To read from an Oracle, the calling address must be tolled (whitelisted).
On testnet networks, the whitelisting mechanism is permissionless, anyone can whitelist an address using the [SelfKisser](/Developers/Guides/whitelistAddress.md).
On mainnet, the whitelisting mechanism is permissioned. To request access, open a ticket on [Discord](https://discord.com/invite/CjgvJ9EspJ) in the 🆘|support channel.
## What happens if I try to read from an address that is not whitelisted?
If you try to read from an address that is not tolled (whitelisted), the transaction reverts.
## How can I check the validators of an Oracle?
You can use [cast](https://book.getfoundry.sh/reference/cast/cast), a CLI tool designed by the Foundry team to streamline the interaction with the EVM.
`$ cast call $contract 'feeds()(address[])' --rpc-url $rpc`
Returns an array with the validators.
Alternatively, if you prefer to check on Etherscan, navigate to the `Read Contract` section of the Oracle you want to check, and run the `feeds()` function. The result will list all the validator addresses that are authorized to sign a price update.
## How can I check if an address is whitelisted to read data?
`$ cast call $oracle "tolled(address)(bool)" --rpc-url $rpc`
Returns either `true` or `false`.
## Which address do I need to whitelist if I want to deploy a Curve StableSwap pool?
To use a Chronicle oracle for a [Curve StableSwap pool](https://docs.curve.finance/stableswap-exchange/stableswap/pools/overview/), the pool's address needs to be whitelisted.
Share the address of your Curve pool with the Chronicle team—once whitelisted, you’ll have read access to the specified oracle.
If you need access to multiple oracles, you'll need to whitelist the pool address separately for each one.
## How can I check how many validators have signed a price message?
On Etherscan, navigate to the `Read Contract` section of the Oracle you want to check, and run the `bar()` function. This returns the number of signatures required for an Oracle update.
## What types of Oracles does Chronicle use for asset prices?
On Ethereum Mainnet (L1), where computation is expensive, Chronicle uses its [ScribeOptimistic](https://github.com/chronicleprotocol/scribe/blob/main/src/ScribeOptimistic.sol) Oracles, enabling additional gas saving. On L2 chains, Chronicle uses [Scribe Oracles](https://github.com/chronicleprotocol/scribe/blob/main/src/Scribe.sol).
## What are the main operational differences between ScribeOptimistic and Scribe Oracles?
Scribe Oracle have instant updates. This means that as soon as a new price is published, it becomes available.
**ScribeOptimistic Oracles have a buffer. An incoming price is not finalized until the challenge period has concluded.** You can think of it as a delayed oracle. The lower the challenge period is, the less phase shifted the oracle is. At the moment, the challenge period is set to 20 mins for Chronicle Oracles, but this value is customizable. **At the end of the challenge period, the price will be the optimistic price, even if the market price has changed.**
## How can I check the challenge period for a ScribeOptimistic oracle?
To check the current challenge period, you can check the `opChallengePeriod`’s value using `opChallengePeriod()` which returns a value in seconds.
## How can I cross-check the asset pair corresponding to a given Chronicle address on a block explorer like Etherscan?
To cross-check the asset pair associated with a Chronicle Oracle address on a block explorer, follow these steps:
1. Navigate to the `Read Contract` section under `Contract` on Etherscan.
2. Locate the `wat` function at the bottom of the list.
3. Query the `wat` function to retrieve a bytes32 value.
4. Use a bytes32 to string converter, such as [this tool](https://web3-type-converter.onbrn.com/), to decode the bytes32 value and get the name of the asset pair.
## What is the update threshold for the Oracles?
A new aggregation round is triggered after a specified amount of time since the latest update, or if the new offchain value deviates more than a pre-defined threshold for the onchain value, whichever of these conditions occurs first. If the data values stay within the Deviation Threshold, an update will only be triggered every X minutes / hours.
## Can the update threshold parameters be modified?
Yes, the update parameters, including the update and deviation thresholds, can be modified. For the most up-to-date parameters, please check the specific Oracle on the [Dashboard](https://chroniclelabs.org/dashboard/oracles). If you'd like to request different parameters, please get in touch.
## Should I implement a stale price check in my dApp?
We highly recommend so. Don't trust - verify!
You can check how fresh an oracle’s value is using:
`readWithAge() (uint val, uint age)` and check
`block.timestamp - age > MAX_STALENESS { /* failure handling */`.
## What is the difference between the different read functions: latestAnswer(), read(), and tryRead()?
While all of these functions can be used to read data from the oracle, they differ slightly in behavior:
- `latestAnswer()` – primarily intended for legacy use or when compatibility with Chainlink is required
- `read()` – will revert if the returned value is 0
- `tryRead()` – will not revert, even if the value is 0
We recommend using the tryXXX functions (e.g., tryRead()) because they are safer to use since they never revert.
For full specifications for each of the functions, please check the [Scribe contract](https://github.com/chronicleprotocol/scribe/blob/main/src/Scribe.sol).
---
// File: Resources/FAQ/Vao
# Chronicle's Verified Asset Oracle (VAO)
## What is Chronicle's Verified Asset Oracle (VAO)?
The Verified Asset Oracle (VAO) delivers cryptographically signed data onchain for tokenized assets, ensuring each asset reflects accurate, real-world value with transparency and verifiable provenance.
## Who has integrated Chronicle's VAO?
Chronicle’s VAO launched with an initial integration by M0. Additionally, Chronicle powers the winning projects of Spark’s $1 billion Tokenization Grand Prix: [Superstate, Centrifuge, and BlackRock’s BUIDL](https://chroniclelabs.org/blog/chronicle-powers-grand-prix-winners-with-innovative-verified-asset-oracle-technology)
## How does the data get updated?
Chronicle connects directly to the custodian to verify the amount of the underlying asset for the tokenized asset. It verifies offchain creditworthiness and provides key data such as purchase dates, yields, and maturity dates, while syncing the asset lifecycle onchain for events such as issuance, transfer, and settlement.
## What data can the VAO transport?
The VAO can securely and transparently verify the integrity of a wide range of offchain assets, including:
- Custodied collateral balances
- Fiat reserves
- Fund audits and NAV reports
- Redemption and minting activity
- Exchange reserves
It then transports the verified data onchain and delivers it directly to smart contracts or other onchain applications.
## Is the VAO suitable for institutional use?
Yes. Chronicle works closely with integration partners to ensure each deployment aligns with their data privacy, legal, and operational requirements.
---
// File: Resources/FAQ/Points
# Chronicle Points
## What are Chronicle Points and how do they work?
The exclusive launch of Chronicle Points with SKY enables eligible participants the opportunity to supply USDS via [Sky.Money](https://sky.money/) to accrue Chronicle Points. Chronicle Points will be tracked and may be calculated at a rate of 10 points per unit with 10 billion total supply, as a reference, with Chronicle Points being emitted at a rate of 3.75 billion per year.
## How can I collect Chronicle Points?
Eligible users must supply USDS to begin accruing Chronicle Points.
## Are there any restrictions on who can collect Chronicle Points?
Access to Chronicle Points is currently governed by the eligibility criteria of SKY Protocol. Specific locations are blocked. Full details can be found [here](https://docs.sky.money/legal-terms).
## Is there a minimum requirement of USDS supplied to start collecting Chronicle Points?
There is no minimum supply requirement for USDS.
## Where can I get started?
You can get started at [https://app.sky.money/](https://app.sky.money/). In the future, eligible participants will also be able to access Chronicle Points via [The Chronicle](https://chroniclelabs.org/dashboard).
## Where can I see the distribution of Chronicle Points so far?
Users can see the current distribution of Chronicle Points on the following [dashboard](
https://info.sky.money/rewards/0x10ab606b067c9c461d8893c47c7512472e19e2ce
).
---
// File: hackathons/eth-global-bangkok-hackathon
# 🇹🇭 Chronicle @ETHGlobal Bangkok
🛠️💻🛠️ Hello builders and welcome to ETHGlobal Bangkok bounties page!
This document serves as a guide for integrating Chronicle Oracles into your hackathon projects.
:::tip
### Chronicle Protocol Contracts
You can view all the smart contract addresses [here](../Developers/testnet.md), or directly via the [Dashboard](https://chroniclelabs.org/dashboard). If you are using the Dashboard, you can find the Testnet addresses for different chains by toggling ``.
:::
:::important
### Self-Kisser: Permissionless Whitelisting
Chronicle safeguards Oracle read functions with a whitelist, ensuring controlled access to critical data. However, the SelfKisser contract unfolds a possibility where you can whitelist yourself (or, as whimsically termed, "kiss") yourself on **Testnet chains**.
To kiss yourself, i.e., `msg.sender`, please check out the following guide, **[Getting Read Access to Contracts](../Developers/Guides/whitelistAddress.md)**. On the same page, you will find a table with the SelfKisser addresses for different Testnet chains.
**Please note that this is a mandatory step to be able to read from Chronicle Oracles!**
:::
You can find a step by step process for whitelisting an address to read from Chronicle Oracles on Testnet on [this page](../Developers/Guides/readingFromOracles.md).
## 💰 Bounties: 10K
🧩 Best Integration of Chronicle Oracles
### 🧩 Best Integration of Chronicle Protocol ⸺ $6,500
Use Chronicle Oracles to power up your DApp! You can utilize any of the oracles provided on the [Dashboard](https://chroniclelabs.org/dashboard/oracles) across any of the 10 chains where Chronicle is live.
- 🥇 1st: $3000
- 🥈 2nd: $2000
- 🥉 3rd: $1000
- 🏅 4th: $500
### 📜 Qualification rules:
🛠️ Your project must read from a Chronicle oracle and then make a state change on a blockchain.
🏁 Make sure to include the following in your project submission:
- A public demo URL to your deployed project that judges can test.
- A short video that demonstrates your submission (approximately 2-3 minutes).
- A public GitHub repository with the code.
- Complete the 2-min Builder Feedback Form: https://forms.gle/EZiu96gfhBBnwuAQ8
### 🎯 Judging Criteria
- Code quality - well organized and readable code will score higher.
- Documentation - the better the documentation the higher the score.
- Extensibility - how easy can a developer use this to build out their own idea?
- DX - does the project provide a high quality developer experience?
- UI/UX - Projects with an intuitive UI will score higher.
### 🏁 Assets to submit:
Make sure to include the following in your project submission:
1. A public demo URL to your deployed project that judges can test.
2. A short video that demonstrates your submission (approximately 2-3 minutes)
3. A public GitHub repository with the code.
4. Complete the [Builder Feedback Form](https://forms.gle/SvcS5FsRDjDd5crA7).
🏊♂️ Chronicle Pool Prize
## 🏊♂️ Chronicle Pool Prize ⸺ $3,500
Integrate Chronicle Oracles into your project to qualify for the Chronicle Pool Prize. The Pool Prize will be evenly distributed to all projects that integrate Chronicle Oracles (excluding those that win a separate prize from Chronicle).
### 📜 Qualification rules:
Projects must demonstrate a good-faith effort to integrate Chronicle Oracles to be eligible for the Pool Prize. This is a great add-on bounty as Chronicle is compatible with many chains (Ethereum, Arbitrum, Mantle, Gnosis Chain, zkSync, Base, Optimism, Scroll, Berachain).
### 🏁 Assets to submit:
- A public GitHub repository with the code.
- Complete the 2-min Builder Feedback Form: https://forms.gle/EZiu96gfhBBnwuAQ8
## ✏️ Workshops
- 🔌 Chronicle Workshop: Powering DApps with Data from Oracles - Friday, 15th Nov, 6PM, Room 3
## 📤 Resources
- **[Scaffold-oracle-reader](https://github.com/chronicleprotocol/scaffold-oracle-reader) based on Scaffold-ETH2, to help you prototype easily and experiment with Solidity using a frontend that adapts to your smart contract**
- [How To Use Read/Write Contract Features on Etherscan](https://info.etherscan.com/how-to-use-read-or-write-contract-features-on-etherscan/)
- [Creating a TokenVendor](https://github.com/biancabuzea200/TokenVendor) using the ETH/USD price feed
- [Integrating Cartesi Rollups with Chronicle Oracles](https://medium.com/@souza.mvsl/integrating-cartesi-rollups-with-chronicle-oracles-67b671613edc)
### Scribe
Scribe is an extremely gas-efficient Oracle based on aggregated Schnorr signatures. Providing nearly constant gas costs on Layer 2s and on Layer 1s, Scribe boasts of fixed gas costs, leading to substantial savings—over 60% relative to competing Oracles and an impressive 80% compared to Chainlink. This approach to gas management significantly boosts the scalability of the Oracle.
The Chronicle Scribe Oracle interface is plug-and-play with Chainlink and Maker Oracles, providing a smooth transition for developers used to these platforms.
All data delivered by a Chronicle Oracle is verifiable via The [Chronicle Dashboard](https://chroniclelabs.org/dashboard).
👉 [Scribe Public Repo](https://github.com/chronicleprotocol/scribe)
### CAST
Cast is a command-line interface (CLI) tool by the Foundry team to streamline your interaction with Ethereum and other EVM-based chains. Whether you're making smart contract calls, sending transactions, or retrieving any chain data, cast can help with that. You can read more [here](https://book.getfoundry.sh/reference/cast/cast).
## 🤝 Getting Help
:::note
If you have any questions and would like support with your project, please join our **[Discord](https://discord.com/invite/CjgvJ9EspJ)** and drop your question in the hackathons channel.
:::
Say hi 👋 when you spot the team in their Chronicle t-shirts and feel free to ask any questions directly to our on-site team members. You can also visit the Chronicle booth for hackathon support.
## More on Scribe
- [Eth Magician Post](https://ethereum-magicians.org/t/an-efficient-schnorr-multi-signature-implementation/15510)
- [Twitter Thread](https://twitter.com/merkleplant_eth/status/1693652385980379593)
- [Scribe's docs](https://github.com/chronicleprotocol/scribe/blob/main/docs/Scribe.md)
## General Setup Useful Links
List of Sepolia ETH Faucets:
- [https://cloud.google.com/application/web3/faucet/ethereum/sepolia](https://cloud.google.com/application/web3/faucet/ethereum/sepolia) - Does not require to have any funds on Mainnet
- [https://www.alchemy.com/faucets/ethereum-sepolia](https://www.alchemy.com/faucets/ethereum-sepolia)
- [https://ethglobal.com/faucet](https://ethglobal.com/faucet) - Faucets for different Testnet networks for various chains
- [https://sepoliafaucet.com/](https://sepoliafaucet.com/)
Chainlist RPCs:
- [Sepolia](https://chainlist.org/chain/11155111)
- [Gnosis Mainnet](https://chainlist.org/chain/100)
- [Mantle Testnet](https://chainlist.org/chain/5003)
- [Scroll-Sepolia](https://chainlist.org/chain/534351)
RPC Providers:
- [drpc.org](https://drpc.org/)
- [nodies](https://www.nodies.app/)
- [grove](https://www.grove.city/)
- [blast api](https://blastapi.io/)
- [ankr](https://www.ankr.com/rpc/)
- Foundry Setup:
- [https://getfoundry.sh](https://getfoundry.sh/)
- Create a Test Wallet:
- `cast new wallet`
## Common Pitfalls
- ⛽️ Ensure you have a sufficient amount of tokens in your wallet to cover gas fees for transactions.
- ⛓️ Ensure your wallet is connected to the correct network corresponding to the contract you are interacting with.
- ⚪️ Make sure to whitelist the address that reads from each Oracle you use. For example, if you're using ETH/USD and ETH/BTC, you'll need to whitelist your address for both Oracles.
- ✅ Ensure you are using the correct SelfKisser address for the chain you are working with, as the SelfKisser may have different addresses across chains. You can find the corresponding SelfKisser addresses for each chain on this
[page](../Developers/testnet).
## Good luck and happy hacking! 🧙
---
// File: hackathons/Previous/eth-global-brussels-hackathon
# 🇧🇪 Chronicle @ETHGlobal Brussels
🛠️💻🛠️ Hello builders and welcome to ETHGlobal Brussels Chronicle bounties page!
This document serves as a guide for integrating Chronicle Oracles into your hackathon projects.
:::note
You can only compete for one track. For Tracks 1 (DeFi) and 2 (Innovation), if the judges determine that your project is a better fit for the other track, they will move it automatically.
You only need to submit your project once.
:::
## 💰 Bounties: 10K
Track 1: DeFi Track (Integrate Chronicle Oracles into one of the following DeFi applications: Borrowing & Lending dApps, Decentralized Exchanges (DEX), Liquidity Mining, Prediction Markets, or Stablecoins)
### Track 1: DeFi Track (Integrate Chronicle Oracles into one of the following DeFi applications: Borrowing & Lending dApps, Decentralized Exchanges (DEX), Liquidity Mining, Prediction Markets, or Stablecoins)
- 🥇 1st: $2500
- 🥈 2nd: $1500
- 🥉 3rd: $700
### 📜 Qualification rules:
- Each project must use Chronicle Oracles in some form to make a state change on a blockchain, otherwise it will not be eligible. This means that a front end simply reading from Chronicle Oracles doesn't count.
- You can deploy your contracts on any of the following chains:
- Ethereum Sepolia
- Arbitrum Sepolia
- Base Sepolia
- Gnosis Chain Mainnet
- Scroll Sepolia
- zkSync Sepolia
- Optimism Sepolia
- Mantle Sepolia
### 🎯 Judging Criteria
- Code quality - well organized and readable code will score higher.
- Documentation - the better the documentation the higher the score.
- Extensibility - how easy can a developer use this to build out their own idea?
- DX - does the project provide a high quality developer experience?
- UI/UX - Projects with an intuitive UI will score higher.
### 🏁 Assets to submit:
Make sure to include the following in your project submission:
1. A public demo URL to your deployed project that judges can test.
2. A short video that demonstrates your submission (approximately 2-3 minutes).
3. A public GitHub repository with the code.
4. Complete the [Builder Feedback Form](https://forms.gle/SvcS5FsRDjDd5crA7).
Track 2: Most Innovative Chronicle Oracle Integration
### Track 2: Most Innovative Chronicle Oracle Integration
- 🥇 1st: $2500
- 🥈 2nd: $1500
- 🥉 3rd: $700
### 📜 Qualification rules:
- Each project must use Chronicle Oracles in some form to make a state change on a blockchain, otherwise it will not be eligible. This means that a front end simply reading from Chronicle Oracles doesn't count.
- The prize will go to the top three teams with the most innovative integration of Scribe, Chronicle's new Schnorr Oracle. You can deploy your contracts on any of the following chains:
- Ethereum Sepolia
- Arbitrum Sepolia
- Base Sepolia
- Polygon zkEVM Sepolia
- Gnosis Chain Mainnet
- Scroll Sepolia
- zkSync Sepolia
- Optimism Sepolia
- Mantle Sepolia
Solutions must integrate the Chronicle Oracle smart contracts. The innovation should stem from the use case of the Oracle, i.e., the idea or utility of the project.
### 🎯 Judging Criteria
- Code quality - well organized and readable code will score higher.
- Documentation - the better the documentation the higher the score.
- Extensibility - how easy can a developer use this to build out their own idea?
- DX - does the project provide a high quality developer experience?
- UI/UX - Projects with an intuitive UI will score higher.
### 🏁 Assets to submit:
Make sure to include the following in your project submission:
1. A public demo URL to your deployed project that judges can test.
2. A short video that demonstrates your submission (approximately 2-3 minutes).
3. A public GitHub repository with the code.
4. Complete the [Builder Feedback Form](https://forms.gle/SvcS5FsRDjDd5crA7).
Track 3: Best Educational Resource for Builders
## Track 3: Best Educational Resource for Builders
Create a tutorial for developers on integrating Chronicle Scribe Oracles.
- 🥇 1st: $350
- 🥈 2nd: $250
### 📜 Qualification rules:
- The submitted material should be your own. Material originating from other sources or generated with AI does not qualify.
### 🎯 Judging Criteria
- Accuracy: Information provided should be factually correct and well-researched.
- Clarity: Concepts should be explained clearly and concisely, avoiding unnecessary jargon.
- Extensibility - how easy can a developer use this material to build out their own idea?
- Relevance: The content should be relevant to the target audience and meet their learning needs.
- Practicality: The content should offer practical insights, tips, or steps that the audience can apply.
### 🏁 Assets to submit:
For this track you only need to submit a link to your content and to complete the [Builder Feedback Form](https://forms.gle/SvcS5FsRDjDd5crA7).
## ✏️ Talks & Workshops
- 🛠️ Chronicle Workshop: Scalable, Decentralized, Cost-Efficient Oracles
- Friday, 12th July, 04:30pm, Room 3
- **[GitHub Repository for the workshop](https://github.com/biancabuzea200/TokenVendor)**
## Chronicle Protocol Contracts
### Scribe
Scribe is an extremely gas-efficient Oracle based on aggregated Schnorr signatures. Providing nearly constant gas costs on Layer 2s and on Layer 1s, Scribe boasts of fixed gas costs, leading to substantial savings—over 60% relative to competing Oracles and an impressive 80% compared to Chainlink. This approach to gas management significantly boosts the scalability of the Oracle.
The Chronicle Scribe Oracle interface is plug-and-play with Chainlink and Maker Oracles, providing a smooth transition for developers used to these platforms.
All data delivered by a Chronicle Oracle on Mainnet is verifiable via The [Chronicle Dashboard](https://chroniclelabs.org/dashboard).
👉 [Scribe Public Repo](https://github.com/chronicleprotocol/scribe)
### CAST
Cast is a command-line interface (CLI) tool by the Foundry team to streamline your interaction with Ethereum and other EVM-based chains. Whether you're making smart contract calls, sending transactions, or retrieving any chain data, cast can help with that. You can read more [here](https://book.getfoundry.sh/reference/cast/cast).
:::important
### Self-Kisser: Permissionless Whitelisting
Chronicle safeguards Oracle read functions with a whitelist, ensuring controlled access to critical data. However, the SelfKisser contract unfolds a possibility where you can whitelist yourself (or, as whimsically termed, "kiss") yourself.
To kiss yourself, i.e., `msg.sender`, please check out the following guide, **[Getting Read Access to Contracts](../../Developers/Guides/whitelistAddress.md)**.
**Please note that this is a mandatory step in order to be able to read from Chronicle Oracles.**
:::
#### Common Pitfalls
- ⛽️ Ensure you have a sufficient amount of tokens in your wallet to cover gas fees for transactions.
- ⛓️ Ensure your wallet is connected to the correct network corresponding to the contract you are interacting with.
### 📤 Resources
- **[Scaffold-oracle-reader](https://github.com/chronicleprotocol/scaffold-oracle-reader) based on Scaffold-ETH2, to help you prototype easily and experiment with Solidity using a frontend that adapts to your smart contract**
- [Self-kisser Contract on Sepolia network](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code)
- [How To Use Read/Write Contract Features on Etherscan](https://info.etherscan.com/how-to-use-read-or-write-contract-features-on-etherscan/)
:::tip
You can view all the smart contract addresses below organized by chains:👇
:::
Smart Contract Addresses on **Ethereum Sepolia**
| Contract Name | Contract Address on Sepolia network |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d) |
| Chronicle_AAVE_USD_3 | [0x3F982a82B4B6bd09b1DAF832140F166b595FEF7F](https://sepolia.etherscan.io/address/0x3F982a82B4B6bd09b1DAF832140F166b595FEF7F) |
| Chronicle_ARB_USD_3 | [0x9Bf0C1ba75C9d7b6Bf051cc7f7dCC7bfE5274302](https://sepolia.etherscan.io/address/0x9Bf0C1ba75C9d7b6Bf051cc7f7dCC7bfE5274302) |
| Chronicle_AVAX_USD_3 | [0x7F56CdaAdB1c5230Fcab3E20D3A15BDE26cb6C2b](https://sepolia.etherscan.io/address/0x7F56CdaAdB1c5230Fcab3E20D3A15BDE26cb6C2b) |
| Chronicle_BNB_USD_3 | [0xE4A1EED38F972d05794C740Eae965A7Daa6Ab28c](https://sepolia.etherscan.io/address/0xE4A1EED38F972d05794C740Eae965A7Daa6Ab28c) |
| Chronicle_BTC_USD_3 | [0x6edF073c4Bd934d3916AA6dDAC4255ccB2b7c0f0](https://sepolia.etherscan.io/address/0x6edF073c4Bd934d3916AA6dDAC4255ccB2b7c0f0) |
| Chronicle_CRVUSD_USD_1 | [0x3de6bEc5d5FE063fB23F36E363182AB353AbC56E](https://sepolia.etherscan.io/address/0x3de6bEc5d5FE063fB23F36E363182AB353AbC56E) |
| Chronicle_CRV_USD_3 | [0xDcda58cAAC639C20aed270859109f03E9832a13A](https://sepolia.etherscan.io/address/0xDcda58cAAC639C20aed270859109f03E9832a13A) |
| Chronicle_DAI_USD_3 | [0xaf900d10f197762794C41dac395C5b8112eD13E1](https://sepolia.etherscan.io/address/0xaf900d10f197762794C41dac395C5b8112eD13E1) |
| Chronicle_ETHX_USD_1 | [0xc6639C0591d632Bf689ceab617A0377072e7f524](https://sepolia.etherscan.io/address/0xc6639C0591d632Bf689ceab617A0377072e7f524) |
| Chronicle_ETH_BTC_3 | [0xf95d3B8Ae567F4AA9BEC822931976c117cdf836a](https://sepolia.etherscan.io/address/0xf95d3B8Ae567F4AA9BEC822931976c117cdf836a) |
| Chronicle_ETH_USD_3 | [0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603](https://sepolia.etherscan.io/address/0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603) |
| Chronicle_GNO_USD_3 | [0x9C9e56AE479f82bcF229F2200420106C93C0A24e](https://sepolia.etherscan.io/address/0x9C9e56AE479f82bcF229F2200420106C93C0A24e) |
| Chronicle_IBTA_USD_3 | [0x92b7Ab73BA53Bc64b57194242e3a36A6F1209A70](https://sepolia.etherscan.io/address/0x92b7Ab73BA53Bc64b57194242e3a36A6F1209A70) |
| Chronicle_LDO_USD_3 | [0x4cD2a8c3Fd6329029461A95784051A553f31eb29](https://sepolia.etherscan.io/address/0x4cD2a8c3Fd6329029461A95784051A553f31eb29) |
| Chronicle_LINK_USD_3 | [0x260c182f0054BF244a8e38d7C475b6d9f67AeAc1](https://sepolia.etherscan.io/address/0x260c182f0054BF244a8e38d7C475b6d9f67AeAc1) |
| Chronicle_MATIC_USD_3 | [0xEa00861Dc00eBd246F6E51E52c28aBd9062bc09F](https://sepolia.etherscan.io/address/0xEa00861Dc00eBd246F6E51E52c28aBd9062bc09F) |
| Chronicle_MKR_USD_3 | [0xE55afC31AFA140597c581Bc32057BF393ba97c5A](https://sepolia.etherscan.io/address/0xE55afC31AFA140597c581Bc32057BF393ba97c5A) |
| Chronicle_MNT_USD_1 | [0x90f13128715157f6f2708b3e379a345a330C598c](https://sepolia.etherscan.io/address/0x90f13128715157f6f2708b3e379a345a330C598c) |
| Chronicle_OP_USD_3 | [0x1Be54a524226fc44565747FE221157f4cAE71B80](https://sepolia.etherscan.io/address/0x1Be54a524226fc44565747FE221157f4cAE71B80) |
| Chronicle_RETH_ETH_1 | [0xAE888F70d319d9ab9318B2326AEf97Bde2c1F96f](https://sepolia.etherscan.io/address/0xAE888F70d319d9ab9318B2326AEf97Bde2c1F96f) |
| Chronicle_RETH_USD_3 | [0x6454753E0909E7F6476BfB78BD6BDC281197A5be](https://sepolia.etherscan.io/address/0x6454753E0909E7F6476BfB78BD6BDC281197A5be) |
| Chronicle_SDAI_DAI_3 | [0x0B20Fd1c09452FC3F214667073EA8975aB2c55EA](https://sepolia.etherscan.io/address/0x0B20Fd1c09452FC3F214667073EA8975aB2c55EA) |
| Chronicle_SD_USD_1 | [0x0939F04AbA985E3861C4D7AD9fbD66b976Dd47a8](https://sepolia.etherscan.io/address/0x0939F04AbA985E3861C4D7AD9fbD66b976Dd47a8) |
| Chronicle_SNX_USD_3 | [0x1eFD788C634C59e2c7507b523B3eEfD6CaaE0c4f](https://sepolia.etherscan.io/address/0x1eFD788C634C59e2c7507b523B3eEfD6CaaE0c4f) |
| Chronicle_SOL_USD_3 | [0x39eC7D193D1Aa282b8ecCAC9B791b09c75D30491](https://sepolia.etherscan.io/address/0x39eC7D193D1Aa282b8ecCAC9B791b09c75D30491) |
| Chronicle_UNI_USD_3 | [0x0E9e54244F6585a71d0d1035E7625849B516C817](https://sepolia.etherscan.io/address/0x0E9e54244F6585a71d0d1035E7625849B516C817) |
| Chronicle_USDC_USD_3 | [0xb34d784dc8E7cD240Fe1F318e282dFdD13C389AC](https://sepolia.etherscan.io/address/0xb34d784dc8E7cD240Fe1F318e282dFdD13C389AC) |
| Chronicle_USDM_USD_1 | [0xe971B2aF139Ad803656533059Bc028b61C00F67F](https://sepolia.etherscan.io/address/0xe971B2aF139Ad803656533059Bc028b61C00F67F) |
| Chronicle_USDT_USD_3 | [0x8c852EEC6ae356FeDf5d7b824E254f7d94Ac6824](https://sepolia.etherscan.io/address/0x8c852EEC6ae356FeDf5d7b824E254f7d94Ac6824) |
| Chronicle_WBTC_USD_3 | [0xdc3ef3E31AdAe791d9D5054B575f7396851Fa432](https://sepolia.etherscan.io/address/0xdc3ef3E31AdAe791d9D5054B575f7396851Fa432) |
| Chronicle_WSTETH_ETH_3 | [0x2d95B1862279771fcE76823CD777384D8598fB48](https://sepolia.etherscan.io/address/0x2d95B1862279771fcE76823CD777384D8598fB48) |
| Chronicle_WSTETH_USD_3 | [0x89822dd9D74dF50BFba8764DC9bE25E9B8d554A1](https://sepolia.etherscan.io/address/0x89822dd9D74dF50BFba8764DC9bE25E9B8d554A1) |
| Chronicle_WUSDM_USDM_1 | [0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56](https://sepolia.etherscan.io/address/0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56) |
| Chronicle_WUSDM_USD_1 | [0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b](https://sepolia.etherscan.io/address/0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b) |
| Chronicle_YFI_USD_3 | [0xdF54aBf0eF88aB7fFf22e21eDD9AE1DA89A7DefC](https://sepolia.etherscan.io/address/0xdF54aBf0eF88aB7fFf22e21eDD9AE1DA89A7DefC) |
Smart Contract Addresses on **Base Sepolia**
| Contract Name | Contract Address on Base Sepolia |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
SelfKisser_1 | [0x70E58b7A1c884fFFE7dbce5249337603a28b8422](https://sepolia.basescan.org/address/0x70E58b7A1c884fFFE7dbce5249337603a28b8422#code) |
| Chronicle_CBETH_USD_1 | [0x11E155b04f0498bc6B6EB0086A2148368F0b64F0](https://sepolia.basescan.org/address/0x11E155b04f0498bc6B6EB0086A2148368F0b64F0) |
| Chronicle_CBETH_USDC_1 | [0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B](https://sepolia.basescan.org/address/0x371A53bB4203Ad5D7e60e220BaC1876FF3Ddda5B) |
| Chronicle_DAI_USD_1 | [0xC32753217DcC7Bb2F449bD6f1bC384d1AC72a7B6](https://sepolia.basescan.org/address/0xC32753217DcC7Bb2F449bD6f1bC384d1AC72a7B6) |
| Chronicle_ETH_USD_1 | [0xea347Db6ef446e03745c441c17018eF3d641Bc8f](https://sepolia.basescan.org/address/0xea347Db6ef446e03745c441c17018eF3d641Bc8f) |
| Chronicle_HYUSD_USD_1 | [0x1C082338961068009d9F33ea48aa13623e63B18e](https://sepolia.basescan.org/address/0x1C082338961068009d9F33ea48aa13623e63B18e) |
| Chronicle_RETH_USD_1 | [0x829124df58D1b4853f8669C867d3991cA09265Aa](https://sepolia.basescan.org/address/0x829124df58D1b4853f8669C867d3991cA09265Aa) |
| Chronicle_USDC_USD_1 | [0x088BEA5f90C316e1c8b898C4A9AF27C2F2984cd7](https://sepolia.basescan.org/address/0x088BEA5f90C316e1c8b898C4A9AF27C2F2984cd7) |
| Chronicle_USDT_USD_1 | [0xC1A83Bed9d7E434a3E8608f7C5438F805D404F8F](https://sepolia.basescan.org/address/0xC1A83Bed9d7E434a3E8608f7C5438F805D404F8F) |
| Chronicle_WBTC_USD_1 | [0x8E947Ea7D5881Cd600Ace95F1201825F8C708844](https://sepolia.basescan.org/address/0x8E947Ea7D5881Cd600Ace95F1201825F8C708844) |
| Chronicle_WSTETH_ETH_1 | [0x450F6F025aD017f345CD17407Ee22d90E5F87441](https://sepolia.basescan.org/address/0x450F6F025aD017f345CD17407Ee22d90E5F87441) |
| Chronicle_WSTETH_USD_1 | [0x834c4f996B8a6411AEC0f8a0cF6fAfd4423dBEe2](https://sepolia.basescan.org/address/0x834c4f996B8a6411AEC0f8a0cF6fAfd4423dBEe2) |
| Chronicle_WSTETH_USDC_1 | [0x262034B41F0C33b67e96b6495b7Bf650dC85acda](https://sepolia.basescan.org/address/0x262034B41F0C33b67e96b6495b7Bf650dC85acda) |
| Chronicle_WUSDM_USD_1 | [0xe20165f58B507DF17187D6FCc12E741423075C5c](https://sepolia.basescan.org/address/0xe20165f58B507DF17187D6FCc12E741423075C5c) |
Smart Contract Addresses on **Arbitrum Sepolia**
| Contract Name| Contract Address on Arbitrum Sepolia |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
SelfKisser_1 | [0xc0fe3a070Bc98b4a45d735A52a1AFDd134E0283f](https://sepolia.arbiscan.io/address/0xc0fe3a070Bc98b4a45d735A52a1AFDd134E0283f#code) |
| Chronicle_AAVE_USD_1 | [0xC7E4AA2860BEc0054A8A2D3bb1fc5359FEA13FdA](https://sepolia.arbiscan.io/address/0xC7E4AA2860BEc0054A8A2D3bb1fc5359FEA13FdA) |
| Chronicle_ARB_USD_1 | [0xdD7c06561689c73f0A67F2179e273cCF45EFc964](https://sepolia.arbiscan.io/address/0xdD7c06561689c73f0A67F2179e273cCF45EFc964) |
| Chronicle_AVAX_USD_1 | [0x15E9742b47Ae44308066F575E60F3c7231873f4A](https://sepolia.arbiscan.io/address/0x15E9742b47Ae44308066F575E60F3c7231873f4A) |
| Chronicle_BNB_USD_1 | [0xB5E60d6FbC65eb7aDC6594ea897bac9A7E1B2a20](https://sepolia.arbiscan.io/address/0xB5E60d6FbC65eb7aDC6594ea897bac9A7E1B2a20) |
| Chronicle_BTC_USD_1 | [0xE455de0673e89706e26117297f1FE15cd47ab717](https://sepolia.arbiscan.io/address/0xE455de0673e89706e26117297f1FE15cd47ab717) |
| Chronicle_CRV_USD_1 | [0x62ECebCA021681aC116582f10668d96D4723D9C9](https://sepolia.arbiscan.io/address/0x62ECebCA021681aC116582f10668d96D4723D9C9) |
| Chronicle_DAI_USD_1 | [0xFAE96480F5bB0e3a5c8cB1Ba16F59D8dE89C14AE](https://sepolia.arbiscan.io/address/0xFAE96480F5bB0e3a5c8cB1Ba16F59D8dE89C14AE) |
| Chronicle_DSR_RATE_1 | [0xd88cB520c0abB2755a950C11f2cf3131Ad0f0baA](https://sepolia.arbiscan.io/address/0xd88cB520c0abB2755a950C11f2cf3131Ad0f0baA) |
| Chronicle_ETH_BTC_1 | [0xf8aF8339e85F7b958027E5109bD87D3E46BF7d78](https://sepolia.arbiscan.io/address/0xf8aF8339e85F7b958027E5109bD87D3E46BF7d78) |
| Chronicle_ETH_USD_1 | [0x77833F676fe5FB32e55986770092f54707d72c21](https://sepolia.arbiscan.io/address/0x77833F676fe5FB32e55986770092f54707d72c21) |
| Chronicle_GNO_USD_1 | [0xB0Ebff855774737b1874296d54100c37C92dE2a4](https://sepolia.arbiscan.io/address/0xB0Ebff855774737b1874296d54100c37C92dE2a4) |
| Chronicle_IBTA_USD_1 | [0x9A70A6293C55e9fA8aB1F2B507EbE5A4d4506A6A](https://sepolia.arbiscan.io/address/0x9A70A6293C55e9fA8aB1F2B507EbE5A4d4506A6A) |
| Chronicle_LDO_USD_1 | [0xb43862e703a1a36f4A6a5196684C3a73210956Ef](https://sepolia.arbiscan.io/address/0xb43862e703a1a36f4A6a5196684C3a73210956Ef) |
| Chronicle_LIDO_LST_2DAYS_1 | [0xE92AaCfb6b7Ce342909ff2ee136f7A33AAbcb379](https://sepolia.arbiscan.io/address/0xE92AaCfb6b7Ce342909ff2ee136f7A33AAbcb379) |
| Chronicle_LINK_USD_1 | [0xF7e8af6BF4D0Fb399DC087778b7912f30aa08Ca5](https://sepolia.arbiscan.io/address/0xF7e8af6BF4D0Fb399DC087778b7912f30aa08Ca5) |
| Chronicle_MATIC_USD_1 | [0xBeF861cc071CA7A1680268a2a34dC28931BE1eDc](https://sepolia.arbiscan.io/address/0xBeF861cc071CA7A1680268a2a34dC28931BE1eDc) |
| Chronicle_MKR_USD_1 | [0x4217043B0C8a7A7BCf04A4c1d4Ef6708D2E9ac24](https://sepolia.arbiscan.io/address/0x4217043B0C8a7A7BCf04A4c1d4Ef6708D2E9ac24) |
| Chronicle_OP_USD_1 | [0xCAc87840eDA81Fcdee1FBDC4291c1fF0de7D45Eb](https://sepolia.arbiscan.io/address/0xCAc87840eDA81Fcdee1FBDC4291c1fF0de7D45Eb) |
| Chronicle_RETH_USD_1 | [0x4c3A6F4e991261B65D59f15B8365a9Fa2A8803a6](https://sepolia.arbiscan.io/address/0x4c3A6F4e991261B65D59f15B8365a9Fa2A8803a6) |
| Chronicle_SDAI_DAI_1 | [0x4f1C907d2f506f007F61eba89640C8069c6b39dB](https://sepolia.arbiscan.io/address/0x4f1C907d2f506f007F61eba89640C8069c6b39dB) |
| Chronicle_SDAI_ETH_1 | [0x39028693954470965E881f8477532455D1cE5F67](https://sepolia.arbiscan.io/address/0x39028693954470965E881f8477532455D1cE5F67) |
| Chronicle_SDAI_MATIC_1 | [0x75E5545dE5594DaE82Ce90cC0CeDbfE2d061a876](https://sepolia.arbiscan.io/address/0x75E5545dE5594DaE82Ce90cC0CeDbfE2d061a876) |
| Chronicle_SNX_USD_1 | [0xB6aA4b36c79805CA0db5C9736c12eAb23ac54770](https://sepolia.arbiscan.io/address/0xB6aA4b36c79805CA0db5C9736c12eAb23ac54770) |
| Chronicle_SOL_USD_1 | [0xB73376612dec25deF13ECBfcf94615edB9A7306D](https://sepolia.arbiscan.io/address/0xB73376612dec25deF13ECBfcf94615edB9A7306D) |
| Chronicle_UNI_USD_1 | [0x7Cb721f729563016F3384714221C982f75143EA2](https://sepolia.arbiscan.io/address/0x7Cb721f729563016F3384714221C982f75143EA2) |
| Chronicle_USDC_USD_1 | [0x27D76Db29D7239b183C83e6C61639dCca8276171](https://sepolia.arbiscan.io/address/0x27D76Db29D7239b183C83e6C61639dCca8276171) |
| Chronicle_USDT_USD_1 | [0x95931ea4e977456a5cF74F2Ea4BA3A66d9301921](https://sepolia.arbiscan.io/address/0x95931ea4e977456a5cF74F2Ea4BA3A66d9301921) |
| Chronicle_WBTC_USD_1 | [0xfF9D63b719116FE1Dc40547Be0ce008e783f49B9](https://sepolia.arbiscan.io/address/0xfF9D63b719116FE1Dc40547Be0ce008e783f49B9) |
| Chronicle_WSTETH_USD_1 | [0x988B3BFb20401e36EF579d7A81f43CB11EF5F759](https://sepolia.arbiscan.io/address/0x988B3BFb20401e36EF579d7A81f43CB11EF5F759) |
| Chronicle_WUSDM_USD_1 | [0xEd33f922e31467133A549a20e1719b187B33644D](https://sepolia.arbiscan.io/address/0xEd33f922e31467133A549a20e1719b187B33644D) |
| Chronicle_WUSDM_USDM_1 | [0x3B6882F848cD0ad0046EAd627a1bc17F81b6ECb1](https://sepolia.arbiscan.io/address/0x3B6882F848cD0ad0046EAd627a1bc17F81b6ECb1) |
| Chronicle_YFI_USD_1 | [0xAf40A6535C2a31a88C074B0FeFb47E3767AE4e70](https://sepolia.arbiscan.io/address/0xAf40A6535C2a31a88C074B0FeFb47E3767AE4e70)|
Smart Contract Addresses on **Polygon zkEVM Testnet Cardona**
| Contract Name | Contract Address on zkEVM Testnet |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0xCce64A8127c051E784ba7D84af86B2e6F53d1a09](https://cardona-zkevm.polygonscan.com/address/0xCce64A8127c051E784ba7D84af86B2e6F53d1a09) |
| AAVE/USD | [0xC1A83Bed9d7E434a3E8608f7C5438F805D404F8F](https://cardona-zkevm.polygonscan.com/address/0xC1A83Bed9d7E434a3E8608f7C5438F805D404F8F) |
| ARB/USD | [0x8E947Ea7D5881Cd600Ace95F1201825F8C708844](https://cardona-zkevm.polygonscan.com/address/0x8E947Ea7D5881Cd600Ace95F1201825F8C708844) |
| AVAX/USD | [0xC32753217DcC7Bb2F449bD6f1bC384d1AC72a7B6](https://cardona-zkevm.polygonscan.com/address/0xC32753217DcC7Bb2F449bD6f1bC384d1AC72a7B6) |
| BNB/USD | [0x829124df58D1b4853f8669C867d3991cA09265Aa](https://cardona-zkevm.polygonscan.com/address/0x829124df58D1b4853f8669C867d3991cA09265Aa) |
| BTC/USD | [0x75bE335415765aF13dFd8c823E213bdD55D29ceb](https://cardona-zkevm.polygonscan.com/address/0x75bE335415765aF13dFd8c823E213bdD55D29ceb) |
| CRV/USD | [0xA76F6f1883378E2641881233fD6Bd94C9dFc3308](https://cardona-zkevm.polygonscan.com/address/0xA76F6f1883378E2641881233fD6Bd94C9dFc3308) |
| DAI/USD | [0x02a0eA9F5000472D764293bC77622be6C6Cbc2f0](https://cardona-zkevm.polygonscan.com/address/0x02a0eA9F5000472D764293bC77622be6C6Cbc2f0) |
| ETH/BTC | [0xcB0ABe397952844C379A29343cDb17c914F33e40](https://cardona-zkevm.polygonscan.com/address/0xcB0ABe397952844C379A29343cDb17c914F33e40) |
| ETH/USD | [0x5D0474aF2da14B1748730931Af44d9b91473681b](https://cardona-zkevm.polygonscan.com/address/0x5D0474aF2da14B1748730931Af44d9b91473681b) |
| GNO/USD | [0x834c4f996B8a6411AEC0f8a0cF6fAfd4423dBEe2](https://cardona-zkevm.polygonscan.com/address/0x834c4f996B8a6411AEC0f8a0cF6fAfd4423dBEe2) |
| IBTA/USD | [0x26a89540C28C2E9FbECDf354D5149a10521ceC9f](https://cardona-zkevm.polygonscan.com/address/0x26a89540C28C2E9FbECDf354D5149a10521ceC9f) |
| LDO/USD | [0x9a0de663c20127a229891eA0C7Db99c785BF91e3](https://cardona-zkevm.polygonscan.com/address/0x9a0de663c20127a229891eA0C7Db99c785BF91e3) |
| LIDO_LST/2DAYS | [0xDc98e03EBdDaf664623959170B9C24F50bB27914](https://cardona-zkevm.polygonscan.com/address/0xDc98e03EBdDaf664623959170B9C24F50bB27914) |
| LINK/USD | [0xCa92f59FbE6B6512a1ee21a46ED009CeDb4Eb2fD](https://cardona-zkevm.polygonscan.com/address/0xCa92f59FbE6B6512a1ee21a46ED009CeDb4Eb2fD) |
| MATIC/USD | [0x55a07a60cd9ed198B5Ba4360FF9800eBb6667388](https://cardona-zkevm.polygonscan.com/address/0x55a07a60cd9ed198B5Ba4360FF9800eBb6667388) |
| MKR/USD | [0x5a3e38Df3d82bF6FefDA79d1027657ab81A85447](https://cardona-zkevm.polygonscan.com/address/0x5a3e38Df3d82bF6FefDA79d1027657ab81A85447) |
| OP/USD | [0x104916d38828DA8B83a88A1775Aa058e1F0B1647](https://cardona-zkevm.polygonscan.com/address/0x104916d38828DA8B83a88A1775Aa058e1F0B1647) |
| RETH/USD | [0x172d2A40F03167cf3535206220CEC912400A2594](https://cardona-zkevm.polygonscan.com/address/0x172d2A40F03167cf3535206220CEC912400A2594) |
| SDAI/DAI | [0x8744f55149A9923a6eD525A9FEdC270FBC2E1e12](https://cardona-zkevm.polygonscan.com/address/0x8744f55149A9923a6eD525A9FEdC270FBC2E1e12) |
| SNX/USD | [0x8d64F7320bFaa19e19E18824276AdbC4DC27Aeee](https://cardona-zkevm.polygonscan.com/address/0x8d64F7320bFaa19e19E18824276AdbC4DC27Aeee) |
| SOL/USD | [0x829207C4546eDDc0c17a37fF54f205871410c199](https://cardona-zkevm.polygonscan.com/address/0x829207C4546eDDc0c17a37fF54f205871410c199) |
| UNI/USD | [0xF46B02AF0b4Dc3fFd8B49a616fa399E77b58637F](https://cardona-zkevm.polygonscan.com/address/0xF46B02AF0b4Dc3fFd8B49a616fa399E77b58637F) |
| USDC/USD | [0x8b9dbE7098ED98C886a5B34Ca691141d033e8314](https://cardona-zkevm.polygonscan.com/address/0x8b9dbE7098ED98C886a5B34Ca691141d033e8314) |
| USDT/USD | [0x9234925842CD1c58b2fFc93E741097151417ABd1](https://cardona-zkevm.polygonscan.com/address/0x9234925842CD1c58b2fFc93E741097151417ABd1) |
| WBTC/USD | [0x49BD898Ddd4cAea31eFbE89BD4F4FD681dB0a7Ce](https://cardona-zkevm.polygonscan.com/address/0x49BD898Ddd4cAea31eFbE89BD4F4FD681dB0a7Ce) |
| WSTETH/ETH | [0x27E36b30c81b6D0f5916c01a9DEfbce48B14BaB0](https://cardona-zkevm.polygonscan.com/address/0x27E36b30c81b6D0f5916c01a9DEfbce48B14BaB0) |
| WSTETH/USD | [0xbBdB2750F002E1174d49D99112dF24D5FC342c22](https://cardona-zkevm.polygonscan.com/address/0xbBdB2750F002E1174d49D99112dF24D5FC342c22) |
| WUSDM/USD | [0xB295eeD91ab16e0fca7aEf6CdfE0989B43d7f9eC](https://cardona-zkevm.polygonscan.com/address/0xB295eeD91ab16e0fca7aEf6CdfE0989B43d7f9eC) |
| WUSDM/USDM | [0x40CEDD05e945DAA7b9ad5bA7402B6c041ac4Fba8](https://cardona-zkevm.polygonscan.com/address/0x40CEDD05e945DAA7b9ad5bA7402B6c041ac4Fba8) |
| YFI/USD | [0xaEDB40C1F3e1Bf5A0CB46E74e5444240307Da540](https://cardona-zkevm.polygonscan.com/address/0xaEDB40C1F3e1Bf5A0CB46E74e5444240307Da540) |
Smart Contract Addresses on **Gnosis Mainnet**
| Contract Name | Contract Address on Gnosis Mainnet |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://gnosisscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d) |
| Chronicle_AAVE_USD_2 | [0xED4C91FC28B48E2Cf98b59668408EAeE44665511](https://gnosisscan.io/address/0xED4C91FC28B48E2Cf98b59668408EAeE44665511) |
| Chronicle_ARB_USD_2 | [0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2](https://gnosisscan.io/address/0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2) |
| Chronicle_AVAX_USD_2 | [0xD419f76594d411BD94c71FB0a78c80f71A2290Ce](https://gnosisscan.io/address/0xD419f76594d411BD94c71FB0a78c80f71A2290Ce) |
| Chronicle_BNB_USD_2 | [0x6931FB9C54958f77873ceC4536EaC56F561d2dC4](https://gnosisscan.io/address/0x6931FB9C54958f77873ceC4536EaC56F561d2dC4) |
| Chronicle_BTC_USD_2 | [0xdD5232e76798BEACB69eC310d9b0864b56dD08dD](https://gnosisscan.io/address/0xdD5232e76798BEACB69eC310d9b0864b56dD08dD) |
| Chronicle_CRV_USD_2 | [0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32](https://gnosisscan.io/address/0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32) |
| Chronicle_DAI_USD_2 | [0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841](https://gnosisscan.io/address/0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841) |
| Chronicle_DSR_RATE_2 | [0x09f3BfC6b46526045De5F5BE64f5CCe121bbf8B3](https://gnosisscan.io/address/0x09f3BfC6b46526045De5F5BE64f5CCe121bbf8B3) |
| Chronicle_ETH_BTC_2 | [0x4E866Ac929374096Afc2715C4e9c40D581A4067e](https://gnosisscan.io/address/0x4E866Ac929374096Afc2715C4e9c40D581A4067e) |
| Chronicle_ETH_USD_2 | [0x90430C5b8045a1E2A0Fc4e959542a0c75b576439](https://gnosisscan.io/address/0x90430C5b8045a1E2A0Fc4e959542a0c75b576439) |
| Chronicle_GNO_USD_2 | [0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9](https://gnosisscan.io/address/0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9) |
| Chronicle_IBTA_USD_2 | [0xc52539EfbA58a521d69494D86fc47b9E71D32997](https://gnosisscan.io/address/0xc52539EfbA58a521d69494D86fc47b9E71D32997) |
| Chronicle_LDO_USD_2 | [0x3aeF92049C9401094A9f75259430F4771143F0C3](https://gnosisscan.io/address/0x3aeF92049C9401094A9f75259430F4771143F0C3) |
| Chronicle_LINK_USD_2 | [0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE](https://gnosisscan.io/address/0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE) |
| Chronicle_MATIC_USD_2 | [0x06997AadB30d51eAdBAA7836f7a0F177474fc235](https://gnosisscan.io/address/0x06997AadB30d51eAdBAA7836f7a0F177474fc235) |
| Chronicle_MKR_USD_2 | [0xE61A66f737c32d5Ac8cDea6982635B80447e9404](https://gnosisscan.io/address/0xE61A66f737c32d5Ac8cDea6982635B80447e9404) |
| Chronicle_OP_USD_2 | [0x1Ae491D618A667a44D48E0b0BE2Cc0cDBF269BC5](https://gnosisscan.io/address/0x1Ae491D618A667a44D48E0b0BE2Cc0cDBF269BC5) |
| Chronicle_RETH_USD_2 | [0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F](https://gnosisscan.io/address/0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F) |
| Chronicle_SDAI_DAI_2 | [0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D](https://gnosisscan.io/address/0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D) |
| Chronicle_SDAI_ETH_2 | [0x20A32F633c1D26fC42A15dc7e6bd12Bf0468cAb1](https://gnosisscan.io/address/0x20A32F633c1D26fC42A15dc7e6bd12Bf0468cAb1) |
| Chronicle_SDAI_MATIC_2 | [0x0A154ec276972dBFEA01b13711408Ea6e72Ac36B](https://gnosisscan.io/address/0x0A154ec276972dBFEA01b13711408Ea6e72Ac36B) |
| Chronicle_SNX_USD_2 | [0x6Ab51f7E684923CE051e784D382A470b0fa834Be](https://gnosisscan.io/address/0x6Ab51f7E684923CE051e784D382A470b0fa834Be) |
| Chronicle_SOL_USD_2 | [0x11ceEcca4d49f596E0Df781Af237CDE741ad2106](https://gnosisscan.io/address/0x11ceEcca4d49f596E0Df781Af237CDE741ad2106) |
| Chronicle_UNI_USD_2 | [0xfE051Bc90D3a2a825fA5172181f9124f8541838c](https://gnosisscan.io/address/0xfE051Bc90D3a2a825fA5172181f9124f8541838c) |
| Chronicle_USDC_USD_2 | [0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C](https://gnosisscan.io/address/0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C) |
| Chronicle_USDT_USD_2 | [0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba](https://gnosisscan.io/address/0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba) |
| Chronicle_WBTC_USD_2 | [0x39C899178F4310705b12888886884b361CeF26C7](https://gnosisscan.io/address/0x39C899178F4310705b12888886884b361CeF26C7) |
| Chronicle_WSTETH_USD_2 | [0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34](https://gnosisscan.io/address/0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34) |
| Chronicle_WUSDM_USDM_1 | [0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56](https://gnosisscan.io/address/0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56) |
| Chronicle_WUSDM_USD_3 | [0xa6667cA488616F86426cDCe37E65F4788d0bD592](https://gnosisscan.io/address/0xa6667cA488616F86426cDCe37E65F4788d0bD592) |
| Chronicle_YFI_USD_2 | [0x16978358A8D6C7C8cA758F433685A5E8D988dfD4](https://gnosisscan.io/address/0x16978358A8D6C7C8cA758F433685A5E8D988dfD4) |
Smart Contract Addresses on **Mantle Testnet**
| Contract Name | Contract Address on Mantle Sepolia |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://explorer.testnet.mantle.xyz/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d) |
| Chronicle_AAVE_USD_1 | [0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717](https://explorer.testnet.mantle.xyz/address/0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717) |
| Chronicle_ARB_USD_1 | [0x579BfD0581beD0d18fBb0Ebab099328d451552DD](https://explorer.testnet.mantle.xyz/address/0x579BfD0581beD0d18fBb0Ebab099328d451552DD) |
| Chronicle_AVAX_USD_1 | [0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688](https://explorer.testnet.mantle.xyz/address/0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688) |
| Chronicle_BNB_USD_1 | [0x26EE3E8b618227C1B735D8D884d52A852410019f](https://explorer.testnet.mantle.xyz/address/0x26EE3E8b618227C1B735D8D884d52A852410019f) |
| Chronicle_BTC_USD_1 | [0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c](https://explorer.testnet.mantle.xyz/address/0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c) |
| Chronicle_CRV_USD_1 | [0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030](https://explorer.testnet.mantle.xyz/address/0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030) |
| Chronicle_DAI_USD_1 | [0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4](https://explorer.testnet.mantle.xyz/address/0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4) |
| Chronicle_DSR_RATE_1 | [0x729af3A41AE9E707e7AE421569C4b9c632B66a0c](https://explorer.testnet.mantle.xyz/address/0x729af3A41AE9E707e7AE421569C4b9c632B66a0c) |
| Chronicle_ETH_BTC_1 | [0x1804969b296E89C1ddB1712fA99816446956637e](https://explorer.testnet.mantle.xyz/address/0x1804969b296E89C1ddB1712fA99816446956637e) |
| Chronicle_ETH_USD_1 | [0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660](https://explorer.testnet.mantle.xyz/address/0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660) |
| Chronicle_GNO_USD_1 | [0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8](https://explorer.testnet.mantle.xyz/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8) |
| Chronicle_IBTA_USD_1 | [0x07487b0Bf28801ECD15BF09C13e32FBc87572e81](https://explorer.testnet.mantle.xyz/address/0x07487b0Bf28801ECD15BF09C13e32FBc87572e81) |
| Chronicle_LDO_USD_1 | [0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E](https://explorer.testnet.mantle.xyz/address/0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E) |
| Chronicle_LINK_USD_1 | [0xecB89B57A60ac44E06ab1B767947c19b236760c3](https://explorer.testnet.mantle.xyz/address/0xecB89B57A60ac44E06ab1B767947c19b236760c3) |
| Chronicle_MATIC_USD_1 | [0xa48c56e48A71966676d0D113EAEbe6BE61661F18](https://explorer.testnet.mantle.xyz/address/0xa48c56e48A71966676d0D113EAEbe6BE61661F18) |
| Chronicle_MKR_USD_1 | [0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d](https://explorer.testnet.mantle.xyz/address/0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d) |
| Chronicle_OP_USD_1 | [0xfadF055f6333a4ab435D2D248aEe6617345A4782](https://explorer.testnet.mantle.xyz/address/0xfadF055f6333a4ab435D2D248aEe6617345A4782) |
| Chronicle_RETH_USD_1 | [0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263](https://explorer.testnet.mantle.xyz/address/0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263) |
| Chronicle_SDAI_DAI_1 | [0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491](https://explorer.testnet.mantle.xyz/address/0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491) |
| Chronicle_SDAI_ETH_1 | [0x05aB94eD168b5d18B667cFcbbA795789C750D893](https://explorer.testnet.mantle.xyz/address/0x05aB94eD168b5d18B667cFcbbA795789C750D893) |
| Chronicle_SDAI_MATIC_1 | [0x2f0e0dE1F8c11d2380dE093ED15cA6cE07653cbA](https://explorer.testnet.mantle.xyz/address/0x2f0e0dE1F8c11d2380dE093ED15cA6cE07653cbA) |
| Chronicle_SNX_USD_1 | [0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98](https://explorer.testnet.mantle.xyz/address/0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98) |
| Chronicle_SOL_USD_1 | [0x4D1e6f39bbfcce8b471171b8431609b83f3a096D](https://explorer.testnet.mantle.xyz/address/0x4D1e6f39bbfcce8b471171b8431609b83f3a096D) |
| Chronicle_UNI_USD_1 | [0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5](https://explorer.testnet.mantle.xyz/address/0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5) |
| Chronicle_USDC_USD_1 | [0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC](https://explorer.testnet.mantle.xyz/address/0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC) |
| Chronicle_USDT_USD_1 | [0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a](https://explorer.testnet.mantle.xyz/address/0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a) |
| Chronicle_WBTC_USD_1 | [0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584](https://explorer.testnet.mantle.xyz/address/0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584) |
| Chronicle_WSTETH_USD_1 | [0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab](https://explorer.testnet.mantle.xyz/address/0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab) |
| Chronicle_WUSDM_USDM_1 | [0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56](https://explorer.testnet.mantle.xyz/address/0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56) |
| Chronicle_WUSDM_USD_1 | [0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b](https://explorer.testnet.mantle.xyz/address/0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b) |
| Chronicle_YFI_USD_1 | [0x0893EcE705639112C1871DcE88D87D81540D0199](https://explorer.testnet.mantle.xyz/address/0x0893EcE705639112C1871DcE88D87D81540D0199) |
Smart Contract Addresses on **Scroll Sepolia**
| Contract Name | Contract Address on Scroll Sepolia |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.scrollscan.com/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d) |
| Chronicle_AAVE_USD_1 | [0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717](https://sepolia.scrollscan.com/address/0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717) |
| Chronicle_ARB_USD_1 | [0x579BfD0581beD0d18fBb0Ebab099328d451552DD](https://sepolia.scrollscan.com/address/0x579BfD0581beD0d18fBb0Ebab099328d451552DD) |
| Chronicle_AVAX_USD_1 | [0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688](https://sepolia.scrollscan.com/address/0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688) |
| Chronicle_BNB_USD_1 | [0x26EE3E8b618227C1B735D8D884d52A852410019f](https://sepolia.scrollscan.com/address/0x26EE3E8b618227C1B735D8D884d52A852410019f) |
| Chronicle_BTC_USD_1 | [0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c](https://sepolia.scrollscan.com/address/0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c) |
| Chronicle_CRV_USD_1 | [0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030](https://sepolia.scrollscan.com/address/0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030) |
| Chronicle_DAI_USD_1 | [0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4](https://sepolia.scrollscan.com/address/0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4) |
| Chronicle_ETH_BTC_1 | [0x1804969b296E89C1ddB1712fA99816446956637e](https://sepolia.scrollscan.com/address/0x1804969b296E89C1ddB1712fA99816446956637e) |
| Chronicle_ETH_USD_1 | [0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660](https://sepolia.scrollscan.com/address/0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660) |
| Chronicle_GNO_USD_1 | [0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8](https://sepolia.scrollscan.com/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8) |
| Chronicle_IBTA_USD_1 | [0x07487b0Bf28801ECD15BF09C13e32FBc87572e81](https://sepolia.scrollscan.com/address/0x07487b0Bf28801ECD15BF09C13e32FBc87572e81) |
| Chronicle_LDO_USD_1 | [0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E](https://sepolia.scrollscan.com/address/0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E) |
| Chronicle_LINK_USD_1 | [0xecB89B57A60ac44E06ab1B767947c19b236760c3](https://sepolia.scrollscan.com/address/0xecB89B57A60ac44E06ab1B767947c19b236760c3) |
| Chronicle_MATIC_USD_1 | [0xa48c56e48A71966676d0D113EAEbe6BE61661F18](https://sepolia.scrollscan.com/address/0xa48c56e48A71966676d0D113EAEbe6BE61661F18) |
| Chronicle_MKR_USD_1 | [0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d](https://sepolia.scrollscan.com/address/0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d) |
| Chronicle_OP_USD_1 | [0xfadF055f6333a4ab435D2D248aEe6617345A4782](https://sepolia.scrollscan.com/address/0xfadF055f6333a4ab435D2D248aEe6617345A4782) |
| Chronicle_RETH_USD_1 | [0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263](https://sepolia.scrollscan.com/address/0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263) |
| Chronicle_SDAI_DAI_1 | [0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491](https://sepolia.scrollscan.com/address/0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491) |
| Chronicle_SNX_USD_1 | [0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98](https://sepolia.scrollscan.com/address/0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98) |
| Chronicle_SOL_USD_1 | [0x4D1e6f39bbfcce8b471171b8431609b83f3a096D](https://sepolia.scrollscan.com/address/0x4D1e6f39bbfcce8b471171b8431609b83f3a096D) |
| Chronicle_UNI_USD_1 | [0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5](https://sepolia.scrollscan.com/address/0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5) |
| Chronicle_USDC_USD_1 | [0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC](https://sepolia.scrollscan.com/address/0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC) |
| Chronicle_USDT_USD_1 | [0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a](https://sepolia.scrollscan.com/address/0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a) |
| Chronicle_WBTC_USD_1 | [0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584](https://sepolia.scrollscan.com/address/0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584) |
| Chronicle_WSTETH_ETH_1 | [0x40BE3f9D43DbdadE162F04CC97A29603D88F50E4](https://sepolia.scrollscan.com/address/0x40BE3f9D43DbdadE162F04CC97A29603D88F50E4) |
| Chronicle_WSTETH_USD_1 | [0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab](https://sepolia.scrollscan.com/address/0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab) |
| Chronicle_YFI_USD_1 | [0x0893EcE705639112C1871DcE88D87D81540D0199](https://sepolia.scrollscan.com/address/0x0893EcE705639112C1871DcE88D87D81540D0199) |
Smart Contract Addresses on **zkSync Sepolia**
| Contract Name | Contract Address on zkSync Sepolia |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0x25f594edde4f58A14970b2ef6616badBa4B1CdDD](https://sepolia.explorer.zksync.io/address/0x25f594edde4f58A14970b2ef6616badBa4B1CdDD) |
| Chronicle_AAVE_USD_1 | [0x6dc3D077E795d1faCEAEb94B2396471A91Be5498](https://sepolia.explorer.zksync.io/address/0x6dc3D077E795d1faCEAEb94B2396471A91Be5498) |
| Chronicle_ARB_USD_1 | [0x9635DE4989C0832Fc581cd1666cE3a7EdF973a29](https://sepolia.explorer.zksync.io/address/0x9635DE4989C0832Fc581cd1666cE3a7EdF973a29) |
| Chronicle_AVAX_USD_1 | [0x231E4fA18Cc387C83b3941224E7B4E3491e616e0](https://sepolia.explorer.zksync.io/address/0x231E4fA18Cc387C83b3941224E7B4E3491e616e0) |
| Chronicle_BNB_USD_1 | [0x41b6E1613fE235Ebc81829a5B02bC2f96212eb49](https://sepolia.explorer.zksync.io/address/0x41b6E1613fE235Ebc81829a5B02bC2f96212eb49) |
| Chronicle_BTC_USD_1 | [0x0C5b65706224cb8D7d41524DCdF414FeaD4a2C28](https://sepolia.explorer.zksync.io/address/0x0C5b65706224cb8D7d41524DCdF414FeaD4a2C28) |
| Chronicle_CRV_USD_1 | [0x5A91677DCd79d578E5963B64Ef3E963Beb626F14](https://sepolia.explorer.zksync.io/address/0x5A91677DCd79d578E5963B64Ef3E963Beb626F14) |
| Chronicle_DAI_USD_1 | [0x8dE859e3281CC34574161189CccBD953Dd67DE24](https://sepolia.explorer.zksync.io/address/0x8dE859e3281CC34574161189CccBD953Dd67DE24) |
| Chronicle_DSR_RATE_1 | [0x68C9aa7bA59811B2B995CDB1b73cAac84522fBC3](https://sepolia.explorer.zksync.io/address/0x68C9aa7bA59811B2B995CDB1b73cAac84522fBC3) |
| Chronicle_ETH_BTC_1 | [0x25ECc0dF13b33faF4813438BFB8DA3968bEb705A](https://sepolia.explorer.zksync.io/address/0x25ECc0dF13b33faF4813438BFB8DA3968bEb705A) |
| Chronicle_ETH_USD_1 | [0x46cf81028852a948D22Af41e264a5895F5115006](https://sepolia.explorer.zksync.io/address/0x46cf81028852a948D22Af41e264a5895F5115006) |
| Chronicle_GNO_USD_1 | [0x6C10082C014476F21344CCe0f6b5B7463fFbAC7A](https://sepolia.explorer.zksync.io/address/0x6C10082C014476F21344CCe0f6b5B7463fFbAC7A) |
| Chronicle_IBTA_USD_1 | [0x8120d0A79871eB4966fe5D7dF1608FF58229F6F3](https://sepolia.explorer.zksync.io/address/0x8120d0A79871eB4966fe5D7dF1608FF58229F6F3) |
| Chronicle_LDO_USD_1 | [0x3B05D11dEd3a3E585E1AA6d1ed87A0177D18894B](https://sepolia.explorer.zksync.io/address/0x3B05D11dEd3a3E585E1AA6d1ed87A0177D18894B) |
| Chronicle_LINK_USD_1 | [0x566c45c6f10D207Cc2F083a33D56B4ccDF23B7bc](https://sepolia.explorer.zksync.io/address/0x566c45c6f10D207Cc2F083a33D56B4ccDF23B7bc) |
| Chronicle_MATIC_USD_1 | [0xB146e962BDe5185c45ea6e320b14d67F3DFD2173](https://sepolia.explorer.zksync.io/address/0xB146e962BDe5185c45ea6e320b14d67F3DFD2173) |
| Chronicle_MKR_USD_1 | [0x68e4aC3eCDaa1a6072c7A5f38f2CCF8c6E0Cccb2](https://sepolia.explorer.zksync.io/address/0x68e4aC3eCDaa1a6072c7A5f38f2CCF8c6E0Cccb2) |
| Chronicle_OP_USD_1 | [0x47bAD642f631eB94894A58Af6bC7D4c9DbB6485c](https://sepolia.explorer.zksync.io/address/0x47bAD642f631eB94894A58Af6bC7D4c9DbB6485c) |
| Chronicle_RETH_USD_1 | [0x20374ea0Fb22A2CE2f84B4A628e4eEF01793cF6A](https://sepolia.explorer.zksync.io/address/0x20374ea0Fb22A2CE2f84B4A628e4eEF01793cF6A) |
| Chronicle_SDAI_DAI_1 | [0x7e7Df5117f5A6E8Cf82a0F80F06fE1119FC9b741](https://sepolia.explorer.zksync.io/address/0x7e7Df5117f5A6E8Cf82a0F80F06fE1119FC9b741) |
| Chronicle_SDAI_ETH_1 | [0x71a16AeAA5650e519b2a606BCB496cf1CAd75b94](https://sepolia.explorer.zksync.io/address/0x71a16AeAA5650e519b2a606BCB496cf1CAd75b94) |
| Chronicle_SDAI_MATIC_1 | [0x32952b3Ff76C658826e906C441B98C3609BD7981](https://sepolia.explorer.zksync.io/address/0x32952b3Ff76C658826e906C441B98C3609BD7981) |
| Chronicle_SNX_USD_1 | [0x5912D288bDB918f931516041Ecd8a72fD1563A39](https://sepolia.explorer.zksync.io/address/0x5912D288bDB918f931516041Ecd8a72fD1563A39) |
| Chronicle_SOL_USD_1 | [0x79a6Cb3D5cf55a5Ddc91d041B5F3D192AA1799F5](https://sepolia.explorer.zksync.io/address/0x79a6Cb3D5cf55a5Ddc91d041B5F3D192AA1799F5) |
| Chronicle_UNI_USD_1 | [0x52485646EF15dB99504965de37494440Be862685](https://sepolia.explorer.zksync.io/address/0x52485646EF15dB99504965de37494440Be862685) |
| Chronicle_USDC_USD_1 | [0xEf281522E64e91A7333335986DF7B47720934A95](https://sepolia.explorer.zksync.io/address/0xEf281522E64e91A7333335986DF7B47720934A95) |
| Chronicle_USDT_USD_1 | [0xAD86B6EcC316406b2688e483dbDceBc33ADD0c8E](https://sepolia.explorer.zksync.io/address/0xAD86B6EcC316406b2688e483dbDceBc33ADD0c8E) |
| Chronicle_WBTC_USD_1 | [0x793C59AF9d64fD94CE40B35b649E59c6AA13c5B0](https://sepolia.explorer.zksync.io/address/0x793C59AF9d64fD94CE40B35b649E59c6AA13c5B0) |
| Chronicle_WSTETH_USD_1 | [0x1A622e80A5a08e943f508940881d9cb92D8b4d31](https://sepolia.explorer.zksync.io/address/0x1A622e80A5a08e943f508940881d9cb92D8b4d31) |
| Chronicle_YFI_USD_1 | [0x25bb6AadC4276362F0Ca8Bb227D393d0aC54111e](https://sepolia.explorer.zksync.io/address/0x25bb6AadC4276362F0Ca8Bb227D393d0aC54111e) |
Smart Contract Addresses on **Optimism Sepolia**
| Contract Name | Contract Address on Optimism Sepolia |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
SelfKisser_1 | [0xfF619a90cDa4020897808D74557ce3b648922C37](https://sepolia-optimism.etherscan.io/address/0xfF619a90cDa4020897808D74557ce3b648922C37) |
| Chronicle_AAVE_USD_1| [0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717](https://sepolia-optimism.etherscan.io/address/0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717)|
| Chronicle_ARB_USD_1 | [0x579BfD0581beD0d18fBb0Ebab099328d451552DD](https://sepolia-optimism.etherscan.io/address/0x579BfD0581beD0d18fBb0Ebab099328d451552DD) |
| Chronicle_AVAX_USD_1 | [0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688](https://sepolia-optimism.etherscan.io/address/0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688) |
| Chronicle_BNB_USD_1 | [0x26EE3E8b618227C1B735D8D884d52A852410019f](https://sepolia-optimism.etherscan.io/address/0x26EE3E8b618227C1B735D8D884d52A852410019f) |
| Chronicle_BTC_USD_1 | [0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c](https://sepolia-optimism.etherscan.io/address/0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c) |
| Chronicle_CRV_USD_1 | [0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030](https://sepolia-optimism.etherscan.io/address/0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030) |
| Chronicle_CRVUSD_USD_1 | [0x3de6bEc5d5FE063fB23F36E363182AB353AbC56E](https://sepolia-optimism.etherscan.io/address/0x3de6bEc5d5FE063fB23F36E363182AB353AbC56E) |
| Chronicle_DAI_USD_1 | [0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4](https://sepolia-optimism.etherscan.io/address/0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4) |
| Chronicle_ETH_BTC_1 | [0x1804969b296E89C1ddB1712fA99816446956637e](https://sepolia-optimism.etherscan.io/address/0x1804969b296E89C1ddB1712fA99816446956637e) |
| Chronicle_ETH_USD_1 | [0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660](https://sepolia-optimism.etherscan.io/address/0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660) |
| Chronicle_ETHX_USD_1 | [0xc6639C0591d632Bf689ceab617A0377072e7f524](https://sepolia-optimism.etherscan.io/address/0xc6639C0591d632Bf689ceab617A0377072e7f524) |
| Chronicle_GNO_USD_1 | [0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8](https://sepolia-optimism.etherscan.io/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8) |
| Chronicle_IBTA_USD_1 | [0x07487b0Bf28801ECD15BF09C13e32FBc87572e81](https://sepolia-optimism.etherscan.io/address/0x07487b0Bf28801ECD15BF09C13e32FBc87572e81) |
| Chronicle_LDO_USD_1 | [0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E](https://sepolia-optimism.etherscan.io/address/0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E) |
| Chronicle_LIDO_LST_2DAYS_1 | [0xe8d114cF81F345d934Bb1c64Fb1917A6511c04B5](https://sepolia-optimism.etherscan.io/address/0xe8d114cF81F345d934Bb1c64Fb1917A6511c04B5) |
| Chronicle_LINK_USD_1 | [0xecB89B57A60ac44E06ab1B767947c19b236760c3](https://sepolia-optimism.etherscan.io/address/0xecB89B57A60ac44E06ab1B767947c19b236760c3) |
| Chronicle_MATIC_USD_1 | [0xa48c56e48A71966676d0D113EAEbe6BE61661F18](https://sepolia-optimism.etherscan.io/address/0xa48c56e48A71966676d0D113EAEbe6BE61661F18) |
| Chronicle_MKR_USD_1 | [0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d](https://sepolia-optimism.etherscan.io/address/0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d) |
| Chronicle_MNT_USD_1 | [0x90f13128715157f6f2708b3e379a345a330C598c](https://sepolia-optimism.etherscan.io/address/0x90f13128715157f6f2708b3e379a345a330C598c) |
| Chronicle_OP_USD_1 | [0xfadF055f6333a4ab435D2D248aEe6617345A4782](https://sepolia-optimism.etherscan.io/address/0xfadF055f6333a4ab435D2D248aEe6617345A4782) |
| Chronicle_RETH_ETH_1 | [0xAE888F70d319d9ab9318B2326AEf97Bde2c1F96f](https://sepolia-optimism.etherscan.io/address/0xAE888F70d319d9ab9318B2326AEf97Bde2c1F96f) |
| Chronicle_RETH_USD_1 | [0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263](https://sepolia-optimism.etherscan.io/address/0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263) |
| Chronicle_SD_USD_1 | [0x0939F04AbA985E3861C4D7AD9fbD66b976Dd47a8](https://sepolia-optimism.etherscan.io/address/0x0939F04AbA985E3861C4D7AD9fbD66b976Dd47a8) |
| Chronicle_SDAI_DAI_1 | [0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491](https://sepolia-optimism.etherscan.io/address/0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491) |
| Chronicle_SNX_USD_1 | [0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98](https://sepolia-optimism.etherscan.io/address/0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98) |
| Chronicle_SOL_USD_1 | [0x4D1e6f39bbfcce8b471171b8431609b83f3a096D](https://sepolia-optimism.etherscan.io/address/0x4D1e6f39bbfcce8b471171b8431609b83f3a096D) |
| Chronicle_UNI_USD_1 | [0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5](https://sepolia-optimism.etherscan.io/address/0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5) |
| Chronicle_USDC_USD_1 | [0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC](https://sepolia-optimism.etherscan.io/address/0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC) |
| Chronicle_USDM_USD_1 | [0xe971B2aF139Ad803656533059Bc028b61C00F67F](https://sepolia-optimism.etherscan.io/address/0xe971B2aF139Ad803656533059Bc028b61C00F67F) |
| Chronicle_USDT_USD_1 | [0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a](https://sepolia-optimism.etherscan.io/address/0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a) |
| Chronicle_WBTC_USD_1 | [0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584](https://sepolia-optimism.etherscan.io/address/0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584) |
| Chronicle_WSTETH_ETH_1 | [0x40BE3f9D43DbdadE162F04CC97A29603D88F50E4](https://sepolia-optimism.etherscan.io/address/0x40BE3f9D43DbdadE162F04CC97A29603D88F50E4) |
| Chronicle_WSTETH_USD_1 | [0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab](https://sepolia-optimism.etherscan.io/address/0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab) |
| Chronicle_WUSDM_USD_1 | [0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b](https://sepolia-optimism.etherscan.io/address/0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b) |
| Chronicle_WUSDM_USDM_1 | [0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56](https://sepolia-optimism.etherscan.io/address/0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56) |
| Chronicle_YFI_USD_1 | [0x0893EcE705639112C1871DcE88D87D81540D0199](https://sepolia-optimism.etherscan.io/address/0x0893EcE705639112C1871DcE88D87D81540D0199) |
## 🤝 Getting Help
:::note
If you have any questions and would like support with your project, please join our **[Discord](https://discord.com/invite/CjgvJ9EspJ)** and drop your question in the hackathons channel.
:::
Say hi 👋 when you see them around and ask your questions directly to one of our team members who are on-site during the event:
- Alexander Vasylchenko, Product, [@AlexanderVasyl](https://x.com/AlexanderVasyl)
- Angus Tookey, Marketing, [@AngusTookey](https://x.com/AngusTookey)
- Bianca Buzea, Developer Relations, [@buzea200](https://x.com/buzea200)
- Jenn Senhaji, BD/Growth, [@jensenhaji](https://x.com/jensenhaji)
- Niklas Kunkel, Founder, [@nomos_paradox](https://x.com/nomos_paradox)
- Pawel Zaremba, Engineering, [@teghnet](https://x.com/teghnet)
## General Setup Useful Links
List of Sepolia ETH Faucets:
- [https://cloud.google.com/application/web3/faucet/ethereum/sepolia](https://cloud.google.com/application/web3/faucet/ethereum/sepolia) - Does not require to have any funds on Mainnet
- [https://www.alchemy.com/faucets/ethereum-sepolia](https://www.alchemy.com/faucets/ethereum-sepolia)
- [https://ethglobal.com/faucet](https://ethglobal.com/faucet) - Faucets for different Testnet networks for various chains
- [https://sepoliafaucet.com/](https://sepoliafaucet.com/)
Chainlist RPCs:
- [Sepolia](https://chainlist.org/chain/11155111)
- [Gnosis Mainnet](https://chainlist.org/chain/100)
- [Mantle Testnet](https://chainlist.org/chain/5003)
- [Scroll-Sepolia](https://chainlist.org/chain/534351)
- [Polygon testnet-ZKEVM-mango](https://chainlist.org/chain/1442)
RPC Providers:
- [drpc.org](https://drpc.org/)
- [nodies](https://www.nodies.app/)
- [grove](https://www.grove.city/)
- [blast api](https://blastapi.io/)
- [ankr](https://www.ankr.com/rpc/)
- Foundry Setup:
- [https://getfoundry.sh](https://getfoundry.sh/)
- Create a Test Wallet:
- `cast new wallet`
## More on Scribe
- [Eth Magician Post](https://ethereum-magicians.org/t/an-efficient-schnorr-multi-signature-implementation/15510)
- [Twitter Thread](https://twitter.com/merkleplant_eth/status/1693652385980379593)
- [Scribe's docs](https://github.com/chronicleprotocol/scribe/blob/main/docs/Scribe.md)
## Good luck and happy hacking! 🧙
---
// File: hackathons/Previous/eth-global-sf-hackathon
# 🇺🇸 Chronicle @ETHGlobal San Francisco
🛠️💻🛠️ Hello builders and welcome to ETHGlobal San Francisco bounties page!
This document serves as a guide for integrating Chronicle Oracles into your hackathon projects.
:::tip
### Chronicle Protocol Contracts
You can view all the smart contract addresses [here](../../Developers/testnet.md), or directly via the [Dashboard](https://chroniclelabs.org/dashboard). If you are using the Dashboard, you can find the Testnet addresses for different chains by toggling ``.
:::
:::important
### Self-Kisser: Permissionless Whitelisting
Chronicle safeguards Oracle read functions with a whitelist, ensuring controlled access to critical data. However, the SelfKisser contract unfolds a possibility where you can whitelist yourself (or, as whimsically termed, "kiss") yourself on **Testnet chains**.
To kiss yourself, i.e., `msg.sender`, please check out the following guide, **[Getting Read Access to Contracts](../../Developers/Guides/whitelistAddress.md)**. On the same page, you will find a table with the SelfKisser addresses for different Testnet chains.
**Please note that this is a mandatory step to be able to read from Chronicle Oracles!**
:::
## 💰 Bounties: 10K
Track 1: Best Integration of Chronicle Protocol
### Track 1: Best Integration of Chronicle Protocol
Unlock new possibilities with Scribe, Chronicle Protocol's cost-efficient oracles!
Leverage our diverse oracle solutions across 10 supported chains to power your next big idea. Whether you're building a game with dynamic pricing, crafting a reputation system, or designing an advanced analytics dashboard, Chronicle's robust, chain-agnostic infrastructure provides the flexibility and performance to fuel your innovation. Show us what you can create and surprise us with your unique use cases!
- 🥇 1st: $2750
- 🥈 2nd: $2000
### 📜 Qualification rules:
- Each project must use Chronicle Oracles in some form to make a state change on a blockchain, otherwise it will not be eligible. This means that a front end simply reading from Chronicle Oracles doesn't count.
- Deployed contract addresses must be included in your repo’s README. You can deploy your contracts on any of the following chains on Testnet: Ethereum, Arbitrum, Base, Polygon zkEVM, Gnosis Chain (on Mainnet only) , Scroll, zkSync, Optimism, Mantle, Berachain.
### 🎯 Judging Criteria
- Code quality - well organized and readable code will score higher.
- Documentation - the better the documentation the higher the score.
- Extensibility - how easy can a developer use this to build out their own idea?
- DX - does the project provide a high quality developer experience?
- UI/UX - Projects with an intuitive UI will score higher.
### 🏁 Assets to submit:
Make sure to include the following in your project submission:
1. A public demo URL to your deployed project that judges can test.
2. A short video that demonstrates your submission (approximately 2-3 minutes).
3. A public GitHub repository with the code.
4. Complete the [Builder Feedback Form](https://forms.gle/SvcS5FsRDjDd5crA7).
Track 2: Best DeFi Application Powered by Chronicle
### Track 2: Best DeFi Application Powered by Chronicle
Build a DeFi application powered by Chronicle Protocol’s Oracles. Potential examples include lending protocols, decentralized exchanges, yield farming strategies, liquidity pools, stablecoins, prediction markets, decentralized insurance, decentralized credit score applications, trading bots, etc.
The prize will go to the top teams with the best DeFi integration of Chronicle's Scribe cost-efficient Oracles.
- 🥇 1st: $2750
- 🥈 2nd: $2000
### 📜 Qualification rules:
- Each project must use Chronicle Oracles in some form to make a state change on a blockchain, otherwise it will not be eligible. This means that a front end simply reading from Chronicle Oracles doesn't count.
- Deployed contract addresses must be included in your repo’s README. You can deploy your contracts on any of the following chains either on Testnet: Ethereum, Arbitrum, Base, Polygon zkEVM, Gnosis Chain (on Mainnet only), Scroll, zkSync, Optimism, Mantle, Berachain.
### 🎯 Judging Criteria
- Code quality - well organized and readable code will score higher.
- Documentation - the better the documentation the higher the score.
- Extensibility - how easy can a developer use this to build out their own idea?
- DX - does the project provide a high quality developer experience?
- UI/UX - Projects with an intuitive UI will score higher.
### 🏁 Assets to submit:
Make sure to include the following in your project submission:
1. A public demo URL to your deployed project that judges can test.
2. A short video that demonstrates your submission (approximately 2-3 minutes).
3. A public GitHub repository with the code.
4. Complete the [Builder Feedback Form](https://forms.gle/SvcS5FsRDjDd5crA7).
Track 3: Best Educational Resource for Builders
## Track 3: Best Scribe Oracles Integration Tutorial
This prize is for the best technical tutorial for developers on integrating Chronicle's Scribe Oracles (https://docs.chroniclelabs.org/Intro/scribe).
- 🥇 1st: $500
### 📜 Qualification rules:
- The submitted material should be your own. Material originating from other sources or generated with AI does not qualify.
- Include the working example associated with the tutorial.
- The tutorial must present a novel approach or solution that is not already available in existing documentation or tutorials.
### 🎯 Judging Criteria
- Accuracy: Information provided should be factually correct and well-researched.
- Clarity: Concepts should be explained clearly and concisely, avoiding unnecessary jargon.
- Extensibility - how easy can a developer use this material to build out their own idea?
- Relevance: The content should be relevant to the target audience and meet their learning needs.
- Practicality: The content should offer practical insights, tips, or steps that the audience can apply.
### 🏁 Assets to submit:
For this track you only need to submit a link to your content and its associated code and to complete the 2-minute [Builder Feedback Form](https://forms.gle/SvcS5FsRDjDd5crA7).
## ✏️ Workshops
- 🛠️ Crash Course on Oracles with Chronicle Protocol - Friday, 18th October, 04:00pm, Room 2
## 📤 Resources
- **[Scaffold-oracle-reader](https://github.com/chronicleprotocol/scaffold-oracle-reader) based on Scaffold-ETH2, to help you prototype easily and experiment with Solidity using a frontend that adapts to your smart contract**
- [How To Use Read/Write Contract Features on Etherscan](https://info.etherscan.com/how-to-use-read-or-write-contract-features-on-etherscan/)
### Scribe
Scribe is an extremely gas-efficient Oracle based on aggregated Schnorr signatures. Providing nearly constant gas costs on Layer 2s and on Layer 1s, Scribe boasts of fixed gas costs, leading to substantial savings—over 60% relative to competing Oracles and an impressive 80% compared to Chainlink. This approach to gas management significantly boosts the scalability of the Oracle.
The Chronicle Scribe Oracle interface is plug-and-play with Chainlink and Maker Oracles, providing a smooth transition for developers used to these platforms.
All data delivered by a Chronicle Oracle is verifiable via The [Chronicle Dashboard](https://chroniclelabs.org/dashboard).
👉 [Scribe Public Repo](https://github.com/chronicleprotocol/scribe)
### CAST
Cast is a command-line interface (CLI) tool by the Foundry team to streamline your interaction with Ethereum and other EVM-based chains. Whether you're making smart contract calls, sending transactions, or retrieving any chain data, cast can help with that. You can read more [here](https://book.getfoundry.sh/reference/cast/cast).
## 🤝 Getting Help
:::note
If you have any questions and would like support with your project, please join our **[Discord](https://discord.com/invite/CjgvJ9EspJ)** and drop your question in the hackathons channel.
:::
Say hi 👋 when you spot the team in their Chronicle t-shirts and feel free to ask any questions directly to our on-site team members. You can also visit the Chronicle booth for hackathon support.
## More on Scribe
- [Eth Magician Post](https://ethereum-magicians.org/t/an-efficient-schnorr-multi-signature-implementation/15510)
- [Twitter Thread](https://twitter.com/merkleplant_eth/status/1693652385980379593)
- [Scribe's docs](https://github.com/chronicleprotocol/scribe/blob/main/docs/Scribe.md)
## General Setup Useful Links
List of Sepolia ETH Faucets:
- [https://cloud.google.com/application/web3/faucet/ethereum/sepolia](https://cloud.google.com/application/web3/faucet/ethereum/sepolia) - Does not require to have any funds on Mainnet
- [https://www.alchemy.com/faucets/ethereum-sepolia](https://www.alchemy.com/faucets/ethereum-sepolia)
- [https://ethglobal.com/faucet](https://ethglobal.com/faucet) - Faucets for different Testnet networks for various chains
- [https://sepoliafaucet.com/](https://sepoliafaucet.com/)
Chainlist RPCs:
- [Sepolia](https://chainlist.org/chain/11155111)
- [Gnosis Mainnet](https://chainlist.org/chain/100)
- [Mantle Testnet](https://chainlist.org/chain/5003)
- [Scroll-Sepolia](https://chainlist.org/chain/534351)
RPC Providers:
- [drpc.org](https://drpc.org/)
- [nodies](https://www.nodies.app/)
- [grove](https://www.grove.city/)
- [blast api](https://blastapi.io/)
- [ankr](https://www.ankr.com/rpc/)
- Foundry Setup:
- [https://getfoundry.sh](https://getfoundry.sh/)
- Create a Test Wallet:
- `cast new wallet`
## Common Pitfalls
- ⛽️ Ensure you have a sufficient amount of tokens in your wallet to cover gas fees for transactions.
- ⛓️ Ensure your wallet is connected to the correct network corresponding to the contract you are interacting with.
- ⚪️ Make sure to whitelist the address that reads from each Oracle you use. For example, if you're using ETH/USD and ETH/BTC, you'll need to whitelist your address for both Oracles.
- ✅ Ensure you are using the correct SelfKisser address for the chain you are working with, as the SelfKisser may have different addresses across chains. You can find the corresponding SelfKisser addresses for each chain on this [page](../../Developers/Guides/whitelistAddress.md).
## Good luck and happy hacking! 🧙
---
// File: hackathons/Previous/eth-denver-hackathon
# 🇺🇸 ETH Denver Hackathon Guide
Welcome to the ETH Denver Hackathon! This document serves as a guide for integrating Chronicle Oracles into your hackathon projects. Our team is here to assist you.
For any inquiries, feel free to reach out at our booth, join our Discord, or walk up to anyone wearing a Chronicle hoodie
## Chronicle Oracle Integration Bounties
### Most Innovative Chronicle Oracle Integration
🏆 Reward 🏆:
- 🥇 1st: $2500
- 🥈 2nd: $1500
- 🥉 3rd: $1000
The prize will go to the top three teams with the most innovative integration of Scribe, Chronicle's new Schnorr Oracle. Supported chains include: Ethereum Sepolia, Polygon zkEVM testnet, Gnosis Chain Mainnet, Scroll Sepolia, zkSync Sepolia, and Mantle Testnet; solutions must utilize the Oracle smart contract. The innovation should stem from the use case of the Oracle, i.e., The idea or utility of the project.
### Qualification rules:
Must utilize the Oracle smart contract on one of the supported blockchains
## Chronicle Protocol Contracts
### Scribe
Scribe is an extremely gas-efficient Oracle based on aggregated Schnorr signatures. Providing nearly constant gas costs on Layer 2s and on Layer 1s, Scribe boasts of fixed gas costs, leading to substantial savings—over 60% relative to competing Oracles and an impressive 80% compared to Chainlink. This approach to gas management significantly boosts the scalability of the Oracle.
The Chronicle Scribe Oracle interface is plug-and-play with Chainlink and Maker Oracles, providing a smooth transition for developers used to these platforms.
All data delivered by a Chronicle Oracle on mainnet is verifiable via The [Chronicle Dashboard](https://chroniclelabs.org/dashboard).
Scribe Public Repo: [https://github.com/chronicleprotocol/scribe](https://github.com/chronicleprotocol/scribe)
### CAST
Cast is a command-line interface (CLI) tool by the Foundry team to streamline your interaction with Ethereum and other EVM-based chains. Whether you're making smart contract calls, sending transactions, or retrieving any chain data, cast can help with that. You can read more [here](https://book.getfoundry.sh/reference/cast/cast).
### Self-Kisser: Permissionless Whitelisting
Chronicle safeguards Oracle read functions with a whitelist, ensuring controlled access to critical data. However, the SelfKisser contract unfolds a possibility where you can whitelist yourself (or, as whimsically termed, "kiss") yourself :).
How do you kiss yourself, i.e., `msg.sender`?
Run the following command:
```bash
$ cast send 0x0dcc19657007713483a5ca76e6a7bbe5f56ea37d "selfKiss(address)()"
```
To verify your whitelisted status:
```bash
$ cast call "tolled(address)"
```
Response:
```bash
0x0000000000000000000000000000000000000000000000000000000000000001
```
A return value of `1 (true)` confirms your whitelisted status.
For more info, see the `SelfKisser` repo: [https://github.com/chronicleprotocol/self-kisser](https://github.com/chronicleprotocol/self-kisser/blob/main/docs/Management.md#management)
### Reading Chronicle Oracles through the `IChronicle` Interface
Interacting with the oracle is easy. The `read()` function lays it out plain and simple, returning a `uint` value representing the data you are trying to get:
```bash
$ cast call 0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660 "read()(uint)"
```
Response:
```bash
1656870000000000045440
```
:::info
For a detailed outline of the interface and additional functionalities, click [here](https://github.com/chronicleprotocol/chronicle-std/blob/main/src/IChronicle.sol)
:::
## Whitelisting your address via Etherscan
To whitelist your address or other addresses for a Chronicle Oracle on Etherscan, follow these steps:
1. Navigate to the Self-kisser contract on Etherscan using the contract address provided: [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code)
2. Click on the `Contract` tab and then on `Write Contract`.
3. You'll have to hit the `Connect to Web3` button to connect your wallet.
4. Scroll down to the `selfKiss` function and enter the Oracle address you wish to interact with in the `oracle (address)` field. Then, click Write.
That should send you a popup message on your wallet to sign. Once signed, it should take a few seconds for your address to be whitelisted.
### Reading from Smart Contracts
1. Go to the `Read Contract` tab and locate the `tolled` function.
2. Enter your wallet address in the `who (address)` field.
3. Hit `Query`. The data returned will be displayed below, which should look like this:
```solidity
[ tolled(address) method Response ]
bool : true
```
#### Additional Notes
- Ensure you have a sufficient amount of tokens in your wallet to cover gas fees for transactions.
- Ensure your wallet is connected to the correct network corresponding to the contract you are interacting with.
### Useful Links
- [Self-kisser Contract on Sepolia network](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code)
- [How To Use Read/Write Contract Features on Etherscan](https://info.etherscan.com/how-to-use-read-or-write-contract-features-on-etherscan/)
:::info
You can view all the smart contract addresses below:👇
:::
Smart Contract Addresses on Sepolia network
| Contract Name | Contract Address on Sepolia network |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d) |
| Chronicle_AAVE_USD_3 | [0x3F982a82B4B6bd09b1DAF832140F166b595FEF7F](https://sepolia.etherscan.io/address/0x3F982a82B4B6bd09b1DAF832140F166b595FEF7F) |
| Chronicle_ARB_USD_3 | [0x9Bf0C1ba75C9d7b6Bf051cc7f7dCC7bfE5274302](https://sepolia.etherscan.io/address/0x9Bf0C1ba75C9d7b6Bf051cc7f7dCC7bfE5274302) |
| Chronicle_AVAX_USD_3 | [0x7F56CdaAdB1c5230Fcab3E20D3A15BDE26cb6C2b](https://sepolia.etherscan.io/address/0x7F56CdaAdB1c5230Fcab3E20D3A15BDE26cb6C2b) |
| Chronicle_BNB_USD_3 | [0xE4A1EED38F972d05794C740Eae965A7Daa6Ab28c](https://sepolia.etherscan.io/address/0xE4A1EED38F972d05794C740Eae965A7Daa6Ab28c) |
| Chronicle_BTC_USD_3 | [0x6edF073c4Bd934d3916AA6dDAC4255ccB2b7c0f0](https://sepolia.etherscan.io/address/0x6edF073c4Bd934d3916AA6dDAC4255ccB2b7c0f0) |
| Chronicle_CRVUSD_USD_1 | [0x3de6bEc5d5FE063fB23F36E363182AB353AbC56E](https://sepolia.etherscan.io/address/0x3de6bEc5d5FE063fB23F36E363182AB353AbC56E) |
| Chronicle_CRV_USD_3 | [0xDcda58cAAC639C20aed270859109f03E9832a13A](https://sepolia.etherscan.io/address/0xDcda58cAAC639C20aed270859109f03E9832a13A) |
| Chronicle_DAI_USD_3 | [0xaf900d10f197762794C41dac395C5b8112eD13E1](https://sepolia.etherscan.io/address/0xaf900d10f197762794C41dac395C5b8112eD13E1) |
| Chronicle_ETHX_USD_1 | [0xc6639C0591d632Bf689ceab617A0377072e7f524](https://sepolia.etherscan.io/address/0xc6639C0591d632Bf689ceab617A0377072e7f524) |
| Chronicle_ETH_BTC_3 | [0xf95d3B8Ae567F4AA9BEC822931976c117cdf836a](https://sepolia.etherscan.io/address/0xf95d3B8Ae567F4AA9BEC822931976c117cdf836a) |
| Chronicle_ETH_USD_3 | [0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603](https://sepolia.etherscan.io/address/0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603) |
| Chronicle_GNO_USD_3 | [0x9C9e56AE479f82bcF229F2200420106C93C0A24e](https://sepolia.etherscan.io/address/0x9C9e56AE479f82bcF229F2200420106C93C0A24e) |
| Chronicle_IBTA_USD_3 | [0x92b7Ab73BA53Bc64b57194242e3a36A6F1209A70](https://sepolia.etherscan.io/address/0x92b7Ab73BA53Bc64b57194242e3a36A6F1209A70) |
| Chronicle_LDO_USD_3 | [0x4cD2a8c3Fd6329029461A95784051A553f31eb29](https://sepolia.etherscan.io/address/0x4cD2a8c3Fd6329029461A95784051A553f31eb29) |
| Chronicle_LINK_USD_3 | [0x260c182f0054BF244a8e38d7C475b6d9f67AeAc1](https://sepolia.etherscan.io/address/0x260c182f0054BF244a8e38d7C475b6d9f67AeAc1) |
| Chronicle_MATIC_USD_3 | [0xEa00861Dc00eBd246F6E51E52c28aBd9062bc09F](https://sepolia.etherscan.io/address/0xEa00861Dc00eBd246F6E51E52c28aBd9062bc09F) |
| Chronicle_MKR_USD_3 | [0xE55afC31AFA140597c581Bc32057BF393ba97c5A](https://sepolia.etherscan.io/address/0xE55afC31AFA140597c581Bc32057BF393ba97c5A) |
| Chronicle_MNT_USD_1 | [0x90f13128715157f6f2708b3e379a345a330C598c](https://sepolia.etherscan.io/address/0x90f13128715157f6f2708b3e379a345a330C598c) |
| Chronicle_OP_USD_3 | [0x1Be54a524226fc44565747FE221157f4cAE71B80](https://sepolia.etherscan.io/address/0x1Be54a524226fc44565747FE221157f4cAE71B80) |
| Chronicle_RETH_ETH_1 | [0xAE888F70d319d9ab9318B2326AEf97Bde2c1F96f](https://sepolia.etherscan.io/address/0xAE888F70d319d9ab9318B2326AEf97Bde2c1F96f) |
| Chronicle_RETH_USD_3 | [0x6454753E0909E7F6476BfB78BD6BDC281197A5be](https://sepolia.etherscan.io/address/0x6454753E0909E7F6476BfB78BD6BDC281197A5be) |
| Chronicle_SDAI_DAI_3 | [0x0B20Fd1c09452FC3F214667073EA8975aB2c55EA](https://sepolia.etherscan.io/address/0x0B20Fd1c09452FC3F214667073EA8975aB2c55EA) |
| Chronicle_SD_USD_1 | [0x0939F04AbA985E3861C4D7AD9fbD66b976Dd47a8](https://sepolia.etherscan.io/address/0x0939F04AbA985E3861C4D7AD9fbD66b976Dd47a8) |
| Chronicle_SNX_USD_3 | [0x1eFD788C634C59e2c7507b523B3eEfD6CaaE0c4f](https://sepolia.etherscan.io/address/0x1eFD788C634C59e2c7507b523B3eEfD6CaaE0c4f) |
| Chronicle_SOL_USD_3 | [0x39eC7D193D1Aa282b8ecCAC9B791b09c75D30491](https://sepolia.etherscan.io/address/0x39eC7D193D1Aa282b8ecCAC9B791b09c75D30491) |
| Chronicle_UNI_USD_3 | [0x0E9e54244F6585a71d0d1035E7625849B516C817](https://sepolia.etherscan.io/address/0x0E9e54244F6585a71d0d1035E7625849B516C817) |
| Chronicle_USDC_USD_3 | [0xb34d784dc8E7cD240Fe1F318e282dFdD13C389AC](https://sepolia.etherscan.io/address/0xb34d784dc8E7cD240Fe1F318e282dFdD13C389AC) |
| Chronicle_USDM_USD_1 | [0xe971B2aF139Ad803656533059Bc028b61C00F67F](https://sepolia.etherscan.io/address/0xe971B2aF139Ad803656533059Bc028b61C00F67F) |
| Chronicle_USDT_USD_3 | [0x8c852EEC6ae356FeDf5d7b824E254f7d94Ac6824](https://sepolia.etherscan.io/address/0x8c852EEC6ae356FeDf5d7b824E254f7d94Ac6824) |
| Chronicle_WBTC_USD_3 | [0xdc3ef3E31AdAe791d9D5054B575f7396851Fa432](https://sepolia.etherscan.io/address/0xdc3ef3E31AdAe791d9D5054B575f7396851Fa432) |
| Chronicle_WSTETH_ETH_3 | [0x2d95B1862279771fcE76823CD777384D8598fB48](https://sepolia.etherscan.io/address/0x2d95B1862279771fcE76823CD777384D8598fB48) |
| Chronicle_WSTETH_USD_3 | [0x89822dd9D74dF50BFba8764DC9bE25E9B8d554A1](https://sepolia.etherscan.io/address/0x89822dd9D74dF50BFba8764DC9bE25E9B8d554A1) |
| Chronicle_WUSDM_USDM_1 | [0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56](https://sepolia.etherscan.io/address/0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56) |
| Chronicle_WUSDM_USD_1 | [0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b](https://sepolia.etherscan.io/address/0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b) |
| Chronicle_YFI_USD_3 | [0xdF54aBf0eF88aB7fFf22e21eDD9AE1DA89A7DefC](https://sepolia.etherscan.io/address/0xdF54aBf0eF88aB7fFf22e21eDD9AE1DA89A7DefC) |
Smart Contract Addresses on Polygon zkEVM Testnet
| Contract Name | Contract Address on zkEVM Testnet |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://testnet-zkevm.polygonscan.com/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d) |
| Chronicle_AAVE_USD_3 | [0x3F982a82B4B6bd09b1DAF832140F166b595FEF7F](https://testnet-zkevm.polygonscan.com/address/0x3F982a82B4B6bd09b1DAF832140F166b595FEF7F) |
| Chronicle_ARB_USD_3 | [0x9Bf0C1ba75C9d7b6Bf051cc7f7dCC7bfE5274302](https://testnet-zkevm.polygonscan.com/address/0x9Bf0C1ba75C9d7b6Bf051cc7f7dCC7bfE5274302) |
| Chronicle_AVAX_USD_3 | [0xDcd4c95f9D1f660E31fD516B936388fc9D4117Ea](https://testnet-zkevm.polygonscan.com/address/0xDcd4c95f9D1f660E31fD516B936388fc9D4117Ea) |
| Chronicle_BNB_USD_3 | [0xE4A1EED38F972d05794C740Eae965A7Daa6Ab28c](https://testnet-zkevm.polygonscan.com/address/0xE4A1EED38F972d05794C740Eae965A7Daa6Ab28c) |
| Chronicle_BTC_USD_3 | [0x6edF073c4Bd934d3916AA6dDAC4255ccB2b7c0f0](https://testnet-zkevm.polygonscan.com/address/0x6edF073c4Bd934d3916AA6dDAC4255ccB2b7c0f0) |
| Chronicle_CRV_USD_3 | [0xDcda58cAAC639C20aed270859109f03E9832a13A](https://testnet-zkevm.polygonscan.com/address/0xDcda58cAAC639C20aed270859109f03E9832a13A) |
| Chronicle_DAI_USD_3 | [0xaf900d10f197762794C41dac395C5b8112eD13E1](https://testnet-zkevm.polygonscan.com/address/0xaf900d10f197762794C41dac395C5b8112eD13E1) |
| Chronicle_ETH_BTC_3 | [0xf95d3B8Ae567F4AA9BEC822931976c117cdf836a](https://testnet-zkevm.polygonscan.com/address/0xf95d3B8Ae567F4AA9BEC822931976c117cdf836a) |
| Chronicle_ETH_USD_3 | [0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603](https://testnet-zkevm.polygonscan.com/address/0xdd6D76262Fd7BdDe428dcfCd94386EbAe0151603) |
| Chronicle_GNO_USD_3 | [0x9C9e56AE479f82bcF229F2200420106C93C0A24e](https://testnet-zkevm.polygonscan.com/address/0x9C9e56AE479f82bcF229F2200420106C93C0A24e) |
| Chronicle_IBTA_USD_3 | [0x92b7Ab73BA53Bc64b57194242e3a36A6F1209A70](https://testnet-zkevm.polygonscan.com/address/0x92b7Ab73BA53Bc64b57194242e3a36A6F1209A70) |
| Chronicle_LDO_USD_3 | [0x4cD2a8c3Fd6329029461A95784051A553f31eb29](https://testnet-zkevm.polygonscan.com/address/0x4cD2a8c3Fd6329029461A95784051A553f31eb29) |
| Chronicle_LINK_USD_3 | [0x260c182f0054BF244a8e38d7C475b6d9f67AeAc1](https://testnet-zkevm.polygonscan.com/address/0x260c182f0054BF244a8e38d7C475b6d9f67AeAc1) |
| Chronicle_MATIC_USD_3 | [0xEa00861Dc00eBd246F6E51E52c28aBd9062bc09F](https://testnet-zkevm.polygonscan.com/address/0xEa00861Dc00eBd246F6E51E52c28aBd9062bc09F) |
| Chronicle_MKR_USD_3 | [0xE55afC31AFA140597c581Bc32057BF393ba97c5A](https://testnet-zkevm.polygonscan.com/address/0xE55afC31AFA140597c581Bc32057BF393ba97c5A) |
| Chronicle_OP_USD_3 | [0x1Be54a524226fc44565747FE221157f4cAE71B80](https://testnet-zkevm.polygonscan.com/address/0x1Be54a524226fc44565747FE221157f4cAE71B80) |
| Chronicle_RETH_USD_3 | [0x6454753E0909E7F6476BfB78BD6BDC281197A5be](https://testnet-zkevm.polygonscan.com/address/0x6454753E0909E7F6476BfB78BD6BDC281197A5be) |
| Chronicle_SDAI_DAI_3 | [0x0B20Fd1c09452FC3F214667073EA8975aB2c55EA](https://testnet-zkevm.polygonscan.com/address/0x0B20Fd1c09452FC3F214667073EA8975aB2c55EA) |
| Chronicle_SNX_USD_3 | [0x1eFD788C634C59e2c7507b523B3eEfD6CaaE0c4f](https://testnet-zkevm.polygonscan.com/address/0x1eFD788C634C59e2c7507b523B3eEfD6CaaE0c4f) |
| Chronicle_SOL_USD_3 | [0x39eC7D193D1Aa282b8ecCAC9B791b09c75D30491](https://testnet-zkevm.polygonscan.com/address/0x39eC7D193D1Aa282b8ecCAC9B791b09c75D30491) |
| Chronicle_UNI_USD_3 | [0x0E9e54244F6585a71d0d1035E7625849B516C817](https://testnet-zkevm.polygonscan.com/address/0x0E9e54244F6585a71d0d1035E7625849B516C817) |
| Chronicle_USDC_USD_3 | [0xb34d784dc8E7cD240Fe1F318e282dFdD13C389AC](https://testnet-zkevm.polygonscan.com/address/0xb34d784dc8E7cD240Fe1F318e282dFdD13C389AC) |
| Chronicle_USDT_USD_3 | [0x8c852EEC6ae356FeDf5d7b824E254f7d94Ac6824](https://testnet-zkevm.polygonscan.com/address/0x8c852EEC6ae356FeDf5d7b824E254f7d94Ac6824) |
| Chronicle_WBTC_USD_3 | [0xdc3ef3E31AdAe791d9D5054B575f7396851Fa432](https://testnet-zkevm.polygonscan.com/address/0xdc3ef3E31AdAe791d9D5054B575f7396851Fa432) |
| Chronicle_WSTETH_ETH_3 | [0x2d95B1862279771fcE76823CD777384D8598fB48](https://testnet-zkevm.polygonscan.com/address/0x2d95B1862279771fcE76823CD777384D8598fB48) |
| Chronicle_WSTETH_USD_3 | [0x89822dd9D74dF50BFba8764DC9bE25E9B8d554A1](https://testnet-zkevm.polygonscan.com/address/0x89822dd9D74dF50BFba8764DC9bE25E9B8d554A1) |
| Chronicle_WUSDM_USDM_1 | [0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56](https://testnet-zkevm.polygonscan.com/address/0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56) |
| Chronicle_WUSDM_USD_1 | [0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b](https://testnet-zkevm.polygonscan.com/address/0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b) |
| Chronicle_YFI_USD_3 | [0xdF54aBf0eF88aB7fFf22e21eDD9AE1DA89A7DefC](https://testnet-zkevm.polygonscan.com/address/0xdF54aBf0eF88aB7fFf22e21eDD9AE1DA89A7DefC) |
Smart Contract Addresses on Gnosis Mainnet
| Contract Name | Contract Address on Gnosis Mainnet |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://gnosisscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d) |
| Chronicle_AAVE_USD_2 | [0xED4C91FC28B48E2Cf98b59668408EAeE44665511](https://gnosisscan.io/address/0xED4C91FC28B48E2Cf98b59668408EAeE44665511) |
| Chronicle_ARB_USD_2 | [0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2](https://gnosisscan.io/address/0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2) |
| Chronicle_AVAX_USD_2 | [0xD419f76594d411BD94c71FB0a78c80f71A2290Ce](https://gnosisscan.io/address/0xD419f76594d411BD94c71FB0a78c80f71A2290Ce) |
| Chronicle_BNB_USD_2 | [0x6931FB9C54958f77873ceC4536EaC56F561d2dC4](https://gnosisscan.io/address/0x6931FB9C54958f77873ceC4536EaC56F561d2dC4) |
| Chronicle_BTC_USD_2 | [0xdD5232e76798BEACB69eC310d9b0864b56dD08dD](https://gnosisscan.io/address/0xdD5232e76798BEACB69eC310d9b0864b56dD08dD) |
| Chronicle_CRV_USD_2 | [0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32](https://gnosisscan.io/address/0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32) |
| Chronicle_DAI_USD_2 | [0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841](https://gnosisscan.io/address/0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841) |
| Chronicle_DSR_RATE_2 | [0x09f3BfC6b46526045De5F5BE64f5CCe121bbf8B3](https://gnosisscan.io/address/0x09f3BfC6b46526045De5F5BE64f5CCe121bbf8B3) |
| Chronicle_ETH_BTC_2 | [0x4E866Ac929374096Afc2715C4e9c40D581A4067e](https://gnosisscan.io/address/0x4E866Ac929374096Afc2715C4e9c40D581A4067e) |
| Chronicle_ETH_USD_2 | [0x90430C5b8045a1E2A0Fc4e959542a0c75b576439](https://gnosisscan.io/address/0x90430C5b8045a1E2A0Fc4e959542a0c75b576439) |
| Chronicle_GNO_USD_2 | [0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9](https://gnosisscan.io/address/0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9) |
| Chronicle_IBTA_USD_2 | [0xc52539EfbA58a521d69494D86fc47b9E71D32997](https://gnosisscan.io/address/0xc52539EfbA58a521d69494D86fc47b9E71D32997) |
| Chronicle_LDO_USD_2 | [0x3aeF92049C9401094A9f75259430F4771143F0C3](https://gnosisscan.io/address/0x3aeF92049C9401094A9f75259430F4771143F0C3) |
| Chronicle_LINK_USD_2 | [0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE](https://gnosisscan.io/address/0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE) |
| Chronicle_MATIC_USD_2 | [0x06997AadB30d51eAdBAA7836f7a0F177474fc235](https://gnosisscan.io/address/0x06997AadB30d51eAdBAA7836f7a0F177474fc235) |
| Chronicle_MKR_USD_2 | [0xE61A66f737c32d5Ac8cDea6982635B80447e9404](https://gnosisscan.io/address/0xE61A66f737c32d5Ac8cDea6982635B80447e9404) |
| Chronicle_OP_USD_2 | [0x1Ae491D618A667a44D48E0b0BE2Cc0cDBF269BC5](https://gnosisscan.io/address/0x1Ae491D618A667a44D48E0b0BE2Cc0cDBF269BC5) |
| Chronicle_RETH_USD_2 | [0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F](https://gnosisscan.io/address/0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F) |
| Chronicle_SDAI_DAI_2 | [0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D](https://gnosisscan.io/address/0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D) |
| Chronicle_SDAI_ETH_2 | [0x20A32F633c1D26fC42A15dc7e6bd12Bf0468cAb1](https://gnosisscan.io/address/0x20A32F633c1D26fC42A15dc7e6bd12Bf0468cAb1) |
| Chronicle_SDAI_MATIC_2 | [0x0A154ec276972dBFEA01b13711408Ea6e72Ac36B](https://gnosisscan.io/address/0x0A154ec276972dBFEA01b13711408Ea6e72Ac36B) |
| Chronicle_SNX_USD_2 | [0x6Ab51f7E684923CE051e784D382A470b0fa834Be](https://gnosisscan.io/address/0x6Ab51f7E684923CE051e784D382A470b0fa834Be) |
| Chronicle_SOL_USD_2 | [0x11ceEcca4d49f596E0Df781Af237CDE741ad2106](https://gnosisscan.io/address/0x11ceEcca4d49f596E0Df781Af237CDE741ad2106) |
| Chronicle_UNI_USD_2 | [0xfE051Bc90D3a2a825fA5172181f9124f8541838c](https://gnosisscan.io/address/0xfE051Bc90D3a2a825fA5172181f9124f8541838c) |
| Chronicle_USDC_USD_2 | [0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C](https://gnosisscan.io/address/0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C) |
| Chronicle_USDT_USD_2 | [0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba](https://gnosisscan.io/address/0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba) |
| Chronicle_WBTC_USD_2 | [0x39C899178F4310705b12888886884b361CeF26C7](https://gnosisscan.io/address/0x39C899178F4310705b12888886884b361CeF26C7) |
| Chronicle_WSTETH_USD_2 | [0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34](https://gnosisscan.io/address/0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34) |
| Chronicle_WUSDM_USDM_1 | [0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56](https://gnosisscan.io/address/0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56) |
| Chronicle_WUSDM_USD_3 | [0xa6667cA488616F86426cDCe37E65F4788d0bD592](https://gnosisscan.io/address/0xa6667cA488616F86426cDCe37E65F4788d0bD592) |
| Chronicle_YFI_USD_2 | [0x16978358A8D6C7C8cA758F433685A5E8D988dfD4](https://gnosisscan.io/address/0x16978358A8D6C7C8cA758F433685A5E8D988dfD4) |
Smart Contract Addresses on Mantle Testnet
| Contract Name | Contract Address on Mantle Mainnet |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://explorer.testnet.mantle.xyz/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d) |
| Chronicle_AAVE_USD_1 | [0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717](https://explorer.testnet.mantle.xyz/address/0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717) |
| Chronicle_ARB_USD_1 | [0x579BfD0581beD0d18fBb0Ebab099328d451552DD](https://explorer.testnet.mantle.xyz/address/0x579BfD0581beD0d18fBb0Ebab099328d451552DD) |
| Chronicle_AVAX_USD_1 | [0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688](https://explorer.testnet.mantle.xyz/address/0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688) |
| Chronicle_BNB_USD_1 | [0x26EE3E8b618227C1B735D8D884d52A852410019f](https://explorer.testnet.mantle.xyz/address/0x26EE3E8b618227C1B735D8D884d52A852410019f) |
| Chronicle_BTC_USD_1 | [0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c](https://explorer.testnet.mantle.xyz/address/0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c) |
| Chronicle_CRV_USD_1 | [0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030](https://explorer.testnet.mantle.xyz/address/0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030) |
| Chronicle_DAI_USD_1 | [0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4](https://explorer.testnet.mantle.xyz/address/0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4) |
| Chronicle_DSR_RATE_1 | [0x729af3A41AE9E707e7AE421569C4b9c632B66a0c](https://explorer.testnet.mantle.xyz/address/0x729af3A41AE9E707e7AE421569C4b9c632B66a0c) |
| Chronicle_ETH_BTC_1 | [0x1804969b296E89C1ddB1712fA99816446956637e](https://explorer.testnet.mantle.xyz/address/0x1804969b296E89C1ddB1712fA99816446956637e) |
| Chronicle_ETH_USD_1 | [0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660](https://explorer.testnet.mantle.xyz/address/0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660) |
| Chronicle_GNO_USD_1 | [0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8](https://explorer.testnet.mantle.xyz/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8) |
| Chronicle_IBTA_USD_1 | [0x07487b0Bf28801ECD15BF09C13e32FBc87572e81](https://explorer.testnet.mantle.xyz/address/0x07487b0Bf28801ECD15BF09C13e32FBc87572e81) |
| Chronicle_LDO_USD_1 | [0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E](https://explorer.testnet.mantle.xyz/address/0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E) |
| Chronicle_LINK_USD_1 | [0xecB89B57A60ac44E06ab1B767947c19b236760c3](https://explorer.testnet.mantle.xyz/address/0xecB89B57A60ac44E06ab1B767947c19b236760c3) |
| Chronicle_MATIC_USD_1 | [0xa48c56e48A71966676d0D113EAEbe6BE61661F18](https://explorer.testnet.mantle.xyz/address/0xa48c56e48A71966676d0D113EAEbe6BE61661F18) |
| Chronicle_MKR_USD_1 | [0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d](https://explorer.testnet.mantle.xyz/address/0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d) |
| Chronicle_OP_USD_1 | [0xfadF055f6333a4ab435D2D248aEe6617345A4782](https://explorer.testnet.mantle.xyz/address/0xfadF055f6333a4ab435D2D248aEe6617345A4782) |
| Chronicle_RETH_USD_1 | [0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263](https://explorer.testnet.mantle.xyz/address/0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263) |
| Chronicle_SDAI_DAI_1 | [0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491](https://explorer.testnet.mantle.xyz/address/0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491) |
| Chronicle_SDAI_ETH_1 | [0x05aB94eD168b5d18B667cFcbbA795789C750D893](https://explorer.testnet.mantle.xyz/address/0x05aB94eD168b5d18B667cFcbbA795789C750D893) |
| Chronicle_SDAI_MATIC_1 | [0x2f0e0dE1F8c11d2380dE093ED15cA6cE07653cbA](https://explorer.testnet.mantle.xyz/address/0x2f0e0dE1F8c11d2380dE093ED15cA6cE07653cbA) |
| Chronicle_SNX_USD_1 | [0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98](https://explorer.testnet.mantle.xyz/address/0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98) |
| Chronicle_SOL_USD_1 | [0x4D1e6f39bbfcce8b471171b8431609b83f3a096D](https://explorer.testnet.mantle.xyz/address/0x4D1e6f39bbfcce8b471171b8431609b83f3a096D) |
| Chronicle_UNI_USD_1 | [0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5](https://explorer.testnet.mantle.xyz/address/0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5) |
| Chronicle_USDC_USD_1 | [0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC](https://explorer.testnet.mantle.xyz/address/0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC) |
| Chronicle_USDT_USD_1 | [0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a](https://explorer.testnet.mantle.xyz/address/0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a) |
| Chronicle_WBTC_USD_1 | [0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584](https://explorer.testnet.mantle.xyz/address/0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584) |
| Chronicle_WSTETH_USD_1 | [0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab](https://explorer.testnet.mantle.xyz/address/0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab) |
| Chronicle_WUSDM_USDM_1 | [0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56](https://explorer.testnet.mantle.xyz/address/0xF719E362724Dda4Ad3B8D92D49E0c44E48Df4e56) |
| Chronicle_WUSDM_USD_1 | [0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b](https://explorer.testnet.mantle.xyz/address/0x6d10de3640ab2F11B1102Ae72C06BB497E5E859b) |
| Chronicle_YFI_USD_1 | [0x0893EcE705639112C1871DcE88D87D81540D0199](https://explorer.testnet.mantle.xyz/address/0x0893EcE705639112C1871DcE88D87D81540D0199) |
Smart Contract Addresses on Scroll Sepolia
| Contract Name | Contract Address on SCR Sepolia Mainnet |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.scrollscan.com/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d) |
| Chronicle_AAVE_USD_1 | [0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717](https://sepolia.scrollscan.com/address/0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717) |
| Chronicle_ARB_USD_1 | [0x579BfD0581beD0d18fBb0Ebab099328d451552DD](https://sepolia.scrollscan.com/address/0x579BfD0581beD0d18fBb0Ebab099328d451552DD) |
| Chronicle_AVAX_USD_1 | [0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688](https://sepolia.scrollscan.com/address/0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688) |
| Chronicle_BNB_USD_1 | [0x26EE3E8b618227C1B735D8D884d52A852410019f](https://sepolia.scrollscan.com/address/0x26EE3E8b618227C1B735D8D884d52A852410019f) |
| Chronicle_BTC_USD_1 | [0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c](https://sepolia.scrollscan.com/address/0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c) |
| Chronicle_CRV_USD_1 | [0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030](https://sepolia.scrollscan.com/address/0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030) |
| Chronicle_DAI_USD_1 | [0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4](https://sepolia.scrollscan.com/address/0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4) |
| Chronicle_ETH_BTC_1 | [0x1804969b296E89C1ddB1712fA99816446956637e](https://sepolia.scrollscan.com/address/0x1804969b296E89C1ddB1712fA99816446956637e) |
| Chronicle_ETH_USD_1 | [0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660](https://sepolia.scrollscan.com/address/0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660) |
| Chronicle_GNO_USD_1 | [0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8](https://sepolia.scrollscan.com/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8) |
| Chronicle_IBTA_USD_1 | [0x07487b0Bf28801ECD15BF09C13e32FBc87572e81](https://sepolia.scrollscan.com/address/0x07487b0Bf28801ECD15BF09C13e32FBc87572e81) |
| Chronicle_LDO_USD_1 | [0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E](https://sepolia.scrollscan.com/address/0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E) |
| Chronicle_LINK_USD_1 | [0xecB89B57A60ac44E06ab1B767947c19b236760c3](https://sepolia.scrollscan.com/address/0xecB89B57A60ac44E06ab1B767947c19b236760c3) |
| Chronicle_MATIC_USD_1 | [0xa48c56e48A71966676d0D113EAEbe6BE61661F18](https://sepolia.scrollscan.com/address/0xa48c56e48A71966676d0D113EAEbe6BE61661F18) |
| Chronicle_MKR_USD_1 | [0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d](https://sepolia.scrollscan.com/address/0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d) |
| Chronicle_OP_USD_1 | [0xfadF055f6333a4ab435D2D248aEe6617345A4782](https://sepolia.scrollscan.com/address/0xfadF055f6333a4ab435D2D248aEe6617345A4782) |
| Chronicle_RETH_USD_1 | [0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263](https://sepolia.scrollscan.com/address/0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263) |
| Chronicle_SDAI_DAI_1 | [0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491](https://sepolia.scrollscan.com/address/0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491) |
| Chronicle_SNX_USD_1 | [0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98](https://sepolia.scrollscan.com/address/0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98) |
| Chronicle_SOL_USD_1 | [0x4D1e6f39bbfcce8b471171b8431609b83f3a096D](https://sepolia.scrollscan.com/address/0x4D1e6f39bbfcce8b471171b8431609b83f3a096D) |
| Chronicle_UNI_USD_1 | [0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5](https://sepolia.scrollscan.com/address/0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5) |
| Chronicle_USDC_USD_1 | [0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC](https://sepolia.scrollscan.com/address/0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC) |
| Chronicle_USDT_USD_1 | [0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a](https://sepolia.scrollscan.com/address/0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a) |
| Chronicle_WBTC_USD_1 | [0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584](https://sepolia.scrollscan.com/address/0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584) |
| Chronicle_WSTETH_ETH_1 | [0x40BE3f9D43DbdadE162F04CC97A29603D88F50E4](https://sepolia.scrollscan.com/address/0x40BE3f9D43DbdadE162F04CC97A29603D88F50E4) |
| Chronicle_WSTETH_USD_1 | [0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab](https://sepolia.scrollscan.com/address/0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab) |
| Chronicle_YFI_USD_1 | [0x0893EcE705639112C1871DcE88D87D81540D0199](https://sepolia.scrollscan.com/address/0x0893EcE705639112C1871DcE88D87D81540D0199) |
Smart Contract Addresses on Zksync Sepolia
| Contract Name | Contract Address on Zksync Sepolia Mainnet |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| SelfKisser_1 | [0x25f594edde4f58A14970b2ef6616badBa4B1CdDD](https://sepolia.explorer.zksync.io/address/0x25f594edde4f58A14970b2ef6616badBa4B1CdDD) |
| Chronicle_AAVE_USD_1 | [0x6dc3D077E795d1faCEAEb94B2396471A91Be5498](https://sepolia.explorer.zksync.io/address/0x6dc3D077E795d1faCEAEb94B2396471A91Be5498) |
| Chronicle_ARB_USD_1 | [0x9635DE4989C0832Fc581cd1666cE3a7EdF973a29](https://sepolia.explorer.zksync.io/address/0x9635DE4989C0832Fc581cd1666cE3a7EdF973a29) |
| Chronicle_AVAX_USD_1 | [0x231E4fA18Cc387C83b3941224E7B4E3491e616e0](https://sepolia.explorer.zksync.io/address/0x231E4fA18Cc387C83b3941224E7B4E3491e616e0) |
| Chronicle_BNB_USD_1 | [0x41b6E1613fE235Ebc81829a5B02bC2f96212eb49](https://sepolia.explorer.zksync.io/address/0x41b6E1613fE235Ebc81829a5B02bC2f96212eb49) |
| Chronicle_BTC_USD_1 | [0x0C5b65706224cb8D7d41524DCdF414FeaD4a2C28](https://sepolia.explorer.zksync.io/address/0x0C5b65706224cb8D7d41524DCdF414FeaD4a2C28) |
| Chronicle_CRV_USD_1 | [0x5A91677DCd79d578E5963B64Ef3E963Beb626F14](https://sepolia.explorer.zksync.io/address/0x5A91677DCd79d578E5963B64Ef3E963Beb626F14) |
| Chronicle_DAI_USD_1 | [0x8dE859e3281CC34574161189CccBD953Dd67DE24](https://sepolia.explorer.zksync.io/address/0x8dE859e3281CC34574161189CccBD953Dd67DE24) |
| Chronicle_DSR_RATE_1 | [0x68C9aa7bA59811B2B995CDB1b73cAac84522fBC3](https://sepolia.explorer.zksync.io/address/0x68C9aa7bA59811B2B995CDB1b73cAac84522fBC3) |
| Chronicle_ETH_BTC_1 | [0x25ECc0dF13b33faF4813438BFB8DA3968bEb705A](https://sepolia.explorer.zksync.io/address/0x25ECc0dF13b33faF4813438BFB8DA3968bEb705A) |
| Chronicle_ETH_USD_1 | [0x46cf81028852a948D22Af41e264a5895F5115006](https://sepolia.explorer.zksync.io/address/0x46cf81028852a948D22Af41e264a5895F5115006) |
| Chronicle_GNO_USD_1 | [0x6C10082C014476F21344CCe0f6b5B7463fFbAC7A](https://sepolia.explorer.zksync.io/address/0x6C10082C014476F21344CCe0f6b5B7463fFbAC7A) |
| Chronicle_IBTA_USD_1 | [0x8120d0A79871eB4966fe5D7dF1608FF58229F6F3](https://sepolia.explorer.zksync.io/address/0x8120d0A79871eB4966fe5D7dF1608FF58229F6F3) |
| Chronicle_LDO_USD_1 | [0x3B05D11dEd3a3E585E1AA6d1ed87A0177D18894B](https://sepolia.explorer.zksync.io/address/0x3B05D11dEd3a3E585E1AA6d1ed87A0177D18894B) |
| Chronicle_LINK_USD_1 | [0x566c45c6f10D207Cc2F083a33D56B4ccDF23B7bc](https://sepolia.explorer.zksync.io/address/0x566c45c6f10D207Cc2F083a33D56B4ccDF23B7bc) |
| Chronicle_MATIC_USD_1 | [0xB146e962BDe5185c45ea6e320b14d67F3DFD2173](https://sepolia.explorer.zksync.io/address/0xB146e962BDe5185c45ea6e320b14d67F3DFD2173) |
| Chronicle_MKR_USD_1 | [0x68e4aC3eCDaa1a6072c7A5f38f2CCF8c6E0Cccb2](https://sepolia.explorer.zksync.io/address/0x68e4aC3eCDaa1a6072c7A5f38f2CCF8c6E0Cccb2) |
| Chronicle_OP_USD_1 | [0x47bAD642f631eB94894A58Af6bC7D4c9DbB6485c](https://sepolia.explorer.zksync.io/address/0x47bAD642f631eB94894A58Af6bC7D4c9DbB6485c) |
| Chronicle_RETH_USD_1 | [0x20374ea0Fb22A2CE2f84B4A628e4eEF01793cF6A](https://sepolia.explorer.zksync.io/address/0x20374ea0Fb22A2CE2f84B4A628e4eEF01793cF6A) |
| Chronicle_SDAI_DAI_1 | [0x7e7Df5117f5A6E8Cf82a0F80F06fE1119FC9b741](https://sepolia.explorer.zksync.io/address/0x7e7Df5117f5A6E8Cf82a0F80F06fE1119FC9b741) |
| Chronicle_SDAI_ETH_1 | [0x71a16AeAA5650e519b2a606BCB496cf1CAd75b94](https://sepolia.explorer.zksync.io/address/0x71a16AeAA5650e519b2a606BCB496cf1CAd75b94) |
| Chronicle_SDAI_MATIC_1 | [0x32952b3Ff76C658826e906C441B98C3609BD7981](https://sepolia.explorer.zksync.io/address/0x32952b3Ff76C658826e906C441B98C3609BD7981) |
| Chronicle_SNX_USD_1 | [0x5912D288bDB918f931516041Ecd8a72fD1563A39](https://sepolia.explorer.zksync.io/address/0x5912D288bDB918f931516041Ecd8a72fD1563A39) |
| Chronicle_SOL_USD_1 | [0x79a6Cb3D5cf55a5Ddc91d041B5F3D192AA1799F5](https://sepolia.explorer.zksync.io/address/0x79a6Cb3D5cf55a5Ddc91d041B5F3D192AA1799F5) |
| Chronicle_UNI_USD_1 | [0x52485646EF15dB99504965de37494440Be862685](https://sepolia.explorer.zksync.io/address/0x52485646EF15dB99504965de37494440Be862685) |
| Chronicle_USDC_USD_1 | [0xEf281522E64e91A7333335986DF7B47720934A95](https://sepolia.explorer.zksync.io/address/0xEf281522E64e91A7333335986DF7B47720934A95) |
| Chronicle_USDT_USD_1 | [0xAD86B6EcC316406b2688e483dbDceBc33ADD0c8E](https://sepolia.explorer.zksync.io/address/0xAD86B6EcC316406b2688e483dbDceBc33ADD0c8E) |
| Chronicle_WBTC_USD_1 | [0x793C59AF9d64fD94CE40B35b649E59c6AA13c5B0](https://sepolia.explorer.zksync.io/address/0x793C59AF9d64fD94CE40B35b649E59c6AA13c5B0) |
| Chronicle_WSTETH_USD_1 | [0x1A622e80A5a08e943f508940881d9cb92D8b4d31](https://sepolia.explorer.zksync.io/address/0x1A622e80A5a08e943f508940881d9cb92D8b4d31) |
| Chronicle_YFI_USD_1 | [0x25bb6AadC4276362F0Ca8Bb227D393d0aC54111e](https://sepolia.explorer.zksync.io/address/0x25bb6AadC4276362F0Ca8Bb227D393d0aC54111e) |
## General Setup Enquires
- Foundry Setup:
- [https://getfoundry.sh](https://getfoundry.sh/)
- List of Sepolia ETH Faucets:
- [https://www.infura.io/faucet/sepolia](https://www.infura.io/faucet/sepolia)
- [https://sepoliafaucet.com/](https://sepoliafaucet.com/)
- Chainlist RPCs:
- [Sepolia](https://chainlist.org/chain/11155111)
- [Gnosis Mainnet](https://chainlist.org/chain/100)
- [Mantle Testnet](https://chainlist.org/chain/5003)
- [Scroll-Sepolia](https://chainlist.org/chain/534351)
- [Polygon testnet-ZKEVM-mango](https://chainlist.org/chain/1442)
- Create a Test Wallet:
- `cast new wallet`
- RPC Providers:
- [drpc.org](https://drpc.org/)
- [nodies](https://www.nodies.app/)
- [grove](https://www.grove.city/)
- [blast api](https://blastapi.io/)
- [ankr](https://www.ankr.com/rpc/)
## More on Scribe
- [Eth Magician Post](https://ethereum-magicians.org/t/an-efficient-schnorr-multi-signature-implementation/15510)
- [Twitter Thread](https://twitter.com/merkleplant_eth/status/1693652385980379593)
- [Scribe's docs](https://github.com/chronicleprotocol/scribe/blob/main/docs/Scribe.md)
---
// File: hackathons/Previous/eth-global-istanbul-hackathon
# 🇹🇷 ETH Global Istanbul Guide
Welcome to the ETHGlobal Istanbul Hackathon! This document serves as a guide for integrating Chronicle Oracles into your hackathon projects. Our team is here to assist you.
:::info
For any inquiries, feel free to reach out at our booth, join our [Discord](https://discord.gg/CjgvJ9EspJ), or walk up to anyone wearing a Chronicle hoodie
:::
## Chronicle Bounties
### Bounty 1: Most Innovative Chronicle Oracle Integration
**Objective:** Rewarding the most creative integration of a Chronicle Oracle.
**Description:** The prize will go to the two teams with the most innovative integration of Scribe, Chronicle's new Optimistic Schnorr Oracle. Supported chains include: Ethereum Sepolia, Polygon zkEVM testnet, and Gnosis Chain Mainnet. Note that solutions must utilize at least one Oracle smart contract. The innovation should stem from the use case of the Oracle, i.e., the idea or utility of the project.
**Reward:**
- **1st Place**:
- **Reward**: $4500 DAI
- **2nd Place**:
- **Reward**: $2500 DAI
### Bounty 2: Integrate a Chronicle Oracle
**Objective:** Rewarding successful integrations of Chronicle's new Optimistic Schnorr Oracle.
**Description:** Each team that manages to successfully integrate a Chronicle Oracle on one of the supported chains, Sepolia (Ethereum), Polygon zkEVM (testnet), or Gnosis Chain (mainnet), will receive an equal share from the $3000 DAI reward pool. The integration must utilize at least one Oracle smart contract and should be crucial to the product or project's operation, serving a legitimate purpose.
**Reward:** $3000 DAI
**Type:** Pooled prize
## Chronicle Protocol Contracts
### Scribe
Scribe is an efficient Schnorr multi-signature-based Oracle with enhanced gas efficiency. Providing nearly constant gas costs on Layer 2s and on Layer 1s, Scribe boasts of fixed gas costs, leading to substantial savings—over 60% relative to competing Oracles and an impressive 80% compared to Chainlink. This approach to gas management significantly boosts the scalability of the Oracle.
The Chronicle Scribe Oracle interface is plug-and-play with Chainlink and Maker Oracles, providing a smooth transition for developers used to these platforms.
All data delivered by a Chronicle Oracle on mainnet is verifiable via The [Chronicle Dashboard](https://chroniclelabs.org/dashboard).
Scribe Public Repo: [https://github.com/chronicleprotocol/scribe](https://github.com/chronicleprotocol/scribe)
### CAST
Cast is a command-line interface (CLI) tool designed by the Foundry team to streamline your interaction with the Ethereum Virtual Machine (EVM). Whether you're making smart contract calls, sending transactions, or retrieving any chain data, cast can help with that. You can read more [here](https://book.getfoundry.sh/reference/cast/cast).
### Self-Kisser: Permissionless Whitelisting
Chronicle safeguards Oracle read functions with a whitelist, ensuring controlled access to critical data. However, the SelfKisser contract unfolds a possibility where you can whitelist yourself (or, as whimsically termed, "kiss") yourself :).
How do you kiss yourself, i.e., `msg.sender`?
Run the following command:
```bash
$ cast send 0x0dcc19657007713483a5ca76e6a7bbe5f56ea37d "selfKiss(address)()"
```
To verify your whitelisted status:
```bash
$ cast call "tolled(address)"
```
Response:
```bash
0x0000000000000000000000000000000000000000000000000000000000000001
```
A return value of `1 (true)` confirms your whitelisted status.
For more info, see the `SelfKisser` repo: [https://github.com/chronicleprotocol/self-kisser](https://github.com/chronicleprotocol/self-kisser/blob/main/docs/Management.md#management)
### Reading Chronicle Oracles through the `IChronicle` Interface
Interacting with the oracle is easy. The `read()` function lays it out plain and simple, returning a `uint` value representing the data you are trying to get:
```bash
$ cast call 0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660 "read()(uint)"
```
Response:
```bash
1656870000000000045440
```
:::info
For a detailed outline of the interface and additional functionalities, click [here](https://github.com/chronicleprotocol/chronicle-std/blob/main/src/IChronicle.sol)
:::
## Whitelisting your address via Etherscan
To whitelist your address or other addresses for a Chronicle Oracle on Etherscan, follow these steps:
1. Navigate to the Self-kisser contract on Etherscan using the contract address provided: [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code)
2. Click on the `Contract` tab and then on `Write Contract`.
3. You'll have to hit the `Connect to Web3` button to connect your wallet.
4. Scroll down to the `selfKiss` function and enter the Oracle address you wish to interact with in the `oracle (address)` field. Then, click Write.
That should send you a popup message on your wallet to sign. Once signed, it should take a few seconds for your address to be whitelisted.
### Reading from Smart Contracts
1. Go to the `Read Contract` tab and locate the `tolled` function.
2. Enter your wallet address in the `who (address)` field.
3. Hit `Query`. The data returned will be displayed below, which should look like this:
```solidity
[ tolled(address) method Response ]
bool : true
```
#### Additional Notes
- Ensure you have a sufficient amount of tokens in your wallet to cover gas fees for transactions.
- Ensure your wallet is connected to the correct network corresponding to the contract you are interacting with.
### Useful Links
- [Self-kisser Contract on Sepolia network](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code)
- [How To Use Read/Write Contract Features on Etherscan](https://info.etherscan.com/how-to-use-read-or-write-contract-features-on-etherscan/)
## Smart Contract Addresses on Sepolia network
| Contract Name | Contract Address on Sepolia network |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| Self-kisser | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| AAVE/USD | [0xED4C91FC28B48E2Cf98b59668408EAeE44665511](https://sepolia.etherscan.io/address/0xED4C91FC28B48E2Cf98b59668408EAeE44665511#code) |
| ARB/USD | [0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2](https://sepolia.etherscan.io/address/0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2#code) |
| AVAX/USD | [0xD419f76594d411BD94c71FB0a78c80f71A2290Ce](https://sepolia.etherscan.io/address/0xD419f76594d411BD94c71FB0a78c80f71A2290Ce#code) |
| BNB/USD | [0x6931FB9C54958f77873ceC4536EaC56F561d2dC4](https://sepolia.etherscan.io/address/0x6931FB9C54958f77873ceC4536EaC56F561d2dC4#code) |
| BTC/USD | [0xdD5232e76798BEACB69eC310d9b0864b56dD08dD](https://sepolia.etherscan.io/address/0xdD5232e76798BEACB69eC310d9b0864b56dD08dD#code) |
| CRV/USD | [0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32](https://sepolia.etherscan.io/address/0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32#code) |
| DAI/USD | [0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841](https://sepolia.etherscan.io/address/0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841#code) |
| ETH/BTC | [0x4E866Ac929374096Afc2715C4e9c40D581A4067e](https://sepolia.etherscan.io/address/0x4E866Ac929374096Afc2715C4e9c40D581A4067e#code) |
| ETH/USD | [0x90430C5b8045a1E2A0Fc4e959542a0c75b576439](https://sepolia.etherscan.io/address/0x90430C5b8045a1E2A0Fc4e959542a0c75b576439#code) |
| GNO/USD | [0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9](https://sepolia.etherscan.io/address/0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9#code) |
| IBTA/USD | [0xc52539EfbA58a521d69494D86fc47b9E71D32997](https://sepolia.etherscan.io/address/0xc52539EfbA58a521d69494D86fc47b9E71D32997#code) |
| LDO/USD | [0x3aeF92049C9401094A9f75259430F4771143F0C3](https://sepolia.etherscan.io/address/0x3aeF92049C9401094A9f75259430F4771143F0C3#code) |
| LINK/USD | [0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE](https://sepolia.etherscan.io/address/0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE#code) |
| MATIC/USD | [0x06997AadB30d51eAdBAA7836f7a0F177474fc235](https://sepolia.etherscan.io/address/0x06997AadB30d51eAdBAA7836f7a0F177474fc235#code) |
| MKR/USD | [0xE61A66f737c32d5Ac8cDea6982635B80447e9404](https://sepolia.etherscan.io/address/0xE61A66f737c32d5Ac8cDea6982635B80447e9404#code) |
| OP/USD | [0x1Ae491D618A667a44D48E0b0BE2Cc0cDBF269BC5](https://sepolia.etherscan.io/address/0x1Ae491D618A667a44D48E0b0BE2Cc0cDBF269BC5#code) |
| RETH/USD | [0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F](https://sepolia.etherscan.io/address/0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F#code) |
| SDAI/DAI | [0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D](https://sepolia.etherscan.io/address/0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D#code) |
| SNX/USD | [0x6Ab51f7E684923CE051e784D382A470b0fa834Be](https://sepolia.etherscan.io/address/0x6Ab51f7E684923CE051e784D382A470b0fa834Be#code) |
| SOL/USD | [0x11ceEcca4d49f596E0Df781Af237CDE741ad2106](https://sepolia.etherscan.io/address/0x11ceEcca4d49f596E0Df781Af237CDE741ad2106#code) |
| UNI/USD | [0xfE051Bc90D3a2a825fA5172181f9124f8541838c](https://sepolia.etherscan.io/address/0xfE051Bc90D3a2a825fA5172181f9124f8541838c#code) |
| USDC/USD | [0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C](https://sepolia.etherscan.io/address/0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C#code) |
| USDT/USD | [0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba](https://sepolia.etherscan.io/address/0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba#code) |
| WBTC/USD | [0x39C899178F4310705b12888886884b361CeF26C7](https://sepolia.etherscan.io/address/0x39C899178F4310705b12888886884b361CeF26C7#code) |
| WSTETH/ETH | [0x67E93d37B57747686F22f2F2f0a8aAd253199B38](https://sepolia.etherscan.io/address/0x67E93d37B57747686F22f2F2f0a8aAd253199B38#code) |
| WSTETH/USD | [0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34](https://sepolia.etherscan.io/address/0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34#code) |
| YFI/USD | [0x16978358A8D6C7C8cA758F433685A5E8D988dfD4](https://sepolia.etherscan.io/address/0x16978358A8D6C7C8cA758F433685A5E8D988dfD4#code) |
## Smart Contract Addresses on Polygon zkEVM Testnet
| Contract Name | Contract Address on zkEVM Testnet |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Self-kisser | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://testnet-zkevm.polygonscan.com/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| AAVE/USD | [0xED4C91FC28B48E2Cf98b59668408EAeE44665511](https://testnet-zkevm.polygonscan.com/address/0xED4C91FC28B48E2Cf98b59668408EAeE44665511#code) |
| ARB/USD | [0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2](https://testnet-zkevm.polygonscan.com/address/0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2#code) |
| AVAX/USD | [0xD419f76594d411BD94c71FB0a78c80f71A2290Ce](https://testnet-zkevm.polygonscan.com/address/0xD419f76594d411BD94c71FB0a78c80f71A2290Ce#code) |
| BNB/USD | [0x6931FB9C54958f77873ceC4536EaC56F561d2dC4](https://testnet-zkevm.polygonscan.com/address/0x6931FB9C54958f77873ceC4536EaC56F561d2dC4#code) |
| BTC/USD | [0xdD5232e76798BEACB69eC310d9b0864b56dD08dD](https://testnet-zkevm.polygonscan.com/address/0xdD5232e76798BEACB69eC310d9b0864b56dD08dD#code) |
| CRV/USD | [0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32](https://testnet-zkevm.polygonscan.com/address/0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32#code) |
| DAI/USD | [0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841](https://testnet-zkevm.polygonscan.com/address/0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841#code) |
| ETH/BTC | [0x4E866Ac929374096Afc2715C4e9c40D581A4067e](https://testnet-zkevm.polygonscan.com/address/0x4E866Ac929374096Afc2715C4e9c40D581A4067e#code) |
| ETH/USD | [0x90430C5b8045a1E2A0Fc4e959542a0c75b576439](https://testnet-zkevm.polygonscan.com/address/0x90430C5b8045a1E2A0Fc4e959542a0c75b576439#code) |
| GNO/USD | [0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9](https://testnet-zkevm.polygonscan.com/address/0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9#code) |
| IBTA/USD | [0xc52539EfbA58a521d69494D86fc47b9E71D32997](https://testnet-zkevm.polygonscan.com/address/0xc52539EfbA58a521d69494D86fc47b9E71D32997#code) |
| LDO/USD | [0x3aeF92049C9401094A9f75259430F4771143F0C3](https://testnet-zkevm.polygonscan.com/address/0x3aeF92049C9401094A9f75259430F4771143F0C3#code) |
| LINK/USD | [0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE](https://testnet-zkevm.polygonscan.com/address/0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE#code) |
| MATIC/USD | [0x06997AadB30d51eAdBAA7836f7a0F177474fc235](https://testnet-zkevm.polygonscan.com/address/0x06997AadB30d51eAdBAA7836f7a0F177474fc235#code) |
| MKR/USD | [0xE61A66f737c32d5Ac8cDea6982635B80447e9404](https://testnet-zkevm.polygonscan.com/address/0xE61A66f737c32d5Ac8cDea6982635B80447e9404#code) |
| OP/USD | [0x1ae491d618a667a44d48e0b0be2cc0cdbf269bc5](https://testnet-zkevm.polygonscan.com/address/0x1ae491d618a667a44d48e0b0be2cc0cdbf269bc5#code) |
| RETH/USD | [0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F](https://testnet-zkevm.polygonscan.com/address/0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F#code) |
| SDAI/DAI | [0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D](https://testnet-zkevm.polygonscan.com/address/0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D#code) |
| SNX/USD | [0x6Ab51f7E684923CE051e784D382A470b0fa834Be](https://testnet-zkevm.polygonscan.com/address/0x6Ab51f7E684923CE051e784D382A470b0fa834Be#code) |
| SOL/USD | [0x11ceEcca4d49f596E0Df781Af237CDE741ad2106](https://testnet-zkevm.polygonscan.com/address/0x11ceEcca4d49f596E0Df781Af237CDE741ad2106#code) |
| UNI/USD | [0xfE051Bc90D3a2a825fA5172181f9124f8541838c](https://testnet-zkevm.polygonscan.com/address/0xfE051Bc90D3a2a825fA5172181f9124f8541838c#code) |
| USDC/USD | [0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C](https://testnet-zkevm.polygonscan.com/address/0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C#code) |
| USDT/USD | [0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba](https://testnet-zkevm.polygonscan.com/address/0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba#code) |
| WBTC/USD | [0x39C899178F4310705b12888886884b361CeF26C7](https://testnet-zkevm.polygonscan.com/address/0x39C899178F4310705b12888886884b361CeF26C7#code) |
| WSTETH/ETH | [0x67E93d37B57747686F22f2F2f0a8aAd253199B38](https://testnet-zkevm.polygonscan.com/address/0x67E93d37B57747686F22f2F2f0a8aAd253199B38#code) |
| WSTETH/USD | [0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34](https://testnet-zkevm.polygonscan.com/address/0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34#code) |
| YFI/USD | [0x16978358A8D6C7C8cA758F433685A5E8D988dfD4](https://testnet-zkevm.polygonscan.com/address/0x16978358A8D6C7C8cA758F433685A5E8D988dfD4#code) |
## Smart Contract Addresses on Gnosis Mainnet
| Contract Name | Contract Address on Gnosis Mainnet |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| Self-kisser | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://gnosisscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| AAVE/USD | [0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717](https://gnosisscan.io/address/0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717#code) |
| ARB/USD | [0x579BfD0581beD0d18fBb0Ebab099328d451552DD](https://gnosisscan.io/address/0x579BfD0581beD0d18fBb0Ebab099328d451552DD#code) |
| AVAX/USD | [0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688](https://gnosisscan.io/address/0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688#code) |
| BNB/USD | [0x26EE3E8b618227C1B735D8D884d52A852410019f](https://gnosisscan.io/address/0x26EE3E8b618227C1B735D8D884d52A852410019f#code) |
| BTC/USD | [0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c](https://gnosisscan.io/address/0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c#code) |
| CRV/USD | [0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030](https://gnosisscan.io/address/0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030#code) |
| DAI/USD | [0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4](https://gnosisscan.io/address/0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4#code) |
| DSR/RATE | [0x729af3A41AE9E707e7AE421569C4b9c632B66a0c](https://gnosisscan.io/address/0x729af3A41AE9E707e7AE421569C4b9c632B66a0c#code) |
| ETH/BTC | [0x1804969b296E89C1ddB1712fA99816446956637e](https://gnosisscan.io/address/0x1804969b296E89C1ddB1712fA99816446956637e#code) |
| ETH/USD | [0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660](https://gnosisscan.io/address/0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660#code) |
| GNO/USD | [0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8](https://gnosisscan.io/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8#code) |
| IBTA/USD | [0x07487b0Bf28801ECD15BF09C13e32FBc87572e81](https://gnosisscan.io/address/0x07487b0Bf28801ECD15BF09C13e32FBc87572e81#code) |
| LDO/USD | [0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E](https://gnosisscan.io/address/0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E#code) |
| LINK/USD | [0xecB89B57A60ac44E06ab1B767947c19b236760c3](https://gnosisscan.io/address/0xecB89B57A60ac44E06ab1B767947c19b236760c3#code) |
| MATIC/USD | [0xa48c56e48A71966676d0D113EAEbe6BE61661F18](https://gnosisscan.io/address/0xa48c56e48A71966676d0D113EAEbe6BE61661F18#code) |
| MKR/USD | [0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d](https://gnosisscan.io/address/0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d#code) |
| OP/USD | [0xfadF055f6333a4ab435D2D248aEe6617345A4782](https://gnosisscan.io/address/0xfadF055f6333a4ab435D2D248aEe6617345A4782#code) |
| RETH/USD | [0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263](https://gnosisscan.io/address/0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263#code) |
| SDAI/DAI | [0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491](https://gnosisscan.io/address/0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491#code) |
| SDAI/ETH | [0x05aB94eD168b5d18B667cFcbbA795789C750D893](https://gnosisscan.io/address/0x05aB94eD168b5d18B667cFcbbA795789C750D893#code) |
| SDAI/MATIC | [0x2f0e0dE1F8c11d2380dE093ED15cA6cE07653cbA](https://gnosisscan.io/address/0x2f0e0dE1F8c11d2380dE093ED15cA6cE07653cbA#code) |
| SNX/USD | [0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98](https://gnosisscan.io/address/0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98#code) |
| SOL/USD | [0x4D1e6f39bbfcce8b471171b8431609b83f3a096D](https://gnosisscan.io/address/0x4D1e6f39bbfcce8b471171b8431609b83f3a096D#code) |
| UNI/USD | [0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5](https://gnosisscan.io/address/0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5#code) |
| USDC/USD | [0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC](https://gnosisscan.io/address/0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC#code) |
| USDT/USD | [0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a](https://gnosisscan.io/address/0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a#code) |
| WBTC/USD | [0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584](https://gnosisscan.io/address/0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584#code) |
| WSTETH/USD | [0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab](https://gnosisscan.io/address/0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab#code) |
| YFI/USD | [0x0893EcE705639112C1871DcE88D87D81540D0199](https://gnosisscan.io/address/0x0893EcE705639112C1871DcE88D87D81540D0199#code) |
## General Setup Enquires
- Foundry Setup:
- [https://getfoundry.sh](https://getfoundry.sh/)
- List of Sepolia ETH Faucets:
- [https://www.infura.io/faucet/sepolia](https://www.infura.io/faucet/sepolia)
- [https://sepoliafaucet.com/](https://sepoliafaucet.com/)
- List of Sepolia RPCs:
- [chainlist.org](https://chainlist.org/chain/11155111)
- Create a Test Wallet:
- `cast new wallet`
## More on Scribe
- [Eth Magician Post](https://ethereum-magicians.org/t/an-efficient-schnorr-multi-signature-implementation/15510)
- [Twitter Thread](https://twitter.com/merkleplant_eth/status/1693652385980379593)
- [Scribe's docs](https://github.com/chronicleprotocol/scribe/blob/main/docs/Scribe.md)
---
// File: hackathons/Previous/eth-lisbon-hackathon
# 🇵🇹 ETH Lisbon Hackathon Guide

Welcome to the ETH Lisbon Hackathon! This document serves as a guide for integrating Chronicle Oracles into your hackathon projects. Our team is here to assist you.
:::info
For any inquiries, feel free to reach out at our booth, join our [Discord](https://discord.gg/CjgvJ9EspJ), or walk up to anyone wearing a Chronicle hoodie
:::
## Chronicle Oracle Integration Bounties
### Bounty 1: Most Innovative Chronicle Oracle Integration
**Objective:** Rewarding the most creative integration of a Chronicle Oracle.
**Description:** The prize will go to the team with the most innovative integration of a Chronicle Oracle on one of the supported chains (Sepolia (Ethereum), Polygon zkEVM (testnet), Gnosis Chain (mainnet)). The innovation should stem from the use case of the Oracle, i.e., The idea or utility of the project.
**Reward:** $2000 DAI
**Type:** Winner takes all
### Bounty 2: Integrate a Chronicle Oracle
**Objective:** Rewarding successful integrations of a Chronicle Oracle.
**Description:** Each team that manages to successfully integrate a Chronicle Oracle on one of the supported chains, Sepolia (Ethereum), Polygon zkEVM (testnet), or Gnosis Chain (mainnet), will receive an equal share from the $2500 DAI reward pool. The integration should be crucial to the product or project's operation, serving a legitimate purpose.
**Reward:** $2500 DAI
**Type:** Pooled prize
### Bounty 3: Build with a Chronicle Oracle on The Polygon zkEVM
**Objective:** Rewarding the most innovative Integration of a Chronicle Oracle on The Polygon zkEVM.
**Description:** Two teams will be awarded for integrating one or more Chronicle Oracles in a project built on Polygon zkEVM testnet. 'DeFi' and 'Public Good' projects are preferred. The Oracle integration must be integral to the operation of the build to be considered. Please see the Chronicle ETH Lisbon Hackathon Docs for a complete list of available Oracles.
**Reward:** $1000 ($500 from Chronicle/$500 from Polygon).
- 1st Prize: $600
- 2nd Prize: $400
**Type:** First and Second Prize
## Chronicle Protocol Contracts
### Scribe
Scribe is an efficient Schnorr multi-signature-based Oracle with enhanced gas efficiency. Providing nearly constant gas costs on Layer 2s, On Layer 1s, Scribe boasts of a fixed gas costs, leading to substantial savings—over 60% relative to competing Oracles and an impressive 80% compared to Chainlink. This approach to gas management significantly boosts the scalability of Oracle services.
Also, the seamless integration of Chronicle Oracle with Chainlink and Maker interfaces is a plug-and-play affair, a smooth transition for developers used to these platforms.
Although not relevant to the hackathon, it's worth mentioning that all data delivered by a Chronicle Oracle on the mainnet is verifiable via The [Chronicle Dashboard](https://chroniclelabs.org/dashboard).
Scribe Public Repo: [https://github.com/chronicleprotocol/scribe](https://github.com/chronicleprotocol/scribe)
### CAST
Cast is a command-line interface (CLI) tool designed by the Foundry team to streamline your interaction with the Ethereum Virtual Machine (EVM). Whether you're making smart contract calls, sending transactions, or retrieving any chain data, cast can help with that. You can read more [Here](https://book.getfoundry.sh/reference/cast/cast).
### Self-Kisser: Permissionless Whitelisting
Chronicle safeguards Oracle read functions with a whitelist, ensuring controlled access to critical data. However, the SelfKisser contract unfolds a possibility where you can whitelist yourself (or, as whimsically termed, "kiss") yourself :).
How do you kiss yourself, i.e., `msg.sender`?
Run the following command:
```bash
$ cast send 0x0dcc19657007713483a5ca76e6a7bbe5f56ea37d "selfKiss(address)()"
```
To verify your whitelisted status:
```bash
$ cast call "tolled(address)"
```
Response:
```bash
0x0000000000000000000000000000000000000000000000000000000000000001
```
A return value of `1 (true)` confirms your whitelisted status.
For more info, see the `SelfKisser` repo: [https://github.com/chronicleprotocol/self-kisser](https://github.com/chronicleprotocol/self-kisser/blob/main/docs/Management.md#management)
### Reading Chronicle Oracles through the `IChronicle` Interface
Interacting with the oracle is easy. The `read()` function lays it out plain and simple, returning a `uint` value representing the data you are trying to get:
```bash
$ cast call 0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660 "read()(uint)"
```
Response:
```bash
1656870000000000045440
```
:::info
For a detailed outline of the interface and additional functionalities, click [here](https://github.com/chronicleprotocol/chronicle-std/blob/main/src/IChronicle.sol)
:::
## Whitelisting your address via Etherscan
To whitelist your address or other addresses for a Chronicle Oracle on Etherscan, follow these steps:
1. Navigate to the Self-kisser contract on Etherscan using the contract address provided: [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code)
2. Click on the `Contract` tab and then on `Write Contract`.
3. You'll have to hit the `Connect to Web3` button to connect your wallet.
4. Scroll down to the `selfKiss` function and enter the Oracle address you wish to interact with in the `oracle (address)` field. Then, click Write.
That should send you a popup message on your wallet to sign. Once signed, it should take a few seconds for your address to be whitelisted.
### Reading from Smart Contracts
1. Go to the `Read Contract` tab and locate the `tolled` function.
2. Enter your wallet address in the `who (address)` field.
3. Hit `Query`. The data returned will be displayed below, which should look like this:
```solidity
[ tolled(address) method Response ]
bool : true
```
#### Additional Notes
- Ensure you have a sufficient amount of tokens in your wallet to cover gas fees for transactions.
- Ensure your wallet is connected to the correct network corresponding to the contract you are interacting with.
### Useful Links
- [Self-kisser Contract on Sepolia network](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code)
- [How To Use Read/Write Contract Features on Etherscan](https://info.etherscan.com/how-to-use-read-or-write-contract-features-on-etherscan/)
## Smart Contract Addresses on Sepolia network
| Contract Name | Contract Address on Sepolia network |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| Self-kisser | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| AAVE/USD | [0xED4C91FC28B48E2Cf98b59668408EAeE44665511](https://sepolia.etherscan.io/address/0xED4C91FC28B48E2Cf98b59668408EAeE44665511#code) |
| ARB/USD | [0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2](https://sepolia.etherscan.io/address/0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2#code) |
| AVAX/USD | [0xD419f76594d411BD94c71FB0a78c80f71A2290Ce](https://sepolia.etherscan.io/address/0xD419f76594d411BD94c71FB0a78c80f71A2290Ce#code) |
| BNB/USD | [0x6931FB9C54958f77873ceC4536EaC56F561d2dC4](https://sepolia.etherscan.io/address/0x6931FB9C54958f77873ceC4536EaC56F561d2dC4#code) |
| BTC/USD | [0xdD5232e76798BEACB69eC310d9b0864b56dD08dD](https://sepolia.etherscan.io/address/0xdD5232e76798BEACB69eC310d9b0864b56dD08dD#code) |
| CRV/USD | [0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32](https://sepolia.etherscan.io/address/0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32#code) |
| DAI/USD | [0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841](https://sepolia.etherscan.io/address/0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841#code) |
| ETH/BTC | [0x4E866Ac929374096Afc2715C4e9c40D581A4067e](https://sepolia.etherscan.io/address/0x4E866Ac929374096Afc2715C4e9c40D581A4067e#code) |
| ETH/USD | [0x90430C5b8045a1E2A0Fc4e959542a0c75b576439](https://sepolia.etherscan.io/address/0x90430C5b8045a1E2A0Fc4e959542a0c75b576439#code) |
| GNO/USD | [0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9](https://sepolia.etherscan.io/address/0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9#code) |
| IBTA/USD | [0xc52539EfbA58a521d69494D86fc47b9E71D32997](https://sepolia.etherscan.io/address/0xc52539EfbA58a521d69494D86fc47b9E71D32997#code) |
| LDO/USD | [0x3aeF92049C9401094A9f75259430F4771143F0C3](https://sepolia.etherscan.io/address/0x3aeF92049C9401094A9f75259430F4771143F0C3#code) |
| LINK/USD | [0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE](https://sepolia.etherscan.io/address/0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE#code) |
| MATIC/USD | [0x06997AadB30d51eAdBAA7836f7a0F177474fc235](https://sepolia.etherscan.io/address/0x06997AadB30d51eAdBAA7836f7a0F177474fc235#code) |
| MKR/USD | [0xE61A66f737c32d5Ac8cDea6982635B80447e9404](https://sepolia.etherscan.io/address/0xE61A66f737c32d5Ac8cDea6982635B80447e9404#code) |
| OP/USD | [0x1Ae491D618A667a44D48E0b0BE2Cc0cDBF269BC5](https://sepolia.etherscan.io/address/0x1Ae491D618A667a44D48E0b0BE2Cc0cDBF269BC5#code) |
| RETH/USD | [0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F](https://sepolia.etherscan.io/address/0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F#code) |
| SDAI/DAI | [0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D](https://sepolia.etherscan.io/address/0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D#code) |
| SNX/USD | [0x6Ab51f7E684923CE051e784D382A470b0fa834Be](https://sepolia.etherscan.io/address/0x6Ab51f7E684923CE051e784D382A470b0fa834Be#code) |
| SOL/USD | [0x11ceEcca4d49f596E0Df781Af237CDE741ad2106](https://sepolia.etherscan.io/address/0x11ceEcca4d49f596E0Df781Af237CDE741ad2106#code) |
| UNI/USD | [0xfE051Bc90D3a2a825fA5172181f9124f8541838c](https://sepolia.etherscan.io/address/0xfE051Bc90D3a2a825fA5172181f9124f8541838c#code) |
| USDC/USD | [0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C](https://sepolia.etherscan.io/address/0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C#code) |
| USDT/USD | [0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba](https://sepolia.etherscan.io/address/0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba#code) |
| WBTC/USD | [0x39C899178F4310705b12888886884b361CeF26C7](https://sepolia.etherscan.io/address/0x39C899178F4310705b12888886884b361CeF26C7#code) |
| WSTETH/ETH | [0x67E93d37B57747686F22f2F2f0a8aAd253199B38](https://sepolia.etherscan.io/address/0x67E93d37B57747686F22f2F2f0a8aAd253199B38#code) |
| WSTETH/USD | [0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34](https://sepolia.etherscan.io/address/0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34#code) |
| YFI/USD | [0x16978358A8D6C7C8cA758F433685A5E8D988dfD4](https://sepolia.etherscan.io/address/0x16978358A8D6C7C8cA758F433685A5E8D988dfD4#code) |
## Smart Contract Addresses on Polygon zkEVM Testnet
| Contract Name | Contract Address on zkEVM Testnet |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Self-kisser | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://testnet-zkevm.polygonscan.com/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| AAVE/USD | [0xED4C91FC28B48E2Cf98b59668408EAeE44665511](https://testnet-zkevm.polygonscan.com/address/0xED4C91FC28B48E2Cf98b59668408EAeE44665511#code) |
| ARB/USD | [0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2](https://testnet-zkevm.polygonscan.com/address/0x7dE6Df8E4c057eD9baE215F347A0339D603B09B2#code) |
| AVAX/USD | [0xD419f76594d411BD94c71FB0a78c80f71A2290Ce](https://testnet-zkevm.polygonscan.com/address/0xD419f76594d411BD94c71FB0a78c80f71A2290Ce#code) |
| BNB/USD | [0x6931FB9C54958f77873ceC4536EaC56F561d2dC4](https://testnet-zkevm.polygonscan.com/address/0x6931FB9C54958f77873ceC4536EaC56F561d2dC4#code) |
| BTC/USD | [0xdD5232e76798BEACB69eC310d9b0864b56dD08dD](https://testnet-zkevm.polygonscan.com/address/0xdD5232e76798BEACB69eC310d9b0864b56dD08dD#code) |
| CRV/USD | [0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32](https://testnet-zkevm.polygonscan.com/address/0x7B6E473f1CeB8b7100C9F7d58879e7211Bc48f32#code) |
| DAI/USD | [0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841](https://testnet-zkevm.polygonscan.com/address/0x16984396EE0903782Ba8e6ebfA7DD356B0cA3841#code) |
| ETH/BTC | [0x4E866Ac929374096Afc2715C4e9c40D581A4067e](https://testnet-zkevm.polygonscan.com/address/0x4E866Ac929374096Afc2715C4e9c40D581A4067e#code) |
| ETH/USD | [0x90430C5b8045a1E2A0Fc4e959542a0c75b576439](https://testnet-zkevm.polygonscan.com/address/0x90430C5b8045a1E2A0Fc4e959542a0c75b576439#code) |
| GNO/USD | [0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9](https://testnet-zkevm.polygonscan.com/address/0xBcC6BFFde7888A3008f17c88D5a5e5F0D7462cf9#code) |
| IBTA/USD | [0xc52539EfbA58a521d69494D86fc47b9E71D32997](https://testnet-zkevm.polygonscan.com/address/0xc52539EfbA58a521d69494D86fc47b9E71D32997#code) |
| LDO/USD | [0x3aeF92049C9401094A9f75259430F4771143F0C3](https://testnet-zkevm.polygonscan.com/address/0x3aeF92049C9401094A9f75259430F4771143F0C3#code) |
| LINK/USD | [0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE](https://testnet-zkevm.polygonscan.com/address/0x4EDdF05CfAd20f1E39ed4CB067bdfa831dAeA9fE#code) |
| MATIC/USD | [0x06997AadB30d51eAdBAA7836f7a0F177474fc235](https://testnet-zkevm.polygonscan.com/address/0x06997AadB30d51eAdBAA7836f7a0F177474fc235#code) |
| MKR/USD | [0xE61A66f737c32d5Ac8cDea6982635B80447e9404](https://testnet-zkevm.polygonscan.com/address/0xE61A66f737c32d5Ac8cDea6982635B80447e9404#code) |
| OP/USD | [0x1ae491d618a667a44d48e0b0be2cc0cdbf269bc5](https://testnet-zkevm.polygonscan.com/address/0x1ae491d618a667a44d48e0b0be2cc0cdbf269bc5#code) |
| RETH/USD | [0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F](https://testnet-zkevm.polygonscan.com/address/0xEff79d34f24Bb36eD8FB6c4CbaD5De293fdCf66F#code) |
| SDAI/DAI | [0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D](https://testnet-zkevm.polygonscan.com/address/0xB6EE756124e88e12585981DdDa9E6E3bf3C4487D#code) |
| SNX/USD | [0x6Ab51f7E684923CE051e784D382A470b0fa834Be](https://testnet-zkevm.polygonscan.com/address/0x6Ab51f7E684923CE051e784D382A470b0fa834Be#code) |
| SOL/USD | [0x11ceEcca4d49f596E0Df781Af237CDE741ad2106](https://testnet-zkevm.polygonscan.com/address/0x11ceEcca4d49f596E0Df781Af237CDE741ad2106#code) |
| UNI/USD | [0xfE051Bc90D3a2a825fA5172181f9124f8541838c](https://testnet-zkevm.polygonscan.com/address/0xfE051Bc90D3a2a825fA5172181f9124f8541838c#code) |
| USDC/USD | [0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C](https://testnet-zkevm.polygonscan.com/address/0xfef7a1Eb17A095E1bd7723cBB1092caba34f9b1C#code) |
| USDT/USD | [0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba](https://testnet-zkevm.polygonscan.com/address/0xF78A4e093Cd2D9F57Bb363Cc4edEBcf9bF3325ba#code) |
| WBTC/USD | [0x39C899178F4310705b12888886884b361CeF26C7](https://testnet-zkevm.polygonscan.com/address/0x39C899178F4310705b12888886884b361CeF26C7#code) |
| WSTETH/ETH | [0x67E93d37B57747686F22f2F2f0a8aAd253199B38](https://testnet-zkevm.polygonscan.com/address/0x67E93d37B57747686F22f2F2f0a8aAd253199B38#code) |
| WSTETH/USD | [0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34](https://testnet-zkevm.polygonscan.com/address/0x8Ba43F8Fa2fC13D7EEDCeb9414CDbB6643483C34#code) |
| YFI/USD | [0x16978358A8D6C7C8cA758F433685A5E8D988dfD4](https://testnet-zkevm.polygonscan.com/address/0x16978358A8D6C7C8cA758F433685A5E8D988dfD4#code) |
## Smart Contract Addresses on Gnosis Network
| Contract Name | Contract Address on Gnosis Network |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| Self-kisser | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://gnosisscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| AAVE/USD | [0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717](https://gnosisscan.io/address/0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717#code) |
| ARB/USD | [0x579BfD0581beD0d18fBb0Ebab099328d451552DD](https://gnosisscan.io/address/0x579BfD0581beD0d18fBb0Ebab099328d451552DD#code) |
| AVAX/USD | [0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688](https://gnosisscan.io/address/0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688#code) |
| BNB/USD | [0x26EE3E8b618227C1B735D8D884d52A852410019f](https://gnosisscan.io/address/0x26EE3E8b618227C1B735D8D884d52A852410019f#code) |
| BTC/USD | [0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c](https://gnosisscan.io/address/0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c#code) |
| CRV/USD | [0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030](https://gnosisscan.io/address/0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030#code) |
| DAI/USD | [0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4](https://gnosisscan.io/address/0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4#code) |
| DSR/RATE | [0x729af3A41AE9E707e7AE421569C4b9c632B66a0c](https://gnosisscan.io/address/0x729af3A41AE9E707e7AE421569C4b9c632B66a0c#code) |
| ETH/BTC | [0x1804969b296E89C1ddB1712fA99816446956637e](https://gnosisscan.io/address/0x1804969b296E89C1ddB1712fA99816446956637e#code) |
| ETH/USD | [0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660](https://gnosisscan.io/address/0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660#code) |
| GNO/USD | [0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8](https://gnosisscan.io/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8#code) |
| IBTA/USD | [0x07487b0Bf28801ECD15BF09C13e32FBc87572e81](https://gnosisscan.io/address/0x07487b0Bf28801ECD15BF09C13e32FBc87572e81#code) |
| LDO/USD | [0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E](https://gnosisscan.io/address/0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E#code) |
| LINK/USD | [0xecB89B57A60ac44E06ab1B767947c19b236760c3](https://gnosisscan.io/address/0xecB89B57A60ac44E06ab1B767947c19b236760c3#code) |
| MATIC/USD | [0xa48c56e48A71966676d0D113EAEbe6BE61661F18](https://gnosisscan.io/address/0xa48c56e48A71966676d0D113EAEbe6BE61661F18#code) |
| MKR/USD | [0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d](https://gnosisscan.io/address/0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d#code) |
| OP/USD | [0xfadF055f6333a4ab435D2D248aEe6617345A4782](https://gnosisscan.io/address/0xfadF055f6333a4ab435D2D248aEe6617345A4782#code) |
| RETH/USD | [0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263](https://gnosisscan.io/address/0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263#code) |
| SDAI/DAI | [0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491](https://gnosisscan.io/address/0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491#code) |
| SDAI/ETH | [0x05aB94eD168b5d18B667cFcbbA795789C750D893](https://gnosisscan.io/address/0x05aB94eD168b5d18B667cFcbbA795789C750D893#code) |
| SDAI/MATIC | [0x2f0e0dE1F8c11d2380dE093ED15cA6cE07653cbA](https://gnosisscan.io/address/0x2f0e0dE1F8c11d2380dE093ED15cA6cE07653cbA#code) |
| SNX/USD | [0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98](https://gnosisscan.io/address/0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98#code) |
| SOL/USD | [0x4D1e6f39bbfcce8b471171b8431609b83f3a096D](https://gnosisscan.io/address/0x4D1e6f39bbfcce8b471171b8431609b83f3a096D#code) |
| UNI/USD | [0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5](https://gnosisscan.io/address/0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5#code) |
| USDC/USD | [0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC](https://gnosisscan.io/address/0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC#code) |
| USDT/USD | [0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a](https://gnosisscan.io/address/0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a#code) |
| WBTC/USD | [0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584](https://gnosisscan.io/address/0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584#code) |
| WSTETH/USD | [0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab](https://gnosisscan.io/address/0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab#code) |
| YFI/USD | [0x0893EcE705639112C1871DcE88D87D81540D0199](https://gnosisscan.io/address/0x0893EcE705639112C1871DcE88D87D81540D0199#code) |
## General Setup Enquires
- Foundry Setup:
- [https://getfoundry.sh](https://getfoundry.sh/)
- Sepolia ETH:
- [https://www.infura.io/faucet/sepolia](https://www.infura.io/faucet/sepolia)
- [https://sepoliafaucet.com/](https://sepoliafaucet.com/)
- Sepolia RPC:
- [chainlist.org](https://chainlist.org/chain/11155111)
- Create A Test Wallet:
- `cast new wallet`
## More on Scribe
- [Eth Magician Post](https://ethereum-magicians.org/t/an-efficient-schnorr-multi-signature-implementation/15510)
- [Twitter Thread](https://twitter.com/merkleplant_eth/status/1693652385980379593)
- [Scribe's docs](https://github.com/chronicleprotocol/scribe/blob/main/docs/Scribe.md)
---
// File: hackathons/Previous/eth-warsaw-hackathon
# 🇵🇱 ETH Warsaw Hackathon
This document provides documentation for integrating Chronicle Oracles into their ETH Warsaw Hackathon projects.
:::caution
If you have any questions, don’t hesitate to reach out to our booth, or anyone wearing Chronicle hoodies
:::
## Chronicle Protocol Contracts
### Scribe
Scribe is an efficient Schnorr multi-signature based Oracle. Its Chronicle’s new Oracle version enabling more than 60% gas savings.
[https://github.com/chronicleprotocol/scribe](https://github.com/chronicleprotocol/scribe)
### Self-Kisser
Chronicle oracle’s read functions are protected by a whitelist.
However, via the `SelfKisser` contract you can whitelist (we call it `kiss`) yourself permissionless.
How to kiss yourself (ie `msg.sender`)?
```bash
$ cast send 0x0dcc19657007713483a5ca76e6a7bbe5f56ea37d "selfKiss(address)()"
```
Verify you are whitelisted (returns `1` ie `true` if whitelisted) :
```bash
$ cast call "tolled(address)"
0x0000000000000000000000000000000000000000000000000000000000000001
```
For more info, see the `SelfKisser` repo:
[https://github.com/chronicleprotocol/self-kisser](https://github.com/chronicleprotocol/self-kisser/blob/main/docs/Management.md#management)
### The IChronicle Interface - or how to read Chronicle Oracles?
The easiest way to read the oracle is…. `read() returns (uint)`.
```bash
$ cast call 0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660 "read()(uint)"
1656870000000000045440
```
:::info
You can find the whole interface definition [here](https://github.com/chronicleprotocol/chronicle-std/blob/main/src/IChronicle.sol)
:::
## Smart Contract Addresses on Sepolia network
| Contract Name | Contract Address on Sepolia network |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| Self-kisser | [0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d](https://sepolia.etherscan.io/address/0x0Dcc19657007713483A5cA76e6A7bbe5f56EA37d#code) |
| ETH/USD | [0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660](https://sepolia.etherscan.io/address/0xc8A1F9461115EF3C1E84Da6515A88Ea49CA97660#code) |
| AAVE/USD | [0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717](https://sepolia.etherscan.io/address/0xa38C2B5408Eb1DCeeDBEC5d61BeD580589C6e717#code) |
| ARB/USD | [0x579BfD0581beD0d18fBb0Ebab099328d451552DD](https://sepolia.etherscan.io/address/0x579BfD0581beD0d18fBb0Ebab099328d451552DD#code) |
| AVAX/USD | [0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688](https://sepolia.etherscan.io/address/0x78C8260AF7C8D0d17Cf3BA91F251E9375A389688#code) |
| BNB/USD | [0x26EE3E8b618227C1B735D8D884d52A852410019f](https://sepolia.etherscan.io/address/0x26EE3E8b618227C1B735D8D884d52A852410019f#code) |
| BTC/USD | [0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c](https://sepolia.etherscan.io/address/0x4B5aBFC0Fe78233b97C80b8410681765ED9fC29c#code) |
| CRV/USD | [0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030](https://sepolia.etherscan.io/address/0xf29a932ae56bB96CcACF8d1f2Da9028B01c8F030#code) |
| DAI/USD | [0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4](https://sepolia.etherscan.io/address/0xa7aA6a860D17A89810dE6e6278c58EB21Fa00fc4#code) |
| ETH/BTC | [0x1804969b296E89C1ddB1712fA99816446956637e](https://sepolia.etherscan.io/address/0x1804969b296E89C1ddB1712fA99816446956637e#code) |
| GNO/USD | [0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8](https://sepolia.etherscan.io/address/0xA28dCaB66FD25c668aCC7f232aa71DA1943E04b8#code) |
| IBTA/USD | [0x07487b0Bf28801ECD15BF09C13e32FBc87572e81](https://sepolia.etherscan.io/address/0x07487b0Bf28801ECD15BF09C13e32FBc87572e81#code) |
| LDO/USD | [0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E](https://sepolia.etherscan.io/address/0xa53dc5B100f0e4aB593f2D8EcD3c5932EE38215E#code) |
| LINK/USD | [0xecB89B57A60ac44E06ab1B767947c19b236760c3](https://sepolia.etherscan.io/address/0xecB89B57A60ac44E06ab1B767947c19b236760c3#code) |
| MATIC/USD | [0xa48c56e48A71966676d0D113EAEbe6BE61661F18](https://sepolia.etherscan.io/address/0xa48c56e48A71966676d0D113EAEbe6BE61661F18#code) |
| MKR/USD | [0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d](https://sepolia.etherscan.io/address/0x67ffF0C6abD2a36272870B1E8FE42CC8E8D5ec4d#code) |
| OP/USD | [0xfadF055f6333a4ab435D2D248aEe6617345A4782](https://sepolia.etherscan.io/address/0xfadF055f6333a4ab435D2D248aEe6617345A4782#code) |
| RETH/USD | [0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263](https://sepolia.etherscan.io/address/0xEE02370baC10b3AC3f2e9eebBf8f3feA1228D263#code) |
| SDAI/DAI | [0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491](https://sepolia.etherscan.io/address/0xD93c56Aa71923228cDbE2be3bf5a83bF25B0C491#code) |
| SNX/USD | [0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98](https://sepolia.etherscan.io/address/0xD20f1eC72bA46b6126F96c5a91b6D3372242cE98#code) |
| SOL/USD | [0x4D1e6f39bbfcce8b471171b8431609b83f3a096D](https://sepolia.etherscan.io/address/0x4D1e6f39bbfcce8b471171b8431609b83f3a096D#code) |
| UNI/USD | [0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5](https://sepolia.etherscan.io/address/0x2aFF768F5d6FC63fA456B062e02f2049712a1ED5#code) |
| USDC/USD | [0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC](https://sepolia.etherscan.io/address/0x1173da1811a311234e7Ab0A33B4B7B646Ff42aEC#code) |
| USDT/USD | [0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a](https://sepolia.etherscan.io/address/0x0bd446021Ab95a2ABd638813f9bDE4fED3a5779a#code) |
| WBTC/USD | [0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584](https://sepolia.etherscan.io/address/0xA7226d85CE5F0DE97DCcBDBfD38634D6391d0584#code) |
| WSTETH/USD | [0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab](https://sepolia.etherscan.io/address/0xc9Bb81d3668f03ec9109bBca77d32423DeccF9Ab#code) |
| YFI/USD | [0x0893EcE705639112C1871DcE88D87D81540D0199](https://sepolia.etherscan.io/address/0x0893EcE705639112C1871DcE88D87D81540D0199#code) |
## Some General Stuff
* How to install foundry?
* [https://getfoundry.sh](https://getfoundry.sh/)
* How to get Sepolia ETH?
* [https://www.infura.io/faucet/sepolia](https://www.infura.io/faucet/sepolia)
* [https://sepoliafaucet.com/](https://sepoliafaucet.com/)
* Got a Sepolia RPC handy?
* [chainlist.org](https://chainlist.org/chain/11155111)
* How to create a test wallet?
* `cast new wallet`
## Some more Scribe Background Info
* [Eth Magician Post](https://ethereum-magicians.org/t/an-efficient-schnorr-multi-signature-implementation/15510)
* [Twitter Thread](https://twitter.com/merkleplant\_eth/status/1693652385980379593)
* [Scribe's docs](https://github.com/chronicleprotocol/scribe/blob/main/docs/Scribe.md)
---
// File: validators/quickstart
# Quickstart
:::info
Chronicle operates a distributed network of validators run by reputable projects in the space, including MakerDAO/Sky, Etherscan, Gnosis, Bitcoin Suisse, and others. This structure reinforces both security and decentralization, setting Chronicle apart from other oracle solutions.
**Note: Running a validator is a permissioned process.** This documentation is intended for projects that have already been approved to run a validator.
:::
A single script installation from baremetal to running validator, using k3s.
### Helm Chart details:

validator: A Helm chart for deploying Chronicle Validator on Kubernetes
This documentation covers how to run a validator as part of the Chronicle Protocol oracle network. Running a validator is a great way to contribute to the network.
Oracles are used to bring real-world data to smart contracts. By running a validator, you are helping to make smart contracts more powerful and versatile.
This will run a complete end-to-end installation required for running a Chronicle Validator.
It will attempt to install:
* [k3s](https://docs.k3s.io/installation)
* [Helm v3](https://helm.sh/docs/intro/install/)
* Generate `generated-values.yaml` needed to install the [`chronicle/validator`](https://github.com/chronicleprotocol/charts/tree/main/charts/validator) helm chart
* A tor daemon will be deployed using a [tor-controller](https://github.com/chronicleprotocol/charts/blob/main/charts/validator/crds/tor-controller.yaml), which install some custom resource definitions. This is a requirement for the `WEB_API` transport layer which sends validator messages over tor networks.
## Requirements:
* Ubuntu 22.04 / Ubuntu 23.04 / Ubuntu 24.04
* 2Gb RAM
* 20Gb storage
* Server needs to be deployed into a public subnet (ie have a public IP)
* [](https://docs.k3s.io/installation/requirements#inbound-rules-for-k3s-server-nodes)At **LEAST** ports the following ports must be accessible from the internet:
| Protocol | Port | Description |
|----------|------|----------------|
| TCP | 6443 | K3s supervisor and Kubernetes API Server |
| TCP | 8000 | chronicle/ghost |
| TCP | 8001 | chronicle/ghost-vao |
| UDP | 8472 | Required for Flannel VXLAN |
* Optional ports that need to be open:
| Protocol | Port | Description |
|----------|------|----------------|
| TCP | 10250 | Kubelet metrics |
| SSH | 22 | SSH access to the host |
:::caution
This installation process assumes you have a fresh bare-bones ubuntu instance/VPS. If you need simple VPS hosting, we suggest using a provider like [Digital Ocean](https://digitalocean.com/), and spinning up a droplet, or [AWS EC2](https://aws.amazon.com/pm/ec2/) instance provided its in a public subnet. [Linode](https://www.vultr.com/), [Vultr](https://www.vultr.com/), [OVH](https://www.ovhcloud.com/en/) etc are also great providers.
:::
***
## Deploy using `install.sh`
The script is interactive and will prompt you for some required information
### Before you start:
You will need to provide the following:
* a feed name (eg `my-feed`)
* the path to your ETH `keystore` file (eg `/path/to/keys/keystore.json` needs to exist on the server)
* the path to your keystore password file (eg `/path/to/password.txt` needs to exist on the server. An empty password file is still needed if wallet is not encrypted. eg `touch password.txt`)
* the corresponding ETH from address (eg `0x123....`)
* An Ethereum Mainnet RPC endpoint (including protocol, eg https://my-eth-rpc.domain.com
:::tip
Managed RPC providers can become costly if they are heavily utilized. We recommend that you use spin up your own dedicated ETH node for cost management.
:::
There are alternative RPC providers that you can use as well which aim to be as decentralized as possible:
- [https://drpc.org](https://drpc.org/)
- [https://www.nodies.app](https://www.nodies.app)
- [https://www.grove.city](https://www.grove.city)
- [https://blastapi.io](https://blastapi.io)
- [https://ankr.com](https://ankr.com)
- [https://www.dwellir.com/](https://www.dwellir.com/)
#### Some DIY approaches:
- [https://dappnode.com/](https://dappnode.com/)
- [ethpandaops/ethereum](https://github.com/ethpandaops/ethereum-helm-charts/tree/master/charts/ethereum-node) (helm chart, requires beacon)
- [chronicle/ethereum](https://github.com/chronicleprotocol/charts/tree/main/charts/ethereum) (helm chart, requires [beacon](https://github.com/chronicleprotocol/charts/tree/main/charts/beacons))
* this list is not exhaustive, and Chronicle is in no way affiliated with any managed providers, these are just suggestions.
You can provide these variables with `.env` as well Take a look at the `.env` section. The installer will create kubernetes secrets that are used in the helm release and feed services.
### Retrieve the installation script and make it executable
First, ssh to the server:
```ssh
user@
```
Download the install bash script:
```bash
cd /tmp
wget -N https://raw.githubusercontent.com/chronicleprotocol/scripts/main/feeds/k3s-install/install.sh
chmod a+x install.sh
```
This script **must not** be run as root. A user with `sudo` permissions is required. If you execute the script as `root` , you will be prompted if the script should attempt to create a user for you. Follow the prompts if you require a new user.
```bash
root@local:/tmp# ./install.sh
[INFO]:..........running preflight checks.........
[ERROR]: This script should not be run as root!
Would you like to create a new user to run this script? (y/n)
```
When a user is added to the `sudo` group, it usually needs to log out and log back in for the group changes to take effect.
To resolve this, you can either:
1. Log out and log back in with the new user and then run the script again.
2. Or, you can switch to the new user using `su - ` after creating the user, which simulates a login and should recognize the new group assignment.
However, if you are already doing this and still facing the issue, it might be due to the `sudo` command requiring a password and there is no password set for the new user.
### Execute the script
```bash
su -
ubuntu@local:/tmp$ ./install.sh
```
Complete output from the installer should look something like below (some bloat has been omitted for brevity/legibility):
```bash
ubuntu@local:/tmp$ ./install.sh
[INFO]:..........running preflight checks.........
[INFO]:..........gather input variables.........
>> Enter feed name (eg: chronicle-feed):
demo
>> Enter your ETH Address (eg: 0x3a...):
0x0000000111112222233333444444555556666677
>> Enter the path to your ETH keystore (eg: /path/to/keystore.json):
/tmp/keystore.json
>> Enter the path to your ETH password file (eg: /path/to/password.txt):
/tmp/password.txt
>> Obtaining the Node External IP...
>> Node External IP is 64.46.13.31
>> Enter your ETH rpc endpoint (eg: https://eth.llamarpc.com):
https://eth.llamarpc.com
[INFO]:..........installing dependencies.........
[INFO]:..........Updating package lists for upgrades and new package installations.........
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
.
.
.
Reading package lists... Done
[INFO]:..........Installing jq.........
Reading package lists... Done
.
.
.
[SUCCESS]: jq is now installed !!!
[INFO]:..........Installing helm.........
Downloading https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
.
.
.
[SUCCESS]: helm is now installed !!!
[INFO]:..........Installing k3s.........
[INFO] Finding release for channel stable
[INFO] Using v1.27.6+k3s1 as release
.
.
.
[INFO] systemd: Starting k3s
[SUCCESS]: k3s is now installed !!!
.
.
[INFO]:..........gather input variables.........
[INFO]:..........installing k8s chronicle stack..........
[INFO]:..........create namespace demo..........
namespace/demo created
[INFO]:..........create secret with ETH keys..........
secret/demo-eth-keys created
-----------------------------------------------------------------------------------------------------
This is your Feed address:
0x0000000111112222233333444444555556666677
-----------------------------------------------------------------------------------------------------
[INFO]:..........generate helm values file..........
You need to install the helm chart with the following command:
-------------------------------------------------------------------------------------------------------------------------------
| helm install "demo" -f "/home/ubuntu/demo/generated-values.yaml" chronicle/validator --namespace "demo" |
-------------------------------------------------------------------------------------------------------------------------------
[INFO]:..........create helm release..........
"chronicle" has been added to your repositories
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "chronicle" chart repository
Update Complete. ⎈Happy Helming!⎈
[INFO]: First attempt at installing feed: demo in namespace: demo.
NAME: demo
LAST DEPLOYED: Wed Sep 27 12:07:29 2023
NAMESPACE: demo
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
kubectl get pods -n demo
[SUCCESS]: setup complete!
```
Once the installation is completed, you can retrieve your tor onion address using this command:
```bash
kubectl get onion -n $NAME_SPACE
```
where `$NAME_SPACE` is the namespace where you deployed your validator in.
> Please provide the `ETH_FROM` and `TOR onion` address to the Chronicle team so it can be whitelisted to receive `WEB_API` traffic.
:::tip
The install script can be run multiple times with the same values. It will attempt to run `helm upgrade -n chronicle/validator` on your feed release, with any updated input variables. **Note**: it will delete secrets in an existing namespace, and recreate them as, secrets are generally immutable
:::
### Verify that the helm release has been successful:
#### View all resources created in the namespace
```bash
kubectl get pods,deployment,service,secrets,onion -n demo
NAME READY STATUS RESTARTS AGE
pod/ghost-688b6864b5-w92sd 1/1 Running 0 2m
pod/ghost-socks-tor-daemon-549c447f9c-75c26 1/1 Running 0 2m
pod/ghost-tor-daemon-c648899bb-67rnd 1/1 Running 0 2m
pod/ghost-vao-f568684d9-74nb5 1/1 Running 0 2m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ghost 1/1 1 1 2m
deployment.apps/ghost-socks-tor-daemon 1/1 1 1 2m
deployment.apps/ghost-tor-daemon 1/1 1 1 2m
deployment.apps/ghost-vao 1/1 1 1 2m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ghost LoadBalancer 10.43.181.34 64.46.13.31 8000:31501/TCP,8080:30746/TCP 2m
service/ghost-metrics ClusterIP 10.43.21.230 9090/TCP 2m
service/ghost-metrics-vao ClusterIP 10.43.23.37 9090/TCP 2m
service/ghost-socks-tor-svc ClusterIP 10.43.87.120 9050/TCP 2m
service/ghost-tor-metrics-svc ClusterIP 10.43.142.233 9035/TCP 2m
service/ghost-tor-svc ClusterIP 10.43.194.155 8888/TCP 2m
service/ghost-vao LoadBalancer 10.43.1.126 64.46.13.31 8001:31468/TCP 2m
NAME TYPE DATA AGE
secret/ghost-eth-keys Opaque 3 2m
secret/ghost-socks-tor-secret tor.k8s.torproject.org/control-password 1 2m
secret/ghost-tor-auth tor.k8s.torproject.org/authorized-clients-v3 0 2m
secret/ghost-tor-secret tor.k8s.torproject.org/onion-v3 5 2m
secret/sh.helm.release.v1.ghost.v1 helm.sh/release.v1 1 2m
NAME HOSTNAME AGE
onionservice.tor.k8s.torproject.org/ghost mylongtoronionaddress.onion 28m
```
#### View pod logs:
```bash
kubectl logs -n demo deployment/ghost
kubectl logs -n demo deployment/ghost-vao
```
Make sure that the `EXTERNAL-IP` shown for the `ghost` service, matches your server's IP address.
### Install with \`.env\`
The script will look for a `.env` file in the same directory level as `install.sh`. This file can be used to populate the required input values:
```bash
cat .env
# -- Name of the feed (will create a director and helm release based off this name)
# -- NB: this name must be unique across all feeds, and name must be lowercase.
FEED_NAME=myfeedname
# -- ETH address related to ETHPASS and ETH_KEYSTORE
ETH_FROM=0x1234567890123456789012345678901234567890
ETH_PASSWORD=/root/password.txt
ETH_KEYSTORE=/root/keystore.json
# -- HTTP rpc endpoint for ETH mainnet - NB include the protocol (http/https)
ETH_RPC_URL='https://my-eth-rpc.com'
# -- Public IP address of the server (needed for lib2p networking)
# the installer script will attempt to resolve this for you, if you have issues, try setting it manually below to an IP address that will resolve to your server
# NODE_EXT_IP='127.0.0.1'
# -- override the default (warning) logLevel by setting this to one of `debug, info, warning, error`
#LOG_LEVEL=debug
```
If the script fails to find any of these values, it will prompt you for them when running the script.
***
## Installing via helm (manually)
Make sure the `chronicle` helm repository has been added:
```bash
helm repo add chronicle https://chronicleprotocol.github.io/charts/
helm repo update
```
```bash
export $VALIDATOR_NAME
ubuntu@local:/tmp$ helm repo list
NAME URL
chronicle https://chronicleprotocol.github.io/charts/
helm install $VALIDATOR_NAME -f /home/chronicle/$VALIDATOR_NAME/generated-values.yaml -n $VALIDATOR_NAME chronicle/validator --version 0.4.4
```
the installer will create `generated-values.yaml` which contains the configuration needed to deploy the helm feed. you can inspect the file, located in the `$HOME/$VALIDATOR_NAME`directory. Or you can create your own `values.yaml` file populated with config as show below:
```bash
global:
logLevel: "debug"
ghost:
ethConfig:
ethFrom:
existingSecret: 'demo-eth-keys'
key: "ethFrom"
ethKeys:
existingSecret: 'demo-eth-keys'
key: "ethKeyStore"
ethPass:
existingSecret: 'demo-eth-keys'
key: "ethPass"
env:
normal:
CFG_LIBP2P_EXTERNAL_ADDR: '/ip4/64.46.13.31'
ethRpcUrl: "https://eth.llamarpc.com"
rpcUrl: "https://eth.llamarpc.com"
vao:
env:
normal:
CFG_LIBP2P_EXTERNAL_ADDR: '/ip4/64.46.13.31'
```
You can view all values available for the [validator chart](https://github.com/chronicleprotocol/charts/blob/main/charts/validator/README.md#values), however the values provided with the installer are enough to get you going.
A useful value to add is `.Values.global.logLevel`as show above. setting `logLevel: debug`will provide more verbose logging and can help you identify issues with the services. Its advised to run the default values (`warning`) once you have your feed stable. Acceptable values are `debug, info, warning, error`
With a valid `values.yaml` file created, you should be able to install a feed:
```bash
helm install $VALIDATOR_NAME \
--namespace $VALIDATOR_NAME \
--create-namespace \
-f path/to/values.yaml \
chronicle/validator \
--version 0.4.4
```
or to upgrade an existing helm release:
```bash
helm upgrade $VALIDATOR_NAME \
--namespace $VALIDATOR_NAME \
-f path/to/values.yaml \
chronicle/validator \
--version 0.4.4
```
:::tip
you can perform a `dry-run` by passing `--debug --dry-run` to the `helm install`` `` ``/ ``helm upgrade`command. This will show you all resources that will be created or modified, and can be useful for catching issues before deploying.
:::
:::warning
If you encounter any issues please refer to the [Trouble Shooting](troubleshooting) docs
:::
---
// File: validators/existing-k8s
# Existing K8s
:::info
Chronicle operates a distributed network of validators run by reputable projects in the space, including MakerDAO/Sky, Etherscan, Gnosis, Bitcoin Suisse, and others. This structure reinforces both security and decentralization, setting Chronicle apart from other oracle solutions.
**Note: Running a validator is a permissioned process.** This documentation is intended for projects that have already been approved to run a validator.
:::
Deploying the validator into an existing kubernetes cluster.
### Helm Chart details:

validator: A Helm chart for deploying Chronicle Validator on Kubernetes
## Notable changes include:
- Starting from Chart Version 0.3.6, tor is deployed using the `tor-controller` operator, which installs some [custom resource definitions](https://github.com/chronicleprotocol/charts/blob/main/charts/validator/crds/tor-controller.yaml). The controller will create a new onion key, which will be persisted as a secret. Please delete your previous secrets containing the tor keys, as they won't be needed. Retrieve the Ghost onion address using `kubectl get onion -n ` and notify the Chronicle team of your ETH address and the new Ghost onion address.
:::warning
The validator `ChartVersion: 0.4.4` introduces a new pod and service, named `vao`. This Service will expose its service via `LoadBalancer` on port __8001__. Please make sure this port is open!
Please make sure you update your `values.yaml` or `generated_values.yaml` to include `.Values.vao`.
Sample config:
```yaml
global:
logLevel: "warn"
ghost:
ethConfig:
ethFrom:
existingSecret: ''
key: "ethFrom"
ethKeys:
existingSecret: ''
key: "ethKeyStore"
ethPass:
existingSecret: ''
key: "ethPass"
ethRpcUrl: "https://MY_L1_RPC_URL"
rpcUrl: "https://MY_L1_RPC_URL"
env:
normal:
CFG_LIBP2P_EXTERNAL_ADDR: '/ip4/1.2.3.4' # public/reachable ip address of node. If DNS hostname set to `/dns/my.validator.com`
vao:
env:
normal:
CFG_LIBP2P_EXTERNAL_ADDR: '/ip4/1.2.3.4' # public/reachable ip address of node. If DNS hostname set to `/dns/my.validator.com`
```
:::
### Requirements
* Kubernetes Cluster +v1.24
* Validated on the following flavors:
* [k3s](https://docs.k3s.io/installation)
* [AWS EKS](https://aws.amazon.com/eks/)
* Other stable versions of kubernetes should work
* Whitelisted Feed address
* [Helm v3](https://helm.sh/docs/intro/install/)
* [Kubectl](https://kubernetes.io/docs/tasks/tools/)
#### EOA Keys
You will need to generate a new encrypted keystore with Ethereum address matching a specific first byte identifier.
Please look at the script [here](https://github.com/chronicleprotocol/scripts/blob/main/feeds/keystore-generator.sh), which will help you do this
#### Create Namespace
We advise running a feed in its own dedicated namespace:
```bash
kubectl create ns my-feed-namespace
```
#### Prep Secrets
We can create secrets that will be used by the validator pod in the feed as below:
```bash
kubectl create secret generic somesecretname-eth-keys \
--from-file=ethKeyStore=ethkeystore.json \
--from-literal=ethFrom=${ETH_FROM_ADDRESS} \
--from-literal=ethPass="" \
--namespace my-feed-namespace
```
### Installation
Add Chronicle helm chart repository:
```bash
helm repo add chronicle https://chronicleprotocol.github.io/charts/
```
Update your helm repository:
```bash
helm repo update chronicle
```
Create a values.yaml file as shown below, with the reference to the secrets created in the previous steps:
```bash
global:
logLevel: info
ghost:
ethConfig:
ethFrom:
existingSecret: 'somesecretname-eth-keys'
key: "ethFrom"
ethKeys:
existingSecret: 'somesecretname-eth-keys'
key: "ethKeyStore"
ethPass:
existingSecret: 'somesecretname-eth-keys'
key: "ethPass"
# ethereum RPC client (should always be ETH mainnet)
ethRpcUrl: "https://my.eth.rpc"
# default RPC client (target chain, eth mainnet or sepolia eg)
rpcUrl: "https://my.eth.rpc"
env:
normal:
# please place your nodes actual public ip address here
CFG_LIBP2P_EXTERNAL_ADDR: '/ip4/1.2.3.4'
# if using a LoadBalancer that has DNS:
# CFG_LIBP2P_EXTERNL_ADDR" '/dns/my.hostname.xyz`
vao:
env:
normal:
# please place your nodes actual public ip address here
CFG_LIBP2P_EXTERNAL_ADDR: '/ip4/1.2.3.4'
# if using a LoadBalancer that has DNS:
# CFG_LIBP2P_EXTERNL_ADDR" '/dns/my.hostname.xyz`
```
Then install the helm release using this values file:
```bash
helm install my-feed-name -f path/to/values.yaml chronicle/validator --namespace my-feed-namespace --version 0.4.4
```
You can do a [dry-run](https://helm.sh/docs/chart\_template\_guide/debugging/) by passing `--debug` and `--dry-run` to the helm command. This is useful if you want to inspect the resources before deploying them to the cluster
#### View all resources created in the namespace
```bash
kubectl get pods,deployment,service,secrets,onion -n demo
NAME READY STATUS RESTARTS AGE
pod/ghost-688b6864b5-w92sd 1/1 Running 0 2m
pod/ghost-socks-tor-daemon-549c447f9c-75c26 1/1 Running 0 2m
pod/ghost-tor-daemon-c648899bb-67rnd 1/1 Running 0 2m
pod/ghost-vao-f568684d9-74nb5 1/1 Running 0 2m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ghost 1/1 1 1 2m
deployment.apps/ghost-socks-tor-daemon 1/1 1 1 2m
deployment.apps/ghost-tor-daemon 1/1 1 1 2m
deployment.apps/ghost-vao 1/1 1 1 2m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ghost LoadBalancer 10.43.181.34 192.168.10.27 8000:31501/TCP,8080:30746/TCP 2m
service/ghost-metrics ClusterIP 10.43.21.230 9090/TCP 2m
service/ghost-metrics-vao ClusterIP 10.43.23.37 9090/TCP 2m
service/ghost-socks-tor-svc ClusterIP 10.43.87.120 9050/TCP 2m
service/ghost-tor-metrics-svc ClusterIP 10.43.142.233 9035/TCP 2m
service/ghost-tor-svc ClusterIP 10.43.194.155 8888/TCP 2m
service/ghost-vao LoadBalancer 10.43.1.126 192.168.10.27 8001:31468/TCP 2m
NAME TYPE DATA AGE
secret/ghost-eth-keys Opaque 3 2m
secret/ghost-socks-tor-secret tor.k8s.torproject.org/control-password 1 2m
secret/ghost-tor-auth tor.k8s.torproject.org/authorized-clients-v3 0 2m
secret/ghost-tor-secret tor.k8s.torproject.org/onion-v3 5 2m
secret/sh.helm.release.v1.ghost.v1 helm.sh/release.v1 1 2m
NAME HOSTNAME AGE
onionservice.tor.k8s.torproject.org/ghost mylongtoronionaddress.onion 28m
```
#### View pod logs:
```bash
kubectl logs -n demo deployment/ghost
kubectl logs -n demo deployment/ghost-vao
```
You can view the logs the pods to verify no errors:
```bash
kubectl logs deployments/ghost --namespace my-feed-namespace
time="2023-08-30T13:47:15Z" level=info msg="Ethereum Key" address=0x3fe0e49b5daa14f4ddc60e296270cedd702ce76c name=default tag=CONFIG_ETHEREUM
time="2023-08-30T13:47:15Z" level=info msg="Ethereum Client" name=default tag=CONFIG_ETHEREUM url="https://eth.public-rpc.com"
time="2023-08-30T13:47:15Z" level=info msg="Ethereum Client" name=ethereum tag=CONFIG_ETHEREUM url="https://eth.public-rpc.com"
time="2023-08-30T13:47:15Z" level=info msg=Feed address=0x0....................................... tag=LIBP2P
time="2023-08-30T13:47:15Z" level=info msg=Feed address=0x5....................................... tag=LIBP2P
time="2023-08-30T13:47:15Z" level=info msg=Feed address=0x7....................................... tag=LIBP2P
time="2023-08-30T13:47:15Z" level=info msg=Feed address=0xc....................................... tag=LIBP2P
time="2023-08-30T13:47:15Z" level=info msg=Feed address=0x....................................... tag=LIBP2P
time="2023-08-30T13:47:15Z" level=info msg=Bootstrap address=/dns/spire-bootstrap1.domain.com/tcp/8000/p2p/12D111222333aaaaabbbbbccccdddddeee tag=LIBP2P
time="2023-08-30T13:47:15Z" level=info msg="SOCKS5 proxy" address="tor-proxy:9050" tag=CONFIG_WEB_API
time="2023-08-30T13:47:16Z" level=debug msg=Call duration=861.851113ms method=eth_call name="https://eth.public-rpc.com" tag=RPCSPLITTER
time="2023-08-30T13:47:16Z" level=info msg=Consumer address="[scubbed].onion:8888" tag=CONFIG_WEB_API
time="2023-08-30T13:47:16Z" level=info msg=Consumer address="[scrubbed].onion:8888" tag=CONFIG_WEB_API
```
:::warning
If you encounter any issues please refer to the [Trouble Shooting](troubleshooting) docs
:::
---
// File: validators/upgrading
# Upgrading a Validator
How to perform an upgrade on a validator
Helm Chart details:

validator: A Helm chart for deploying Chronicle Validator on Kubernetes
:::warning
The validator `ChartVersion: 0.4.4` introduces a new pod and service, named `vao`. This Service will expose its service via `LoadBalancer` on port __8001__. Please make sure this port is open!
Please make sure you update your `values.yaml` or `generated_values.yaml` to include `.Values.vao`.
Sample config:
```yaml
global:
logLevel: "warn"
ghost:
ethConfig:
ethFrom:
existingSecret: ''
key: "ethFrom"
ethKeys:
existingSecret: ''
key: "ethKeyStore"
ethPass:
existingSecret: ''
key: "ethPass"
ethRpcUrl: "https://MY_L1_RPC_URL"
rpcUrl: "https://MY_L1_RPC_URL"
env:
normal:
CFG_LIBP2P_EXTERNAL_ADDR: '/ip4/1.2.3.4' # public/reachable ip address of node. If DNS hostname set to `/dns/my.validator.com`
vao:
env:
normal:
CFG_LIBP2P_EXTERNAL_ADDR: '/ip4/1.2.3.4' # public/reachable ip address of node. If DNS hostname set to `/dns/my.validator.com`
```
:::
### Install CRD's
Starting from Chart Version `0.3.4`, tor is deployed using the `tor-controller` operator, which installs some [custom resource definitions](https://raw.githubusercontent.com/chronicleprotocol/charts/refs/heads/main/charts/validator/crds/tor-controller.yaml). The controller will create a new onion key, which will be persisted as a secret. Please delete your previous secrets containing the tor keys, as they won't be needed. Retrieve the Ghost onion address using `kubectl get onion -n ` and notify the Chronicle team of your ETH address and the new Ghost onion address.
If you are running an upgrade from a prior release (`< 0.3.4`), chances are that Tor Custom Resource Definitions haven't been installed. Helm does not like installing CRD's during a helm upgrade, so we need to manually apply the CRD's like this:
```
kubectl apply -f https://raw.githubusercontent.com/chronicleprotocol/charts/validator-0.3.24/charts/validator/crds/tor-controller.yaml
```
It can take a few moments for the tor-controller to be in a ready state, but please make sure its running before upgrading your validator:
```
kubectl get pods -n tor-controller-system
```
You should see something like this:
```
NAME READY STATUS RESTARTS AGE
tor-controller-controller-manager-6648f44cc8-g6c68 2/2 Running 0 16m
```
We now have the CRD's deployed (ie `kubectl get crds` will show the tor custom resource definitions), and our values.yaml updated, we can perform the upgrade:
Upgrading manually (`helm upgrade`)
## Upgrading manually (`helm upgrade`)
If you are upgrading from 0.3.x to 0.3.y, simply updating the chart version will suffice:
```
ssh
su -
export FEED_NAME=my-feed
```
### Prepare values
The values.yaml file is used to configure the validator. The file is generated by the install script, and should be updated to reflect the latest version of the feed chart.
With the latest version of the chart, there are a few changes that need to be made to the `values.yaml` / `generated-values.yaml` file:
Please structure your helm values like this:
```yaml
global:
logLevel: "warn"
ghost:
ethConfig:
ethFrom:
existingSecret: ''
key: "ethFrom"
ethKeys:
existingSecret: ''
key: "ethKeyStore"
ethPass:
existingSecret: ''
key: "ethPass"
ethRpcUrl: "https://MY_L1_RPC_URL"
rpcUrl: "https://MY_L1_RPC_URL"
env:
normal:
CFG_LIBP2P_EXTERNAL_ADDR: '/ip4/1.2.3.4' # public/reachable ip address of node
vao:
env:
normal:
CFG_LIBP2P_EXTERNAL_ADDR: '/ip4/1.2.3.4' # public/reachable ip address of node
```
:::danger
Please ensure your values yaml file is updated to reflect the latest requirements for the validator chart, with the correct values for `ethConfig`, `ethRpcUrl` and `rpcUrl`.
:::
:::danger
Make sure the [TOR crds](#install-crds) are installed.
:::
```
helm repo update
helm upgrade $FEED_NAME -n $FEED_NAME -f $HOME/$FEED_NAME/generated-values.yaml chronicle/validator --version 0.4.4
```
:::danger
If upgrading from 0.2.x to 0.3.x, please use the helper script, or manually update your `generated-values.yaml` as per the steps above
:::
Upgrading using the helper script (`upgrade.sh`)
## Upgrading using `upgrade.sh`
:::warning
Please be aware that the latest helm chart has been renamed from `feed` to `validator`. Please use the `upgrade.sh` script to upgrade your validator to the latest version. This version embeds `musig` into the `ghost` pod. The upgrader script will clean up the generated `values.yaml` file and remove the unecessary musig values.
:::
To simplify the upgrade process, we have created a helper script that will upgrade your validator to the latest version.
This script will attempt to run `helm upgrade -n chronicle/validator` on your feed release, with any updated input variables.
:::caution
Please use the correct `FEED_NAME`, which should be the same as your helm release name, if deployed using the `install.sh` script previously
:::
```
ssh
su -
export FEED_NAME=my-feed
```
:::danger
Make sure the [TOR crds](#install-crds) are installed.
:::
### Download the latest `upgrade.sh`
Get the latest upgrade.sh script:
```
wget -N https://raw.githubusercontent.com/chronicleprotocol/scripts/main/feeds/k3s-install/upgrade.sh
chmod a+x upgrade.sh
./upgrade.sh
```
:::tip You can set the expected variables in the `.env` file, or export them as environment variables. If the script fails to find any of these values, it will prompt you for them when running the script.
:::
---
:::tip
If `kubectl/helm` commands fail, please ensure you have `$KUBECONFIG` set correctly. Take a look [here](quickstart#kubectl--helm-commands-fail) for more detail
:::
## Verify the helm release and version
Verify the chart version has changed and matches what the latest feed version:
```
helm list -n $FEED_NAME
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
validator demo 1 2025-07-01 11:52:17.003793982 -0300 -03 deployed validator-0.4.4 0.60
```
#### View all resources created in the namespace
```bash
kubectl get pods,deployment,service,secrets,onion -n demo
NAME READY STATUS RESTARTS AGE
pod/ghost-688b6864b5-w92sd 1/1 Running 0 2m
pod/ghost-socks-tor-daemon-549c447f9c-75c26 1/1 Running 0 2m
pod/ghost-tor-daemon-c648899bb-67rnd 1/1 Running 0 2m
pod/ghost-vao-f568684d9-74nb5 1/1 Running 0 2m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ghost 1/1 1 1 2m
deployment.apps/ghost-socks-tor-daemon 1/1 1 1 2m
deployment.apps/ghost-tor-daemon 1/1 1 1 2m
deployment.apps/ghost-vao 1/1 1 1 2m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ghost LoadBalancer 10.43.181.34 192.168.10.27 8000:31501/TCP,8080:30746/TCP 2m
service/ghost-metrics ClusterIP 10.43.21.230 9090/TCP 2m
service/ghost-metrics-vao ClusterIP 10.43.23.37 9090/TCP 2m
service/ghost-socks-tor-svc ClusterIP 10.43.87.120 9050/TCP 2m
service/ghost-tor-metrics-svc ClusterIP 10.43.142.233 9035/TCP 2m
service/ghost-tor-svc ClusterIP 10.43.194.155 8888/TCP 2m
service/ghost-vao LoadBalancer 10.43.1.126 192.168.10.27 8001:31468/TCP 2m
NAME TYPE DATA AGE
secret/ghost-eth-keys Opaque 3 2m
secret/ghost-socks-tor-secret tor.k8s.torproject.org/control-password 1 2m
secret/ghost-tor-auth tor.k8s.torproject.org/authorized-clients-v3 0 2m
secret/ghost-tor-secret tor.k8s.torproject.org/onion-v3 5 2m
secret/sh.helm.release.v1.ghost.v1 helm.sh/release.v1 1 2m
NAME HOSTNAME AGE
onionservice.tor.k8s.torproject.org/ghost mylongtoronionaddress.onion 28m
```
#### View pod logs:
```bash
kubectl logs -n demo deployment/ghost
kubectl logs -n demo deployment/ghost-vao
```
and you're done!
:::warning
If you encounter any issues please refer to the [Trouble Shooting](troubleshooting) docs
:::
---
// File: validators/troubleshooting
# Troubleshooting
General Troubleshooting guide
### Kubectl / helm commands fail
If you receive an error as shown below when trying to invoke `kubectl` or `helm` commands, it is most likely caused by the `KUBECONFIG` variable not being set.
```bash
WARN[0000] Unable to read /etc/rancher/k3s/k3s.yaml, please start server with --write-kubeconfig-mode to modify kube config permissions
error: error loading config file "/etc/rancher/k3s/k3s.yaml": open /etc/rancher/k3s/k3s.yaml: permission denied
```
The installation script attempts to create `$HOME/.kube/config` and sets this in the `$HOME/.bashrc`
You may need to log out and log back in, to create a new shell terminal session which will contain the correct KUBECONFIG variable, or run `source ~/.bashrc` to reload you shell config, or manually set it with `export KUBECONFIG=~/.kube/config`
NOTE: It is **not** advisable to run kubectl and helm commands as root (or `sudo kubectl ...` or `sudo helm ...`.
The user-provided configs are sufficient for interacting with the k3s cluster and its resources.
Make sure that you `$KUBECONFIG` is set to a file that is accessible by your system user with the correct permissions.
You can view the functions responsible for setting kubeconfig [here](https://github.com/chronicleprotocol/scripts/blob/main/feeds/k3s-install/install.sh#L144-L149)
### $KUBECONFIG file has expired
With the K3s installation, the `kubeconfig` can "expire" causing issues authenticating with the kubeapi.
eg response would be like this:
```
kubectl get secret chronicle-feed-eth-keys -n chronicle-feed -o jsonpath="{.data.ethFrom}" | base64 --decode
E1002 15:13:49.343237 2375376 memcache.go:265] couldn't get current server API group list: the server has asked for the client to provide credentials
E1002 15:13:49.345241 2375376 memcache.go:265] couldn't get current server API group list: the server has asked for the client to provide credentials
E1002 15:13:49.349349 2375376 memcache.go:265] couldn't get current server API group list: the server has asked for the client to provide credentials
E1002 15:13:49.351739 2375376 memcache.go:265] couldn't get current server API group list: the server has asked for the client to provide credentials
E1002 15:13:49.353627 2375376 memcache.go:265] couldn't get current server API group list: the server has asked for the client to provide credentials
error: You must be logged in to the server (the server has asked for the client to provide credentials)
```
> This happens because we are interacting with the k3s cluster as a non-root user (best practice), and we are getting our `kubeconfig` file rancher at `/etc/rancher/k3s/k3s.yaml`. The `client-certificate-data` gets refreshed from time to time, in which case you will need to create a new kubeconfig file (normally once a year).
To fix this, run the following commands:
```
# as your validator user (eg demo-user)
rm $KUBECONFIG
sudo cp /etc/rancher/k3s/k3s.yaml $KUBECONFIG
sudo chown $USER $KUBECONFIG
```
You should be able to authenticate with the cluster and proceed with `kubectl` and `helm` commands.
### Debug Bundle
If you need further debugging, please retrieve the container logs, and some base info and provide it to the chronicle team for assistance:
:::tip
Make sure that you set `FEED_NAME` to match your feed in question, and run these commands from the correct user so that `$HOME/$FEED_NAME/generated-values.yaml` resolves to the correct file.
:::
```
export FEED_NAME=
cd /tmp
kubectl logs deployment/ghost -n $FEED_NAME > ghost.log
kubectl logs deployment/ghost-vao -n $FEED_NAME > ghost.log
kubectl get pods,deployment,service,secrets,onion --all-namespaces > kbom.txt
helm list --all-namespaces > all-helm-releases.log
tar czf chronicle-debug.tar.gz ghost.log tor-proxy.log all-helm-releases.log kbom.txt $HOME/$FEED_NAME/generated-values.yaml
```
The above commands will get logs for each of the pods running, the state of the services, as well as the generated-values.yaml for your feed, and bundle it into a tarball `chronicle-debug.tar.gz` (Please change the values / paths accordingly)