Payments Service
FinP2P Payments service provides various capabilities to the FinP2P Network, one of those is the capability to on ramp or off ramp currency holdings to/from the FinP2P Network to be used for settlement and various payments.
The Payment service allows developers to Create a Deposit request with instructions how to send funds into a FinP2P wallet using external financial rails, and Create a Withdraw request to send funds out of a FinP2P wallet using external financial rails.
Digital Currency Wallets bridges
These functionalities support the option for financial institutions to enable settling of digital securities investments, trades, dividends and lending on the FinP2P network, by sending payment to external digital currency wallets, including not only stablecoins but also cryptocurrencies such as Bitcoin. Institutions who chose not to enable this option at this time will not be affected, and will have it as a future-ready option.
An institution implementing a digital currency bridge, needs to support deposits/payouts from/into external payment systems and cryptocurrency networks.
IBAN bridge
These functionalities also support the option for financial institutions to enable settling securities trades, dividends and deposits/withdraws on the FinP2P network by sending FIAT payments via IBAN (asynchronous, non-instant transactions).
An institution implementing an IBAN bridge, needs to support deposits/payouts from/into IBAN addresses within the FIAT financial system.
Other bridges
Financial institutions may implement other real-time gross settlement systems (such as TARGET2) to implement real time DvP with FIAT money over FinP2P.
Intent Settlement Payouts
An IOI Service destination can include the above bridge accounts to settle DvP Transactions or for Transfer of value such as Dividend payments. The Transaction will result in a receipt with a reference to the external financial rails transaction.
A FinP2P destination account supports the different payout methods, Please refer to Accounts for more information about different account types
The service API below is require by a Router to support Deposit or Withdraw of external payment holdings into a FinP2P escrow wallet (The IOI Service provides the support to use Payouts within a DvP process using intents).
service PaymentsService {
rpc CreateDepositRequest(SignedCreateDepositRequest) returns (SignedDepositResponse) {}
rpc CreateWithdrawRequest(SignedCreateWithdrawRequest) returns (SignedWithdrawResponse) {}
}
message SignedCreateDepositRequest {
CreateDepositRequest request = 1;
finp2p.common.SealingSignature signature = 2;
}
message CreateDepositRequest {
finp2p.common.Envelope envelope = 1;
CreateDepositRequestPayload payload = 2;
}
message CreateDepositRequestPayload {
finp2p.common.ResourceID profileId = 1;
DepositAccount account = 2;
uint64 amount = 3;
}
message SignedDepositResponse {
DepositResponse response = 1;
finp2p.common.SealingSignature signature = 2;
}
message DepositResponse {
finp2p.common.Envelope envelope = 1;
finp2p.common.Status status = 2;
DepositResponsePayload payload = 3;
}
message DepositResponsePayload {
string operationId = 1;
DepositInstruction instruction = 2;
}
message DepositInstruction {
DepositAccount account = 1;
string description = 2;
}
message SignedCreateWithdrawRequest {
CreateWithdrawRequest request = 1;
finp2p.common.SealingSignature signature = 2;
}
message CreateWithdrawRequest {
finp2p.common.Envelope envelope = 1;
CreateWithdrawRequestPayload payload = 2;
}
message WithdrawInstruction {
finp2p.accounts.Account account = 1;
string description = 2;
}
message CreateWithdrawRequestPayload {
finp2p.common.ResourceID profileId = 1;
DepositAccount account = 2;
uint64 amount = 3;
WithdrawInstruction instruction = 4;
}
message SignedWithdrawResponse {
WithdrawResponse response = 1;
finp2p.common.SealingSignature signature = 2;
}
message WithdrawResponse {
finp2p.common.Envelope envelope = 1;
finp2p.common.Status status = 2;
WithdrawResponsePayload payload = 3;
}
message WithdrawResponsePayload {
string operationId = 1;
}
message DepositAccount {
finp2p.accounts.Asset asset = 1;
DepositAccountIdentifier identifier = 2;
}
message DepositAccountIdentifier {
oneof identifier {
finp2p.accounts.CryptocurrencyWallet wallet = 1;
finp2p.accounts.Iban account = 2;
finp2p.accounts.Escrow escrowAccount = 4;
}
}