OmniLayer / spec

Omni Protocol Specification (formerly Mastercoin)
The Unlicense
341 stars 118 forks source link

Ecosystem has to be specified in all transaction messages that include a currency id #105

Closed marv-engine closed 10 years ago

marv-engine commented 10 years ago

There are separate sequences for currency id's in the MSC and Test MSC ecosystems, so the currency id by itself is not unique. Simple Send, and all transaction messages that have a currency id, need some way to identify the ecosystem.

dacoinminster commented 10 years ago

A currency ID of 0x80000003 would be the first smart property issued in the TMSC ecosystem, so therefore a simple send of currency ID 0x80000003 would take place in the TMSC ecosystem.

Maybe I'm missing something?

On Fri, Mar 28, 2014 at 10:44 AM, Marv Schneider notifications@github.comwrote:

There are separate sequences for currency id's in the MSC and Test MSC ecosystems, so the currency id by itself is not unique. Simple Send, and all transaction messages that have a currency id, need some way to identify the ecosystem.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105 .

marv-engine commented 10 years ago

I'm having trouble keeping a clear picture of all these bit-packing side effects. It doesn't help that Test MSC doesn't have its MSB set, but all currencies derived from it do.

I prefer separate data items - for the sake of clarity and ease of understanding and explanation, and to eliminate redundant and potentially conflicting fields in messages. For me, data items should have a single purpose, e.g.

dacoinminster commented 10 years ago

Yeah, I did a lot of embedded programming in a previous life when every byte was precious, and I am very used to thinking of an integer as a field consisting of flags and smaller integers :)

Maybe we should change the field definition for that property type integer to more clearly indicate that it is a bit-field, and define what the bits do instead of listing the valid integer values. Either way is fine with me.

I really don't want a separate ecosystem field for every single message. I only put it in some of the messages because I had no obvious way to specify the ecosystem when there is no currency id in the message. I understand the desire for a more universal approach, but I'm not willing to use extra bytes to get that (and I'm not willing to change the spec that the developers are currently coding to without a very good reason).

On Fri, Mar 28, 2014 at 1:32 PM, Marv Schneider notifications@github.comwrote:

I'm having trouble keeping a clear picture of all these bit-packing side effects. It doesn't help that Test MSC doesn't have its MSB set, but all currencies derived from it do.

I prefer separate data items - for the sake of clarity and ease of understanding and explanation, and to eliminate redundant and potentially conflicting fields in messages. For me, data items should have a single purpose, e.g.

  • the ecosystem or the currency id
  • divisible/indivisible or new/replace/append

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38964810 .

zathras-crypto commented 10 years ago

Sorry to take this back to fundamentals, but is it absolutely mandatory to generate to unique sets of currency ID's for TMSC and MSC? Are we worried we're going to run out of numbers? hehe

Would it not be far, far simpler to have a single incrementing ID for currency ID? The property/currency itself has the details of which ecosystem it sits in, is it really necessary to maintain two disparate sets of ID?

Also am I getting confused or are we now starting to interchange 'currency ID' and 'property ID' - same thing no?

Thanks Zathras

On Sat, Mar 29, 2014 at 8:22 AM, dacoinminster notifications@github.comwrote:

Yeah, I did a lot of embedded programming in a previous life when every byte was precious, and I am very used to thinking of an integer as a field consisting of flags and smaller integers :)

Maybe we should change the field definition for that property type integer to more clearly indicate that it is a bit-field, and define what the bits do instead of listing the valid integer values. Either way is fine with me.

