Integration

Unfreeze is a fully decentralised protocol built natively within Solidity smart contracts. Integration can we made with any library that supports creation of EVM blockchain transaction such as ethers. Github repository with a code snippets.

Collection needs to be registered before executing any action.

1. Create reward share rental

  const unfreezeProtocolRegistry = new ethers.Contract(
    address.ProtocolRegistry,
    ProtocolRegistryAbi.result,
    signer
  );
  console.log(unfreezeProtocolRegistry.address);

  const registerCollection =
    await unfreezeProtocolRegistry.registerRentContract(
      settings.registerRentContract.partnerName,
      settings.registerRentContract.nodeName,
      settings.registerRentContract.owner,
      settings.registerRentContract.ERC4907
    );
  await registerCollection.wait();

  console.log("Connect to OwnerScholarshipMarketplace...");
  const ownerScholarshipMarketplace = new ethers.Contract(
    address.OwnerScholarshipMarketplace,
    OwnerScholarshipMarketplaceAbi.result,
    signer
  );
  console.log(ownerScholarshipMarketplace.address);

  console.log("Create rental...");
  const createRent =
    await ownerScholarshipMarketplace.ownerCreatesScholarshipRental(
      settings.ownerScholarshipMarketplace.registryTokenName,
      settings.ownerScholarshipMarketplace.rentTokenId,
      settings.ownerScholarshipMarketplace.validityTime,
      settings.ownerScholarshipMarketplace.rentDuration,
      settings.ownerScholarshipMarketplace.allowedToRent,
      settings.ownerScholarshipMarketplace.paymentAddress,
      settings.ownerScholarshipMarketplace.paymentAmount,
      settings.ownerScholarshipMarketplace.rentExtensionAllowed,
      settings.ownerScholarshipMarketplace.ownerReward
    );
  const tx = await createRent.wait();

  const events = await tx.events;

  const ownerCreateRentalEvent = events.find(
    (el: Event) => el.event === "OwnerCreateRental"
  );
  const rentId = ownerCreateRentalEvent.args.rentId.toNumber();

2. Accept rental offer

  const [signer] = await ethers.getSigners();
  const network = (await signer.provider?.getNetwork())?.name;

  if (!network) {
    throw new Error("Network not defined");
  }

  console.log("Connect to OwnerLendMarketplace...");
  const ownerLendMarkeplace = new ethers.Contract(
    address.OwnerLendMarketplace,
    OwnerLendMarketplaceAbi.result,
    signer
  );
  console.log(ownerLendMarkeplace.address);

  const IERC721 = new ethers.Contract(
    acceptRentalSettings.ERC721CollectionAddress,
    ERC721Abi,
    signer
  );

  await IERC721.approve(
    address.OwnerLendMarketplace,
    acceptRentalSettings.rentTokenId
  );

  console.log("Acceptance...");
  const acceptRent = await ownerLendMarkeplace.userAcceptsAvailableRental(
    acceptRentalSettings.rentId,
    { value: acceptRentalSettings.value }
  );
  await acceptRent.wait();

3. Register collection without EIP-4907 support

  const [signer] = await ethers.getSigners();
  const network = (await signer.provider?.getNetwork())?.name;

  if (!network) {
    throw new Error("Network not defined");
  }

  console.log("Connect to ProtocolRegistry...");
  const unfreezeProtocolRegistry = new ethers.Contract(
    address.ProtocolRegistry,
    ProtocolRegistryAbi.result,
    signer
  );
  console.log(unfreezeProtocolRegistry.address);

  const registerCollection =
    await unfreezeProtocolRegistry.registerRentContractAndDeployWrapper(
      settings.registerCollection.partnerName,
      settings.registerCollection.nodeName,
      settings.registerCollection.owner,
      settings.registerCollection.nftAddress
    );
  await registerCollection.wait();

  console.log("Create rental...");

  await createRental(
    signer,
    settings.ownerCreatesRental.registryTokenName,
    settings.ownerCreatesRental.rentTokenId,
    settings.ownerCreatesRental.validityTime,
    settings.ownerCreatesRental.rentDuration,
    settings.ownerCreatesRental.allowedToRent,
    settings.ownerCreatesRental.paymentAddress,
    settings.ownerCreatesRental.paymentAmount,
    settings.ownerCreatesRental.rentExtensionAllowed
  );

Last updated