[英]Faucet contract only permits owner to perform transactions
一切都很好,工作得很好,但是為什么當我需要調用 function requestTokens 時,只有 owner 可以成功交易而其他地址不能使用 function 因為合約導致執行恢復?
地址:0x8c08a469BDFd679CEF0729bDEa52BC688d4bDbBC
/\*\*
\*Submitted for verification at BscScan.com on 2023-01-30
\*/
/\*\*
// contracts/Faucet.sol
// SPDX-License-Identifier: MIT
\*/
pragma solidity ^0.8.17;
interface IERC20 {
function transfer(address to, uint256 value) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
contract Faucet {
uint256 constant public waitTime = 1440 minutes;
bool public isFaucetActive = true;
address public owner;
IERC20 public tokenInstance;
mapping(address =\> uint256) public lastAccessTime;
constructor(address \_tokenInstance) {
require(\_tokenInstance != address(0));
tokenInstance = IERC20(\_tokenInstance);
owner = msg.sender;
}
function requestTokens(uint8 \_slice) public {
require(allowedToWithdraw(msg.sender));
require(isFaucetActive);
uint256 tokenAmount;
if(\_slice == 1) {
tokenAmount = 5 \* 10**12;
} else if(\_slice == 2) {
tokenAmount = 11 \* 10**12;
} else if(\_slice == 3) {
tokenAmount = 8 \* 10**12;
} else if(\_slice == 4) {
tokenAmount = 4 \* 10**12;
} else if(\_slice == 5) {
tokenAmount = 3 \* 10**12;
} else if(\_slice == 6) {
tokenAmount = 14 \* 10**12;
} else if(\_slice == 7) {
tokenAmount = 10 \* 10**12;
} else if(\_slice == 8) {
tokenAmount = 12 \* 10**12;
}
tokenInstance.transfer(msg.sender, tokenAmount);
lastAccessTime\[msg.sender\] = block.timestamp + waitTime;
}
function allowedToWithdraw(address \_address) public view returns (bool) {
if(lastAccessTime\[\_address\] == 0) {
return true;
} else if(block.timestamp \>= lastAccessTime\[\_address\]) {
return true;
}
return false;
}
function stopFaucet() public {
require(msg.sender == owner);
isFaucetActive = false;
}
function activateFaucet() public {
require(msg.sender == owner);
isFaucetActive = true;
}
}
我盡我所能,就像 7/8 不同的合同用不同的方法
要轉移令牌(0xbf433345a79CF6e9270350848F88Db16d46D4f54),它應該被打開。 或者你的水龍頭(0x8c08a469BDFd679CEF0729bDEa52BC688d4bDbBC)或調用者應該在令牌上列入白名單。 由於另一個地址(在您失敗的交易中,0x87f9F0572693258678625d29F5bbAEb02E04C14B)未在令牌上列入白名單,因此交易已在修改器中恢復。
modifier open(address from, address to) {
require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
_;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.