How can I merge 2 transactions(mint an transfer)in lazy minting?

I want the only display The second(transfer) Tokens Transferred:

From 0xd***97a  To 0x6***2c17    ERC-1155 For 1 of TokenID [1020015317613]

function _transferToken(
        address signer,
        Voucher memory voucher,
        bytes memory data
    ) internal returns (bool) {
        IERC1155Upgradeable tokenContract = IERC1155Upgradeable(_tokenAddress);
        uint256 balance = token1Contract.balanceOf(signer,;
        if (balance == 0) {
            tokenContract .mint(signer,,, data);
        tokenContract .safeTransferFrom(
        return true;

Hello @night-king

Etherscan shows what happens onchain. That is extracted from the events. If your contract does mint to 0xd***97a and then transfers from 0xd***97a to 0x6***2c17 ... then etherscan will show both operations, because they both are part of the history of the token.

If you want only one operation shown, then you should directly mint to the end recipient (that will be from 0x0000...0000 though)

Thanks for you reply, @Amxx .I understand your idea, but i want only one operation shown which not from 0x0000....000 but 0xd***97a just like opensea implementation.

As @Amxx, mentioned you can't really change what is shown - that is just reflecting the on-chain activity.

However, you could change your implementation to get this effect. In effect, you would not do lazy minting, but instead mint all NFTs at contract launch to a certain owner, and then at the time of mint, it's really just one transfer from 0xd***97a to 0x6***2c17, which it seems was desired.

I have test on opensea:

found: the mint address is a opensea's contract, not a user's address

So,I have the answer now.

for a lazy minting token, we can do this to show customer only one transfer:

step1: minting contract(contract1) mint the token.
step2: contract1 transfer this token to voucher's owner(0xd***97a).
step3: when buyer coming, he will call trading contract(contract2), transfer to himself.
also. contract2 should call contract1 to execute step1, step2.

What do you think?
@Amxx @0xLostArchitect