<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://ecprotocol.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://ecprotocol.io/" rel="alternate" type="text/html" /><updated>2026-06-05T13:30:36+00:00</updated><id>https://ecprotocol.io/feed.xml</id><title type="html">EC Protocol</title><subtitle>Distributed coordination without global consensus</subtitle><entry><title type="html">Out of sight, out of reach</title><link href="https://ecprotocol.io/2026/06/05/out-of-sight-out-of-reach.html" rel="alternate" type="text/html" title="Out of sight, out of reach" /><published>2026-06-05T00:00:00+00:00</published><updated>2026-06-05T00:00:00+00:00</updated><id>https://ecprotocol.io/2026/06/05/out-of-sight-out-of-reach</id><content type="html" xml:base="https://ecprotocol.io/2026/06/05/out-of-sight-out-of-reach.html"><![CDATA[<p>We all know it: Platforms feed on our data-streams. They train AI models from it and they compile comprehensive marketing profiles on us. To varying degrees of course. But what was actually in the fine print on all those <em>terms of service</em> that I just mindlessly “Accepted” to use the product?
As they say: if you are not paying for the product - then <em>you are the product</em>. And sometimes even if you pay.</p>

<p>Let’s take a few examples:</p>
<ul>
  <li>
    <p>Gmail, “we do not read your mail to serve you ads” but if you pay for Workspace, “we will not train Gemini on your data” - so what if I don’t pay? Is there a sentence on that buried deep in the wall of text? Maybe. I live in Denmark where schools got in trouble for handing out Chromebooks to kids because of unclear boundaries and guarantees.</p>
  </li>
  <li>
    <p>Meta is more direct. The products, Facebook, Instagram are ad platforms - and your data is “public” anyway… at least some of it. So anyone (if they would allow scraping) could do it - but <em>they</em> saw it first.</p>
  </li>
  <li>
    <p>As a third example take card-payments. The large duopoly Visa and Mastercard are pretty straight about it: Yes, analytics, modeling, AI and “product development” happen on your data (and let me add you also pay for their services). Maybe Mastercard more than Visa. But smaller schemes like American Express are also in the game. It’s business.</p>
  </li>
</ul>

<p>The common theme of course is that inspecting your data brings benefits to you as a user. Who doesn’t want to fight card-fraud, email-spam or hateful posts on social media? That obviously only works if we can see the data - and we will also need to know “who you are” such that we can sanction you in case of a breach of terms.</p>

<h2 id="so-what-are-the-alternatives">So what are the alternatives?</h2>
<p>A public post like this one is sort of “fair game”. I even put my name on it. If I didn’t want people and machines to notice my opinions I could have stayed under the tinfoil hat. But my post in that group of parents on Facebook? My email? Or my payments?</p>

<p>Eventually Fully Homomorphic Encryption (FHE) could save the day. Still want to look for spam or fraud in my data without actually reading it? Yeah, some day. Maybe even possible to run inference from an encrypted query - so welcome Private-ChatGPT!</p>

<p>But let’s be honest. It will not be free on the platforms: Increased compute and now limited possibilities to “extract” other value from the data. And you better read up on your math degree if you want to be really sure what is possible given a specific encoding. But it’s probably the holy grail for some use cases. When it scales.</p>

<p>End-to-end encryption of course could also shield your data from intermediaries. So that works fine if the platform is built like that. But the metadata and key agreements in groups? And again: Only while the platform stays like that. Everyone and their mom can put “end-to-end encrypted” on the box. But what’s really <em>in</em> the box is a bit of another story.</p>

<p>So let me present another comparatively stupid and simple alternative, which I think matches how “not so tech oriented” people assume things work today: Hand the data directly to the intended receiver. Do not mail your letter without an envelope - or better yet: Deliver it yourself. Out of sight, out of reach.</p>

<h2 id="its-the-ux-stupid">It’s the UX, stupid</h2>
<p>Well, how is that supposed to work then, you may ask. In this vast digital universe, where should I drop my letter to you? And if I pay you with a digital “note” (it even contains a signature from a real bank and all), what’s stopping me from giving the exact same bytes to another merchant? In fact: Let’s post it on the Internet, so more people can share it.</p>

