Короткий ответ
msg.sender
действительно работает в view
функции, хотя бесполезен в качестве схемы авторизации. Используемый вами инструмент поиска должен иметь механизм для установки отправителя.
Звонок против транзакции
Во-первых, важно понимать разницу между вызовом и транзакцией.
Похоже, вы используете call
, который работает быстро и не меняет состояние цепочки блоков. msg.sender
устанавливается как в транзакции, так и в вызове. В транзакции его нельзя подделать: у вас должен быть закрытый ключ, связанный с данной учетной записью. Но в call
вы можете указать отправителю любое значение, которое вам нравится.
Настройка отправителя
Как вы установите отправителя, зависит от того, какой инструмент вы используете для звонка. Этим инструментом может быть web3.js, web3.py, Mist, MyEtherWallet, MyCrypto и т. Д. Все они имеют (или могут не иметь!) Механизм для установки отправителя в вызове.
MyEtherWallet
В комментариях вы конкретно упоминаете MyEtherWallet. При быстром поиске ничего не нашел как настроить отправителя. На ethereum.stackexchange есть этот вопрос без ответа, который, кажется, заслуживает внимания, поскольку он задает примерно тот же вопрос: Как проверить msg. баланс отправителя с контрактом MyEtherWallet
Контрактные обходные пути
можно ли указать такие настройки для договора?
Невозможно помочь кому-то установить отправителя изнутри контракта. Но вы можете предоставить другой метод, который принимает адрес в качестве аргумента. Тогда такие инструменты, как MyEtherWallet, позволят вам установить интересующий адрес. Например:
function getLink(address account) public view returns(string){
if(tokenBalances[account] > 0){
return link;
}else{
return "You need to purchase a token at first...";
}
}
Скрытие данных
Стоит отметить, что скрывать данные путем проверки msg.sender
бесполезно. Любой может установить поддельного отправителя в вызове (или напрямую проверить состояние цепочки блоков). Так что обойти эту «защиту» просто.
person
carver
schedule
14.08.2018
from
вcall()
для учетной записи, для которой хотите установитьmsg.sender
? - person carver   schedule 14.08.2018from
является необязательным, но если вы его предоставите,msg.sender
будет иметь это значение. - person user94559   schedule 14.08.2018from
. Я не смотрел их код. - person user94559   schedule 15.08.2018from
адрес, я понятия не имею. (Спросив их, вы, вероятно, добьетесь лучших результатов.) - person user94559   schedule 15.08.2018