Skip to content

Instantly share code, notes, and snippets.

@jonyx225
Created April 7, 2023 01:24
Show Gist options
  • Select an option

  • Save jonyx225/32da5b11066a06ffdb1d626c04cfa914 to your computer and use it in GitHub Desktop.

Select an option

Save jonyx225/32da5b11066a06ffdb1d626c04cfa914 to your computer and use it in GitHub Desktop.

Revisions

  1. jonyx225 created this gist Apr 7, 2023.
    53 changes: 53 additions & 0 deletions FA2_REVEAL.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,53 @@
    import smartpy as sp
    FA2 = sp.io.import_script_from_url("https://smartpy.io/templates/fa2_lib.py")

    class MyProject(
    FA2.Admin,
    FA2.BurnNft,
    FA2.ChangeMetadata,
    FA2.WithdrawMutez,
    FA2.MintNft,
    FA2.OnchainviewBalanceOf,
    FA2.Fa2Nft):
    def __init__(self, admin, metadata, token_metadata = {}, ledger = {}, policy = FA2.OwnerOrOperatorTransfer(), metadata_base = None):
    FA2.Fa2Nft.__init__(self, metadata, token_metadata = token_metadata, ledger = ledger, policy = policy, metadata_base = metadata_base)
    FA2.Admin.__init__(self, admin)
    self.update_initial_storage(
    last_token_id_revealed = 0)

    @sp.private_lambda(with_storage=None, with_operations=False, wrap_call=False)
    def nat_stringify(self,from_nat):
    sp.set_type(from_nat,sp.TNat)
    digits = sp.map(l={x : str(x) for x in range(0, 10)}, tkey = sp.TNat, tvalue=sp.TString)
    my_nat = sp.local('my_nat', from_nat)
    my_string = sp.local("my_string", [])
    sp.if my_nat.value == 0:
    my_string.value.push("0")
    sp.while 0 < my_nat.value:
    my_string.value.push(digits[my_nat.value % 10])
    my_nat.value //= 10
    sp.result(sp.concat(my_string.value))

    def called_by_owner(self):
    sp.if self.data.administrator != sp.sender:
    sp.failwith("FA2_NOT_OWNER")

    @sp.entry_point
    def reveal(self, params):
    sp.set_type(params.revealed_folder_hash, sp.TString)
    self.called_by_owner()
    with sp.for_("token_id", sp.range(self.data.last_token_id_revealed,self.data.last_token_id,step=1)) as token_id:
    token_id = params.token_id
    token_id_stringify = self.nat_stringify(token_id)
    token_info = "ipfs://"+params.revealed_folder_hash+"/"+token_id_stringify+".json"
    self.data.token_metadata[token_id].token_info[""] = sp.pack(token_info)
    self.data.last_token_id_revealed = self.data.last_token_id


    sp.add_compilation_target(
    "My Project Name",
    MyProject(
    admin=sp.address("tz1LgP5DCcgBZ6AaHQw5iwDynCi21G9MKXxy"),
    metadata = sp.utils.metadata_of_url("ipfs://hash")
    )
    )