<p>So are we talking Peer-to-Peer (P2P)? That doesn’t seem to solve any of those issues above, right? Adding on top of “what if you are not home/on”? So even if you rented an “endpoint” where I could deliver my mail - I still need to find you. So you could publish the IP/Port and the type of service (here is my “phone number”). Tricky if you need to change it later. So DNS then, that’s old as the Internet itself and <em>just works (tm)</em>. But the UX and the cost? And each of my kids and the wife need an entry too? Okay, circle back to self hosting a mail server and a domain. Spammers ruined that one, didn’t they? Practically only established mail service providers are accepted in that game.</p>

<p>So let’s say that we actually had a shared and open service where I could bind a SHA of my name to an IP/Port of that service. Then you would be able to resolve “lars szuwalski” or whatever handle to an endpoint. Why not just the name? Of course I can make the service reject letters from unknown senders - but I could also not post the address in plain-text on the Internet. Let’s say I could update it when I got tired of one host and wanted to move to another. If it was really cheap to “write” in this registry I could easily change and add as I liked.</p>

<p>Then what about the payment? Digital money would be easy - but you need to know who owns a note at any point in time. So imagine the service above could map the SHA of that note to, say, a public key. And to hand it over to someone else would be signing the update of that entry with the matching key - and putting your public key on the note. And we just agreed it would be easy and cheap to update. So that could work for tickets and other such items as well, right?</p>

<p>The point is that current architectures don’t work like that. And the UX on established systems have been polished to the point where you don’t even notice the pill when you swallow. But those architectures are not handed down by God. Alternatives could be built. We do not <em>need</em> to walk around digitally naked.</p>

<p>Look at the footer: Well, it’s not working yet - so I’m not here to sell you anything. Just wanted to share my thoughts. Thanks for reading this far. Have a nice weekend!</p>]]></content><author><name>Lars Szuwalski</name></author><summary type="html"><![CDATA[We all know it: Platforms feed on our data-streams. They train AI models from it and they compile comprehensive marketing profiles on us. To varying degrees of course. But what was actually in the fine print on all those terms of service that I just mindlessly “Accepted” to use the product? As they say: if you are not paying for the product - then you are the product. And sometimes even if you pay.]]></summary></entry><entry><title type="html">Look Ma, No Database: Documents With Shared Lifecycle State</title><link href="https://ecprotocol.io/2026/05/17/look-ma-no-database.html" rel="alternate" type="text/html" title="Look Ma, No Database: Documents With Shared Lifecycle State" /><published>2026-05-17T00:00:00+00:00</published><updated>2026-05-17T00:00:00+00:00</updated><id>https://ecprotocol.io/2026/05/17/look-ma-no-database</id><content type="html" xml:base="https://ecprotocol.io/2026/05/17/look-ma-no-database.html"><![CDATA[<p>Most business software already runs on “documents”.</p>

<p>Vouchers, tickets, payment claims, receipts, licenses, account statements,
certificates, shipping documents, credentials. They may be JSON, PDF, XML, CBOR,
protobuf, plain text, or something more enterprise-shaped, but the pattern is
familiar: create a document, sign it, send it, store it, process it.</p>

<p>Developers already know how to do this. We know how to hash documents, sign
them, move them through apps, QR codes, NFC, RFID, HTTPS endpoints, files,
merchant systems, and mobile wallets. We know how to transform and store them.</p>

<p>The hard part starts when the document crosses an organizational boundary.</p>

<ul>
  <li>
    <p>A shop receives a voucher and wants to know whether it was already spent
somewhere else.</p>
  </li>
  <li>
    <p>A venue scans a ticket and wants to know whether the holder still controls it.</p>
  </li>
  <li>
    <p>A merchant receives a payment claim and wants to know whether that same claim
was also sent to another merchant.</p>
  </li>
  <li>
    <p>A verifier receives a credential and wants to know whether the issuer has
revoked or superseded it.</p>
  </li>
</ul>

<p>These are lifecycle questions. Not “what does the document say?” but “is this
document still the current, valid version that someone is allowed to act on?”
That is global state.</p>

<p>Today, the usual answer is: ask the database. But whose database?</p>

<p>That is where banks, card networks, platforms, issuer portals, SaaS registers,
and reconciliation systems enter the picture. Someone governs the shared
register. Everyone else integrates with it, waits for it, pays for it, or trusts
it.</p>

