Paying Drivers To Not Drive: Congestion Pricing Inspired by Ethereum's Blockspace
Also: Worst Writing Advice, Roman Verostko, and Oceans Niagara Remix
This week, the governor of New York made an about-turn in indefinitely delaying NYC’s planned congestion pricing. In an effort to reduce congestion, reduce pollution, and drive commuters to more sustainable transportation alternatives, a price is introduced to discourage drivers from entering a certain region. This would’ve been implemented in Manhattan south of 60th street.
In some cities it has been successful (with society often coming to appreciate it after the fact), and in others, various schemes have been shot down due to being seen, among others, as restricting movement (in Costa Rica) or adding a cost/tax to middle class or poorer commuters.
This video from CityNerd describes the trade-offs quite well.
Transportation economists have proposed many different schemes and forms of congestion management exist in different forms across the world. From permanent road space rationing in Sao Paulo, to dynamic pricing tolls on the I66 in Virginia.
Two interrelated problems with congestion pricing is a problem of inequality (you’re ultimately pricing out poorer road users), and whom to pay. In the case of NYC, much of the funds were earmarked for improving the MTA. Some economists have proposed alternatives such as direct payments to those who have opted out of driving as a result of congestion pricing. I like this latter idea a lot. It changes the calculus slightly from requiring people to pay-to-drive to get-paid-to-not-drive: “We’ll pay you to not drive today.”
This principle of congestion pricing to move from a pay-to-drive to get-paid-to-not-drive is an interesting alternative and one that will probably result in more wider adoption of congestion pricing schemes. Some variations of this exist in schemes where drivers get rewards for driving in off-peak hours vs peak hours.
Singapore’s Travel Smart Programme gave commuters points that could be exchanged for public transport credits if they took the bus instead of the train during certain hours.
In the Netherlands, you had Spitsmijden experiments that paid drivers who drove in off-peak hours.
A key problem is trying to figure who exactly to pay to stay home and where that money comes from.
Luckily, we have a tangential system in place today and it comes from blockchains: managing the common good that is blockspace. Every few seconds, only a certain of transactions can be cleared and users pay to get them included. Changes in 2021 in Ethereum added one benefit: it *also* rewards those who choose not to use the blockspace.
Let me explain.
Ethereum’s Blockspace
With EIP 1559 introduced in August 2021, a user must pay a base fee (that they can’t control and is set by the demand of the blockspace) and priority fee (a tip to increase the priority in the queue). Put somewhat differently by Coinbase:
The base fee will be a standard charge that all users will pay. It will be calculated by the network based on network traffic. The tip will be an optional extra payment that users can pay to speed up their transactions.
Notably, the tip is distributed to the “miners” and the base fee is burned. The miners are comparable to paying for infrastructure and here’s where it gets interesting: Burning the base fee entails reducing the supply of ETH and therefore, if demand stays the same, it will increase the value of ETH. Thus, if you merely hold ETH and you are not using Ethereum, all-else-being-equal, your ETH will go up in value if others are using the network.
While it’s not strictly a pay-to-avoid scheme, it’s a reward for merely being a participant even when you aren’t using the common good.
In NYC’s congestion pricing scheme, one can argue that it hopes to reward all New Yorkers by reducing pollution, reducing congestion, and upgrading the public transport infrastructure, but you will ultimately have people that fall through the cracks. Perhaps there’s someone that only have to drive a short few blocks, but they cross the boundary line every day. Or, some people that are scared of public transport (eg, maybe they’re immuno-compromised and prefer safety of a car).
But, if one can design a system that also directly rewards people financially for not driving from proceeds of those who pay to use it, you will like garner more public support.
An EIP 1559 Congestion Pricing Scheme
So, what would a congestion pricing scheme look like that is inspired by how Ethereum manages its blockspace?
The base of it is a road space rationing scheme. This is commonly done by license plate number. Eg, on Wednesdays, only cars that end on a ‘1’ are allowed to drive for free. If are you allowed to drive that day, you will be offered a reward to stay away. If you do stay away for the entire day, you get that reward as a direct payment.
If you are a driver who wants to drive but you can’t drive for free that day, you will pay a fee and in doing so cover the costs of the reward to pay the other drivers to stay away.
This fee can be determined in different ways.
Have an algorithm determine this fee. Drivers can buy access the day before, which is the pot for the next day for other drivers to stay away. If they do NOT buy access the day before, then they will pay an additional penalty to drive that day.
Have an auction determine the clearing price.
The fee can also be split in different ways.
If it’s not about raising revenue and only about managing congestion, then the entire fee can be offered to the other drivers to stay away.
It can be split between infrastructure and others. Like Ethereum burning the base fee (for benefit of everyone) and sending the priority fee to miners (infrastructure).
Algorithmic Fee
The goal of this fee is to reduce congestion and ensure that it’s high enough for other drivers to opt to stay away on the days that they can drive.
A base_fee here can determine a fee that’s tied to overall demand for roads and essentially sets a minimum price. A different part of this fee (stay_away_fee) is essentially such that it entices drivers to buy a pass the previous day AND ensures that the drivers who see the rewards, opts to stay home.
If drivers don’t buy access, then the pot to offer the next day to drivers to stay away might be too small. You essentially want to minimise drivers who choose to pay a penalty instead of participating in the program to buy passes or accept the money to stay away. When drivers opt to pay a penalty instead of buying a pass, it’s a signal that (mostly says that) the market clearing price wasn’t appropriate.
If a lot of drivers buy access and drivers don’t stay away, there could also be a mismatch. Thus there are two competing forces here and the algorithm need to balance the desire to pre-buy access vs paying drivers to stay away.
An alternative is to consider a more direct auction between drivers. This is where it gets more complicated as you start veering into the trade-off of a more optimal market against the cost of having to participate in it. In some instance, it’s not worth it.
A Dutch Auction
Instead of buying a pass with an algorithm determining clearing price, a driver has to participate in a dutch auction *if* they want to drive the next day and they are not allowed to drive for free. If they do not, they pay the penalty fee. If they also fail to buy access through the auction, then their only alternative is to pay a penalty the next day. This always encourages drivers to participate in the market making and set the prices they deem desirable.
The fee is comprised of:
A dynamic_base_fee + paying_others_to_stay_away_price
The paying_others_to_stay_away_price is a daily dutch auction that starts at a high price and descends over time until enough drivers have entered a bid to cover all the drivers who are allowed to drive for free that day. In other words, if 10,000 drivers are allowed to drive for free the next day, then after 10,000 bids, the auction ends and that is the clearing price. A dutch auction prioritises those who wish to be guaranteed of a spot. In other words, if the starting price is $100, you can bid for a spot at $100. Then, the price keeps descending until it reaches $0. If the rest of the 9,999 bids end at $2, then that is the clearing price for all drivers who participated in the auction. If you bid at a high price, it’s showing a stronger need to drive the next and avoiding the penalty.
Assume the base fee is $5 that day. To drive on that day if you are not allowed to drive for free AND you participated in the auction, it will then cost the driver $5+$2 = $7. If you don’t participate in the auction, you must pay a penalty to drive (say, 2x stay away price, thus $9). The penalty should be high enough to encourage drivers to participate, but not too high to completely discourage last-minute driving if needed.
This auction doesn’t directly factor in how many drivers will accept the reward to stay away or not. It might be that the clearing price is high one day, creating a sizeable pot and that drivers simply do not choose to stay away.
Thus, a factor in the dutch auction that could be controlled by whether drivers accept to stay away or not is at what price the dutch auction starts at or ends.
On some days, this pot might have money left and that could also influence the prices (or be distributed to the MTA or form of a new pot).
Ultimately, you’re still playing off two markets against each other. Those who wish to drive and those who are expected to stay away and they might not always match.
If more complexity is warranted, it could even eventually price discriminate in that realm too: fluctuating the price per driver based on how often they stay away or not. But, this starts getting into more troubling territory. It’s like when it was suggested that Uber prices cars based on how willing you are to accept a quoted price. It makes sense from a price discrimination perspective (charger richer people), but it *feels* unfair. There are proposals for a more multi-dimensional fee market in Ethereum and perhaps that too can provide inspiration.
Conclusion:
There’s a lot of economic experiments happening daily in the blockchain space that have to do with managing common goods (such as blockspace) as well as lower-cost-to-transact tools such as automated market makers and dutch auctions. I’m not sure if there’s much cross-pollination from transport economics (and wider urban economists) in looking at the blockchain experiments to potentially inform and inspire ways to think about how to manage common goods in the real world. My solution isn’t perfect, but it’s directional. There’s still plenty outstanding questions.
Outstanding Questions:
Regular drivers vs irregular drivers. How does this system affect regular and irregular drivers?
What’s the starting point of the dutch auction? Is it correlated to whether drives stay away or whether drivers want to pay a lower price to drive on the days they cannot?
Is there collusion possible? Uber drivers historically manipulated surge pricing by all collectively turning off their apps. It could result in a similar outcome if drivers not accepting the stay away price result in the market or algorithm raising this price by a lot.
Road space rationing schemes are flexible in choosing digits on the license plates. eg, If you allow 1 of 9 digits, then you hope to reduce traffic by 11%. This is another independent variable to work with. Could it be applicable?
Does it matter how you split the base and priority fee? In Ethereum, the base fee is burned (the benefit to all) vs the priority fee going to the miners (to the benefit of the infrastructure providers).
Where is the boundary of those who are expected to stay away? In this scheme, you might literally be able to get a car and then just never drive and earn money through that. So, how do you decide who gets paid and who doesn’t? One solution: you can draw line/boundary somewhere as to who is in the scheme or not. Or it could be something like: those who have entered is in the system for 30 days until they enter again. In Ethereum, you have access to ETH, which is regarded as a common good asset. If you increase that value, then it’s regarded as benefitting a large portion of the users of the system. But, in the real world, you don’t usually have access to such an asset.
Road space rationing schemes suffer from rich people buying second cars to avoid paying fees. This scheme suffers more from that when you could effectively pay nothing if you also receive money for your other car. It’s why *some* of the fee going somewhere else might be needed. But, generally, because there’s a record of cars and where they are registered, this could be mitigated to some extent. Feel like this falls into the territory of having to design frameworks for uncoordination. You can’t avoid it entirely and have to design for the average case.
This system adds an extra burden on having to participate in an auction the day before if you wish to drive without paying a max penalty. For drivers staying away, it’s simpler: see a price in the morning and determine whether it’s worth it or not. But for drivers who want to drive, it means participating in a dutch auction. Markets are costly and they need to be more beneficial than the effort required to use them. Sometimes, simpler is better even when knowing that the system might not operate at most efficient capacity.
I’m sure there’s other problems here too. Feel free to tell me where I’m wrong. 😅
At the end of the day, hopefully it serves as inspiration for more cross-pollination of ideas and solutions.
Bonus Content!
I’m travelling a bit this week. In California again, and damn, do I love and adore the dry heat. So nice. It comes from my childhood, growing up in the Western Cape in South Africa. Also, happy that The Acolyte finally graced our screens. Thoroughly enjoyed the first 2 episodes. Excited to see where it goes from here! Also, been trying to find a running shoe that fits the middle-ground of being a daily trainer and faster shoe for race days (which means it also needs to do long distances). So, I’m trying the New Balance Rebel V4 and wow, feel like I’ve found my new favourite middle-ground shoe. I haven’t taken it out on a long run yet (max 8km), but feeling positive so far. :)
Worst Writing Advice
I enjoyed this conversation between Brandon Sanderson & Tim Hickson. The inverse of tackling the worst advice is great. Makes me wonder what else is worst advice (that’s oft repeated) in other industries.
Roman Verostko RIP
Roman Verostko passed away this week. He was a computer art pioneer. One of the earlier algorithmic artists, he created art from programming. Nowadays, it’s taken for granted, but uttering the idea that the “instruction is the art” was novel at the time.
Story Engines
After my essay on story length and stakes, Tom Beck sent me this article that spoke to the concept of “story engines”. It’s what drives a story forward: from character engines to plot engines to theme engines to form engines.
It is also probably fair to argue that some engines are capable of powering larger machines. While I think the “plot-driven or character-driven” binary is wrong, plot engines and character engines—I’d probably add theme engines to this pair—have an easier time running a novel than form engines and language engines. The reverse might also be true. It’s quite possible that the more constrained form of short fiction—especially flash fiction—has an easier time functioning with a form engine than a plot one that may overpower it and cause it to short.
M83 - Oceans Niagara (Soft Moon Remix)
One of my favourite songs of 2023 was M83’s Oceans Niagara. So, I’m constantly delighted to listen to the remixes. Another great one.
That’s it for this week, folks.
Hope you get to enjoy a lovely sunset! See you next week.
Simon