completed
db-sync replacement in Oura
Current Project Status
Complete
Amount
Received
$35,000
Amount
Requested
$35,000
Percentage
Received
100.00%
Solution

We will write an alternative to cardano-db-sync in Rust powered by Oura starting with the core functionality needed for light wallets.

Problem

Many projects rely on an IOHK tool called cardano-db-sync. This means that when an issue is found in db-sync, the many projects are affected

Addresses Challenge
Feasibility
Auditability

dcSpark

2 members

db-sync replacement in Oura

Having an alternative to cardano-db-sync will help projects in Cardano be more robust as we won't have all projects relying on a single tool.

Additionally, the Oura infrastructure is more modular which will make it easier for projects to write their own plugins based off their own needs whereas writing plugins for cardano-db-sync, although doable, requires understanding a monolithic codebase which is not easy.

Additionally, since Oura is more modular, we expect our db-sync replacement to have better performance which would help wallets like Yoroi load wallet data a lot faster

This protocol is to build a Cardano open source project and should also make it easier for developers to build using open source tooling as well.

The risk of large infrastructure projects like this is that the project ends up containing a bug which affects projects that depend on it. However, the dcSpark team has a lot of experience writing core Cardano tooling so we're fairly confident in our ability to do things properly, and we also intend to integrate the tooling into other projects we contribute to (Flint Wallet, Milkomeda, etc.) so we should be able to detect any issue before others do.

We plan to release the first part of this db-sync alternative in Q1 2022 with follow-up components in Q2 2022

  • Q1: Core light wallet support (tx history, utxo fetching, etc)
  • Q2: Ledger state support (reward info, reward history, etc.)

Stretch goal may be to add support for SMASH and token metadata. However,

  • Token metadata is currently being worked on by another person contributing to Oura so we don't want to duplicate work if their solution ends up working
  • There are some community-run SMASH nodes. We need to check and see how these projects are handling the deprecation of SMASH and whether or not they would benefit from an Oura-based implementation

The funding doesn't include these stretch goals so they may end up being included as part of this proposal, or may end up being part of a followup proposal

The budget will be entirely used for the development cost of

  1. Building out the db-sync alternative powered by Oura
  2. Making contributions for Oura to add missing functionality we need
  3. Writing a JS client so projects can easily connect to our project through Typescript
  • Sebastien (many years of experience writing Rust tooling for Cardano and wallet infrastructure)
  • Rob (one of the core contributors to the Cardano Rust SDK called cardano-seralization-lib)
  • Lucas (dcSpark Rust develop)

Progress will be measured by our ability to release this functionality with all the endpoints required for projects to migrate away from db-sync and do so without sacrificing performance (in fact, we expect a significant performance increase for projects)

Success looks like many projects integrating this tool into their backend infrastructure to power their wallets or dApps

New proposal

close

Playlist

  • EP2: epoch_length

    Authored by: Darlington Kofa

    3m 24s
    Darlington Kofa
  • EP1: 'd' parameter

    Authored by: Darlington Kofa

    4m 3s
    Darlington Kofa
  • EP3: key_deposit

    Authored by: Darlington Kofa

    3m 48s
    Darlington Kofa
  • EP4: epoch_no

    Authored by: Darlington Kofa

    2m 16s
    Darlington Kofa
  • EP5: max_block_size

    Authored by: Darlington Kofa

    3m 14s
    Darlington Kofa
  • EP6: pool_deposit

    Authored by: Darlington Kofa

    3m 19s
    Darlington Kofa
  • EP7: max_tx_size

    Authored by: Darlington Kofa

    4m 59s
    Darlington Kofa
0:00
/
~0:00