Exemple #1
0
def test_wrapper_transfer_transferFee_4(accounts, erc721mock, wrapper, niftsy20, dai, weth, trmodel):
	#make test data
	erc721mock.transferFrom(accounts[0], accounts[1], ORIGINAL_NFT_IDs[3], {'from':accounts[0]})
	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[3], {'from':accounts[1]})
	logging.info('balanceOf(wrapper.address) = {}'.format(niftsy20.balanceOf(wrapper.address)))
	logging.info('balanceOf(royaltyBeneficiary) = {}'.format(niftsy20.balanceOf(royaltyBeneficiary)))
	#wrap difficult nft

	niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
	unwrapAfter = chain.time() + 10
	
	before_balance = niftsy20.balanceOf(wrapper.address)
	niftsy20.approve(trmodel, TRANSFER_FEE, {'from':accounts[1]}) 
	makeWrapNFT(wrapper, erc721mock, ['originalTokenId', 'transferFee', 'royaltyPercent' ], [ORIGINAL_NFT_IDs[3], 1, 1], accounts[1], niftsy20)
	assert niftsy20.balanceOf(accounts[1]) == 0
	assert niftsy20.balanceOf(wrapper.address) == before_balance + protokolFee
	assert wrapper.lastWrappedNFTId() == 4

	tokenId = wrapper.lastWrappedNFTId()
	nft = wrapper.getWrappedToken(tokenId)
	logging.info('nft3 = {}'.format(nft))

	checkWrappedNFT(wrapper, 
		tokenId, 
		erc721mock.address, 
		ORIGINAL_NFT_IDs[3], 
		START_NATIVE_COLLATERAL, 
		0,  
		unwrapAfter, 
		1, 
		royaltyBeneficiary, 
		1, 
		UNWRAP_FEE_THRESHOLD)

	wrapper.approve(accounts[3].address, tokenId, {"from": accounts[1]})
	before_balance = niftsy20.balanceOf(wrapper.address) 
	before_balance_royalty = niftsy20.balanceOf(royaltyBeneficiary) 
	niftsy20.transfer(accounts[1].address, 1, {"from": accounts[0]}) #add niftsy tokens to pay transfer fee
	wrapper.transferFrom(accounts[1].address, accounts[2].address, tokenId, {"from": accounts[3]})
	logging.info('balanceOf(wrapper.address) = {}'.format(niftsy20.balanceOf(wrapper.address)))
	logging.info('balanceOf(royaltyBeneficiary) = {}'.format(niftsy20.balanceOf(royaltyBeneficiary)))

	nft = wrapper.getWrappedToken(tokenId)
	logging.info('nft3 = {}'.format(nft))
	assert niftsy20.balanceOf(accounts[1]) == 0
	assert niftsy20.balanceOf(wrapper.address) == before_balance + 1 - round(nft[5]*nft[7]/100)
	assert niftsy20.balanceOf(royaltyBeneficiary) == before_balance_royalty + round(nft[5]*nft[7]/100)
	checkWrappedNFT(wrapper, 
		tokenId, 
		erc721mock.address, 
		ORIGINAL_NFT_IDs[3], 
		START_NATIVE_COLLATERAL, 
		1 - round(nft[5]*nft[7]/100), 
		unwrapAfter, 
		1, 
		royaltyBeneficiary, 
		1, 
		UNWRAP_FEE_THRESHOLD)
Exemple #2
0
def test_wrapper_transfer_transferFee_2(accounts, erc721mock, wrapper, niftsy20, dai, weth, trmodel):
	#make test data
	erc721mock.transferFrom(accounts[0], accounts[1], ORIGINAL_NFT_IDs[1], {'from':accounts[0]})
	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[1], {'from':accounts[1]})
	#wrap difficult nft

	niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
	unwrapAfter = chain.time() + 10
	
	makeWrapNFT(wrapper, erc721mock, ['originalTokenId', 'royaltyBeneficiary', 'royaltyPercent'], [ORIGINAL_NFT_IDs[1], zero_address, 0], accounts[1], niftsy20)
	assert niftsy20.balanceOf(accounts[1]) == 0
	assert niftsy20.balanceOf(wrapper.address) == 2 * protokolFee
	assert wrapper.lastWrappedNFTId() == 2

	tokenId = wrapper.lastWrappedNFTId()
	nft = wrapper.getWrappedToken(tokenId)
	logging.info('nft1 = {}'.format(nft))

	checkWrappedNFT(wrapper, 
		tokenId, 
		erc721mock.address, 
		ORIGINAL_NFT_IDs[1], 
		START_NATIVE_COLLATERAL, 
		0,  
		unwrapAfter, 
		TRANSFER_FEE, 
		zero_address, 
		0, 
		UNWRAP_FEE_THRESHOLD)

	#not enough niftsy20 tokens for paying of transferFee
	wrapper.approve(accounts[3].address, tokenId, {"from": accounts[1]})
	with reverts("insufficient NIFTSY balance for fee"):
		wrapper.transferFrom(accounts[1].address, accounts[2].address, tokenId, {"from": accounts[3]})
	#add niftsy tokens to acc1
	before_balance = niftsy20.balanceOf(wrapper.address) 
	niftsy20.transfer(accounts[1].address, TRANSFER_FEE, {"from": accounts[0]}) #add niftsy tokens to pay transfer fee
	niftsy20.approve(trmodel, TRANSFER_FEE, {'from':accounts[1]})
	wrapper.transferFrom(accounts[1].address, accounts[2].address, tokenId, {"from": accounts[3]})

	nft = wrapper.getWrappedToken(tokenId)
	logging.info('nft1 = {}'.format(nft))
	assert niftsy20.balanceOf(accounts[1]) == 0
	assert niftsy20.balanceOf(wrapper.address) == before_balance + TRANSFER_FEE
	checkWrappedNFT(wrapper, 
		tokenId, 
		erc721mock.address, 
		ORIGINAL_NFT_IDs[1], 
		START_NATIVE_COLLATERAL, 
		TRANSFER_FEE,  
		unwrapAfter, 
		TRANSFER_FEE, 
		zero_address, 
		0, 
		UNWRAP_FEE_THRESHOLD)
Exemple #3
0
def test_wrapper_transfer_1(accounts, erc721mock, wrapper, niftsy20, dai, weth, trmodel):
	#make test data
	makeNFTForTest(accounts, erc721mock, ORIGINAL_NFT_IDs)
	wrapper.setFee(protokolFee, chargeFeeAfter, niftsy20, {"from": accounts[0]})
	#wrap difficult nft

	niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
	unwrapAfter = chain.time() + 10

	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0], {'from':accounts[1]})
	niftsy20.approve(wrapper, TRANSFER_FEE, {'from':accounts[1]})
	makeWrapNFT(wrapper, erc721mock, ['originalTokenId', 'transferFee', 'royaltyBeneficiary', 'royaltyPercent', 'unwraptFeeThreshold'], [ORIGINAL_NFT_IDs[0], 0, zero_address, 0, 0], accounts[1], niftsy20)
	tokenId = wrapper.lastWrappedNFTId()

	assert niftsy20.balanceOf(accounts[1]) == 0
	assert niftsy20.balanceOf(wrapper.address) == protokolFee
	assert wrapper.lastWrappedNFTId() == 1
	checkWrappedNFT(wrapper, 
		tokenId, 
		erc721mock.address, 
		ORIGINAL_NFT_IDs[0], 
		START_NATIVE_COLLATERAL, 
		0,  
		unwrapAfter, 
		0, 
		zero_address, 
		0, 
		0)

	#non exists token
	with reverts("ERC721: operator query for nonexistent token"):
		wrapper.transferFrom(accounts[1].address, accounts[2].address, 100, {"from": accounts[3]})

	#not owner tries to transfer token
	with reverts("ERC721: transfer caller is not owner nor approved"):
		wrapper.transferFrom(accounts[1].address, accounts[2].address, tokenId, {"from": accounts[3]})

	wrapper.approve(accounts[3].address, tokenId, {"from": accounts[1]})
	niftsy20.approve(wrapper, TRANSFER_FEE, {'from':accounts[1]})
	wrapper.transferFrom(accounts[1].address, accounts[2].address, tokenId, {"from": accounts[3]})
	assert wrapper.ownerOf(tokenId) == accounts[2].address
	#return tokenId - owner transfer
	wrapper.transferFrom(accounts[2].address, accounts[1].address, tokenId, {"from": accounts[2]})
	assert wrapper.ownerOf(tokenId) == accounts[1].address

	nft = wrapper.getWrappedToken(tokenId)
	assert nft[3] == 0 #check backedTokens
