Factable Solutions Resignation

Previous Updates
Welcome to the first edition of the Factable Solutions ANO contribution update!

Summary (if you don’t want to actually read the larger comments):
  • Factable Solutions pledged as a high efficiency infrastructure ANO (60%) doing some core development
  • Factable Solutions incorporation and business setup completed
  • Factable Solutions mainnet servers onboarded after passing full audit 7/10/2019
  • Michael is actively learning Go, Git, and all the other tools required for core development
  • Pledged initial estimate of 6-9 months before actively contributing to the code base realized in a bit over 1 month, as Michael made his first pull request (https://github.com/FactomProject/factomd/pull/796) to incorporate changes in 7 files
  • Note: The above code modifications are all code cleanup: adding comments, removing duplicate code via refactoring, making receiver names consistent, adding tests for untested functions. Expect this level of contribution to continue until Michael more fully learns the larger system, which will still take quite some time.
  • Active in governance processes on both Factomize and discord since being elected

Main Update:

It seems appropriate to post our first update now that we have definitive milestones achieved since our announced election at the end of May. I’m unsure of the frequency with which we will post updates here, but will do so at least quarterly, if not monthly. If the community has a strong feeling one way or the other, please let us know. Factable Solutions was elected as a high efficiency infrastructure ANO (60%) that will contribute to core development.

Almost all of our attention since the election announcement has been on getting Factable Solutions up and running as a business, which includes the company’s incorporation, signing up for various business accounts, getting our servers up and running, etc. All that hard work has paid off with our servers finally passing the full audit and coming on boarded on 7/10/2019. Despite this taking a considerable amount of time, it’s the most straightforward and boring part of the update, so we won’t focus much on it.

Michael has only recently started working on his pledged core development contributions: learning Go and contributing to the core codebase in 6-9 months time. Michael has found that he can make tangible contributions to the code base almost immediately while he reads code and learns about the system architecture and this has resulted in generating his first Pull Request for 7 files. While reading code, he realized that much of the code base is missing relevant comments about what is going on. So his game plan for helping him learn both Go and the whole system will consist of: 1) adding appropriate comments to all the files he reads, 2) refactoring / deleting any duplicate code he sees, 3) general code cleanup wherever possible. While the timeline for contributing to the code base has been dramatically sped up over the initial 6-9 month estimate, standing parties can expect similar levels of code contributions moving forward for the foreseeable future. These code contributions are individually small, but I expect that they will slowly move the code quality of the codebase in a better direction. It will still take some time to learn the system and contribute more meaningfully than just code cleanup. Michael is also taking notes on the entire process, and will hopefully condense these notes into an onboarding document which will be useful to any new developer looking to contribute to the Factom Protocol.

Factable Solutions has also been active on governance, contributing opinions and voting on relevant/required topics on both Factomize and discord when we feel we have something to contribute to the conversation. If you would like Michael’s opinion on anything, please feel free to tag him on Discord. Discord ends up being too much of a distraction to monitor constantly given the nature of our pledges (core development). Tagging our team members is a better way of getting our attention on specific Discord discussions.

That pretty much sums up the craziness of the last month+, which we hope will calm down somewhat now that the business and server setup is passed, and we can begin to more fully focus on our pledges of contributing to the core codebase.

If you have any questions/comments/concerns, feel free to reach out to Michael.
I’ll address right away the efficiency reduction part, since I’m sure that caught your attention. We campaigned as a 60% infrastructure node, with a pledge that I learn Go and be contributing in 8-9 months time. The 60% efficiency rating was due to the 8-9 month expected delay in doing any contributions to the core codebase. I was asked by Tor during the campaign if I planned to lower my efficiency once I had learned Go, and I said it was difficult to say at the time, but that I would be transparent and clear if I were to drop my efficiency in the future. Fast forward to today, I have been able to contribute almost immediately to the code base while I learn Go and the Factomd system by reading code, updating comments, doing minor refactorings, and fixing small bugs when I come across them. When I read through the other 60% efficiency ANOs contributions, it is clear that Factable Solutions is contributing at a higher level than others within the 60% efficiency tier, and seems to be more in line with the 50% tier. What my efficiency should be is certainly up for debate, and I’m not sure I truly know where Factable Solution’s contributions lie on the sliding scale of efficiency, but I know they are above the 60% level. So my plan is to drop our efficiency on both servers to 50%. I welcome criticism, discussions, concerns, etc.

