#### LocalCoin: An Ad-hoc Payment Scheme for Areas with High Connectivity
- Dimitris Chatzopoulos
- Sujit Gujar
- Boi Faltings
- Pan Hui
> Presented by Moin Hussain Moti
---
### Motivation
Bitcoin, as well as other less popular cryptocurrencies, require their miners to employ devices high computation capabilities and to be interconnected via the Internet.
---
### Contribution
A location based, ad-hoc and peer-to-peer cryptocurrency that requires neither an Internet connection nor devices with high computational capabilities and is based on the connectivity between users that opportunistically exchange messages.
---
### Main Challenges
- Proof of Ownership
- Double Spending Avoidance
- Incentives
---
### Proof of Ownership
- Block Size is denoted by ==$BS$==.
- To create a block, a minimum number of users must verify each transaction, denoted by ==$mVu$==.
---
### Double Spending Avoidance
- Bitcoin’s proof of work is based on the fact that cheating is improbable because a malicious user has to solve hard problems at a faster rate than the total remaining users.
- In LocalCoin, cheating is made very difficult because a malicious user has to misinform the majority of a set of _trusted users_.
- Every user in the LocalCoin protocol selects the users she trusts.
----
#### LocalCoin avoids double spending in the following ways:
The receiver of one transaction will accept the transaction if and only if she receives the transaction signed by at least a minimum number of trusted users of her trusted network, denoted by ==$mTr$==.
----
To avoid fake block creation attempts by a set of collaborative malicious users, LocalCoin enforce the average distance between the users that will verify the creation of a new block to be more than ==$aVd$==.
---
### Incentives
_Transaction fees_ motivate users to forward messages and _block fees_ to motivate them to store as many blocks from the distributed block chain as possible.
----
#### Transaction Fees
- Transaction fees are important because mobile users are competing for them and they broadcast any received transaction.
- Every transaction includes an amount of localcoins that are collected by the mobile user who will first inform the receiver of the transaction about the transaction.
----
#### Block Fees
- Block fees are important because users store the created blocks in order to be able to verify the creation of new ones.
- Whenever a block is created, the mobile users that verified each transaction because they where aware of it share the localcoins that were included in these transactions as block fees.
---
### The Settings
- Let $U$ be the total number of users.
- Each user $i \in U$ can utilize the service if she is inside the geographical area, $d_i \in D$ and can change $d_i$ only by moving to another location and not by manipulating it.
----
- Any user $i \in U$ is able to exchange localcoins with another user $j \in U$ by creating one transaction $t_{i\rightarrow j}$.
- Any user $j$ has a set of trusted users ==$TN_j$==.
- The selection of $TN_j$ depends on $j$ and they are responsible for guaranteeing that any received transaction with $j$ as a destination should be examined before being broadcast.
----
#### Transaction Template
| Input | Output |
| -------------------------- | ---------- |
| $TN_i$ | $o_j$ |
| $h(t_{*\rightarrow i}(1))$ | $o_i$ |
| $h(t_{*\rightarrow i}(2))$ | $trf_{ij}$ |
| $h(t_{*\rightarrow i}(3))$ | $bf_{ij}$ |
| $\ldots$ | $b_i$ |
---
### Transacting Messages
- $send(i,j,t_{i\rightarrow j})$: The send command will broadcast $t_{i\rightarrow j}$ to all the nearby users (neighbors).
----
- $receive(t_{i\rightarrow j}, k)$: She checks the sender and receiver and if she is not familiar with either of them she forwards the message hoping to collect the transaction fees.
- If she belongs to the trusted users of the receiver of the transaction, she examines the input transactions and signs the message if she is able to validate all of them.
- If she receives the message by a trusted user, she updates her transaction database according to the signed message.
----
- $process(t_{i\rightarrow j}, k)$: If she received the same transaction before, she ignores the message unless it is now signed by another trusted user of j.
- After receiving the transaction, $j$, has to wait for at least $mTr$ of her $TN_j$ trusted users to sign and forward the transaction to her.
- The first user who forwards this message to j, regardless of being in her trusted users, will receive the amount of $trf_{ij}$.
----
- $ack(i,j,t\rightarrow j)$: If $j$ receives the message from $mTr$ users of her trusted network $TN_j$, then she broadcasts an acknowledgment message.
---
### Block Creation
- $build$: Whenever a user $l$ collects $BS$ transactions (both $send$ and $ack$), that are not yet verified, she tries to build a new block.
- She requires agreement of $mVu − 1$ other users about the validity of the $BS$ transactions in order to reach to a consensus.
- Her signed message also contains her location, $d_l$ and a current value of average distance vector $d$.
----
- $verify$: The first $mVu$ users who verify all the transactions in the create message and have average distance between each other bigger that $aVd$ will share the block fees.
- Every user $k$ who receives a verify message checks her database for unverified transactions and if she has any of the included in the message she signs them and forwards the message.
----
- Before forwarding the message, user k updates the distance entries, which she has signed.
- If she detects a double spending attempt, she deletes her entry if it has a later time-stamp or she signs her entry and adds it into the message if it has an earlier time-stamp.
- In case of double spending detection, user $k$ sets the entry for the corresponding transaction to 0 and attaches and signs her detected pair with a newer timestamp.
----
- $create$: Users who receive a message with transactions that are verified $mVu$ times and have average distance bigger than $aVd$ apart from forwarding the message they also broadcast a create message that defines the users who will share the block fees.
---
### Block Management
- $delete$: The delete command is triggered after the create command in order to delete all the input transactions to the freshly verified ones since they can not be used any more.
- After deleting all the transactions of one block, the whole block is deleted.
----
- $sync$: Any user can call sync function by giving only the time-stamp of her last update. By doing so, any nearby trusted user will send the newly verified transactions as well as the hash of the ones that have been deleted.
---
# Thank You
{"metaMigratedAt":"2023-06-15T01:00:44.030Z","metaMigratedFrom":"YAML","title":"LocalCoin Slides","breaks":true,"description":"View the slide with \"Slide Mode\".","slideOptions":"{\"theme\":\"moon\"}","contributors":"[{\"id\":\"b0437d1c-81da-42b0-887f-8a673e27c89f\",\"add\":7453,\"del\":2853}]"}