<p>EC Protocol explores a different split:</p>

<blockquote>
  <p>Keep the documents wherever the application wants. But track their lifecycle
through handles in a shared verification network.</p>
</blockquote>

<p>The document carries the meaning. The hash of it is the handle. EC tells you whether that handle is still current.</p>

<p>Let’s explore a style of document application that becomes possible in that
world.</p>

<h2 id="lets-build-a-shared-gift-card">Let’s Build A Shared Gift Card</h2>

<p>Suppose you want to build a gift card, voucher, or payment-claim system. That is
not simple with today’s infrastructure.</p>

<p>You could define a document format:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>issuer: MallAuth
value: 100
currency: DKK
expiry: 2027-12-31
schema: https://example.net/schemas/voucher-v1
issuer_public_key: ...
issuer_signature: ...
</code></pre></div></div>

<p>Define canonical serialization, so everyone hashes the same bytes.</p>

<p>Define signature rules.</p>

<p>Define what counts as a valid transfer, redemption, revocation, or split.</p>

<p>None of that requires special infrastructure. It is ordinary document
processing.</p>

<p>When the system hands the document to a customer, it does this:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>token_id = hash(document)
create  token_id,   owner = user_public_key
</code></pre></div></div>

<p>This registers the token in EC under the user’s public key. The user’s wallet
checks the issuer signature, verifies that the issuer is trusted, computes the
document hash, and confirms that the resulting token ID is controlled by the
user’s key.</p>

<p>At this point, EC does not know the voucher terms. It does not know the customer
identity. It does not need the document contents.</p>

<p>It only knows that this hash exists as a token, and that the user’s key
currently controls it.</p>

<p>The issuer created the meaning. EC tracks the lifecycle.</p>

<h2 id="spending-part-of-a-document">Spending Part Of A Document</h2>

<p>Now the user wants to spend 30 units at a shop and keep 70 as change.</p>

<p>The wallet, or a transformer endpoint, creates two child
documents. Each child is a full copy of the parent with one new section appended.</p>

<p>The 30-unit child:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>issuer: MallAuth
value: 100
currency: DKK
expiry: 2027-12-31
issuer_public_key: ...
issuer_signature: ...

---
split:
  value: 30
  salt: random_salt
</code></pre></div></div>

<p>The 70-unit change document:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>issuer: MallAuth
value: 100
currency: DKK
expiry: 2027-12-31
issuer_public_key: ...
issuer_signature: ...

---
split:
  value: 70
  salt: same_random_salt
</code></pre></div></div>

<p>The wallet or a transformer endpoint computes:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>parent_token = hash(parent_document)
shop_token   = hash(child_document_30)
change_token = hash(child_document_70)
</code></pre></div></div>

<p>Then it submits one atomic EC transaction:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>destroy parent_token, signature(user_public_key)
create  shop_token,   owner = shop_public_key
create  change_token, owner = user_public_key
</code></pre></div></div>

<p>Notice that the signature for the existing parent_token is part of the
transaction, and that the public key of the change_token does not need to be the
same key used for the parent.</p>

<p>This write requires access to an EC node with write capability.
A wallet provider, issuer, merchant, gateway, or user-operated node could provide that
path. Reads are open, so even if the merchant submits the actual transaction,
the user can check the result independently.</p>

<p>But the document logic itself is ordinary:</p>

<ol>
  <li>Copy parent document.</li>
  <li>Append a section.</li>
  <li>Hash the new document.</li>
  <li>Submit the lifecycle update with valid signatures.</li>
</ol>

<p>There is no voucher balance database in the middle.</p>

<p>There is still shared infrastructure. The difference is that it tracks document
lifecycle by hash, not application-specific balances, accounts, or voucher
records.</p>

<h2 id="verification-is-mostly-hashing">Verification Is Mostly Hashing</h2>

<p>When the shop receives the 30-unit document, it can verify it without asking the
issuer for the full document history.</p>

<p>Because each child is a copy of the parent with a section appended, the shop can
reconstruct the ancestry by removing sections from the end. For this split, the
30-unit child also contains enough information to derive the matching 70-unit
change document: the original value, the split amount, and the shared salt.</p>

<p>For example:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>hash(synthetic_child_document_70)
hash(child_document_30)
hash(parent_document)
</code></pre></div></div>

