taxemes in detail — a conversation

Johan Nygren
Nov 10, 2015 · Unlisted


progress in the past week →

Conversation between inventor and developer

johan.nygren9 [3:39 AM] i’ll give $300 to whoever builds a contract for this,, the tax-money could go to a fund that’s controlled by trusted people in the ethereum community, and they could then invest it based on what the community wants

a proof-of-concept


using a genetic algorithm for self-organising emergent tax-rates in a crypto basic income system

proposed replicator: “taxeme”

Nov 4th at 11:41 PM


johan.nygren9 [5:54 PM] “If my genetic algorithm idea works, then that might be ​_the first decentralised model for wealth redistribution_​. These “taxemes” could control more then just basic income tax, you could potentially code your taxeme to redistribute 2% to UBI and 3% to some healthcare-dApp and 1% to some city planning dApp. The most successful taxemes will shape the ‘Resilience’ redistribution machine, and human consumers will be able to use ​*taxemes*​ to influence how wealth is redistributed in the DAO economy.”

jeffreybpetersen [11:25 PM] joined #general

jeffreybpetersen [11:38 PM] I’d be interested in putting together the contract. Think you can get me up to speed on all the algorithmic details?


— — -

November 6th

— — -

12:46 AM]
Uploaded an image: algorithm

Add Comment

johan.nygren9 [12:51 AM] @jeffreybpetersen: that would be amazing. can you make out the details from this image ?

jeffreybpetersen [1:06 AM] Let me check: To start each node defines their personal taxeme by setting a value that indicates a tax rate.

johan.nygren9 [1:06 AM] yup

johan.nygren9[1:06 AM]they can change it at any time

jeffreybpetersen [1:06 AM] When a node participates in a transaction, how does the inheritance work?

johan.nygren9 [1:07 AM] passed down to you (edited)

johan.nygren9[1:07 AM]and stores the amount you transacted

jeffreybpetersen [1:07 AM] Passed to you by all the other participants in the transaction?

jeffreybpetersen[1:09 AM]If I had a taxeme of 10% and you had a taxeme of 50%, and we made a transaction, then what would happen?

johan.nygren9 [1:10 AM] if I sent a transaction to you for 2 ETH, i’d inherit your 10% taxeme and it would store an integer with the transaction amount, 2 ETH

johan.nygren9[1:11 AM]i would then have 2 taxemes, my 50% and your 10%

johan.nygren9[1:11 AM]the 10% taxeme would be dominant

jeffreybpetersen [1:11 AM] So a taxeme conceptually consists of a rate and a list of transactions?

johan.nygren9 [1:13 AM] when a third person sends a transaction to me, it would be taxed by the dominant taxeme, and they would inherit the 10% taxeme

jeffreybpetersen [1:13 AM] Is the inherited taxeme defined by which is dominant or which is lowest?

johan.nygren9 [1:14 AM] both, the lowest is the dominant

jeffreybpetersen [1:14 AM] Ah, ok.

jeffreybpetersen[1:15 AM]So taxemes work strictly with 2 party transactions of something with taxed value for something else?

jeffreybpetersen[1:15 AM]In this case the taxed value being Ether.

jeffreybpetersen[1:18 AM]And inheritance is always from the party receiving the taxed value to the party sending it?

johan.nygren9 [1:18 AM] yes, it’s passed down from the receiver to the sender

jeffreybpetersen [1:19 AM] And then if you ever exhaust your set of taxemes you default back to your personal taxeme?

johan.nygren9 [1:19 AM] yes

jeffreybpetersen [1:20 AM] And if you would ever inherit a copy of your personal taxeme then the copy is instead destroyed?

johan.nygren9 [1:20 AM] yes

jeffreybpetersen [1:20 AM] Ok, I’m trying to think if there’s anything I’m missing at this point.

jeffreybpetersen[1:20 AM]Ah, how does the taxing itself work?

johan.nygren9 [1:21 AM] it could be sent to a fund for now, like, just an address on the first draft

jeffreybpetersen [1:22 AM] When you make a transaction, is the tax rate that of the inherited taxeme?

johan.nygren9 [1:22 AM] of the lowest, always

jeffreybpetersen [1:23 AM] The lowest as held by both the sender and receiver or only one of them?

johan.nygren9 [1:23 AM] receiver

jeffreybpetersen [1:23 AM] So then it would be that of the inherited taxeme.

jeffreybpetersen[1:24 AM]Do you always hold a copy of your personal taxeme or can it be passed away and only reappear in your set of taxemes when your set is exhausted?