Exemple #4
0
def test_wrapper_addNativeCollateral(accounts, erc721mock, wrapper, niftsy20,
                                     trmodel):
    #make test data
    makeNFTForTest(accounts, erc721mock, ORIGINAL_NFT_IDs)
    wrapper.setFee(protokolFee, chargeFeeAfter, niftsy20,
                   {"from": accounts[0]})
    #wrap difficult nft

    niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
    unwrapAfter = chain.time() + 10
    niftsy20.approve(wrapper, TRANSFER_FEE, {'from': accounts[1]})
    erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0],
                       {'from': accounts[1]})
    makeWrapNFT(wrapper, erc721mock, ['originalTokenId'],
                [ORIGINAL_NFT_IDs[0]], accounts[1], niftsy20)
    assert niftsy20.balanceOf(accounts[1]) == 0
    assert niftsy20.balanceOf(wrapper.address) == protokolFee
    assert wrapper.lastWrappedNFTId() == 1
    checkWrappedNFT(wrapper, wrapper.lastWrappedNFTId(), erc721mock.address,
                    ORIGINAL_NFT_IDs[0], START_NATIVE_COLLATERAL, 0,
                    unwrapAfter, TRANSFER_FEE, royaltyBeneficiary,
                    ROAYLTY_PERCENT, UNWRAP_FEE_THRESHOLD)

    nft = wrapper.getWrappedToken(wrapper.lastWrappedNFTId())
    #owner calls addNativeCollateral
    wrapper.addNativeCollateral(wrapper.lastWrappedNFTId(), {
        "from": accounts[1],
        "value": ADD_NATIVE_COLLATERAL
    })
    wrapper.addNativeCollateral(wrapper.lastWrappedNFTId(), {
        "from": accounts[1],
        "value": 0
    })
    assert wrapper.getWrappedToken(
        wrapper.lastWrappedNFTId())[2] == nft[2] + ADD_NATIVE_COLLATERAL
    #nonexist tokenId
    with reverts("ERC721: owner query for nonexistent token"):
        wrapper.addNativeCollateral(100, {
            "from": accounts[2],
            "value": ADD_NATIVE_COLLATERAL
        })
    #not owner calls addNativeCollateral
    wrapper.addNativeCollateral(wrapper.lastWrappedNFTId(), {
        "from": accounts[2],
        "value": ADD_NATIVE_COLLATERAL
    })
def test_wrapper_unWrap721_1(accounts, erc721mock, wrapper, niftsy20, dai, weth):
	#prepare test data
	erc721mock.transferFrom(accounts[0], accounts[1], ORIGINAL_NFT_IDs[1], {'from':accounts[0]})
	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[1], {'from':accounts[1]})
	
	#wrap nft
	niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
	unwrapAfter = chain.time() + 10

	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[1], {'from':accounts[1]})
	
	before_balance = niftsy20.balanceOf(wrapper.address)
	niftsy20.approve(wrapper, TRANSFER_FEE, {'from':accounts[1]})
	makeWrapNFT(wrapper, erc721mock, ['originalTokenId', 'royaltyBeneficiary', 'royaltyPercent'], [ORIGINAL_NFT_IDs[1], zero_address, 0], accounts[1], niftsy20)
	tokenId = wrapper.lastWrappedNFTId()

	assert niftsy20.balanceOf(accounts[1]) == 0
	assert niftsy20.balanceOf(wrapper.address) == before_balance + protokolFee
	assert wrapper.lastWrappedNFTId() == 2

	#unwrap

	#non exists token
	with reverts("ERC721: owner query for nonexistent token"):
		wrapper.unWrap721(100, {"from": accounts[1]})

	#not owner tries to unwrap token
	with reverts("Only owner can unwrap it!"):
		wrapper.unWrap721(tokenId, {"from": accounts[3]})

	#date of unwrap has not happened
	with reverts("Cant unwrap before day X"):
		wrapper.unWrap721(tokenId, {"from": accounts[1]})

	#move date 
	chain.sleep(100)
	chain.mine()

	#unwraptFeeThreshold is not collected
	with reverts("Cant unwrap due Fee Threshold"):
		wrapper.unWrap721(tokenId, {"from": accounts[1]})
def test_wrapper_transfer_1(accounts, erc721mock, wrapper, niftsy20, dai, weth,
                            trmodel):
    #make test data for case
    wrapper.editPartnersItem(niftsy20.address, True, zero_address, False,
                             {'from': accounts[0]})

    #make test data
    makeNFTForTest(accounts, erc721mock, ORIGINAL_NFT_IDs)
    wrapper.setFee(protokolFee, chargeFeeAfter, niftsy20,
                   {"from": accounts[0]})
    #wrap difficult nft

    niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
    unwrapAfter = chain.time() + 10

    erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0],
                       {'from': accounts[1]})
    niftsy20.approve(wrapper, TRANSFER_FEE, {'from': accounts[1]})
    makeWrapNFT(wrapper, erc721mock, [
        'originalTokenId', 'royaltyBeneficiary', 'royaltyPercent',
        'unwraptFeeThreshold'
    ], [ORIGINAL_NFT_IDs[0], zero_address, 0, 0], accounts[1], niftsy20)
    tokenId = wrapper.lastWrappedNFTId()

    assert niftsy20.balanceOf(accounts[1]) == 0
    assert niftsy20.balanceOf(wrapper.address) == protokolFee
    assert wrapper.lastWrappedNFTId() == 1
    checkWrappedNFT(wrapper, tokenId, erc721mock.address, ORIGINAL_NFT_IDs[0],
                    START_NATIVE_COLLATERAL, 0, unwrapAfter, TRANSFER_FEE,
                    zero_address, 0, 0)

    wrapper.approve(accounts[3].address, tokenId, {"from": accounts[1]})
    niftsy20.approve(wrapper, TRANSFER_FEE, {'from': accounts[1]})
    niftsy20.transfer(accounts[1], TRANSFER_FEE, {'from': accounts[0]})
    wrapper.transferFrom(accounts[1].address, accounts[2].address, tokenId,
                         {"from": accounts[3]})
    assert wrapper.ownerOf(tokenId) == accounts[2].address

    nft = wrapper.getWrappedToken(tokenId)
    assert nft[3] == TRANSFER_FEE  #check backedTokens
def test_wrap_for_blocked_original_nft_contract(accounts, erc721mock, wrapper,
                                                niftsy20, trmodel, pft,
                                                fakeERC721mock):

    #add contract in blackList
    with reverts("Ownable: caller is not the owner"):
        wrapper.editPartnersItem(fakeERC721mock.address, False, zero_address,
                                 False, {"from": accounts[1]})

    wrapper.editPartnersItem(fakeERC721mock.address, False, zero_address, True,
                             {"from": accounts[0]})

    #protocol fee is being taken
    wrapper.setFee(protokolFee, chargeFeeAfter, pft.address,
                   {"from": accounts[0]})

    #make test data
    makeNFTForTest(accounts, fakeERC721mock, ORIGINAL_NFT_IDs)

    #wrap nft
    pft.transfer(accounts[1], protokolFee, {"from": accounts[0]})

    fakeERC721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0],
                           {'from': accounts[1]})
    pft.approve(wrapper, protokolFee, {'from': accounts[1]})

    with reverts("This NFT is blacklisted for wrap"):
        makeWrapNFT(wrapper, fakeERC721mock, ['originalTokenId'],
                    [ORIGINAL_NFT_IDs[0]], accounts[1], niftsy20)
    assert pft.balanceOf(wrapper.address) == 0

    #move original nft contract from blackList
    wrapper.editPartnersItem(fakeERC721mock.address, False, zero_address,
                             False, {"from": accounts[0]})
    makeWrapNFT(wrapper, fakeERC721mock, ['originalTokenId'],
                [ORIGINAL_NFT_IDs[0]], accounts[1], niftsy20)
    assert pft.balanceOf(wrapper.address) == protokolFee
    assert wrapper.lastWrappedNFTId() == 1
def test_wrapper_unWrap721(accounts, erc721mock, wrapper, niftsy20, dai, weth, trmodel):
	#make test data
	makeNFTForTest(accounts, erc721mock, ORIGINAL_NFT_IDs)
	wrapper.setFee(protokolFee, chargeFeeAfter, niftsy20, {"from": accounts[0]})
	#wrap difficult nft

	niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
	unwrapAfter = chain.time() + 10

	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0], {'from':accounts[1]})
	niftsy20.approve(wrapper, TRANSFER_FEE, {'from':accounts[1]})
	makeWrapNFT(wrapper, erc721mock, ['originalTokenId', 'transferFee', 'royaltyBeneficiary', 'royaltyPercent', 'unwraptFeeThreshold'], [ORIGINAL_NFT_IDs[0], 0, zero_address, 0, 0], accounts[1], niftsy20)
	tokenId = wrapper.lastWrappedNFTId()

	assert niftsy20.balanceOf(accounts[1]) == 0
	assert niftsy20.balanceOf(wrapper.address) == protokolFee

	#unwrap

	#move date 
	chain.sleep(100)
	chain.mine()
	logging.info('wrapper.totalSupply() = {}'.format(wrapper.totalSupply()))
	logging.info('balance acc1 = {}'.format(wrapper.balanceOf(accounts[1])))
	logging.info('accounts[1].balance() = {}'.format(accounts[1].balance()))
	balance_eth = accounts[1].balance()
	nft = wrapper.getWrappedToken(tokenId)
	wrapper.unWrap721(tokenId, {"from": accounts[1]})
	logging.info('********************AFTER UNWRAP*************')
	assert wrapper.totalSupply() == 0
	assert wrapper.balanceOf(accounts[1].address) == 0
	assert niftsy20.balanceOf(accounts[1].address) == 0
	assert niftsy20.balanceOf(wrapper.address) == protokolFee
	assert erc721mock.ownerOf(ORIGINAL_NFT_IDs[0]) == accounts[1].address
	assert accounts[1].balance() == balance_eth + nft[2]
	logging.info('accounts[1].balance() = {}'.format(accounts[1].balance()))
	with reverts("ERC721: owner query for nonexistent token"):
		wrapper.ownerOf(tokenId)
