Note: Complete program at https://github.com/secretshardul/fractose-contracts-v1.
- Fractionalization: Stake NFT and get fungible tokens representing its fractions. The following parameters will be set during fractionalization:
- Total fraction count
- Exit price
- Redeem: Pay the exit price to redeem the NFT. Each fraction holder gets renumerated according to their fraction share.
- Marketplace for NFT fractions
- Integration with liquidity pools
- Explore NIFTEX vaults and index funds: They allow multiple NFTs to be pooled and fractionalized together.
- $NEAR_FACTIONALIZATION token
- Study whitepapers of ethereum based fractionalization projects.
- Create UML diagrams for contract flow
- Study Rust
- Near protocol study:
- New standards for fungible and non-fungible tokens.
- Cross-contract calls using Rust.
- Develop contracts using the UML diagrams.
- NFTFY: Fractionalize single NFTs
- Website: https://nftfy.org/
- White paper: https://drive.google.com/file/d/1B4b8jV3QDxGPO-Xg_JAtiKbd2O6y8cV7/view
- NIFTEX: Fractionalize single NFTs
- Website: https://www.niftex.com/
- NFTX: Pool NFTs and and create index funds
- Website: https://nftx.org/
- Source: https://docs.nftx.org/archive/old-tutorials/how-to-create-an-nft-index-fund
- NFTX contract: https://etherscan.io/address/0xAf93fCce0548D3124A5fC3045adAf1ddE4e8Bf7e#writeProxyContract
- XStore contract: https://etherscan.io/address/0xBe54738723cea167a76ad5421b50cAa49692E7B7#readContract
-
Create vault: Send a transaction to
createVault
function of NFTX contract. It takes the given fields and creates an ERC20 token contract.- Fund name: Eg. Twerky Pepe
- Token name: $TWERKY
- Address of the NFT contract
- D1 or D2 fund (skip this)
-
Visit the XStore contract. Find contract address of the generated ERC20 token.
- After
NewVault
event is fired checkvaultID
of newly created vault usingvaultsLength
. It starts from 0 and gets incremented for each new token. - Get contract address by passing
vaultID
toxTokenAddress
function. - Query the name and symbol fields on this address to verify that this is the correct contract.
- After
-
For ERC 1155 tokens only: Go back to NFTX contract. Send a transaction to
setIs1155
function withvaultID
andtrue
as parameters. -
Finalize vault:
- Send a transaction to
finalizeVault
function with valuevaultID
.
- Send a transaction to
-
To allow minting of index funds
-
Visit the contract of the NFT you wish to convert. Eg. Twerky Pepe NFT contract.
-
Send transaction to
setApprovalForAll
with 2 fields:_operator
: NFTX contract address_approved
:true
We are approving the
_operator
to transfer the sender's tokens.Alternately send a transaction to
approve(address to, uint256 tokenId)
to approve permission for a single NFT. This will cost more gas if multiple NFTs need to be transferred.
-
-
Minting index funds:
-
Visit the NFTX contract. Send transaction to the
mint
function with values:- payableAmount — put a 0 (why?)
- vaultID — the vault you want to mint into
- nftids — Pass IDs of NFTs you want to add in square brackets. Eg.
[48,53,89]
. - d2Amount — put 0 into this field (ignore)
-
visit XStore and call
holdingsLength
with the vault ID. It will return count of NFTs in this vault.
-
Perform steps 5 and 6.
Approve transfer of vTokens using ERC 20 approve()
function. Send transaction to redeem(uint256 vaultId, uint256 amount)
with vaultId
and number of index tokens. You get a random NFT for each redeemed vToken. vTokens are specific to their vaults, eg. cryptokitties vTokens can't be used to redeem cryptopunks.
-
How many tokens do we get for minting NFTs into vaults?
- You get 1 index token for each NFT added to vault. There's a 1:1 relation between them. But the ERC20 index tokens can be fractionalized upto 18 decimal places.
-
Is it possible to restrict which NFTs can be deposited into our vault?
- Yes. NFTs can be white or blacklisted by sending
setIsEligible(uint256 vaultId, uint256[] memory nftIds, bool _boolean)
transaction. Eg. we can create a female CryptoPunks vault or a single NFT vault.
- Yes. NFTs can be white or blacklisted by sending
-
Can NFTs created from different contracts be pooled together?
- Not for D1/single funds. Contract ID must be provided during vault creation. Only NFTs from this contract can be pooled.
- D2/combined funds are formed by pooling D1 ERC20 tokens from various vaults.
-
Is there a buyout clause / exit fee?
- No
-
How to determine total value locked (TVL)?
-
How is token cost decided?
-
How to select a random NFT when redeeming?
- NFTX uses a pseudo-random number generator. Ideally an oracle should be used.
- Website: https://nftfy.org/
- White paper: https://drive.google.com/file/d/1B4b8jV3QDxGPO-Xg_JAtiKbd2O6y8cV7/view
- Securitization: The Origin Owner creates a contract and defines the rules as wished. The NFT is staked and the Origin Owner receives 100% of shares.
- Redeem: The Extractor Buyer pays with ETH and/or Shares to redeem the NFT and to take ownership of it. The contract receives the payment, burns the Shares, and keeps the ETH in the Vault, which is an ETH Fund available for the claimants.
- Claim: Any Ordinary Holder who holds a Share can claim the right of changing shares to ETH. The contract remains running until the last Share is burned.
- Drag-along clause: If majority decides to sell, the minority shareholders will be obliged to sell under the same conditions. This is a protection against blocked sales.
- Tag-along clause / co-sale right: Minority shareholders have the right to sell at the same terms offered to the majority shareholders.
- Exit price: If someone pays the exit price, all shareholders will be obliged to sell.
-
When an exit price in ETH is paid, this amount becomes the new backing of the remaining shares. Shares of others don't disappear. Others have the option of returning their shares and claiming their ETH. The returned shares are burned. The contract keeps running until the last share is burned.
-
Exit price can be paid as a combination of accumulated shares (shares owned by the redeemer) and ETH. This allows people to obtain shares at lower prices from the market and redeem the NFT.
Shares' Exit Price(SEP) = Exit Price(EP)/(Supply Shares)
Payment = AccS*SEP + ETH_PAYMENT
- Token holders vote to cutate securitized contracts that seek recognition. They vote whether new securities can be listed on Balancer LBPs.
- LBPs must contain at least 30% NFY tokens.
- People can provide liquidity on Balancer and earn NFY tokens. This is to incentivize liquidity. 20% of token supply is earmarked for liquidity mining.