In the batchMint() function of the erc1155 contract, the batchMint() function use memory for the parameters.
function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
public
onlyRole(MINTER_ROLE)
{
_mintBatch(to, ids, amounts, data);
}
Wouldn't it be more gas efficient to use calldata instead?
Hey @Dimitri_Borgers, welcome to the community and thanks for your question 
In regards to the calldata
vs memory
, yes, it’d be more efficient but improvements overall are less than 1%
and there are usage considerations about using calldata
instead.
You can see the discussion in Github, particularly in this comment, you’ll find an explanation about that.
The answer is that calldata
can’t be built during execution when sending it to another contract, so you couldn’t pass a parameter correctly because the only way is via memory
.
Hope this helps.
Best!
1 Like
Super helpful, thank you!