I really don't want a separate ecosystem field for every single message. I only put it in some of the messages because I had no obvious way to specify the ecosystem when there is no currency id in the message. I understand the desire for a more universal approach, but I'm not willing to use extra bytes to get that (and I'm not willing to change the spec that the developers are currently coding to without a very good reason).

On Fri, Mar 28, 2014 at 1:32 PM, Marv Schneider <notifications@github.com

wrote:

I'm having trouble keeping a clear picture of all these bit-packing side effects. It doesn't help that Test MSC doesn't have its MSB set, but all currencies derived from it do.

I prefer separate data items - for the sake of clarity and ease of understanding and explanation, and to eliminate redundant and potentially conflicting fields in messages. For me, data items should have a single purpose, e.g.

  • the ecosystem or the currency id
  • divisible/indivisible or new/replace/append

Reply to this email directly or view it on GitHub< https://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38964810>

.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38969486 .

dexX7 commented 10 years ago

Property id = currency id. We now have basically TMSC, the ecosystem field and a bit flag. Ids are issued in order of appearance on the blockchain/txindex within the block in ascending order whereby test environment ids are independant and the next should be... 2147483651 ("test environment id 3"; 1 [2147483649] + 2 [2147483650] are MSC+TMSC). Test enviroment ids should be displayed as 1, 2, ... 3 instead of 21474836xx, but with visible information that this is a test environment. That's my understanding of it at least.

dacoinminster commented 10 years ago

What dexx said :)

On Fri, Mar 28, 2014 at 2:48 PM, dexX7 notifications@github.com wrote:

Property id = currency id. We now have basically TMSC, the ecosystem field and a bit flag. Ids are issued in order of appearance on the blockchain/txindex within the block in ascending order whereby test environment ids are independant and start at... 2147483651 ("test environment id 3"; 1 [2147483649] + 2 [2147483650] should be MSC+TMSC) which, however may be displayed as 1, 2, ... 3 instead of 21474836xx with visible information that this is actually a test environment.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38971974 .

zathras-crypto commented 10 years ago

What's the 21474836xx prefix you're using there?

What I'm getting at is to me it seems unnecessarily complex.

Why do we need to reuse the currency ID is what I'm getting at.

Thanks Zathras

On Sat, Mar 29, 2014 at 8:48 AM, dexX7 notifications@github.com wrote:

Property id = currency id. We now have basically TMSC, the ecosystem field and a bit flag. Ids are issued in order of appearance on the blockchain/txindex within the block in ascending order whereby test environment ids are independant and start at... 2147483651 ("test environment id 3"; 1 [2147483649] + 2 [2147483650] should be MSC+TMSC) which, however may be displayed as 1, 2, ... 3 instead of 21474836xx with visible information that this is actually a test environment.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38971974 .

zathras-crypto commented 10 years ago

Simply put, currency ID should be unique across both ecosystems. Thus your unique identifier is a single piece of information (not requiring two pieces of info; ID & Ecosystem).

On Sat, Mar 29, 2014 at 8:52 AM, zathras crypto zathrasc@gmail.com wrote:

What's the 21474836xx prefix you're using there?

What I'm getting at is to me it seems unnecessarily complex.

  • Currency ID 3 belongs to Blobcoins in the TMSC ecosystem.
  • Currency ID 4 belongs to Blobcoins in the MSC ecosystem.

Why do we need to reuse the currency ID is what I'm getting at.

Thanks Zathras

On Sat, Mar 29, 2014 at 8:48 AM, dexX7 notifications@github.com wrote:

Property id = currency id. We now have basically TMSC, the ecosystem field and a bit flag. Ids are issued in order of appearance on the blockchain/txindex within the block in ascending order whereby test environment ids are independant and start at... 2147483651 ("test environment id 3"; 1 [2147483649] + 2 [2147483650] should be MSC+TMSC) which, however may be displayed as 1, 2, ... 3 instead of 21474836xx with visible information that this is actually a test environment.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38971974 .

dexX7 commented 10 years ago

To set the environment (test or real) there is the ecosystem field and furthermore the option to use a bit flag giving the following range:

0x00000000-0x7FFFFFFF: id 0... 2147483647 in real environment. 0x80000000-0xFFFFFFFF: id 0... 2147483647 in test environment.

Ids are independent, so you don't need to use id 5, because id 4 was already used in another environment and id 4 is actually "available". I agree, somewhat confusing.

zathras-crypto commented 10 years ago

Perhaps not getting my point across, gross oversimplification:

UI: "What currency ID are you looking for?" User: 25 UI goes off, checks DB, sees currency is in TMSC ecosystem and proceeds with whatever task accordingly.

Currently: UI: "What currency ID are you looking for?" User: 25 UI: "And now in what ecosystem is that currency ID?" User: Erm, MSC UI goes off proceeds with whatever task accordingly.

It's an additional piece of information that I don't see why it's necessary in this context, when that data is already there elsewhere in the transaction (in the ecosystem field).

