Conversation
|
NACK - (not a core dev, so have no say, but was asked to weigh in on this specific PR by @adamkrellenstein before release ) Thank you for making me aware of this "mandatory protocol change", as I appreciate being made aware of changes to the protocol before they are put into a release. IMO this "DISPENSE" change is entirely unnecessary. While it is nice that there is an "Alternative Dispenser Upgrade Path" that does not immediately force users to some new method and immediately break the old method, I still strongly DISAGREE with the need for any change to dispensers at this time. CP devs are able to update Counterparty and add PSBT and atomic swap support WITHOUT removal of addrindexrs and WITHOUT changing dispensers at all. I realize current core devs would like to make these dispenser changes, but they are unnecessary, have been objected to for various reasons by a number of devs, and from my perspective and numerous other devs, is being forced on the community. I would strongly suggest that CP development efforts focus on Partial Signed Bitcoin Transactions (PSBT) and atomic swaps, and that any future mandatory "protocol change" releases that are put out have additional functionality which users are requesting. Users have to WANT to update to the latest release, and can NOT be forced to update. As I do not feel there is community consensus behind this dispenser change, I do not have plans to update to any version of Counterparty that changes dispensers or their functionality at this time. |
|
This PR fixes critical vulnerabilities in the protocol that are entirely independent of future feature development. (These are vulnerabilities that @jdogresorg himself partially addressed with multiple mandatory protocol changes just last year.) |
|
As far as I thought, community was pretty much agree on the changes :/ |
Please explain in detail these critical vulnerabilities, and why they must be addressed in this release before adding additional features? Myself and others have asked many times for the technical details and continue to get general "fixes critical vulnerabiltiies" and "this is a bug" responses, but nothing concrete addressing WHY you must make the changes NOW before adding additional functionality.
Yes, when flaws are discovered, they were CLEARLY addressed, discussed, and fixed in a future release.... However I am not seeing details on specifically what issues are being fixed here, nor why they are necessary now. This appears to me as more misdirection and "J-Dog did changes in the past, so we should be able to" vs addressing the real questions (which have been asked on Github, Telegram, DMs, etc for many weeks) of "What critical vulnerabilties" and "Why Now before adding functionality" |
Consensus is hard... as it is not a democracy, votes don't matter, and in a case of small community like CP, any contentious change could fork the chain unnecessarily and should be avoided at all costs (hence not forcing a XCP fee on numerics during 2023). If there is any doubt about community consensus, then there IS NO CONSENSUS, and a change should not be included in a release. Now back to lurking :) |
|
The motivation for this change has already been explained and discussed ad nauseam. This particular PR is for a fully backwards-compatible change that prepares for the resolution of #1785 and #1670, the latter of which describes in detail why the current protocol design is broken (with screenshots, graphs and charts galore). |
So to clarify, your reasoning that dispensers need to be "fixed" NOW before you can add any additional functionality to CP like atomic swaps and PSBT are :
I do appreciate you taking the time to link a couple github issues, however the fact one of those issues charts and such does not demonstrate to me why these changes have to be made now, BEFORE any improvements to PSBT and atomic swaps work can be done. They certainly demonstrate that parsing can be done a bit faster with these changes, but still fail to demonstrate why these changes are necessary at this time, nor justify why the faster parsing is 100% necessary at this time (blocks are every 10 minutes, CP parses blocks under a minute in most cases, plenty fast enough for now... could be made faster sure, but not absolutely necessary as it is being represented to the community) I feel this is once again not directly answering questions, trying to guide the community into thinking this issue has been discussed at length by the community and developers and that there is consensus, when in reality many devs have been trying to get straight answers for weeks, and are frustrated by the lack of technical responses and some of the personal attacks, and there is no consensus on this change. |
|
The justification for making these changes "NOW" is that they address critical vulnerabilities that lead to the regular loss of funds by users, as evidence by the numerous warning banners displayed prominently on XChain. As far as I'm concerned, all future feature development takes a backseat to fixing known vulnerabilities. If you @jdogresorg want to fork the network (again) because you simply don't like that we're fixing these bugs sooner rather than later, that's your prerogative. AFAIK, the only "dev" that has objected is you, and you are (at your own request) no longer a Counterparty developer; you have been uninvolved in these discussions (again, at your own request). |
I think you forget how forks work man... Node operators can not be forced to update, you are well aware of this fact and you are choosing to release software which will "fork" the network while trying to paint me as the bad guy. I am not the "fork", you and your protocol changes without community consensus are the fork sir.
Once again, I feel this is not engaging in a genuine way, as there is a clear pattern of shouting down anyone who objects in telegram telling them to weigh in on github, then a clear pattern of ignoring the feedback on github issues. @jotapea @davestaxcp @b1u3y @B0BSmiths as well as a handful of users in the telegram channels have raised concerns, which are minimized and ignored. It is clear to me your going to do what You feel is best, and if ADAM considers something a bug, he is going to "fix" it regardless of what the community feels. |
|
I think we should wait until more production nodes are in v10 before any protocol change. My product (xcp.dev) is still in v9, but I hope to have a production-ready v10 really soon (in days, not weeks). And in my experience with v10, it is slow in many operations when compared to v9. I believe these should be addressed before forcing protocol changing node updates. Preliminary feedback to implementation: The current implementation makes a tight coupling between dispense and send. Maybe, a better approach would be to just add a prefix to classic BTC send. And, I would like to know why not consider adding it as a cleartext in OP_RETURN? This will allow non-CP wallets to continue doing these with minimal adjustments... (and is free advertisement for the protocol in every block explorer). BUT, I still believe we should continue supporting non-prefixed BTC sends (at least until alternatives make it irrelevant, shown in volume). I don't think this is a broken way, because it favors UX, specially for non-CP wallets. I like that this is possible, it welcomes any Bitcoin user to Counterparty... with risks obviously, because it bypasses any validation. And I'm not sure what this implementation does with multi-output dispenses... |
|
People have lost significant amounts of money when withdrawing BTC from a CEX to an address that still had an active dispenser on it. Some people rage quit Counterparty over this. Making "dispense" a Counterparty transaction resolves this issue, so I fully support deploying a fix with high priority. |
|
@niftyboss1 I can agree that it is flawed, as that is the tradeoff of being stupid simple. |
v10 has now been out for six weeks, and practically speaking, the proposed protocol change wouldn't go into effect for six more. Three months is plenty of time to upgrade, especially given the extended alpha and beta release periods we had. There are definitely some operations which are moderately slower with the new DB design, but every reported significant slowdown has been fixed AFAIK. If that's not the case, feel free to open an issue (listing specific API calls and a comparison between v9 and v10).
This not a "tight coupling"—this is just adding a prefix to a classic BTC send. Please read the actual PR before commenting. The reason that it's not in cleartext is that all Counterparty messages are encoded in the same way, and, in general, using non-Counterparty wallets to make Counterparty transactions is fundamentally unsafe (without atomic swaps). If you don't see that, despite all of the evidence presented, I can't help you. 🤷♀️
This PR does allow for vanilla BTC sends to continue to work. :/ The whole point of this PR is to get everyone to switch in a backwards-compatible way. Please read the actual PR before commenting...
I'm not sure what you're referring to. This is a backwards-compatible change. Please read the actual PR before commenting. :/ |
|
For years many were under the impression (myself included) that addrindex was a necessary evil for Counterparty to parse blocks. The reality is that it was only needed (up until the much more recent empty address dispenser requirement) for Counterwallet to query UTXOs by address. Removing this large dependency is a major win for Counterparty (and eliminates any future issues addrindex might have wrt its compatibility with bitcoin updates, for example Taproot addresses) and it can be done while still keeping dispensers by updating them in this fashion. The other benefit for allowing opening of dispensers on your own counterparty address is it becomes much easier for users to "trust" the dispenser operator as well as making it easier to manage dispenser funds. This update will require user education as well as updates to Counterparty wallets but the fact that we can not only remove the addrindex depency but also get a few benefits in the process should not be understated. |
|
I am reading: And I'm suggesting, that maybe a better approach would be to:
Much less code and it provides the same fundamental solution of making BTC sends a Counteparty transaction. |
Carried out by who? And how? |
|
For long time counterparty users that have already made the mistake of sending themselves BTC from an exchange and accidentally dispensing assets, the current design is normal... But from an new users perspective, this is an unacceptable bug. I think that a dispenser design that allows for a user to open a dispenser on their own address, that can only be triggered by a tx designed to trigger that dispenser is necessary to remove the complications that come with new users trying to understand current design and this PR is the first step in making that happen. I think the intent of the original design of making every BTC tx a potential dispense was to allow for users to bring their own wallets, and this intent was great! That said, over the past few years the wallet ecosystem has begun to mature and now, a better solution to this problem is to ensure the API can return any transaction in a PSBT formal instead of raw hex so that users can use the wallet of their choice, not just for dispensers, but for ANY counterparty transaction! With regards to this specific PR: Won't this change ensure all btc sends generated with the counterparty API generate a compose_dispense, or is there a fallback in compose_dispense that will create a standard BTC tx if there is no dispenser at the destination? If there is no fallback, doesn't there be a check on the destination address? |
|
@DerpHerpenstein @jotapea yes there is a fallback in the So when you make a
Vanilla BTC are still supported. This PR is fully backward compatible and completely transparent for user and developer. I don't understand @jdogresorg problem. Even if you think there are other priority modifications, like atomic swap, that doesn't make this PR irrelevant. It seems to me that this is more of a personal problem with Adam than a technical problem. |
API v2 is more complete, easier to user, and optimized for the new database structure (NO UPDATE). |
|
@loon3 has a very good point.; by requiring a I opened a separate issue about ARC4 encoding. If we remove this requirement it will be easier to buy from general Bitcoin wallets. I have some questions about the implementation: Did I read @jotapea right? Will buying from dispenser fall under Also, does the message specify the specific dispenser to buy from OR keep the current functionality where all dispenser from that address is triggered? The latter is actually a useful feature (eg for card bundles) albeit a spam vector (put 1000 dispensers on one address). |
|
@Jpja here what the PR is doing: When you call a
When you call a
The prefix is super short (
|
This PR will actually not require any education. It is fully backwards-compatible. The API will be backwards-compatible. User behavior will not be affected in the slightest. :/ |
|
From what I understand on what was previously stated by @adamkrellenstein the PR "is fully backwards-compatible" in that case I don't see any issues merging it. |
|
I think most people here agree that dispensers can be improved. But, IMO, this is not being implemented in the best way (and is too soon for a protocol changing mandatory upgrade (who here actually runs nodes?)). If a separate |
|
@jotapea What you
Do not post here if you have read and understood the PR. The PR does create its own message. That requires a protocol change. It is, however, 100% backwards-compatible. Send is still its own message. 🤦♀️🤦♀️🤦♀️ |
Very nice @ouziel-slama, thank you for the reference (and the implementation!). |
|
Thinking that Users create orders, and then the system determines the matches. Thus all Dispenses are also implicitly valid, because the system creates them based on enough BTC being sent to an address. So, adding a NACK to this specific implementation, #1814 seem like the better path forward. |
|
@jotapea you have already been warned about posting nonsense on GitHub multiple times. If you continue to do so you will be blocked. Not because I disagree with what you're writing, but because it makes absolutely zero sense. |
|
Even if the protocol doesn't specify 'user' vs 'system' messages, I think there is a clear distinction between them. This is the perspective I am presenting. User entered messages can be invalid, then ignored by the protocol consumers. System messages are all valid, thus cannot be ignored. This is how I (and I assume many others) understand the events written in the (I can be wrong, and if I am, I would appreciate being told in what specifically. To learn.) For example, I want to buy from a dispenser that is asking for 0.0011 BTC. I send 0.001 BTC in a transaction with the proposed dispense message... but this transaction won't trigger the dispense. How will this transaction look in the db? My understanding is that it will be inserted into the Which has no status field... for some "nonsensical" reason... ... On the other hand, BTC sends with a CNTRPRTY message can be sent to a dispenser, and the |
|
Per #1670 (comment), this PR will be recreated according to the new implementation strategy described here: #1825 |
Normally it's finished but more tests are needed..
I tried to modify as little code as possible.
compose_dispense()(using OP_RETURN with theCNTRPRTYprefix)compose_send('BTC')(on both API v1 and v2) guess whether the TX should trigger a dispenser—if it does, silently turn it into acompose_dispense().