Importar biblioteca FA2:
import smartpy as sp
FA2 = sp.io.import_script_from_url("https://smartpy.io/templates/fa2_lib.py")
Compilation target:
sp.add_compilation_target(
"fa2_nft_tokens",
ExampleFa2Nft(
metadata = sp.utils.metadata_of_url("http://example.com")
)
)
Probar:
@sp.add_test(name="FA2 NFT tokens")
def test():
sc = sp.test_scenario()
sc.table_of_contents()
sc.h2("FA2")
example_fa2_nft = ExampleFa2Nft(
metadata = sp.utils.metadata_of_url("https://example.com")
)
sc += example_fa2_nft
Ahora es posible ejecutar y compilar el contrato.
Personalización
Mixins
La biblioteca FA2 proporciona clases pequeñas de las que puede heredar por separado para agregar características adicionales.
class ExampleFa2Nft(
FA2.Admin,
FA2.ChangeMetadata,
FA2.WithdrawMutez,
FA2.OnchainviewBalanceOf,
FA2.Fa2Nft
):
Init
Algunos mixins necesitan inicializarse:
class ExampleFa2Nft(FA2.Admin, FA2.Fa2Nft):
def __init__(self, admin, metadata):
FA2.Fa2Nft.__init__(self, metadata)
FA2.Admin.__init__(self, admin)
Almacenamiento
class ExampleFa2Nft(FA2.Admin, FA2.Fa2Nft):
def __init__(self, admin, metadata):
FA2.Fa2Nft.__init__(self, metadata)
FA2.Admin.__init__(self, admin)
self.update_initial_storage(
closed = False,
)
Entrypoint
Dentro de la clase es posible agregar nuevos puntos de entrada o reimplementar los proporcionados por la biblioteca.
@sp.entry_point
def mint(self, to_, metadata):
sp.verify(sp.sender == self.data.administrator, "FA2_NOT_ADMIN")
token_id = sp.compute(self.data.next_token_id)
self.data.token_metadata[token_id] = sp.record(
token_id=token_id, token_info=metadata
)
self.data.ledger[token_id] = to_
self.data.next_token_id += 1
Contiene descripciones generales del contrato y las vistas fuera de la cadena.
Esto puede estar en un archivo JSON almacenado en IPFS:
sp.add_compilation_target(
"Fa2Nft_tokens",
ExampleFa2Nft(
metadata = sp.utils.metadata_of_url("http://example.com")
)
)
O en el contrato propio:
sp.add_compilation_target(
"Fa2Nft_tokens",
ExampleFa2Nft(
metadata_base = {
"version": "1.0.0",
"description" : "This implements FA2 (TZIP-012) using SmartPy.",
"interfaces": ["TZIP-012", "TZIP-016"],
"authors": ["SmartPy <https://smartpy.io/#contact>"],
"homepage": "https://smartpy.io/ide?template=FA2.py",
"source": {
"tools": ["SmartPy"],
"location": "https://gitlab.com/SmartPy/smartpy/-/raw/master/python/templates/FA2.py"
},
"permissions": {
"receiver": "owner-no-hook",
"sender": "owner-no-hook"
}
}
)
)
Enlaces de referencia