ERC20合约安全
ERC20 contract security
我尝试通过外部创建一个撤回函数调用,但我对 erc20 有疑问,当你查看 stoler 函数时,我想象有人与现有 ERC20 的构造函数创建合同并且在他可以接受每一个合同的令牌没有?我希望不会,但是当我尝试这个时,每个地址都可以使用 Mytoken
Mytoken yourToken;
constructor(address tokenAddress) {
yourToken = Mytoken(tokenAddress);
}
function stoler() public{
yourToken.transfer(msg.sender, 1);
}
是的,没错。
如果您不希望用户可以从合同中提取金额,使用 modifier
很有用。
修饰符可以让你限制函数只在特定地址执行。在这种情况下,您有两种可能性:
• 导入'Ownable' 合约并使用onlyOwner() 修饰符:这样,只有在Web3 中部署了智能合约的用户才能调用该函数。
如果你想使用这个功能,你必须这样导入合约:
import "@openzeppelin/contracts/access/Ownable.sol";
并且您必须在此模式下更新 stoler()
功能:
function stoler() public onlyOwner {
yourToken.transfer(msg.sender, 1);
}
• 创建一个新的修改器,允许特定地址调用 stolen() 函数并从智能合约中检索其令牌。在这种情况下,您必须以这种方式定义修饰符:
modifier [NAMEMODIFIER] {
// your logic
_;
}
然后您必须在此模式下更新 stolen()
功能:
function stoler() public [NAMEMODIFIER] {
yourToken.transfer(msg.sender, 1);
}
我尝试通过外部创建一个撤回函数调用,但我对 erc20 有疑问,当你查看 stoler 函数时,我想象有人与现有 ERC20 的构造函数创建合同并且在他可以接受每一个合同的令牌没有?我希望不会,但是当我尝试这个时,每个地址都可以使用 Mytoken
Mytoken yourToken;
constructor(address tokenAddress) {
yourToken = Mytoken(tokenAddress);
}
function stoler() public{
yourToken.transfer(msg.sender, 1);
}
是的,没错。
如果您不希望用户可以从合同中提取金额,使用 modifier
很有用。
修饰符可以让你限制函数只在特定地址执行。在这种情况下,您有两种可能性:
• 导入'Ownable' 合约并使用onlyOwner() 修饰符:这样,只有在Web3 中部署了智能合约的用户才能调用该函数。 如果你想使用这个功能,你必须这样导入合约:
import "@openzeppelin/contracts/access/Ownable.sol";
并且您必须在此模式下更新 stoler()
功能:
function stoler() public onlyOwner {
yourToken.transfer(msg.sender, 1);
}
• 创建一个新的修改器,允许特定地址调用 stolen() 函数并从智能合约中检索其令牌。在这种情况下,您必须以这种方式定义修饰符:
modifier [NAMEMODIFIER] {
// your logic
_;
}
然后您必须在此模式下更新 stolen()
功能:
function stoler() public [NAMEMODIFIER] {
yourToken.transfer(msg.sender, 1);
}