<p>If the document had gone through five transfers or splits, the shop could derive
those earlier states the same way: remove the last section, hash; remove the
next section, hash; continue back to the issuer-signed root.</p>

<p>Then the shop queries EC for those token IDs.</p>

<p>Those reads are open. A verifier does not need to be the issuer, the owner, or a
member of a private platform. Any node can be an entry point for queries, and a
client can discover the network from a small set of bootstrap nodes.</p>

<p>The shop checks:</p>

<ul>
  <li>the issuer signature on the root document</li>
  <li>each previous token was consumed correctly</li>
  <li>the current document state is live</li>
  <li>the current token is owned by the expected key</li>
  <li>no visible conflict exists</li>
</ul>

<p>For low-value cases, one query path may be enough. For higher-value cases, the
shop can query multiple nodes, store signed answers, and wait for stronger
confidence before granting value.</p>

<p>The important thing is that read verification is not locked behind the issuer’s
API.</p>

<p>Users, merchants, issuers, auditors, intermediaries, and validators can all
check current and recent historical state directly from the EC network. But only
if they hold the document, and that matters. EC nodes never see the document
contents. There is no global document store to leak, steal from, or scrape.</p>

<h2 id="redemption">Redemption</h2>

<p>When the shop accepts the voucher, it can consume the 30-unit token or transfer
it back to the issuer for settlement.</p>

<p>For example:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>destroy shop_token
</code></pre></div></div>

<p>or:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>transfer shop_token, owner = issuer_public_key
</code></pre></div></div>

<p>The issuer then settles according to its own business rules.</p>

<p>EC does not make the voucher valuable. The issuer does. EC makes the voucher
independently transferable and verifiable before redemption.</p>

<p>A shop does not need to trust the customer’s wallet. It does not need to trust
another shop. It does not need direct access to the mall’s live database.</p>

<p>It needs the issuer key, the document, and EC queries.</p>

<h2 id="the-same-shape-works-for-payment-claims">The Same Shape Works For Payment Claims</h2>

<p>A payment claim can use the same pattern.</p>

<p>A bank, fintech, marketplace, local currency system, or prepaid issuer signs a
claim document. A user holds it. A merchant receives it. The merchant checks EC
before granting value. The issuer settles when the claim is redeemed.</p>

<p>This is not “trustless money.”</p>

<p>It is issuer-backed value with portable document custody.</p>

<p>The issuer remains the trust anchor. The merchant still cares whether the issuer
is good for settlement. Legal and commercial relationships still matter.</p>

<p>But the shared state register no longer has to be governed by one bank, one
platform, one card network, or one merchant database.</p>

<p>The issuer signs meaning. The user carries custody. EC tracks lifecycle. The
merchant verifies before acting.</p>

<p>If the user signs two incompatible successors, the result is not two clean
payments. The conflict becomes visible at verification or redemption.</p>

<p>The attack does not create money. It creates evidence. Since the issuer will
eventually check the document chain and redeem only valid claims, intermediaries
have the same incentive: verify before accepting, or risk holding worthless
claims.</p>

<h2 id="what-infrastructure-is-actually-needed">What Infrastructure Is Actually Needed?</h2>

<p>An EC-based document application would still need normal software.</p>

<p>The issuer needs:</p>

<ul>
  <li>document generation</li>
  <li>issuer signing keys</li>
  <li>schemas or document-type definitions</li>
  <li>optional transformer endpoints</li>
  <li>redemption policy</li>
  <li>optional EC write access for issuance and settlement</li>
</ul>

<p>The user wallet needs:</p>

<ul>
  <li>document storage</li>
  <li>key management</li>
  <li>document transfer UI</li>
  <li>hashing and signing</li>
  <li>EC query access</li>
  <li>optional EC write access for transfers or splits</li>
</ul>

<p>The merchant or verifier needs:</p>

<ul>
  <li>document parser</li>
  <li>schema or transformer support</li>
  <li>issuer-key trust rules</li>
  <li>EC query access</li>
  <li>acceptance policy</li>
  <li>optional evidence storage</li>
  <li>EC write access for redemption</li>
</ul>

<p>Gateways and infrastructure providers can offer:</p>

