Case discussion on the EIP process, based on EIP-1900 & EIP-1

For one thing, you said you had tried to ping EIP editors, but had only pinged Nick Savers. Did you mean to ping Nick Johnson? Is it possible you were mad at him for not replying to a message that was never sent to him?

I pinged Nick Savers because I saw he was reviewing EIPs at that time. There was no other active reviewer at that specific time.

I also posted in https://gitter.im/ethereum/EIPs?at=5c9ce69caee5b449f3aafdcb

Just opened an issue for an EIP that I want to propose, to gather feedback: Decentralized Type System ethereum/EIPs#1882. There are links to the current in work implementation & a demo video. Comments, suggestions are really appreciated and I think we need this if we want better interoperability.

No, I did not confuse Nick Johnson with Nick Savers.

Is this an instance of miscommunication from my part?

@danfinlay, it has been 18h hours and you have not answered. If anyone else wants to answer how this constitutes miscommunication from my part, I am open to hear it.

Otherwise, unless another instance of alleged miscommunication is produced in the next 12h, I will consider that I have not miscommunicated during the EIP-1900 process. And we can move to the next point.

Sorry, there are a lot of things that have been demanding my attention lately. I’m fine conceding miscommunication was not your problem. Instead, it was maybe getting angry when no malice was intended.

If you’re going to take one point at a time, I’m not sure I’ll be able to maintain the discussion. I might suggest a forum like kialo that allows many nested points to be addressed very specifically at once, if you require this kind of granularity to the discussion.

Sorry, there are a lot of things that have been demanding my attention lately.

You opened the discussion in the first place.

And the only reasons for which I am willing to put time into this myself are:

  • I valued your opinion and wanted to see the exact points on which we agree and disagree
  • I started this as a discussion on the EIP process, to see if I could have done anything better when proposing EIP-1900 (others might be interested in this too)

I’m fine conceding miscommunication was not your problem

Ok. But I hope it is not because of the medium or lack of time.

Instead, it was maybe getting angry when no malice was intended.

Then this will be the next point.

If you’re going to take one point at a time, I’m not sure I’ll be able to maintain the discussion

I think there is no other way to clarify a situation.

I might suggest a forum like kialo

You offered me the option to choose the medium and I thought the EIP process discussion could be useful here. We can use kialo (which seems great) for the other, unrelated topics.

Instead, it was maybe getting angry when no malice was intended.

https://twitter.com/danfinlay/status/1168192376294105088
but I think some of that un-clarity was met with overly quick hostility

I already said: “I can’t know if he acted will malice. That is not under contention.”

What was the first occurrence from issue #1882 that you consider as “overly quick hostility” or “getting angry”?

@loredanacirstea Why do you take this personally, instead of accepting it as an outcome of a flawed implementation of the EIP process? You’re not the only one who has been affected in a similar way.

I take this personally because: The Ethereum Unicorn.
If I see a problem, I want to fix it. If I am not the only one, then where are they and why are they not doing the same as I am? I am using this case discussion to exactly determine the problems. I am willing to fight for others and find solutions - see my EIP-1 process proposals.

@danfinlay, I do not want us to forget the state in which this discussion is, so I am pressing ahead. Since you seem to not have time, I will make an assumption and answer the question for you.

So, I will assume the first instance is in: https://github.com/ethereum/EIPs/issues/1882#issuecomment-507619192

I suggest you pay attention to how clearly you phrase your questions before being unsatisfied with the answer.

The sequence of interactions that resulted in my above phrase is:

One interface can have many implementations, but there doesn’t seem to be any distinction made between the two here. comment

LC: Are you referring to the dType registry interface and implementation or to the type library? comment

No, I’m talking about the distinction between a type definition and an implementation. For example, the ERC20 standard defines some types, which are implemented by a large number of different contracts. Capturing the ability for a type to have many implementations seems like a pretty basic feature to support. comment

If the word types has the exact same meaning in both ERC20 standard defines some types and in ability for a type to have many implementations, then:

  • The ERC20 standard defines functions types and devs can indeed implement the functions as they please.
  • ERC20 function types can be defined & registered as types in dType. Devs can still implement them as they please.

But, I assumed that the problem was with non-function types. And from this perspective, the ERC20 example is a bad example (I was confused because of it).

  • Solidity is statically typed -> building a type system on top of it is restrictive -> the best solution that we found is one based on structs.
  • when you describe a custom struct with dType, you can generate its implementation -> devs are not free to change the implementation, which is an automation feature; but devs are those who propose the type description in the first place.

Therefore, my answer:

LC: Devs have the freedom to implement type helper functions, as long as the required ones are implemented (to be discussed). As for the definition, I am open to other proposals that not necessarily based on structs. I am actually trying to have optional subtypes, that can be stored with map. dType registry will be extended with an additional optionals field in the dType struct & a standardized way to define optionals in the Type Library, but this is not ready yet. Other than this, what can I do more to give more freedom to the implementation comment

