Source code for genlayer.std.annotations
import genlayer.py.get_schema as _get_schema
import abc
[docs]
def private(f):
"""
Decorator that marks method as private. As all methods are private by default it does nothing.
"""
return f
class _payable(metaclass=abc.ABCMeta):
def payable[T](self, f: T) -> T:
self(f)
setattr(f, _get_schema.PAYABLE_ATTR, True)
return f
@abc.abstractmethod
def __call__[T](self, f: T) -> T: ...
class _min_gas(_payable):
__slots__ = ('_leader', '_validator')
def __init__(self, leader: int, validator: int):
self._leader = leader
self._validator = validator
def __call__[T](self, f: T) -> T:
setattr(f, _get_schema.PUBLIC_ATTR, True)
setattr(f, _get_schema.READONLY_ATTR, False)
setattr(f, _get_schema.MIN_GAS_LEADER_ATTR, self._leader)
setattr(f, _get_schema.MIN_GAS_VALIDATOR_ATTR, self._validator)
return f
class _write(_payable):
def min_gas(self, *, leader: int, validator: int) -> _min_gas:
return _min_gas(leader, validator)
def __call__[T](self, f: T) -> T:
setattr(f, _get_schema.PUBLIC_ATTR, True)
setattr(f, _get_schema.READONLY_ATTR, False)
return f
[docs]
class public:
[docs]
@staticmethod
def view(f):
"""
Decorator that marks a contract method as a public view
"""
setattr(f, _get_schema.PUBLIC_ATTR, True)
setattr(f, _get_schema.READONLY_ATTR, True)
return f
write = _write()
"""
Decorator that marks a contract method as a public write. Has `.payable`
.. code:: python
@gl.public.write
def foo(self) -> None: ...
@gl.public.write.payable
def bar(self) -> None: ...
@gl.public.write.min_gas(leader=100, validator=20).payable
def bar(self) -> None: ...
"""
del _write