--
Johan
You received this message because you are subscribed to the Google Groups "Ripple Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rippleusers...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/rippleusers/b63b62c7-d5a6-4c48-8de6-6912b45c8c03n%40googlegroups.com.
Hi Melvin, thank you for responding to the discussion. Yes I can understand it is a lot to take in and "sift through". You need to also need to be able to independently verify if I have come up with anything of value.
One way to look at what I suggest is needed for distributed Ripple is to compare with what others have suggested for 15 years and that I say is the completely wrong approach. I.e., doing consensus at the global level instead of the user-to-user level (it needs to be done at some level and I suggest that falling back on global was done mostly because of lack of expertise in consensus mechanisms).
One good start could be to verify: was the lock-credit-attack really a problem? Since Ryan since 15 years maybe uses it as the rationale for the global consensus. If it was never a problem, that rationale was always false. I suggest the simple solution is a fee system (and I have implemented this already). The buyer is the "authority" in the payment, but if they try to lock credit indefinitely, every intermediary and the seller as well start to just take fees from the payment. Anyone could easily verify whether this is a reasonable design or not. If it is, then one of basic premises for Ryans idea seems clearly false. This is a good start to see if I am onto something or not (I already built everything but you would have to audit my work step by step and this is a good first step).
I would very much appreciate others chiming in on the fee model for lock-credit-attack. Does it solve it, and if so, do you agree the attack was never a motivation for global consensus? The more people chime in, the more it can be agreed on whether lock-credit-attack actually was a system-breaking problem or not (I of course believe it was not, but this is a community forum and Ryan is the authority in it and therefore others need to engage on this topic if Ryan will not). If it was system breaking and my fees do not work, then I am making false claims. But if it was always manageable person-to-person, then Ryan was making false claims.
About Giovanni T. Parra
Giovanni T. Parra (fiatjaf) has been stuck in the same rut Ryan was stuck in. He posted some design suggestions for "solution to the old-ripple decentralized protocol" on Reddit here in 2018 but they are the same wrong direction Ryan went down in 2011. Giovanni also called me crazy in 2015 btw, here. Giovanni did get the idea of user-to-user consensus right in his 2018 design (see my response here), but he is still clinging to the global consensus idea that Ryan put out in 2011 and "hash locks".
What Giovanni and Ryan both miss is that the two-general problem can be solved at user-to-user level. There is no need to solve it globally (as RipplePay did by being single-server and Ripple.com did by having global consensus central blockchain). So there is no need to solve "hash locks to interface the global ledger" and there is no need to co-opt the solution to "fake recipient attack" to also serve as "hash lock condition" for a central blockchain.
So Giovanni is also missing the elephant in the room, and overthinking. Nostr might be a great protocol, a guy I work with on https://bitpeople.org really likes it. And Ripple the money system from Ryan Fugger is brilliant. But both Ryan and Giovanni seem to not understand distributed consensus in Ripple. And as I have emphasized, the expertise they miss was consensus systems, while Giovanni is probably great at messages as Nostr does that, and Ryan was probably great at messages as all people in IT working with the internet were.
I am trying to emphasize that both Ryan and Giovanni took the common sense model, and turned it upside down so that it could be integrated with global consensus. That Ripple can be built by centralizing authority to the buyer, keeping the buyer in check with a fee system (if they attempt the lock credit attack).
To view this discussion visit https://groups.google.com/d/msgid/rippleusers/df7c8250-0eb3-4744-b727-fb648b67b0b8n%40googlegroups.com.
I don't mind that Giovanni called me crazy. My original motivation for Resilience (swarm redistribution) was originally during med. school where I noticed that a certain group (my group, not Giovanni's group) had monopoly on labeling the executive health of people as either sick or healthy. Giovanni has no such authority, I am much closer to him to having such authority as I am still doing progress towards exam as medical "doctor".
Rather I just want to emphasize (as you already know Melvin but emphasizing for anyone new here) that since 2011 Ryan, Giovanni, and many others, have for some reason formed a consensus that you need global consensus. One root for their idea is the "lock-credit-attack". If it could be proven such an attack is manageable with person-to-person consensus only, their rationale is provably wrong. And I suggest the extremely simple fee model. And I implement it as well. My codebase works very well. And I recommend anyone curious about my claims to first audit "is the lock-credit-attack really unmanageable person-to-person?" and if it is not then Ryan and Giovanni has a house of cards. Ryan is a genius who invented Ripple but he could still make mistakes when trying to build a truly distributed version of it, and once having made such mistake might be less interested in trying to achieve his original 2006-vision. Giovanni may have good ideas otherwise too I do not know who he is.
My system is complete. Ripple is simple. Reasonably it might be possible to implement it in a simple way too. And as I already did it seems to me it is. For anyone new to this: https://ripple.archi, and please chime in on if the lock-credit-attack requires global consensus or can be managed with fees in user-to-user consensus only as my codebase already does: https://ripple.archi.
My main point is: two-general problem needs to be solved. This can be done either user-to-user or globally. Many people are inexperienced with consensus systems, even more so 20 years ago (before "Bitcoin" and "web3". I suggest Ryan - although suggesting the solution as early as 2006 - was in fact inexperienced with "consensus engineering" and failed to build multi-server Ripple therefore. This is very reasonable claim as most people in 2006 were probably less experienced with "web3" as it is described as a revolutionary technology - thus not everyone IT expert could be expert in it before Bitcoin. This is my best guess.
To view this discussion visit https://groups.google.com/d/msgid/rippleusers/51a22120-37ae-4330-9129-2f41ae001fefn%40googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/rippleusers/CAKaEYhLR9CiY3cLrOO2sV-o5Xy4-hEjEEpwLoOmg%2BhfDybfFFg%40mail.gmail.com.
Johan,
I’ve been following your posts a bit over the past couple of weeks. However, I’m still confused by the semantics—and honestly, I’m not even aware of the "account-level consensus" problem in the way you’re describing it. It sounds more like a technical implementation issue related to multi-server deployment, rather than a core reason this idea hasn’t “taken off.”
I’m curious what you see as the breakthrough. Can you describe it in plain language? It sounds like you're tying it to this “fee” system as a counter-strategy to what you're calling the “reserve credit attack,” and that this, in your view, makes the system "theoretically implementable." But people actually using and adopting it is tied up with a whole other host of problems (e.g., education, marketing, investment, adoption, etc.).
I'm asking because—even though the semantics are completely different—I also had a breakthrough years ago while working with Ripple. Hearing you talk about your fee-based solution reminds me of my own "reserve distribution algorithm"-centered breakthrough, which I called Metric Reserve. I formalized the idea around 2015 but didn’t build a working prototype until April 2017 (there’s a post about it in this thread).
I never struggled with server-to-server issues, because to me, the distributed implementation was less important than understanding the user side: “Why would I want to use this?” My issue with Ripple stemmed from its one-sided view of "extending credit" without addressing how to collect debt. First, most people who adopt a system like this aren’t going to extend credit—they’re just going to buy credits in some currency. Second, I wanted a system that wasn't necessarily debt-based. While you can extend credit, most of the people I know (outside this Ripple group) want a money system that’s reserve-based, so we aren’t beholden to always-on servers just to use money.
So, there will be some people who use the system for its utility, and others—reserve nodes—who are interested in the system continuing to operate as a whole.
But... like you, I’ve always loved the idea that everyone is “their own bank,” and the nature of the graph makes it possible to reconcile a payment through a network of credit/reserve connections.
Let me explain my concept as simply as I can:
1. What is Ripple (to me):
Ripple is a mathematical graph of user accounts where each vertex is a user, and each edge represents a credit/payment relationship. Between any two nodes, there can be zero or more edges, where each one represents a credit extension in some currency. The protocol doesn’t enforce the terms of credit—participants define those. Assuming the network is ubiquitous, Ripple allows me to pay or be paid in the currency of my choice with anyone, while only managing credit arrangements with my chosen peers.
2. Changing the Semantics of Credit:
The first thing I did was stop thinking of Ripple strictly in terms of credit. If you don’t trust me enough to lend but you do trust me enough to be connected, I can give you $10 to hold, and then you extend me $10 credit. Now I can spend that $10. If the expenditure ends up coming back to you, then you already hold the reserve—it’s like a bank cashing a check.
If I later choose to exit the system, I just ask for my $10 back. Simple.
The way Ripple treats everything as “credit” is just a semantic layer—Ripple could just as easily represent a 100% gold-backed reserve system, as long as we normalize “adding reserves” and “paying debt” appropriately.
3. The Core Payment Problem:
Changing semantics doesn’t fix the real issue: Even if I have $10 in balance, I can't spend it with everyone in the network—even if there’s a payment route—because of dynamic conditions. Someone between me and the payee might disconnect or spend the intermediary balance before I get there.
4. My Solution / Breakthrough:
Connectedness can be solved. You can run a connectedness algorithm frequently on even large graphs. But there's no guarantee that “credit” exists when needed. So if I’m paying $10 in reserves to my neighbor (not his money—just collateral), he could pass that along to the payee. This is basically Hawala.
Now imagine others doing the same: their $10 flows along paths in the network. But the recipients are also Ripple users—they don’t want the reserve; they just need their intermediaries to feel secure enough to complete the trade.
So what happens with all this floating reserve? It’s only relevant when someone is adding or withdrawing money. Otherwise, it’s the mirror image of the payment routing problem. Reserves move around, balances fluctuate—but once everyone “gets it,” the system normalizes:
💡 Each non-leaf node should hold a reserve balance equal to the total positive system balance divided across reserve nodes.
To “buy” a balance, you pay reserves to your neighbors. To “cash out,” you withdraw reserves. This triggers backflows that re-balance the graph.
As long as you're connected, you can always pay your full balance to any node. The receiver only cashes out if they choose to, and reserves flow backward from their neighbors.
In short, my breakthrough was realizing that reserve-based flow removes the need for full balance routing. By standardizing the way edges are created (deposit-based instead of credit-based), and by agreeing on how reserves are paid back, you get a functional, decentralized money system.
5. Technical Implementation:
When I built Metric Reserve in Python (https://github.com/wizardwatson/metricreserve), the novel part was an algorithm that evenly distributed reserves in a Ripple-like graph. It generated instructions like:
"At next rendezvous, transfer $75 in reserves to peer 375902345 (Steve Smith)."
It automated the “boring” part of reserve balancing.
Okay—maybe not so short, but that’s the gist.
I go through the trouble of writing this because you seem passionate, and when you talk about your fee-based solution, it reminds me of the kind of graph-level thinking I had during my own breakthrough.
For what it’s worth: I don’t think what I built is all that remarkable anymore. I didn't even think it was when I got around to coding it in 2017. It's just not as earth-shattering of a revalation as it was when I first got into Ripple in 2007–2008. Could it be amazing if adopted at scale? Sure. But the problem of adoption is not a technical one. There are many human obstacles—culture, behavior, motivation—that hold these ideas back more than code ever will.
So when you say, “I’ve already solved it!”—just remember: many others have solved various technical problems too. My solution sidesteps most of what you're discussing, and in my opinion, it still fully implements the “be your own bank” ethos.
Hope this helps.
—David W.
Johan,
I think I understand the general idea.
I do think that penalizing intermediaries for failing to propagate payment requests, by paying the victims in the same currency they are unable to transact with in the first place, is next level confusing. If this is all intended to happen in seconds, then obviously, for such a system to work, there would be up front agreement about fee rates and availability, SLA's, etc. This is all happening at server level, not user level. You're going to require consensus either operationally through general agreements and protocol (i.e. like any private bank) or technically (e.g. Bitcoin). Wherever you move this "Ripple problem" around to, you're doing one or the other.
I'm all for figuring these things out operationally at first. We could start a banking system with a network of pawn shops (operational example). You could also start a banking system by bolting RipplePay onto a blockchain using Metric Reserve concept with no modification. However, you still need some operational agreements (e.g. "what's the withdrawal rate limit?", "How do we deal with non-reserve propagating nodes). System stability, usability, and integrity will require refinement beyond the technical level. You could even combine your fee system with Metric Reserve concept, for instance, requiring all participants on the network level (your server to server idea) maintain a redeemable reserve currency (bitcoin maybe) to pay those fees. Similar to Ethereum "gas" concept.
Anyway, never said I was sympathetic, just curious and being generous with my time.
You are bogged down in the esoteric world of P2P message consensus as applies to Ripple scenarios. I understand your proposed solution to this esoteric problem enough to know that there are other solutions to this problem that could work. I also think it's not a core issue with adoption.
To view this discussion visit https://groups.google.com/d/msgid/rippleusers/86d74cd9-e74e-49ca-a067-a0d6399c5aafn%40googlegroups.com.