Introduction to Kairos Loan 🦅

Kairos Loan is a lending protocol using NFTs as collateral. Borrow instantly with the best market terms.

This book is a technical documentation of the protocol. It is meant for developers who want to integrate the protocol in their application or for people who want to understand more deeply how the protocol works.

If you would like to get started with Kairos Loan, you can visit our user guide or our website.

Explain like I'm 5

The Kairos Loan smart contract is used by NFT holders to securely borrow fungible tokens from lenders. The kairos smart contract keeps the NFTs of the borrowers in escrow during the time of their loans. To get its NFT back, a borrower has to repay its loan with interests. If it don't repay on time, the kairos smart contract sells the NFT and the proceeds of the sale go to the lender(s) of the loan. All loan terms are fixed and known at borrow time. The lender is the one providing loan offer(s) ahead of time for the borrower(s) to use. Lenders specify how much they are willing to lend, for how long and for which collatral (among other things) in their offers, as a way to control the risk they are taking by lending. Kairos does not guarantee that the collateral is not sold at a loss, loss that is assumed by the lender(s) of the corresponding loan. It is the responsibility of lenders to set their terms in a way that mitigate that risk. The kairos smart contract is meant to be used with an off-chain book of loan offers where the lenders are competing to provide the best terms for borrowers to pick.

Continue reading for a detailed overview of kairos mechanisms.

Actors

  • Lenders (also referred as suppliers) sign loan offers and provide kairos access to their ERC20 tokens.
  • Borrowers are NFT holders that let kairos take one or multiple of their NFTs in escrow as collateral to borrow ERC20 tokens from lenders.
  • Buyers (also referred as liquidators) buy NFTs from the kairos contract as part of the liquidation of loans that weren't repaid on time.
  • The administrator (also referred as the governance)can upgrade the kairos smart contract and access restricted methods controlling some protoco parameters.

Specifications

Throughout this book, facts guaranteed by the kairos protocol are in bold italic. Auditors are encouraged to check them.

Diamond

The Kairos Loan smart-contract is a diamond. This has been chosen to make the kairos an iteratively evolving protocol. The diamond standard allows it to be upgraded and support an arbitrary number of future features.

A multisig will first handle those upgrades, before handing this power to a more decentralized governance, that will hopefully in turn choose to disable the diamond upgradability later.

The kairos smart-contract is meant to secure trustless loan deals between borrowers and suppliers. The off-chain loan offer book is meant to make the market more fluid, allowing lenders to post and update a large number of loan offers without the burden and cost of on-chain interactions. It takes the form of an API managed by the dev team. The book should be decentralized in the future. The contract guarantees trustless execution and management of the loans regardless of the offer book liveness or corruption. The offchain book being inaccessible may only prevent new loans from being issued (due to offer infos being inaccessible). An existing loan can be repaid/liquidated and its full infos accessed fully on chain.

There is no fee in the protocol at the moment, but please note that it will be the case in the future, and it may affect how the amounts repaid/claimable are calculated in the future.

Supplying

Lending is not done by calling the kairos contract directly. To lend, one must follow those conditions:

  • have erc20 in its wallet
  • approve those erc20 in sufficient amount to the kairos contract
  • sign erc712-compliant loan offers

Kairos can't lend assets from a supplier wallet without the explicit agreement of the lender in the form of a loan offer signed by the private key of its wallet.

The signed loan offers follow the form of the Offer struct found in code. The contract exposes an offerDigest method taking an offer struct as argument and returning a bytes32 hash that can ecdsa signed as-is to produce a valid signed loan offer. There is no limit to the usage of a loan offer, the same offer can be used multiple times, by the same borrowers or different ones, and the sum of the funds transferred as a result of emitting a single offer can be arbitrarly large.

All loan offers accept a single ERC721 nft as collateral (cf the collateral field). All loan offers give access to borrow a single erc20 (assetToLend field). The Offer struct gives the lender multiple ways to manage its risk:

  • the amount the lender is willing to lend (loanToValue)
  • the maximum time the borrower can keep the loan without having to repay or without the collateral going to liquidation (duration)
  • the date after which the loan offer can't be used anymore (expirationDate), provided as way to manage the changing market conditions. We expect this date to be usually placed a few hours after the date of signing.
  • the immutable interest rate, in the form of the kairos interest rate tranche identifier (tranche). The lender can only chose this one from the limited set of valid tranches provided by the protocol (cf the admin doc for more details).

Once loans have been issued using a loan offer, an NFT is minted and sent to the lender that signed the offer. This NFT represents the rights a lender has on a particular loan. As multiple offers can be used by a borrower to borrow from a single NFT, a single loan can have multiple NFTs that we call supply position or provision representing claims on the interests that will be paid or on the sale of the nft used as collateral in case of liquidation. Supply position NFTs are publicly transferrable (I.e tradable) during the lifetime of the corresponding loan, including after the repay date or liquidation. A supply position NFT can be used once by its owner to claim the corresponding interests or share of liquidation, and doing so results in the NFT being burned.

