Grant Update FAT Development Grant 2 Update

Julian Fletcher-Taylor

DBGrow
Exchange Working Group
Legal Working Group
Grant Period: 3/1/2019 - 6/1/2019 (3 Months)

Approximately Halfway Update

Ecosystem
  • # Users on the FAT discord 78 -> 103
  • We have continued to help developers learn the ropes of using FAT
  • We have continued to spread awareness of FAT in meetings with a variety corporate and governmental entities. We have found intense interest in FAT, and interest in factom more generally that has originated from diving into the tokenization capabilities of Factom
  • We represented FAT at the Odyssey hackathon and have a multitude of projects interested in using the FAT protocol and Factom more widely from the event
  • Testnet FAT courtesy node is up! Can be found at http://52.60.72.144:8078
Standards
  • Remove redundant or unclear validation criteria from FATIP-0 to match implementation. Clarify language
  • Rewrite FATIP-1 (Non fungible token standard) with lessons learned from FATIP-0
  • Legibility and clarity improvements for existing standards
FAT Daemon & CLI:
  • Implement Adam’s Factom Go library in fatd, remove dependency on Factom Inc’s Go library and data structures
  • Move build to Make and include programmatic versioning as part of the build
  • API & RPC Changes such as:
    • Add ability to query for transactions for a set of addresses instead of a single address. Critical for search & wallet
    • Add ability to get current fatd sync status (relative to Factom block height). Critical for wallet & automation
    • Add fatd version & commit # as part of all RPC responses via headers. Critical for compatibility checking across all FAT software
    • Fix some pagination issues
  • Improve build, flags, and usage documentation. Add examples of CLI usage
  • Publish complete and correct HTTP API documentation allowing anyone to create their own FAT client like fat-js
  • Major CLI refactor. Fixed some major CLI bugs found with the help of our community & early adopters, Thanks!
  • Create official binary releases for end users on Linux, Mac and Windows. Building or handling dependencies are no longer needed to use fatd & the CLI as an end user.
  • Fix critical bug in transactions with over 10 inputs based on integer overflow.
FAT Wallet

A stable beta version of the FAT Wallet is available to download. It allows in one place to manage factoids, entry credits, fat tokens (both fungible and non-fungible) and Factom digital identities. That version is safe to use as of today but is still missing some features to make it ready for consumption by the general public.

See some screenshots in the specific update.

FAT-JS
  • Integrate all new RPC API changes from FAT Daemon
    • Get transaction histories for a set of addresses instead of a single address
    • Handle and react to fatd’s version headers. Issue incompatibility warnings to the user on minor compatibility risks, throw errors if outright incompatible
    • Implement get sync status RPC call
  • Fix bug in FAT-1 transaction data structure where timestamp & entry hash were not interpreted from the API response
  • Parametrize some API calls using objects to make them easier to use
  • Add biginteger parsing for incoming API responses, allowing fat-js to avoid rounding errors on integers which would ordinarily be too large for proper precision
  • Enforce that integers are not too large for fat-js to handle with precision (safe integer)
  • Add compatibility & smoke tests for fatd API responses for evaluating future fatd version compatibility with fat-js
  • Improve tests, bring coverage over 98%. Use assert style with strict equality enforced
  • Add complete in-code documentation for all public methods via JSDoc, programmatically generate markdown docs that look great on github
  • Integrate joi-factom (Thanks Paul Bernier!) for more concise and accurate parameter & data validation
  • Better and more accurate working examples
  • Ongoing vulnerability fixes for NPM dependencies. Many fixes for ongoing vulnerability disclosures in our dependencies(more accurate dependencies of our dependencies & so on)

Items to complete for the second half of the grant

Ecosystem
  • Complete the overhauled FAT whitepaper
  • Mainnet Courtesy Node
Standards
  • Move core fungible and nonfungible token standards to Beta
  • FAT-13 Mineable token standard
Fatjs
  • Fat-js smoke and regression tests against fatd API responses
  • Integrate new Factom digital identity standard into FAT identity & token issuance system
fatd
  • Improve efficiency of FAT-1 transactions in the FAT Daemon
  • Whitelist/Blacklist for fatd token chain tracking
  • Create docker image for fatd
  • Improve token issuance UX by automatically submitting both the chain establishment and initialization entries

Items deprecated

Fatjs
  • Private key resolution for fat-js using walletd - We decided it didn’t make organizational sense to have this as a feature due to how fat-js is used in practice. It’s simpler, more secure, and more universal to all users to have their own key resolution using any keystore they like
 