<ul>
  <li>public query endpoints</li>
  <li>write-access nodes</li>
  <li>stronger verification services</li>
  <li>cached signed answers</li>
  <li>monitoring for high-value tokens</li>
</ul>

<p>But none of these actors need to host the canonical voucher database.</p>

<p>The document is carried by the parties. EC provides the shared lifecycle check.</p>

<h2 id="why-this-matters">Why This Matters</h2>

<p>Today, shared lifecycle usually means one of a few things.</p>

<p>Trust the issuer’s live database. Integrate with a dominant platform. Use a bank
or card network. Publish state to a global ledger. Reconcile later and accept
fraud windows.</p>

<p>EC proposes a different split:</p>

<ul>
  <li>private documents carry semantics</li>
  <li>users carry custody</li>
  <li>EC carries public lifecycle</li>
  <li>issuers and redeemers keep their normal systems</li>
</ul>

<p>That is the interesting part.</p>

<p>A voucher can move between parties without every shop sharing a backend.</p>

<p>A payment claim can be verified before redemption without every merchant
depending on the issuer’s live API for every step.</p>

<p>A ticket can be held by the user, transferred as a document, and consumed at
entry.</p>

<p>A credential can be presented from a wallet while EC answers whether it is still
live, revoked, or superseded.</p>

<p>EC does not replace existing institutions. It changes who has to govern the
shared state register.</p>

<h2 id="honest-limits">Honest Limits</h2>

<p>This does not solve everything.</p>

<p>EC does not automatically provide issuer honesty, legal enforcement, privacy,
key recovery, offline finality, good redemption policy, or good document design.</p>

<p>If a document leaks private data, EC does not make it private. If an issuer
refuses to redeem, EC does not make them honest. If a user loses their key, the
application needs a recovery policy. If a high-value claim lives for a long time,
it may need monitoring and stronger verification.</p>

<p>But those are application design problems around a smaller primitive.</p>

<p>Instead of asking every participant to join the same platform, you ask them to
agree on document formats, issuer keys, and EC verification rules.</p>

<h2 id="the-part-worth-exploring">The Part Worth Exploring</h2>

<p>If EC worked at global scale, many multi-party applications would not need a
shared application database for document lifecycle.</p>

<p>They would need shared document rules and a public lifecycle check.</p>

<p>That is the part worth exploring: not a new asset class, not a platform that
owns the register, not a world where every business object is uploaded into
someone else’s infrastructure.</p>

<p>Just signed documents, hashes, ordinary transport, and an open network that
answers one question:</p>

<blockquote>
  <p>Is the thing I hold still current?</p>
</blockquote>

<p>Which workflows already move documents but depend on someone else’s register?</p>

<p>What could be built if users could safely carry the state themselves?</p>

<p>Where does this model fail?</p>

<p>The EC Protocol repo, simulator reports, and design documents are at <a href="https://github.com/EcProtocol/EcNode">EcProtocol/EcNode</a>. The
README is the best starting point.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Most business software already runs on “documents”.]]></summary></entry><entry><title type="html">EC Protocol: Shared State Without Global Consensus, and Why Conflicts Become Self-Punishing</title><link href="https://ecprotocol.io/2026/05/16/third-way-shared-state.html" rel="alternate" type="text/html" title="EC Protocol: Shared State Without Global Consensus, and Why Conflicts Become Self-Punishing" /><published>2026-05-16T00:00:00+00:00</published><updated>2026-05-16T00:00:00+00:00</updated><id>https://ecprotocol.io/2026/05/16/third-way-shared-state</id><content type="html" xml:base="https://ecprotocol.io/2026/05/16/third-way-shared-state.html"><![CDATA[<p>Multiple parties often need to share records: payments, vouchers, votes, names, credentials, ownership claims.</p>

<p>The usual answer is simple: put the records in a database.</p>

<p>That works beautifully until the parties do not want the same operator to control the database. Whoever runs it can censor, rewrite, selectively enforce, lose, or surveil the shared state. Sometimes that trust is acceptable. Sometimes it is exactly the problem.</p>

<p>The other familiar answer is a global ledger: replicate the state widely, globally order transactions, and make the history publicly auditable.</p>

<p>That solves one class of trust problem, but it buys that solution with global coupling. Everyone is tied, directly or indirectly, to the same ordering machine. The system needs broad quorums, committees, fork-choice rules, permanent history, or incentive machinery to keep the whole thing moving in one direction.</p>

