Beyond direct user payment of blockchain transaction fees
Decentralised (public) social media has the concept that all posts are public, don’t depend on a centralised authority and that there is no delete.
Posts are recorded using the blockchain, so any client can read and write posts. A user can switch clients, knowing that their posts are available to any client.
The blockchain provides a decentralised repository, including a timestamp and proof of authorship for posts.
The concept could be used for micro-blogging, photo sharing, long form posts, or even version control repositories.
Peepeth (version 2) was built using the concept of stateless smart contracts (to reduce gas costs) which was developed from Leeroy. Actions including posts are JSON stored on IPFS. The IPFS hashes are then stored as transaction inputs to a smart contract.
Users can sign a transaction for every action and hence incur a blockchain transaction fee for every action.
Peepeth improved on this experience by allowing batching of 15 actions (arbitrary number). Peepeth front end stores the actions, which a user can then submit as a batch (JSON stored on IPFS containing IPFS hashes of each action). So instead of a blockchain transaction fee for every action, a user could have a blockchain transaction fee for every 15 actions. The transaction is signed by the user so is proof of authorship.
Blockchain transaction fee blockers
Whilst a transaction fee per batch is a big improvement, the following blockers still arise:
- A user saves a transaction and then has to wait for it to be confirmed on the blockchain, which could take some time if using a safe low gas price, especially during congestion.
The end result is that a user is blocked from posting until the transaction is confirmed.
- High gas prices might mean that a user delays saving until gas prices reduce.
The end result is that a user is self blocked from posting.
- Saving using a safe low gas price when gas prices are rising could result in a very long wait (hours or more) for a pending transaction. Not all signers/dApp browsers currently support resubmitting a transaction with a higher gas price. (They eventually will)
The end result is either a user is blocked from posting until gas prices reduce or they resubmit their transaction with a higher gas price (or submit a transaction with the same nonce and a higher gas price, then try a new transaction where resubmits are not supported)
Blocking users from posting creates a huge barrier for a social network and inhibits use.
User signed actions
To avoid the blockers of transaction fees, instead of a user signing a transaction, a user could just sign their actions and posts. A user could sign either the JSON or the IPFS hash of the JSON as proof of authorship. The dApp could batch new actions from all users and store the JSON in IPFS, with the IPFS hash of the batch stored on the blockchain.
The dApp could store batches on the blockchain regularly (e.g. every hour). Ideally this would be as frequent as possible for other clients to access the saved actions and posts.
In an ideal world a user would sign each individual post and action. This would mean that other clients would see the post/action sooner. Eventually a user won’t need to explicitly sign each action as the application/signer could create trust to do this upon their behalf (Dan Finlay — Web3 UX).
The short term solution will likely involve users signing batches of actions, as this fits the current user flow of Peepeth. Though as there is no transaction fee cost to the user, then I believe we will see users signing more frequently, so doing smaller and smaller batches.
The end result is that we want the shortest amount of time from a user making an action/post until it is stored on the blockchain, so that it can be seen by other clients.
There are several options to fund this:
- dApp pays (and funds through some other monetisation), assuming saving a batch every hour, then transaction fees of batches are in the order of $1-$2 a day. This is potentially small potatoes when compared with some of the centralised hosting costs.
- Users pay, either a one off fee forever or pay for a subscription. This could be done using tokens.
Removing blockchain transaction fees for actions from the user removes limits and barriers from performing actions. There should be a rapid change in the number of actions that each user performs.
I am passionate about the benefits of decentralisation and use on mobile.