Perhaps I can come at this another way, yes I understand we have separate currency ID's for TMSC & MSC ecosystems. Now please advise why? What was the driver?

Thanks Zathras

On Sat, Mar 29, 2014 at 8:57 AM, dexX7 notifications@github.com wrote:

To set the environment (test or real) there is the ecosystem field and furthermore the option to use a bit flag giving the following range:

0x00000000-0x7FFFFFFF: id 0... 2147483647 in real environment. 0x80000000-0xFFFFFFFF: id 0... 2147483647 in test environment.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38972624 .

zathras-crypto commented 10 years ago

I'm hungover btw if I come across as short it's not intentional :)

On Sat, Mar 29, 2014 at 9:01 AM, zathras crypto zathrasc@gmail.com wrote:

Perhaps not getting my point across, gross oversimplification:

UI: "What currency ID are you looking for?" User: 25 UI goes off, checks DB, sees currency is in TMSC ecosystem and proceeds with whatever task accordingly.

Currently: UI: "What currency ID are you looking for?" User: 25 UI: "And now in what ecosystem is that currency ID?" User: Erm, MSC UI goes off proceeds with whatever task accordingly.

It's an additional piece of information that I don't see why it's necessary in this context, when that data is already there elsewhere in the transaction (in the ecosystem field).

Perhaps I can come at this another way, yes I understand we have separate currency ID's for TMSC & MSC ecosystems. Now please advise why? What was the driver?

Thanks Zathras

On Sat, Mar 29, 2014 at 8:57 AM, dexX7 notifications@github.com wrote:

To set the environment (test or real) there is the ecosystem field and furthermore the option to use a bit flag giving the following range:

0x00000000-0x7FFFFFFF: id 0... 2147483647 in real environment. 0x80000000-0xFFFFFFFF: id 0... 2147483647 in test environment.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38972624 .

marv-engine commented 10 years ago

Related thought - if new currency IDs are just sequential (and therefore unique) starting from 3, the currency id can be an index into an array that holds all the property/currency attributes - including the ecosystem.

That said, my desire to have a separate ecosystem indicator, e.g. on the transaction - not in a data item in the message, allows for easy switching between the ecosystems, rather than needing a test instance and a prod instance of the same logical property. And, it also enables separate transaction definitions for test vs prod without having to bump the version number.

dacoinminster commented 10 years ago

Note: Creating a real coin does not create a test coin, and creating a test coin does not create a real coin. Marv's comment above implies that there would be a test instance and a prod instance of the same coin. That is not true.

On Fri, Mar 28, 2014 at 3:05 PM, Marv Schneider notifications@github.comwrote:

Related thought - if new currency IDs are just sequential (and therefore unique) starting from 3, the currency id can be an index into an array that holds all the property/currency attributes - including the ecosystem.

That said, my desire to have a separate ecosystem indicator, e.g. on the transaction - not in a data item in the message, allows for easy switching between the ecosystems, rather than needing a test instance and a prod instance of the same logical property. And, it also enables separate transaction definitions for test vs prod without having to bump the version number.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38973295 .

dacoinminster commented 10 years ago

Most messages do not have the "ecosystem" field. It is only used where the ecosystem is not implied by the currency/property id.

On Fri, Mar 28, 2014 at 3:07 PM, J.R. Willett jr.willett@gmail.com wrote:

Note: Creating a real coin does not create a test coin, and creating a test coin does not create a real coin. Marv's comment above implies that there would be a test instance and a prod instance of the same coin. That is not true.

On Fri, Mar 28, 2014 at 3:05 PM, Marv Schneider notifications@github.comwrote:

Related thought - if new currency IDs are just sequential (and therefore unique) starting from 3, the currency id can be an index into an array that holds all the property/currency attributes - including the ecosystem.

That said, my desire to have a separate ecosystem indicator, e.g. on the transaction - not in a data item in the message, allows for easy switching between the ecosystems, rather than needing a test instance and a prod instance of the same logical property. And, it also enables separate transaction definitions for test vs prod without having to bump the version number.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38973295 .

zathras-crypto commented 10 years ago

Different angle. What's the unique identifier for a given smart property master protocol wide? Answer: there isn't one.