<p>This raises a question:</p>

<blockquote>
  <p>Can we share state without trusting one operator, but also without forcing every record through one global consensus system?</p>
</blockquote>

<p>EC Protocol is an experiment in that third way.</p>

<h2 id="local-shared-state">Local Shared State</h2>

<p>EC does not try to make every participant agree on every event.</p>

<p>Instead, it treats shared state as local. Records are assigned to token neighborhoods. A commit requires evidence from the relevant neighborhood, not from the whole world. The goal is not a single universal history of everything. The goal is that, for a given record, the relevant peers can detect conflicts and avoid accepting multiple incompatible outcomes.</p>

<p>That is a narrower and more achievable target.</p>

<p>EC is not “no consensus.” It is no global consensus over all records.</p>

<p>The protocol’s job is to make conflicts visible, attributable, and hard to profit from.</p>

<h2 id="the-threat-model-shift">The Threat Model Shift</h2>

<p>A lot of distributed safety machinery is built around conflicting histories. If two incompatible transactions exist, the system needs some way to decide which one wins. That often leads to global ordering, fork choice, or Byzantine agreement.</p>

<p>But many real applications have an important property:</p>

<blockquote>
  <p>A valid state transition must be signed by the owner.</p>
</blockquote>

<p>A payment must be signed by the payer. A voucher transfer must be signed by the holder. A ballot must be signed by the voter’s credential. A name update must be signed by the current controller.</p>

<p>The network can delay messages. It can censor messages. It can replay messages. It can route messages badly.</p>

<p>But it cannot manufacture a valid owner-signed conflict.</p>

<p>Only the key-holder can do that.</p>

<p>That changes the shape of the problem. A conflict is no longer anonymous noise injected by the infrastructure. It is signed evidence that a specific key equivocated.</p>

<p>The protocol does not need to prevent someone from signing twice. Cryptography cannot stop you from using your own key badly. What the protocol can do is make sure that signing twice does not silently create two valid outcomes.</p>

<h2 id="why-conflicts-become-self-punishing">Why Conflicts Become Self-Punishing</h2>

<p>In EC, the interesting safety claim is not “conflicts never happen.”</p>

<p>Conflicts absolutely can happen. A malicious or careless owner can sign incompatible records.</p>

<p>The claim is that, in the application classes EC is designed for, a visible conflict usually harms the signer rather than helping them.</p>

<p>The network’s job is to ensure that conflicting contenders become visible to the relevant neighborhood, and that applications can treat conflict evidence as invalidating, freezing, or burning the claim.</p>

<h2 id="payments">Payments</h2>

<p>Suppose a payer signs two incompatible payments using the same spendable claim.</p>

<p>In a naive system, that might look like an attempt to get free money. In an EC-style system, the conflict is evidence against the payer’s own claim.</p>

<p>At redemption, the issuer or recipient does not merely ask “do I have a signed payment?” They ask whether the payment committed cleanly, and whether conflicting contenders exist.</p>

<p>If one payment wins, the conflict is visible. If neither resolves, the payer has created a stalled or suspicious claim. What they do not get is two clean redemptions.</p>

<p>The attack does not create money. It creates evidence.</p>

<h2 id="vouchers">Vouchers</h2>

<p>A voucher has the same structure.</p>

<p>The holder can sign a transfer. If they sign two incompatible transfers, they are not duplicating value. They are damaging their own entitlement.</p>

<p>The issuer can see that the voucher history contains a conflict and reject, freeze, or burn the voucher according to the application rules.</p>

<p>Again, the network did not need to make double-signing impossible. It needed to make double-signing visible.</p>

<h2 id="voting">Voting</h2>

<p>Voting is even cleaner.</p>

<p>A double ballot should not count as two votes. It should count as evidence that the credential equivocated.</p>

<p>The natural application rule is simple: if a voter credential signs conflicting ballots, the ballot counts as zero or is escalated into a dispute process.</p>

<p>The attacker’s payoff is not “two votes.” The attacker’s payoff is, at best, destroying their own vote.</p>

<h2 id="names-and-pki">Names and PKI</h2>

<p>Name registries and public-key infrastructure have a similar pattern.</p>