def test_wrap_with_protokolFee(accounts, erc721mock, wrapper, niftsy20,
                               trmodel, pft):

    #protocol fee is being taken
    wrapper.setFee(protokolFee, chargeFeeAfter, pft.address,
                   {"from": accounts[0]})

    #make test data
    makeNFTForTest(accounts, erc721mock, ORIGINAL_NFT_IDs)

    #wrap nft
    pft.transfer(accounts[1], protokolFee, {"from": accounts[0]})

    erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0],
                       {'from': accounts[1]})
    pft.approve(wrapper, protokolFee, {'from': accounts[1]})

    makeWrapNFT(wrapper, erc721mock, ['originalTokenId'],
                [ORIGINAL_NFT_IDs[0]], accounts[1], niftsy20)
    assert pft.balanceOf(wrapper.address) == protokolFee

    #protocol fee is not being taken

    wrapper.setFee(protokolFee, 1e10, pft.address, {"from": accounts[0]})

    #wrap nft
    pft.transfer(accounts[1], protokolFee, {"from": accounts[0]})

    erc721mock.transferFrom(accounts[0], accounts[1], ORIGINAL_NFT_IDs[1],
                            {'from': accounts[0]})
    erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[1],
                       {'from': accounts[1]})
    pft.approve(wrapper, protokolFee, {'from': accounts[1]})

    makeWrapNFT(wrapper, erc721mock, ['originalTokenId'],
                [ORIGINAL_NFT_IDs[1]], accounts[1], niftsy20)
    assert pft.balanceOf(wrapper.address) == protokolFee
