La función devuelve una dirección nula en cualquier caso.
pragma solidity ^0.4.9;
contract Test {
address da;
function getSender () constant returns (address){
da=msg.sender;
return da;
}
}
Probado a través de myetherwallet y parity, la red no está sincronizada.
En una función de consulta, está intentando actualizar la variable de estado del contrato. Puede devolver msg.sender sin usar ninguna variable
pragma solidity ^0.4.9;
contract Test {
address da;
function getSender () constant returns (address){
return msg.sender; // just return msg.sender
}
}
O devuelve msg.sender sin actualizar la variable de estado "da", por lo que es realmente una función constante, o no lo hace constante, pero tendrá que obtener el valor de retorno de un evento si desea acceder a él.
Las funciones de vista/constante no pueden modificar las variables de estado de ninguna manera.
Puede establecer el msg.sender en da en el constructor y luego devolver da con el modificador Ver.
pragma solidity ^0.4.9;
contract Test {
address da;
function Test() public {
da = msg.sender;
}
function getSender () public view returns (address){
return da;
}
}
Puede actualizar una variable de estado o puede hacer que la función sea de solo lectura (con constant
, view
o pure
), pero no puede hacer ambas cosas. He votado a favor de tres respuestas que lo dicen de manera diferente y ofrecen diferentes enfoques según lo que necesite hacer.
pragma solidity 0.4.9;
contract DA {
address public da;
function DA() public {
da = msg.sender;
}
function setDa() public returns(bool success) {
da = msg.sender;
return true;
}
// getDa() is not really needed because da is made `public` near line 5, so function da() does the same.
function getDa() public constant returns (address){
return da;
}
function getMsgSender() public constant returns(address) {
return msg.sender;
}
}
Espero eso ayude.
paolo guerra
ismael
msg.sender
en la variableda
, dicha función no puede ser constante porque está modificando el estado del contrato.Rob Hitchens
return msg.sender;
?Aliev