ApeWorX / ApePay

A smart contract payment system built for automated service management
https://apeworx.io/apepay
Apache License 2.0
18 stars 6 forks source link

Allowlist and Denylist example validators #103

Open fubuloubu opened 4 days ago

fubuloubu commented 4 days ago

Allowlist.vy:

owner: public(address)
is_allowed: public(HashMap[address, bool])

event Allowed:
    user: indexed(address)

event Denied:
    user: indexed(address)

@deploy
def __init__(allowed: DynArray[address, 100]):
    self.owner = msg.sender
    for user in allowed:
        self.is_allowed[user] = True
        log Allowed(user)

@external
def allow(allowed: DynArray[address, 100]):
    assert msg.sender == self.owner

    for user in allowed:
        self.is_allowed[user] = True
        log Allowed(user)

@external
def deny(denied: DynArray[address, 100]):
    assert msg.sender == self.owner

    for user in denied:
        self.is_allowed[user] = False
        log Denied(user)

@external
def validate(creator: address, ...):
    assert self.is_allowed[creator]
    return MAX_UINT256

Denylist.vy:

from .. import StreamManager

owner: public(address)
is_denied: public(HashMap[address, bool])

event Allowed:
    user: indexed(address)

event Denied:
    user: indexed(address)

@deploy
def __init__(denied: DynArray[address, 100]):
    self.owner = msg.sender
    for user in allowed:
        self.is_denied[user] = True
        log Allowed(user)

@external
def allow(allowed: DynArray[address, 100]):
    assert msg.sender == self.owner

    for user in allowed:
        self.is_denied[user] = False
        log Allowed(user)

@external
def deny(denied: DynArray[address, 100]):
    assert msg.sender == self.owner

    for user in denied:
        self.is_denied[user] = True
        log Denied(user)

@external
def cancel_stream(manager: StreamManager, creator: address, stream_id: uint256):
    # NOTE: Batch-able via Multicall3
    assert self.is_denied[creator]
    manager.cancel_stream(creator, stream_id)

@external
def validate(creator: address, ...):
    assert not self.is_denied[creator]
    return MAX_UINT256
linear[bot] commented 4 days ago

SBK-541 Allowlist and Denylist example validators