Up until now, I have been relying on legacy values for configuring the P2P 2.0 package I have been working on. These values are:
- Outgoing: 32
- Incoming: 150
- Fanout: 16
- Rounds: 6
As far as I know, these values have been selected arbitrarily with the primary goal of ensuring that messages reach as many targets as possible. The drawback is that the more reliability you choose, the more the network will be flooded with duplicate messages. I wanted to find out if these settings make sense for the network and if it is possible to optimize them.
Since I am a programmer, not a mathematician, I opted to do this through an empirical process.
Note: All data I used … Read the rest
There is a lot of talk about scalability, sharding, and how to get factomd to the next level. What I want to talk about in this blog is skipping past all those steps in between and start right at the end: a fully customizable, modularized, shardable factom node.
This is not meant to be a proposal of things we should implement in factomd right now, it is an idealistic vision of the future that doesn’t account for hardware limits or optimizations. The haute couture of programming — not something meant to be implemented but rather to inspire goals and trends.
The foundation of extendable modularization is a unified message bus. All modules should be able to react … Read the rest
The Factom Protocol community has created a testnet where developers and prospective Authority Node Operators can setup nodes to interact with Factom for testing and educational purposes.
The developer portal of factomprotocol.org has a detailed writeup on the testnet including instructions for how to join it. The minimum system specs are:
- A modern CPU (2 cores)
- 4 GB RAM
- 50 GB storage
- 20 MBit/s synchronous
- Up to 1TB / month data transfer
- Static IP-address
Note that some developers will be interested in the developer sandbox rather than the testnet.
If you have any questions, please join the community Discord chat server and submit your query in #testnet-chat.… Read the rest
You need Factoid Addresses and Entry Credit Addresses to do anything in Factom, so I wanted to dive a little deeper. There are three parts that make up an address: the private key, the public key, and the address. The private key is the most important element and can be used to derive the other two components. The public key can be used to verify data signed by the private key as well as derive the address. The address itself is a hash of an RCD mechanism to allow for multiple authentication schemes, and it cannot be used to determine either the private or public keys.
While using Factom, you are typically only presented with … Read the rest
Like the title says, this is an explanation of Factom for developers who already have solid programming knowledge and just want a no-buzzword explanation of how to write applications and what is possible. What it is not is a guide to programming or to the underlying Factom protocol itself. If you are interested in the latter, check out some of my other blog posts or the factomprotocol.org website.
- Working knowledge in a programming language
- Knowing what JSON and JSON-RPC are OR using one of the many Factom APIs
That’s pretty much it. While the main network has costs associated with it, you can run a sandboxed local server or use the test network that lets you generate free resources. … Read the rest
Short Term Review
One of my worries with my approach to learning the codebase (see previous blog posts one and two) was that I might not be able to transition well from a theoretical reading and analyzation of the code to being able to write new code, which if you’re familiar with development, are two very separate concepts. It hasn’t been seamless but I’ve had some time to reflect since then and I would consider it to have worked pretty well.
That said, I haven’t talked the other core devs about how they have been faring. It would be nice to hear from others about this topic.
Update on my status
For a while I worked on odds and … Read the rest
Let’s take a closer look at Factom’s p2p protocol.
Factom uses a Gossip protocol for all messages, which is a very simple protocol with a wide variety of applications. One of Factom’s main priorities is creating a censorship-resistant environment and Gossip Protocols have characteristics that aid in that regard. More on that later.
The p2p code is implemented entirely inside factomd with no external libraries. If you’re already familiar with Gossip Protocols and just want a brief overview, these are the specifications of the network:
- Seeded with a list of 10 softcoded ips
- Fanout of 16 (with optional max fanout for some messages)
- Outgoing count of 32
- Incoming count of 150 (no NAT traversal)
- Push approach (mostly
… Read the rest
It feels good to be able to say: I finally understand how factomd and the factom protocol works.
After almost forty calendar days, I have reached a point where I’m comfortable with the internal processes of the code. It’s not a perfect mastery, that will likely take years to achieve, but it’s enough to know how all the pieces fit together, how changing one impacts the others, and most importantly of all, where to look to find out more.
To recap what I have been doing: instead of diving into the code by trying to implement something and learn by doing, I wanted to understand how everything works first and in the process create documentation. It’s a departure from the … Read the rest
The Factom Open Node project is a decentralized, load balanced factomd-node located at factomd.net which provides an API to interact with the Factom blockchain protocol. It is an alternative to hosting and maintaining your own factomd-node. The infrastructure is currently provided by five different Authority Node Operator companies. I met with Jay Cheroske of Bedrock Solutions, one of those providers and asked him a few questions.
How can developers utilize the Factom Open Node?
Factom Open Node is a free factomd API endpoint developers can use to read and write to the Factom blockchain. By using Factom Open Node, in lieu of running their own servers, developers can get started right away with no additional costs. In keeping with the … Read the rest
What’s the best way to learn a new codebase? That’s a question I have asked myself many times leading up to this project. I’m used to working in already established areas, like Symfony, Node.js, vBulletin and XenForo systems, that have vast and readily-available documentation, whether it’s from the original developers or user-generated. This is the first time I went delving mostly blind.
This is roughly the process I laid out for myself:
- Get accustomed to working with the product
- Gather all available documentation
- Read code
- Attempt to explain my understanding and have that reviewed by the experts
This happened over the span of a couple of months as I worked on procedural solutions for the Factomize forum, including … Read the rest