Solidity
如何保護我的自定義 transferFrom 功能?
我的
transferFrom
功能是這樣實現的。myAddress = 0x0; // my address function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { uint256 fee; fee = amount.div(10000); _transfer(from, myAddress, fee); _transfer(from, to, amount.sub(fee)); return true; }
我對其進行了測試,任何地址都可以執行此功能,這可能很危險並且會掏空人們的錢包。
我試圖添加
require(from == msg.sender);
它是安全的,但它阻止了其他契約的轉移。
為敏感函式添加 onlyOwner 修飾符
您必須設置所有者狀態變數,最好在部署時設置並添加幾個功能。它們是非常熟悉的模式,您應該使用 OpenZeppelin 的可擁有合約。不妨也看看重入。也許是更改/添加所有者的功能
但它的基本要點是
//state variable address owner; constructor() { owner = msg.sender; } function isOwner() external returns (bool) { return msg.sender == owner; } modifier onlyOwner { require(isOwner(), "Only owner allowed"); _; } function sensitiveFunc() external onlyOwner { // sensitive operations }
在發布問題之前,請通讀 ERC20 文件以了解該標準的含義。
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol
您需要在鏈上儲存配額,這是一種查看是否
address_A
已允許/批准address_B
使用其代幣的方法。ERC20 規定了一個函式對
allowance(from, caller)
並approve(spender, amount)
處理它。