johan.nygren9 [1:24 AM] always hold a copy

jeffreybpetersen [1:25 AM] So any taxeme you would inherit that has an equal or greater rate than your personal taxeme is essentially destroyed. (edited)

johan.nygren9 [1:25 AM] its silent, dormant

jeffreybpetersen [1:26 AM] Is there any way for it to become active again?

johan.nygren9 [1:26 AM] you might change your tax-rate and they might become active again

jeffreybpetersen [1:26 AM] Ah, I didn’t think of that.

johan.nygren9 [1:26 AM] if you raise your tax-rate above that of the dormant inherited taxeme

jeffreybpetersen [1:28 AM] And then the taxes are always the proportion of transactions that the receiver pays to tax collection?

jeffreybpetersen[1:28 AM]As opposed to being an additional amount that the sender has to pay on top of the base transaction.

jeffreybpetersen[1:29 AM]Like if I paid you 2 ETH and you had a 50% taxeme active then you would get 1 ETH and 1 ETH would go to tax collections?

johan.nygren9 [1:30 AM] yes

johan.nygren9[1:30 AM]proportion is easiest

johan.nygren9[1:30 AM]both work

jeffreybpetersen [1:31 AM] I agree, it’s a lot more intuitive than typical taxes.

jeffreybpetersen[1:31 AM]Being able to forward taxes immediately does a lot to help simplify things.

jeffreybpetersen[1:32 AM]I think I’ve got the algorithm down for how taxemes work.

jeffreybpetersen[1:33 AM]I’m curious what your ideas are for managing the collected taxes in the long run?

jeffreybpetersen [1:42 AM] As well as on incentives to participate.

johan.nygren9 [1:48 AM] at this moment, i’d like to just test the taxeme framework, its a lot to process at once. the original plan was to use the tax for basic income, and to distribute it based on a ​*web of consumption*​

jeffreybpetersen [1:53 AM] Ok, I know enough to put that much together.

jeffreybpetersen[1:53 AM]I’m interested in the details of how the web of consumption would work if you want to get into it.

johan.nygren9 [1:59 AM] it uses what i call ​*dividend pathways*​,
dividend flow through them, sort of like electrical currents, and the pathways get used up as dividend flow through


How to Create Resilience

Dividend Pathways [2015]

jeffreybpetersen [2:05 AM] I’m guessing it works through creating a dividend pathway from the taxbase of a swarm to an individual who sends value into the swarm?

jeffreybpetersen[2:07 AM]And then the dividend pathways are essentially a capacity for total individually received payouts from collected taxes?

johan.nygren9 [2:09 AM] transaction tax is divided on everyone who has a dividend pathway connection. if I send you 2 ETH and your dominant taxeme is 10%, then 0.2 ETH is divided on lots and lots of people

jeffreybpetersen [2:11 AM] That would be among a set of people who have a dividend pathway specifically from me?

johan.nygren9 [2:11 AM] yes

johan.nygren9[2:12 AM]and those who have a dividend pathway from them, and those who have a dividend pathway from them

jeffreybpetersen [2:12 AM] How is the division proportioned?

johan.nygren9 [2:16 AM] the dividend pathways have a ​*weight*​, Rp, a pathway made to someone who has a 2% taxeme has an Rp of 2%, and will be less conducive to dividend then a pathway with an Rp of 5%

2:17 AM]
Uploaded an image: swarm-redistribution

Add Comment

jeffreybpetersen [2:19 AM] Which taxeme determines the weight? The taxeme active in the transaction that formed the pathway? The personal taxeme of the sender? The currently active taxeme of the sender?

johan.nygren9 [2:20 AM] the taxeme active in the transaction that formed the pathway

jeffreybpetersen [2:23 AM] So when you pay taxes you’d distribute them evenly by weight among all dividend pathways leading out from yourself?

johan.nygren9 [2:25 AM] think of it as running an electrical current through pathways with varying resistance. a pathway with 2% Rp that is down-streams from one with 1,5% Rp will receive the same current as the 1,5 % Rp did

johan.nygren9[2:25 AM](see animation)

jeffreybpetersen [2:26 AM] Ah, that explains it.

jeffreybpetersen[2:28 AM]What happens when there are multiple streams from A to B? Such as A to C to B and A to D to B?

johan.nygren9 [2:35 AM] A to C (or D) to B will block A to D (or C) from continuing to B

