全局变量
上一节
下一节
全局变量 Msg.sender
在 Solidity 中,有 block、msg 和 tx 为对象的全局变量。本关卡我们将重点介绍可以被所有函数调用的全局变量 msg.sender。
msg.sender 代表发起合约调用的用户钱包地址 address。
注意:除非有人调用其中的函数,否则合约在区块链上什么也不做,但是调用合约的用户地址msg.sender总是存在的。
使用 mapping 和 msg.sender
例子:
mapping (address => uint) favoriteNumber;
function setMyNumber(uint _myNumber) public {
// 更新我们的 `favoriteNumber` 映射来将 `_myNumber`存储在 `msg.sender`名下
favoriteNumber[msg.sender] = _myNumber;
// 存储数据至映射的方法和将数据存储在数组相似
}
function whatIsMyNumber() public view returns (uint) {
// 拿到存储在调用者地址名下的值
// 若调用者还没调用 setMyNumber, 则值为 `0`
return favoriteNumber[msg.sender];
}在这例子中,任何人都可以调用 setMyNumber 在我们的合约中存下一个 uint 并且与他们的地址相绑定。 然后,他们调用 whatIsMyNumber 就会返回他们存储的 uint。
实战练习
我们已经有了一套映射来记录宠物的所有权了,我们可以修改 _createPet 方法,将宠物分配给函数调用者。
我们得到了新的宠物 id 后,更新 petToOwner 映射,在 id 对应的键值里存入 msg.sender。
我们为这个 msg.sender 名下的 ownerPetCount 加 1。
请参考算数运算符,用 ++ 来使 uint 递增。


