Flujos de delegaci贸n

Delegaciones en Blockchain

Para realizar una nueva delegaci贸n, se debe llamar a la funci贸n addDelegate(...).

function addDelegate(address identity, address actor, bytes32 delegateType, address delegate, uint validity) internal onlyOwner(identity, actor) {
delegates[identity][keccak256(delegateType)][delegate] = now + validity;
emit DIDDelegateChanged(identity, delegateType, delegate, now + validity, changed[identity]);
changed[identity] = block.number;
}

Para el par谩metro delegationType se utiliza delegateTypes.Secp256k1SignatureAuthentication2018, una constante definida en ethr-did-resolver.

El modificador onlyOwner afecta a la funci贸n permitiendole realizar la operaci贸n s贸lo al due帽o (owner) de la identidad.

Otra funci贸n de inter茅s a nivel smart contract es validDelegate(...) returns(bool). Esta retorna true si es delegado.

function validDelegate(address identity, bytes32 delegateType, address delegate) public view returns(bool) {
uint validity = delegates[identity][keccak256(delegateType)][delegate];
return (validity > now);
}

Esta funci贸n solo verifica la delegaci贸n a un nivel. Para verificar una secuencia de delegaciones, se debe realizar a nivel aplicaci贸n.

Delegaciones en Blockchain Manager

El Blockchain manager no agrega funcionalidad sobre las verificaciones sobre una blockchain. Actualmente su responsabilidad es el ruteo a las distintas blockchain soportadas por DIDI.

Una opci贸n que estamos analizando a futuro, es que soporte cadenas de delegaciones: el blockchain manager deber铆a recorrer el 谩rbol de delegaciones y comprobar si, por transici贸n, una delegaci贸n es v谩lida. Para realizar esto, cada vez que se realiza una delegaci贸n se emite el evento DIDDelegateChanged con los cuales se debe armar el 谩rbol de delegaciones y realizar esta verificaci贸n.

Delegaciones en DIDI-Server

  • router.post("/issuer",

Esta ruta crea un nuevo documento en la colecci贸n DelegateTransaction. Estos documentos luego son procesados por un job, que realiza las tx en el mismo orden que se recibieron y almacena el resultado en la colecci贸n Delegate. Esto se realiza para evitar race conditions.

Delegaciones en Issuer

  • router.post("/delegate/,

Realiza la delegaci贸n en blockchain, y posteriormente almacena el resultado en la colecci贸n Delegate. Es similar a las delegaciones en DIDI-Server, con la diferencia de que no encola las delegaciones para ser procesadas posteriormente.

Delegaciones y emisi贸n de credenciales.

delegacions

Inicialmente, DIDI-Server es capaz de emitir credenciales. Actualmente es el encargado de emitir las credenciales por la verificaci贸n de n煤mero de tel茅fono, por la verificaci贸n de email y por la verificaci贸n de identidad.

Desde el DIDI-Server se relizaron delegaciones a ronda y a Semillas, otorgandoles la capacidad de emitir credenciales.

Para ejemplificar un caso de uso interesante, suponemos la estructura organizacional de una Universidad. Al realizar una delegaci贸n a una instancia de DIDI-Issuer-Module (ISSUER MODULE UNIVERSIDAD), este tiene la capacidad de emitir credenciales, y a su vez de realizar delegaciones. Las delegaciones se pueden hacer sobre otras instancias de DIDI-Isuer-Module (ISSUER MODULE EXACTAS (facultad), ISSUER MODULE alumnos (谩rea), ISSUER MODULE Centro Estudiantes (谩rea)) o a un nuevo tipo de Issuer desarrollado por terceros (ISSUER ECONOMICAS (facultad), ISSUER Secretar铆a acad茅mica (谩rea)).

Estas cadenas de delegaciones no se encuentran soportadas. En caso de necesitar este tipo de estructuras, las delegaciones se deben hacer desde el DIDI-Server. Queda la estructura de delegaciones en la forma de nodo central DIDI-Server.

delegacions