Bulk nft transfers using relayer

There is a common problem people transferring from metamask to ledger/trezor are having.

The gas is expensive and if you have 30 or 100 Nfts it can be a lengthy/expensive process.

Would be so useful if the same concept existed for NFT. We can come to tornado and connect our wallet and approve all nft and give a note.

Then the withdrawal happens via note and the receiver address is entered.

correct me if I’m wrong. Do you want to send multiple NFTs in one transaction cheaply?

in that case, there are a few products that do that for you. just google “NFT multi-sender”

relayer also have to pay gas and they will charge you for that + extra fee.

all the notes or any magic will cost more gas in general. that might not be too helpful for you. and given the “Non-fungible” nature of the NFT. there will be no way to send it around anonymously. so tornado cash probably not gonna be helpful there either.

Hey @yoyoismee.eth so tools like NFT multisender only send NFTs from the same contract to multiple addresses.

What I am looking for is a tool that transfers different NFTs from multiple contracts from ONE wallet to another single wallet.

Currently it is possible with opensea but it requires the sending account to be holding ETH for it to happen.

I am looking for a tool that will allow you to do it without having to transfer gas money to the wallet thats holding the nft. From my research the only way you can do that is by creating a “PAYMASTER” or relay that is funded for gas money.

The anonymity is not really the goal here but the fact that if you want to transfer your tokens from 1 wallet to another can take hours and cost 100s in gas fees needs to be looked at.

Few things:

  1. Tornado relayers can only accept withdrawal notes from users because the user has already deposited funds into a tornado pool (meaning the relayer only has to verify the instructioned withdrawal note against the pool to execute the tx). In the case you’re describing, the user has not deposited any NFTs into any pool for a relayer to verify against. So a note would render useless.

  2. If you are trying to transfer all the same class of NFTs (example: 30 BAYCs), then you could use the setApprovalForAll() function in the ERC721 contract to give permission to a contract that a relayer might have access control over in order to then transfer all your NFTs. This would be similar to (#1) setting a pool deposit for a relayer to verify against. But if you’re trying to transfer multiple classes (example: 15 BAYC, 10 Wrapped CryptoPunks, 5 CryptoKitties), then you would first need to call setApprovalForAll() for every NFT class individually

  3. The only way you could get away with doing this without ETH in the sender’s wallet would be if the NFT integrated meta-transactions upon deployment. This is not a common practice, so it’s unlikely it would apply to any NFTs you are interested in mass transferring. Additionally, relayers don’t work for free. They work for fees. You’d need to compensate them for all the gas costs they’ll incur for transferring all your NFTs for you. You can’t just get free gas for no reason

There’s another NFT standard - ERC1155 - that allows you to transfer multiple NFTs and Fungible Tokens all in a single transaction yourself. However, this won’t help you if your NFTs are ERC721 or, still, if you have multiple classes of ERC1155 (would still require multiple txs)

It would be a great product if something like this existed. But unfortunately the architecture of Tornado Cash isn’t exactly going to be very portable to this application. Best of luck

Hey thank you so much for your answer.

What if the account that has the erc721 tokens goes and actually transfers them into a pool in bulk and deposits ether with them as well.

And then the withdrawer enters the note to withdraw and the gases are deducted from the depositors ether and the remaining ether is also sent to the new receiver.

If you are able to deposit all the NFTs into a pool (and pay all the gas to do so), then why wouldn’t you just transfer it all to the destination “receiver” address you want them to end up in? Injecting the pool into the process is just an extra step that means you have to pay double gas + an additional relayer fee. The only reason a pool is needed with Tornado is because it mixes the funds to introduce some amount anonymity. You said you don’t care about anonymity so what do you need a pool for?

Yes I see what you mean.

So essentially what’s needed is a tool that will setApprovalForAll in bulk ?

Then transfer all ?

How does the transfer happen in one tx ?

so here’s how it work.

no matter what. you will have to do the approval on each NFT contract yourself. (unless it’s a special contract that supports something special. e.g. opensea proxy)

it’s a security that you can’t bypass.

then there are probably 2 reasonable options.

  • use publicly available bunk transfer. so just 1 call per NFT contract (can be multiple NFT)
  • use some bulk transfer contracts that can send from multiple contracts in 1 tx. but welp you might have to find this yourself.

in the end. it not gonna be like 1 cheap and easy transaction.
and whatever you do. the gas gonna can’t be too much chapter than what already exists. but maybe it can be way more expensive if you do something fancy.

With all due respect, this isn’t the right forum for this topic. You want to find an NFT community to discuss this with. The OpenSea discord might be a good place to start. Best of luck

1 Like