Tracking [Kompendium-4] Rust Client Library for the Factom Protocol


Factomize Bot
This is your grant tracking thread. Below, you will find information from your original grant.

Grant Proposal

ANO / Committee
Group: Kompendium
FCT address: FA3KMPNX8AKdY3tjyKMzZ5cAkqUv97d3QqkJeQnVXk6PXSVgArnr
FCT: 2400

Total FCT Requested

Start Date

Completion Date

Success Criteria
Delivery of a Rust client library for the Factom Protocol, delivered on time, and the client is added to the for developer ease of access and to showcase the Factom Protocol’s priority of expanding its developer community and its portfolio of developer tools.

Timelines and Milestones
03 SEP 2019 Start Review - First Review – Documentation, Completeness, Functionality – Reorg, Add API Endpoints, Additional Documentation
30 SEP 2019 Second Review – Documentation, Completeness, Functionality
Status Update to Community on Grant
01 OCT 2019 Further Testing, Evaluation, and Client Refinement
31 OCT 2019 Deliver Finished, Refined, and Improved Client to Community

2100fct Development (back pay, further development, testing) discounted
200fct Testing
70fct Program management / updates / upkeep
30fct Marketing the creation of the RUST client for the Factom Protocol to Rust developer media channels/communities


Factomize Bot
@Jason Gregoire @Kompendium

Today is your grant start date! We look forward to regular updates from your team.

When you are ready for the final determination poll, first summarize the grant and self score then go to the thread tools dropdown at the top right and select "Create Final Determination Poll".


Factomize Bot
@Jason Gregoire @Kompendium, your specified completion date has now passed. Will you please update us on the status of your grant?

If it is completed, please first summarize the grant and self score then go to the thread tools dropdown at the top right and select "Create Final Determination Poll".
Just an update.

Currently implementing :
  • Some common traits to add easy interoperability with other libraries.
  • Ongoing work investigating the best path forward for overhauling the test suite making it portable and easier to use, at the moment it requires downloading a small database and running custom factomd commands.
  • Added a fuzzing suite for bug testing and some higher-level functions which combine operations.
On the Horizon:
  • Futures runtime
  • Clearer delineation for synchronous calls.
  • Updating rand dependency with breaking changes.
  • Documentation fixes
Hello Community,

I'm writing to provide an update to the Rust Client library. Several individuals have reached out asking about the status of the library.

We've decided to pause the public release of the Rust client library for a few days to await the Rust Community's 1.39 release, which is expected on 07 November. Announcement Link:

While we recognize the importance of meeting the pledged grant timeline, we hesitantly decided a delay of a few days would ultimately be advantageous to the community to ensure we are providing the community with a stable and optimized library for the latest Rust release.

Thank you for your patience.
Last edited:
Async was stabilised in rust today (was expected in 1.38 but had a few blockers) and the long-awaited futures 0.3 released yesterday with async support, but to be frank most of this delay was me and life commitments. Not going to shy away from that, there's preview crates available for both futures and hyper, in general they tend to not deviate much from the final product, this could have been ready for these releases but alas it is not.

Personally, I'm happy to take my time here because without async syntax this library will both look and feel outdated in a matter of months. `impl future` is rough and clunky. It may be some time.

Currently this is common pattern for a function:

Rich (BB code):
fn heights(self)-> impl Future<Item=Response, Error=FetchError>

with the recent release this desugars into:

async fn heights(self) -> Response<Heights>

The current dev branch is likely to have breaking changes, just something I want people to be aware of.
As a quick rundown, this is some dependencies for the client to move to async:

futures-preview = {version = "0.3.0-alpha.19",  features = ["compat"] }
futures-util-preview = "=0.3.0-alpha.19"
hyper = {version = "0.13.0-alpha.4", features = ["unstable-stream"] }
hyper-tls = "0.4.0-alpha.4"
tokio = "0.2.0-alpha.6"
It's a tad messy, hyper is getting there, but unstable-stream is likely necessary for a while. Getting things working on stable is paramount in my mind because some things end up in nightly limbo for years.

I'm keen to get this out, also keen to only ship something that's stable. It's a tightrope in that regard.

Cheers all.

addendum: No rust or toml formatting on Factomize.
Last edited: