Ir al contenido

Construir con Objetos

En Move, los Objetos agrupan recursos juntos para que puedan ser tratados como una sola entidad en la cadena.

Los Objetos tienen su propia dirección y pueden poseer recursos similar a una cuenta. Son útiles para representar tipos de datos más complicados en la cadena ya que los Objetos pueden ser usados en funciones de entrada directamente, y pueden ser transferidos como paquetes completos en lugar de un recurso a la vez.

Aquí hay un ejemplo de crear un Objeto y transferirlo:

module my_addr::object_playground {
use std::signer;
use std::string::{Self, String};
use aptos_framework::object::{Self, ObjectCore};
struct MyStruct1 has key {
message: String,
}
struct MyStruct2 has key {
message: String,
}
entry fun create_and_transfer(caller: &signer, destination: address) {
// Create object
let caller_address = signer::address_of(caller);
let constructor_ref = object::create_object(caller_address);
let object_signer = object::generate_signer(&constructor_ref);
// Set up the object by creating 2 resources in it
move_to(&object_signer, MyStruct1 {
message: string::utf8(b"hello")
});
move_to(&object_signer, MyStruct2 {
message: string::utf8(b"world")
});
// Transfer to destination
let object = object::object_from_constructor_ref<ObjectCore>(
&constructor_ref
);
object::transfer(caller, object, destination);
}
}

Durante la construcción, los Objetos pueden ser configurados para ser transferibles y extensibles.

Por ejemplo, podrías usar un Objeto para representar un NFT soulbound haciéndolo solo transferible una vez, y que posea recursos para un enlace de imagen y metadatos. Los Objetos también pueden poseer otros Objetos, así que podrías implementar tu propio Objeto de colección NFT transfiriendo varios de los NFTs soulbound a él.