function checkUpkeep(
bytes calldata checkData
)
external
view
override
returns (bool upkeepNeeded, bytes memory performData)
{
uint256 _tokenId = abi.decode(checkData, (uint256));
if (_ownerOf(_tokenId) == address(0)) {
upkeepNeeded = false;
}
else {
upkeepNeeded = (block.timestamp >= s_weatherNftInfo[_tokenId].lastFulfilledAt + s_weatherNftInfo[_tokenId].heartbeat);
if (upkeepNeeded) {
performData = checkData;
}
}
}
// Add a mapping to track paused NFTs
mapping(uint256 => bool) private s_pausedUpkeep;
// Function to pause upkeep for a specific NFT
function pauseUpkeep(uint256 tokenId) external {
require(_ownerOf(tokenId) == msg.sender, "WeatherNft__NotOwner");
s_pausedUpkeep[tokenId] = true;
emit UpkeepPaused(tokenId);
}
// Function to resume upkeep for a specific NFT
function resumeUpkeep(uint256 tokenId) external {
require(_ownerOf(tokenId) == msg.sender, "WeatherNft__NotOwner");
s_pausedUpkeep[tokenId] = false;
emit UpkeepResumed(tokenId);
}
update checkUpKeep
function checkUpkeep(
bytes calldata checkData
)
external
view
override
returns (bool upkeepNeeded, bytes memory performData)
{
uint256 _tokenId = abi.decode(checkData, (uint256));
if (_ownerOf(_tokenId) == address(0) || s_pausedUpkeep[_tokenId]) {
upkeepNeeded = false;
}
else {
upkeepNeeded = (block.timestamp >= s_weatherNftInfo[_tokenId].lastFulfilledAt + s_weatherNftInfo[_tokenId].heartbeat);
if (upkeepNeeded) {
performData = checkData;
}
}
}
update performUpKeep
function performUpkeep(bytes calldata performData) external override {
uint256 _tokenId = abi.decode(performData, (uint256));
require(!s_pausedUpkeep[_tokenId], "WeatherNft__UpkeepPaused");
uint256 upkeepId = s_weatherNftInfo[_tokenId].upkeepId;
s_weatherNftInfo[_tokenId].lastFulfilledAt = block.timestamp;
// Make functions request
string memory pincode = s_weatherNftInfo[_tokenId].pincode;
string memory isoCode = s_weatherNftInfo[_tokenId].isoCode;
bytes32 _reqId = _sendFunctionsWeatherFetchRequest(pincode, isoCode);
s_funcReqIdToTokenIdUpdate[_reqId] = _tokenId;
emit NftWeatherUpdateRequestSend(_tokenId, _reqId, upkeepId);
}