看不懂mapping裡面的mapping
我正在編寫 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 合約。