The lender is taking a risk by providing offers as borrowers may not repay their loan and the NFTs used as collateral may be liquidated, I.e sold in auction at a price under the loan to value provided by the lender, I.e the amount it was willing to lend for a certain NFT used as collateral. Considering that the liquidation mechanism of kairos (which is a dutch auction) is able to sell all NFTs liquidated at their fair market price, Kairos guarantees that the lender is at a loss only if it made a mistake by signing an offer with a loanToValue field higher for the corresponding NFT than the fair market price of this NFT at any point in time during the loan lifetime (including auction time). (We don't consider gas costs here).

While Kairos is permissionless on which erc721s can be used as collateral and which the erc20s can be lent, it is recommended to lenders not to supply erc20 which have uninitialized anti-ddos parameters. More on this subject in the borrowing, repaying and claiming pages.

In case of rapidly changing market conditions, we see the ability of the lender to revoke its token approvals to kairos as a mean of last resort to delete all its loan offers. The approach that led to this design is to consider that most lenders on the kairos protocol will use automated tools to provide offers on a wide range of NFTs, tokens and timeframes, competing with other lenders to offer the best terms without paying gas fees to do so.

Offers

In Kairos, an offer is a proposal made by a lender to lend a certain amount of ERC20 tokens for a specific NFT as collateral.

Add offers / Create offers

Here's a brief explanation of the fields/options when going through this process.

  • Collection Address: The Ethereum address of the NFT collection for which the offer is being made. The lender inputs the address in this field.

  • Collection Name: The name of the NFT collection for which the offer is being made. This is retrieved from the collection metadata via the Kairos API. The lender does not need to input this field.

  • Offer Method: This option/choice is provided to specify the method of the offer. The lender can choose to make an offer for the entire collection or for a specific trait. If the lender chooses to make an offer for a specific trait, they must then choose the trait type and trait value from the dropdown menus. Afterwards, the lender will be prompted to create a list which will be a list of tokens (by id) that will be eligible for the offer.

  • Trait Type and Trait Value: These fields are used when the lender wants to make an offer for a specific trait of the NFTs in the collection. The lender selects the trait type and its value from the dropdown menus. These fields are optional and are used when the lender wants to make an offer for NFTs with a specific trait.

  • Asset to Lend: This field is used to specify the ERC20 token that the lender wants to lend. The lender selects the token from a dropdown menu. The dropdown menu is populated with the list of ERC20 tokens that the lender has in their wallet.

  • Amount to Lend: This field is used to specify the amount of the selected ERC20 token that the lender wants to lend. The lender inputs the amount in this field. The amount should be less than or equal to the balance of the selected ERC20 token in the lender's wallet.

  • Duration: This field is used to specify the duration of the loan offer. The lender inputs the duration in this field. The duration is specified in days.

  • Offer Expiration: This field is used to specify the number of days until the loan offer expires. The lender inputs the number of days in this field. If the loan offer is not accepted by a borrower within this period, the offer becomes invalid and the lender can create a new offer. This is different from the loan duration, which specifies the length of the loan once it has been accepted. The expiration period is about the offer's validity, not the loan's duration.

  • Token List: This button is used to generate a list of ERC20 tokens that are eligible for the offer based on the offer method and/or trait type and trait value. The lender clicks this button to generate the list.

Please note that the lender can revoke its token approvals to Kairos as a mean of last resort to delete all its loan offers. This is especially useful in case of rapidly changing market conditions.

For more information on how to supply ERC20 tokens and the risks involved, please refer to the Supplying page.

Borrowing

Borrowing using NFTs as collateral is done through an onchain method call. One can borrow from one or multiple NFTs at the same time. If only one NFT is sued as collateral, the borrower doesn't need to approve it to kairos before the borrow transaction through the use of the onERC721Received hook in the borrow facet. To borrow using multiple NFTs as collateral at once, kairos must be approved to transfer them before hand, or set as operator (cf the ERC721 spec) of all the erc721 contracts intended for use. To borrow using one or multiple NFTs as collateral, the borrow function can be used. Through a BorrowArg[] array, the borrower specifies for each collateral used

  • one or multiple loan offers (issued by lenders) it his willing to borrow from
  • the amount borrowed from each offer. During the borrow transaction, the protocol keeps track of how much of the value (represented as a share of the total) of the collateral has been used with each offer according to the amounts borrowable set by the lenders. The borrower has no obligation to borrow the full value of its collateral. Borrowing less results in less amount to repay/a claimable share of the proceeds of the collateral sale in case of liquidation.

As each offer used to borrow mints a supply position for the lender to use as claim for its share of interests or liquidation, there is a ddos risk if a borrower spams the use of offers with small amounts (I.e this spam would let the lender with many dust positions to claim onchain, which may be not financially viable due to gas costs), there is a minimum amount borrowable per used offer and a minimum amount to repay per offer.

During the borrow transaction, all NFTs used as collateral are transferred from the borrower wallet to the kairos contract that will hold them in escrow, and the borrowed funds are transferred directly from the lender(s) wallet(s) to the borrower wallet.

At the borrow transaction time, all terms of the loan(s) that will be issued are public. No loan term can be modified after issuance (excluding in the case of a contract upgrade). This is so borrowers can take informed decisions.

Loans

From the smart contract perspective (which is reflected on the way loans are displayed on the kairos webapp) each loan corresponds to one nft collateral. If a borrower used multiple collaterals in one transaction, it means kairos issued multiple loans, that can be repaid/liquidated independently. Once issued, only a contract upgrade can modify any loan term. All loan terms are stored onchain. A loan concerns only one ERC20 lent, and only one immutable interest rate. The interests to pay accrue linearly on a per-second basis. Loans are stored onchain in the form of Loan structs. They are caracterized by

  • an amount lent
  • a share of the value of the nft used as collateral. As borrowers can borrow less than the full value of their nft, the protocol keeps track of which share of the nft is considered being the collateral of the loan. If this share is less than one, the borrower is considered the owner of the remaining share. To avoid creating fungible shares of an NFT outside of the protocol, repaying a loan or buying an NFT in auction always results in the trsanfer of the full NFT. The notion of the borrower retaining ownership on a share of its NFT results in the borrower being able to repay interests on less than the full value of its NFT, and claiming an share of the sale proceeds of its NFT in case of liquidation.
  • a start date (date of the borrow transaction).
  • an end date. The borrower can repay its loan any time after issuance (including in the same transaction), and repay interests only for the time it kept the funds. After the end date, the nft used as collateral enters a dutch auction. Interests to pay continue accruing during the auction and the borrower can still repay its loan once the auction has started, while the nft is not sold. This design decision corresponds roughly to the grace period implemented in other protocols. The end date is found by determining the shortest loan offer duration used in loan and adding it to the start date.
  • the auction parameters. (cf auction)
  • the interest rate.
  • the borrower address.
  • The payment info of the loan, including
    • the amount paid as principal + interests or as sale of the collateral NFT (a non 0 value meaning the loan lifecycle is over, a 0 value not necessarly meaning the loan is active).
    • the minimum amount that must be repaid. This corresponds to the amount the borrower has to repay if repaying at the same second as borrowing, or after a short time. After some time, the amount effectively needing to be repaid becomes greater.
    • wether the loan has been liquidated. If this is the case, the loan lifecycle is over. The paid amount can still be 0 in the case of an NFT sold in dutch auction after the price hit 0.
    • wether the borrower has claimed his rights on the share of the NFT that is not considered being used as collateral. This is considered the case if the borrower repaid (as it got its whole NFT back) or if it claimed its share of the liquidation sale.
  • The corresponding supply positions.

Repaying

All loans can be repaid at any point after issuance and before liquidation sale. Anyone can repay any loan (there is no restriction on the msg.sender). During a repay transaction the due amount is transferred from the caller wallet to kairos, and the NFT used as collateral is transferred to the original borrower. A debt is not transferrable in kairos (while supply positions are), which is why the NFT used as collateral is returned to the address that initialized the borrow action (which is not necessarly the original NFT owner). This address is msg.sender if borrow was called, operator (as specified in the onERC721Received specification of the ERC721 standard) if the borrow action resulted from an ERC721 safe transfer. So kairos supports the ability to repay 'on behalf' of another account. Repaying can only be done once per loan, only the full amount due can be repaid, and a loan can't be repaid if liquidated. The amount due is determined by the time between the loan start date and the the date of repay, and is due in the same token as lent. The amount to repay is never less than what was lent. The extra amount to repay on top of the principal of the loan accrues linearly according to the interest rate set at the loan issuance. This rate does not compounds. If the time between borrow and repayment is short, a minimal repayment amount per offer used in the loan applies. This is done as an anti-DDOS measure and the minimal amount due per offer for any given erc20 lent is set by governance.

Buying in auction

If a loan has not been repaid before its end date, the NFT used as collateral becomes purchasable in auction. This liquidation is a dutch auction, meaning a sale where the price starts high and decreases linearly with time, and the first to buy the NFT at its current price gets to keep it. The design goal of the auction is to sell the NFT at the fair market price to distribute the proceeds to the lenders to make up for the principal + interests that haven't been repaid. The auction is governed by two parameters, set at borrow time:

  • the duration, which is the time it takes for the price to reach 0 (after which it stays at 0 and anyone can claim the NFT for free).

  • and the priceFactor. Kairos will estimate the value of the NFT from the mean of the offers used regarding the share of the NFT value that has been borrowed from them.

    amount_lent * (1 / shareLent) = estimatedPrice
    

    It will multiply this estimated price by the price factor to obtain the starting price of the auction.

Kairos guarantees that the starting price of an auction cannot be lower than the loan to value of any offer used to take the loan that originated it. The initial parameters of auctions are set to a 3 days duration and a 3x initial price factor. Note that the the claimable value after an auction by lenders and the borrower results in a net inferior price. Notably, if a lender represents 100% of the liquidity supplied for a loan and that 100% of the collateral value has been used, buying that NFT in auction then claiming its share of the sale results in a net 0 cost (not counting the amount lent) for that lender. Kairos will support this kind of chaining through external contracts in the future.

Claiming

Two actors can claim funds after a loan: lenders and borrowers (only in certain cases for the latter). Both actors can claim funds from multiple loans in one contract call.

As a lender

What can be claimed from a loan as a lender depends if that loan was repaid or liquidated. In every case, it is the ownership of the supply posiiton NFT that give access to the funds to its owner/approved spender and doing so results in that NFT being burned.

Claiming interests

The amount claimable from a repaid loan depends on the amount lent, the time elapsed between the borrow transaction and the loan repaiement, and the interest rate. The formula is

claimable = lent + interests
interests = time_elapsed * lent * share_of_lent_amount_accrued_per_second

If the loan were repaid shortly after being issued, the interests amount is a fixed value set by governance. As borrowers can generate an arbitrary number of supply positions that lenders will have to claim, this minimal amount is intended as a way to make sure lenders won't be at a loss just because of claiming gas fees.

Claiming ones share of a sale

Supply position issuance at borrow time can be seen by the lender as acquiring a share of the NFT collateral. This share is stored in the Provision struct. This share is acquired at the price the lender set itself by defining the loanToValue field of its loan offer. This is so in case of liquidation, the lender is at a gain or at a loss depending on how it was able to effectively predict a price that the collateral wouldn't be sold under. The lender is at a loss only if the NFT sold under that price. Since we consider the lender as owner of the share of the NFT it provided liquidity for, it can claim the same share of the proceeds of the sale. To prevent DDOS, a governance-set parameter prevents borrowers to borrow less than a certain amount per offer, so after liquidations lenders can expect that claiming their share of a sale is profitable regarding gas costs.

As a borrower

If a borrower didn't used the full value of its NFT to borrow from loan offers, it is considered owner of the remaining share. To prevent the NFT from being fractionalized it is nevertheless sold as a whole if the borrower doesn't repay its loan (no matter how small the share used as collateral). The borrower can claim the share of the sold NFT corresponding to the share it owns after the liquidation. This claim is not transferrable, so msg.sender of the claim method has to be the borrower of the loan.

Governance

Some contract methods are callable only by the account 'owning' the kairos contract. This account is the same that can upgrade the protocol through the diamond pattern. Without upgrading the protocol, there is no governance method that can affect the terms of loans already issued, including their eventual liquidation. Admin methods are only used to change the behavior of future loans. Those methods can affect:

  • the auction durations
  • the initial price of the auction
  • the interest rates lenders can use to emit loan offers (can only create new ones, can't delete any)
  • the minimum amount to repay per loan offer used (set per ERC20)
  • the borrow amount per offer lower bound, I.e the amount that must be strightly inferior to the amount borrowed from each loan offer (set per ERC20)

Supply Liquidity

For the first version, you have two ways to supply liquidity:

  • (Recommended) By using our provider based on our SDK
  • By using our SDK directly

Feel free to jump into the Discord if you're facing any issues or would provide feedback!

Provider

To provide offers using the provider included in our sdk, you'll need to:

  1. clone the provider example repository
  2. run yarn to install the dependencies
  3. create a .env file at the project's root with the private key of the provider
  4. update the instructions file used to define the offers you want to provide
  5. (if necessary) update the NFTs metadata file if you're providing NFTs for collections out of this list
  6. run the provider by running yarn provide

Creating the .env file

The .env file is used to define PROVIDER_PKEY: the private key used to sign the offers

Here is an example:

PROVIDER_PKEY=abc123...

Creating the instructions file

The instructions file is a JSON file containing all the information used to create the offers. It must contain the following fields:

FieldDescription
chainIdThe chain id of the network you want to provide offers on
availabilitySpanInMinutesThe period of time during which the offers will be available to borrowers
collectionConfigsA mapping of collection aliases of your choice to their address, floor price (in ETH) and trancheId. These aliases will be used in the offers instructions
assetConfigsA mapping of asset aliases of your choice to their address. These aliases will be used in the offers instructions
offersInstructionsThe list of offers instructions. See the offers instructions section for more details

Here is an example:

{
  "chainId": 1,
  "availabilitySpanInMinutes": 10080,
  "collectionConfigs": {
    "Azuki": {
      "address": "0xED5AF388653567Af2F388E6224dC7C4b3241C544",
      "floorPrice": 0.1,
      "trancheId": 1
    },
    "BAYC": {
      "address": "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D",
      "floorPrice": 50,
      "trancheId": 0
    }
  },
  "assetConfigs": {
    "WETH": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319",
    "DAI": "0x6B175474E89094C44Da98b954EedeAC495271d0F"
  },
  "offersInstructions": [
    {
      "offerType": "amountForTrait",
      "contract": "Azuki",
      "durationInDays": 18,
      "assetToLend": "WETH",
      "traitType": "Type",
      "traitValue": "Red",
      "amountToLend": 1
    },
    {
      "offerType": "floorMultiplierForTrait",
      "contract": "Azuki",
      "durationInDays": 30,
      "assetToLend": "WETH",
      "traitType": "Hair",
      "traitValue": "Pink Flowy",
      "floorMultiplier": 1.3
    },
    {
      "durationInDays": 30,
      "assetToLend": "DAI",
      "offerType": "collection",
      "contract": "BAYC",
      "amountToLend": 3
    },
  ]
}

Offers instructions

The offers instructions define the offers you want to provide. Each offer instruction can create multiple offers, up to one per NFT in the collection. Each offer instruction must contain at least the following fields:

  • offerType: the type of offer you want to provide. See the offer types section for more details
  • contract: the alias of the collection you want to provide offers for
  • durationInDays: the duration of the offer in days
  • assetToLend: the alias of the asset you want to lend

Other fields are required depending on the offer type:

  • amountForTrait:
FieldDescriptionExample value
traitTypeThe trait type you want to provide offers for"Background"
traitValueThe trait value you want to provide offers for"Red"
amountToLend(= loan to value) The amount in ethers you want to lend per offer1
  • floorMultiplierForTrait:
FieldDescriptionExample value
traitTypeThe trait type you want to provide offers for"Background"
traitValueThe trait value you want to provide offers for"Red"
floorMultiplierThe floor multiplier you want to apply to the floor price of the collection1.3
  • collection:
FieldDescriptionExample value
amountToLend(= loan to value) The amount in ethers you want to lend per offer1

How to choose trancheId

The trancheId represents the interest rate identifier applied to your offers. A few tranches are defined in the protocol, each one with a different interest rate. For example, trancheId 0 corresponds to a 40% APR, trancheId 1 to a 20% APR.

However for now, you can't really choose, the trancheId is imposed by our API for each collection. You still need to provide it in the instructions file to ensure you're aware of it.

To check the trancheId of a let's say Bored Ape Yacht Club collection and Azuki collections, you can use our API by running the following command:

curl -X GET "https://api.kairos.loan/api/tranche_of?chainId=1&collections=0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D&collections=0xED5AF388653567Af2F388E6224dC7C4b3241C544"

Providing on Goërli

To provide offers on Goërli, you need to do the same steps as for mainnet, in addition to replacing the environment param of provide from Environment.Mainnet to Environment.Goerli in the src/index.ts file.

Updating metadata

The provider needs to know the collection metadata to be able to create the offers. This includes collecting all the traits, and which NFTs have which traits. To do so, we use the Alchemy API.

The example repository already contains a traitsList.json file containing the metadata of several collections. If you want to provide offers for these collections, you don't need to update this file.

If you want to provide offers for collections that are not in this list, you'll need to update the traitsList.json file. To do so, you'll need to:

  1. add ALCHEMY_KEY to your .env file
  2. edit src/populateTraitsList.json and replace the addresses in the array by the addresses of the collections you want to provide offers for (they must all be on the same network)
  3. check that the correct network is selected right after the array of addresses
  4. run yarn populateTraitsList to populate the traitsList.json file

Pre-populated collection metadata

The traitsList.json file already contains the metadata of several collections:

CollectionAddressNetwork
Azuki0xed5af388653567af2f388e6224dc7c4b3241c544Ethereum Mainnet
BEANZ Official0x306b1ea3ecdf94ab739f1910bbda052ed4a9f949Ethereum Mainnet
Bored Ape Kennel Club0xba30e5f9bb24caa003e9f2f0497ad287fdf95623Ethereum Mainnet
Bored Ape Yacht Club0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13dEthereum Mainnet
Creepz by OVERLORD0x5946aeaab44e65eb370ffaa6a7ef2218cff9b47dEthereum Mainnet
CryptoDickbutts0x42069abfe407c60cf4ae4112bedead391dba1cdbEthereum Mainnet
DeGods0x8821bee2ba0df28761afff119d66390d594cd280Ethereum Mainnet
Doodles0x8a90cab2b38dba80c64b7734e58ee1db38b8992eEthereum Mainnet
HV-MTL0x4b15a9c28034dc83db40cd810001427d3bd7163dEthereum Mainnet
Kairos Eagle0xb48e018d53b24c3a36f5d5e7725b70667db83b3dEthereum Mainnet
KILLABEARS0xc99c679c50033bbc5321eb88752e89a93e9e83c5Ethereum Mainnet
Meebits0x7bd29408f11d2bfc23c34f18275bbf23bb716bc7Ethereum Mainnet
Milady Maker0x5af0d9827e0c53e4799bb226655a1de152a425a5Ethereum Mainnet
Mutant Ape Yacht Club0x60e4d786628fea6478f785a6d7e704777c86a7c6Ethereum Mainnet
Otherside Koda0xe012baf811cf9c05c408e879c399960d1f305903Ethereum Mainnet
Prologue by Spice0x6110d61dd1133b0f845f1025d6678cd22a11a2feEthereum Mainnet
Pudgy Penguins0xbd3531da5cf5857e7cfaa92426877b022e612cf8Ethereum Mainnet
rektguy0xb852c6b5892256c264cc2c888ea462189154d8d7Ethereum Mainnet
The Captainz0x769272677fab02575e84945f03eca517acc544ccEthereum Mainnet
The Potatoz0x39ee2c7b3cb80254225884ca001f57118c8f21b6Ethereum Mainnet
Valhalla0x231d3559aa848bf10366fb9868590f01d34bf240Ethereum Mainnet
VeeFriends0xa3aee8bce55beea1951ef834b99f3ac60d1abeebEthereum Mainnet
World of Women0xe785e82358879f061bc3dcac6f0444462d4b5330Ethereum Mainnet
YOU THE REAL MVP0x6efc003d3f3658383f06185503340c2cf27a57b6Ethereum Mainnet

Using our SDK

Our SDK is a TypeScript nodejs package that allows you to provide offers to the order book. It simplifies interactions with our API which manages one order book, but you could change the code to interact with other order books

Prerequisites

Install our typescript package in your application by running npm i @kairos-loan/kairos-js

Methods reference

Once the SDK is installed, you can use all the methods documented below


provideOffers({ offers, chainId, wallet }: ProvideOffersParams)Promise<void>

provideOffers() is the main method of the SDK. It is used to provide offers to the order book

It takes 3 parameters:

  • offers: Offer[], an array of offers to post
  • wallet: ethers.Wallet, a wallet to sign the transaction with
  • chainId: SupportedChainIds, an enum of supported chain ids

Custom types used in the SDK

  • NFT is a custom type composed of:
FieldTypeDescription
implem0x${string}the implementation of the NFT
idethers.BigNumberthe id of the NFT
  • Offer is a custom type composed of:
FieldTypeDescription
loanToValueethers.BigNumberthe loan-to-value ratio of the offer
durationethers.BigNumberthe duration of the offer
availabilitySpanethers.BigNumberthe availability span of the offer
collateralNFTthe collateral of the offer

Example

Script example to provide fake offer

import moment from 'moment';
import { WalletClient, createWalletClient, http, parseUnits } from 'viem';
import { PrivateKeyAccount, privateKeyToAccount } from 'viem/accounts';
import { foundry } from 'viem/chains';

import * as kairosSDK from '@kairos-loan/kairos-js';
import { connectToGraphQLSdk, getGraphQLSdk } from '@kairos-loan/kairos-js';
import { AddressString, HexaString } from '@kairos-loan/shared';

/**
 * Main script function
 */
export async function provideFakeOffersScript(
  nftAddresses: Array<`0x${string}`>,
  inBetaTime: boolean,
  providerPrivateKey: string,
  env: kairosSDK.Environement,
): Promise<void> {
  const hexPrivateKey: kairosSDK.HexaType = (
    providerPrivateKey.startsWith('0x') ? providerPrivateKey : `0x${providerPrivateKey}`
  ) as kairosSDK.HexaType;

  const localAccount: PrivateKeyAccount = privateKeyToAccount(hexPrivateKey);
  const wallet: WalletClient = createWalletClient({
    account: localAccount,
    chain: foundry,
    transport: http(process.env.LOCAL_RPC_URL),
  });
  const offers: kairosSDK.CreateOfferByCollection[] = [];
  const wethAddress: AddressString = process.env.WETH_ADDR as AddressString;
  const usdcAddress: AddressString = process.env.USDC_ADDR as AddressString;

  // Connect to graphQL API
  await connectToGraphQLSdk(kairosSDK.Environement.LOCALHOST, wallet);

  // Genereate collection token list
  for (const nftAddress of nftAddresses) {
    await kairosSDK.forceUpdateCollectionTokenList(env, kairosSDK.ChainName.LOCALHOST, nftAddress, false);
  }

  // Generate offers
  for (const nftAddress of nftAddresses) {
    const trancheId: bigint = nftAddress === nftAddresses[0] ? BigInt(1) : BigInt(0);

    offers.push(
      getRandomOffer(nftAddress, nftAddresses.indexOf(nftAddress), inBetaTime, trancheId, wethAddress, 18),
      getRandomOffer(nftAddress, nftAddresses.indexOf(nftAddress), inBetaTime, trancheId, usdcAddress, 6),
    );
  }

  await kairosSDK.provideOffers(offers, wallet, env);
}

/**
 * Get base price for each collection
 */
function getRandomOffer(
  nftAddress: `0x${string}`,
  priceRange: number,
  inBetaTime: boolean,
  trancheId: bigint,
  assetToLendAddress: AddressString,
  assetDecimals: number,
): kairosSDK.CreateOfferByCollection {
  const bigFactor: number = 1_000_000;
  const randFactor1: number = Math.floor(Math.random() * bigFactor);
  const randFactor2: number = Math.floor(Math.random() * bigFactor);
  const availabilitySpanInMs: number = 60 * 60 * 24 * 7 * 2 * 1000; // 2 weeks in ms

  // arbitrary price ranges for collections
  let basePrice: bigint;

  switch (priceRange) {
    case 0: {
      basePrice = parseUnits('1', assetDecimals);
      break;
    }
    case 1: {
      basePrice = parseUnits('8', assetDecimals);
      break;
    }
    default: {
      basePrice = parseUnits('3', assetDecimals);
    }
  }

  const durationInSeconds: number = Math.floor(
    inBetaTime
      ? (60 * 90 * randFactor2) / bigFactor // In minutes
      : (60 * 60 * 24 * 90 * randFactor2) / bigFactor,
  );

  return {
    type: kairosSDK.TokenListType.COLLECTION,
    chainName: kairosSDK.ChainName.LOCALHOST,
    loanToValue: (
      (basePrice + parseUnits('1', assetDecimals) * BigInt(randFactor1)) /
      BigInt(bigFactor)
    ).toString() as HexaString,
    expirationDate: moment(Date.now() + availabilitySpanInMs).toISOString(),
    duration: durationInSeconds,
    collectionAddress: nftAddress,
    trancheId: trancheId.toString() as HexaString,
    assetToLendAddress,
  };
}


External links

Terms of Use

Terms of Use

Version dated January 16th 2023

1. GENERAL INFORMATION

1.1 THE COMPANY - BC LABS

These Tems of Use (hereinafter referred to as "TOU" or the “Agreement”) are concluded between the company BC Labs, having its registered office 2, allée de la sale des fêtes, 18260 Sury-es-Bois registered with the Trade and Companies Register of Bourges, under the number 918 691 049 hereinafter referred to as "BC Labs", “Us”, “We”, “Our”), and, secondly, a user (hereinafter referred to as the "User", “You”, “Yours”), who visits or uses BC Labs’s website accessible at the URL https://www.kairos.loan/ (hereinafter referred to as the "Site").

BC Labs and the User are hereafter individually referred to as a "Party" and referred to jointly as the "Parties".

BC Labs is a software development company which has developed a decentralized lending protocol unlocking the value of the User’s NFTs by using them as collateral (hereinafter referred to as "Protocol" or "Application").

The Company owns and operates the Site which acts as a front-end only to the Protocol, giving the users an access point to the Protocol (hereinafter referred to as "Access").

THE APPLICATION SOLE FUNCTIONS AS A VISUAL USER INTERFACE. IN NO CIRCUMSTANCES SHALL THE COMPANY, THE SMART CONTRACTS, THE SITE OR THE APPLICATION BE CONSTRUED AS A LENDER, DIGITAL ASSET EXCHANGE, BROKER, DEALER, FUND MANAGER, FINANCIAL INSTITUTION, EXCHANGE, CUSTODIAN, ROBO-ADVISOR, INTERMEDIARY, OR CREDITOR.

THE SITE DOES FACILITATE OR ARRANGE TRANSACTIONS BETWEEN BORROWERS AND LIQUIDY PROVIDERS, WHICH TRANSACTIONS OCCUR ON THE RELEVANT BLOCKCHAIN NETWORK.

BC LABS IS NOT A COUNTERPARTY TO ANY TRANSACTION FACILITATED BY THE SMART CONTRACTS, THE SITE OR THE APPLICATION OR FOR ANY USER OF THE SITE. NEITHER THE SMART CONTRACTS, THE SITE OR THE APPLICATION PROVIDES FINANCIAL ADVISORY, LEGAL, REGULATORY, OR TAX SERVICES DIRECTLY, INDIRECTLY, IMPLICITLY, OR IN ANY OTHER MANNER, AND YOU SHOULD NOT CONSIDER ANY CONTENT CONTAINED IN THESE TERMS OR OTHERWISE POSTED ON THE SITE TO BE A SUBSTITUTE FOR PROFESSIONAL FINANCIAL, LEGAL, REGULATORY, TAX OR OTHER ADVICE.

1.2 BINDING AGREEMENT

BY ACCESSING OR USING BC LABS’S FRONT-END, WHICH INCLUDE OUR WEBSITE (AND ANY RESPECTIVE SUBDOMAINS) (COLLECTIVELY HEREINAFTER REFERRED TO AS THE “SERVICES”), YOU ARE ENTERING INTO A BINDING AGREEMENT WITH US THAT INCLUDES THESE TOU, BC LABS’S PRIVACY POLICY (IF APPLICABLE) AND OTHER POLICIES REFERENCED HEREIN (COLLECTIVELY HEREINAFTER REFERRED TO AS THE “AGREEMENT”).

To the extent that there is a conflict between these TOU and any applicable additional documents, these TOU will apply unless expressly stated otherwise. If you don't agree with these TOU, you may not use the Services and should not visit the Site or otherwise engage with the Services.

1.3 USE OF THE SERVICES To use the Services, you must legally be able to enter into the Agreement. By using the Services, you represent and warrant that you meet the eligibility requirement. If you do not meet the requirement, you must not access or use the Site or the Services.

1.4 UPDATE OF THE SERVICES AND THE TOU

We may update the Services, the Agreement, and any part of the TOU at any time, for any reason, at our sole discretion. Once any part of the Agreement is updated and in effect, you will be bound by the TOU if you continue to use the Services, including by accessing the Site. We may, at any time, and without liability to you, modify or discontinue all or part of the Services (including access to the Services via any third-party links). You may contact us with questions about your use of the Services at contact@kairos.loan. When you communicate with us electronically, you consent to receive communications from us electronically.

YOU SHOULD REVIEW THE TOU FROM TIME TO TIME TO ENSURE THAT YOU UNDERSTAND THE TOU AND CONDITIONS THAT APPLY TO YOU WHEN YOU ACCESS OR USE THE SITE.

1.5 WARNING

We strongly recommend that you do not use the Site or the Protocol if you are not an expert in cryptocurrencies and blockchain technology. By using or otherwise accessing the Site, you shall be deemed to acknowledge that you do so with full consent and full knowledge of these TOU having first read these TOU and your participation will be deemed to be your unequivocal and express agreement to be bound by these TOU.

2. THE SERVICES

2.1 A BLOCKCHAIN LENDING PROTOCOL

As part of the Site, BC Labs provides Access, and Access only, to a decentralized lending protocol unlocking the value of the User’s NFTs by using them as collateral.

Using the Protocol might requires that the User pay a fee to BC Labs to perform a transaction. The User must ensure that he/she has sufficient balance to complete any transaction on the Protocol before initiating such transaction.

Using the Protocol may require that the User must pay a fee on the blockchain and not to BC Labs, to perform a transaction (such as gas charges). The User acknowledges and agrees that BC Labs has no control over any transactions, the method of payment of any transactions, or any actual payments of transactions. The User must ensure that he/she has sufficient balance to complete any transaction on the Protocol before initiating such transaction.

All information provided in connection with your access and use of the Site and the Services is for informational purposes only. You should not take, or refrain from taking, any action based on any information contained on the Site or any other information that we make available at any time, including blog posts, data, articles, links to third-party content, discord content, news feeds, tutorials, tweets, and videos.

Before you make any financial, legal, technical, or other decisions involving the Services, you should seek independent professional advice from a licensed and qualified individual in the area for which such advice would be appropriate. The Services provide, or third parties may provide, links to other sites, applications, or resources.

You acknowledge and agree that we are not responsible for the availability of such external sites, applications or resources, and do not endorse and are not responsible or liable for any content, advertising, products, or other materials on or available from such sites or resources. You further acknowledge and agree that we will not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods, or services available on or through any such site or resource. Because the Site provides information about the Protocol, these TOU also provide some information about the use of the Protocol. This information is not intended to be comprehensive or address all aspects of the Protocol. There is additional documentation on the Site about the functioning of the Protocol or its ecosystem or community.

2.2 ABOUT THE PROTOCOL ECOSYSTEM

IT IS IMPORTANT TO UNDERSTAND THAT NEITHER WE NOR ANY AFFILIATED ENTITY IS A PARTY TO ANY TRANSACTION ON THE BLOCKCHAIN NETWORKS UNDERLYING THE PROTOCOL; WE DO NOT HAVE POSSESSION, CUSTODY OR CONTROL OVER ANY CRYPTO ASSETS APPEARING ON THE SERVICES; AND WE DO NOT HAVE POSSESSION, CUSTODY, OR CONTROL OVER ANY USER’S FUNDS.

Further, we do not store, send, or receive any crypto assets. You understand that when you interact with any Protocol’s smart contracts, you retain control over your crypto assets at all times. The private key associated with the wallet address from which you transfer crypto assets or the private key associated is the only private key that can control the crypto assets you transfer into the smart contracts.

You alone are responsible for securing your private keys. We do not have access to your private keys. Due to the non-custodial and decentralized nature of the technology, we are not intermediaries, agents, advisors, or custodians, and we do not have a fiduciary relationship or obligation to you regarding any other decisions or activities that you affect when using our Services. You acknowledge that we, for the avoidance of doubt, do not have any information regarding any users, users’ identities, or services beyond what is available or obtainable publicly via the blockchain. We are not responsible for any activities you engage in when using Services, and you should understand the risks associated with crypto assets, blockchain technology generally, and our Services.

THE PROTOCOL MAY BE DEPLOYED ON MULTIPLE BLOCKCHAIN-BASED NETWORKS, AND WE ARE NOT RESPONSIBLE FOR THE OPERATION OF SUCH NETWORKS.

The software underlying blockchain networks on which the Protocol is deployed, including, for example, the Ethereum blockchain, is open source, which means that anyone can use, utilize, and build on top of it. By using the Services, you acknowledge and agree that:
(i) we are not responsible for the operation of the blockchain-based software and networks underlying the Protocol;
(ii) there exists no guarantee of the functionality, security, or availability of that software and networks; and
(iii) the underlying blockchain-based networks are subject to sudden changes in operating rules, such as those commonly referred to as “forks”.

Transactions on the blockchain are not anonymous.

A widespread belief is that transactions involving blockchains are anonymous. In fact, a central feature of blockchains and thus, blockchain-based transactions, are that they are transparent. Your public key and your wallet address, which you need to buy or sell items on the blockchain, are visible to anyone. To the extent your public key or wallet address can be linked back to you, it would be possible for someone to determine your identity and the crypto assets you own. There may be associated blockchain fees.

All transactions using blockchains require the payment of gas fees, which are essentially transaction fees paid on every transaction that occurs on the selected blockchain network. Please note that gas fees are non-refundable. We do not provide any services to Users or deliver, hold, and/or receive payment for crypto assets. We do not receive any fees for any transactions, the Services, or the Site.

BC Labs ecosystem and community contributors are independent.

All community contributors to the ecosystem around the Protocol are independent of us, and we will not have and do not assume any liability or responsibility for their actions or omissions.

2. ASSUMPTION OF RISK

You assume the risks of engaging in transactions that rely on smart contracts and other experimental technology.

Transactions on the Protocol rely on smart contracts stored on various blockchains, cryptographic tokens generated by the smart contracts, and other nascent software, applications and systems that interact with blockchain-based networks. These technologies are experimental, speculative, inherently risky, and subject to change. Among other risks, bugs, malfunctions, cyberattacks, or changes to the applicable blockchain (e.g., forks) could disrupt these technologies and even result in a total loss of crypto assets, their market value, or digital funds. You are solely responsible for the safekeeping of the private key associated with the blockchain address used to interact with the Protocol. We assume no liability or responsibility for any such risks. If you are not comfortable assuming these risks, you should not access or engage in transactions using blockchain-based technology.

One of the other defining features of blockchain technology is that its entries are immutable, which means, as a technical matter, they generally cannot be deleted or modified by anyone. This includes smart contracts and crypto assets generated and programmed by smart contracts. THUS, TRANSACTIONS RECORDED ON THE BLOCKCHAIN, INCLUDING TRANSFERS OF CRYPTOASSETS AND DATA PROGRAMMED INTO THESE ASSETS (SUCH AS REVENUE AND INTEREST ALLOCATIONS), MUST BE TREATED AS PERMANENT AND CANNOT BE UNDONE BY US OR BY ANYONE. YOU MUST BE VERY CAREFUL WHEN YOU FINALIZE ANY TRANSACTION THAT WILL BE RECORDED ON THE BLOCKCHAIN.

We are not liable for any third-party services or links.

We are not responsible for the content or services of any third-party, including, without limitation, any network, or apps like Discord, or MetaMask, and we make no representations regarding the content or accuracy of any third-party services or materials. The use and access of any third-party products or services, including through the Services, is at your own risk.

You agree to the automated collection and disbursement of proceeds by smart contracts. You acknowledge and agree that all transactions accessed through the Services will be automatically processed using one or more blockchain-based smart contracts. By engaging in transactions using the Services, you acknowledge and consent to the automatic processing of all transactions in connection with using the Services. You further acknowledge and agree that the applicable smart contract will dictate how the funds of a transaction and ownership of crypto assets are distributed.

You acknowledge the risks of using the Services. You bear sole responsibility for evaluating the Services before using them, and all transactions accessed through the Services are irreversible, final, and without refunds. The Services may be disabled, disrupted or adversely impacted as a result of sophisticated cyber-attacks, surges in activity, computer viruses, and/or other operational or technical challenges, among other things. We disclaim any ongoing obligation to notify you of all of the potential risks of using and accessing our Services. You agree to accept these risks and agree that you will not seek to hold BC Labs responsible for any consequent losses.

You are solely responsible for the security of your wallet. You understand and agree that you are solely responsible for maintaining the security of your wallet. Any unauthorized access to your wallet by third parties could result in the loss or theft of any crypto asset, or any funds held in your account and any associated accounts. You understand and agree that we have no involvement in, and you will not hold us responsible for managing and maintaining the security of your wallet. You further understand and agree that we are not responsible, and you will not hold us accountable, for any unauthorized access to your wallet. It is your responsibility to monitor your wallet.

We reserve the right to restrict your access from engaging with the Services. You agree that we have the right to restrict your access to the Services via any technically available methods if we suspect, in our sole discretion, that (a) you are using the Services for money laundering or any illegal activity; (b) you have engaged in fraudulent activity; (c) you have acquired crypto assets using inappropriate methods, including the use of stolen funds to purchase such assets; (d) you are the target of any sanctions administered or enforced by the U.S. Department of the Treasury’s Office of Foreign Assets Control (“OFAC”), the United Nations Security Council, the European Union, Her Majesty’s Treasury, or any other legal or regulatory authority in any applicable jurisdiction; (e) either you, as an individual or an entity, or your wallet address is listed on the Specially Designated Nationals and Blocked Persons List (“SDN List”), Consolidated Sanctions List (“Non-SDN Lists), or any other sanctions lists administered by OFAC; (f) you are located, organized, or resident in a country or territory that is, or whose government is, the subject of sanctions, including but not limited to Côte d’Ivoire, Cuba, Belarus, Iran, Iraq, Liberia, North Korea, Sudan, and Syria; or (g) you have otherwise acted in violation of these TOU. If we have a reasonable suspicion that you are utilizing the Site for illegal purposes, we reserve the right to take whatever action we deem appropriate.

We do not guarantee the quality or accessibility of the Services.

As a condition to accessing or using the Services or the Site, you acknowledge, understand, and agree that from time to time, the Site and the Services may be inaccessible or inoperable for any reason, including, but not limited to equipment malfunctions, periodic maintenance procedures or repairs, causes beyond our control or that we could not reasonably foresee, disruptions and temporary or permanent unavailability of underlying blockchain infrastructure or unavailability of third-party service providers or external partners for any reason.

You acknowledge and agree that you will access and use the Services, including, without limitation, the Site at your own risk. You should not engage in blockchain-based transactions unless it is suitable given your circumstances and financial resources. By using the Services, you represent that you have been, are and will be solely responsible for conducting your own due diligence into the risks of a transaction and the underlying smart contracts and crypto assets.

4. TAXES

You are responsible for your taxes and duties. Users bear sole responsibility for paying any and all taxes, duties, and assessments now or hereafter claimed or imposed by any governmental authority associated with their use of the Services, and/or payable as the result of using and/or exploiting any crypto assets and interacting with smart contracts. Blockchain-based transactions are novel, and their tax treatment is uncertain.

5. ACCESS TO THE SERVICES

We grant you a license to use our Services. Contingent upon your ongoing compliance with the Agreement, we grant you a personal, worldwide, revocable, non-exclusive and non-assignable license to use the software provided to you as part of our Services. The only purpose of this license is to allow you to use and enjoy the Services solely as permitted by these TOU.

We own all rights in the Services. We own any and all right, title, and interest in and to the Services including, without limitation, any and all copyrights in and to any content, code, data, or other materials that you may access or use on or through the Services; however, the code for the Protocol and the front-end interface is open-sourced. Except as expressly set forth herein, your use of or access to the Services does not grant you any ownership or other rights therein.

We may use and share your feedback. Any comments, bug reports, ideas, or other feedback that you may provide about our Services, including suggestions about how we might improve our Services, are entirely voluntary. You agree that we are free to use or not use any feedback that we receive from you as we see fit, including copying and sharing such feedback with third parties, without any obligation to you.

6. PROHIBITED CONTENT

You may only use the Services if you comply with this Agreement (including, without limitation, these TOU), applicable third-party policies, and all applicable laws, rules, regulations and related guidance. The following conduct is prohibited:
• using the Services for, or to promote or facilitate, illegal activity (including, without limitation, money laundering, financing terrorism, tax evasion, buying or selling illegal drugs, contraband, counterfeit goods, or illegal weapons);
• exploiting the Services for any unauthorized commercial purpose; • uploading or transmitting viruses, worms, Trojan horses, time bombs, cancel bots, spiders, malware or any other type of malicious code that will or may be used in any way that will affect the functionality or operation of the Services;
• attempting to or actually copying or making unauthorized use of all or any portion of the Services, including by attempting to reverse compile, reformatting or framing, disassemble, reverse engineer any part of the Services;
• harvesting or otherwise collecting information from the Services for any unauthorized purpose;
• using the Services under false or fraudulent pretenses or otherwise being deceitful;
• interfering with other users’ access to or use of the Services;
• interfering with or circumventing of the security features of the Services or any third party’s systems, networks or resources used in the provision of Services;
• engaging in any attack, hack, denial-of-service attack, interference, or exploit of any smart contract in connection with use of the Service (and operations performed by a user that are technically permitted by a smart contract may nevertheless be a violation of our Agreement, including these TOU, and the law); or
• engaging in any anticompetitive behavior or other misconduct.

Violating our rules may result in our intervention. You agree and acknowledge that if you use the Services to engage in conduct prohibited by applicable law, permanently reserve the right to completely or partially restrict or revoke your access to the Services, either completely or for a period of time, at our sole discretion.

We reserve the right to amend, rectify, edit, or otherwise alter transaction data to remediate or mitigate any damage caused either to us or to any other person as a result of a user’s violation of this Agreement or applicable law. We reserve the right to investigate violations. We reserve the right to investigate and prosecute any suspected breaches of this Agreement, including the TOU. We may disclose any information as necessary to satisfy any law, regulation, legal process, or governmental request.

7. DISCLAIMERS AND LIMITATION OF LIABILITY

We make no representations or warranties. THE SERVICES ARE PROVIDED ON AN “AS IS” AND “AS AVAILABLE” BASIS. WE AND OUR PARENTS, SUBSIDIARIES, AFFILIATES, RELATED COMPANIES, OFFICERS, DIRECTORS, EMPLOYEES, AGENTS, REPRESENTATIVES, PARTNERS, AND LICENSORS (COLLECTIVELY, THE “BC LABS INDEMNIFIED PARTIES”) MAKE NO GUARANTEES OF ANY KIND IN CONNECTION WITH THE SERVICES. TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE LAW, THE BC LABS INDEMNIFIED PARTIES DISCLAIM ALL WARRANTIES AND CONDITIONS, WHETHER EXPRESS OR IMPLIED, OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT AND DISCLAIM ALL RESPONSIBILITY AND LIABILITY FOR:
• THE SERVICES BEING ACCURATE, COMPLETE, CURRENT, RELIABLE, UNINTERRUPTED, TIMELY, SECURE, OR ERROR-FREE. INFORMATION (INCLUDING, WITHOUT LIMITATION, THE VALUE OR OUTCOME OF ANY TRANSACTION) AVAILABLE THROUGH THE SERVICE IS PROVIDED FOR GENERAL INFORMATION ONLY AND SHOULD NOT BE RELIED UPON OR USED AS THE SOLE BASIS FOR MAKING DECISIONS. ANY RELIANCE ON THE SERVICES IS AT YOUR OWN RISK.
• INJURY OR DAMAGE RESULTING FROM THE SERVICES. FOR EXAMPLE, YOU EXPRESSLY ACKNOWLEDGE, UNDERSTAND, AND AGREE THAT THE SERVICES MAY CONTAIN AUDIO-VISUAL EFFECTS, STROBE LIGHTS OR OTHER MATERIALS THAT MAY AFFECT YOUR PHYSICAL SENSES AND/OR PHYSICAL CONDITION. FURTHER, YOU EXPRESSLY ACKNOWLEDGE THAT THE BC LABS INDEMNIFIED PARTIES ARE NOT RESPONSIBLE FOR LOSS OR DAMAGE CAUSED BY ANOTHER USER’S CONDUCT, UNAUTHORIZED ACTORS, OR ANY UNAUTHORIZED ACCESS TO OR USE OF THE SERVICES.
• VIRUSES, WORMS, TROJAN HORSES, TIME BOMBS, CANCEL BOTS, SPIDERS, MALWARE OR OTHER TYPE OF MALICIOUS CODE THAT MAY BE USED IN ANY WAY TO AFFECT THE FUNCTIONALITY OR OPERATION OF THE SERVICES.

Limitation of Liability. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL ANY BC LABS INDEMNIFIED PARTY BE LIABLE TO YOU FOR ANY LOSS, DAMAGE, OR INJURY OF ANY KIND INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, EXEMPLARY, CONSEQUENTIAL, OR PUNITIVE LOSSES OR DAMAGES, OR DAMAGES FOR SYSTEM FAILURE OR MALFUNCTION OR LOSS OF PROFITS, DATA, USE, BUSINESS OR GOOD-WILL OR OTHER INTANGIBLE LOSSES, ARISING OUT OF OR IN CONNECTION WITH: (A) THE SERVICES OR YOUR INABILITY TO USE OR ACCESS THE SERVICES; (B) MISUSE OF THE SERVICES (INCLUDING WITHOUT LIMITATION, UNAUTHORIZED ACCESS OF THE SERVICES); (C) ANY USER CONDUCT ON THE SERVICES; OR (D) TERMINATION, SUSPENSION OR RESTRICTION OF ACCESS TO ANY THE SERVICES.

IN ADDITION TO THE FOREGOING, NO BC LABS INDEMNIFIED PARTY SHALL BE LIABLE FOR ANY DAMAGES CAUSED IN WHOLE OR IN PART BY: (A) USER ERROR, SUCH AS FORGOTTEN PASSWORDS OR INCORRECTLY CONSTRUCTED SMART CONTRACTS OR OTHER TRANSACTIONS; (B) SERVER FAILURE OR DATA LOSS; (C) THE MALFUNCTION, UNEXPECTED FUNCTION OR UNINTENDED FUNCTION OF THE BLOCKCHAIN, ANY COMPUTER OR CRYPTOASSET NETWORK (INCLUDING ANY WALLET PROVIDER), INCLUDING WITHOUT LIMITATION LOSSES ASSOCIATED WITH NETWORK FORKS, REPLAY ATTACKS, DOUBLE-SPEND ATTACKS, SYBIL ATTACKS, 51% ATTACKS, GOVERNANCE DISPUTES, MINING DIFFICULTY, CHANGES IN CRYPTOGRAPHY OR CONSENSUS RULES, HACKING, OR CYBERSECURITY BREACHES; (D) ANY CHANGE IN VALUE OF ANY CRYPTOASSET; (E) ANY CHANGE IN LAW, REGULATION, OR POLICY; (VI) EVENTS OF FORCE MAJEURE; OR (F) ANY THIRD PARTY.

THIS LIMITATION OF LIABILITY IS INTENDED TO APPLY WITHOUT REGARD TO WHETHER OTHER PROVISIONS OF THESE TOU HAVE BEEN BREACHED OR HAVE PROVEN INEFFECTIVE. THE LIMITATIONS SET FORTH IN THIS SECTION SHALL APPLY REGARDLESS OF THE FORM OF ACTION, WHETHER THE ASSERTED LIABILITY OR DAMAGES ARE BASED ON CONTRACT, INDEMNIFICATION, TORT, STRICT LIABILITY, STATUTE, OR ANY OTHER LEGAL OR EQUITABLE THEORY, AND WHETHER OR NOT THE BC LABS INDEMNIFIED PARTIES HAVE BEEN INFORMED OF THE POSSIBILITY OF ANY SUCH DAMAGE.

IN NO EVENT WILL THE BC LABS INDEMNIFIED PARTIES’ CUMULATIVE LIABILITY TO YOU OR ANY OTHER USER, FROM ALL CAUSES OF ACTION AND ALL THEORIES OF LIABILITY EXCEED ONE THOUSAND U.S. DOLLARS (U.S. $1,000.00). UNDER NO CIRCUMSTANCES SHALL ANY BC LABS INDEMNIFIED PARTY BE REQUIRED TO DELIVER TO YOU ANY VIRTUAL CURRENCY AS DAMAGES, MAKE SPECIFIC PERFORMANCE, OR ANY OTHER REMEDY. IF YOU WOULD BASE YOUR CALCULATIONS OF DAMAGES IN ANY WAY ON THE VALUE OF VIRTUAL CURRENCY, YOU AND WE AGREE THAT THE CALCULATION SHALL BE BASED ON THE LOWEST VALUE OF THE VIRTUAL CURRENCY DURING THE PERIOD BETWEEN THE ACCRUAL OF THE CLAIM AND THE AWARD OF DAMAGES.

Some jurisdictions do not allow the exclusion or limitation of certain warranties and liabilities provided in this section; accordingly, some of the above limitations and disclaimers may not apply to you. To the extent applicable law does not permit BC Labs Indemnified Parties to disclaim certain warranties or limit certain liabilities, the extent of BC Labs Indemnified Parties’ liability and the scope of any such warranties will be as permitted under applicable law.

8. INDEMNIFICATION

You agree to indemnify, defend, and hold harmless BC Labs Indemnified Parties from any claim or demand, including reasonable attorneys’ fees, made by any third party due to or arising out of: (a) your breach or alleged breach of the Agreement (including, without limitation, these TOU); (b) anything you contribute to the Services; (c) your misuse of the Services, or any smart contract and/or script related thereto; (d) your violation of any laws, rules, regulations, codes, statutes, ordinances, or orders of any governmental or quasi-governmental authorities; (e) your violation of the rights of any third party, including any intellectual property right, publicity, confidentiality, property, or privacy right; (f) your use of a third-party product, service, and/or website; or (g) any misrepresentation made by you. We reserve the right to assume, at your expense, the exclusive defense and control of any matter subject to indemnification by you. You agree to cooperate with our defense of any claim. You will not in any event settle any claim without our prior written consent.

9. TERMINATION; CANCELLATION

This Agreement is effective unless and until terminated by either you or us. You may terminate your Agreement with us at any time by ceasing all access to the Site or the Services. If, in our sole judgment, you fail, or we suspect that you have failed, to comply with any term or provision of the Agreement (including without limitation any provision of these TOU), we reserve the right to terminate our Agreement with you and deny you access to the Services. We further reserve the right to restrict your access to the Site or to stop providing you with all or a part of the Services at any time and for no reason, including, without limitation, if we reasonably believe: (a) your use of the Services exposes us to risk or liability; (b) you are using the Services for unlawful purposes; or (c) it is not commercially viable to continue providing you with our Services. All of these are in addition to any other rights and remedies that may be available to us, whether in equity or at law, all of which we expressly reserve.

WE RESERVE THE RIGHT TO MODIFY THE SERVICES AT ANY TIME, BUT WE HAVE NO OBLIGATION TO UPDATE THE SERVICES. YOU AGREE THAT IT IS YOUR RESPONSIBILITY TO MONITOR CHANGES TO THE SERVICES THAT MAY AFFECT YOU. YOU AGREE THAT WE MAY REMOVE THE SERVICES AND/OR ANY CONTENT THEREON FOR INDEFINITE PERIODS OF TIME OR CANCEL THE SERVICES AT ANY TIME, WITHOUT NOTICE TO YOU.

10. SEVERABILITY

If any provision of the Agreement (including, without limitation, these TOU) is determined to be unlawful, void, or unenforceable, such provision shall nonetheless be enforceable to the fullest extent permitted by applicable law, and the unenforceable portion shall be deemed to be severed from the Agreement. Such determination shall not affect the validity and enforceability of any other remaining provisions.

11. ASSIGNMENT

The User formally agrees, in advance, that BC Labs can assign or transfer to a third party the TOU or all or part of its rights and obligations under the TOU, without notice or prior information for the User.

12. ENTIRE AGREEMENT

The Agreement (including, without limitation, these TOU, and the BC Labs Privacy Policy) and any policies or operating rules posted by us on the Services constitute the entire agreement and understanding between you and us and govern your use of the Services, superseding any prior or contemporaneous agreements, communications, and proposals, whether oral or written, between you and us (including, but not limited to, any prior versions of these TOU). Any failure by us to exercise or enforce any right or provision of the Agreement (including, without limitation, these TOU) shall not constitute a waiver of such right or provision.

13. LANGUAGE - APPLICATION LAW - JURISDICTION

These TOU are written in English. If they are translated into one or more foreign languages, only the English text will be deemed authentic in case of a dispute.

The Site is governed by the laws of France.

These TOU and the relationship between BC Labs and the user are also governed by the laws of France. In case of dispute as to the interpretation or execution of the TOU, the Parties will make every effort to find an amicable solution. In the absence of an amicable resolution, the courts of France have sole competence to hear disputes arising from the application of these TOU or resulting directly or indirectly from the use of the site.

These provisions relating to the applicable law and the competent jurisdictions are applicable subject to the imperative provisions that would have to be applied.

14. CONTACT US

Should you have any question about this Agreement, or wish to contact us for any reason whatsoever, please do so by sending us an email at contact@kairos.loan.