Функция возвращает нулевой адрес в любом случае.
pragma solidity ^0.4.9;
contract Test {
address da;
function getSender () constant returns (address){
da=msg.sender;
return da;
}
}
Пробовал через myetherwallet и паритет, сеть не синхронизируется.
В функции запроса вы пытаетесь обновить переменную состояния контракта. Вы можете вернуть msg.sender без использования каких-либо переменных
pragma solidity ^0.4.9;
contract Test {
address da;
function getSender () constant returns (address){
return msg.sender; // just return msg.sender
}
}
Вы либо возвращаете msg.sender без обновления переменной состояния "da", так что это действительно постоянная функция, либо вы не делаете ее постоянной, но вам придется получить возвращаемое значение из события, если вы хотите получить к нему доступ.
Функции константы/представления не могут каким-либо образом изменять переменные состояния.
Вы можете установить msg.sender в da в конструкторе, а затем просто вернуть da с модификатором View.
pragma solidity ^0.4.9;
contract Test {
address da;
function Test() public {
da = msg.sender;
}
function getSender () public view returns (address){
return da;
}
}
Вы можете обновить переменную состояния или сделать функцию доступной только для чтения (с помощью constant
, view
или pure
), но вы не можете сделать и то, и другое. Я проголосовал за три ответа, которые говорят по-разному и предлагают разные подходы в зависимости от того, что вам нужно.
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;
}
}
Надеюсь, поможет.
Паоло Герра
Исмаэль
msg.sender
в переменнойda
, такая функция не может быть постоянной, потому что вы изменяете состояние контракта.Роб Хитченс
return msg.sender;
?Алиев