簡體   English   中英

水龍頭合約只允許所有者執行交易

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM