There's been some discussion about how we name things in the codebase, so I wanted to open up a discussion so that we could stick to some common conventions.
By default, we match the Rust styling: https://doc.rust-lang.org/1.0.0/style/README.html
In general, we should fully type all names unless the name runs significantly long. We don't cut corners by shortening variables or attributes, so block over blk and transaction over tx. In the future, well defined acronyms can describe processes like automatice transaction rebroadcasting (ATR for short).
Getter functions just reference the piece of data that we want access to -> id() returns id. This also applies to a function like latest_block in Blockchain.
Setter functions use the convention of set_${attribute}.
Additional functions that perform a more complex transform, or some other complex functionality will start with a verb, then describe what the function does. If there's not a guarantee that the operation will be successful, we use the verb try. Only if we're sure of the success of the operation would this be negated.
Here's an example with Blockchain. When we want to add a block to the blockchain, the function we call is try_add_block, and not add_block. The function add_block is only called when we are certain that the block should be added to the blockchain. In a similar vein, when we attempt to bundle a block in Mempool we call try_bundle_block, and only call bundle_block when the proper requirements are met.
For our primitive structs, we want to distinguish between Primitive and PrimitiveCore. Core version of the struct will be what's sent over the wire between nodes, and represents the simplest version of the struct. The full-bodied version is available to allow for each node to enrich its data.
There's been some discussion about how we name things in the codebase, so I wanted to open up a discussion so that we could stick to some common conventions.
By default, we match the Rust styling: https://doc.rust-lang.org/1.0.0/style/README.html
In general, we should fully type all names unless the name runs significantly long. We don't cut corners by shortening variables or attributes, so
blockoverblkandtransactionovertx. In the future, well defined acronyms can describe processes likeautomatice transaction rebroadcasting(ATRfor short).Getter functions just reference the piece of data that we want access to -> id() returns id. This also applies to a function like
latest_blockinBlockchain.Setter functions use the convention of
set_${attribute}.Additional functions that perform a more complex transform, or some other complex functionality will start with a verb, then describe what the function does. If there's not a guarantee that the operation will be successful, we use the verb
try. Only if we're sure of the success of the operation would this be negated.Here's an example with
Blockchain. When we want to add a block to the blockchain, the function we call istry_add_block, and notadd_block. The functionadd_blockis only called when we are certain that the block should be added to the blockchain. In a similar vein, when we attempt to bundle a block inMempoolwe calltry_bundle_block, and only callbundle_blockwhen the proper requirements are met.For our primitive structs, we want to distinguish between
PrimitiveandPrimitiveCore.Coreversion of the struct will be what's sent over the wire between nodes, and represents the simplest version of the struct. The full-bodied version is available to allow for each node to enrich its data.