[英]Only the owner of the contract can update the smart contract - Solidity
我正在開發一個保存用戶信息的智能合約。 問題是當我嘗試從沒有部署合約的地址更新用戶信息時,請求成功但用戶信息沒有變化。 但是當我從部署合約的地址更改用戶信息時,它會更改所有用戶的用戶信息。 無論帳戶是否不同,更改都會反映在所有帳戶上。
function setUserName(string memory _userName) public {
users[msg.sender].userName = _userName;
}
這是我更新用戶信息的功能。 我相信“msg.sender”是調用合約的人,而不是部署合約的人。 我正在使用 metamask 和 ganache 作為帳戶。 第一個帳戶在 chrome 瀏覽器中添加到 metamask,第二個帳戶在 mozilla firefox 中添加到 metamask。
重現用戶名錯誤的步驟:
編輯
我想出了一個辦法來處理這個問題。 問題是數據被正確保存,但在獲取記錄時,solidity 將 msg.sender 分配給合同的創建者,而不是發送交易的人。 因此,為了解決這個問題,我在調用函數中從前端發送用戶地址,並在相應函數中接收該地址作為參數。 因此,我沒有使用 msg.sender,而是使用我從前端收到的地址。
回答問題
我想出了一個辦法來處理這個問題。 問題是數據被正確保存,但在獲取記錄時,solidity 將 msg.sender 分配給合同的創建者,而不是發送交易的人。 因此,為了解決這個問題,我在調用函數中從前端發送用戶地址,並在相應函數中接收該地址作為參數。 因此,我沒有使用 msg.sender,而是使用我從前端收到的地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.