Example

@compiler >= 6

include "../interfaces/IVRF.aes"
include "../interfaces/IVRFReceiver.aes"

contract VRFExample : IVRFReceiver =
    record state = {
        random_winner_idx: int,
        players: map(int, address),
        vrf: IVRF
        }

    stateful entrypoint init( vrf: IVRF ) = { random_winner_idx = 0
                                            , players = {}
                                            , vrf = vrf }

    payable stateful entrypoint pick_winner( subscription_id: int ) : int =
        state.vrf.request_random_number( subscription_id
                                       , protected = false )
        
    stateful entrypoint fulfill_random_number( request_id: int
                                             , random_words: int ) : unit =
        require(Call.caller == state.vrf.address, "UNAUTHORIZED CALLER")

        put(state{ random_winner_idx = random_words })

    entrypoint get_state(): state = state

Last updated

Was this helpful?