Unfreeze
Search
K
Comment on page

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
);