Solidity进阶之路:僵尸攻击人类 - 第3章: Msg.sender

Solidity Path: Beginner to Intermediate Smart Contracts

课程链接:https://cryptozombies.io/zh/lesson/2

你成功晋升到第二课啦!

厉害了,我的人类! 你比我设想的更会编程! 第二课中,你会学到如何通过猎食其他生物,扩张你的僵尸军团在这一课里,我们会使用到一些高级的Solidity概念,所以你一定要先完成第一课。

第3章: Msg.sender

现在有了一套映射来记录僵尸的所有权了,我们可以修改_createZombie方法来运用它们。

为了做到这一点,我们要用到msg.sender

msg.sender

Solidity中,有一些全局变量可以被所有函数调用。其中一个就是msg.sender,它指的是当前调用者(或智能合约)的address

注意:在Solidity中,功能执行始终需要从外部调用者开始。一个合约只会在区块链上什么也不做,除非有人调用其中的函数。所以msg.sender总是存在的。

以下是使用msg.sender来更新mapping的例子:

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

使用msg.sender很安全,因为它具有以太坊区块链的安全保障 —— 除非窃取与以太坊地址相关联的私钥,否则是没有办法修改其他人的数据的。

你可能感兴趣的:(Solidity,Path,智能合约,以太坊,区块链)