Introducing ICPP
A platform for P2P privacy-enabled transactions on the IC
Before anything, Happy Christmas to everyone in the community! It seems timely, in some strange way, that the ICPP platform is open for business now, a bit of a gift of Santa.
This work has taken much longer than expected, let alone planned… and deploying has been a Royal PITA. In addition, it became apparent that the original user interaction model was not quite where I wanted it to be (given the application context) so, after careful thought, I decided to make a turn and implement a more dapp-like approach. It perhaps introduces some slight friction, depending on how you look at it, and forced some retesting.
But we’re now here. I’m therefore quite happy (at last..!) to introduce ICPP, a new protocol for privacy-enabled P2P transactions on the IC. It’s not a new token, nor a wrapped derivative. ICPP provides both the cryptography and architecture to enable anyone on the IC network to make P2P transfers of vanilla ICP tokens.
You can access a non-technical presentation deck and brief user guide through this link. A denser and maths-heavy technical paper will be soon available once I finish its revision, and, all going well, I will be likely publish it on ArXiV for quicker dissemination. A separate version of that same paper will be sent for consideration to a top-tier Journal in the field (e.g., Springer’s Journal of Cryptographic Engineering to “complement” my 2022 co-authored paper, as technologies presented in that piece are used on ICPP).
The platform can be easily used through a dashboard deployed to mainnet and accessed by through http://icpp.tech. The site is fully hosted on the Internet Computer.
It was designed to provide users with an easy, straightforward mechanism to access ICPP for sending and accepting ICP transfers. Any ICP received via ICPP are available for use directly and almost immediately, as any other ICP token. Because they are like any other ICP token.
An insane amounts of man-hours have been put behind ICPP, not just on writing the code (in Motoko, Rust and TypeScript/JS for the dashboard) but testing. Despite the development hard work on a local NNS replica, ICPP’s behavior on the mainnet needs to be yet fully assessed.
Therefore, I would strongly encourage any prospective user to start with low transactions initially (but DO NOT self-send as you have to provide a Principal ID as destination from a dashboard linked to that same Principal ID; that round-trip may lead to unpredictable results). The easier way is to create a separate Internet Identity and use its Principal as target.
- Log-in to ICPP on one browser (say, Chrome) with one II
- Log-in to ICPP on a separate browser (say, Edge) with the second II
- Those, quite obviously, will be two separate IDs (instances)
- Make a low-amount transfer between both Principals and check the net ICP sent has safely arrived to destination
If all proceeds normally (each leg usually demands 10-15 minutes to complete, maybe less, and sometimes longer) you can try larger amounts.
Now, fees for low-amount transactions are quite high, percentage-wise. Right now:
- Send 10 ICP → Cost 3.80 ICP (38%)
- Send 100 ICP → Cost 4.34 ICP (4.34%)
- Send 1000 ICP → Cost 8.93 ICP (0.893%)
- Send 2000 ICP → Cost 13.74 ICP (0.687%)
What is the practical consequence of this action? The ICP that land on your second account will be anonymized, in the sense that there will be no link between the sender (you in this case) and the receiver (also you). The real life equivalent is as if you get paid cash-in-hand.
There are some hardwired limitations, perhaps most noticeably the cap of 2,000 ICP tokens per transaction. The idea is to avoid ICPP being used in nefarious ways, or at least make it inconvenient. It also mirrors the same restrictions for usage of cash in many jurisdictions, so the choice is not purely arbitrary but an attempt to make transactions on ICPP mirror cash usage as its currently legislated. Nothing more, nothing else.
I will try to be available here to answer questions and try solve any issues. I have zero visibility on any ICP flows other than seeing the protocol being used, not by whom or between whom. I also have no ability to provide any information about any transaction to third parties. Whatever happens on ICPP is only known to the individuals using the platform to transact. A consequence of strict privacy enforcement.
Last but not least: for those who remember Zcash recent rise from being a technical curiosity (even an outlier) to where it is today, promoting ICPP would perhaps generate the attention, higher demand and upwards price push for ICP. I cannot do it alone, and should the ICPP tech stack prove its worth I hope the community rallies behind it. In one important sense, I believe ICPP brings privacy natively to ICP. That would make ICP itself more desirable, let alone embody in the ICP ecosystem the degree of user sovereignty and agency that can only be delivered through privacy. Satoshi’s core ideals, shall we say.
Finally, as you would expect one to say almost formulaically, the use of ICPP (as any other crypto or software platforms) entails risks. Consequently, by using the ICPP you implicitly accept doing so at your own risk, including, but not limited to, the potential loss of funds. Bear this in mind and use judiciously.
