Solidity

看不懂mapping裡面的mapping

  • March 23, 2022

我正在編寫 BEP20 代幣合約。我從這裡得到幫助,因為這是我第一次與標準互動。首先,他們在映射中設置了映射。

mapping(address => mapping(address => uint256)) public allowance;

我無法理解津貼的概念以及為什麼他們這樣設置,

其次,approve()他們transferFrom()正在像這樣使用津貼。

津貼

$$ _from $$$$ msg.sender $$…在transferFrom()和津貼$$ msg.sender $$$$ _spender $$……在approve()這是在映射內部訪問映射的正確方法,還是我們這樣做?津貼$$ something $$$$ something $$忽略’’,‘‘的目的是什麼。

有人能把我的概念說清楚嗎?提前致謝。

假設您有使用者 A 和 B。使用者 A 擁有 10000 個令牌,但使用者 B 沒有。使用者 A 當然可以轉移其代幣,但他也希望使用者 B 能夠代表他轉移他的代幣。這就是津貼概念的用武之地。

通過呼叫該approve()函式,使用者 A 授權使用者 B 以他的名義轉移他的代幣,最高限額為批准的代幣數量。為此,使用者 B 將使用該transferFrom()功能。

限額是 B 可以代表使用者 A 轉移多少代幣(因此,初始批准金額減去使用者 B 為使用者 A 代幣進行的任何轉移)。

至於雙重映射,合約必須跟踪使用者 A 對不同支出者地址(例如,使用者 B 和使用者 C)所做的潛在多次批准。外部映射鍵是使用者 A,而內部映射鍵是使用者 B,值是使用者 A 批准給使用者 B 的代幣數量。

mapping(USER_A_ADDRESS => mapping(USER_B_ADDRESS => AMOUNT_APPROVED)) public allowance;

訪問approve()函式中的映射時,msg.sender是使用者 A(使用者 A 正在批准使用者 B)。在transferFrom()中,msg.sender是使用者 B(使用者 B 正在轉移使用者 A 代幣)。

我強烈建議您使用OpenZeppelin 合約

引用自:https://ethereum.stackexchange.com/questions/121553