diff --git a/packages/documentation/astro.config.mjs b/packages/documentation/astro.config.mjs index 1dd7bd2a85..8ce8be357d 100644 --- a/packages/documentation/astro.config.mjs +++ b/packages/documentation/astro.config.mjs @@ -33,7 +33,7 @@ export default defineConfig({ starlight({ title: 'Rafiki', description: - 'Rafiki is open source software that allows an Account Servicing Entity to enable Interledger functionality on its users’ accounts.', + 'Rafiki is open source software that allows a financial service provider to enable Interledger functionality on user accounts.', customCss: [ './node_modules/@interledger/docs-design-system/src/styles/teal-theme.css', './node_modules/@interledger/docs-design-system/src/styles/ilf-docs.css', @@ -113,11 +113,8 @@ export default defineConfig({ collapsed: true, items: [ { - label: 'Account servicing entity', - translations: { - es: 'Entidad que administra la cuenta (ASE)' - }, - link: '/overview/concepts/account-servicing-entity' + label: 'Financial service provider', + link: '/overview/concepts/financial-service-provider' }, { label: 'Multi-tenancy', @@ -373,6 +370,10 @@ export default defineConfig({ label: 'Webhook event types', link: '/resources/webhook-event-types' }, + { + label: 'Further learning', + link: '/resources/further-learning' + }, { label: 'Get involved', link: '/resources/get-involved' @@ -382,21 +383,21 @@ export default defineConfig({ ], plugins: [ starlightLlmsTxt({ - details: `Rafiki documentation is for Account Servicing Entities (ASEs) — regulated institutions such as banks, digital wallet providers, and mobile money operators — who want to run Rafiki to add Interledger and Open Payments functionality to their users' accounts. It is not documentation for an end-user product or a payment app. + details: `Rafiki documentation is for financial service providers (FSPs) — regulated institutions such as banks, digital wallet providers, and mobile money operators — who want to run Rafiki to add Interledger and Open Payments functionality to their users' accounts. It is not documentation for an end-user product or a payment app. -Rafiki exposes several separate HTTP services rather than a single API surface: a GraphQL Admin API for managing the backend (peers, assets, wallet addresses, liquidity), a GraphQL Admin API for the auth service, an ILP connector, an auto-peering server, and REST APIs implementing the three parts of the Open Payments protocol. The backend serves the wallet address server and resource server together as a single Open Payments API. The auth service serves the authorization server (GNAP) separately. Questions about configuring or operating a Rafiki instance are answered by the Admin APIs; questions about initiating or receiving payments, or about grant negotiation, are answered by the Open Payments APIs, which are specified independently at openpayments.dev. + Rafiki exposes several separate HTTP services rather than a single API surface: a GraphQL Admin API for managing the backend (peers, assets, wallet addresses, liquidity), a GraphQL Admin API for the auth service, an ILP connector, an auto-peering server, and REST APIs implementing the three parts of the Open Payments protocol. The backend serves the wallet address server and resource server together as a single Open Payments API. The auth service serves the authorization server (GNAP) separately. Questions about configuring or operating a Rafiki instance are answered by the Admin APIs; questions about initiating or receiving payments, or about grant negotiation, are answered by the Open Payments APIs, which are specified independently at openpayments.dev. -Rafiki supports two interchangeable accounting backends: TigerBeetle (the default, purpose-built for financial accounting) and PostgreSQL (an alternative for deployments that prefer a single database). Integration guidance does not change based on which is used. + Rafiki supports two interchangeable accounting backends: TigerBeetle (the default, purpose-built for financial accounting) and PostgreSQL (an alternative for deployments that prefer a single database). Integration guidance does not change based on which is used. -This site publishes documentation for multiple Rafiki versions. Prefer the current/default version unless the user explicitly asks about an older release — content under a version prefix such as v1-beta describes a prior API surface and may no longer be accurate. + This site publishes documentation for multiple Rafiki versions. Prefer the current/default version unless the user explicitly asks about an older release — content under a version prefix such as v1-beta describes a prior API surface and may no longer be accurate. -Key terminology notes: + Key terminology notes: -- Rafiki is the reference implementation of the Open Payments protocol; ASEs deploy and operate it themselves, on their own infrastructure -- Wallet addresses are URL-based identifiers for financial accounts — not cryptocurrency wallets -- An Account Servicing Entity (ASE) is the regulated institution that holds and manages accounts on behalf of its users and runs Rafiki -- Peering is the trust relationship two Rafiki instances (run by different ASEs) establish to exchange payments directly — distinct from a payment between two end users -- Grants and GNAP (Grant Negotiation and Authorization Protocol) refer to Open Payments' authorization flow, distinct from OAuth`, + - Rafiki is the reference implementation of the Open Payments protocol; FSPs deploy and operate it themselves, on their own infrastructure + - Wallet addresses are URL-based identifiers for financial accounts — not cryptocurrency wallets + - A financial service provider (FSP) is the regulated institution that holds and manages accounts on behalf of its users and runs Rafiki + - Peering is the trust relationship two Rafiki instances (run by different FSPs) establish to exchange payments directly — distinct from a payment between two end users + - Grants and GNAP (Grant Negotiation and Authorization Protocol) refer to Open Payments' authorization flow, distinct from OAuth`, exclude: ['v1-beta/**'], optionalLinks: [ { @@ -416,7 +417,7 @@ Key terminology notes: { label: 'Overview and concepts', description: - 'Introduction to Rafiki and core concepts such as account servicing entities, multi-tenancy, accounting, clearing and settlement, and Interledger', + 'Introduction to Rafiki and core concepts such as financial service providers, multi-tenancy, accounting, clearing and settlement, and Interledger', paths: ['overview/**'] }, { diff --git a/packages/documentation/public/img/ase-responsibilites.png b/packages/documentation/public/img/fsp-responsibilites.png similarity index 100% rename from packages/documentation/public/img/ase-responsibilites.png rename to packages/documentation/public/img/fsp-responsibilites.png diff --git a/packages/documentation/src/content/docs/apis/graphql/admin-api-overview.mdx b/packages/documentation/src/content/docs/apis/graphql/admin-api-overview.mdx index 54e7f1dc9d..7832a6e99c 100644 --- a/packages/documentation/src/content/docs/apis/graphql/admin-api-overview.mdx +++ b/packages/documentation/src/content/docs/apis/graphql/admin-api-overview.mdx @@ -4,7 +4,9 @@ title: Overview import { LinkOut } from '@interledger/docs-design-system' -Rafiki provides two GraphQL APIs, described below. As described on GraphQL.org, GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL APIs are organized in terms of types and fields, not endpoints. +Rafiki provides two GraphQL APIs, described below. These APIs must be private, meaning they're accessible only by the financial service provider. + +As described on GraphQL.org, GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL APIs are organized in terms of types and fields, not endpoints. ## Backend Admin API diff --git a/packages/documentation/src/content/docs/es/index.mdx b/packages/documentation/src/content/docs/es/index.mdx index 83c6c918b5..9e7633e066 100644 --- a/packages/documentation/src/content/docs/es/index.mdx +++ b/packages/documentation/src/content/docs/es/index.mdx @@ -4,7 +4,7 @@ description: Rafiki es un software de código abierto que ofrece a una Entidad d template: splash lastUpdated: false hero: - tagline: Rafiki es un software de código abierto que ofrece a una Entidad de Servicio de Cuentas (ASE) una solución eficiente para habilitar la funcionalidad de Interledger en las cuentas de sus usuarios. + tagline: Rafiki es un software de código abierto que ofrece a una Entidad de Servicio de Cuentas (financial service provider, FSP) una solución eficiente para habilitar la funcionalidad de Interledger en las cuentas de sus usuarios. actions: - text: Leer los documentos de Rafiki link: /es/overview/overview @@ -19,7 +19,7 @@ import { Card, CardGrid, LinkCard } from '@astrojs/starlight/components' - Pruebe Rafiki ejecutando dos ASE simuladas que se interconectan + Pruebe Rafiki ejecutando dos FSP simuladas que se interconectan automáticamente entre sí. diff --git a/packages/documentation/src/content/docs/es/overview/concepts/accounting.mdx b/packages/documentation/src/content/docs/es/overview/concepts/accounting.mdx index f2a783c92c..a4b5b45adc 100644 --- a/packages/documentation/src/content/docs/es/overview/concepts/accounting.mdx +++ b/packages/documentation/src/content/docs/es/overview/concepts/accounting.mdx @@ -228,11 +228,11 @@ A single-phase transfer posts funds to accounts immediately when the transfer is >ASE: Fires webhook event when incoming payment completes - ASE->>R: Withdraws payment amount from incoming payment liquidity account - ASE->>ASE: Credits the recipient's account by the payment amount + R->>FSP: Fires webhook event when incoming payment completes + FSP->>R: Withdraws payment amount from incoming payment liquidity account + FSP->>FSP: Credits the recipient's account by the payment amount `} /> @@ -248,10 +248,10 @@ A two-phase transfer moves funds in two stages. >ASE: Fires webhook event when incoming payment completes - ASE->>Rafiki: Withdraws payment amount from incoming payment
liquidity account (reserve funds pending) - ASE->>ASE: Credits the recipient's account by the payment amount - ASE->>Rafiki: Resolve funds (post) + Rafiki->>FSP: Fires webhook event when incoming payment completes + FSP->>Rafiki: Withdraws payment amount from incoming payment
liquidity account (reserve funds pending) + FSP->>FSP: Credits the recipient's account by the payment amount + FSP->>Rafiki: Resolve funds (post) Rafiki->>Rafiki: Two-phase transfer complete `} /> diff --git a/packages/documentation/src/content/docs/es/overview/concepts/clearing-settlement.mdx b/packages/documentation/src/content/docs/es/overview/concepts/clearing-settlement.mdx index 72958dedeb..7c3458fa11 100644 --- a/packages/documentation/src/content/docs/es/overview/concepts/clearing-settlement.mdx +++ b/packages/documentation/src/content/docs/es/overview/concepts/clearing-settlement.mdx @@ -6,25 +6,25 @@ import { LinkOut } from '@interledger/docs-design-system' ## Compensación -Cuando se realiza un pago a través de los canales bancarios tradicionales, el dinero no se transfiere de forma instantánea. Primero, se realizan verificaciones para confirmar que el dinero existe y se puede transferir. Las redes de compensación son responsables del intercambio de mensajes entre las ASE para facilitar estas verificaciones. Este proceso se denomina compensación. Cuando un pago se compensa correctamente, significa que la ASE del pagador tiene una obligación con la ASE del beneficiario. +Cuando se realiza un pago a través de los canales bancarios tradicionales, el dinero no se transfiere de forma instantánea. Primero, se realizan verificaciones para confirmar que el dinero existe y se puede transferir. Las redes de compensación son responsables del intercambio de mensajes entre las FSP (financial service provider) para facilitar estas verificaciones. Este proceso se denomina compensación. Cuando un pago se compensa correctamente, significa que la FSP del pagador tiene una obligación con la FSP del beneficiario. El [Interledger Protocol (ILP)](/es/overview/concepts/interledger) no es una red de compensación tradicional, pero funciona de manera similar. -- Las ASE que implementan el protocolo deben convertirse en [pares](/integration/requirements/peers) para realizar transacciones entre sí. Esto es comparable a la banca tradicional, donde las ASE deben utilizar la misma red de compensación. Una ASE no puede usar Interledger para realizar transacciones con otra ASE a menos que ambas hayan implementado el protocolo y se hayan interconectado. -- Las ASE interconectadas intercambian paquetes ILP, que son paquetes de valor que contienen información de las transacciones. Los paquetes ILP son similares a los mensajes intercambiados durante el proceso de compensación tradicional. +- Las FSP que implementan el protocolo deben convertirse en [pares](/integration/requirements/peers) para realizar transacciones entre sí. Esto es comparable a la banca tradicional, donde las FSP deben utilizar la misma red de compensación. Una FSP no puede usar Interledger para realizar transacciones con otra FSP a menos que ambas hayan implementado el protocolo y se hayan interconectado. +- Las FSP interconectadas intercambian paquetes ILP, que son paquetes de valor que contienen información de las transacciones. Los paquetes ILP son similares a los mensajes intercambiados durante el proceso de compensación tradicional. - El intercambio exitoso de paquetes ILP entre pares crea obligaciones entre ellos que deben liquidarse. La recepción de un paquete ILP cumplido es básicamente un pagaré condicional —una promesa de pago— que afecta los saldos contables financieros entre los pares. Puede obtener más información sobre la compensación en relación con ILP en los documentos para desarrolladores de Interledger. -Conceptualmente, Rafiki se sitúa en el nivel de compensación, pero no es una red de compensación. Es un software que permite implementar el Interledger Protocol de forma más rápida y sencilla. Rafiki utiliza ILP para [hacer un seguimiento de la liquidez](/es/overview/concepts/accounting) entre activos, pagos y pares. Una ASE aún debe conectar Rafiki con su sistema de backend existente y su libro mayor interno para la autenticación, la obtención de los tipos de cambio y la gestión de la liquidez. Por ejemplo, si un pago entrante se completa en Rafiki, el backend de la ASE debe acreditar los fondos en la cuenta del destinatario dentro de su propio sistema, independientemente de cómo lo implemente. +Conceptualmente, Rafiki se sitúa en el nivel de compensación, pero no es una red de compensación. Es un software que permite implementar el Interledger Protocol de forma más rápida y sencilla. Rafiki utiliza ILP para [hacer un seguimiento de la liquidez](/es/overview/concepts/accounting) entre activos, pagos y pares. Una FSP aún debe conectar Rafiki con su sistema de backend existente y su libro mayor interno para la autenticación, la obtención de los tipos de cambio y la gestión de la liquidez. Por ejemplo, si un pago entrante se completa en Rafiki, el backend de la FSP debe acreditar los fondos en la cuenta del destinatario dentro de su propio sistema, independientemente de cómo lo implemente. En cualquier caso, aún no se ha producido ningún movimiento de dinero real. ## Liquidación -En la banca tradicional, la liquidación es el cumplimiento de una obligación entre las ASE. Convierte la promesa de pago en un pago real mediante la transferencia de fondos reales. Esto ocurre a través de una red de liquidación compartida, como Fedwire en los Estados Unidos. +En la banca tradicional, la liquidación es el cumplimiento de una obligación entre las FSP. Convierte la promesa de pago en un pago real mediante la transferencia de fondos reales. Esto ocurre a través de una red de liquidación compartida, como Fedwire en los Estados Unidos. -Cuando la ASE del pagador liquida con la ASE del beneficiario, es muy probable que no esté transfiriendo dinero en efectivo de forma física. Lo más probable es que exista un intermediario, como un banco de reserva o un banco central, que mantenga cuentas para ambas ASE. El intermediario transfiere los fondos de una cuenta a la otra, acreditando y debitando las cuentas según sea necesario. +Cuando la FSP del pagador liquida con la FSP del beneficiario, es muy probable que no esté transfiriendo dinero en efectivo de forma física. Lo más probable es que exista un intermediario, como un banco de reserva o un banco central, que mantenga cuentas para ambas FSP. El intermediario transfiere los fondos de una cuenta a la otra, acreditando y debitando las cuentas según sea necesario. Con Interledger, el concepto de liquidación no es tan diferente. Cada [par](/integration/requirements/peers) debe acordar un sistema de liquidación que se utilizará para cumplir con sus obligaciones mutuas. Sin embargo, ILP en sí mismo no es un sistema de liquidación. Esto significa que los pares deben tener alguna otra forma de cumplir con sus obligaciones e intercambiar valor. Los ejemplos pueden incluir el uso de un sistema de liquidación bruta en tiempo real, como Fedwire; una red de cámara de compensación automatizada (ACH); un servicio de transferencia de dinero o algún otro canal de pago. Puede obtener más información sobre la liquidación en relación con ILP en los documentos para desarrolladores de Interledger. diff --git a/packages/documentation/src/content/docs/es/overview/concepts/account-servicing-entity.mdx b/packages/documentation/src/content/docs/es/overview/concepts/financial-service-provider.mdx similarity index 64% rename from packages/documentation/src/content/docs/es/overview/concepts/account-servicing-entity.mdx rename to packages/documentation/src/content/docs/es/overview/concepts/financial-service-provider.mdx index e5fdc7acde..0a961fc29d 100644 --- a/packages/documentation/src/content/docs/es/overview/concepts/account-servicing-entity.mdx +++ b/packages/documentation/src/content/docs/es/overview/concepts/financial-service-provider.mdx @@ -1,31 +1,31 @@ --- -title: Entidad que administra la cuenta (ASE) +title: Financial service provider --- -Una entidad que administra la cuenta (account servicing entity, ASE) es una entidad regulada que proporciona y mantiene cuentas de pago para sus clientes. Algunos ejemplos de ASE son los bancos, los proveedores de billeteras digitales y los proveedores de dinero móvil. +Una entidad que administra la cuenta (financial service provider, FSP) es una entidad regulada que proporciona y mantiene cuentas de pago para sus clientes. Algunos ejemplos de FSP son los bancos, los proveedores de billeteras digitales y los proveedores de dinero móvil. -Como entidades reguladas, las ASE están sujetas a las leyes, normas y regulaciones de sus jurisdicciones. Por lo tanto, las entidades no reguladas **no** deben utilizar Rafiki en entornos de producción. +Como entidades reguladas, las FSP están sujetas a las leyes, normas y regulaciones de sus jurisdicciones. Por lo tanto, las entidades no reguladas **no** deben utilizar Rafiki en entornos de producción. ## Responsabilidades y obligaciones Imagen con cuatro paneles que resumen las cuatro responsabilidades principales de las ASE ### AML (Prevención del lavado de dinero) -Las ASE cumplen con las leyes y regulaciones contra el lavado de dinero para detectar y prevenir el lavado de dinero y otras actividades financieras sospechosas. +Las FSP cumplen con las leyes y regulaciones contra el lavado de dinero para detectar y prevenir el lavado de dinero y otras actividades financieras sospechosas. ### KYC/KYB (Conozca a su cliente/negocio) -Las prácticas de KYC y KYB garantizan que las ASE verifiquen la identidad de sus clientes mediante la recopilación de documentos de identidad y comprobantes de domicilio, la verificación de registros comerciales, la consulta de listas de sanciones y otros procesos. +Las prácticas de KYC y KYB garantizan que las FSP verifiquen la identidad de sus clientes mediante la recopilación de documentos de identidad y comprobantes de domicilio, la verificación de registros comerciales, la consulta de listas de sanciones y otros procesos. ### Gestión de cuentas de los usuarios -Las ASE gestionan la creación, el mantenimiento y la seguridad de las cuentas de sus clientes y de los saldos de dichas cuentas. Del mismo modo, son responsables de autenticar a sus clientes y de ofrecerles canales seguros para que interactúen con sus cuentas a través de aplicaciones móviles, sitios web u otras interfaces. +Las FSP gestionan la creación, el mantenimiento y la seguridad de las cuentas de sus clientes y de los saldos de dichas cuentas. Del mismo modo, son responsables de autenticar a sus clientes y de ofrecerles canales seguros para que interactúen con sus cuentas a través de aplicaciones móviles, sitios web u otras interfaces. ### Libro contable -Dado que las ASE gestionan depósitos y retiros a través de métodos de pago externos (como transferencias bancarias, tarjetas de crédito y otros servicios), deben registrar en su libro contable todas las transacciones y la información de saldos. +Dado que las FSP gestionan depósitos y retiros a través de métodos de pago externos (como transferencias bancarias, tarjetas de crédito y otros servicios), deben registrar en su libro contable todas las transacciones y la información de saldos. diff --git a/packages/documentation/src/content/docs/es/overview/concepts/multi-tenancy.mdx b/packages/documentation/src/content/docs/es/overview/concepts/multi-tenancy.mdx index d863b79d68..41fad0d5b5 100644 --- a/packages/documentation/src/content/docs/es/overview/concepts/multi-tenancy.mdx +++ b/packages/documentation/src/content/docs/es/overview/concepts/multi-tenancy.mdx @@ -2,9 +2,9 @@ title: Multitenencia --- -La multitenencia es un enfoque arquitectónico que permite que una sola instancia de Rafiki preste servicio a múltiples entidades que administran cuentas (account servicing entities, ASE). Esto permite a las organizaciones compartir servicios de aplicaciones y recursos de bases de datos, al tiempo que mantienen el aislamiento y la seguridad de los datos. Al implementar la multitenencia, Rafiki simplifica el proceso de integración para las ASE, lo que hace que la incorporación sea más rápida y sencilla. +La multitenencia es un enfoque arquitectónico que permite que una sola instancia de Rafiki preste servicio a múltiples entidades que administran cuentas (financial service providers, FSPs). Esto permite a las organizaciones compartir servicios de aplicaciones y recursos de bases de datos, al tiempo que mantienen el aislamiento y la seguridad de los datos. Al implementar la multitenencia, Rafiki simplifica el proceso de integración para las FSP, lo que hace que la incorporación sea más rápida y sencilla. -En un entorno multicliente, la entidad responsable de administrar una instancia de Rafiki que presta servicio a múltiples ASE se denomina **operador**. Cada ASE que utiliza la instancia compartida de Rafiki se denomina **cliente**. +En un entorno multicliente, la entidad responsable de administrar una instancia de Rafiki que presta servicio a múltiples FSP se denomina **operador**. Cada FSP que utiliza la instancia compartida de Rafiki se denomina **cliente**. ## Funciones y responsabilidades del operador y del cliente @@ -28,7 +28,7 @@ Los clientes se agregan a través de la API de administración del backend o de ### Cliente -Un cliente es una ASE que se conecta a una instancia compartida de Rafiki en lugar de ejecutar su propio entorno. Para conectarse al entorno compartido, cada cliente debe instalar y ejecutar su propio servicio de integración. Los clientes son responsables de lo siguiente: +Un cliente es una FSP que se conecta a una instancia compartida de Rafiki en lugar de ejecutar su propio entorno. Para conectarse al entorno compartido, cada cliente debe instalar y ejecutar su propio servicio de integración. Los clientes son responsables de lo siguiente: - Crear y administrar wallet addresses para sus usuarios (por ejemplo, sus consumidores). - Enviar y recibir pagos. @@ -38,7 +38,7 @@ Un cliente es una ASE que se conecta a una instancia compartida de Rafiki en lug ## Beneficios de la multitenencia - El mantenimiento centralizado permite a los operadores realizar actualizaciones una sola vez para todos los clientes. -- La incorporación mejorada permite que las nuevas ASE se conecten al entorno compartido sin tener que implementar su propia instancia de Rafiki. +- La incorporación mejorada permite que las nuevas FSP se conecten al entorno compartido sin tener que implementar su propia instancia de Rafiki. - La administración simplificada ofrece a los operadores una forma rápida de agregar y eliminar clientes. ### Consideraciones clave diff --git a/packages/documentation/src/content/docs/es/overview/concepts/telemetry.mdx b/packages/documentation/src/content/docs/es/overview/concepts/telemetry.mdx index 73864b54e8..4bce5bda07 100644 --- a/packages/documentation/src/content/docs/es/overview/concepts/telemetry.mdx +++ b/packages/documentation/src/content/docs/es/overview/concepts/telemetry.mdx @@ -20,7 +20,7 @@ Nuestros objetivos son: ### Privacidad y opcionalidad -La privacidad es una preocupación primordial para Interledger Foundation. La función de telemetría de Rafiki está diseñada para proporcionar información valiosa de la red sin vulnerar la privacidad ni facilitar actividades maliciosas por parte de las ASE. Consulte la sección [Privacidad](#privacidad) a continuación para obtener más información. +La privacidad es una preocupación primordial para Interledger Foundation. La función de telemetría de Rafiki está diseñada para proporcionar información valiosa de la red sin vulnerar la privacidad ni facilitar actividades maliciosas por parte de las FSP (financial service provider). Consulte la sección [Privacidad](#privacidad) a continuación para obtener más información. Actualmente, la función de telemetría está habilitada de forma predeterminada en los entornos de prueba (entornos que no manejan dinero real). Cuando está activa, la función transmite métricas al recopilador de testnet. Puede optar por compartir sus métricas con un recopilador de livenet cuando opere en un entorno de livenet de producción (con dinero real). Independientemente del entorno, también puede optar por desactivar la telemetría por completo. Revise las [variables de entorno de telemetría](#variables-de-entorno-de-telemetría) para obtener más información. @@ -63,10 +63,10 @@ Interledger Foundation inicialmente utilizó Grafana alojado en Amazon, pero no Para fines de telemetría, todos los importes recopilados por Rafiki instrumentado deben convertirse a una moneda base. :::caution[Justificación de privacidad] -Si solo dos ASE están interconectadas mediante una moneda distinta del USD y recopilamos datos en esa moneda, sería fácil determinar los volúmenes transferidos entre esas dos ASE. Para mantener la privacidad, convertimos todos los importes a una moneda base. +Si solo dos FSP están interconectadas mediante una moneda distinta del USD y recopilamos datos en esa moneda, sería fácil determinar los volúmenes transferidos entre esas dos FSP. Para mantener la privacidad, convertimos todos los importes a una moneda base. ::: -Si una ASE no proporciona el tipo de cambio necesario para una transacción, la solución de telemetría igualmente convierte el importe a la moneda base utilizando tipos de cambio externos. Una función Lambda en AWS recupera y almacena los tipos de cambio externos. La función se activa mediante un evento diario de `CloudWatch` y almacena los tipos de cambio en un bucket público de S3. El bucket de S3 no tiene control de versiones, y los datos se sobrescriben diariamente para garantizar aún más la privacidad. +Si una FSP no proporciona el tipo de cambio necesario para una transacción, la solución de telemetría igualmente convierte el importe a la moneda base utilizando tipos de cambio externos. Una función Lambda en AWS recupera y almacena los tipos de cambio externos. La función se activa mediante un evento diario de `CloudWatch` y almacena los tipos de cambio en un bucket público de S3. El bucket de S3 no tiene control de versiones, y los datos se sobrescriben diariamente para garantizar aún más la privacidad. ### Instrumentación @@ -118,7 +118,7 @@ El ruido, seleccionado de la distribución de Laplace, se genera utilizando este ### Conversión de moneda -Otro factor que oculta los datos confidenciales es la conversión de moneda. En las transacciones entre distintas monedas, usted, como ASE, proporciona los tipos de cambio internamente. De este modo, los tipos de cambio no se pueden correlacionar con una transacción individual. Si no proporciona o no puede proporcionar los tipos de cambio necesarios, se utiliza una API externa para los tipos de cambio. En este caso, los tipos de cambio obtenidos se sobrescriben con frecuencia, sin control de versiones ni acceso al historial. Esto introduce una capa adicional de ruido y protege aún más la privacidad de las transacciones. +Otro factor que oculta los datos confidenciales es la conversión de moneda. En las transacciones entre distintas monedas, usted, como FSP, proporciona los tipos de cambio internamente. De este modo, los tipos de cambio no se pueden correlacionar con una transacción individual. Si no proporciona o no puede proporcionar los tipos de cambio necesarios, se utiliza una API externa para los tipos de cambio. En este caso, los tipos de cambio obtenidos se sobrescriben con frecuencia, sin control de versiones ni acceso al historial. Esto introduce una capa adicional de ruido y protege aún más la privacidad de las transacciones. ### Valores experimentales de las transacciones al utilizar el algoritmo diff --git a/packages/documentation/src/content/docs/es/overview/overview.mdx b/packages/documentation/src/content/docs/es/overview/overview.mdx index 6045b6730e..75403890bd 100644 --- a/packages/documentation/src/content/docs/es/overview/overview.mdx +++ b/packages/documentation/src/content/docs/es/overview/overview.mdx @@ -7,7 +7,7 @@ import { Card, CardGrid } from '@astrojs/starlight/components' Implementar y mantener la pila del [Protocolo Interledger (ILP)](#interledger) por cuenta propia puede resultar difícil y llevar mucho tiempo. Rafiki facilita la integración con la red Interledger sin necesidad de desarrollar y mantener sus propias implementaciones. -Rafiki es un software de código abierto mantenido por un equipo especializado y disponible de forma gratuita para cualquier [entidad que administra cuentas](/es/overview/concepts/account-servicing-entity) (account servicing entity, ASE) con licencia que desee implementar Interledger y [Open Payments](#open-payments) en las cuentas de sus usuarios. +Rafiki es un software de código abierto mantenido por un equipo especializado y disponible de forma gratuita para cualquier [entidad que administra cuentas](/es/overview/concepts/financial-service-provider) (financial service provider, FSP) con licencia que desee implementar Interledger y [Open Payments](#open-payments) en las cuentas de sus usuarios. :::tip[Pruébelo] El [Local Playground](/integration/playground/overview) le permite probar Rafiki ejecutando dos entidades que administran cuentas simuladas que se interconectan automáticamente entre sí. @@ -15,9 +15,9 @@ El [Local Playground](/integration/playground/overview) le permite probar Rafiki ## Casos de uso -### Pagos entre pares entre ASE +### Pagos entre pares entre FSP -En el contexto de Rafiki, un par es otra ASE con la que se realizan transacciones. Para establecer una relación de interconexión, es necesario que ambos acuerden la moneda en la que realizarán las transacciones, un mecanismo y una frecuencia de liquidación, así como otros detalles. Interledger permite la interoperabilidad entre diferentes sistemas de pago y monedas, lo que facilita que los pares realicen transacciones directamente entre sí. +En el contexto de Rafiki, un par es otra FSP con la que se realizan transacciones. Para establecer una relación de interconexión, es necesario que ambos acuerden la moneda en la que realizarán las transacciones, un mecanismo y una frecuencia de liquidación, así como otros detalles. Interledger permite la interoperabilidad entre diferentes sistemas de pago y monedas, lo que facilita que los pares realicen transacciones directamente entre sí. ### Pagos de comercio electrónico diff --git a/packages/documentation/src/content/docs/index.mdx b/packages/documentation/src/content/docs/index.mdx index 65b441c239..d24326ca5c 100644 --- a/packages/documentation/src/content/docs/index.mdx +++ b/packages/documentation/src/content/docs/index.mdx @@ -1,10 +1,10 @@ --- title: Hello from Rafiki -description: Rafiki is open source software that provides an efficient solution for an Account Servicing Entity to enable Interledger functionality on its users' accounts. +description: Rafiki is open source software that provides an efficient solution for a financial service provider to enable Interledger functionality on its users' accounts. template: splash lastUpdated: false hero: - tagline: Rafiki is open source software that provides an efficient solution for an account servicing entity (ASE) to enable Interledger functionality on its users' accounts. + tagline: Rafiki is open source software that provides an efficient solution for a financial service provider (FSP) to enable Interledger functionality on its users' accounts. actions: - text: Read Rafiki docs link: /overview/overview @@ -19,7 +19,7 @@ import { Card, CardGrid, LinkCard } from '@astrojs/starlight/components' - Test Rafiki by running two mock ASEs that automatically peer with one + Test Rafiki by running two mock FSPs that automatically peer with one another. diff --git a/packages/documentation/src/content/docs/integration/overview.mdx b/packages/documentation/src/content/docs/integration/overview.mdx index 68c90224b7..4a321ccc3c 100644 --- a/packages/documentation/src/content/docs/integration/overview.mdx +++ b/packages/documentation/src/content/docs/integration/overview.mdx @@ -1,14 +1,14 @@ --- -title: Integrate Rafiki with your ASE +title: Integrate Rafiki with your FSP --- import { Card, CardGrid, Badge } from '@astrojs/starlight/components' ## Before you begin -You must be, or be working with, an account servicing entity (ASE). An ASE is an entity that provides and maintains payment accounts for its customers and is regulated in the jurisdictions it operates. Examples of ASEs include banks, digital wallet providers, and mobile money providers. The [account servicing entity](/overview/concepts/account-servicing-entity) page provides examples of an ASE's responsibilities and obligations. +You must be, or be working with, a financial service provider (FSP). An FSP is an entity that provides and maintains payment accounts for its customers and is regulated in the jurisdictions it operates. Examples of FSPs include banks, digital wallet providers, and mobile money providers. The [financial service provider](/overview/concepts/financial-service-provider) page provides examples of an FSP's responsibilities and obligations. -For testing purposes, you can set up a [mock account servicing entity](/integration/playground/overview) that's deployed Rafiki. However, Rafiki **should not** be used in production environments by non-regulated ASEs. +For testing purposes, you can set up a [mock FSP](/integration/playground/overview) that's deployed Rafiki. However, Rafiki **should not** be used in production environments by non-regulated FSPs. ## Software components @@ -27,11 +27,11 @@ For testing purposes, you can set up a [mock account servicing entity](/integrat Review the integration checklist for more required and optional steps.

[Review the checklist >](/integration/requirements/overview)

- A tenant represents an isolated environment for an ASE. You must create a tenant even if you don't intend to share your Rafiki instance across ASEs.

[Create a tenant >](/integration/requirements/tenants)

+ A tenant represents an isolated environment for an FSP. You must create a tenant even if you don't intend to share your Rafiki instance across FSPs.

[Create a tenant >](/integration/requirements/tenants)

An asset is a monetary unit represented by a currency code and a scale. Rafiki must be set up for at least one asset.

[Create an asset >](/integration/requirements/assets)

- Each payment account in the ASE's system must be linked to a wallet address. You must have at least one asset in Rafiki before creating wallet addresses.

[Create a wallet address >](/integration/requirements/wallet-addresses)

+ Each payment account in the FSP's system must be linked to a wallet address. You must have at least one asset in Rafiki before creating wallet addresses.

[Create a wallet address >](/integration/requirements/wallet-addresses)

You must expose a webhook endpoint that listens for events dispatched by Rafiki, then react accordingly by calling/interfacing with the Backend Admin API. For example, deposit or withdraw liquidity.

[Specify a webhook endpoint >](/integration/requirements/webhook-events)

@@ -47,8 +47,8 @@ The following steps illustrate how to make a basic payment between two wallet ad Use the Backend Admin API's `createQuote` to create a quote resource on the sender's wallet account. The quote shows how much it will cost the sender to deliver an amount to the receiver.

[createQuote mutation >](https://rafiki.dev/apis/graphql/backend#mutation-createQuote)

- Use the Backend Admin API's `createOutgoingPayment` to create an outgoing payment resource on the sender's wallet account. This operations starts the payment. At this point, the sender's ASE must fund/approve the payment before it sends.

[createOutgoingPayment mutation >](https://rafiki.dev/apis/graphql/backend#mutation-createOutgoingPayment)

+ Use the Backend Admin API's `createOutgoingPayment` to create an outgoing payment resource on the sender's wallet account. This operations starts the payment. At this point, the sender's FSP must fund/approve the payment before it sends.

[createOutgoingPayment mutation >](https://rafiki.dev/apis/graphql/backend#mutation-createOutgoingPayment)

- As the payment flow progresses, the ASE is be notified about events that happen in the system. Some events are actionable, such as an `outgoing_payment.created` event. Review the webhook events page to learn more about handling each event.

[Webhook events >](/integration/requirements/webhook-events)

+ As the payment flow progresses, the FSP is be notified about events that happen in the system. Some events are actionable, such as an `outgoing_payment.created` event. Review the webhook events page to learn more about handling each event.

[Webhook events >](/integration/requirements/webhook-events)

diff --git a/packages/documentation/src/content/docs/integration/playground/autopeering.mdx b/packages/documentation/src/content/docs/integration/playground/autopeering.mdx index dd81a3ad62..4bb88f8ae1 100644 --- a/packages/documentation/src/content/docs/integration/playground/autopeering.mdx +++ b/packages/documentation/src/content/docs/integration/playground/autopeering.mdx @@ -13,7 +13,7 @@ pnpm localenv:compose:autopeer pnpm localenv:compose:psql:autopeer ``` -The mock account servicing entity, Cloud Nine Wallet, in your local Rafiki instance will automatically peer with the remote Test Network instance. The required services will be exposed externally using the localtunnel package. +The mock financial service provider (FSP), Cloud Nine Wallet, in your local Rafiki instance will automatically peer with the remote Test Network instance. The required services will be exposed externally using the localtunnel package. The exposed ports are: diff --git a/packages/documentation/src/content/docs/integration/playground/overview.mdx b/packages/documentation/src/content/docs/integration/playground/overview.mdx index 0908b0a961..f6443dfe20 100644 --- a/packages/documentation/src/content/docs/integration/playground/overview.mdx +++ b/packages/documentation/src/content/docs/integration/playground/overview.mdx @@ -9,7 +9,7 @@ import { LargeImg } from '@interledger/docs-design-system' -The Local Playground provides a suite of packages that, together, mock an account servicing entity that has deployed Rafiki. It exposes an SPSP endpoint, the [Open Payments APIs](/overview/concepts/open-payments) with its required GNAP auth endpoints to request grants, a STREAM endpoint for receiving Interledger packets, and the Rafiki Admin app to view and manage each Rafiki instance. +The Local Playground provides a suite of packages that, together, mock a financial service provider (FSP) that has deployed Rafiki. It exposes an SPSP endpoint, the [Open Payments APIs](/overview/concepts/open-payments) with its required GNAP auth endpoints to request grants, a STREAM endpoint for receiving Interledger packets, and the Rafiki Admin app to view and manage each Rafiki instance. This suite of packages includes: @@ -19,7 +19,7 @@ This suite of packages includes: | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | [`backend`](/integration/deployment/services/backend-service) |
  • SPSP
  • Open Payments APIs
  • GraphQL Admin APIs
  • STREAM endpoint
| | [`auth`](/integration/deployment/services/auth-service) | GNAP auth server | -| `mock-account-servicing-entity` | mocks an account servicing entity | +| `mock-account-servicing-entity` | mocks an FSP | | [`frontend`](/integration/deployment/services/frontend-service) | Remix app to expose a UI for Rafiki admin management via interaction with the Backend Admin APIs | @@ -32,13 +32,13 @@ These packages depend on the following databases: style='max-width:300px' /> -The Local Playground comes with containerized versions of the Rafiki packages and three pre-configured docker-compose files. Cloud Nine Wallet and Happy Life Bank will start two mock account servicing entities with their respective Rafiki `backend` and `auth` servers. They automatically peer, and two to three user accounts are created on both of them. The third file is for Cloud Ten Wallet which is a mock ASE representing a tenant in a multi-tenant environment. See [Enabling multi-tenancy](#enabling-multi-tenancy) for more information. +The Local Playground comes with containerized versions of the Rafiki packages and three pre-configured docker-compose files. Cloud Nine Wallet and Happy Life Bank will start two mock FSPs with their respective Rafiki `backend` and `auth` servers. They automatically peer, and two to three user accounts are created on both of them. The third file is for Cloud Ten Wallet which is a mock FSP representing a tenant in a multi-tenant environment. See [Enabling multi-tenancy](#enabling-multi-tenancy) for more information. This environment will set up a playground where you can use the GraphQL Admin APIs and the Open Payments APIs. :::note -The Mock ASE provided in this repository is intended solely for internal use and demonstration purposes. It's not designed to serve as a reference architecture. If you are looking for a reference implementation of an ASE, please refer to the Test Wallet. +The Mock FSP provided in this repository is intended solely for internal use and demonstration purposes. It's not designed to serve as a reference architecture. If you are looking for a reference implementation of an FSP, please refer to the Test Wallet. ::: ## Running the local environment @@ -91,7 +91,7 @@ The following components are made available via the Local Playground: -#### Mock account servicing entity 1 - Cloud Nine Wallet +#### Mock FSP 1 - Cloud Nine Wallet | Label | Component | URL | | ----- | ---------------------------------- | ------------------------------- | @@ -103,7 +103,7 @@ The following components are made available via the Local Playground: | f | Rafiki Admin UI | `http://localhost:3010` | | g | Kratos API - _disabled by default_ | `http://localhost:4433` | -#### Mock account servicing entity 2 - Happy Life Bank +#### Mock FSP 2 - Happy Life Bank | Label | Component | URL | | ----- | ---------------------------------- | ------------------------------- | @@ -139,7 +139,7 @@ We've secured access to Rafiki Admin using ✅ - Are a licensed financial account servicing entity (ASE) in the - jurisdictions you operate in + Are a licensed financial service provider (FSP) in the jurisdictions you + operate in @@ -81,7 +81,7 @@ Before deploying Rafiki to a production environment and joining the Interledger **must** [integrate with an IdP](/integration/requirements/open-payments/idp). An IdP is a system or service that stores and manages user identity information, - authentication, and consent for an ASE's users. + authentication, and consent for an FSP's users.

@@ -90,7 +90,7 @@ Before deploying Rafiki to a production environment and joining the Interledger **Add a peer**

- A peer is another ASE that you connect with via Interledger who is + A peer is another FSP that you connect with via Interledger who is likely running their own Rafiki instance. If you are using Rafiki solely for transfers between accounts on your own ledger, peers aren't required. Otherwise, you must [add at least one diff --git a/packages/documentation/src/content/docs/integration/requirements/peers.mdx b/packages/documentation/src/content/docs/integration/requirements/peers.mdx index 9f0fc5f2b2..d689b4ca8c 100644 --- a/packages/documentation/src/content/docs/integration/requirements/peers.mdx +++ b/packages/documentation/src/content/docs/integration/requirements/peers.mdx @@ -9,7 +9,7 @@ import { LinkOut } from '@interledger/docs-design-system' import { Badge } from '@astrojs/starlight/components' import TenantIdHmacNote from '/src/content/docs/partials/_tenant-id-hmac-note.mdx' -To join the Interledger network and be able to send and receive payments, you must add one or more peers to your Rafiki instance. Peering establishes the connections needed for your Rafiki instance to interact with another account servicing entity (ASE). The purpose of this guide is to help you set up and manage peers. +To join the Interledger network and be able to send and receive payments, you must add one or more peers to your Rafiki instance. Peering establishes the connections needed for your Rafiki instance to interact with another financial service provider (FSP). The purpose of this guide is to help you set up and manage peers. While this guide focuses on the conceptual and technical steps of adding and managing peers via the Backend Admin API, the Rafiki Admin app offers the same capabilities in a user-friendly interface. @@ -28,10 +28,10 @@ Tenants can view, edit, and delete only their own peers. They can't create peers ## Perform prerequisites :::note -Peering isn't required unless you want to participate in transactions with another ASE on the Interledger network. For foundational peering concepts, refer to the Peers section of [Interledger Concepts](/overview/concepts/interledger/#peers). +Peering isn't required unless you want to participate in transactions with another FSP on the Interledger network. For foundational peering concepts, refer to the Peers section of [Interledger Concepts](/overview/concepts/interledger/#peers). ::: -Before adding a peer, you and the account servicing entity you intend to peer with must both: +Before adding a peer, you and the FSP you intend to peer with must both: ### Run an Interledger connector @@ -65,7 +65,7 @@ While you can deposit an `initialLiquidity` for your peer, you can also deposit ### Define a maxPacketAmount value -The `maxPacketAmount` specifies the maximum packet size you are willing to accept from the peer. Your peer's `maxPacketAmount` value doesn't need to match, as this value is independently set by each ASE. If omitted, payments won't be broken into smaller packets. +The `maxPacketAmount` specifies the maximum packet size you are willing to accept from the peer. Your peer's `maxPacketAmount` value doesn't need to match, as this value is independently set by each FSP. If omitted, payments won't be broken into smaller packets. ## Set up peering in Rafiki diff --git a/packages/documentation/src/content/docs/integration/requirements/tenants.mdx b/packages/documentation/src/content/docs/integration/requirements/tenants.mdx index a8459b3079..156fe13e54 100644 --- a/packages/documentation/src/content/docs/integration/requirements/tenants.mdx +++ b/packages/documentation/src/content/docs/integration/requirements/tenants.mdx @@ -7,7 +7,7 @@ tableOfContents: import { Tabs, TabItem } from '@astrojs/starlight/components' import { LinkOut } from '@interledger/docs-design-system' -In Rafiki, a tenant represents an isolated environment for an account servicing entity (ASE). Each tenant has its own set of resources, such as assets, peers, and wallet addresses, and its own configuration settings. This allows multiple ASEs to share a single Rafiki instance while maintaining data isolation and security. The purpose of this guide is to help you set up and manage tenants. +In Rafiki, a tenant represents an isolated environment for a financial service provider. Each tenant has its own set of resources, such as assets, peers, and wallet addresses, and its own configuration settings. This allows multiple FSPs to share a single Rafiki instance while maintaining data isolation and security. The purpose of this guide is to help you set up and manage tenants. While this guide focuses on operators managing tenants from the Backend Admin API, the Rafiki Admin app offers the same capabilities in a user-friendly interface. diff --git a/packages/documentation/src/content/docs/integration/requirements/wallet-addresses.mdx b/packages/documentation/src/content/docs/integration/requirements/wallet-addresses.mdx index f87c43d4ce..96ea1af9b3 100644 --- a/packages/documentation/src/content/docs/integration/requirements/wallet-addresses.mdx +++ b/packages/documentation/src/content/docs/integration/requirements/wallet-addresses.mdx @@ -8,22 +8,23 @@ import { Tabs, TabItem } from '@astrojs/starlight/components' import { LinkOut } from '@interledger/docs-design-system' import TenantIdHmacNote from '/src/content/docs/partials/_tenant-id-hmac-note.mdx' -Each payment account belonging to your users (for example, your customers) must have at least one associated wallet address for the account to be able to send and receive payments over Interledger and Open Payments. A wallet address serves as a publicly shareable standardized ID for a payment account. Each wallet address belongs to a specific tenant. +Each of your customers' payment accounts must be associated with at least one wallet address for the account to be able to send and receive payments over Interledger and Open Payments. A wallet address serves as a publicly shareable standardized ID for a payment account. -**Permissions** +Wallet addresses are created and hosted in Rafiki. However, the mapping of a wallet address to a customer account stays with you and is never stored in Rafiki's database tables. -- Operators can create wallet addresses for any tenant -- Tenants can only create wallet addresses for themselves +:::note[Permissions] +Each wallet address belongs to a specific tenant. Operators can create wallet addresses for any tenant. Tenants can only create wallet addresses for themselves. +::: -:::note[Wallet address requirements] +## Wallet address requirements - Your Rafiki instance must be set up with at least one asset before wallet addresses can be created as each wallet address must have an asset assigned to it. +- Wallet address structure is determined by the financial service provider (FSP). Consider whether your chosen naming conventions could disclose personal data. For example, choosing to issue addresses using first and last names. - Wallet address URLs are treated as case-insensitive, meaning that both lowercase and uppercase variations of the same address will be recognized as identical. -- Operators must configure a wallet address prefix for each tenant. When creating wallet addresses, tenants are restricted to using this prefix. - -::: - -Once the wallet address base (`WALLET_ADDRESS_URL`) is set for a tenant, it can't be changed. +- Operators must configure a wallet address base for each tenant. When creating wallet addresses, tenants are restricted to using this base. + :::note + Once the wallet address base (`WALLET_ADDRESS_URL`) is set for a tenant, it can't be changed. + ::: ## Create wallet addresses diff --git a/packages/documentation/src/content/docs/integration/requirements/webhook-events.mdx b/packages/documentation/src/content/docs/integration/requirements/webhook-events.mdx index 481e2e4481..501c6edbe9 100644 --- a/packages/documentation/src/content/docs/integration/requirements/webhook-events.mdx +++ b/packages/documentation/src/content/docs/integration/requirements/webhook-events.mdx @@ -237,10 +237,10 @@ If a non-200 status is returned, indicating an error, or the request times out, >ASE: Fires incoming_payment.created event to webhook endpoint - ASE->>ASE: No action required + R->>FSP: Fires incoming_payment.created event to webhook endpoint + FSP->>FSP: No action required `} /> @@ -260,12 +260,12 @@ The incoming payment can either complete, receive a partial payment, or expire. >ASE: Fires incoming_payment.completed event to webhook endpoint,
receivedAmount: $10 - ASE->>R: Backend Admin API call: createIncomingPaymentWithdrawal - R-->>ASE: success: true - ASE->>ASE: Credit recipient's account with $10 + R->>FSP: Fires incoming_payment.completed event to webhook endpoint,
receivedAmount: $10 + FSP->>R: Backend Admin API call: createIncomingPaymentWithdrawal + R-->>FSP: success: true + FSP->>FSP: Credit recipient's account with $10 `} /> @@ -274,14 +274,14 @@ The incoming payment can either complete, receive a partial payment, or expire. >ASE: Fires incoming_payment.completed event to webhook endpoint,
receivedAmount: $10 - ASE->>R: Backend Admin API call: createIncomingPaymentWithdrawal - R-->>ASE: success: true - ASE->>ASE: Credit recipient's account with $10 - ASE->>R: Backend Admin API call: postLiquidityWithdrawal - R-->>ASE: success: true + participant FSP as Financial service provider + + R->>FSP: Fires incoming_payment.completed event to webhook endpoint,
receivedAmount: $10 + FSP->>R: Backend Admin API call: createIncomingPaymentWithdrawal + R-->>FSP: success: true + FSP->>FSP: Credit recipient's account with $10 + FSP->>R: Backend Admin API call: postLiquidityWithdrawal + R-->>FSP: success: true R->>R: Two-phase transfer completed `} @@ -298,17 +298,17 @@ The `incoming_payment.completed` event indicates the payment completed either au >ASE: Fires incoming_payment.partial_payment_received event to webhook endpoint - ASE->>ASE: Reviews event data + R->>FSP: Fires incoming_payment.partial_payment_received event to webhook endpoint + FSP->>FSP: Reviews event data alt Accept partial payment - ASE->>R: Backend Admin API call: ConfirmPartialIncomingPayment - R-->>ASE: success: true - ASE->>ASE: Process payment (e.g. credit receiver) + FSP->>R: Backend Admin API call: ConfirmPartialIncomingPayment + R-->>FSP: success: true + FSP->>FSP: Process payment (e.g. credit receiver) else Reject partial payment - ASE->>R: Backend Admin API call: RejectPartialIncomingPayment - R-->>ASE: success: true + FSP->>R: Backend Admin API call: RejectPartialIncomingPayment + R-->>FSP: success: true end `} @@ -316,7 +316,7 @@ The `incoming_payment.completed` event indicates the payment completed either au -The `incoming_payment.partial_payment_received` event indicates an existing incoming payment has received a partial payment. The event should be reviewed for data from the sender as the event could contain details that the ASE should handle before approving the partial payment. The ASE can also choose to reject the partial payment. A reject reason will be transmitted back to the sender in the `outgoing_payment.failed` webhook. +The `incoming_payment.partial_payment_received` event indicates an existing incoming payment has received a partial payment. The event should be reviewed for data from the sender as the event could contain details that the FSP should handle before approving the partial payment. The FSP can also choose to reject the partial payment. A reject reason will be transmitted back to the sender in the `outgoing_payment.failed` webhook. An example use case for this event is approving a specific payment after an AML/KYC check is successful. Partial payment decisioning is disabled by default and can be enabled through the `ENABLE_PARTIAL_PAYMENT_DECISION` environment variable. @@ -324,9 +324,9 @@ An example use case for this event is approving a specific payment after an AML/ | Environment variables | Type | Description | | ------------------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `ENABLE_PARTIAL_PAYMENT_DECISION` | `backend` | Enables an ASE to act upon (approve/reject) a partial payment. The default is `false`. | +| `ENABLE_PARTIAL_PAYMENT_DECISION` | `backend` | Enables an FSP to act upon (approve/reject) a partial payment. The default is `false`. | | `DB_ENCRYPTION_SECRET` | `backend` | A base64-encoded secret used to encrypt/decrypt transmitted payment data (`dataToTransmit`) stored on incoming/outgoing payment records and events. | -| `PARTIAL_PAYMENT_DECISION_MAX_WAIT_MS` | `backend` | The maximum time, in milliseconds, Rafiki will wait for an ASE to confirm or reject a partial incoming payment. Rafiki will reject the payment if a response isn't received in time. Only used if this value is less than the `PARTIAL_PAYMENT_DECISION_SAFETY_MARGIN_MS` value. | +| `PARTIAL_PAYMENT_DECISION_MAX_WAIT_MS` | `backend` | The maximum time, in milliseconds, Rafiki will wait for an FSP to confirm or reject a partial incoming payment. Rafiki will reject the payment if a response isn't received in time. Only used if this value is less than the `PARTIAL_PAYMENT_DECISION_SAFETY_MARGIN_MS` value. | | `PARTIAL_PAYMENT_DECISION_SAFETY_MARGIN_MS` | `backend` | The time, in milliseconds, Rafiki is guaranteed to have to respond before an ILP packet expires. | @@ -341,12 +341,12 @@ An example use case for this event is approving a specific payment after an AML/ >ASE: Fires incoming_payment.expired event to webhook endpoint,
receivedAmount: $2.55 - ASE->>R: Backend Admin API call: createIncomingPaymentWithdrawal - R-->>ASE: success: true - ASE->>ASE: Credit recipient's account with $2.55 + R->>FSP: Fires incoming_payment.expired event to webhook endpoint,
receivedAmount: $2.55 + FSP->>R: Backend Admin API call: createIncomingPaymentWithdrawal + R-->>FSP: success: true + FSP->>FSP: Credit recipient's account with $2.55 `} /> @@ -383,17 +383,17 @@ An outgoing payment for \$12 was created. >ASE: Fires outgoing_payment.created event to webhook endpoint,
debitAmount: $12 - ASE->>ASE: Checks that sender's account has sufficient funds + R->>FSP: Fires outgoing_payment.created event to webhook endpoint,
debitAmount: $12 + FSP->>FSP: Checks that sender's account has sufficient funds alt Account has sufficient funds - ASE->>ASE: Put hold of $12 on sender's account - ASE->>R: Backend Admin API call: depositOutgoingPaymentLiquidity - R-->>ASE: success: true + FSP->>FSP: Put hold of $12 on sender's account + FSP->>R: Backend Admin API call: depositOutgoingPaymentLiquidity + R-->>FSP: success: true else Account has insufficient funds - ASE->>R: Backend Admin API call: cancelOutgoingPayment,
Reason: insufficient funds - R-->>ASE: success: true + FSP->>R: Backend Admin API call: cancelOutgoingPayment,
Reason: insufficient funds + R-->>FSP: success: true end `} @@ -414,12 +414,12 @@ If the sender has insufficient funds or if the payment should otherwise not be f >ASE: Fires outgoing_payment.completed event to webhook endpoint,
debitAmount: $12, sentAmount: $11.50 - ASE->>R: Backend Admin API call: createOutgoingPaymentWithdrawal - R-->>ASE: success: true - ASE->>ASE: Remove hold and deduct $12 from sender's account,
credit your account with $0.50 + R->>FSP: Fires outgoing_payment.completed event to webhook endpoint,
debitAmount: $12, sentAmount: $11.50 + FSP->>R: Backend Admin API call: createOutgoingPaymentWithdrawal + R-->>FSP: success: true + FSP->>FSP: Remove hold and deduct $12 from sender's account,
credit your account with $0.50 `} /> @@ -428,14 +428,14 @@ If the sender has insufficient funds or if the payment should otherwise not be f >ASE: Fires outgoing_payment.completed event to webhook endpoint,
debitAmount: $12, sentAmount: $11.50 - ASE->>R: Backend Admin API call: createOutgoingPaymentWithdrawal - R-->>ASE: success: true - ASE->>ASE: Remove hold and deduct $12 from sender's account,
credit your account with $0.50 - ASE->>R: Backend Admin API call: postLiquidityWithdrawal - R-->>ASE: success: true + participant FSP as Financial service provider + + R->>FSP: Fires outgoing_payment.completed event to webhook endpoint,
debitAmount: $12, sentAmount: $11.50 + FSP->>R: Backend Admin API call: createOutgoingPaymentWithdrawal + R-->>FSP: success: true + FSP->>FSP: Remove hold and deduct $12 from sender's account,
credit your account with $0.50 + FSP->>R: Backend Admin API call: postLiquidityWithdrawal + R-->>FSP: success: true R->>R: Two-phase transfer complete `} @@ -457,12 +457,12 @@ An outgoing payment for \$12 failed. \$8 was sent successfully. >ASE: Fires outgoing_payment.failed event to webhook endpoint,
debitAmount: $12, sentAmount: $8 - ASE->>R: Backend Admin API call: createOutgoingPaymentWithdrawal - R-->>ASE: success: true - ASE->>ASE: Remove hold and deduct $8 from the sender's account + R->>FSP: Fires outgoing_payment.failed event to webhook endpoint,
debitAmount: $12, sentAmount: $8 + FSP->>R: Backend Admin API call: createOutgoingPaymentWithdrawal + R-->>FSP: success: true + FSP->>FSP: Remove hold and deduct $8 from the sender's account `} /> @@ -492,11 +492,11 @@ The wallet address, `https://wallet.example.com/carla_garcia` was requested but >ASE: Fires wallet_address.not_found event to webhook endpoint,
wallet address: https://wallet.example.com/carla_garcia - ASE->>R: Backend Admin API call: createWalletAddress,
url: https://wallet.example.com/carla_garcia,
public name: Carla Eva Garcia - R-->>ASE: success: true + R->>FSP: Fires wallet_address.not_found event to webhook endpoint,
wallet address: https://wallet.example.com/carla_garcia + FSP->>R: Backend Admin API call: createWalletAddress,
url: https://wallet.example.com/carla_garcia,
public name: Carla Eva Garcia + R-->>FSP: success: true `} /> @@ -525,12 +525,12 @@ A wallet address received a Web Monetization payment of \$0.33 >ASE: Fires wallet_address.web_monetization event to webhook endpoint,
receivedAmount: $0.33 - ASE->>R: Backend Admin API call: createWalletAddressWithdrawal - R-->>ASE: success: true - ASE->>ASE: Credit recipient's account with $0.33 + R->>FSP: Fires wallet_address.web_monetization event to webhook endpoint,
receivedAmount: $0.33 + FSP->>R: Backend Admin API call: createWalletAddressWithdrawal + R-->>FSP: success: true + FSP->>FSP: Credit recipient's account with $0.33 `} /> @@ -559,11 +559,11 @@ Your asset liquidity for USD (asset scale: 2) drops below \$100.00. >ASE: Fires asset.liquidity_low event to webhook endpoint,
asset: USD (scale: 2, id: "abc") - ASE->>R: Backend Admin API call: depositAssetLiquidity - R-->>ASE: success: true + R->>FSP: Fires asset.liquidity_low event to webhook endpoint,
asset: USD (scale: 2, id: "abc") + FSP->>R: Backend Admin API call: depositAssetLiquidity + R-->>FSP: success: true `} /> @@ -592,11 +592,11 @@ The liquidity for your peer, Happy Life Bank, drops below \$100.00 USD. >ASE: Fires peer.liquidity_low event to webhook endpoint,
peer: Happy Life Bank (asset: "USD", scale: 2, id: "abc") - ASE->>R: Backend Admin API call: depositPeerLiquidity - R-->>ASE: success: true + R->>FSP: Fires peer.liquidity_low event to webhook endpoint,
peer: Happy Life Bank (asset: "USD", scale: 2, id: "abc") + FSP->>R: Backend Admin API call: depositPeerLiquidity + R-->>FSP: success: true `} /> diff --git a/packages/documentation/src/content/docs/overview/concepts/account-servicing-entity.mdx b/packages/documentation/src/content/docs/overview/concepts/account-servicing-entity.mdx deleted file mode 100644 index 53335f78ce..0000000000 --- a/packages/documentation/src/content/docs/overview/concepts/account-servicing-entity.mdx +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Account servicing entity (ASE) ---- - -An account servicing entity (ASE) is a regulated entity that provides and maintains payment accounts for its customers. Examples of ASEs include banks, digital wallet providers, and mobile money providers. - -As regulated entities, ASEs are subject to the laws, rules, and regulations of their jurisdictions. As such, Rafiki should **not** be used in production environments by non-regulated entities. - -## Responsibilities and obligations - -Image with four panels that summarize the four main responsibilities of ASEs - -### AML (Anti-money laundering) - -ASEs follow anti-money laundering laws and regulations to detect and prevent money laundering and other suspicious financial activities. - -### KYC/KYB (Know your customer/business) - -KYC and KYB practices ensure ASEs verify the identities of their customers by collecting IDs and proof of address, verifying business registrations, checking against sanctions lists, and other processes. - -### User account management - -ASEs manage the creation, upkeep, and security of their customers' accounts and balances therein. Similarly, they're responsible for authenticating their customers and providing secure channels for them to interact with their accounts via mobile apps, websites, or other interfaces. - -### Ledger - -As ASEs handle deposits and withdrawals through external payment methods (like bank transfers, credit cards, and other services) they must record all transactions and balance information in their ledger. diff --git a/packages/documentation/src/content/docs/overview/concepts/accounting.mdx b/packages/documentation/src/content/docs/overview/concepts/accounting.mdx index 5287e2f91a..62c8f8a235 100644 --- a/packages/documentation/src/content/docs/overview/concepts/accounting.mdx +++ b/packages/documentation/src/content/docs/overview/concepts/accounting.mdx @@ -230,11 +230,11 @@ A single-phase transfer posts funds to accounts immediately when the transfer is >ASE: Fires webhook event when incoming payment completes - ASE->>R: Withdraws payment amount from incoming payment liquidity account - ASE->>ASE: Credits the recipient's account by the payment amount + R->>FSP: Fires webhook event when incoming payment completes + FSP->>R: Withdraws payment amount from incoming payment liquidity account + FSP->>FSP: Credits the recipient's account by the payment amount `} /> @@ -250,10 +250,10 @@ A two-phase transfer moves funds in two stages. >ASE: Fires webhook event when incoming payment completes - ASE->>Rafiki: Withdraws payment amount from incoming payment
liquidity account (reserve funds pending) - ASE->>ASE: Credits the recipient's account by the payment amount - ASE->>Rafiki: Resolve funds (post) + Rafiki->>FSP: Fires webhook event when incoming payment completes + FSP->>Rafiki: Withdraws payment amount from incoming payment
liquidity account (reserve funds pending) + FSP->>FSP: Credits the recipient's account by the payment amount + FSP->>Rafiki: Resolve funds (post) Rafiki->>Rafiki: Two-phase transfer complete `} /> diff --git a/packages/documentation/src/content/docs/overview/concepts/clearing-settlement.mdx b/packages/documentation/src/content/docs/overview/concepts/clearing-settlement.mdx index 2f8661193f..fba00e7aef 100644 --- a/packages/documentation/src/content/docs/overview/concepts/clearing-settlement.mdx +++ b/packages/documentation/src/content/docs/overview/concepts/clearing-settlement.mdx @@ -6,25 +6,25 @@ import { LinkOut } from '@interledger/docs-design-system' ## Clearing -When a payment is made over traditional banking rails, the money doesn't move instantly. First, there are checks to confirm that the money exists and can be transferred. Clearing networks are responsible for exchanging messages between ASEs to facilitate these checks. This process is called clearing. When a payment successfully clears, it means the payer's ASE has an obligation to the payee's ASE. +When a payment is made over traditional banking rails, the money doesn't move instantly. First, there are checks to confirm that the money exists and can be transferred. Clearing networks are responsible for exchanging messages between financial service providers (FSPs) to facilitate these checks. This process is called clearing. When a payment successfully clears, it means the payer's FSP has an obligation to the payee's FSP. The [Interledger Protocol (ILP)](/overview/concepts/interledger) isn't a traditional clearing network, but does function in a similar way. -- ASEs that implement the protocol must become [peers](/integration/requirements/peers) to transact with one another. This is comparable to traditional banking, where ASEs must use the same clearing network. An ASE can't use Interledger to transact with another ASE unless they have both implemented the protocol and have peered with one another. -- Peered ASEs exchange ILP packets, which are packets of value that contain transaction information. ILP packets are akin to the messages exchanged during the traditional clearing process. +- FSPs that implement the protocol must become [peers](/integration/requirements/peers) to transact with one another. This is comparable to traditional banking, where FSPs must use the same clearing network. An FSP can't use Interledger to transact with another FSP unless they have both implemented the protocol and have peered with one another. +- Peered FSPs exchange ILP packets, which are packets of value that contain transaction information. ILP packets are akin to the messages exchanged during the traditional clearing process. - The successful exchange of ILP packets between peers creates obligations between them that must be settled. The receipt of a fulfilled ILP packet is basically a conditional IOU—a promise to pay—that affects the financial accounting balances between the peers. You can read more about clearing as it relates to ILP in the Interledger developer docs. -Conceptually, Rafiki sits at the clearing level, but isn't a clearing network. It's software that makes implementing the Interledger protocol faster and easier. Rafiki uses ILP to [track liquidity](/overview/concepts/accounting) between assets, payments, and peers. An ASE must still connect Rafiki to their existing backend system and internal ledger for authentication, fetching exchange rates, and managing liquidity itself. For example, if an incoming payment completes in Rafiki, the ASE's backend must credit the recipient's account on their own system, however that might look. +Conceptually, Rafiki sits at the clearing level, but isn't a clearing network. It's software that makes implementing the Interledger protocol faster and easier. Rafiki uses ILP to [track liquidity](/overview/concepts/accounting) between assets, payments, and peers. An FSP must still connect Rafiki to their existing backend system and internal ledger for authentication, fetching exchange rates, and managing liquidity itself. For example, if an incoming payment completes in Rafiki, the FSP's backend must credit the recipient's account on their own system, however that might look. In any case, no movement of actual money has occurred yet. ## Settlement -In traditional banking, settlement is the fulfillment of an obligation between ASEs. It turns the promise of payment into a real payment by moving actual money. This occurs over a shared settlement network, such as Fedwire in the United States. +In traditional banking, settlement is the fulfillment of an obligation between FSPs. It turns the promise of payment into a real payment by moving actual money. This occurs over a shared settlement network, such as Fedwire in the United States. -When a payer's ASE settles with the payee's ASE, there's a high chance that the ASE isn't physically handing over cash. There’s more likely to be an intermediary, like a reserve bank or central bank, that maintains accounts for both ASEs. The intermediary moves funds from one account to the other, crediting and debiting the accounts as necessary. +When a payer's FSP settles with the payee's FSP, there's a high chance that the FSP isn't physically handing over cash. There's more likely to be an intermediary, like a reserve bank or central bank, that maintains accounts for both FSPs. The intermediary moves funds from one account to the other, crediting and debiting the accounts as necessary. With Interledger, the concept of settlement isn't that different. Each [peer](/integration/requirements/peers) must agree on a settlement system to use to fulfill their obligations with one another. However, ILP itself isn't a settlement system. This means peers must have some other way to fulfill their obligations and exchange value. Examples can include using a real-time gross settlement system like Fedwire, an automated clearing house (ACH) network, a money transfer service, or some other payment channel. You can read more about settling as it relates to ILP in the Interledger developer docs. diff --git a/packages/documentation/src/content/docs/overview/concepts/financial-service-provider.mdx b/packages/documentation/src/content/docs/overview/concepts/financial-service-provider.mdx new file mode 100644 index 0000000000..f3a17bbf21 --- /dev/null +++ b/packages/documentation/src/content/docs/overview/concepts/financial-service-provider.mdx @@ -0,0 +1,41 @@ +--- +title: Financial service provider (FSP) +--- + +A financial service provider (FSP) is a regulated entity that provides and maintains payment accounts for its customers. Examples of FSPs include banks, digital wallet providers, and mobile money providers. + +As regulated entities, FSPs are subject to the laws, rules, and regulations of their jurisdictions. As such, Rafiki should **not** be used in production environments by non-regulated entities. + +## Data retention + +All data stays with the FSP, minus optional [telemetry](/overview/concepts/telemetry) data that's aggregated and pushed to the Interledger Foundation (ILF). The data sent to the ILF Open Telemetry collector is protected via differential privacy, not stored locally. Rafiki holds no source-of-truth data, personal or otherwise. + +Rafiki imposes no retention schedule on payment or liquidity records itself. That data resides on infrastructure the FSP deploys and administers. As such, retention limitation is a policy the FSP applies at its own database and infrastructure layer. + +## Responsibilities and obligations + +Image with four panels that summarize the four main responsibilities of FSPs + +### AML (Anti-money laundering) + +FSPs follow anti-money laundering laws and regulations to detect and prevent money laundering and other suspicious financial activities. + +### KYC/KYB (Know your customer/business) + +KYC and KYB practices ensure FSPs verify the identities of their customers by collecting IDs and proof of address, verifying business registrations, checking against sanctions lists, and other processes. + +### User account and data management + +FSPs are responsible for: + +- Managing the creation, storage, upkeep, and security of their customers' accounts and balances therein. +- Authenticating their customers and providing secure channels for them to interact with their accounts via mobile apps, websites, or other interfaces. +- Storing and maintaining their own wallet address-to-customer account mapping. Rafiki hosts [wallet addresses](/integration/requirements/wallet-addresses) for account discoverability but doesn't store any link between an address and a customer account. + +### Ledgers + +As FSPs handle deposits and withdrawals through external payment methods (like bank transfers, credit cards, and other services) they must record all transactions and balance information in their ledger. diff --git a/packages/documentation/src/content/docs/overview/concepts/multi-tenancy.mdx b/packages/documentation/src/content/docs/overview/concepts/multi-tenancy.mdx index 4e3a67db68..348bfc1632 100644 --- a/packages/documentation/src/content/docs/overview/concepts/multi-tenancy.mdx +++ b/packages/documentation/src/content/docs/overview/concepts/multi-tenancy.mdx @@ -2,9 +2,9 @@ title: Multi-tenancy --- -Multi-tenancy is an architectural approach that enables a single Rafiki instance to service multiple account servicing entities (ASEs). This allows organizations to share application services and database resources while maintaining data isolation and security. By implementing multi-tenancy, Rafiki simplifies the integration process for ASEs, making onboarding faster and easier. +Multi-tenancy is an architectural approach that enables a single Rafiki instance to service multiple financial service providers (FSPs). This allows organizations to share application services and database resources while maintaining data isolation and security. By implementing multi-tenancy, Rafiki simplifies the integration process for FSPs, making onboarding faster and easier. -In a multi-tenant environment, the entity responsible for managing a Rafiki instance that serves multiple ASEs is called an **operator**. Each ASE that uses the shared Rafiki instance is called a **tenant**. +In a multi-tenant environment, the entity responsible for managing a Rafiki instance that serves multiple FSPs is called an **operator**. Each FSP that uses the shared Rafiki instance is called a **tenant**. ## Operator and tenant roles and responsibilities @@ -28,7 +28,7 @@ Tenants are added through the Backend Admin API or the [Rafiki Admin application ### Tenant -A tenant is an ASE that connects to a shared Rafiki instance rather than running its own environment. To connect to the shared environment, each tenant must install and run their own integration service. Tenants are responsible for the following: +A tenant is an FSP that connects to a shared Rafiki instance rather than running its own environment. To connect to the shared environment, each tenant must install and run their own integration service. Tenants are responsible for the following: - Creating and managing wallet addresses for their users (for example, their customers) - Sending and receiving payments @@ -38,7 +38,7 @@ A tenant is an ASE that connects to a shared Rafiki instance rather than running ## Benefits of multi-tenancy - Centralized maintenance lets operators perform updates once for all tenants. -- Enhanced onboarding allows new ASEs to connect to the shared environment without deploying their own Rafiki instance. +- Enhanced onboarding allows new FSPs to connect to the shared environment without deploying their own Rafiki instance. - Simplified administration provides operators with a quick way to add and remove tenants. ### Key considerations diff --git a/packages/documentation/src/content/docs/overview/concepts/telemetry.mdx b/packages/documentation/src/content/docs/overview/concepts/telemetry.mdx index 90ec97da9d..0992921f04 100644 --- a/packages/documentation/src/content/docs/overview/concepts/telemetry.mdx +++ b/packages/documentation/src/content/docs/overview/concepts/telemetry.mdx @@ -20,7 +20,7 @@ Our goals are to: ### Privacy and optionality -Privacy is a paramount concern for the Interledger Foundation. Rafiki’s telemetry feature is designed to provide valuable network insights without violating privacy or aiding malicious ASEs. Review the [Privacy](#privacy) section below for more information. +Privacy is a paramount concern for the Interledger Foundation. Rafiki's telemetry feature is designed to provide valuable network insights without violating privacy or aiding malicious financial service providers (FSPs). Review the [Privacy](#privacy) section below for more information. The telemetry feature is currently enabled by default on test environments (environments not dealing with real money). When active, the feature transmits metrics to the testnet collector. You can opt in to sharing your metrics with a livenet collector when operating in a production livenet environment (with real money). Regardless of environment, you can also opt-out of telemetry completely. Review the [telemetry environment variables](#telemetry-environment-variables) for more information. @@ -63,10 +63,10 @@ The Interledger Foundation initially used Amazon-hosted Grafana which didn't mee For telemetry purposes, all amounts collected by instrumented Rafiki should be converted to a base currency. :::caution[Privacy reasoning] -If only two ASEs are peered over a non-USD currency and we collect data in that currency, it would be easy to determine the volumes moved between those two ASEs. To maintain privacy, we convert all amounts to a base currency. +If only two FSPs are peered over a non-USD currency and we collect data in that currency, it would be easy to determine the volumes moved between those two FSPs. To maintain privacy, we convert all amounts to a base currency. ::: -If an ASE doesn't provide the necessary exchange rate for a transaction, the telemetry solution still converts the amount to the base currency using external exchange rates. A Lambda function on AWS retrieves and stores the external exchange rates. The function is triggered by a daily `CloudWatch` event and stores the rates in a public S3 bucket. The S3 bucket doesn't have versioning, and the data is overwritten daily to further ensure privacy. +If an FSP doesn't provide the necessary exchange rate for a transaction, the telemetry solution still converts the amount to the base currency using external exchange rates. A Lambda function on AWS retrieves and stores the external exchange rates. The function is triggered by a daily `CloudWatch` event and stores the rates in a public S3 bucket. The S3 bucket doesn't have versioning, and the data is overwritten daily to further ensure privacy. ### Instrumentation @@ -90,7 +90,9 @@ The current implementation only collects metrics on the SENDING side of a transa ## Privacy -Rafiki telemetry is designed with a strong emphasis on privacy. The system anonymizes user data and refrains from collecting identifiable information. Since transactions can originate from any user to a Rafiki instance, the privacy measures are implemented directly at the source (each Rafiki instance). This means that at the individual level, the data is already anonymous as single Rafiki instances service transactions for multiple users. +Rafiki telemetry is designed with a strong emphasis on privacy. It's enabled by default on test environments and is opt-in on production deployments. + +The system anonymizes user data and refrains from collecting identifiable information. Since transactions can originate from any user to a Rafiki instance, the privacy measures are implemented directly at the source (each Rafiki instance). This means that at the individual level, the data is already anonymous as single Rafiki instances service transactions for multiple users. ### Differential privacy and local differential privacy (LDP) @@ -118,7 +120,7 @@ The noise, selected from the Laplacian distribution, is then generated using thi ### Currency conversion -Another factor that obscures sensitive data is currency conversion. In cross-currency transactions, exchange rates are provided by you, as the ASE, internally. As such, the exchange rates can't be correlated to an individual transaction. If you don't or can't provide the necessary rates, an external API for exchange rates is used. The obtained exchange rates are overwritten frequently in this case, with no versioning or history access. This introduces an additional layer of noise and further protects the privacy of the transactions. +Another factor that obscures sensitive data is currency conversion. In cross-currency transactions, exchange rates are provided by you, as the FSP, internally. As such, the exchange rates can't be correlated to an individual transaction. If you don't or can't provide the necessary rates, an external API for exchange rates is used. The obtained exchange rates are overwritten frequently in this case, with no versioning or history access. This introduces an additional layer of noise and further protects the privacy of the transactions. ### Experimental transaction values when using the algorithm diff --git a/packages/documentation/src/content/docs/overview/overview.mdx b/packages/documentation/src/content/docs/overview/overview.mdx index ce3c5a68a6..3fdd6ea2e1 100644 --- a/packages/documentation/src/content/docs/overview/overview.mdx +++ b/packages/documentation/src/content/docs/overview/overview.mdx @@ -7,17 +7,17 @@ import { Card, CardGrid } from '@astrojs/starlight/components' Implementing and maintaining the [Interledger Protocol (ILP)](#interledger) stack on your own can be difficult and time-consuming. Rafiki makes it easy to integrate with the Interledger network without needing to develop and maintain your own implementations. -Rafiki is open-source software maintained by a dedicated team and freely available to any licensed [account servicing entity](/overview/concepts/account-servicing-entity) (ASE) wanting to implement Interledger and [Open Payments](#open-payments) on users' accounts. +Rafiki is open-source software maintained by a dedicated team and freely available to any licensed [financial service provider](/overview/concepts/financial-service-provider) (FSP) wanting to implement Interledger and [Open Payments](#open-payments) on users' accounts. :::tip[Try it out] -The [Local Playground](/integration/playground/overview) allows you to test Rafiki by running two mock account servicing entities that automatically peer with one another. +The [Local Playground](/integration/playground/overview) allows you to test Rafiki by running two mock financial service providers (FSPs) that automatically peer with one another. ::: ## Use cases -### Peer-to-peer payments between ASEs +### Peer-to-peer payments between FSPs -In the context of Rafiki, a peer is another ASE with whom you transact. Forming a peering relationship requires you to both agree on the currency in which you will transact, on a settlement mechanism and cadence, and other details. Interledger creates interoperability between different payment systems and currencies, making it easier for peers to directly transact with one another. +In the context of Rafiki, a peer is another FSP with whom you transact. Forming a peering relationship requires you to both agree on the currency in which you will transact, on a settlement mechanism and cadence, and other details. Interledger creates interoperability between different payment systems and currencies, making it easier for peers to directly transact with one another. ### eCommerce payments diff --git a/packages/documentation/src/content/docs/partials/_backend-variables.mdx b/packages/documentation/src/content/docs/partials/_backend-variables.mdx index bdb34ee4c5..862bdf875d 100644 --- a/packages/documentation/src/content/docs/partials/_backend-variables.mdx +++ b/packages/documentation/src/content/docs/partials/_backend-variables.mdx @@ -32,7 +32,7 @@ import { LinkOut } from '@interledger/docs-design-system' | ------------------------------------------- | ----------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `DB_ENCRYPTION_SECRET` | _undefined_ | _undefined_ | When `ENABLE_PARTIAL_PAYMENT_DECISION` is `true`: Base64-encoded secret used to encrypt/decrypt transmitted payment data (`dataToTransmit`) stored on incoming/outgoing payment records and events. | | `INSTANCE_NAME` | `config.backend.instanceName` | _undefined_ | Your Rafiki instance's name used to communicate for autopeering and/or [telemetry](/overview/concepts/telemetry). Required when autopeering and/or telemetry is enabled | -| `PARTIAL_PAYMENT_DECISION_MAX_WAIT_MS` | `undefined` | `1500` | When `ENABLE_PARTIAL_PAYMENT_DECISION` is `true`, the maximum time, in milliseconds, Rafiki will wait for an ASE to confirm or reject a partial incoming payment. Rafiki rejects the payment if a response isn't received in time. Only used if this value is less than the `PARTIAL_PAYMENT_DECISION_SAFETY_MARGIN_MS` value. | +| `PARTIAL_PAYMENT_DECISION_MAX_WAIT_MS` | `undefined` | `1500` | When `ENABLE_PARTIAL_PAYMENT_DECISION` is `true`, the maximum time, in milliseconds, Rafiki will wait for an FSP to confirm or reject a partial incoming payment. Rafiki rejects the payment if a response isn't received in time. Only used if this value is less than the `PARTIAL_PAYMENT_DECISION_SAFETY_MARGIN_MS` value. | | `PARTIAL_PAYMENT_DECISION_SAFETY_MARGIN_MS` | `undefined` | `100` | When `ENABLE_PARTIAL_PAYMENT_DECISION` is `true`, the time, in milliseconds, Rafiki is guaranteed to have to respond before an ILP packet expires. | | `TRUST_PROXY` | `config.backend.trustProxy` | `false` | Must be set to `true` when running Rafiki behind a proxy. When `true`, the `X-Forwarded-Proto` header is used to determine if connections are secure. | @@ -50,8 +50,8 @@ import { LinkOut } from '@interledger/docs-design-system' | `AUTO_PEERING_SERVER_PORT` | `config.backend.port.autoPeering` | `3005` | If autopeering is enabled, the server will use this port. | | `CONNECTOR_PORT` | `config.backend.port.connector` | `3002` | The port of the ILP connector for sending packets via ILP over HTTP. | | `ENABLE_AUTO_PEERING` | `config.backend.autoPeering.enabled` | `false` | When `true`, autopeering is enabled. | -| `ENABLE_MANUAL_MIGRATIONS` | _undefined_ | `false` | When `true`, you must run the database manually with the command `node --run knex -- migrate:latest --env production` | -| `ENABLE_PARTIAL_PAYMENT_DECISION` | _undefined_ | `false` | Enables an ASE to act upon (approve/reject) a partial payment. | +| `ENABLE_MANUAL_MIGRATIONS` | _undefined_ | `false` | When `true`, you must run the database manually with the command `npm run knex - migrate:latest -env production` | +| `ENABLE_PARTIAL_PAYMENT_DECISION` | _undefined_ | `false` | Enables an FSP to act upon (approve/reject) a partial payment. | | `ENABLE_SPSP_PAYMENT_POINTERS` | _undefined_ | `true` | When `true`, the SPSP route is enabled. | | `ENABLE_TELEMETRY` | `config.backend.telemetry.enabled` | `false` | Enables the telemetry service on Rafiki. | | `ENABLE_TELEMETRY_TRACES` | _undefined_ | `false` | N/A | diff --git a/packages/documentation/src/content/docs/resources/further-learning.mdx b/packages/documentation/src/content/docs/resources/further-learning.mdx new file mode 100644 index 0000000000..7eb58834d8 --- /dev/null +++ b/packages/documentation/src/content/docs/resources/further-learning.mdx @@ -0,0 +1,40 @@ +--- +title: Further learning +--- + +import { LinkOut } from '@interledger/docs-design-system' + +To learn more about Rafiki, we invite you to explore the following resources. + +## GitHub repo + +Rafiki is an open source project. One of the best ways to learn more about Rafiki is to check out the GitHub repo where active development is taking place. + +## Engineering blog posts + +Browse through the Interledger engineering team's blog posts. + +Here's a few to get you started: + +- + Simple Rafiki integration guide + +- + Breaking down Rafiki: What makes our friend tick + +- + The Interledger universe + + +## Videos + +- + Rafiki and ecosystem updates + +- + Rafiki: our friend has grown + +- + GateHub payments via ILP - Integration with Rafiki + diff --git a/packages/documentation/src/content/docs/resources/get-involved.mdx b/packages/documentation/src/content/docs/resources/get-involved.mdx index e728f13de9..cc9870a2c1 100644 --- a/packages/documentation/src/content/docs/resources/get-involved.mdx +++ b/packages/documentation/src/content/docs/resources/get-involved.mdx @@ -49,15 +49,6 @@ Before claiming an issue, ensure you have: - Improve existing documentation clarity and accuracy - Create step-by-step tutorials for common use cases - Develop troubleshooting guides and FAQ sections -- Translate documentation to the following languages: - - Arabic - - Chinese - - French - - German - - Japanese - - Portuguese - - Spanish -- Review translated and localized content ### Content creation diff --git a/packages/documentation/src/content/docs/resources/glossary.mdx b/packages/documentation/src/content/docs/resources/glossary.mdx index d75c71b7ae..354bc29bd0 100644 --- a/packages/documentation/src/content/docs/resources/glossary.mdx +++ b/packages/documentation/src/content/docs/resources/glossary.mdx @@ -4,10 +4,6 @@ title: Glossary import { LinkOut } from '@interledger/docs-design-system' -## Account servicing entity (ASE) - -An entity that provides and maintains a payment account for a payer and/or payee. An ASE is a regulated entity in the country or countries it operates. Examples include digital wallets, banks, and mobile money providers. Non-regulated entities shouldn't use Rafiki in production environments due to the potential legal and compliance risks involved. - ## Asset An asset is made up of a currency `code` and a `scale` that together represent a monetary value. An ISO4217 currency code should be used whenever possible. The `scale` represents the decimal units. For example, US dollars can be delineated as code: USD, with scale 2, where value 1000 represents $10.00. @@ -30,6 +26,10 @@ The core service in Rafiki responsible for managing business logic and external An app or service, such as a mobile or web app, that interacts with the authorization server to obtain grants and access tokens. Clients use tokens to access resource servers and perform actions, such as retrieving transaction history and setting up payments, on behalf of a user or system. +## Financial service provider (FSP) + +An entity that provides and maintains a payment account for a payer and/or payee. An FSP is a regulated entity in the country or countries it operates. Examples include digital wallets, banks, and mobile money providers. Non-regulated entities shouldn't use Rafiki in production environments due to the potential legal and compliance risks involved. + ## Frontend service An optional internal interface in Rafiki, known as the Rafiki Admin, used to manage your Rafiki instance. The `frontend` service communicates with the Backend Admin API through a Remix web app, facilitating administrative tasks in the Rafiki environment. @@ -48,7 +48,7 @@ A system or service that stores and manages user identity information, authentic ## Incoming payment -An object created by the recipient's ASE, on their resource server, that represents a payment being received. The object contains information about the incoming payment, such as the amount, currency, receiver’s wallet address, and payment status. The object is used to track and manage payments that are expected to be or have been received. +An object created by the recipient's FSP, on their resource server, that represents a payment being received. The object contains information about the incoming payment, such as the amount, currency, receiver's wallet address, and payment status. The object is used to track and manage payments that are expected to be or have been received. ## Interledger Protocol (ILP) @@ -64,11 +64,11 @@ An API standard and a set of APIs that allows clients to securely retrieve accou ## Operator -The account servicing entity (ASE) responsible for managing the Rafiki instance and its resources, including tenants, peering relationships, assets, and liquidity. Operators typically have administrative privileges and can perform actions that tenants can't, such as creating and deleting tenants. +The FSP responsible for managing the Rafiki instance and its resources, including tenants, peering relationships, assets, and liquidity. Operators typically have administrative privileges and can perform actions that tenants can't, such as creating and deleting tenants. ## Outgoing payment -An object created by the sender's ASE, on their resource server, that represents a payment being sent. This object contains information about the outgoing payment, such as the amount, currency, receiver's wallet address, and payment status. +An object created by the sender's FSP, on their resource server, that represents a payment being sent. This object contains information about the outgoing payment, such as the amount, currency, receiver's wallet address, and payment status. ## Payment pointer @@ -80,7 +80,7 @@ A counterparty with whom you transact with over the Interledger network. Your Ra ## Quote -An object created by the sender's ASE, on their resource server, that represents the total cost for the sender to send a payment. When a quote is created, it serves as a commitment from the sender's ASE to deliver the amount to the recipient's ASE. Quotes are only valid for a limited time. +An object created by the sender's FSP, on their resource server, that represents the total cost for the sender to send a payment. When a quote is created, it serves as a commitment from the sender's FSP to deliver the amount to the recipient's FSP. Quotes are only valid for a limited time. ## Resource server @@ -98,7 +98,7 @@ An Interledger transport layer protocol for sending and receiving authenticated ## Tenant -An account servicing entity (ASE) that uses the shared Rafiki instance to manage its payment accounts and interact with the Interledger network. Tenants have their own isolated set of resources and are managed by an operator. Tenants have limited customization capabilities and can't manage other tenants. +An FSP that uses the shared Rafiki instance to manage its payment accounts and interact with the Interledger network. Tenants have their own isolated set of resources and are managed by an operator. Tenants have limited customization capabilities and can't manage other tenants. ## Wallet address