Geo Web: Apollo Week 2 Updates
Scaling Harberger Taxes
Harberger Taxes are a key component for the Geo Web’s value proposition.
Harberger Taxes entered the mainstream consciousness of Web3 with Eric A. Posner & Glen Weyl’s book, Radical Markets. Vitalik Buterin wrote the forward for the book and has expressed his interest in the book’s ideas applied to the blockchain space in blog posts, tweets, and presentations.
Vitalik’s enthusiasm and the natural fit between crypto and the Harberger scheme have inspired numerous experimental implementations. We researched and used one such reference implementation for our HackFS prototype, but all of the examples that we found have a fatal flaw: scalability.
Existing implementations deal with tax collection on a one-to-one basis: a user claims an NFT, prepaid funds are locked in a smart contract, and taxes are individually collected on demand or at transfer (based on the duration of time the asset is held). Unused funds are returned to the owner if there is a transfer.
The time and gas required to collect taxes scales linearly with the number of outstanding NFTs. Even if gas prices aren’t insanely high (as they have been lately), this is too inefficient to implement for the Geo Web. So this week, we went about designing a tax mechanism that could conceivably scale to global adoption. Here’s what we came up with:
When anyone claims or buys a Geo Web land parcel (an NFT), they must also deposit funds (prepaid taxes) into a master Harberger Tax smart contract
An expiration date for each NFT is calculated based on the self-assessed value, taxes paid, and the tax rate
The expiration date is recalculated with any deposit, withdraw, or a self-assessed value modification transaction.
If an expiration date passes (i.e. prepaid taxes run out), ownership of the NFT is forfeited (potentially with some buffer mechanisms)
If there is a forced sale, the smart contract refunds the owner’s unused prepaid taxes (calculated using the expiration date, transaction date, self-assessed value, & tax rate) along with the proceeds of the sale
All of these basic functions can be achieved with straight forward math on a transaction-by-transaction basis.
The new part is calculating earned taxes (aggregate funds that can be collected by the Geo Web org* from the contract) and a required reserves (unearned/prepaid taxes that must remain locked for potential refunds):
Required Reserve (T1) = Reserve (T0) + New Taxes Paid - Taxes Returned - Sum of Self-Assessed Values (T0)*(Tax Rate*Duration(T1-T0))
The above assumes a universal tax rate, but could be modified to handle multiple tax rates. We’ll likely measure duration between transactions in seconds, so the tax rate used in the formula would be per second.
Total Contract Funds (T1) - Required Reserve (T1) = Funds Available to Withdraw (T1)
The required reserve formula is concurrently updated with each of our basic contract functions. Aggregate tax collection/withdraws are now a constant time complexity transaction (thereby saving the fate of the Geo Web and the Ethereum blockchain).
Did we get this right? Let us know what you think! We’ll catch you in Week 3.
*This is a big discussion for another day, but we envision Harberger Tax funds being managed through a multi-sig authority to start. The funds will be used to support network development and other public goods (Gitcoin! Quadratic funding!). We’ll transition to more decentralized methods such as governance tokens or a DAO as the network matures.