Erc-20
授予合約使用 eth 的許可
既然 eth 沒有合約地址,那怎麼讓合約消費呢。例如 - 我提出了一個交換請求 - 例如,其金額為 10 eth,以美元計 - 合約可以花掉我的全部餘額(如果是惡意的)嗎?
預設情況下,您不能允許智能合約花費您的 ETH,但可以實施錢包智能合約,允許其他智能合約使用代表您持有的 ETH,如果您授予他們足夠的配額。這是一個可能看起來像的範例:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; contract Wallet { // balances[owner] mapping(address => uint256) public balances; // allowances[owner][spender] mapping(address => mapping(address => uint256)) public allowances; function approve(address spender, uint256 amount) external { allowances[msg.sender][spender] = amount; } function transferFrom(address from, address to, uint256 amount) external { assert(allowances[from][msg.sender] >= amount); allowances[from][msg.sender] -= amount; balances[from] -= amount; balances[to] += amount; } function withdraw(uint256 amount) external { payable(msg.sender).transfer(amount); } receive() external payable { balances[msg.sender] += msg.value; } }
我的契約不能花掉你所有的餘額,只有你發送給它的餘額。
如果你的錢包裡有 100 個 eth,你用 10 個 eth 創建了一個交易並簽署並發送給合約,那麼合約將只能花費這 10 個不再屬於你的 eth。合約將無法花費您剩餘的 90 eth,這是不可能的。只有持有您私鑰的人才能使用它。
如果你想讓一個合約花費你的 eth 數量,那麼你需要創建一個智能合約作為中間人,接收你的 eth(你發送的金額),它應該檢查
sender
請求是否這是您允許使用它的契約。