Solidity進階之路:殭屍攻擊人類 - 第3章: Msg.sender
阿新 • • 發佈:2021-02-19
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
很安全,因為它具有以太坊區塊鏈的安全保障 —— 除非竊取與以太坊地址相關聯的私鑰,否則是沒有辦法修改其他人的資料的。