jeffreybpetersen [6:48 AM] I’m guessing you’d take the maximum of the two?

johan.nygren9 [8:09 AM] mm, path of least resistance

— — -

November 8th

— — -

johan.nygren9 [2:39 AM] @d11e9 @howardpmarks @jeffreybpetersen Vitalik commented on the genetic algorithm idea and said it was “moving in an interesting direction” :simple_smile:


using a genetic algorithm for self-organising emergent tax-rates in a crypto basic income system • /r/ethereum

8 points and 6 comments so far on reddit

johan.nygren9[2:40 AM]@jeffreybpetersen: are you still up for coding the taxeme-concept ?

jeffreybpetersen [3:13 AM] I am :simple_smile:

johan.nygren9 [3:15 AM] wonderful ! :smile:

jeffreybpetersen [3:17 AM] One last question when it comes to implementing it, since there’s more than one way of sorting each set of taxemes, is a heap that selects for the minimum good by you?

johan.nygren9 [3:20 AM] a heap is good

jeffreybpetersen [3:28 AM] Any future optimizations should be able to port over taxemes from older implementations with a little extra code to talk to the older contract.

jeffreybpetersen[3:32 AM]Like the heap will have pretty regular gas costs whereas a radix sort could vary a lot depending on what kind of values people use.

jeffreybpetersen[3:34 AM]Namely it would cost a lot to have fine grained tax rates but could be cheaper for round numbers vs. a heap.

jeffreybpetersen[3:35 AM]Hard to tell without seeing it in use first…

jeffreybpetersen[3:36 AM]Should I make a public repo on GitHub for the contract and related details?

johan.nygren9 [3:36 AM] that would be great

jeffreybpetersen [3:36 AM] My account or under an org?

johan.nygren9 [3:37 AM] your account is good

jeffreybpetersen [3:58 AM] Just to check, you can have multiple copies of someone else’s taxeme at once?

johan.nygren9 [4:03 AM] yes. if multiple taxemes in the same tax-rate are inherited, its probably easier to model it as one taxeme and to add the transaction amount

jeffreybpetersen [4:03 AM] Right, I forgot about the transaction amounts.

jeffreybpetersen[4:04 AM]What are the records of the transaction amounts used for?

johan.nygren9 [4:07 AM] For when the taxeme is passed on to a new node. If I’ve inherited a 2% taxeme with the size of 100RES, and its my dominant taxeme, and you send me 50 RES, then you’ll inherit half of it, and i’ll still have a 2% taxeme with the size of 50 RES

jeffreybpetersen [4:11 AM] And then I’ve also got a 2% taxeme with 50 RES, or if I already has a 2% taxeme then it’s now 50 RES larger correct?

johan.nygren9 [4:12 AM] if you already had a 2% taxeme that originated from the same node as this 2% taxeme, then its added, otherwise, you get 2 different ones

johan.nygren9[4:13 AM]the taxemes have to be traceable to their origin nodes

jeffreybpetersen [4:14 AM] If you change your personal taxeme, then does that also change all copies of it?

johan.nygren9 [4:14 AM] not the copies that have been inherited by others

jeffreybpetersen [4:15 AM] Right, the taxemes need to be traced because they’re destroyed if they return to their origin.

johan.nygren9 [4:15 AM] yep

jeffreybpetersen [5:33 AM] If you have a 50 RES 2% taxeme and a 100 RES 3% taxeme and I send you a transaction of 100 RES then it would use the 2% taxeme for the first 50 RES and the 3% taxeme for the second 50 RES for an effective tax rate of 2.5% leaving you with a 50 RES 3% taxeme?

jeffreybpetersen[5:34 AM]And me with a 50 RES 2% taxeme and a 50 RES 3% taxeme.

jeffreybpetersen[5:37 AM]Trying to get at whether you continue to the next taxeme if the current lowest one is exhausted during a transaction.

johan.nygren9 [9:36 PM] yup, it continues to the next taxeme, leaving you with a 50 RES 2% taxeme and a 50 RES 3% taxeme.

— — -


November 9th, 2015 — — -

jeffreybpetersen [6:52 PM] If someone inherits multiple taxemes with the same rate, then in what order should they be passed on?

jeffreybpetersen[6:54 PM]FIFO?

jeffreybpetersen[6:58 PM]And I figure you’d like balances held under contract so that taxes can be easily enforced?

jeffreybpetersen [7:09 PM] Also, would you like support for tax rates above 100% and if so how would you like that handled in the case of an insufficient balance?