On Sat, Mar 29, 2014 at 9:07 AM, dacoinminster notifications@github.comwrote:

Note: Creating a real coin does not create a test coin, and creating a test coin does not create a real coin. Marv's comment above implies that there would be a test instance and a prod instance of the same coin. That is not true.

On Fri, Mar 28, 2014 at 3:05 PM, Marv Schneider <notifications@github.com

wrote:

Related thought - if new currency IDs are just sequential (and therefore unique) starting from 3, the currency id can be an index into an array that holds all the property/currency attributes - including the ecosystem.

That said, my desire to have a separate ecosystem indicator, e.g. on the transaction - not in a data item in the message, allows for easy switching between the ecosystems, rather than needing a test instance and a prod instance of the same logical property. And, it also enables separate transaction definitions for test vs prod without having to bump the version number.

Reply to this email directly or view it on GitHub< https://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38973295>

.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38973452 .

dacoinminster commented 10 years ago

Zathras, are you clear on setting the most significant bit for properties/currencies issued in the test ecosystem? That's where the 21474836xx prefix comes from.

Because of that, there is a unique identifier for each property. It's implied by the most significant bit of the property/currency id.

On Fri, Mar 28, 2014 at 3:10 PM, zathras-crypto notifications@github.comwrote:

Different angle. What's the unique identifier for a given smart property master protocol wide? Answer: there isn't one.

On Sat, Mar 29, 2014 at 9:07 AM, dacoinminster <notifications@github.com

wrote:

Note: Creating a real coin does not create a test coin, and creating a test coin does not create a real coin. Marv's comment above implies that there would be a test instance and a prod instance of the same coin. That is not true.

On Fri, Mar 28, 2014 at 3:05 PM, Marv Schneider < notifications@github.com

wrote:

Related thought - if new currency IDs are just sequential (and therefore unique) starting from 3, the currency id can be an index into an array that holds all the property/currency attributes - including the ecosystem.

That said, my desire to have a separate ecosystem indicator, e.g. on the transaction - not in a data item in the message, allows for easy switching between the ecosystems, rather than needing a test instance and a prod instance of the same logical property. And, it also enables separate transaction definitions for test vs prod without having to bump the version number.

Reply to this email directly or view it on GitHub< https://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38973295>

.

Reply to this email directly or view it on GitHub< https://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38973452>

.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38973677 .

zathras-crypto commented 10 years ago

