Ejemplo n.º 1
0
 def get_type(self):
     operator_transfer_policy = sp.TVariant(
         no_transfer=sp.TUnit,
         owner_transfer=sp.TUnit,
         owner_or_operator_transfer=sp.TUnit)
     if self.config.force_layouts:
         operator_transfer_policy = operator_transfer_policy.layout(
             ("no_transfer",
              ("owner_transfer",
               "owner_or_operator_transfer")))
     owner_transfer_policy = sp.TVariant(
         owner_no_hook=sp.TUnit,
         optional_owner_hook=sp.TUnit,
         required_owner_hook=sp.TUnit)
     if self.config.force_layouts:
         owner_transfer_policy = owner_transfer_policy.layout(
             ("owner_no_hook",
              ("optional_owner_hook",
               "required_owner_hook")))
     custom_permission_policy = sp.TRecord(
         tag=sp.TString,
         config_api=sp.TOption(sp.TAddress))
     main = sp.TRecord(
         operator=operator_transfer_policy,
         receiver=owner_transfer_policy,
         sender=owner_transfer_policy,
         custom=sp.TOption(custom_permission_policy))
     if self.config.force_layouts:
         main = main.layout(("operator",
                             ("receiver",
                              ("sender", "custom"))))
     return main
Ejemplo n.º 2
0
 def update_operators(self, params):
     sp.set_type(params, sp.TList(
         sp.TVariant(
             add_operator = self.operator_param.get_type(),
             remove_operator = self.operator_param.get_type()
         )
     ))
     if self.config.support_operator:
         sp.for update in params:
             with update.match_cases() as arg:
                 with arg.match("add_operator") as upd:
                     sp.verify(
                         (upd.owner == sp.sender) | self.is_administrator(sp.sender),
                         message = self.error_message.not_admin_or_operator()
                     )
                     self.operator_set.add(self.data.operators,
                                           upd.owner,
                                           upd.operator,
                                           upd.token_id)
                 with arg.match("remove_operator") as upd:
                     sp.verify(
                         (upd.owner == sp.sender) | self.is_administrator(sp.sender),
                         message = self.error_message.not_admin_or_operator()
                     )
                     self.operator_set.remove(self.data.operators,
                                              upd.owner,
                                              upd.operator,
                                              upd.token_id)
Ejemplo n.º 3
0
 def update_operators(self, params):
     sp.set_type(
         params, 
         sp.TList(
             sp.TVariant(
                 add_operators = sp.TList(sp.TRecord(
                     owner = sp.TAddress,
                     operator = sp.TAddress
                 )),
                 remove_operators = sp.TList(sp.TRecord(
                     owner = sp.TAddress,
                     operator = sp.TAddress
                 ))
             )
         )
     )
     sp.if self.data.operable:
         sp.for update in params:
             with update.match_cases() as arg:
                 with arg.match("add_operators") as add_operators:
                     sp.for upd in add_operators:
                         sp.verify(
                             (upd.owner == sp.sender) |
                             (self.is_controller(sp.sender))
                         )
                         self.data.ledger[upd.owner].operators.add(upd.operator)
                 with arg.match("remove_operators") as remove_operators:
                     sp.for upd in remove_operators:
                         sp.verify(
                             (upd.owner == sp.sender) |
                             (self.is_controller(sp.sender))
                         )
                         self.data.ledger[upd.owner].operators.remove(upd.operator)
Ejemplo n.º 4
0
 def get_type():
     self_transfer_policy = sp.TVariant(
         Self_transfer_permitted = sp.TUnit,
         Self_transfer_denied = sp.TUnit)
     operator_transfer_policy = sp.TVariant(
         Operator_transfer_permitted = sp.TUnit,
         Operator_transfer_denied = sp.TUnit)
     owner_transfer_policy =  sp.TVariant(
         Owner_no_op = sp.TUnit,
         Optional_owner_hook = sp.TUnit,
         Required_owner_hook = sp.TUnit)
     custom_permission_policy = sp.TRecord(
         tag = sp.TString,
         config_api = sp.TOption(sp.TAddress))
     return sp.TRecord(
         self_    = self_transfer_policy,
         operator = operator_transfer_policy,
         receiver = owner_transfer_policy,
         sender   = owner_transfer_policy,
         custom   = sp.TOption(custom_permission_policy))
