Example #1
0
 def transfer_presigned(self, params):
     sp.set_type(
         params,
         sp.TRecord(from_=sp.TAddress, to_=sp.TAddress, value=sp.TNat))
     params_hash = sp.blake2b(sp.pack(params))
     #unsigned = sp.blake2b(mi.operator("SELF; ADDRESS; CHAIN_ID; PAIR; PAIR; PACK", [sp.TPair(sp.TNat, sp.TBytes)], [sp.TBytes])(sp.pair(self.data.counter, params_hash)))
     permit_key = sp.pair(params.from_, params_hash)
     effective_expiry = sp.local("effective_expiry", 0)
     with sp.if_(self.data.permits.contains(permit_key)):
         permit_submission_timestamp = self.data.permits[permit_key]
         with sp.if_(
                 self.data.permit_expiries.contains(permit_key)
                 & self.data.permit_expiries[permit_key].is_some()):
             effective_expiry.value = self.data.permit_expiries[
                 permit_key].open_some()
         with sp.else_():
             with sp.if_(
                     self.data.user_expiries.contains(params.from_)
                     & self.data.user_expiries[params.from_].is_some()):
                 effective_expiry.value = self.data.user_expiries[
                     params.from_].open_some()
             with sp.else_():
                 effective_expiry.value = self.data.default_expiry
         # Deleting permit regardless of whether or not its expired
         with sp.if_(
                 sp.as_nat(sp.now - permit_submission_timestamp) >=
                 effective_expiry.value):
             # Expired
             self.delete_permit(permit_key)
             sp.result(sp.bool(False))
         with sp.else_():
             self.delete_permit(permit_key)
             sp.result(sp.bool(True))
     with sp.else_():
         sp.result(sp.bool(False))
Example #2
0
 def transfer(self, params):
     sp.set_type(
         params,
         sp.TRecord(from_=sp.TAddress, to_=sp.TAddress,
                    value=sp.TNat)).layout(
                        ("from_ as from", ("to_ as to", "value")))
     sender = sp.local("sender", sp.sender)
     with sp.if_((self.transfer_presigned(params))):
         # Setting sender.value to from_ so call to transfer_helper will be authorized
         sender.value = params.from_
     sp.verify((sender.value == self.data.administrator) | (
         ~self.data.paused & (
             (params.from_ == sender.value) | (self.data.balances[
                 params.from_].approvals[sender.value] >= params.value))))
     self.addAddressIfNecessary(params.to_)
     sp.verify(self.data.balances[params.from_].balance >= params.value)
     self.data.balances[params.from_].balance = sp.as_nat(
         self.data.balances[params.from_].balance - params.value)
     self.data.balances[params.to_].balance += params.value
     with sp.if_(((params.from_ != sender.value) &
                  (self.data.administrator != sender.value))):
         self.data.balances[params.from_].approvals[
             sender.value] = sp.as_nat(
                 self.data.balances[params.from_].approvals[sender.value] -
                 params.value)
Example #3
0
 def transderDataToken(self, f, t, token_id):
     self.data.tokenHolderToID[f].remove(token_id)
     with sp.if_(~self.data.ownerToBalance.contains(t)):
         self.data.tokenHolderToID[t] = sp.set()
     self.data.tokenHolderToID[t].add(token_id)
     self.data.tokenIdToOwner[token_id] = t
     self.data.ownerToBalance[f] -= 1
     with sp.if_(~self.data.ownerToBalance.contains(t)):
         self.data.ownerToBalance[t] = 0
     self.data.ownerToBalance[t] += 1
Example #4
0
 def mintDataToken(self,params):
     sp.verify(sp.sender == self.data.admin)
     sp.verify(~self.data.tokensMinted.contains(params.token_id))
     self.data.tokensMinted.add(params.token_id)
     with sp.if_(~self.data.ownerToBalance.contains(params.address)):
         self.data.tokenHolderToID[params.address] = sp.set()
     self.data.tokenHolderToID[params.address].add(params.token_id)
     self.data.tokenIdToOwner[params.token_id] = params.address
     with sp.if_(~self.data.ownerToBalance.contains(params.address)):
         self.data.ownerToBalance[params.address] = 0
     self.data.ownerToBalance[params.address] += 1
Example #5
0
 def getEffectiveExpiry(self, params):
     sp.set_type(params, sp.TPair(sp.TAddress, sp.TBytes))
     address = sp.fst(params)
     with sp.if_(
             self.data.permit_expiries.contains(params)
             & self.data.permit_expiries[params].is_some()):
         permit_expiry = self.data.permit_expiries[params].open_some()
         sp.result(permit_expiry)
     with sp.else_():
         with sp.if_(
                 self.data.user_expiries.contains(address)
                 & self.data.user_expiries[address].is_some()):
             user_expiry = self.data.user_expiries[address].open_some()
             sp.result(user_expiry)
         with sp.else_():
             sp.result(self.data.default_expiry)
Example #6
0
 def setExpiry(self, params):
     sp.set_type(
         params,
         sp.TRecord(address=sp.TAddress,
                    seconds=sp.TNat,
                    permit=sp.TOption(sp.TBytes))).layout(
                        ("address", ("seconds", "permit")))
     sp.verify(~self.data.paused)
     sp.verify(params.seconds <= self.data.max_expiry,
               "MAX_SECONDS_EXCEEDED")
     sp.verify_equal(params.address, sp.sender, message="NOT_AUTHORIZED")
     with sp.if_(params.permit.is_some()):
         some_permit = params.permit.open_some()
         sp.verify(
             self.data.permits.contains(sp.pair(params.address,
                                                some_permit)),
             "PERMIT_NONEXISTENT")
         permit_submission_timestamp = self.data.permits[sp.pair(
             params.address, some_permit)]
         with sp.if_(
                 self.data.permit_expiries.contains(
                     sp.pair(params.address, some_permit))
                 & self.data.permit_expiries[sp.pair(
                     params.address, some_permit)].is_some()):
             permit_expiry = self.data.permit_expiries[sp.pair(
                 params.address, some_permit)].open_some()
             sp.verify(
                 sp.as_nat(sp.now - permit_submission_timestamp) <
                 permit_expiry, "PERMIT_REVOKED")
         with sp.else_():
             with sp.if_(
                     self.data.user_expiries.contains(params.address)
                     & self.data.user_expiries[params.address].is_some()):
                 user_expiry = self.data.user_expiries[
                     params.address].open_some()
                 sp.verify(
                     sp.as_nat(sp.now - permit_submission_timestamp) <
                     user_expiry, "PERMIT_REVOKED")
             with sp.else_():
                 sp.verify(
                     sp.as_nat(sp.now - permit_submission_timestamp) <
                     self.data.default_expiry, "PERMIT_REVOKED")
         self.data.permit_expiries[sp.pair(
             params.address, some_permit)] = sp.some(params.seconds)
         self.data.user_expiries[params.address] = sp.some(params.seconds)
Example #7
0
 def delete_permit(self, permit_key):
     sp.set_type(permit_key, sp.TPair(sp.TAddress, sp.TBytes))
     with sp.if_(self.data.permits.contains(permit_key)):
         del self.data.permits[permit_key]
     with sp.if_(self.data.permit_expiries.contains(permit_key)):
         del self.data.permit_expiries[permit_key]
Example #8
0
 def addAddressIfNecessary(self, address):
     with sp.if_(~self.data.balances.contains(address)):
         self.data.balances[address] = sp.record(balance=0, approvals={})