I still think you’re not understanding the difference between an interface and an implementation. An interface describes an API for other code to interact with, but not how it’s implemented. What you’re proposing here seems to be more along the lines of a directory of library code.
[…] [the spec] doesn’t make a clear distinction between interfaces and implementations. I wish you luck, but I don’t plan to offer further technical feedback.
comment

At this point I was expecting references to the lines of code that were the culprit (one big reason why we use GitHub & PR reviews) and some pointers as to what can I do to fix them. But here, the assumption was that I do not know the general difference between an interface and an implementation.

I still do not know what the exact problem was. If someone knows exactly, please explain.

LC: I asked you before: “Are you referring to the dType registry interface and implementation or to the type library?”, to which you answered with “No, I’m talking about the distinction between a type definition and an implementation”. I suggest you pay attention to how clearly you phrase your questions before being unsatisfied with the answer.
I thought it was clear that this ERC aims to both:

So, regarding this interface-implementation criticism, the status was:

  • comparison with ERC20, which is a different type of standard
  • no reference to any lines of code/spec
  • no code/spec examples
  • this criticism was used as one of the reasons for stopping any further technical feedback

Considering the above, do you consider my phrase: “I suggest you pay attention to how clearly you phrase your questions before being unsatisfied with the answer.” as being untrue? Did I not point out the exact problem that I was facing?

If I become aware of a problem, I will voice it - it is the only way to help the communication advance. Overlooking makes me feel like a hypocrite and it does not help any discussion party understand or improve.

@danfinlay, if you think my comment is coming off as unwarranted hostility, please help me rephrase it.

@Arachnid, if you think I misunderstood your quoted words from above or if you have any material that I overlooked, let me know.

How would you represent ERC20 or another standard, where the standard defines an interface that can have multiple independent implementations, in DType?

ERC20 and others define an interface in the form of an ABI, and specify some constraints on their behaviour, but do not prescribe an implementation. Many different contract instances can be accessed using this interface, without the caller having to care about how it is implemented.

DType, in contrast, seems to assume each type will have exactly one implementation.

@Arachnid, thank you for coming into the conversation.

I already said:

  • The ERC20 standard defines functions types and devs can indeed implement the functions as they please.
  • ERC20 function types can be defined & registered as types in dType. Devs can still implement them as they please.

non-function types:

  • Solidity is statically typed -> building a type system on top of it is restrictive -> the best solution that we found is one based on structs.
  • when you describe a custom struct with dType, you can generate its implementation -> devs are not free to change the implementation, which is an automation feature; but devs are those who propose the type description in the first place.

As for the definition, I am open to other proposals that not necessarily based on structs.

So:

  • functions are described with dType by registering their ABI -> implementation is left to the dev (not all types have exactly one implementation)
  • non-function types indeed have a deterministic implementation

We never said this is an interface system, but a type system. However, the registry itself has an interface and could be implemented differently by others.

Types intended to be used in the EVM need to have a deterministic implementation - types are not interfaces and devs + machines need to know what to expect:

  • a type definition library
  • a type definition struct
  • standardized names + ABI structure for additional type checking library functions (implementation is left to the dev)
  • a set of standard functions for type manipulation (implementation is left to the dev)

Also, this is an example of how one can build types visually: https://pipeos-one.github.io/visual-dtype. The main output is a JSON that will be stored in the registry. From this JSON you could also build & deploy the type automatically if you do not know how to code & want the easy way.

Note: Devs can create their own types (up to 2^256-1), with another name, if they are unhappy with an already registered type.

Can you give an example, then, of how you would define a DType type with, say, the ERC20 transfer method, and how multiple developers would implement this? I still don’t see how that’s possible in DType, so an end-to-end example would really help.

I have responded to this question in the EIP-1921 discussion thread, because I would like to keep the current thread on point.

EIP-1900 only describes a data type system. EIP-1921 only describes the function type extension.
For standards like ERC20, you need an extension to interfaces and that will come in future EIPs.
This discussion was only about EIP-1900, and possibly EIP-1921.

@Arachnid demonstrated that he does not understand dType as described in these two standards, because he demands that an interface heavy standard should be described with these tools. A simpler demo of what dType does (only EIP-1900), is made available in this video: https://youtu.be/GZg4L2o0Nyw

@danfinlay, therefore, @Arachnid could not have “refined” the specs, beyond the first (indeed useful) comments on the spec structure & clarity

but Nick here got into the proposal, and seemed to be trying to help refine the spec source

All I am asking for is a practical end to end example of how someone would use DType - how you define a type, implement it, and consume it. I used ERC20 as an example because it’s a commonly used interface everyone understands, but I’d be happy to see any end to end example.