<p>If the controller of a name signs conflicting ownership records or incompatible delegations, that conflict weakens the authority of the key that signed it.</p>

<p>A relying party does not need every name update in the world to be globally ordered forever. It needs conflict-visible evidence around the name or token being resolved.</p>

<p>That suggests a different architecture for name ownership: local verification, explicit delegation, visible equivocation, and bounded history.</p>

<h2 id="the-pattern">The Pattern</h2>

<p>These examples have something in common.</p>

<p>They involve owner-signed state transitions where equivocation naturally damages the equivocator’s own claim.</p>

<p>That does not make all attacks disappear. It does not solve censorship, key theft, denial of service, bad issuers, or bad application rules.</p>

<p>But it does mean that the most important conflict case has a different character.</p>

<p>The network is not trying to globally order away every possible contradiction. It is trying to expose contradictions so that the application can apply the obvious rule:</p>

<blockquote>
  <p>If you signed incompatible claims, you do not get to profit from both.</p>
</blockquote>

<h2 id="what-we-saw-in-simulation">What We Saw in Simulation</h2>

<p>The current EC simulator has been testing this under conflict-heavy conditions.</p>

<p>Under 30% conflict load across 2000 peers, meaning nearly a third of all tokens had competing signed transactions, the run produced:</p>

<ul>
  <li>0 lower-priority conflicting contender commits</li>
  <li>0 multi-contender conflicting commits</li>
  <li>every observed majority selected the highest contender</li>
</ul>

<p>In plain language: we did not observe cases where the losing side of a conflict committed, and we did not observe multiple incompatible winners.</p>

<p>There was also an important measurement correction.</p>

<p>An earlier metric made convergence look much worse than it was. We were undercounting success because committed blocks that had already been extended were dropping out of the success measurement. After correcting that, apparent convergence moved from roughly 7% to roughly 93%.</p>

<p>That correction matters. This project is still research-stage, and the point is not to polish the numbers into a sales pitch. The point is to make the protocol measurable enough that wrong interpretations can be found and fixed.</p>

<h2 id="what-this-enables">What This Enables</h2>

<p>If this model holds, it opens up an architectural space between centralized databases and global ledgers.</p>

<p>You do not need one operator to own the database.</p>

<p>You also do not need every participant to store, order, and validate every record forever.</p>

<p>Instead, EC aims for:</p>

<ul>
  <li>local neighborhoods rather than a global committee</li>
  <li>conflict-visible commits rather than a universal transaction order</li>
  <li>bounded retention rather than permanent global history</li>
  <li>application-level consequences for equivocation</li>
  <li>no token required purely for incentive alignment</li>
</ul>

<p>That last point is important. EC is not trying to build a new economy around consensus. It is trying to make shared state cheap enough and local enough that many applications can use it directly.</p>

<p>Bounded retention is part of the design philosophy too. Many systems treat deletion, expiry, and the right to be forgotten as awkward layers on top of permanent infrastructure. EC explores the opposite direction: shared state with retention limits built into the protocol shape.</p>

<h2 id="scope-and-honest-gaps">Scope and Honest Gaps</h2>

<p>This is not a claim that EC is production-ready.</p>

<p>It is not a claim that local neighborhoods magically solve all adversarial behavior.</p>

<p>It is not a claim that every application fits this model.</p>

<p>And it is definitely not a claim that networks cannot censor, delay, partition, or attack routing.</p>

<p>The narrower claim is the interesting one:</p>

<blockquote>
  <p>For owner-signed state transitions, conflict can be treated as attributable evidence instead of something that must always be prevented by global ordering.</p>
</blockquote>

<p>That is the idea worth testing.</p>

<p>EC Protocol is currently a Rust reference implementation and simulator suite. The simulator works. The claims are being sharpened. The gaps are real.</p>

<p>Where does local neighborhood consensus fail under adversarial topology, churn, censorship, or key compromise?</p>

<p>Which applications do not fit the self-punishing conflict model?</p>

<p>What breaks this reasoning entirely?</p>

<p>The repo, simulator reports, and design documents are at <a href="https://github.com/EcProtocol/EcNode">EcProtocol/EcNode</a>. The README is the best starting point.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Multiple parties often need to share records: payments, vouchers, votes, names, credentials, ownership claims.]]></summary></entry></feed>