Ejemplo n.º 5
0
 def update_operators(self, params):
     sp.set_type(params, sp.TList(
         sp.TVariant(
             Add_operator = Operator_param.get_type(),
             Remove_operator = Operator_param.get_type())))
     if support_operator:
         sp.for update in params:
             sp.if update.is_variant("Add_operator"):
                 upd = update.open_variant("Add_operator")
                 self.make_operator_update(
                     upd,
                     Ledger_value.add_operator)
             sp.else:
                 upd = update.open_variant("Remove_operator")
                 self.make_operator_update(
                     upd,
                     Ledger_value.remove_operator)
Ejemplo n.º 6
0
 def update_operators(self, params):
     sp.set_type(params, sp.TList(
         sp.TVariant(
             add_operator = self.operator_param.get_type(),
             remove_operator = self.operator_param.get_type())))
     if self.config.support_operator:
         sp.for update in params:
             sp.if update.is_variant("add_operator"):
                 upd = update.open_variant("add_operator")
                 sp.verify((upd.owner == sp.sender) |
                           (sp.sender == self.data.administrator))
                 self.operator_set.add(self.data.operators,
                                       upd.owner,
                                       upd.operator)
             sp.else:
                 upd = update.open_variant("remove_operator")
                 sp.verify((upd.owner == sp.sender) |
                           (sp.sender == self.data.administrator))
                 self.operator_set.remove(self.data.operators,
                                          upd.owner,
                                          upd.operator)
Ejemplo n.º 7
0
 def get_type():
     return sp.TList(
             sp.TVariant(
                 add_operator = UpdateOperatorsRequest.get_operator_param_type(),
                 remove_operator = UpdateOperatorsRequest.get_operator_param_type())
     )
Ejemplo n.º 8
0
 def get_operator_tokens_type():
     return sp.TVariant(All_tokens = sp.TUnit,
                        Some_tokens = sp.TSet(token_id_type))
Ejemplo n.º 9
0
# https://smartpy.io/dev/?template=oracle.py

import smartpy as sp

# An Oracle is the on-chain incarnation of an Oracle provider
# It maintains a queue of requests of type request_type containing an amount
# paid, a sender, an entry_point and a list of parameters.

# Parameters of type parameters_type is a list of (name, dict) pairs.

value_type = sp.TVariant(int=sp.TInt, string=sp.TString, bytes=sp.TBytes)


def value_string(s):
    return sp.variant("string", s)


def value_bytes(s):
    return sp.variant("bytes", s)


def value_int(s):
    return sp.variant("int", s)


# Request parameters
parameters_type = sp.TList(
    sp.TPair(sp.TString, sp.TMap(sp.TString, value_type)))


def specify(spec, parameters={}):
Ejemplo n.º 10
0
    def hen_swap(self, swap_proposal_id):
        # Check that the swap exists
        sp.if ~self.data.swap_proposals.contains(swap_proposal_id):
            sp.failwith("swap doesn't exist")

        # Get swap info
        swap_info = self.data.swap_proposals[swap_proposal_id]

        # First, you need to update operators
        # Example https://tzkt.io/opGfD9TeKG145Rn427t32KVU3fPs74VucUxNLYGxZ7iN5yrPeJ8/11567483
        t = sp.TRecord(owner=sp.TAddress, operator=sp.TAddress, token_id=sp.TNat)
        t = t.layout(("owner", ("operator", "token_id")))

        nft_contract = sp.contract(sp.TList(
            sp.TVariant(
              add_operator=t,
              remove_operator=t
            )
        ),
        self.data.hen_nft_address,
        entry_point="update_operators").open_some()

        sp.transfer(
            sp.list([sp.variant("add_operator", sp.record(
                owner=sp.self_address,
                operator=self.data.hen_address,
                token_id=swap_info.objkt_id
            ))]),
            sp.mutez(0),
            nft_contract
        )
 def get_type():
     """Returns a single update operator type, layouted"""
     return sp.TVariant(
                 add_operator = UpdateOperator.get_operator_param_type(),
                 remove_operator = UpdateOperator.get_operator_param_type())
Ejemplo n.º 12
0
import smartpy as sp

tstorage = sp.TRecord(storedValue = sp.TNat).layout("storedValue")
tparameter = sp.TVariant(divide = sp.TRecord(divisor = sp.TNat).layout("divisor"), double = sp.TUnit, replace = sp.TRecord(value = sp.TNat).layout("value")).layout(("divide", ("double", "replace")))
tglobals = { }
tviews = { }