Polkadot ISO 20022 Integration
In this post, we would like to present a proposal to integrate Polkadot with the ISO20022 financial messaging standard. We have already applied with the W3F Grants Program and the commitee suggested that this project would be a great fit for Decentralized Futures, so we are presenting it to the community here.
You can find the application for the W3F grant here.
Project Overview
Overview
ISO20022 is the future standard of financial transactions of all kinds including payments, foreign exchange and securities trading. Many blockchain ecosystems like Ripple, Cardano and Stellar claim to be ISO20022 compliant. In order to make Polkadot ISO20022 compatible as well, it is necessary to start designing how such an integration would look like in pratice, as it is not trivial to bridge the gap between a decentralized blockchain infrastructure and a messaging protocol designed to be used between trusted entities such as banks. Some prior theoretical research has been conducted and in this project we want to go a step further and build a practical Proof-Of-Concept for ISO20022 payments in Substrate. ISO20022 covers a vast amount of different messages for different financial transactions. In this project, we want to focus on customer-to-customer interbank payments evolving around the ISO20022 message pain.001.001.11(CustomerCreditTransferInitiationV11).
Market Research
We conducted a survey with 5 major swiss banks on the topic of the integration of an ISO20022 compatible blockchain and we found that there was a general interest mostly in ISO20022 compatible cryptocurrency transactions and cross-border payments. A majority of the banks stated a positive sentiment toward blockchain technology and indicated that they would be willing to invest or collaborate in a project revolving around an ISO20022 compatible blockchain.
Fig. 1: Screenshot of survey results
Project Details
The goal of this project will be to implement a fully functional minimal viable product (MVP) that lets banks settle payments on the Polkadot blockchain using the ISO20022 standard. We will focus on customer-to-customer interbank payments and payment reversals, ie. Customer C1 with a bank account at bank B1 sending an amount of DOT to customer C2 with an account at bank B2 using ISO20022 messages.
MVP Components
This MVP will consist of the following components:
1. Substrate Pallet
The first component is a pallet that will be resopnsible for storing hashed ISO20022 messages and handeling interbank payment settlements as well as a payment reversal mechanism.
- Account management for banks: Banks create an account and transfer some DOT to it.
- Transaction management: Banks can submit a hashed (and salted) ISO20022 message along with the receiving bank account and DOT amount to the pallet in order to transfer a certain amount of DOT to the receiving bank.
- Payment reversal mechanism: Banks will be able to revert payments in order to be compliant with ISO20022 messages such as pain.007.001.11 (CustomerPaymentReversalV11) or pacs.007.001.12 (FIToFIPaymentReversalV12).
2. Java Client for Banks
In order for banks to use Polkadot as a payment settlement system, they will need to run a client which offers the following funcionality:
- API to receive customer payment instructions
- ISO20022 message parser/creator
- Send extrinsics to pallet for transfer
- Send extrinsic to pallet for reversal
- Send/Read ISO messages to bus
- Verify relevant ISO messages on chain
- Client account management system
- Create for each client an account number
- Store for each client a list of hashes form the chain
- Functionality to derive client balance from onchain hashes
- Hashmap-like storage of all ISO messages and salts
3. Interbank Message Bus
As the blockchain only stores hashes of the ISO 20022 messages in order to preserve privacy, we need some a communication system to exchange ISO20022 messages between banks.
Payment Flow
The below diagram describes the steps necessary to complete an ISO20022 payment using the Substrate pallet as the settlement system. Customer1 with a bank account at Bank1 is sending DOT to Customer2 with an account at bank Bank2. In this example we use two ISO20022 messages (for an example please see the appendix):
- pain.001.001.11 (CustomerCreditTransferInitiationV11) for the customer to initiate the payment.
- pacs.008.001.11 (FIToFICustomerCreditTransferV11) for the interbank transfer.
Design Choices
- We do not process ISO20022 messages onchain in order to preserve privacy.
- We do not use offchain-workers for message processing also for privacy reasons.
- We do not create customer accounts on chain, because they could easily be linked to a real person, again breaking privacy.
- We do not use one centralized message processing institution, as we want to give each bank full access to their on-chain funds, at least guaranteeing decentralization on the interbank level.
Team
Team members
- Piero Guicciardi (Project Lead & Developer)
- Yannick Steitz (Marketing & Outreach)
- Christian Langenbacher (Advisor Implementation)
Team’s experience
Piero
Piero has a Master’s degree in Computer Science from ETH Zürich and has been a core protocol developer for Encointer for the last two years, has recently become a member of the Polkadot Technical Fellowship and was granted a W3F Grant.
Below you can find a list of contributions by Piero:
W3F Grant Democratic Governance
- Application: Democratic Governance by pifragile · Pull Request #2123 · w3f/Grants-Program · GitHub
- Submission: Democratic Governance 1 Milestone 1 by pifragile · Pull Request #1101 · w3f/Grant-Milestone-Delivery · GitHub
Encointer core protocol:
- Design and implement faucet
- faucet tutorial by brenzi · Pull Request #14 · encointer/book · GitHub
- Faucet by pifragile · Pull Request #333 · encointer/encointer-node · GitHub
- Multiple faucets with whitelist and KSM deposit by pifragile · Pull Request #319 · encointer/pallets · GitHub
- faucet benchmarks by pifragile · Pull Request #326 · encointer/pallets · GitHub
- add faucet and reputation-commitments pallets by brenzi · Pull Request #193 · encointer/encointer-parachain · GitHub
- Design and implement democracy module
- Redesign participant attestations
- Endorsement after registration
- Early reward payout
- Allow for upgrading registrations and unregistering
- Allow reputables to endorse
- Geohash location validation algorithm
- Constant time random permutation for meetup assignment
Misc:
- Implement custom RPCs
- Implement storage migrations for Weight V2
- Various polkadot/substrate dependency bumps
- Fee payment in Encointer community currency
- Fees in community currency by pifragile · Pull Request #194 · encointer/encointer-node · GitHub
- Allow paying fees in CC and add integration test for transfer_all by pifragile · Pull Request #226 · encointer/encointer-node · GitHub
- Fees in community currency by pifragile · Pull Request #190 · encointer/pallets · GitHub
- Integrate try runtime
Non rust contributions:
- Build an indexer using qubquery
- GitHub - encointer/subquery (Main author)
- Build an accounting tool for encointer businesses
- Build an integration for Encointer personhood in KILT
- GitHub - encointer/kilt-personhood (Main author)
- Contributions to encointer js
Yannick Steitz
“The convergence of people, technology, and creativity represents a lasting synergy - this intersection is my sweet spot."
- Over six years of professional experience in cultural projects, design agencies, and digital start-ups.
- Most recently worked as Co-Founder/CEO and Project Manager at Ozelot Studios GmbH and VARY AG.
- In-depth understanding and hands-on experience in the fields of New Media, Mixed Reality, and Web3.
Christian Langenbacher
The project advisor Christian Langenbacher is the tech lead of Encointer and Integritee.
Team Code Repos
Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine.
Team LinkedIn Profiles
- https://www.linkedin.com/in/piero-guicciardi-66b939152/
- https://www.linkedin.com/in/yannick-steitz-9b33a71a1/
- Christian Langenbacher - Integritee | LinkedIn
References
- ISO 20022 Message Catalogue
- Nice website describing payment flows
- Book ISO20022 For Dummies
- ISO20022 example messages
Related Work in the Ecosystem
ISO20022 Research:
- Grants-Program/applications/ISO20022.md at 5c5aed8c22a812237deae5ceb19433688c87b8b4 · w3f/Grants-Program · GitHub
- Grant-Milestone-Delivery/deliveries/ISO20022-milestone1.md at c2cfee2894ecbec1c015fae279c4a2e39dbcc96e · w3f/Grant-Milestone-Delivery · GitHub
ISO8583 Research:
- Grants-Program/applications/Integrating-ISO8583.md at 5c5aed8c22a812237deae5ceb19433688c87b8b4 · w3f/Grants-Program · GitHub
- Grant-Milestone-Delivery/deliveries/ISO8583-milestone-1.md at c2cfee2894ecbec1c015fae279c4a2e39dbcc96e · w3f/Grant-Milestone-Delivery · GitHub
ISO8583 Implementation:
- Re-open ISO-8583 RFP grant by dastansam · Pull Request #2184 · w3f/Grants-Program · GitHub
- Add ISO-8553 PoC implementation by dastansam · Pull Request #1809 · w3f/Grants-Program · GitHub
- Grants-Program/applications/ISO-8583-implementation.md at 5c5aed8c22a812237deae5ceb19433688c87b8b4 · w3f/Grants-Program · GitHub
- Grant-Milestone-Delivery/deliveries/iso_8583_PoC_milestone_1.md at c2cfee2894ecbec1c015fae279c4a2e39dbcc96e · w3f/Grant-Milestone-Delivery · GitHub