jeffreybpetersen [11:11 PM] I’m currently working out how to best encode the rates given the lack of floating point support in Solidity. I’m leaning towards a simplified implementation of floating point with a constant exponent, leaving all the bits for the mantissa (no sign bit either unless you want negative rates available). A very minor drawback would be the lack of a 100% tax rate, instead having the largest possible rate be 1–2^bits_in_mantissa (99.998% for 16 bits).

— — -


November 10th, 2015 — — -

johan.nygren9 [1:03 AM] first in first out sounds good

johan.nygren9[1:03 AM]you are better then me at floating points and so on

jeffreybpetersen [1:15 AM] And keep the tax rates in the 0% to 100% range?

johan.nygren9 [1:17 AM] yup

jeffreybpetersen [1:22 AM] If my taxeme is set at 2%, and I inherit another 2% taxeme, then should the other taxeme remain dormant unless I raise my rate or should my taxeme be given minimum priority at the given rate?

jeffreybpetersen[1:25 AM]FIFO would imply the others remain dormant.

johan.nygren9 [1:31 AM] probably make the inherited taxeme dominant and yours given minimum priority, so personal taxeme is an exception in FIFO

— — -

November 11th

— — -

jeffreybpetersen [10:55 AM] Making steady progress so far, let me know anytime you’d like specific updates



Including if you want me to polish up whatever I’ve got at the moment and push it.

jeffreybpetersen [11:16 AM] An interesting property I came across is that it’s possible to treat everyone as a member of the system, where a lack of explicit participation is effectively a personal taxeme at 0%, and transactions must always be declared by the sender as otherwise anyone could force arbitrary taxemes onto anyone else so long as they’re willing to pay the associated tax costs.

— — -


November 12th, 2015 — — -

johan.nygren9 [1:56 PM] excellent


“An interesting property I came across is that it’s possible to treat everyone as a member of the system”
that’s been my intuition too

— — -

November 15th

— — -

jeffreybpetersen [1:04 AM] Does anything need to be tracked with individual inherited taxemes besides their creator, rate, and current size?

johan.nygren9 [11:05 AM] Not sure. This is the first time the framework is being tested. It might make sense to track the origin of a taxeme by logging how much of a particular taxeme a node has originated, in a particular tax-rate. That node will then collapse taxemes in those tax-rates.

johan.nygren9 [11:06 AM] uploaded an image: taxemes

Add Comment

johan.nygren9 [4:55 PM] instead of logging the creator of a taxeme, each creator logs what taxemes they have originated, and act as destructors for taxemes in those tax-rates
this increases the amount of turn-over for taxemes. the likelyhood that a specific taxeme will return to its creator is probably low, but the likelyhood that a taxeme of a specific tax-rate will return to someone who originated a similar taxeme would be much higher. higher turn-over seems like it would work better.(edited)

johan.nygren9 [5:15 PM] not sure why i didn’t mention this first, it’s a very complex system with many parts and it was probably conceptually easier to describe it as “creators of specific taxemes collapse taxemes that return to them” while i walked you through how the inheritance worked etc(edited)

jeffreybpetersen [11:10 PM] So with this change to the model, if someone creates X worth of a Y% tax rate, then they’ll collapse the next X worth of taxemes inherited that have a Y% rate?


Such as if my active rate is 5% (whether my own rate or a taxeme I inherited), and people inherit 100 ETH worth of that 5% rate from me, then the next 100 ETH of 5% that I inherit myself will be collapsed instead of passed on?


If I’m understanding it correctly then the net effect is proportionately reducing the size of taxemes as they’re passed on, specifically by half.


Since it’d be alternating between passing on a specific tax rate and collapsing it.

— — -

November 16th

— — -

johan.nygren9 [8:57 AM] only the original creator would act as a destructor. taxemes that are passed on would not count.

jeffreybpetersen [8:59 AM] So if I’ve created 100 ETH of 5% taxemes then I’ll collapse the next 100 ETH of 5% taxemes that I would’ve otherwise inherited?

johan.nygren9 [9:00 AM] yes

jeffreybpetersen [9:06 AM] And forgo the previous collapsing upon return to origin?

johan.nygren9 [9:11 AM] probably. it might still be interesting to track the origin of a taxeme, to see how they spread, but this new model would replace the role of that in taxeme turn-over.


Johan Nygren

Written by

The basic income revolution through p2p-technology, deployed @ a planetary scale.Followed by TED-speakers & SingularityU-CEOs,this is an idea worth spreading !