It has been almost 2 months since my last update. First the boring and obligatory information:

  • Servers had constant up time
  • Upgraded on time
  • Quick response during the network pause
  • Reasonably active on discord and factomize, adding where I felt appropriate

Now to the ‘core’ update, if you will:

A total of 3 pull requests made. In general comments, receiver name changes, refactoring, unit test coverage improvement, etc.

  1. Pull request touching 20 files: https://github.com/FactomProject/factomd/pull/823
  2. Pull request touching 12 files: https://github.com/FactomProject/factomd/pull/825
    1. Fix panic by RandInt64Between if spread is larger than Int64Max
    2. Fix problems with RandIntBetween() and RandInt() on 32 bit systems
    3. Fix tests which had problems due to assumption the 'between' functions produce [min,max] when in fact they are [min,max)
  3. Pull request touching 44 files: https://github.com/FactomProject/factomd/pull/875
    1. Potential bug fix where missing JSON quotes were found
Factable Solutions has moved to quarterly updates, so here’s what we’ve been doing for the past ~3 months. Factable Solutions has been operating at 50% efficiency during this time. This update is going to look a lot like our previous update. I will honestly note that there have been business distractions during this 3 month period which have impacted our productivity (the Poloniex announcement and corresponding gap between the FCT listing on VCC in particular cut deeply into our productivity during that period as well as after as we wrestled with the business implications). With that said, here is our update:
  • Servers had constant up time
  • All upgrades performed on time
  • We’ve contributed on discord and factomize where we felt appropriate.
Core contributions:
  1. 10/18/2019 - Created a pull request for 30 files which mostly contain code commenting and various minor code cleanup: https://github.com/FactomProject/factomd/pull/900
  2. 12/20/2019 - Created a pull request for 27 files which again mostly contains code commenting and various code cleanup. There are a couple of changes to specifically point out. https://github.com/FactomProject/factomd/pull/945
    1. Bug fix in IsTerminating() function changing > to >=
    2. Bug fix in the RCD datastructure. There was a caching mechanism that didn’t work and I fixed this, which potentially could speed up RCD verification. However there is also another issue that the caching mechanism could allow a corrupt signature to be verified. I’ve created a unit test to show this, and will need to look into addressing this bit in the future.
Factable Solutions has been operating at 50% efficiency during this time. Here is our update:

We have spent a decent bit of time this quarter interacting with, responding to, and writing our reviews of ANOs with the newly released ANO standing system. Some of our reviews were controversial, or at least required some extensive back and forth. We understand that not everyone agreed with our perspectives, but feel we gave an honest assessment of our view of the ecosystem. We will be revisiting our reviews starting April 7th (1 week after close of Q1), as we expect to see quarterly updates come in within that week.

Core contributions:

We rolled all of our contributions into a single PR from this quarter.

03/20/2020 - Created a pull request for ~74 files

a) I was asked by Factom to rebase my December check in and so it is included in this check in (previous ~27 files changed) so those are “double counted” from our December update in the 74 file figure above
b) General changes are again: comments, receiver name changes, minor refactors, and general code cleanup
  1. Potential Bug fix: identitymanager.go: RemoveAuthority function seems to be missing mutex, so I’ve added it. I’m not sure if these functions really do have issues with thread safety, but all the other sets of functions in this file use mutexes, so I added it here.
  2. Bug fix: cancelcoinbasemanager_test.go: added a couple unit tests here, and found that auditservercount() was incorrect, so fixed in identitymanager.go, as well as the fedservercount() which was accidentally correct
  3. Bug fixes / code cleanup: identityEntry.go - Used hardcoded expected lengths for specific structures. I ripped out the hardcodes and created variables in each file with the information, then identityEntry.go file refers back to those variables. When I did this, I found two functions ValidateServerManagement(), ValidateNewBitcoinKey() who had hardcoded expected values that were using incorrect expected lengths. These were fixed.
Current Update: Factable Solutions Resignation
It is with sadness that Factable Solutions announces their resignation as an ANO. Factable Solutions would like to thank everyone for the opportunity to be a part of the ecosystem. It has been a bit less than a year since we had the honor of being elected as an ANO, however, much has changed in the business landscape in that time. These changes render us unable to continue as an ANO. Despite our short tenure, we view our time as an ANO as productive, and thank everyone for taking the chance on blockchain and crypto outsiders. We wish the ANOs and the individuals working in the ecosystem the best of luck in the future. We will contact the core committee for the removal of our servers as soon as possible. Thank you again for the opportunity!