The goal is to build a distributed ledger which records transactions in such a way as to avoid the double-spend problem. Suppose Mallory owns a token T and transfers it to Alice. We want to make sure that, once Alice has accepted the payment and honored the transaction (e.g. shipped the goods to Mallory) then Mallory can’t simply reverse the transaction and pay someone else the same token again. If Mallory pays Bob after Alice has accepted the transaction, Bob should be able to find out that Mallory no longer owns the token, before accepting the transaction and shipping Mallory the goods.
From this description, we see that the end-users of the system require a few things. Alice needs a way for everyone to find out who really owns T, so
- the ledger shouldn’t be able to forge ownership information
- the ledger shouldn’t forget ownership information, even if e.g. some data centers are blown up
- the ledger should report true information to anyone who asks
Given a ledger that satisfies all these requirements, every recipient of a token is incentivized to fully check whether it still belongs to the account paying them. If they accept the payment and ship the goods without fully checking the ledger, their own transactions wouldn’t be accepted by recipients down the line, who do fully check.
Intercoin’s design needs to satisfy three security requirements, in order of importance:
- Integrity: The network as a source of truth should not be corrupted
- Security: Each individual’s tokens cannot be transferred without their signature
- Availability: No tokens can be frozen indefinitely, except by a publicly known rule
None of these can be guaranteed 100%, but the design strives to come as close as possible with each iteration.
Intercoin Technology: Background