EIP-5320: Harberger Taxes NFT

Can you specify the type of attack your thinking of? I have encountered overflow issues with the division here when fuzzing during testing: partial-common-ownership/Taxation.sol at 3e7713bc60b6bb2e103320036ec5aeaaaceb7d2b · 721labs/partial-common-ownership · GitHub. I’ve looked into solving it by switching over to DSMath but haven’t spent much time on the implementation.

I’m confident that this implementation addresses it properly: libharberger/Harberger.sol at master · rugpullindex/libharberger · GitHub (test: libharberger/Harberger.t.sol at master · rugpullindex/libharberger · GitHub)

Unfortunately, I don’t have enough time to plan a concrete attack. I think it’d be where you try to, e.g., divide such that the outcome is close to 0.5, and then you can make something go to zero because of Solidity’s integer flooring. Not suggesting that this CAN actually happen - but I think striving for perfect accounting precision must be the goal. From my understanding scaling the calculation’s numbers up using the parts-per concept is sufficient. Cool that you’ve fuzzed this! Should look into it!

  • I wanted to make another comment on the original submission of EIP-5320. It features 6 different functions to interact financially with the Harberger property.
  • A recent implementation of depreciating licenses I did just necessitates two (function assess and function fiscal): hdmap/hdmap.sol at 640ebbe5b5daaf94225224611a974dd97143f619 · rugpullindex/hdmap · GitHub
  • function assess can increase and decrease taxes and allows a buyer to fulfill their order. Taxes are calculated whenever it’s run.
  • function fiscal returns the property’s new price and the amount of taxes due (which will go into effect the next time assess is called.

A decentralized tax collector? Can we get a decentralized Roko’s Basilisk too?

And of all the taxes, we choose the one that’s incompatible with ownership? Owning things is pretty popular. Much unlike a basilisk.

please comment here when you have constructive things to say about the document. Please don’t comment here if your intention is to bash other people’s work. Thanks.

1 Like

Assume my pronouns, not my intentions. My suggestion is to reconsider the roadmap. I haven’t so much as glanced at your work.

But I reserve the right to criticize EIP 1057, 5320, and others.

Look, if you feel like needing to complain about something, I recommend https://twitter.com.

For this forum, you must make a substantiated complaint about the subject matter, e.g., that you don’t like certain things in @green’s PR: Add EIP-5320: Harberger Taxes NFT by greenlucid · Pull Request #5320 · ethereum/EIPs · GitHub

Sadly, Glen Weyl has the strength for naming things such that people go crazy about them. Soulbound tokens, next to Harberger taxes is one such example. But in reality and if you look into the source code, this has nothing to do with the taxes that a government collects. Nothing at all. Any marketplace taking a fee e.g. does the exact same thing. So Harberger fees would be the equivalent.

But don’t expect us to take your deontic criticism seriously: We’re not working for you, and there is no moral high ground here. The path to being heard is where you make a substantiated argument against the specification on an epistemic basis and not on what “should be” because you think it’s right.

I’m not even the slightest bit familiar with Harberger taxes so please forgive any stupid questions.

  • Is it important to differentiate between Harberger transfers and non-Harberger transfers? As I understand the document, a Transfer event will be emitted for every TokenBought event.
  • The event names are somewhat inconsistent. TokenBought has token but TaxesPaid does not, even though they are both events applicable to a single token.
  • Should increasing the valuation require some kind of back-taxes? Seems like an owner could always frontrun buy attempts by increasing the valuation by one wei.
  • Would a taxFor(uint256 tokenId, uint256 valuation, uint256 duration) returns (uint256) function make sense, or are there reasonable tax rate schemes that would break with that signature?
1 Like

Hey, thanks everyone for the interest in this EIP.

I’m going to try to shed some light in the rationales of why some features weren’t put into the standard draft:

owner vs leasor

Ownership is understood “in the context of the contract”. The contract (or the collector) are known to be the ultimate “owners” of the item. Also, owner is a standard label. Changing owner to leasor would make no functional changes.

There as discussion by Tim on what to do about ERC-721 functions, should they revert?

It would depend on the implementation, but the implementer is free to separate the taxpayer from the owner of the item as separate parties. Then, owner-exclusive functions can be called by owner, ERC-721 transfers don’t need to revert (because ownership is not a liability), and leasor remains the one paying the cost. This consideration to implementers can be added to the EIP.

views and setters for “tax rate”

Flat tax rates aren’t the only way to do taxes. For example, there’s progressive taxes. Or, you could create address dependent systems, for example, giving a lower rate to addresses registered in Proof of Humanity, or owning some NFT that makes you eligible for a discount. If a flat tax rate interface was desirable, it should be extended from this EIP-5320.

on calculating taxes

The standard doesn’t indicate how should they be calculated. In our PoC implementation we used timestamps, and calculated the tax rate over seconds. But taxes could be calculated by block counts, periods, or something else. It’s up to the implementation.

There a consideration to make here. If seconds are being used and the ERC-20 token to pay taxes with has “low precision”, the valuation is small, or the unpaid period is small, a naive implementation could have a divisor too large and turn the owed taxes for the collect call to zero.

security concerns over this implementation

In this Proof of Humanity proposal I outlined a few caveats:

Excluding collect, interactions must revert if the funds available to pay for the taxes on the seat are not enough to go over the cooldown period.

Then, I proposed a cooldown period of 3 months. What this means, is that if you were to acquire a token, you’d have to prepay taxes for 3 months. If something similar to this isn’t done, someone may acquire the token at a high price, do a damaging action, and then revoke it in some way, paying close to no taxes in the process.

Actions that wouldn’t be allowed (or, they could be allowed on the condition of forfeiting a portion of prepaid taxes):

  • revoking (or, if allowed, the prepaid taxes from timestamp to timestamp + period are not reimbursed)
  • defunding (likewise, defunding more than the taxes to complete the period is not allowed)
  • changing valuation (changing to something high is disallowed if prepaid taxes aren’t enough to cover the period. changing to something lower isn’t allowed during the period)

prepaid taxes vs allowance

Anyhow, I believe this is standard level worthy. Keeping it up to the implementer would make the main functions that are relevant to the standard unable to be standarized. So the discussion is relevant to the ERC. I’m divided between these two.

how to allowance-based taxes

If taxes are not pre-paid, then the leasor makes an allowance, and a function is open for everyone to collect taxes. If there’s not enough allowance or balance to pay the pending taxes, the token is revoked.


  • either collector or a third party need to manually claim the pending taxes. on the implementation level, a compensation for the gas expenses of collecting the taxes could be provided, for example, by sending a portion of the claimed taxes to the one that calls the function.
  • leasor can default on the latest unpaid taxes at any time.
  • no longer is it possible to force them to prepay a given amount, so “flash buy” attacks are possible. you can still impede the flash-buyer leasor to lower the valuation, but you cannot force them to sell the token for a certain amount.
    • flash-buyer defaults on the taxes and loses the token. the loss will be, at the very least, equal to how much they paid for the item.
    • flash-buyer makes a contract to effectively sell the token for less than the valuation (the contract buys at current price, they reimburse the difference to new leasor). The Harberger Tax contract can still forbid lowering the valuation, so leasors that acquire the item through this scheme could have to endure high taxes for a minimum period.

how to prepaid taxes

(This flow doesn’t need to be followed exactly, this is just an indication on how could it work)

When you buy a token, you also prepay a certain amount in taxes. You may choose this amount, and the contract may enforce a minimum.
A collect function is still there so that collector can realize partial tax payments, but no longer has to be called continuously to defend against defaulting. Only once, if there are not enough prepaid taxes to continue supporting the token.

If an action occurs that makes the previous leasor stop paying taxes, the remainder of prepaid taxes, if it exists, is reimbursed to the leasor.


  • It’s not as capital efficient
  • Doesn’t require collecting taxes manually and continuously to mitigate the loss of the leasor defaulting on the taxes
  • Prepaying taxes allows the contract to enforce leasors to prepay a minimum period. This makes flash-buy attacks more expensive, because the attacker would need to pay for the token to the previous leasor, plus a minimum period to the collector.

miscellaneous consideration for implementers

To increase the cost of attacks (such as flash-buy), or acquire a compensation, a fee could be included on every buy transaction, which could substitute the “minimum period” concept.

1 Like

Are you kidding? Glen Weyl literally wrote something called “Property Is Only Another Name for Monopoly”. I’ve had that bookmarked for over a year. Why you think I might be triggered by the word “tax” but somehow simultaneously okay with the outright abolition of private property, I do not know.

Harberger causes forced sales as if everyone is constantly in bankruptcy proceedings. It’s deranged. It would have forced Elon Musk to sell SpaceX to Lockheed and Boeing. Perhaps that is why you like it.

there is no moral high ground here

Against standardizing communism? Au contraire.

Build your communist utopia on Ethereum, by all means. But I will always oppose its standardization. If for no other reason than it sends a terrible message to the youth.

It is indeed ridiculous to abolish private property.

But there are many cases where properties are publicly owned. In the physical world, there are examples such as the usage of the radio spectrum, and the land of national parks. In the digital world, there is user attention (or ad spaces), since it is derived from the collective contribution of the users and developers and therefore should be owned collectively.

These are the cases where partial common ownership is applicable, not the cases where properties should be privately owned.

These types of resources/properties are usually allocated either by the government in a centralized and inefficient way or privatized by companies in an exploitive manner. Partial common ownership is useful since it provides a decentralized and market-driven alternative.

So standardizing partial common ownership is not about building a communist utopia, it’s about avoiding the need of having a communist government by extending the scope of the market.

1 Like

Please name one country where private property exists. According to the economists I spoke, if the state can foreclose property (e.g. given tax obligation), it’s not truly private. That’s the academic definition.

Since you mentioned US-american names, the USA also doesn’t implement true private property. So technically nobody wants to abolish anything - as what you’re talking about doesn’t exist in reality.

Partial Common Ownership is an applicable property scheme for assets that derive their value, at least partially, from network effects. The classic Georgian example is land. A conceptual separation of network effects from the owner’s capital and labor investments is necessary. In doing so, PCO schemes purport to improve the allocative efficiency for investments in these network effects (typically but not limited non-excludable goods), ultimately improving the value of the asset.

1 Like

But then calling it radical markets is a misnomer. It may be a system of exchange, but a market it is not. And if it were only about things which are already public, then it wouldn’t be radical either. There is a fundamental bait-and-switch with so-called radical so-called markets. Which is kind of par for the course in left economics.

Indeed, scheme is the correct word. Some should be rejected for having undesirable properties. This is one of those.

allocative efficiency

I don’t think there is allocative efficiency in turning a nascent startup over to the established interests it threatens.

Agricultural, educational and institutional properties on St Kitts are exempt from property taxes.

technically nobody wants to abolish anything

Is that what Glen Weyl says? And evidence of institutionalized theft isn’t evidence of public ownership. You have the two confused.

Lastly, where is the property tax on sports cars? I haven’t gotten any visits from the fuzz lately and I haven’t been paying anything to merely own my ride.

Remember when Happy Gilmore’s grandma had to bid on her own house? The only thing worse would be if she were not allowed to bid. That’s Harberger.

Guys, this is a forum for discussing the details of a technical spec. If you want to discuss the moral or political implications of this ideas, I suggest moving to twitter

1 Like

I think this would benefit from a view to see the balance of tax prepaid for an item.

function fundingFor(uint256 tokenId) external view returns (uint256);

This could also allow real time tax payments. fundingFor could be calculated as the result of a decreasing linear function which would be updated when the user adds more funds

100% agree. I’d appreciate if moral comments would get moderated actually.

Ride on the peace train; ooh ah ee aah ooh aah.

Nothing in this post should be construed as a commercial or promotional message. This message shall not engender feelings of an overly promotional or commerical nature. This post is neither an advertisement nor a promotion. Do not associate this post with its author or any product or service associated with its author.