def test_wrapper_unWrap721_batch(accounts, erc721mock, wrapper, niftsy20, dai, weth, TokenMock, trmodel):
    #make test data
    makeNFTForTest(accounts, erc721mock, ORIGINAL_NFT_IDs)
    wrapper.setFee(protokolFee, chargeFeeAfter, niftsy20,{"from": accounts[0]})
    erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0], {'from':accounts[1]})
    logging.info('balanceOf(wrapper.address) = {}'.format(niftsy20.balanceOf(wrapper.address)))
    logging.info('balanceOf(royaltyBeneficiary) = {}'.format(niftsy20.balanceOf(royaltyBeneficiary)))
    #wrap difficult nft

    niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
    niftsy20.approve(wrapper, protokolFee+TRANSFER_FEE, {'from':accounts[1]})
    unwrapAfter = chain.time() + 10
    

    before_balance = niftsy20.balanceOf(wrapper.address) 
    makeWrapNFT(wrapper, erc721mock, ['originalTokenId'], [ORIGINAL_NFT_IDs[0]], accounts[1], niftsy20)
    assert niftsy20.balanceOf(accounts[1]) == 0
    assert niftsy20.balanceOf(wrapper.address) == before_balance + protokolFee
    assert wrapper.lastWrappedNFTId() == 1

    tokenId = wrapper.lastWrappedNFTId()
    nft = wrapper.getWrappedToken(tokenId)

    c = round(UNWRAP_FEE_THRESHOLD/(TRANSFER_FEE*(100-ROAYLTY_PERCENT)/100)) + 1
    backedTokens = 0
    royalty_tokens = 0
    i = 0
    for i in range(c):
        wrapper.approve(accounts[i+2].address, tokenId, {"from": accounts[i+1]})
        niftsy20.approve(trmodel.address, TRANSFER_FEE, {'from': accounts[i+1]})
        logging.info('niftsy20.allowance(accounts[i+1], trmodel.address) = {}'.format(niftsy20.allowance(accounts[i+1], trmodel.address)))
        niftsy20.transfer(accounts[i + 1].address, TRANSFER_FEE, {"from": accounts[0]}) #add niftsy tokens to pay transfer fee
        wrapper.transferFrom(accounts[i+1].address, accounts[i+2].address, tokenId, {"from": accounts[i+2]}) #make transfers
        royalty_tokens += TRANSFER_FEE*nft[7]/100
        backedTokens += TRANSFER_FEE - TRANSFER_FEE*nft[7]/100

    #check backedTokens after transfers
    nft = wrapper.getWrappedToken(tokenId)
    logging.info('nft2 = {}'.format(nft))
    assert nft[3] == backedTokens

    wrapper.setMaxERC20CollateralCount(270, {"from": accounts[0]})

    dai1= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai2= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai3= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai4= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai5= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai6= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai7= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai8= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai9= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai10= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai11= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai12= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai13= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai14= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai15= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai16= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai17= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai18= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai19= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai20= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai21= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai22= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai23= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai24= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai25= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai26= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai27= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai28= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai29= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai30= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai31= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai32= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai33= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai34= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai35= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai36= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai37= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai38= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai39= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai40= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai41= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai42= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai43= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai44= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai45= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai46= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai47= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai48= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai49= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai50= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai51= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai52= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai53= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai54= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai55= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai56= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai57= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai58= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai59= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai60= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai61= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai62= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai63= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai64= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai65= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai66= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai67= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai68= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai69= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai70= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai71= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai72= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai73= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai74= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai75= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai76= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai77= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai78= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai79= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai80= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai81= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai82= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai83= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai84= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai85= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai86= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai87= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai88= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai89= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai90= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai91= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai92= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai93= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai94= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai95= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai96= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai97= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai98= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai99= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai100= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai101= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai102= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai103= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai104= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai105= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai106= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai107= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai108= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai109= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai110= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai111= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai112= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai113= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai114= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai115= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai116= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai117= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai118= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai119= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai120= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai121= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai122= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai123= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai124= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai125= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai126= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai127= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai128= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai129= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai130= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai131= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai132= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai133= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai134= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai135= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai136= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai137= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai138= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai139= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai140= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai141= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai142= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai143= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai144= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai145= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai146= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai147= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai148= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai149= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai150= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai151= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai152= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai153= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai154= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai155= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai156= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai157= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai158= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai159= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai160= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai161= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai162= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai163= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai164= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai165= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai166= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai167= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai168= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai169= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai170= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai171= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai172= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai173= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai174= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai175= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai176= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai177= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai178= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai179= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai180= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai181= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai182= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai183= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai184= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai185= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai186= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai187= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai188= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai189= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai190= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai191= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai192= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai193= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai194= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai195= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai196= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai197= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai198= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai199= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai200= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai201= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai202= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai203= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai204= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai205= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai206= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai207= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai208= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai209= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai210= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai211= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai212= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai213= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai214= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai215= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai216= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai217= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai218= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai219= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai220= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai221= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai222= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai223= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai224= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai225= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai226= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai227= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai228= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai229= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai230= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai231= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai232= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai233= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai234= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai235= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai236= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai237= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai238= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai239= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai240= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai241= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai242= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai243= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai244= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai245= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai246= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai247= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai248= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai249= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai250= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai251= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai252= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai253= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai254= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai255= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai256= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai257= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai258= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai259= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai260= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai261= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai262= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai263= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai264= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai265= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai266= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai267= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai268= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai269= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
    dai270= _addErc20Collateral(accounts[0], accounts[1], wrapper, ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)

    
    assert len(wrapper.getERC20Collateral(tokenId)) == 270
    logging.info('wrapper.getERC20Collateral(tokenId) = {}'.format(wrapper.getERC20Collateral(tokenId)))
    

    logging.info('---------------------------***********CHECK BALANCE BEFORE')
    logging.info('dai241 wr = {}'.format(dai241.balanceOf(wrapper.address)))
    logging.info('dai242 wr = {}'.format(dai242.balanceOf(wrapper.address)))
    logging.info('dai243 wr = {}'.format(dai243.balanceOf(wrapper.address)))
    logging.info('dai244 wr = {}'.format(dai244.balanceOf(wrapper.address)))
    logging.info('dai245 wr = {}'.format(dai245.balanceOf(wrapper.address)))
    logging.info('dai246 wr = {}'.format(dai246.balanceOf(wrapper.address)))
    logging.info('dai247 wr = {}'.format(dai247.balanceOf(wrapper.address)))
    logging.info('dai248 wr = {}'.format(dai248.balanceOf(wrapper.address)))
    logging.info('dai249 wr = {}'.format(dai249.balanceOf(wrapper.address)))
    logging.info('dai250 wr = {}'.format(dai250.balanceOf(wrapper.address)))
    logging.info('dai251 wr = {}'.format(dai251.balanceOf(wrapper.address)))
    logging.info('dai252 wr = {}'.format(dai252.balanceOf(wrapper.address)))
    logging.info('dai253 wr = {}'.format(dai253.balanceOf(wrapper.address)))
    logging.info('dai254 wr = {}'.format(dai254.balanceOf(wrapper.address)))
    logging.info('dai255 wr = {}'.format(dai255.balanceOf(wrapper.address)))
    logging.info('dai256 wr = {}'.format(dai256.balanceOf(wrapper.address)))
    logging.info('dai257 wr = {}'.format(dai257.balanceOf(wrapper.address)))
    logging.info('dai258 wr = {}'.format(dai258.balanceOf(wrapper.address)))
    logging.info('dai259 wr = {}'.format(dai259.balanceOf(wrapper.address)))
    logging.info('dai260 wr = {}'.format(dai260.balanceOf(wrapper.address)))
    logging.info('dai261 wr = {}'.format(dai261.balanceOf(wrapper.address)))
    logging.info('dai262 wr = {}'.format(dai262.balanceOf(wrapper.address)))
    logging.info('dai263 wr = {}'.format(dai263.balanceOf(wrapper.address)))
    logging.info('dai264 wr = {}'.format(dai264.balanceOf(wrapper.address)))
    logging.info('dai265 wr = {}'.format(dai265.balanceOf(wrapper.address)))
    logging.info('dai266 wr = {}'.format(dai266.balanceOf(wrapper.address)))
    logging.info('dai267 wr = {}'.format(dai267.balanceOf(wrapper.address)))
    logging.info('dai268 wr = {}'.format(dai268.balanceOf(wrapper.address)))
    logging.info('dai269 wr = {}'.format(dai269.balanceOf(wrapper.address)))
    logging.info('dai270 wr = {}'.format(dai270.balanceOf(wrapper.address)))
    logging.info('---------------------------***********END CHECK BALANCE BEFORE')

    #move date 
    chain.sleep(100)
    chain.mine()
    logging.info('wrapper.totalSupply() = {}'.format(wrapper.totalSupply()))
    logging.info('accounts[i+2].balance() = {}'.format(accounts[i+2].balance()))
    logging.info('wrapper.balanceOf(accounts[i+2]) = {}'.format(wrapper.balanceOf(accounts[i+2])))
    logging.info('niftsy20.balanceOf(accounts[i+2]) = {}'.format(niftsy20.balanceOf(accounts[i+2])))
    logging.info('wrapper.balance() = {}'.format(wrapper.balance()))
    logging.info('niftsy20.balanceOf(wrapper.address) = {}'.format(niftsy20.balanceOf(wrapper.address)))
    balance_eth = accounts[i+2].balance()
    balance_erc20 = niftsy20.balanceOf(wrapper.address)
    balance_erc20_owner = niftsy20.balanceOf(accounts[i+2].address)
    logging.info('********************AFTER UNWRAP*************')
    #unwrap
    tx = wrapper.unWrap721(tokenId, {"from": accounts[i+2]})
    logging.info('len(wrapper.getERC20Collateral(tokenId)) = {}'.format(len(wrapper.getERC20Collateral(tokenId))))
    logging.info('wrapper.getERC20Collateral(tokenId) = {}'.format(wrapper.getERC20Collateral(tokenId)))
    logging.info('event = {}'.format(tx.events['PartialUnWrapp']))
    logging.info('dai239 = {}'.format(dai239.balanceOf(accounts[i+2])))
    logging.info('dai240 = {}'.format(dai240.balanceOf(accounts[i+2])))


    #unwrap again
    logging.info('accounts[i+2].balance() = {}'.format(accounts[i+2].balance()))
    tx = wrapper.unWrap721(tokenId, {"from": accounts[i+2]})
    logging.info('********************owner balance*************')
    logging.info('dai241 = {}'.format(dai241.balanceOf(accounts[i+2])))
    logging.info('dai242 = {}'.format(dai242.balanceOf(accounts[i+2])))
    logging.info('dai243 = {}'.format(dai243.balanceOf(accounts[i+2])))
    logging.info('dai244 = {}'.format(dai244.balanceOf(accounts[i+2])))
    logging.info('dai245 = {}'.format(dai245.balanceOf(accounts[i+2])))
    logging.info('dai246 = {}'.format(dai246.balanceOf(accounts[i+2])))
    logging.info('dai247 = {}'.format(dai247.balanceOf(accounts[i+2])))
    logging.info('dai248 = {}'.format(dai248.balanceOf(accounts[i+2])))
    logging.info('dai249 = {}'.format(dai249.balanceOf(accounts[i+2])))
    logging.info('dai250 = {}'.format(dai250.balanceOf(accounts[i+2])))
    logging.info('dai251 = {}'.format(dai251.balanceOf(accounts[i+2])))
    logging.info('dai252 = {}'.format(dai252.balanceOf(accounts[i+2])))
    logging.info('dai253 = {}'.format(dai253.balanceOf(accounts[i+2])))
    logging.info('dai254 = {}'.format(dai254.balanceOf(accounts[i+2])))
    logging.info('dai255 = {}'.format(dai255.balanceOf(accounts[i+2])))
    logging.info('dai256 = {}'.format(dai256.balanceOf(accounts[i+2])))
    logging.info('dai257 = {}'.format(dai257.balanceOf(accounts[i+2])))
    logging.info('dai258 = {}'.format(dai258.balanceOf(accounts[i+2])))
    logging.info('dai259 = {}'.format(dai259.balanceOf(accounts[i+2])))
    logging.info('dai260 = {}'.format(dai260.balanceOf(accounts[i+2])))
    logging.info('dai261 = {}'.format(dai261.balanceOf(accounts[i+2])))
    logging.info('dai262 = {}'.format(dai262.balanceOf(accounts[i+2])))
    logging.info('dai263 = {}'.format(dai263.balanceOf(accounts[i+2])))
    logging.info('dai264 = {}'.format(dai264.balanceOf(accounts[i+2])))
    logging.info('dai265 = {}'.format(dai265.balanceOf(accounts[i+2])))
    logging.info('dai266 = {}'.format(dai266.balanceOf(accounts[i+2])))
    logging.info('dai267 = {}'.format(dai267.balanceOf(accounts[i+2])))
    logging.info('dai268 = {}'.format(dai268.balanceOf(accounts[i+2])))
    logging.info('dai269 = {}'.format(dai269.balanceOf(accounts[i+2])))
    logging.info('dai270 = {}'.format(dai270.balanceOf(accounts[i+2])))


    logging.info('********************wrapper.address erc20 token balance*************')
    logging.info('dai241 wr = {}'.format(dai241.balanceOf(wrapper.address)))
    logging.info('dai242 wr = {}'.format(dai242.balanceOf(wrapper.address)))
    logging.info('dai243 wr = {}'.format(dai243.balanceOf(wrapper.address)))
    logging.info('dai244 wr = {}'.format(dai244.balanceOf(wrapper.address)))
    logging.info('dai245 wr = {}'.format(dai245.balanceOf(wrapper.address)))
    logging.info('dai246 wr = {}'.format(dai246.balanceOf(wrapper.address)))
    logging.info('dai247 wr = {}'.format(dai247.balanceOf(wrapper.address)))
    logging.info('dai248 wr = {}'.format(dai248.balanceOf(wrapper.address)))
    logging.info('dai249 wr = {}'.format(dai249.balanceOf(wrapper.address)))
    logging.info('dai250 wr = {}'.format(dai250.balanceOf(wrapper.address)))
    logging.info('dai251 wr = {}'.format(dai251.balanceOf(wrapper.address)))
    logging.info('dai252 wr = {}'.format(dai252.balanceOf(wrapper.address)))
    logging.info('dai253 wr = {}'.format(dai253.balanceOf(wrapper.address)))
    logging.info('dai254 wr = {}'.format(dai254.balanceOf(wrapper.address)))
    logging.info('dai255 wr = {}'.format(dai255.balanceOf(wrapper.address)))
    logging.info('dai256 wr = {}'.format(dai256.balanceOf(wrapper.address)))
    logging.info('dai257 wr = {}'.format(dai257.balanceOf(wrapper.address)))
    logging.info('dai258 wr = {}'.format(dai258.balanceOf(wrapper.address)))
    logging.info('dai259 wr = {}'.format(dai259.balanceOf(wrapper.address)))
    logging.info('dai260 wr = {}'.format(dai260.balanceOf(wrapper.address)))
    logging.info('dai261 wr = {}'.format(dai261.balanceOf(wrapper.address)))
    logging.info('dai262 wr = {}'.format(dai262.balanceOf(wrapper.address)))
    logging.info('dai263 wr = {}'.format(dai263.balanceOf(wrapper.address)))
    logging.info('dai264 wr = {}'.format(dai264.balanceOf(wrapper.address)))
    logging.info('dai265 wr = {}'.format(dai265.balanceOf(wrapper.address)))
    logging.info('dai266 wr = {}'.format(dai266.balanceOf(wrapper.address)))
    logging.info('dai267 wr = {}'.format(dai267.balanceOf(wrapper.address)))
    logging.info('dai268 wr = {}'.format(dai268.balanceOf(wrapper.address)))
    logging.info('dai269 wr = {}'.format(dai269.balanceOf(wrapper.address)))
    logging.info('dai270 wr = {}'.format(dai270.balanceOf(wrapper.address)))
    #assert len(wrapper.getERC20Collateral(tokenId)) == 0
    assert wrapper.totalSupply() == 0
    assert wrapper.balanceOf(accounts[i+2].address) == 0
    assert niftsy20.balanceOf(accounts[i+2].address) == balance_erc20_owner + backedTokens
    assert erc721mock.ownerOf(ORIGINAL_NFT_IDs[0]) == accounts[i+2].address
    assert accounts[i+2].balance() == balance_eth + nft[2]
    assert niftsy20.balanceOf(wrapper.address) == balance_erc20 - backedTokens
    assert niftsy20.balanceOf(royaltyBeneficiary) == royalty_tokens
    
    logging.info('wrapper.getERC20Collateral(tokenId) = {}'.format(wrapper.getERC20Collateral(tokenId)))
    assert dai1.balanceOf(accounts[i+2]) == ERC20_COLLATERAL_AMOUNT
    assert dai270.balanceOf(accounts[i+2]) == ERC20_COLLATERAL_AMOUNT
    assert dai1.balanceOf(wrapper.address) == 0
    assert dai270.balanceOf(wrapper.address) == 0

    logging.info('accounts[i+2].balance() = {}'.format(accounts[i+2].balance()))
    logging.info('wrapper.balanceOf(accounts[i+2]) = {}'.format(wrapper.balanceOf(accounts[i+2])))
    logging.info('niftsy20.balanceOf(accounts[i+2]) = {}'.format(niftsy20.balanceOf(accounts[i+2])))
    logging.info('wrapper.balance() = {}'.format(wrapper.balance()))
    logging.info('niftsy20.balanceOf(wrapper.address) = {}'.format(niftsy20.balanceOf(wrapper.address)))
    with reverts("ERC721: owner query for nonexistent token"):
        wrapper.ownerOf(tokenId)

    logging.info('wrapper.getERC20Collateral(tokenId) = {}'.format(wrapper.getERC20Collateral(tokenId)))
Exemple #11
0
def test_wrap_with_transferFeeContract_in_blackList(accounts, erc721mock, wrapper,  trmodel, pft, dai):

	#protocol fee is being taken
	wrapper.setFee(protokolFee, chargeFeeAfter, pft.address, {"from": accounts[0]})

	#make test data
	makeNFTForTest(accounts, erc721mock, ORIGINAL_NFT_IDs)

	#wrap nft
	pft.transfer(accounts[1], protokolFee, {"from": accounts[0]})

	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0], {'from':accounts[1]})
	pft.approve(wrapper, protokolFee, {'from':accounts[1]})

	#add transferFeeContract contract in blackList
	wrapper.editPartnersItem(dai.address, False, trmodel, False, {"from": accounts[0]})
	dai.approve(wrapper.address, ERC20_COLLATERAL_AMOUNT + 100, {"from": accounts[1]})
	
	with reverts("This transferFee token is not enabled"):
		makeWrapNFT(wrapper, erc721mock, ['originalTokenId'], [ORIGINAL_NFT_IDs[0]], accounts[1], dai)
	
	#move transferFeeToken from blackList
	wrapper.editPartnersItem(dai.address, True, trmodel, False, {"from": accounts[0]})
	makeWrapNFT(wrapper, erc721mock, ['originalTokenId', 'unwrap_fee_threshold'], [ORIGINAL_NFT_IDs[0], 0], accounts[1], dai)
	assert pft.balanceOf(wrapper.address) == protokolFee
	tokenId = wrapper.lastWrappedNFTId()

	before_balance = dai.balanceOf(wrapper.address) 
	wrapper.approve(accounts[3].address, tokenId, {"from": accounts[1]})
	dai.approve(trmodel, TRANSFER_FEE, {'from':accounts[1]})
	nft = wrapper.getWrappedToken(tokenId)
	dai.transfer(accounts[1].address, TRANSFER_FEE, {"from": accounts[0]}) #add tokens to pay transfer fee
	wrapper.transferFrom(accounts[1].address, accounts[2].address, tokenId, {"from": accounts[3]})

	assert dai.balanceOf(accounts[1]) == 0
	assert dai.balanceOf(wrapper.address) == before_balance + TRANSFER_FEE - nft[5]*nft[7]/100
	assert dai.balanceOf(royaltyBeneficiary) == nft[5]*nft[7]/100


	#add transferFeeContract contract in blackList again
	wrapper.editPartnersItem(dai.address, False, trmodel, False, {"from": accounts[0]})

	before_balance = dai.balanceOf(wrapper.address) 
	before_balance_royaltyBeneficiary = dai.balanceOf(royaltyBeneficiary) 
	wrapper.approve(accounts[3].address, tokenId, {"from": accounts[2]})
	nft = wrapper.getWrappedToken(tokenId)
	dai.transfer(accounts[2].address, TRANSFER_FEE, {"from": accounts[0]}) #add tokens to pay transfer fee
	dai.approve(trmodel, TRANSFER_FEE, {'from':accounts[2]})
	wrapper.transferFrom(accounts[2].address, accounts[3].address, tokenId, {"from": accounts[3]})

	assert dai.balanceOf(accounts[2]) == 0
	assert dai.balanceOf(wrapper.address) == before_balance + TRANSFER_FEE - nft[5]*nft[7]/100
	assert dai.balanceOf(royaltyBeneficiary) == before_balance_royaltyBeneficiary + nft[5]*nft[7]/100


	#unwrap

	#move date 
	chain.sleep(100)
	chain.mine()
	logging.info('wrapper.totalSupply() = {}'.format(wrapper.totalSupply()))
	logging.info('wrapper.balanceOf(accounts[3]) = {}'.format(wrapper.balanceOf(accounts[3])))
	logging.info('dai.balanceOf(accounts[3]) = {}'.format(dai.balanceOf(accounts[3])))
	logging.info('dai.balanceOf(wrapper.address) = {}'.format(dai.balanceOf(wrapper.address)))
	logging.info('********************AFTER UNWRAP*************')
	#unwrap
	nft = wrapper.getWrappedToken(tokenId)
	wrapper.unWrap721(tokenId, {"from": accounts[3]})
	assert wrapper.totalSupply() == 0
	assert wrapper.balanceOf(accounts[3].address) == 0
	assert dai.balanceOf(accounts[3].address) == nft[3]
	assert erc721mock.ownerOf(ORIGINAL_NFT_IDs[0]) == accounts[3].address
	assert dai.balanceOf(wrapper.address) == 0
	assert dai.balanceOf(royaltyBeneficiary) == before_balance_royaltyBeneficiary + nft[5]*nft[7]/100

	logging.info('wrapper.balanceOf(accounts[3]) = {}'.format(wrapper.balanceOf(accounts[3])))
	logging.info('dai.balanceOf(accounts[3]) = {}'.format(dai.balanceOf(accounts[3])))
	logging.info('dai.balanceOf(wrapper.address) = {}'.format(dai.balanceOf(wrapper.address)))
	logging.info('dai.balanceOfroyaltyBeneficiary) = {}'.format(dai.balanceOf(royaltyBeneficiary)))
	



	
def test_wrapper_unWrap721_mockHacker(accounts, erc721mock, wrapper, niftsy20,
                                      dai, weth, TokenMock, mockHacker,
                                      trmodel):
    #make test data
    makeNFTForTest(accounts, erc721mock, ORIGINAL_NFT_IDs)
    wrapper.setFee(protokolFee, chargeFeeAfter, niftsy20,
                   {"from": accounts[0]})
    erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0],
                       {'from': accounts[1]})
    logging.info('balanceOf(wrapper.address) = {}'.format(
        niftsy20.balanceOf(wrapper.address)))
    logging.info('balanceOf(royaltyBeneficiary) = {}'.format(
        niftsy20.balanceOf(royaltyBeneficiary)))
    #wrap difficult nft

    niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
    unwrapAfter = chain.time() + 10

    before_balance = niftsy20.balanceOf(wrapper.address)
    niftsy20.approve(wrapper, TRANSFER_FEE, {'from': accounts[1]})
    makeWrapNFT(wrapper, erc721mock, ['originalTokenId'],
                [ORIGINAL_NFT_IDs[0]], accounts[1], niftsy20)
    assert niftsy20.balanceOf(accounts[1]) == 0
    assert niftsy20.balanceOf(wrapper.address) == before_balance + protokolFee
    assert wrapper.lastWrappedNFTId() == 1

    tokenId = wrapper.lastWrappedNFTId()
    nft = wrapper.getWrappedToken(tokenId)

    c = round(UNWRAP_FEE_THRESHOLD / TRANSFER_FEE) + 1
    backedTokens = 0
    royalty_tokens = 0
    i = 0
    for i in range(c):
        wrapper.approve(accounts[i + 2].address, tokenId,
                        {"from": accounts[i + 1]})
        niftsy20.transfer(
            accounts[i + 1].address, TRANSFER_FEE,
            {"from": accounts[0]})  #add niftsy tokens to pay transfer fee
        niftsy20.approve(trmodel, TRANSFER_FEE, {'from': accounts[i + 1]})
        wrapper.transferFrom(accounts[i + 1].address, accounts[i + 2].address,
                             tokenId,
                             {"from": accounts[i + 2]})  #make transfers
        royalty_tokens += TRANSFER_FEE * nft[7] / 100
        backedTokens += TRANSFER_FEE - TRANSFER_FEE * nft[7] / 100

    #check backedTokens after transfers
    nft = wrapper.getWrappedToken(tokenId)
    logging.info('nft2 = {}'.format(nft))
    assert nft[3] == backedTokens

    #add hacker's token
    mockHacker.approve(wrapper.address, ERC20_COLLATERAL_AMOUNT,
                       {"from": accounts[1]})
    mockHacker.transfer(accounts[1], ERC20_COLLATERAL_AMOUNT,
                        {"from": accounts[0]})
    wrapper.setCollateralStatus(mockHacker.address, True,
                                {"from": accounts[0]})
    wrapper.addERC20Collateral(tokenId, mockHacker.address,
                               ERC20_COLLATERAL_AMOUNT, {"from": accounts[1]})
    mockHacker.setFailSender(wrapper.address)

    #move date
    chain.sleep(100)
    chain.mine()
    logging.info('********************BEFORE UNWRAP*************')
    logging.info('wrapper.totalSupply() = {}'.format(wrapper.totalSupply()))
    logging.info('accounts[i+2].balance() = {}'.format(accounts[i +
                                                                2].balance()))
    logging.info('wrapper.balanceOf(accounts[i+2]) = {}'.format(
        wrapper.balanceOf(accounts[i + 2])))
    logging.info('niftsy20.balanceOf(accounts[i+2]) = {}'.format(
        niftsy20.balanceOf(accounts[i + 2])))
    logging.info('wrapper.balance() = {}'.format(wrapper.balance()))
    logging.info('niftsy20.balanceOf(wrapper.address) = {}'.format(
        niftsy20.balanceOf(wrapper.address)))
    balance_eth = accounts[i + 2].balance()
    balance_erc20 = niftsy20.balanceOf(wrapper.address)
    balance_erc20_owner = niftsy20.balanceOf(accounts[i + 2].address)
    logging.info('********************AFTER UNWRAP*************')
    #unwrap
    tx = wrapper.unWrap721(tokenId, {"from": accounts[i + 2]})
    logging.info(tx.events['SuspiciousFail'])
    logging.info('len(wrapper.getERC20Collateral(tokenId)) = {}'.format(
        len(wrapper.getERC20Collateral(tokenId))))
    #comented due new approach 20211009
    #assert len(wrapper.getERC20Collateral(tokenId)) == 0
    assert wrapper.totalSupply() == 0
    assert wrapper.balanceOf(accounts[i + 2].address) == 0
    assert niftsy20.balanceOf(
        accounts[i + 2].address) == balance_erc20_owner + backedTokens
    assert erc721mock.ownerOf(ORIGINAL_NFT_IDs[0]) == accounts[i + 2].address
    assert accounts[i + 2].balance() == balance_eth + nft[2]
    assert niftsy20.balanceOf(wrapper.address) == balance_erc20 - backedTokens
    assert niftsy20.balanceOf(royaltyBeneficiary) == royalty_tokens

    logging.info('wrapper.getERC20Collateral(tokenId) = {}'.format(
        wrapper.getERC20Collateral(tokenId)))
    logging.info('accounts[i+2].balance() = {}'.format(accounts[i +
                                                                2].balance()))
    logging.info('wrapper.balanceOf(accounts[i+2]) = {}'.format(
        wrapper.balanceOf(accounts[i + 2])))
    logging.info('niftsy20.balanceOf(accounts[i+2]) = {}'.format(
        niftsy20.balanceOf(accounts[i + 2])))
    logging.info('wrapper.balance() = {}'.format(wrapper.balance()))
    logging.info('niftsy20.balanceOf(wrapper.address) = {}'.format(
        niftsy20.balanceOf(wrapper.address)))
    logging.info('!!!!!mockHacker.balanceOf(wrapper.address) = {}'.format(
        mockHacker.balanceOf(wrapper.address)))
    with reverts("ERC721: owner query for nonexistent token"):
        wrapper.ownerOf(tokenId)
def test_test_wrapper_addERC20Collateral_blackList(accounts, erc721mock,
                                                   wrapper, niftsy20, trmodel,
                                                   pft, dai):
    #make test data
    makeNFTForTest(accounts, erc721mock, ORIGINAL_NFT_IDs)
    wrapper.setFee(protokolFee, chargeFeeAfter, pft.address,
                   {"from": accounts[0]})
    dai.transfer(accounts[1], ERC20_COLLATERAL_AMOUNT, {"from": accounts[0]})
    #wrap difficult nft

    pft.transfer(accounts[1], protokolFee, {"from": accounts[0]})
    unwrapAfter = chain.time() + 10

    erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0],
                       {'from': accounts[1]})
    pft.approve(wrapper, TRANSFER_FEE, {'from': accounts[1]})

    makeWrapNFT(wrapper, erc721mock, [
        'originalTokenId', 'transferFee', 'royaltyBeneficiary',
        'royaltyPercent', 'unwraptFeeThreshold'
    ], [ORIGINAL_NFT_IDs[0], 0, zero_address, 0, 0], accounts[1], niftsy20)

    assert pft.balanceOf(accounts[1]) == 0
    assert pft.balanceOf(wrapper.address) == protokolFee
    assert wrapper.lastWrappedNFTId() == 1
    tokenId = wrapper.lastWrappedNFTId()
    nft = wrapper.getWrappedToken(tokenId)

    #try to add erc20 collaterals which is in blockList

    #add collateral contract in blackList
    wrapper.editPartnersItem(dai.address, False, zero_address, False,
                             {"from": accounts[0]})

    dai.approve(wrapper.address, ERC20_COLLATERAL_AMOUNT + 100,
                {"from": accounts[1]})
    with reverts("This ERC20 is not enabled for collateral"):
        wrapper.addERC20Collateral(tokenId, dai.address,
                                   ERC20_COLLATERAL_AMOUNT,
                                   {"from": accounts[1]})

    #move collateral contract from blackList
    wrapper.editPartnersItem(dai.address, True, zero_address, False,
                             {"from": accounts[0]})
    wrapper.addERC20Collateral(tokenId, dai.address, ERC20_COLLATERAL_AMOUNT,
                               {"from": accounts[1]})

    assert dai.balanceOf(wrapper.address) == ERC20_COLLATERAL_AMOUNT
    assert dai.balanceOf(accounts[1].address) == 0
    logging.info('coll = {}'.format(wrapper.getERC20Collateral(tokenId)))
    assert wrapper.getERC20Collateral(tokenId)[0][0] == dai.address
    assert wrapper.getERC20Collateral(tokenId)[0][1] == ERC20_COLLATERAL_AMOUNT

    #add collateral contract in blackList again
    wrapper.editPartnersItem(dai.address, False, zero_address, False,
                             {"from": accounts[0]})

    #try to unwrap nft
    #move date
    chain.sleep(100)
    chain.mine()
    wrapper.unWrap721(tokenId, {"from": accounts[1]})
    assert dai.balanceOf(wrapper.address) == 0
    assert dai.balanceOf(accounts[1].address) == ERC20_COLLATERAL_AMOUNT
def test_wrapper_addERC20Collateral(accounts, erc721mock, wrapper, niftsy20,
                                    dai, weth, trmodel, TokenMock):
    #make test data
    makeNFTForTest(accounts, erc721mock, ORIGINAL_NFT_IDs)
    wrapper.setFee(protokolFee, chargeFeeAfter, niftsy20,
                   {"from": accounts[0]})
    dai.transfer(accounts[1], ERC20_COLLATERAL_AMOUNT, {"from": accounts[0]})
    #wrap difficult nft

    niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
    unwrapAfter = chain.time() + 10

    erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0],
                       {'from': accounts[1]})
    niftsy20.approve(wrapper, TRANSFER_FEE, {'from': accounts[1]})
    makeWrapNFT(wrapper, erc721mock, ['originalTokenId'],
                [ORIGINAL_NFT_IDs[0]], accounts[1], niftsy20)
    assert niftsy20.balanceOf(accounts[1]) == 0
    assert niftsy20.balanceOf(wrapper.address) == protokolFee
    assert wrapper.lastWrappedNFTId() == 1
    checkWrappedNFT(wrapper, wrapper.lastWrappedNFTId(), erc721mock.address,
                    ORIGINAL_NFT_IDs[0], START_NATIVE_COLLATERAL, 0,
                    unwrapAfter, TRANSFER_FEE, royaltyBeneficiary,
                    ROAYLTY_PERCENT, UNWRAP_FEE_THRESHOLD)

    tokenId = wrapper.lastWrappedNFTId()
    nft = wrapper.getWrappedToken(tokenId)

    #try to add erc20 collaterals
    #there is not allowance
    with reverts("Please approve first"):
        wrapper.addERC20Collateral(tokenId, dai.address,
                                   ERC20_COLLATERAL_AMOUNT,
                                   {"from": accounts[1]})
    dai.approve(wrapper.address, ERC20_COLLATERAL_AMOUNT + 100,
                {"from": accounts[1]})
    with reverts("Low balance for add collateral"):
        wrapper.addERC20Collateral(
            tokenId, dai.address,
            ERC20_COLLATERAL_AMOUNT + ERC20_COLLATERAL_AMOUNT,
            {"from": accounts[1]})
    wrapper.addERC20Collateral(tokenId, dai.address, ERC20_COLLATERAL_AMOUNT,
                               {"from": accounts[1]})
    assert dai.balanceOf(wrapper.address) == ERC20_COLLATERAL_AMOUNT
    assert dai.balanceOf(accounts[1].address) == 0
    logging.info('coll = {}'.format(wrapper.getERC20Collateral(tokenId)))
    assert wrapper.getERC20Collateral(tokenId)[0][0] == dai.address
    assert wrapper.getERC20Collateral(tokenId)[0][1] == ERC20_COLLATERAL_AMOUNT

    #second call
    dai.transfer(accounts[1], ERC20_COLLATERAL_AMOUNT, {"from": accounts[0]})
    dai.approve(wrapper.address, ERC20_COLLATERAL_AMOUNT + 100,
                {"from": accounts[1]})
    wrapper.addERC20Collateral(tokenId, dai.address, ERC20_COLLATERAL_AMOUNT,
                               {"from": accounts[1]})
    assert wrapper.getERC20Collateral(
        tokenId)[0][1] == 2 * ERC20_COLLATERAL_AMOUNT
    assert len(wrapper.getERC20Collateral(tokenId)) == 1
    logging.info('coll = {}'.format(wrapper.getERC20Collateral(tokenId)))

    #nonexist tokenId
    dai.transfer(accounts[1], ERC20_COLLATERAL_AMOUNT, {"from": accounts[0]})
    dai.approve(wrapper.address, ERC20_COLLATERAL_AMOUNT + 100,
                {"from": accounts[1]})
    with reverts("ERC721: owner query for nonexistent token"):
        wrapper.addERC20Collateral(100, dai.address, ERC20_COLLATERAL_AMOUNT,
                                   {"from": accounts[1]})

    #not owner calls addNativeCollateral
    dai.transfer(accounts[2], ERC20_COLLATERAL_AMOUNT, {"from": accounts[0]})
    dai.approve(wrapper.address, ERC20_COLLATERAL_AMOUNT + 100,
                {"from": accounts[2]})
    wrapper.addERC20Collateral(tokenId, dai.address, ERC20_COLLATERAL_AMOUNT,
                               {"from": accounts[2]})
    assert wrapper.getERC20Collateral(
        tokenId)[0][1] == 3 * ERC20_COLLATERAL_AMOUNT
    assert len(wrapper.getERC20Collateral(tokenId)) == 1

    #add second token
    weth.transfer(accounts[1], ERC20_COLLATERAL_AMOUNT, {"from": accounts[0]})
    weth.approve(wrapper.address, ERC20_COLLATERAL_AMOUNT + 100,
                 {"from": accounts[1]})
    wrapper.addERC20Collateral(wrapper.lastWrappedNFTId(), weth.address,
                               ERC20_COLLATERAL_AMOUNT, {"from": accounts[1]})
    logging.info('coll = {}'.format(wrapper.getERC20Collateral(tokenId)))
    assert len(wrapper.getERC20Collateral(tokenId)) == 2
    assert wrapper.getERC20Collateral(tokenId)[1][0] == weth.address
    assert wrapper.getERC20Collateral(tokenId)[1][1] == ERC20_COLLATERAL_AMOUNT

    #add third token#############################
    #add erc20 in allowed address
    with reverts("Ownable: caller is not the owner"):
        wrapper.setCollateralStatus(niftsy20.address, True,
                                    {"from": accounts[1]})
    wrapper.setCollateralStatus(niftsy20.address, True, {"from": accounts[0]})

    #change MAX_ERC20_COUNT
    with reverts("Ownable: caller is not the owner"):
        wrapper.setMaxERC20CollateralCount(2, {"from": accounts[1]})
    wrapper.setMaxERC20CollateralCount(2, {"from": accounts[0]})

    niftsy20.transfer(accounts[1], ERC20_COLLATERAL_AMOUNT,
                      {"from": accounts[0]})
    niftsy20.approve(wrapper.address, ERC20_COLLATERAL_AMOUNT + 100,
                     {"from": accounts[1]})
    logging.info('before niftsy20.balanceOf(accounts[1]) = {}'.format(
        niftsy20.balanceOf(accounts[1])))
    logging.info('before niftsy20.balanceOf(wrapper.address) = {}'.format(
        niftsy20.balanceOf(wrapper.address)))

    with reverts("To much ERC20 tokens in collatteral"):
        wrapper.addERC20Collateral(tokenId, niftsy20.address,
                                   ERC20_COLLATERAL_AMOUNT,
                                   {"from": accounts[1]})
    assert len(wrapper.getERC20Collateral(tokenId)) == 2
    assert niftsy20.balanceOf(accounts[1]) == ERC20_COLLATERAL_AMOUNT
    logging.info('after niftsy20.balanceOf(accounts[1]) = {}'.format(
        niftsy20.balanceOf(accounts[1])))
    logging.info('after niftsy20.balanceOf(wrapper.address) = {}'.format(
        niftsy20.balanceOf(wrapper.address)))

    #try to add erc20 collateral for non allowanced erc20
    with reverts("To much ERC20 tokens in collatteral"):
        dai1 = _addErc20Collateral(accounts[0], accounts[1], wrapper,
                                   ERC20_COLLATERAL_AMOUNT, tokenId, TokenMock)
Exemple #15
0
def test_simple_wrap(accounts, erc721mock, wrapper, niftsy20, trmodel):
	#make test data
	makeNFTForTest(accounts, erc721mock, ORIGINAL_NFT_IDs)

	#bad _underlineContract
	with reverts(""):
		wrapper.wrap721(
			zero_address, 
			ORIGINAL_NFT_IDs[0], 
			0, 
			1e18,
			zero_address,
			0,
			0, 
            niftsy20,
			{'from':accounts[1]})
	#nonexist nft
	with reverts("ERC721: operator query for nonexistent token"):
		wrapper.wrap721(
			erc721mock.address, 
			1, 
			0, 
			1e18,
			zero_address,
			0,
			0, 
            niftsy20,
			{'from':accounts[1]})
	#there is not allowance for wrapper.address
	with reverts("ERC721: transfer caller is not owner nor approved"):
		wrapper.wrap721(
			erc721mock.address, 
			ORIGINAL_NFT_IDs[0], 
			0, 
			1e18,
			zero_address,
			0,
			0, 
            niftsy20,
			{'from':accounts[1]})
	#check ROYALTY_PERCENT
	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0], {'from':accounts[1]})
	with reverts("Royalty percent too big"):
		wrapper.wrap721(
			erc721mock.address, 
			ORIGINAL_NFT_IDs[0], 
			0, 
			1e18,
			zero_address,
			wrapper.MAX_ROYALTY_PERCENT() + 1,
			0, 
            niftsy20,
			{'from':accounts[1]})

	#check _unwraptFeeThreshold
	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[0], {'from':accounts[1]})
	with reverts("Cant set Threshold without transferFee"):
		wrapper.wrap721(
			erc721mock.address, 
			ORIGINAL_NFT_IDs[0], 
			0, 
			0,
			zero_address,
			0,
			1,
            niftsy20, 
			{'from':accounts[1]})

	#check ROYALTY_PERCENT again
	with reverts("Royalty source is transferFee"):
		wrapper.wrap721(
			erc721mock.address, 
			ORIGINAL_NFT_IDs[0], 
			0, 
			0,
			zero_address,
			wrapper.MAX_ROYALTY_PERCENT(),
			0, 
            niftsy20,
			{'from':accounts[1]})

	#check ROYALTY_address 
	with reverts("No Royalty without transferFee"):
		wrapper.wrap721(
			erc721mock.address, 
			ORIGINAL_NFT_IDs[0], 
			0, 
			0,
			royaltyBeneficiary,
			0,
			0, 
            niftsy20,
			{'from':accounts[1]})

	#check _unwrapAfter
	with reverts("Too long Wrap"):
		wrapper.wrap721(
			erc721mock.address, 
			ORIGINAL_NFT_IDs[0], 
			chain.time() + wrapper.MAX_TIME_TO_UNWRAP() + 10,
			0,
			zero_address,
			0,
			0, 
            niftsy20,
			{'from':accounts[1]})

	#check _unwraptFeeThreshold
	with reverts("Too much threshold"):
		wrapper.wrap721(
			erc721mock.address, 
			ORIGINAL_NFT_IDs[0], 
			0,
			1,
			zero_address,
			0,
			niftsy20.totalSupply() * wrapper.MAX_FEE_THRESHOLD_PERCENT() / 100 + 1, 
            niftsy20,
			{'from':accounts[1]})

	#check ROYALTY_address again
	with reverts("Royalty to zero address"):
		wrapper.wrap721(
			erc721mock.address, 
			ORIGINAL_NFT_IDs[0], 
			0,
			1,
			zero_address,
			1,
			niftsy20.totalSupply() * wrapper.MAX_FEE_THRESHOLD_PERCENT() / 100 + 1, 
            niftsy20,
			{'from':accounts[1]})


	with reverts("Ownable: caller is not the owner"):
		wrapper.setFee(protokolFee, chargeFeeAfter, niftsy20,{"from": accounts[1]})
	wrapper.setFee(protokolFee, chargeFeeAfter, niftsy20, {"from": accounts[0]})
	#does not have niftsy token for protokol fee
	with reverts("insufficient protocol fee token balance for fee"):
		wrapper.wrap721(
			erc721mock.address, 
			ORIGINAL_NFT_IDs[0], 
			0,
			0,
			zero_address,
			0,
			0, 
            niftsy20,
			{'from':accounts[1]})
	#wrap simple nft
	niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
	niftsy20.approve(wrapper, TRANSFER_FEE, {'from':accounts[1]})
	wrapper.wrap721(
		erc721mock.address, 
		ORIGINAL_NFT_IDs[0], 
		0,
		0,
		zero_address,
		0,
		0, 
        niftsy20,
		{'from':accounts[1]})
	assert niftsy20.balanceOf(accounts[1]) == 0
	assert niftsy20.balanceOf(wrapper.address) == protokolFee
	assert wrapper.lastWrappedNFTId() == 1
	assert erc721mock.ownerOf(ORIGINAL_NFT_IDs[0]) == wrapper.address
	assert wrapper.ownerOf(wrapper.lastWrappedNFTId()) == accounts[1]
	checkWrappedNFT(wrapper, 
		wrapper.lastWrappedNFTId(), 
		erc721mock.address, 
		ORIGINAL_NFT_IDs[0], 
		0, 
		0, 
		0, 
		0, 
		zero_address, 
		0, 
		0)

	#wrap difficult nft
	erc721mock.transferFrom(accounts[0], accounts[1], ORIGINAL_NFT_IDs[1], {'from':accounts[0]})
	niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
	unwrapAfter = chain.time() + 10

	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[1], {'from':accounts[1]})
	
	makeWrapNFT(wrapper, erc721mock, ['originalTokenId'], [ORIGINAL_NFT_IDs[1]], accounts[1], niftsy20)
	assert niftsy20.balanceOf(accounts[1]) == 0
	assert niftsy20.balanceOf(wrapper.address) == 2 * protokolFee
	assert wrapper.lastWrappedNFTId() == 2
	checkWrappedNFT(wrapper, 
		wrapper.lastWrappedNFTId(), 
		erc721mock.address, 
		ORIGINAL_NFT_IDs[1], 
		START_NATIVE_COLLATERAL, 
		0,  
		unwrapAfter, 
		TRANSFER_FEE, 
		royaltyBeneficiary, 
		ROAYLTY_PERCENT, 
		UNWRAP_FEE_THRESHOLD)

	logging.info('wrapper.tokenURI(wrapper.lastWrappedNFTId()) = {}'.format(wrapper.tokenURI(wrapper.lastWrappedNFTId())))
	logging.info('wrapper.getWrappedToken(wrapper.lastWrappedNFTId()) = {}'.format(wrapper.getWrappedToken(wrapper.lastWrappedNFTId())))
def test_wrapper_unWrap721_3(accounts, erc721mock, wrapper, niftsy20, dai, weth, trmodel):
	#make test data
	erc721mock.transferFrom(accounts[0], accounts[1], ORIGINAL_NFT_IDs[2], {'from':accounts[0]})
	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[2], {'from':accounts[1]})
	logging.info('balanceOf(wrapper.address) = {}'.format(niftsy20.balanceOf(wrapper.address)))
	logging.info('balanceOf(royaltyBeneficiary) = {}'.format(niftsy20.balanceOf(royaltyBeneficiary)))
	#wrap difficult nft

	niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
	unwrapAfter = chain.time() + 10
	
	before_balance = niftsy20.balanceOf(wrapper.address) 
	niftsy20.approve(wrapper, TRANSFER_FEE, {'from':accounts[1]})
	makeWrapNFT(wrapper, erc721mock, ['originalTokenId'], [ORIGINAL_NFT_IDs[2]], accounts[1], niftsy20)
	assert niftsy20.balanceOf(accounts[1]) == 0
	assert niftsy20.balanceOf(wrapper.address) == before_balance + protokolFee
	assert wrapper.lastWrappedNFTId() == 3

	tokenId = wrapper.lastWrappedNFTId()
	nft = wrapper.getWrappedToken(tokenId)

	c = round(UNWRAP_FEE_THRESHOLD/TRANSFER_FEE) + 1
	backedTokens = 0
	royalty_tokens = 0
	i = 0
	for i in range(c):
		wrapper.approve(accounts[i+2].address, tokenId, {"from": accounts[i+1]})
		niftsy20.transfer(accounts[i + 1].address, TRANSFER_FEE, {"from": accounts[0]}) #add niftsy tokens to pay transfer fee
		niftsy20.approve(trmodel, TRANSFER_FEE, {'from':accounts[i+1]})
		wrapper.transferFrom(accounts[i+1].address, accounts[i+2].address, tokenId, {"from": accounts[i+2]}) #make transfers
		royalty_tokens += TRANSFER_FEE*nft[7]/100
		backedTokens += TRANSFER_FEE - TRANSFER_FEE*nft[7]/100

	#check backedTokens after transfers
	nft = wrapper.getWrappedToken(tokenId)
	logging.info('nft2 = {}'.format(nft))
	assert nft[3] == backedTokens

	#move date 
	chain.sleep(100)
	chain.mine()
	logging.info('wrapper.totalSupply() = {}'.format(wrapper.totalSupply()))
	logging.info('accounts[i+2].balance() = {}'.format(accounts[i+2].balance()))
	logging.info('wrapper.balanceOf(accounts[i+2]) = {}'.format(wrapper.balanceOf(accounts[i+2])))
	logging.info('niftsy20.balanceOf(accounts[i+2]) = {}'.format(niftsy20.balanceOf(accounts[i+2])))
	logging.info('wrapper.balance() = {}'.format(wrapper.balance()))
	logging.info('niftsy20.balanceOf(wrapper.address) = {}'.format(niftsy20.balanceOf(wrapper.address)))
	balance_eth = accounts[i+2].balance()
	balance_erc20 = niftsy20.balanceOf(wrapper.address)
	balance_erc20_owner = niftsy20.balanceOf(accounts[i+2].address)
	logging.info('********************AFTER UNWRAP*************')
	#unwrap
	wrapper.unWrap721(tokenId, {"from": accounts[i+2]})
	assert wrapper.totalSupply() == 0
	assert wrapper.balanceOf(accounts[i+2].address) == 0
	assert niftsy20.balanceOf(accounts[i+2].address) == balance_erc20_owner + backedTokens
	assert erc721mock.ownerOf(ORIGINAL_NFT_IDs[2]) == accounts[i+2].address
	assert accounts[i+2].balance() == balance_eth + nft[2]
	assert niftsy20.balanceOf(wrapper.address) == balance_erc20 - backedTokens
	assert niftsy20.balanceOf(royaltyBeneficiary) == royalty_tokens

	logging.info('accounts[i+2].balance() = {}'.format(accounts[i+2].balance()))
	logging.info('wrapper.balanceOf(accounts[i+2]) = {}'.format(wrapper.balanceOf(accounts[i+2])))
	logging.info('niftsy20.balanceOf(accounts[i+2]) = {}'.format(niftsy20.balanceOf(accounts[i+2])))
	logging.info('wrapper.balance() = {}'.format(wrapper.balance()))
	logging.info('niftsy20.balanceOf(wrapper.address) = {}'.format(niftsy20.balanceOf(wrapper.address)))
	with reverts("ERC721: owner query for nonexistent token"):
		wrapper.ownerOf(tokenId)

	#wrap this nft again by first nft owner  - after unwrap
	#prepare test data
	niftsy20.transfer(accounts[1], protokolFee, {"from": accounts[0]})
	unwrapAfter = chain.time() + 10
	erc721mock.transferFrom(accounts[i+2], accounts[1], ORIGINAL_NFT_IDs[2], {"from": accounts[i+2]} )
	erc721mock.approve(wrapper.address, ORIGINAL_NFT_IDs[2], {'from':accounts[1]})
	
	#wrap
	before_balance = niftsy20.balanceOf(wrapper.address) 
	niftsy20.approve(wrapper, TRANSFER_FEE, {'from':accounts[1]})
	makeWrapNFT(wrapper, erc721mock, ['originalTokenId'], [ORIGINAL_NFT_IDs[2]], accounts[1], niftsy20)
	assert niftsy20.balanceOf(accounts[1]) == 0
	assert wrapper.balanceOf(accounts[1]) == 1
	assert niftsy20.balanceOf(wrapper.address) == before_balance + protokolFee
	assert wrapper.lastWrappedNFTId() == 4

	tokenId = wrapper.lastWrappedNFTId()

	#check new wrappedNFT
	checkWrappedNFT(wrapper, 
		tokenId, 
		erc721mock.address, 
		ORIGINAL_NFT_IDs[2], 
		START_NATIVE_COLLATERAL, 
		0,  
		unwrapAfter, 
		TRANSFER_FEE, 
		royaltyBeneficiary, 
		ROAYLTY_PERCENT, 
		UNWRAP_FEE_THRESHOLD)
	nft = wrapper.getWrappedToken(tokenId)
	logging.info('new nft = {}'.format(nft))