Not from a user perspective (which I guess since I'm working on UI atm is pushing me in this direction).

For example this no longer works, without now adding an extra field to ask the user what ecosystem they want to search for the property: image

zathras-crypto commented 10 years ago

It honestly to me just seems unnecessary, but I've made my points, perhaps some of the other guys actually coding this up could weigh in?

dacoinminster commented 10 years ago

You only need just that one field. The property/currency id they enter would be 21474836xx which would imply the test msc ecosystem.

There was another thread about this where I recommended that we include the most significant bit when we display these property IDs in the test MSC ecosystem. I don't want to have Google (4) in MSC ecosystem and Google (4) in TMSC ecosystem. I'd rather have Google (4) and Google (21474836xx) to avoid people exploiting the similarity for fraud.

On Fri, Mar 28, 2014 at 3:14 PM, zathras-crypto notifications@github.comwrote:

It honestly to me just seems unnecessary, but I've made my points, perhaps some of the other guys actually coding this up could weigh in?

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38973968 .

dexX7 commented 10 years ago

Well, I'm in favor of dropping different environments altogether, because things like "value", "test", "real" are somewhat relative in the context of user created currencies anyway. Related discussion: #88.

But nevertheless: would it make sense to drop the ecosystem field and solely stick to the bit encoding? This would more uniform. Or is the plan to attach an environment field to all transactions in the future?

zathras-crypto commented 10 years ago

OK - bingo - thanks J.R. sorry if I was a little slow there and needed to be walked to that particular revelation. I'd read some feedback that we were displaying these as 1,2,3 etc which I just saw ripe for confusion ("is this the right currency ID 3" is NEVER a question we want our users asking.

Perhaps I should go and get a little more sleep haha.

zathras-crypto commented 10 years ago

@Dexx sorry haven't had a chance to keep up with all these discussions, will check out #88 now

Thanks Zathras

dacoinminster commented 10 years ago

Zathras: Awesome!

Dexx: I would love to drop the ecosystem field entirely, but there are some messages which don't have a required currency ID, which means their ecosystem is ambiguous without an ecosystem field. Marv has recommended the opposite direction (adding an ecosystem field to every transaction), but I feel that would be wasteful.

There are some better solutions (one of which Marv came up with to embed ecosystem data in every tx), but they all involve changing a lot of our existing code fairly dramatically, so I think they fall out of the scope of what we can do right now.

On Fri, Mar 28, 2014 at 3:21 PM, dexX7 notifications@github.com wrote:

Well, I'm in favor of dropping different environments altogether, because things like "value", "test", "real" are somewhat relative in the context of user created currencies anyway. Related discussion: #88https://github.com/mastercoin-MSC/spec/issues/88 .

But nevertheless: would it make sense to drop the ecosystem field and solely stick to the bit encoding? This would more uniform. Or is the plan to attach an environment field to all transactions in the future?

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38974401 .

On Fri, Mar 28, 2014 at 3:24 PM, zathras-crypto notifications@github.comwrote:

OK - bingo - thanks J.R. sorry if I was a little slow there and needed to be walked to that particular revelation. I'd read some feedback that we were displaying these as 1,2,3 etc which I just saw ripe for confusion ("is this the right currency ID 3" is NEVER a question we want our users asking.

Perhaps I should go and get a little more sleep haha.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38974602 .

dexX7 commented 10 years ago

I agree. @zathras-crypto: what may be underlined just to be clear: to my understanding "test currencies" are never allowed to get in contact with "real currencies".

zathras-crypto commented 10 years ago

Yep, thanks guys - now everything is falling into place again (I was looking at needing to spawn off two separate state environments which would be horrible), I just don't think my brain made the link between MSB and the resulting high valued currency IDs - essentially my entire point was moot because they are already unique, just not sequential.

Way too much Merlot last night is my excuse haha - if someone had said: Hey simpleton! It just means real ID's start at x and test ID's start at 21474836xx I probably would have twigged :)

Thanks Zathras

zathras-crypto commented 10 years ago

@Dexx yep and when thinking of it this way is extremely easy to implement that filter (psuedo-code): if sourcecurrencyid>21474836xx and destcurrencyid>21474836xx then allow tx Couldn't be simpler.

marv-engine commented 10 years ago

My expectation is that devs and testers will need a test environment, hence the reason for (explicitly) creating a second token.

Sent from my iPad

On Mar 28, 2014, at 6:07 PM, dacoinminster notifications@github.com wrote:

Note: Creating a real coin does not create a test coin, and creating a test coin does not create a real coin. Marv's comment above implies that there would be a test instance and a prod instance of the same coin. That is not true.

On Fri, Mar 28, 2014 at 3:05 PM, Marv Schneider notifications@github.comwrote:

Related thought - if new currency IDs are just sequential (and therefore unique) starting from 3, the currency id can be an index into an array that holds all the property/currency attributes - including the ecosystem.

That said, my desire to have a separate ecosystem indicator, e.g. on the transaction - not in a data item in the message, allows for easy switching between the ecosystems, rather than needing a test instance and a prod instance of the same logical property. And, it also enables separate transaction definitions for test vs prod without having to bump the version number.

Reply to this email directly or view it on GitHubhttps://github.com/mastercoin-MSC/spec/issues/105#issuecomment-38973295 .

— Reply to this email directly or view it on GitHub.

marv-engine commented 10 years ago

I believe the currency/ecosystem test when using two currencies looks like this (with hard-coded values inserted):

if ( (sourcecurrencyid<2147483648 and sourcecurrencyid != 2) and (destcurrencyid<2147483648 and sourcecurrencyid != 2) or (sourcecurrencyid>2147483650 or sourcecurrencyid = 2) and (destcurrencyid>2147483650 or sourcecurrencyid = 2) ) then allow tx

For "New property creation", it's: if ( (desiredcurrencyid<2147483648 and desiredcurrencyid != 2) and (ecosystem = 1) or (desiredcurrencyid>2147483650 or desiredcurrencyid = 2) and (ecosystem = 2) ) then allow tx