Contract 6: ChainLink Functions to fetch RW Data
function requestFitnessData(uint256 tokenId) external {
require(block.timestamp >= lastUpdateTime[tokenId] + 1 hours, "Update too frequent");
// In production, this would make a Chainlink Functions request
// to fetch data from fitness APIs like Fitbit, Apple Health, etc.
bytes32 requestId = keccak256(abi.encodePacked(tokenId, block.timestamp));
requestToTokenId[requestId] = tokenId;
emit OracleRequest(requestId, tokenId, "fitness");
}function fulfillFitnessData(bytes32 requestId, uint256 steps) external onlyRole(ORACLE_ROLE) {
uint256 tokenId = requestToTokenId[requestId];
gameEngine.updateSteps(tokenId, steps);
lastUpdateTime[tokenId] = block.timestamp;
emit OracleResponse(requestId, tokenId, abi.encode(steps));
}Last updated