Community,

This is the long overdue final update on this grant. Most of the work had been completed some time ago but due to priority shifts in the project a few outstanding tasks have only been completed recently. The completion of this grant coincides with the fatd v1.0 release which brings the FAT project to a stable production state.

We apologize that this update is so late but believe we achieved all the goals of this grant even though a few tasks were deprecated due to the changing FAT and broader Factom ecosystem.

Completed Tasks

General

  • Move all current FAT token standards to production ready forms
  • Grow the fat ecosystem and bring in new developers
  • Expand the FAT protocol documentation
FAT-JS

  • Provide a full set of Smoke and Regression tests against fatd
  • Provide a system for making unstructured or currently unsupported calls to fatd, opening up all calls to JS users
  • FATd API version compatibility checking
  • Keep up to date, improve and bug fix current implementation of standards
Wallet

  • Integrate factom-walletd encryption into wallet once released by Inc
  • Extend set up options at startup: use of 12 word seed from Enterprise Wallet and other
FATD

  • Improve efficiency of processing large FAT1 transactions as well as other database optimizations and refactors
  • Implement whitelist/blacklist options for FAT token chains to enable running fatd in light mode
  • Continue general developer tasks/chores: internal fatd documentation, supporting new developers, explore new potential FAT specs, etc.
  • Create Docker container for FATd
  • Improve the user experience of publishing new tokens by offering to automatically commit the token issuance entry after initial chain creation
  • Create systemd service for fatd and packages for Ubuntu and Arch Linux

Completed and Ongoing Tasks
  • Continue to research new and improved FAT standards
  • Create and host FAT courtesy nodes on mainnet and testnet
    • Testnet node is deployed: 0.testnet.fat.dbgrow.com:8078
  • Handle wallet updates; detect new versions and investigate implementation of "self-update" feature
Tests To be Performed with 1.0 Wallet Release
  • In-depth testing of alpha version of wallet
  • Airdrop campaign to engage the community: FAT-0 and FAT-1 tokens for testing
  • Gather first round of feedback from the users
Deprecated Tasks
  • Integrate the new Factom Identity Chain standard into existing FAT token standards
  • Integrate the Factom identity JS library
  • Implement latest Factom Identity Chain standard into fatd
The "new" identity standard was informally deprecated by the Factom community in place of developing and using DIDs. Unfortunately, it was not fully developed, standards were not produced, and tooling is minimal or non-existant for working with this identity format. We look forward to implementing DIDs into FAT in a future milestone. We currently continue to use the server identity format which is well known and widely used.

  • Implement public-private key resolution using factom-walletd (FAT-js)

We decided it didn’t make organizational sense to have this as a feature due to how fat-js is used in practice. It’s simpler, more secure, and more universal to all users to have their own key resolution using any keystore they like

  • Write a FATIP standard for picture association in the FAT ecosystem
It was decided this IP was premature, given the current state of the FAT ecosystem and that there has been no demand to use such a standard.

  • Complete testing and benchmarking suite for the state engine, reach >90% coverage for all fatd code
The exact language of this objective is out of date but the spirit of it has been achieved via full database validation. The main purpose for a state testing suite was to ensure that state computation is not altered through code changes. Full database validation does exactly this. Note that the state package no longer exists and state is computed in the db package. Due to the nature of golang, with the number of `if err != nil` branches, achieving 90% test coverage is difficult and leads to very awkward tests. Instead, the current test suite focuses on the core functionality and critical code paths in the db package. Although line coverage is only 62% right now, the tests are very comprehensive and robust so that any unintentional change in state computation within the database is always detected.
 

Anton Ilzheev

De Facto
Exchange Working Group
Core Committee
Website Committee
  • Integrate the new Factom Identity Chain standard into existing FAT token standards
  • Integrate the Factom identity JS library
  • Implement latest Factom Identity Chain standard into fatd
The "new" identity standard was informally deprecated by the Factom community in place of developing and using DIDs. Unfortunately, it was not fully developed, standards were not produced, and tooling is minimal or non-existant for working with this identity format. We look forward to implementing DIDs into FAT in a future milestone. We currently continue to use the server identity format which is well known and widely used.
With DID Golang lib we are developing right now, it will be as easy to work with DIDs as with Factom Identities (which integrated into current Factom Golang lib).

Our Golang implementation for DIDs will be ready in December, and I would suggest you to finish DID implementation into fatd using funds, received from current grant, but not including it into future grants/milestones.

Do you agree with that?

I don't mind deprecating other tasks for reasons you wrote.
 
Top