taxemes in detail — a conversation

Johan Nygren
12 min readNov 10, 2015

--

UPDATE:

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,https://medium.com/@resilience_me/using-a-genetic-algorithm-for-self-organising-emergent-tax-rates-in-a-crypto-basic-income-system-fbb9d60ba7fa, 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

Medium

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

(edited)

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?

:heart:1:simple_smile:1

— — -

November 6th

— — -

johan.nygren9
[
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*​,
https://www.youtube.com/watch?v=bxyjt2T_nLQ
dividend flow through them, sort of like electrical currents, and the pathways get used up as dividend flow through

YouTube

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%

johan.nygren9
[
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:https://www.reddit.com/r/ethereum/comments/3rk0js/using_a_genetic_algorithm_for_selforganising/cwqu708

reddit

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.

— — -

Yesterday

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).

— — -

Today

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

:heart:1

[10:56]

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.

— — -

Yesterday

November 12th, 2015 — — -

johan.nygren9 [1:56 PM] excellent

[1:58]

“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?

[11:12]

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?

[11:15]

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.

[11:16]

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

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