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
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)
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)
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))
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)
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)
def get_type(): return sp.TList( sp.TVariant( add_operator = UpdateOperatorsRequest.get_operator_param_type(), remove_operator = UpdateOperatorsRequest.get_operator_param_type()) )
def get_operator_tokens_type(): return sp.TVariant(All_tokens = sp.TUnit, Some_tokens = sp.TSet(token_id_type))
# 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={}):
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())
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 = { }