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.

Conversión de Solidity desde “uint256” a “address”

Me gustaría saber cómo puedo convertir un tipo de dato uint256 a una dirección en las últimas versiones de Solidity.

Aquí tienes un ejemplo del código que estoy desarrollando.

function setDetails(string memory _name) public onlyAuthCaller returns (address) {
    uint256 tmpData = uint256(keccak256(abi.encodePacked(msg.sender, block.timestamp)));
    address batchNo = address(tmpData);

    detailsData.name = _name;

    batchDetails[batchNo] = detailsData;

    nextAction[batchNo] = 'NEXT';

    return batchNo;
}

En Remix, estoy teniendo un TypeError: No se permite la conversión de tipo explícita desde “uint256” a “address” en la línea: address batchNo = address(tmpData);

Si alguien pudiera ayudarme a solucionar este error para castear estos tipos de datos.

Saludos.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para convertir un tipo de dato uint256 a una dirección en Solidity, necesitas utilizar la función address(uint256) para crear una nueva dirección. El código que has proporcionado es casi correcto, pero la línea donde estás convirtiendo uint256 a address es incorrecta.

    Aquí tienes el código corregido:

    function setDetails(string memory _name) public onlyAuthCaller returns(address){
            uint256 tmpData = uint256(keccak256(abi.encodePacked(msg.sender, block.timestamp)));
            address batchNo = address(uint256(tmpData));
    
            detailsData.name = _name;
    
            batchDetails[batchNo] = detailsData;
    
            nextAction[batchNo] = 'NEXT';
    
            return batchNo;
    }
    

    En lugar de hacer un cast directo de tmpData a address, debes convertirlo primero a uint256 utilizando uint256(tmpData) y luego convertir ese resultado a address usando address(uint256(tmpData)). Esto se debe a que Solidity no permite una conversión de tipo directa de uint a address.

    Esto debería resolver el TypeError que estabas encontrando.

Comments are closed.