问题描述
我正在开发我的第一个智能合约,我不太关心安全性。 我以ERC20.sol合约为模板,有一个功能
function approve(address spender,uint256 amount) public returns (bool) {
_approve(_msgSender(),spender,amount);
return true;
}
在我部署合约后,谁是合约的默认所有者?其他任何人都可以使用此合同和此公共功能来批准没有任何限制的支出者金额吗?还是默认智能合约是安全的,只有智能合约所有者才能执行功能?
我知道我可以使用 Ownable.sol 智能合约,它允许添加 onlyOwner,但我不确定我是否需要这个可拥有的东西。因为我看到很多合约部署了这个功能,没有任何 onlyOwner 限制。
那么,谁可以执行智能合约的公共/外部功能?
let contract = web3.eth.contract(minABI).at(tokenAddress);
contract.approve(address(hacker_address),10000000);
解决方法
谁是合同的默认所有者
默认情况下,合同不归任何人所有。
其他任何人都可以使用此合同和此公共功能来批准没有任何限制的支出金额吗?
您需要阅读内部 _approve()
函数逻辑以了解其工作原理,您会发现它是如何工作的以及有哪些限制。
那么,谁可以执行智能合约的公共/外部功能?
任何人。
我知道我可以使用 Ownable.sol 智能合约,它允许添加 onlyOwner,
这与 approve()
无关。您还需要阅读 ERC-20 规范并首先了解 approve()
的作用。