/** The smart LEGACY;

/** Términos y condiciones ;

Términos y Condiciones del sitio web de sucesión en línea con tecnología blockchain:

 

1. Introducción:
Bienvenido al sitio web de sucesión en línea con tecnología blockchain. Estos Términos y Condiciones regulan el acceso y el uso de nuestro sitio web, así como la utilización de nuestros servicios. Al acceder y utilizar nuestro sitio web, aceptas estos Términos y Condiciones. Si no estás de acuerdo con estos Términos y Condiciones, no podrás utilizar nuestro sitio web ni nuestros servicios.

 

2. Servicios ofrecidos:
Nuestro sitio web ofrece servicios en línea relacionados con el proceso de sucesión online y tokenización de instrucciones de ejecución del legado digital, utilizando tecnología blockchain para garantizar la seguridad, la transparencia y la eficiencia del proceso. Los servicios ofrecidos en nuestro sitio web incluyen, entre otros, la gestión y el seguimiento del proceso de sucesión, la asignación de herencias, la validación de identidad de los usuarios y la creación de contratos inteligentes.

 

3.Validación de información y documentos:
Toda la información y documentación proporcionada durante el proceso de registro y la utilización de nuestros servicios será revisada y validada por nuestro equipo legal. Si se identifican anomalías, inconsistencias o inexactitudes en la información o la documentación enviada, nos reservamos el derecho de no procesar la solicitud y de negar el acceso a nuestros servicios.

 

4. Registro y acceso al sitio web:
Para utilizar nuestros servicios, debes registrarte en nuestro sitio web y proporcionar información precisa y completa. Debes ser mayor de edad y tener capacidad legal para aceptar estos Términos y Condiciones y utilizar nuestros servicios. Nos reservamos el derecho de rechazar el registro de cualquier usuario y de suspender o cancelar el acceso a nuestros servicios en cualquier momento y sin previo aviso.

 

5. Propiedad intelectual:
Todo el contenido y los materiales disponibles en nuestro sitio web, incluyendo, entre otros, el diseño, la estructura, el código fuente, las imágenes, los textos, las marcas comerciales y los logotipos, son propiedad exclusiva de nuestro sitio web o de nuestros socios comerciales y están protegidos por las leyes de propiedad intelectual aplicables. No se permite la reproducción, distribución, modificación, exhibición pública o uso no autorizado de ninguno de los materiales o contenido de nuestro sitio web sin nuestro consentimiento previo y por escrito.

 

6. Protección de datos personales:
Protegemos tu privacidad y tus datos personales de acuerdo con nuestra Política de Privacidad, que forma parte integral de estos Términos y Condiciones. Al utilizar nuestros servicios, aceptas nuestra Política de Privacidad y nos autorizas a procesar tus datos personales de acuerdo con la misma.

 

7. Limitación de responsabilidad:
Nuestro sitio web y nuestros servicios se ofrecen «tal cual» y «según disponibilidad». No garantizamos que nuestro sitio web o nuestros servicios sean ininterrumpidos, seguros o libres de errores. En ningún caso seremos responsables por ningún daño indirecto, especial, incidental, consecuencial o punitivo que se derive del uso o la imposibilidad de uso de nuestro sitio web o nuestros servicios, incluyendo, entre otros, la pérdida de beneficios, la pérdida de datos o la interrupción del negocio.

 

8. Jurisdicción y leyes aplicables:
Únicamente territorio de Guatemala, las disputas serán resueltas en tribunales guatemaltecos.

 

9. Responsabilidad del usuario:
Los usuarios deberán comprometerse a no utilizar el sitio web o los servicios de manera fraudulenta, ilegal o que viole los derechos de terceros.

 

10. Cancelación o suspensión del servicio:
En caso de violar los términos y condiciones, actividad fraudulenta o incumplimiento de los requisitos legales aplicables, su cuenta será suspendida.

 

11. Cumplimiento de leyes locales:
Incluye una cláusula que indique que el usuario es responsable de cumplir con todas las leyes locales aplicables en relación con el uso del sitio web y los servicios.

 

12. Indemnización:
El usuario indemnizará y eximirá de responsabilidad al sitio web, sus directores, empleados y socios, por cualquier reclamo, pérdida, daño, responsabilidad o gasto (incluidos los honorarios legales) que surjan del uso indebido del sitio web o de los servicios por parte del usuario o de la violación de estos Términos y Condiciones.

 

¡Seguimos sumando esfuerzos para llegar y tener cobertura al país donde te encuentras!

pragma solidity ^0.8.2;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
*/
contract TheSmartHeritage is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable {
   using Counters for Counters.Counter;
}

   Counters.Counter private _tokenIdCounter;

   constructor() ERC721("CloneX", "CloneX") {
      _tokenIdCounter.increment(); // Making sure we start at token ID 1
   }

   event TheSmartLegacyRevealed(uint256 tokenId, string fileId); // Sending the event for offchain script to transform the right file

   address randomizerAddress; // Approved randomizer contract
   address mintvialAddress; // Approved mintvial contract
   string public _tokenUri = "https://clonex-assets.rtfkt.com/"; // Initial base URI

   bool public contractLocked = false;

   function mintTransfer(address to) public returns(uint256) {
      require(msg.sender == mintvialAddress, "Not authorized");

      TheSmartLegacyRandomizer tokenAttribution = CloneXRandomizer(randomizerAddress);

      string memory realId = tokenAttribution.getTokenId(_tokenIdCounter.current());
      uint256 mintedId = _tokenIdCounter.current();

      _safeMint(to, _tokenIdCounter.current());
      emit TheSmartHeritageRevealed(_tokenIdCounter.current(), realId);
      _tokenIdCounter.increment();
      return mintedId;
   }

   // Token symbol
      string private _symbol;

   // Change the randomizer address contract
   function setRandomizerAddress(address newAddress) public onlyOwner {
      randomizerAddress = newAddress;
   }

   // Change the mintvial address contract
   function setMintvialAddress(address newAddress) public onlyOwner {
      mintvialAddress = newAddress;
   }

   function secureBaseUri(string memory newUri) public onlyOwner {
      require(contractLocked == false, "Contract has been locked and URI can't be changed");
      _tokenUri = newUri;
   }

   function lockContract() public onlyOwner {
      contractLocked = true;
   }


   function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
      super._burn(tokenId);
   }

   function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) {
      return super.tokenURI(tokenId);
   }

   function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) {
      return super.supportsInterface(interfaceId);
   }
}