Bitcoin PayCodeA PayCode is a user-friendly identifier for a bitcoin address. The concept is inspired by easypaysy. The following is a simple prototype to demonstrate the basic concept.
Example PayCode: 326681/625/0In our example, the PayCode
326681/625/0represents the address
1LBregs3t4goLpvBghbJbFLoyt1rPL3jJhbecause that address occured in block number
326681in transaction number
625in output number
Convert PayCode to Address
Convert Address to PayCode
PayCode CertificateA PayCode certificate proves the mapping from PayCode to a particular address. It is basically an SPV inclusion proof. The most simple proof consists of a transaction inclusion proof and the corresponding block header. More subsequent block headers can be added to strengthen the proof of work on top. To prove a block's height, we can either download the full headers chain or we could use the more succinct FlyClient scheme.
Further WorkTo improve privacy the easypayse whitepaper discusses solutions that do not reuse addresses. Their scheme also introduces checksums and other topics.
PayCode UsabilityThe usability of the PayCode is another interesting research topic. I advocate for the most simple number format. The code should not contain any special characters but only numbers from 0-9. This is to maximize the usability. The purpose of payment codes is for humans to easily communicate an address. It should be concise. It should leave very little room for error. A credit card number like format is intuitive. It works well internationally. People are used to enter it into a device. It is easy to communicate.
A basic scheme simply adds trailing zeros. Applied to our example
3266 8106 2500. We can add a IBAN-like checksum by converting it into an integer and performing a basic mod-97 operation. In our example
326681062500 % 97 == 15the final result would be
3266 8106 2500 15.
Bitcoin URIFor Wallet compatibility we can extend the Bitcoin URI standard