Solidity

如何保護我的自定義 transferFrom 功能?

  • June 7, 2022

我的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)處理它。

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