Contract-Invocation

從 MyEtherWallet 合約讀取數據時如何設置 msg.sender

  • August 20, 2018

部署的合約具有以下功能:

function checkBalance() onlyTrainee constant returns (uint256) {
   return traineeBalances[msg.sender];
}

當我打電話時checkBalance(),它總是檢查發件人的餘額0x00..00。沒有輸入欄位可以讓我填寫我是誰。在 web3 中,我會使用checkBalance().call({from: '0x123....'}).

有什麼方法可以向 MyEtherWallet 表明呼叫者 ( msg.sender) 應該是誰?


請注意,這與設置交易的發件人無關,這當然只有在我擁有私鑰的情況下才有效。

似乎沒有任何方法可以msg.sender在 MyEtherWallet 中設置讀取操作。這將是一個有用的功能,所以也許可以考慮在github 上打開一個問題。

沒有什麼能從根本上阻止您從您不擁有的帳戶模擬交易,您可以web3通過簡單地將 中的from欄位設置為.call 您想要的地址來以您喜歡的方式執行此操作。

您只能“成為”您有權訪問的帳戶之一。您不能冒充任意帳戶 - 這將是一個巨大的安全漏洞。

您包含的功能不允許輸入,因此沒有輸入的可能性。Themsg.sender始終是發送交易的人,因此將是呼叫該函式的人。如果一個合約呼叫另一個合約,它也可以是一個合約地址。

類似的東西from不是 Solidity/Ethereum 的概念,而是 web3 等包裝庫的概念。它通常不會作為最終使用者的選項 - 如果他們可以訪問多個帳戶,他們可以解鎖/打開/他們希望使用的任何帳戶並從中呼叫契約。它永遠無法提供乙太坊不具備的功能——它只允許您指定from成為您有權訪問的帳戶之一。

引用自:https://ethereum.stackexchange.com/questions/24321