US citizens aren't able to participate in setting our national priorities in any meaningful way beyond choosing who to elect every few years. Our system of representative democracy certainly has its benefits, but it was formed in a time when messages and news were delivered by horse over days or weeks. Even if a better form of democracy were dreamt up, it would have been logistically difficult.

Today, in a time when messages and news are shared instantly, the government is paralyzed with inaction, and much of the US citizenry feels the government isn't responsive to the priorities of the people, we have an opportunity to rethink the balance between representative democracy and direct democracy.

What it does

Tax Buckets is a concept app that allows citizens decide how to allocate up to 10% of their taxes. It shows the user the breakdowns for discretionary and mandatory federal spending and let's them set new funding priorities for discretionary spending. It records the allocation on the Ethereum blockchain for public auditability.

The app seeks to give some semblance of control over the government back to its people. While representative democracy will always be necessary, giving citizens direct control over a small portion of their taxes provides a meaningful and measurable way to engage the population and respond to their needs.

How I built it

I used Truffle framework to get started. It not only gives a great interface between Javascript and Solidity contracts, but also sets up React, Redux, and testing / deployment tools.

I added Material UI to make it look good, and I found Google Charts to be the cleanest library for implementing pie charts.

After sketching out the UI, I implemented the frontend design and UX features, then wrote the solidity contract to store the records.

Challenges I ran into

The major challenge is thinking about how user verification needs to happen. There are a number of issues: 1) The blockchain is public and we wouldn't want to store personally identifiable information on it (like SSN), 2) We need to validate a user's SSN number somehow. Even if the government implemented this and had access to verify tax records, the flow in doing so with the blockchain wasn't clear.

What I came up with is a process where:

1) The user selects their allocation amounts 2) The user authenticates against a government service (, or customer SSN + last year's Annual Gross Income) 3) The user registers their Ethereum wallet address with the government service 4) The user signs their transaction on the blockchain 5) When the government service sees a transaction of a known user, it calls a method on the smart contract to validate it. If an unverified transaction occurred, it would necessarily not validate it.

Accomplishments that I'm proud of

Finding an interesting use case for blockchain / distributed public ledger. Then actually implementing a proof of concept.

What I learned

I spent a good amount of time researching the budget and budget process before starting to code. There were a number of interesting tidbits including the fact that the Office of the President can essentially unilaterally implement an experiment like Tax Buckets. Congress would of course have to approve the final budget, but the will of the citizenry can be fairly easily taken into account.

What's next for Tax Buckets

On the product side, there's plenty to do including:

  • Adding more educational materials about each line item
  • Breaking down the budget into subcategories and even State / Local budgets
  • Making the app more mobile friendly
  • Solving for the necessity to adopt Ethereum (and acquire ether) to submit transactions

Beyond that, to actually integrate it into government systems and have the Executive and Legislative branches muster enough political will to try it is a major hurdle to overcome. But the Tax Buckets concept can work for other governments first, perhaps local city governments or sovereign island governments.

Built With

Share this project: