ODCdataManagerswrappers

TokenWrapperToERC1155WithERC20FractionsDataManager

Contract for wrapping tokens into an ERC1155 and fractionalizing them through an ERC20 token

WrongWrappedObjectType

error WrongWrappedObjectType()

Error thrown when the wrapped type of the function is different of the token type

VaultNotInitialized

error VaultNotInitialized()

Error thrown when the vault is not initialized

VaultAlreadyInitialized

error VaultAlreadyInitialized()

Error thrown when the vault is already initialized

MintNotSupported

error MintNotSupported()

Error thrown when mint function is called directly

TransferNotSuccessful

error TransferNotSuccessful(address token)

Error thrown when the transfer is not successful

ObjectWrapped

event ObjectWrapped(uint256 wid, address from, address token, uint256[] ids, uint256[] values)

Event emitted when a token is wrapped

ObjectUnwrapped

event ObjectUnwrapped(uint256 wid)

Event emitted when a token is unwrapped

WrappedObjectType

Enum for the wrapped object type NOTE: The token types that can be wrapped are ERC20, ERC721, ERC1155 and ERC3643

enum WrappedObjectType {
  ERC20,
  ERC721,
  ERC721_BATCH,
  ERC1155_SINGLE,
  ERC1155_BATCH,
  ERC3643_SINGLE,
  ERC1400_SINGLE
}

WrappedObject

Struct for the wrapped object

Parameters

NameTypeDescription
struct WrappedObject {
  enum TokenWrapperToERC1155WithERC20FractionsDataManager.WrappedObjectType wtype;
  address token;
  uint256[] ids;
  uint256[] values;
}

vaultDO

contract IDataObject vaultDO

The Data Point identifier for the Vault Data Object

vault

contract IVault vault

The Vault where the wrapped tokens are stored

_wrappedObjects

mapping(uint256 => struct TokenWrapperToERC1155WithERC20FractionsDataManager.WrappedObject) _wrappedObjects

Mapping of the wrapped objects

constructor

constructor(bytes32 _dp, address _dataIndex, address _fungibleFractionsDO, address erc20FractionsDMFactory_, address _vaultDO, string name_, string symbol_) public

initialize

function initialize(address _vaultFactory) external

Deploy vault in order to be ready to receive assets

This function MUST be called right after the constructor. Otherwise, wrapping and unwrapping will fail

Parameters

NameTypeDescription
_vaultFactoryaddressAn already deployed vault factory following GenericVaultFactory

mint

function mint(address, uint256, uint256, bytes) public pure

Mint only supported via wrapping

wrapAndFractionalizeERC20

function wrapAndFractionalizeERC20(contract IERC20 token, uint256 value, uint256 fractions) external returns (uint256)

Wrap ERC20 tokens on a NFT (WrappedObject) and fractionalize it

Parameters

NameTypeDescription
tokencontract IERC20Token to wrap
valueuint256Amount of tokens to wrap
fractionsuint256Number of fractions to mint

wrapAndFractionalizeERC721

function wrapAndFractionalizeERC721(contract IERC721 token, uint256 id, uint256 fractions) external returns (uint256)

Wrap ERC721 tokens on a NFT (WrappedObject) and fractionalize it

Parameters

NameTypeDescription
tokencontract IERC721Token to wrap
iduint256Token ID to wrap
fractionsuint256Number of fractions to mint

wrapAndFractionalizeERC721Batch

function wrapAndFractionalizeERC721Batch(contract IERC721 token, uint256[] ids, uint256 fractions) external returns (uint256)

Wrap a batch of ERC721 tokens on a NFT (WrappedObject) and fractionalize it

Parameters

NameTypeDescription
tokencontract IERC721Token to wrap
idsuint256[]Token IDs to wrap
fractionsuint256Number of fractions to mint

wrapAndFractionalizeERC1155

function wrapAndFractionalizeERC1155(contract IERC1155 token, uint256 id, uint256 value, bytes erc1155TransferData, uint256 fractions) external returns (uint256)

Wrap ERC1155 tokens on a NFT (WrappedObject) and fractionalize it

Parameters

NameTypeDescription
tokencontract IERC1155Token to wrap
iduint256Token ID to wrap
valueuint256Amount of tokens to wrap
erc1155TransferDatabytesAdditional data for the ERC1155 transfer
fractionsuint256Number of fractions to mint

wrapAndFractionalizeERC1155Batch

function wrapAndFractionalizeERC1155Batch(contract IERC1155 token, uint256[] ids, uint256[] values, bytes erc1155TransferData, uint256 fractions) external returns (uint256)

Wrap a batch of ERC1155 tokens on a NFT (WrappedObject) and fractionalize it

Parameters

NameTypeDescription
tokencontract IERC1155Token to wrap
idsuint256[]Token IDs to wrap
valuesuint256[]Amount of tokens to wrap
erc1155TransferDatabytesAdditional data for the ERC1155 transfer
fractionsuint256Number of fractions to mint

wrapAndFractionalizeERC3643

function wrapAndFractionalizeERC3643(contract IToken token, uint256 value, uint256 fractions) external returns (uint256)

Wrap ERC3643 tokens on a NFT (WrappedObject) and fractionalize it

Parameters

NameTypeDescription
tokencontract ITokenToken to wrap
valueuint256Amount of tokens to wrap
fractionsuint256Number of fractions to mint

wrapAndFractionalizeERC1400

function wrapAndFractionalizeERC1400(contract IERC1400 token, uint256 value, uint256 fractions, bytes data) external returns (uint256)

Wrap ERC1400 tokens on a NFT (WrappedObject) and fractionalize it

