1. 程式人生 > 其它 >Solidity進階之路:殭屍攻擊人類 - 第3章: Msg.sender

Solidity進階之路:殭屍攻擊人類 - 第3章: Msg.sender

技術標籤:Solidity Path智慧合約以太坊區塊鏈

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很安全,因為它具有以太坊區塊鏈的安全保障 —— 除非竊取與以太坊地址相關聯的私鑰,否則是沒有辦法修改其他人的資料的。