谁可以在 solidity 中执行智能合约的 public 功能?

Who can execute public functions of smart contract in solidity?

我正在开发我的第一个智能合约,我不太关心安全性。 我以ERC20.sol合同为模板,有一个功能

function approve(address spender, uint256 amount) public returns (bool) {
    _approve(_msgSender(), spender, amount);
    return true;
}

部署合约后,谁是合约的默认所有者?任何人都可以使用此合同和此 public 功能来批准支出金额 w/o 任何限制吗?或者智能合约默认是安全的,只有智能合约所有者才能执行功能?

我知道我可以使用 Ownable.sol 智能合约,它允许添加 onlyOwner,但我不确定我是否需要这个可拥有的东西。因为我看到很多合约都部署了这个函数 w/o 任何 onlyOwner 限制。

那么,谁可以执行智能合约public/external功能?

let contract = web3.eth.contract(minABI).at(tokenAddress);
contract.approve(address(hacker_address), 10000000);

随机用户可以为自己或其他人批准金额吗?

who is default owner of the contract

默认情况下,合约不属于任何人。

Can anyone else use this contract and this public function to approve spender amounts w/o any restrictions?

您需要阅读内部 _approve() 功能逻辑以了解其工作原理,您将了解其工作原理以及限制。

So, who can execute smart contract public/external functions?

任何人。

I know I can use Ownable.sol smart contract, which allows to add onlyOwner,

这与 approve() 无关。您还需要阅读 ERC-20 规范并首先了解 approve() 的作用。