If someone like myself who is heavily involved in the ethereum smart contract field has difficulty understanding the scope and intent of DType, you may want to consider the possibility that there is an issue with the ease of understanding your specification, rather than with my ability to consume it.

@Arachnid, fair point, but I did not understand that the purpose of EIP-1900 was not clear to you when we had the discussion on #1882. Only now I understand because you were clear about it.

I answered your above question here: https://github.com/ethereum/EIPs/issues/1882#issuecomment-529840460

A. I see no interest for:

  • a detailed analysis on the conclusions and opinions put forth by @danfinlay, @Arachnid and myself
  • a detailed analysis of the EIP process in this case discussion

B. I see:

  • @danfinlay expressing opinions without being prepared to give the other party (myself) time for rebuttal
  • people quickly being sensitive around the word “obsolete”, referring to a tech, while not giving a damn about gatekeeping and actual ad hominem (1, 2). Yes, DNS should be made obsolete; if ENS started as a decentralized copy of DNS and does not plan to change, then you are promoting tech that stifles innovation and a truly machine-readable world)
  • readers passively reading & waiting for a conclusion, instead of actively participating

When I will see interest in A, I will continue this analysis.

And any time someone will bring any of these topics into a discussion on another topic, I will ping them here, since they have time to discuss it and force me to have time to discuss it.

@danfinlay, you should at least post a clarification to https://twitter.com/danfinlay/status/1168187079089508352, saying that I did not miscommunicate, as you conceded in this comment.

Sorry, like I’ve said repeatedly, I don’t have a lot of time to spare, and I already gave a lot of time to my initial feedback, which you are free to take and leave as you like. It seems you’ve had a lot of time to respond, and I’m willing to respond as I’m able, I’m sorry it’s not synchronous, there are many important things competing for my attention right now.

I will try to get back to this, but if you’re going to read slow delays as unacceptable disinterest or even “not giving you time for rebuttal”, then I will just leave it alone, as it seems like I may be doing more harm than good.

Thanks for highlighting the most important thing for me to reply on.

From what I can tell, the hostility began around June 2. Phrases like:

  • I suggest you pay attention to how clearly you phrase your questions before being unsatisfied with the answer.
  • So aside from your destructive (as opposed to constructive) and your inexact criticism, what can I do?

I totally get that this was frustration at not getting merged, but I would also point out that at no point during this issue discussion do you link to the pull request that you’re referring to, so I could imagine that Nick didn’t even realize there was a PR that you were suggesting, and didn’t see himself as blocking at all.

There were also lots of instances of hostility in the more recent twitter thread.

Anyways, I’m not judging, I really do understand the frustration with the EIP process, I have EIPs that also do not get merges or comments. I’m just answering your question so you can hopefully understand why from my perspective, this just looks like a misunderstanding that got escalated.

I’ll try to review the other comments soon, sorry for the regular absence, it is not meant in bad spirit.

Ethereum is about open and decentralized processes. What is the outcome of a process that does not work? Abuse. Abuse can be on either side, willingly or unwillingly. Abuse on time, on effort, etc.

For my case (EIP process), this abuse was:

  • months between the EIP PR and merging; merging only happened after I started proposing EIP editor processes

  • Arachnid did not understand dType, but still gave recommendations on how to write; first were ok and I complied; second ones, talking about the intrinsic tech demonstrated a lack of knowledge on the topic, which he was unwilling to admit or consider

  • I did not accuse him of not understanding what a type system is (i.e. not interfaces), but he did accuse me of not understanding the difference between an implementation and an interface

  • his status gives him the power to abuse even unwillingly; he did not understand the proposal and dismissed it

Arachnid can also consider that he was abused (time, effort, etc.). But he is an instrument & influencer of the EIP process.

You started this discussion by voicing your conclusions. And the conclusions were:

  • Loredana was rude for no reason
  • if a process does not work/abuse happens, then you should be nice and take it

Now, you are an obstacle to clarifying these problems because you have:

  • opened a lot of subjects without the intent to follow through because you then say you don’t have time
  • returned to a subject that has already been explained, seemingly not accepting the arguments already given and not answering my questions on that subject; You should present counter-arguments to the arguments that I gave, not acting like the subject was not even touched (e.g. “I suggest you pay attention to how clearly you phrase your questions before being unsatisfied with the answer.”)
  • not retreated the Twitter statements that you conceded

If you like to stay abused, at least do not block others who do not. I consider that I have a duty to me and others to fight against the abuse that I can directly see.

This is such a misrepresentation of what I said, that I barely have anything left to say. I did my best at interpreting what happened, and you reject my interpretation. That’s fine, but I am done trying to facilitate this conflict, I should have known it would turn on me soon enough.