depositIcpForSubaccount to review #8
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Buenas... no estoy seguro de si este cambio pueda llegar a romper algo, estuve revisando y al parecer no. La idea es la siguiente.
✨ Soporte para depósitos individualizados mediante subcuentas en staking
Descripción:
Objetivo:
Permitir que canisters con múltiples usuarios realicen staking de ICP desde subcuentas únicas, facilitando la identificación individual de cada usuario interno.
Cambios Principales:
Nuevas Funciones:
getDepositAddressForSubaccount(subaccount: Blob)Genera una dirección de depósito combinando el Principal del llamante con una subcuenta específica (subaccount), permitiendo a los usuarios externos (o canisters) definir identificadores únicos para sus usuarios internos.
depositIcpForSubaccount(subaccount: Blob)Procesa el depósito asociado a la subcuenta especificada, garantizando que los tokens minteados se asignen correctamente a la cuenta del usuario (caller + subcuenta ) combinada.
Modificaciones en doDepositIcpFor:
Nueva Firma: doDepositIcpFor(user: Principal, _subaccount: ?Blob)
Ahora acepta un parámetro opcional _subaccount para soportar tanto el flujo tradicional (sin subcuenta) como el nuevo flujo (con subcuenta).
Cálculo de Subcuenta:
Si _subaccount es null, se deriva la subcuenta directamente del Principal del usuario (comportamiento original).
Si _subaccount está definido, se combina con el Principal del usuario mediante una operación de suma modular byte a byte (ver accountToSubaccount).
Detalles Técnicos:
Lógica de Combinación de Subcuentas:
La función accountToSubaccount fusiona la subcuenta base (derivada del Principal del usuario) con la subcuenta proporcionada por ese usuario, generando un identificador único para cada subcuenta que ese mismo usuario especifique en futuras interacciones.
Riesgo de Colisión:
La suma modular utilizada ((a1[i] + a2[i]) % 256) tiene una probabilidad extremadamente baja de colisión si las subcuentas proporcionadas (a2) son generadas de manera única (e.g., mediante UUIDs o contadores controlados por el canister externo).
Notas Adicionales:
Retrocompatibilidad:
Las modificaciones en las funciones existentes (depositIcp, depositIcpFor) no implican cambios en su firma ni en su comportamiento, ya que estos cambios están relacionados a la llamada interna a la función doDepositIcpFor la cual, debido a la modificación introducida, se invoca ahora con el parámetro _subaccount = null, preservando el comportamiento original.
Verificación de Seguridad:
Se asegura que los tokens minteados se asignen a cuentas cuyo owner será el principal del caller, e identificables individualmente por la subaccount especificada en el nuevo parámetro y derivada externamente del principal del usuario o de cualquier otro valor que el caller quiera establecer para identificarla de otras cuentas de su misma propiedad