Parameters

NameTypeDescription
tokencontract IERC1400Token to wrap
valueuint256Amount of tokens to wrap
fractionsuint256Number of fractions to mint
databytes

unwrapERC20

function unwrapERC20(uint256 wid) external

Unwrap previously wrapped ERC20 tokens

Sender MUST be owner of all minted Fractions

Parameters

NameTypeDescription
widuint256ID of Wrapped Object issued on wrapping

unwrapERC721

function unwrapERC721(uint256 wid) external

Unwrap previously wrapped ERC721 tokens

Sender MUST be owner of all minted Fractions

Parameters

NameTypeDescription
widuint256ID of Wrapped Object issued on wrapping

unwrapERC721Batch

function unwrapERC721Batch(uint256 wid) external

Unwrap previously wrapped batch of ERC721 tokens

Sender MUST be owner of all minted Fractions

Parameters

NameTypeDescription
widuint256ID of Wrapped Object issued on wrapping

unwrapERC1155

function unwrapERC1155(uint256 wid) external

Unwrap previously wrapped ERC1155 tokens

Sender MUST be owner of all minted Fractions

Parameters

NameTypeDescription
widuint256ID of Wrapped Object issued on wrapping

unwrapERC1155Batch

function unwrapERC1155Batch(uint256 wid) external

Unwrap previously wrapped batch of ERC1155 tokens

Sender MUST be owner of all minted Fractions

Parameters

NameTypeDescription
widuint256ID of Wrapped Object issued on wrapping

unwrapERC3643

function unwrapERC3643(uint256 wid) external

Unwrap previously wrapped ERC3643 tokens

Sender MUST be owner of all minted Fractions

Parameters

NameTypeDescription
widuint256ID of Wrapped Object issued on wrapping

unwrapERC1400

function unwrapERC1400(uint256 wid, bytes data) external

Unwrap previously wrapped ERC1400 tokens

Sender MUST be owner of all minted Fractions

Parameters

NameTypeDescription
widuint256ID of Wrapped Object issued on wrapping
databytes

_wrapERC20

function _wrapERC20(contract IERC20 token, uint256 value) internal returns (uint256)

Wrap ERC20 tokens on a NFT (WrappedObject)

Parameters

NameTypeDescription
tokencontract IERC20Token to wrap
valueuint256Amount of tokens to wrap

_wrapERC721

function _wrapERC721(contract IERC721 token, uint256 id) internal returns (uint256)

Wrap ERC721 tokens on a NFT (WrappedObject)

Parameters

NameTypeDescription
tokencontract IERC721Token to wrap
iduint256Token ID to wrap

_wrapERC721Batch

function _wrapERC721Batch(contract IERC721 token, uint256[] ids) internal returns (uint256)

Wrap a batch of ERC721 tokens on a NFT (WrappedObject)

Parameters

NameTypeDescription
tokencontract IERC721Token to wrap
idsuint256[]Token IDs to wrap

_wrapERC1155

function _wrapERC1155(contract IERC1155 token, uint256 id, uint256 value, bytes erc1155TransferData) internal returns (uint256)

Wrap ERC1155 tokens on a NFT (WrappedObject)

Parameters

NameTypeDescription
tokencontract IERC1155Token to wrap
iduint256Token ID to wrap
valueuint256Amount of tokens to wrap
erc1155TransferDatabytesAdditional data for the ERC1155 transfer

_wrapERC1155Batch

function _wrapERC1155Batch(contract IERC1155 token, uint256[] ids, uint256[] values, bytes erc1155TransferData) internal returns (uint256)

Wrap a batch of ERC1155 tokens on a NFT (WrappedObject)

Parameters

NameTypeDescription
tokencontract IERC1155Token to wrap
idsuint256[]Token IDs to wrap
valuesuint256[]Amount of tokens to wrap
erc1155TransferDatabytesAdditional data for the ERC1155 transfer

_wrapERC3643

function _wrapERC3643(contract IToken token, uint256 value) internal returns (uint256)

Wrap ERC3643 tokens on a NFT (WrappedObject)

NOTE: As ERC3643 doesn't support safe transfers, we MUST ensure destination is able to handle the token sent.

Parameters

NameTypeDescription
tokencontract ITokenToken to wrap
valueuint256Amount of tokens to wrap

_wrapERC1400

function _wrapERC1400(contract IERC1400 token, uint256 value, bytes data) internal returns (uint256)

Wrap ERC1400 tokens on a NFT (WrappedObject)

NOTE: As ERC1400 doesn't support safe transfers, we MUST ensure destination is able to handle the token sent.

Parameters

NameTypeDescription
tokencontract IERC1400Token to wrap
valueuint256Amount of tokens to wrap
databytes

_deployVault

function _deployVault(address _vaultFactory, bytes32 salt) internal returns (contract IVault)

_vaultTransferERC20

function _vaultTransferERC20(address token, address to, uint256 value) internal

_vaultTransferERC721

function _vaultTransferERC721(address token, address to, uint256 id) internal

_vaultTransferERC1155

function _vaultTransferERC1155(address token, address to, uint256 id, uint256 value) internal

_vaultBatchTransferERC1155

function _vaultBatchTransferERC1155(address token, address to, uint256[] ids, uint256[] values) internal

_vaultTransferERC3643

function _vaultTransferERC3643(address token, address to, uint256 value) internal

_vaultTransferERC1400

function _vaultTransferERC1400(address token, address to, uint256 value, bytes data) internal

_mint

function _mint(address to, uint256 id, uint256 fractions) internal virtual

_burnWholeId

function _burnWholeId(address from, uint256 id) internal