def balance_of(self, balance_of_request): """As per FA2 standard, takes balance_of requests and reponds on the provided callback contract""" sp.set_type(balance_of_request, BalanceOf.get_type()) responses = sp.local("responses", sp.set_type_expr(sp.list([]),BalanceOf.get_response_type())) sp.for request in balance_of_request.requests: sp.verify(self.data.token_metadata.contains(request.token_id), message = FA2ErrorMessage.TOKEN_UNDEFINED) responses.value.push(sp.record(request = request, balance = self.data.ledger.get(LedgerKey.make(request.owner, request.token_id),0)))
def get_redeem_addresses(self, get_redeem_address_request): """As per FA2 standard, takes balance_of requests and reponds on the provided callback contract""" sp.set_type(get_redeem_address_request, RedeemAddress.get_request_type()) responses = sp.local("responses", sp.set_type_expr(sp.list([]),RedeemAddress.get_batch_type())) sp.for token_id in get_redeem_address_request.token_ids: sp.verify(self.data.token_metadata.contains(token_id), message = FA2ErrorMessage.TOKEN_UNDEFINED) responses.value.push(sp.record(token_id = token_id, address = self.data.token_context[token_id].redeem_address))
def test(): c1 = Bls12_381( g1=sp.bls12_381_g1( "0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48" ), g2=sp.bls12_381_g2( "0x8647aa9680cd0cdf065b94e818ff2bb948cc97838bcee987b9bc1b76d0a0a6e0d85db4e9d75aaedfc79d4ea2733a21ae0579014de7636dd2943d45b87c82b1c66a289006b0b9767921bb8edd3f6c5c5dec0d54cd65f61513113c50cc977849e5" ), fr=sp.bls12_381_fr( "0x60c8333ef28e1b3b7fc487952b1e21372bd43056e8cb993625735b645e8030b7" ), mulResult=sp.none, checkResult=sp.none) scenario = sp.test_scenario() scenario += c1 scenario += c1.add( g1=sp.bls12_381_g1( "0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48" ), g2=sp.bls12_381_g2( "0x8647aa9680cd0cdf065b94e818ff2bb948cc97838bcee987b9bc1b76d0a0a6e0d85db4e9d75aaedfc79d4ea2733a21ae0579014de7636dd2943d45b87c82b1c66a289006b0b9767921bb8edd3f6c5c5dec0d54cd65f61513113c50cc977849e5" ), fr=sp.bls12_381_fr( "0x60c8333ef28e1b3b7fc487952b1e21372bd43056e8cb993625735b645e8030b7" )) scenario += c1.negate() scenario += c1.toInt() scenario += c1.mul( sp.pair( sp.bls12_381_fr( "0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48" ), sp.bls12_381_fr( "0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c" ))) scenario += c1.pairing_check( sp.list([ sp.pair( sp.bls12_381_g1( "0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48" ), sp.bls12_381_g2( "0x8647aa9680cd0cdf065b94e818ff2bb948cc97838bcee987b9bc1b76d0a0a6e0d85db4e9d75aaedfc79d4ea2733a21ae0579014de7636dd2943d45b87c82b1c66a289006b0b9767921bb8edd3f6c5c5dec0d54cd65f61513113c50cc977849e5" )), sp.pair( sp.bls12_381_g1( "0x8ce3b57b791798433fd323753489cac9bca43b98deaafaed91f4cb010730ae1e38b186ccd37a09b8aed62ce23b699c48" ), sp.bls12_381_g2( "0x8647aa9680cd0cdf065b94e818ff2bb948cc97838bcee987b9bc1b76d0a0a6e0d85db4e9d75aaedfc79d4ea2733a21ae0579014de7636dd2943d45b87c82b1c66a289006b0b9767921bb8edd3f6c5c5dec0d54cd65f61513113c50cc977849e5" )) ]))
def __init__(self): self.init( time_out = sp.timestamp(0), votes = sp.map(tkey = sp.TAddress, tvalue = sp.TString), parties = sp.list(t=sp.TAddress), immutability = False, proposal = '', ocasion = '', ammendment = '' )
def endContract(self, params): self.data.houseaddress = params._houseAddress sp.verify(self.data.owner == sp.sender, message='Only Owner Can End Contract.') sp.send(self.data.propertyList[self.data.houseaddress].tenant, self.data.propertyList[self.data.houseaddress].deposit) self.data.propertyList[self.data.houseaddress].tenant = self.data.owner self.data.propertyList[self.data.houseaddress].active = False self.data.propertyList[self.data.houseaddress].dispute = False self.data.propertyList[self.data.houseaddress].paidRents = sp.list()
def __init__(self): self.init(dates=sp.list([]), entries=sp.list([]), authors=sp.list([]))
def __init__(self): self.init(tokenList=sp.list(t=sp.TAddress), tokenToExchange=sp.big_map(tkey=sp.TAddress, tvalue=sp.TAddress), exchangeToToken=sp.big_map(tkey=sp.TAddress, tvalue=sp.TAddress))
def __init__(self, initialNonce, initialHashedProof): self.init( nonce=initialNonce, hashedProof=initialHashedProof, SecretStore=sp.list(t=sp.TString), )
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 ) # Call into HEN contract c = sp.contract( sp.TRecord( creator=sp.TAddress, objkt_amount=sp.TNat, objkt_id=sp.TNat, royalties=sp.TNat, xtz_per_objkt=sp.TMutez ),
def test(): scenario = sp.test_scenario() scenario.h1("Simple ST12 Contract") # sp.test_account generates ED25519 key-pairs deterministically: admin = sp.test_account("AccessControl") alice = sp.test_account("Alice") bob = sp.test_account("Robert") # Let's display the accounts: scenario.h2("Accounts") scenario.show([admin, alice, bob]) c1 = ST12( config = config, administrators = sp.set([admin.address]), metadata = sp.map(l = { # Remember that michelson wants map already in ordered "decimals" : sp.bytes_of_string("%d" % 18), "name" : sp.bytes_of_string("Test Token"), "symbol" : sp.bytes_of_string("Test") }) ) scenario += c1 scenario.h2("Admin mints a few coins") scenario += c1.mint(sp.list([sp.record(address=alice.address, amount=12)])).run(sender=admin) scenario += c1.mint(sp.list([ sp.record(address=alice.address, amount=3), sp.record(address=alice.address, amount=3), ])).run(sender=admin) scenario.h2("Alice transfers her own tokens to Bob") scenario += c1.transfer(from_=alice.address, to_=bob.address, value=4).run( sender=alice ) scenario.verify(c1.data.ledger[alice.address].balance == 14) scenario.h2("Bob tries to transfer from Alice but he doesn't have her approval") scenario += c1.transfer(from_=alice.address, to_=bob.address, value=4).run( sender=bob, valid=False ) scenario.h2("Alice approves Bob and Bob transfers") scenario += c1.approve(spender=alice.address, value=5).run( sender=alice ) scenario += c1.transfer(from_=alice.address, to_=bob.address, value=4).run( sender=admin ) scenario.h2("Bob tries to over-transfer from Alice") scenario += c1.transfer(from_=alice.address, to_=bob.address, value=4).run( sender=bob, valid=False ) scenario.h2("Admin burns Bob token") scenario += c1.burn(sp.list([sp.record(address=bob.address, amount=1)])).run(sender=admin) scenario.verify(c1.data.ledger[alice.address].balance == 10) scenario.h2("Alice tries to burn Bob token") scenario += c1.burn(sp.list([sp.record(address=bob.address, amount=1)])).run( sender=alice, valid=False ) scenario.h2("Admin pauses the contract and Alice cannot transfer anymore") scenario += c1.set_paused(True).run(sender=admin) scenario += c1.transfer(from_=alice.address, to_=bob.address, value=4).run( sender=alice, valid=False ) scenario.verify(c1.data.ledger[alice.address].balance == 10) scenario.h2("Admin transfers while on pause") scenario += c1.transfer(from_=alice.address, to_=bob.address, value=1).run( sender=admin ) scenario.h2("Admin unpauses the contract and transferts are allowed") scenario += c1.set_paused(False).run(sender=admin) scenario.verify(c1.data.ledger[alice.address].balance == 9) scenario += c1.transfer(from_=alice.address, to_=bob.address, value=1).run( sender=admin ) scenario.verify(c1.data.total_supply == 17) scenario.verify(c1.data.ledger[alice.address].balance == 8) scenario.verify(c1.data.ledger[bob.address].balance == 9) scenario.h2("Burn") scenario += c1.burn( sp.list([ sp.record( address=alice.address, amount=3 ) ]) ).run(sender=admin) scenario += c1.burn( sp.list( [ sp.record( address=alice.address, amount=3 ) ] ) ).run(sender=admin) scenario.table_of_contents()
def __init__(self): self.init(limit = 5, ticketToAddress = sp.map(tkey = sp.TNat, tvalue = sp.TAddress), id = 0, previousWinners = sp.list(t = sp.TAddress))
def test(): scenario = sp.test_scenario() scenario.h1("VestingEscrowMinterBurnerWallet") admin = sp.test_account("Token Admin") alice = sp.test_account("Alice") bob = sp.test_account("Bob") fa12 = ST12(admin.address) fa2 = ST2(admin.address) v = VestingEscrowMinterBurnerWallet() scenario += fa12 scenario += fa2 scenario += v scenario += v.vest( sp.list([ sp.record( schedule_name = "4 Months Cliff Vesting From 12-12-2020", beneficiery = alice.address, start = sp.timestamp(0), cliff = sp.timestamp(5), end = sp.timestamp(10), vesting_amount = 100, token_address = fa2.address, token_id = sp.some(0), metadata = sp.some(sp.map({ "decimals": sp.bytes_of_string("%d" % 18), "name": sp.bytes_of_string("Test"), "symbol": sp.bytes_of_string("TEST") })) ) ]) ) scenario += v.claim().run(sender = alice, now = sp.timestamp(5)) scenario += v.claim().run(sender = alice, now = sp.timestamp(7)) scenario += v.claim().run(sender = alice, now = sp.timestamp(10)) scenario += v.claim().run(sender = alice, now = sp.timestamp(10), valid=False) scenario += v.claim().run(sender = alice, now = sp.timestamp(15), valid=False) scenario += v.vest( sp.list([ sp.record( schedule_name = "5 Months Cliff Vesting From 12-12-2020", beneficiery = alice.address, start = sp.timestamp(0), cliff = sp.timestamp(5), end = sp.timestamp(10), vesting_amount = 200, token_address = fa12.address, token_id = sp.none, metadata = sp.none ), sp.record( schedule_name = "8 Months Cliff Vesting From 12-12-2020", beneficiery = bob.address, start = sp.timestamp(0), cliff = sp.timestamp(5), end = sp.timestamp(10), vesting_amount = 200, token_address = fa12.address, token_id = sp.none, metadata = sp.none ) ]) ) scenario += v.changeBeneficiery( sp.list([ sp.record( schedule_name = "8 Months Cliff Vesting From 12-12-2020", from_ = bob.address, to_ = alice.address ) ]) ).run(sender = alice, valid = False) scenario += v.changeBeneficiery( sp.list([ sp.record( schedule_name = "8 Months Cliff Vesting From 12-12-2020", from_ = bob.address, to_ = alice.address ) ]) ).run(sender = admin) scenario += v.changeBeneficieryForAll( sp.list([ sp.record( from_ = alice.address, to_ = bob.address ) ]) ).run(sender = alice, valid = False) scenario += v.changeBeneficieryForAll( sp.list([ sp.record( from_ = alice.address, to_ = bob.address ) ]) ).run(sender = admin)
sp.verify(self.token_id_set.contains(self.data.all_tokens, params.token_id), "TOKEN ID NOT FOUND") # Make sure that NFT token id is listed for bidding sp.verify(self.data.offer.contains(params.token_id) == True, "NFT TOKEN ID NOT OPEN FOR BIDDING") # Make sure NFT token id is up for sale sp.verify(self.data.offer[params.token_id].is_for_sale == True, "NFT TOKEN ID IS NOT UP FOR SALE") # Make sure that bidding amount is more than min_offer_price sp.verify(self.data.offer[params.token_id].min_sale_value < sp.amount, "INSUFFICIENT BIDDING VALUE") # Add user to bidding list for the NFT with the token id sp.if self.data.bid.contains(params.token_id): self.data.bid[params.token_id].push(sp.record(has_bid = True, bidder = sp.sender, bid_value = sp.amount)) sp.else: self.data.bid[params.token_id] = sp.list([sp.record(has_bid = True, bidder = sp.sender, bid_value = sp.amount)]) @sp.entry_point def offer_bot_for_sale(self, params): # Make sure that sp.sender has admin access otherwise don't proceed forward # Make sure that contract isn't paused sp.set_type(params.token_id, sp.TNat) sp.set_type(params.min_sale_price, sp.TMutez) # Make sure that the NFT token id is already present sp.verify(self.token_id_set.contains(self.data.all_tokens, params.token_id), "TOKEN ID NOT FOUND") # Make user that min_sale_value is more than zero mutez sp.verify(params.min_sale_price > sp.mutez(0), "MIN VALUE SHOULD BE MORE THAN ZERO")
def checkHouseAlreadyExits(self, params): sp.if ~(self.data.propertyList.contains(params._houseAddress)): self.data.propertyList[params._houseAddress] = sp.record(tenant=self.data.owner, rent=sp.tez( params._rent), deposit=sp.tez(params._deposit), active=sp.bool(False), paidRents=sp.list(), dispute=False)
def checkDate(self, date): sp.if ~(self.data.attendanceMap.contains(date)): self.data.attendanceMap[date] = sp.list(t=sp.TString)
def balance_of(self, balance_of_request): sp.set_type(balance_of_request, BalanceOfRequest.get_type()) responses = sp.local("responses", sp.set_type_expr(sp.list([]),BalanceOfRequest.get_response_type())) sp.for request in balance_of_request.requests: responses.value.push(sp.record(request = request, balance = self.data.ledger.get(LedgerKey.make(request.owner, request.token_id),0)))
def __init__(self): self.init(last_sum=0, last_acc="", last_nonces=sp.list(t=sp.TRecord( owner=sp.TAddress, nonce=sp.TNat)))
def fa2_transfer(self, fa2, from_, to_, objkt_id, objkt_amount): c = sp.contract(sp.TList(sp.TRecord(from_=sp.TAddress, txs=sp.TList(sp.TRecord(amount=sp.TNat, to_=sp.TAddress, token_id=sp.TNat).layout(("to_", ("token_id", "amount")))))), fa2, entry_point='transfer').open_some() sp.transfer(sp.list([sp.record(from_=from_, txs=sp.list([sp.record(amount=objkt_amount, to_=to_, token_id=objkt_id)]))]), sp.mutez(0), c)
def __init__(self, admin, fee): self.init(cadmin=admin, fees=fee, funds=sp.tez(0), transfers=sp.list(t=pay_type), lock=False)