I’m trying to implement a batchBuy function on 4.0 but I’m getting hit by scoping issues. More specifically, I’m in need to modify _balances and _owners but they are declared as private.
Here is a non-complete implementation:
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.1;
import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";
//...
contract Abc is ERC721Upgradeable {
//...
function buyBatch(uint256[] memory tokenIds) public payable {
require(msg.value >= COST * tokenIds.length, "not enough funds to cover the cost of each token");
_balances[msg.sender] += tokenIds.length;
for (uint i = 0; i < tokenIds.length; i++) {
_beforeTokenTransfer(address(0), msg.sender, tokenIds[i]);
_owners[tokenIds[i]] = msg.sender;
emit Transfer(address(0), msg.sender, tokenIds[i]);
}
}
}
Also, I’m thinking that _balances[msg.sender] += tokenIds.length; could be moved inside the for loop, below _beforeTokenTransfer and change to _balances[msg.sender] += 1
I’m trying to keep the parent contract intact so I’m not sure if there is a way to do it.