OpenSea - Smart contract - Split Revenue

Hello Everyone,
We are a graphic design studio and we have a client who wants us to mint his design works to the OpenSea as NFTs and share the revenue when NFTs sold. (80-20%)
So, we are willing to find a solution to split the revenue in two different addresses (one address will receive 80% of the revenue and the other address will receive 20%) automatically. Is this possible, or anyone is willing to do this job for us?

Thank you for the answer. I'd appreciate if I could get more ideas from the community.

I do not see any problem in the division of payments, since if both have access to the wallet that will receive the ether from openSea, the division can be done manually since everything is registered in the blockchain

but if it is your own marketplace for your company, if you can make a contract that divides those commissions

I'm not sure, but seems like "multi-signature wallets" are best to solve this problem. So "the safe box wallet" will receive the revenue from OpenSea, then the both parties will calculate the share and make a transfer, if both of them agrees and approves it from multisig wallet... Is this mentality correct?

that would be the best option to your problem

this service is a good option
https://gnosis-safe.io/

1 Like

For the best smart contract development

alternatively, the payout address could be a payment splitter smart contract contract

Thank you @ihorbond for your helpful reply. Can you do this contract on behalf of us and give us a quotation?

Sure, I've done it for one of my clients before. Please reach out

  • telegram: @ibodnarchuk
  • discord: ihorbond#5688
  • email ihor at codespaceinc.co

Just wondering why the need for an extra splitter contract? Can one just make sure the contract knows of the other party's address and include this logic inside the withdraw function?

Some pseudo code for example:

withdraw() public payable onlyOwner {
  payable(owner()).transfer( .2 * balance );
  payable(<some other party's address>).transfer( remainder of balance );
}

Then when the owner conducts a withdrawal both parties get the proper amounts. Or maybe augment this where either party can initiate a withdrawal.

This could work of course. What I don't like about this approach is that with onlyOwner one person would be in control of withdrawal, what if they refuse ? or lose access to wallet or get hacked ? In case we use AccessControl and assign each party role to be able to do the withdrawal we now have to keep track and makr sure one party can't withdraw more than they should leaving the other party with nothing. Payment splitter is also nice for secondary marketplace royalties splitting since OpenSea for example only ever sends payments to a single address.

P.S. withdraw function shouldn't be payable, it doesn't receive any ether and probably external (unless called from smart contract code somewhere which would be rare)

1 Like

@ihorbond i was thinking the same but my doubt is, what about the initial public purchase?
will the "split smart contract address" be used also for the initial purchase of the NFT?

@ihorbond Thanks for sharing your insights on this topic. I am a dev myself, and I am implementing a payment splitter for OpenSea royalties.

I am not using the PaymentSplitter module by OpenSea.

Instead, I plan to create a withdraw function that splits and withdraws ETH and WETH balance to the parties in the correct proportion.

All parties will be able to access it as we will not use onlyOwner. Instead, we will just block access for everyone except the concerned parties using the following code.

require(msg.sender == addr1 || msg.sender == addr2 || msg.sender == owner(), "Invalid sender");

What do you think about this approach? I don't see any problems with it.

1 Like

@avi Is your split contract working? I am also having trouble to get OpenSea royalties split (I am implementing IManifold interface). Thanks!

use splitter contract instead of wallet addy on opensea. so once you get any fund in your split contract, amount can be transferred as per the set parameters.

Looks like this is the only way right now. Thanks!

Hello. I see you are looking for a professional developer for your open sea payment splitter, if you still need help send a message to my telegram: @evm_dev
Regards!!