es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo escribir una función para ser utilizada solo dentro del chaincode (sin operación de invocación por ningún par)?

Escenario de ejemplo

He almacenado las contraseñas de los usuarios, con los nombres de usuario como clave. Quiero usar una función como una función auxiliar para obtener esa contraseña.

De esta manera, no tengo que manejar los errores cada vez que quiero obtener la contraseña para compararla con la contraseña ingresada por el usuario en otras funciones.

Código de ejemplo:

type User struct {
    Password string `json:"password"`
    Name     string `json:"name"`
}

// Función auxiliar
func (s *SmartContract) GetPassword(ctx contractapi.TransactionContextInterface, _username string) (string, error) {

    dataAsBytes, err := ctx.GetStub().GetState(_username)

    if err != nil {
        return "", fmt.Errorf("Fallo al leer del estado del mundo. %s", err.Error())
    }

    if dataAsBytes == nil {
        return "", fmt.Errorf("%s no existe", _username)
    }

    user := new(User)
    err = json.Unmarshal(dataAsBytes, &user)

    if err != nil {
        return "", fmt.Errorf"No se puede deserializar los datos")
    }

    return user.Password, nil
}

// Aquí usé la función auxiliar, de manera similar la usaré en otras funciones
func (s *SmartContract) AddAsset(ctx contractapi.TransactionContextInterface, _username string, _password string, value string) error {

    temp_password, err := GetPassword(_username, _password)
    if err != nil {
        return err
    }

    if _password == temp_password {
        // Hacer algo
    }

    return nil
}

¿Qué se podría hacer para que solo el chaincode actual pueda usar la función auxiliar? Para obtener seguridad adicional, como los métodos privados en Java.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una forma de restringir el acceso a la función auxiliar solo al chaincode actual es definir la función como una función privada dentro del chaincode. Esto se puede hacer añadiendo un guión bajo al nombre de la función, como “_GetPassword”. Al hacer esto, la función solo será accesible dentro del chaincode actual por otras funciones, y no por llamadas externas.

    Además, se pueden agregar características de control de acceso al chaincode para asegurar que solo los usuarios autorizados puedan invocar las funciones del chaincode, incluida la función auxiliar. Esto se puede lograr utilizando los mecanismos de identidad y control de acceso incorporados en Hyperledger Fabric, como las Autoridades de Certificación (CA), los Proveedores de Servicios de Membresía (MSP) y el Control de Acceso Basado en Atributos (ABAC). Configurando adecuadamente estos mecanismos, el chaincode puede hacer cumplir los controles de acceso basados en la identidad y atributos del solicitante, y limitar el acceso a la función auxiliar en consecuencia.

Comments are closed.