我有一个可靠的函数来操纵一个物体。该函数只允许对调用方msg.sender的此操作进行操作,该对象是该对象的所有者。就像这样:
function Manipulate(uint i)
{
require(msg.sender == data[i].owner, "Sender is not owner.");
<manipulate object>;
}在我正在编写的测试中,我正在创建一个测试用例,以检查该函数是否按照预期的方式运行。我有两个用户帐户:
user1 = accounts[0];
user2 = accounts[1];user2是我想要操作的对象的所有者。我在考试中打了以下电话:
await instance.Manipulate.call(10, {from: user2});与我所期望的相反,这触发了对我的坚实功能的要求声明。因此,它声称msg.sender不同于所有者。我在Require语句中修改了字符串,以便它还打印msg.sender和我想要操作的对象的所有者。我看到的是user2确实是对象的所有者。然而,msg.sender不是user2,而是user1。这是很奇怪的,因为我用{from: user2}调用操作符()函数。所以我不明白为什么user1是msg.sender。
有人知道为什么user1是msg.sender,为什么{from: user2}语句没有使user2成为msg.sender?
发布于 2021-06-03 20:10:08
在require语句中将"=“改为"==”:require(msg.sender == data[i].owner, "Sender is not owner.");
https://ethereum.stackexchange.com/questions/100267
复制相似问题