Contract-Invocation
從 MyEtherWallet 合約讀取數據時如何設置 msg.sender
部署的合約具有以下功能:
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
您想要的地址來以您喜歡的方式執行此操作。
您只能“成為”您有權訪問的帳戶之一。您不能冒充任意帳戶 - 這將是一個巨大的安全漏洞。
您包含的功能不允許輸入,因此沒有輸入的可能性。The
msg.sender
始終是發送交易的人,因此將是呼叫該函式的人。如果一個合約呼叫另一個合約,它也可以是一個合約地址。類似的東西
from
不是 Solidity/Ethereum 的概念,而是 web3 等包裝庫的概念。它通常不會作為最終使用者的選項 - 如果他們可以訪問多個帳戶,他們可以解鎖/打開/他們希望使用的任何帳戶並從中呼叫契約。它永遠無法提供乙太坊不具備的功能——它只允許您指定from
成為您有權訪問的帳戶之一。