π¬Pythia: automation
Frontend Subscribe
interface IOrallyPythiaSubscriptionsRegistry {
function subscribe(
address target,
string calldata method,
uint256 frequency,
bool is_random,
string calldata pair_id
) external;
function unsubscribe(uint256 subscription_id) external;
}Subscription Usage Examples
import {OrallyPythiaConsumer} from "../consumers/OrallyPythiaConsumer.sol";
contract PythiaExecutionExample is OrallyPythiaConsumer {
uint256 public value;
constructor(
address _pythiaRegistry
) OrallyPythiaConsumer(_pythiaRegistry) {}
function updateValue(uint256 _value) external onlyExecutor {
value = _value;
}
}import {OrallyPythiaConsumer} from "../consumers/OrallyPythiaConsumer.sol";
contract RaffleExample is OrallyPythiaConsumer {
uint256 maxNumberOfTickets;
uint256 ticketPrice;
address[] entries;
constructor(
address _pythiaRegistry,
uint256 _maxNumberOfTickets,
uint256 _ticketPrice
) OrallyPythiaConsumer(_pythiaRegistry) {
maxNumberOfTickets = _maxNumberOfTickets;
ticketPrice = _ticketPrice;
}
function enterRaffle() external payable {
require(
entries.length < maxNumberOfTickets,
"RaffleExample: Raffle is full"
);
require(
msg.value == ticketPrice,
"RaffleExample: Ticket price is not correct"
);
entries.push(msg.sender);
}
function pickWinner(uint256 _randomNumber) external onlyExecutor {
require(
entries.length == maxNumberOfTickets,
"RaffleExample: Raffle is not full"
);
uint256 winnerIndex = _randomNumber % entries.length;
payable(entries[winnerIndex]).call{value: address(this).balance}("");
}
}Last updated