Solidity

在測試中設置 msg.sender

  • June 4, 2021

我有一個操縱對象的 Solidity 函式。該函式只允許呼叫者 msg.sender 的這種操作是該對象的所有者。像這樣的東西:

function Manipulate(uint i)
{
    require(msg.sender == data[i].owner, "Sender is not owner.");
    <manipulate object>;
}

在我正在編寫的測試中,我正在製作一個測試案例來檢查此函式是否按預期執行。我有 2 個使用者帳戶:

user1 = accounts[0];
user2 = accounts[1];

user2 是我要操作的對象的所有者。我在測試中執行以下呼叫:

await instance.Manipulate.call(10, {from: user2});

出乎我的意料,這觸發了我的s​​olidity 函式的Require 語句。所以它聲稱 msg.sender 與所有者不同。我修改了 Require 語句中的字元串,因此它還列印了 msg.sender 和我想要操作的對象的所有者。我看到的是 user2 確實是對象的所有者。但是,msg.sender 不是 user2 而是 user1。這很奇怪,因為我用 {from: user2} 呼叫 Manipulate() 函式。所以我不明白為什麼 user1 是 msg.sender。

任何人都知道為什麼 user1 是 msg.sender 以及為什麼 {from: user2} 語句沒有使 user2 成為 msg.sender ?

在 require 語句中將“=”替換為“==”:require(msg.sender == data[i].owner, "Sender is not owner.");

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