@renft/sdk
Version:
**ReNFT** is a multi-chain highly gas-optimised NFT rental protocol and platform that can be whitelabel integrated into any project to enable collateral-free in-house renting, lending, and reward share (scholarship automation).
193 lines (185 loc) • 4.89 kB
text/typescript
import { Contract, ContractTransaction } from '@ethersproject/contracts';
import {
NFTStandard,
packPrice,
PaymentToken,
prepareBatch,
} from '../../../core';
import {
SylvesterV0ClaimCollateralFunction,
SylvesterV0LendFunction,
SylvesterV0RentFunction,
SylvesterV0ReturnItFunction,
SylvesterV0StopLendingFunction,
} from './types';
export const createSylvesterV0LendThunk = (
contract: Contract
): SylvesterV0LendFunction => async (
nftStandard: NFTStandard[],
nftAddress: string[],
tokenID: string[],
amount: number[],
maxRentDuration: number[],
dailyRentPrice: number[],
paymentToken: PaymentToken[],
options?: any
): Promise<ContractTransaction> => {
const args = prepareBatch({
amount: amount.map(Number),
dailyRentPrice: dailyRentPrice.map(x => packPrice(Number(x).toString())),
maxRentDuration: maxRentDuration.map(Number),
nftAddress: nftAddress.map(String),
nftStandard,
paymentToken,
tokenID: tokenID.map(String),
});
return await contract.lend(
args.nftStandard,
args.nftAddress,
args.tokenID,
args.amount,
args.maxRentDuration,
args.dailyRentPrice,
args.paymentToken,
options ?? []
);
};
export const createSylvesterV1LendThunk = (
contract: Contract
): SylvesterV0LendFunction => async (
nftStandard: NFTStandard[],
nftAddress: string[],
tokenID: string[],
amount: number[],
maxRentDuration: number[],
dailyRentPrice: number[],
paymentToken: PaymentToken[],
willAutoRenew: boolean[],
options?: any
): Promise<ContractTransaction> => {
const args = prepareBatch({
amount: amount.map(Number),
dailyRentPrice: dailyRentPrice.map(x => packPrice(Number(x).toString())),
maxRentDuration: maxRentDuration.map(Number),
nftAddress: nftAddress.map(String),
nftStandard,
paymentToken,
tokenID: tokenID.map(String),
willAutoRenew: willAutoRenew.map(x => (x ? 1 : 0)),
});
return await contract.lend(
args.nftStandard,
args.nftAddress,
args.tokenID,
args.amount,
args.maxRentDuration,
args.dailyRentPrice,
args.paymentToken,
args.willAutoRenew,
options ?? []
);
};
export const createSylvesterV0RentThunk = (
contract: Contract
): SylvesterV0RentFunction => async (
nftStandard: NFTStandard[],
nftAddress: string[],
tokenID: string[],
lendingID: string[],
rentDuration: number[],
rentAmount: string[],
options?: any
): Promise<ContractTransaction> => {
const args = prepareBatch({
lendingID: lendingID.map(String),
nftAddress: nftAddress.map(String),
nftStandard: nftStandard.map(Number),
rentAmount: rentAmount.map(String),
rentDuration: rentDuration.map(Number),
tokenID: tokenID.map(String),
});
return await contract.rent(
args.nftStandard,
args.nftAddress,
args.tokenID,
args.lendingID,
args.rentDuration,
args.rentAmount,
options ?? []
);
};
export const createSylvesterV0ReturnItThunk = (
contract: Contract
): SylvesterV0ReturnItFunction => async (
nftStandard: NFTStandard[],
nftAddress: string[],
tokenID: string[],
lendingID: string[],
rentingID: string[],
options?: any
): Promise<ContractTransaction> => {
const args = prepareBatch({
lendingID: lendingID.map(String),
nftAddress: nftAddress.map(String),
nftStandard: nftStandard.map(Number),
rentingID: rentingID.map(String),
tokenID: tokenID.map(String),
});
return await contract.stopRent(
args.nftStandard,
args.nftAddress,
args.tokenID,
args.lendingID,
args.rentingID,
options ?? []
);
};
export const createSylvesterV0ClaimCollateralThunk = (
contract: Contract
): SylvesterV0ClaimCollateralFunction => async (
nftStandard: NFTStandard[],
nftAddress: string[],
tokenID: string[],
lendingID: string[],
rentingID: string[],
options?: any
): Promise<ContractTransaction> => {
const args = prepareBatch({
lendingID: lendingID.map(String),
nftAddress: nftAddress.map(String),
nftStandard: nftStandard.map(Number),
rentingID: rentingID.map(String),
tokenID: tokenID.map(String),
});
return await contract.claimRent(
args.nftStandard,
args.nftAddress,
args.tokenID,
args.lendingID,
args.rentingID,
options ?? []
);
};
export const createSylvesterV0StopLendingThunk = (
contract: Contract
): SylvesterV0StopLendingFunction => async (
nftStandard: NFTStandard[],
nftAddress: string[],
tokenID: string[],
lendingID: string[],
options?: any
): Promise<ContractTransaction> => {
const args = prepareBatch({
lendingID: lendingID.map(String),
nftAddress: nftAddress.map(String),
nftStandard: nftStandard.map(Number),
tokenID: tokenID.map(String),
});
return await contract.stopLend(
args.nftStandard,
args.nftAddress,
args.tokenID,
args.lendingID,
options ?? []
);
};