Fix ERC1155 supply tracking (#2956)
Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
(cherry picked from commit 4088540aef)
This commit is contained in:
committed by
Francisco Giordano
parent
3db4393b58
commit
70138680cf
@ -8,37 +8,14 @@ import "../token/ERC1155/extensions/ERC1155Supply.sol";
|
||||
contract ERC1155SupplyMock is ERC1155Mock, ERC1155Supply {
|
||||
constructor(string memory uri) ERC1155Mock(uri) {}
|
||||
|
||||
function _mint(
|
||||
address account,
|
||||
uint256 id,
|
||||
uint256 amount,
|
||||
bytes memory data
|
||||
) internal virtual override(ERC1155, ERC1155Supply) {
|
||||
super._mint(account, id, amount, data);
|
||||
}
|
||||
|
||||
function _mintBatch(
|
||||
function _beforeTokenTransfer(
|
||||
address operator,
|
||||
address from,
|
||||
address to,
|
||||
uint256[] memory ids,
|
||||
uint256[] memory amounts,
|
||||
bytes memory data
|
||||
) internal virtual override(ERC1155, ERC1155Supply) {
|
||||
super._mintBatch(to, ids, amounts, data);
|
||||
}
|
||||
|
||||
function _burn(
|
||||
address account,
|
||||
uint256 id,
|
||||
uint256 amount
|
||||
) internal virtual override(ERC1155, ERC1155Supply) {
|
||||
super._burn(account, id, amount);
|
||||
}
|
||||
|
||||
function _burnBatch(
|
||||
address account,
|
||||
uint256[] memory ids,
|
||||
uint256[] memory amounts
|
||||
) internal virtual override(ERC1155, ERC1155Supply) {
|
||||
super._burnBatch(account, ids, amounts);
|
||||
super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,56 +31,28 @@ abstract contract ERC1155Supply is ERC1155 {
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev See {ERC1155-_mint}.
|
||||
* @dev See {ERC1155-_beforeTokenTransfer}.
|
||||
*/
|
||||
function _mint(
|
||||
address account,
|
||||
uint256 id,
|
||||
uint256 amount,
|
||||
bytes memory data
|
||||
) internal virtual override {
|
||||
super._mint(account, id, amount, data);
|
||||
_totalSupply[id] += amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev See {ERC1155-_mintBatch}.
|
||||
*/
|
||||
function _mintBatch(
|
||||
function _beforeTokenTransfer(
|
||||
address operator,
|
||||
address from,
|
||||
address to,
|
||||
uint256[] memory ids,
|
||||
uint256[] memory amounts,
|
||||
bytes memory data
|
||||
) internal virtual override {
|
||||
super._mintBatch(to, ids, amounts, data);
|
||||
for (uint256 i = 0; i < ids.length; ++i) {
|
||||
_totalSupply[ids[i]] += amounts[i];
|
||||
super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
|
||||
|
||||
if (from == address(0)) {
|
||||
for (uint256 i = 0; i < ids.length; ++i) {
|
||||
_totalSupply[ids[i]] += amounts[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev See {ERC1155-_burn}.
|
||||
*/
|
||||
function _burn(
|
||||
address account,
|
||||
uint256 id,
|
||||
uint256 amount
|
||||
) internal virtual override {
|
||||
super._burn(account, id, amount);
|
||||
_totalSupply[id] -= amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev See {ERC1155-_burnBatch}.
|
||||
*/
|
||||
function _burnBatch(
|
||||
address account,
|
||||
uint256[] memory ids,
|
||||
uint256[] memory amounts
|
||||
) internal virtual override {
|
||||
super._burnBatch(account, ids, amounts);
|
||||
for (uint256 i = 0; i < ids.length; ++i) {
|
||||
_totalSupply[ids[i]] -= amounts[i];
|
||||
if (to == address(0)) {
|
||||
for (uint256 i = 0; i < ids.length; ++i) {
|
||||
_totalSupply[ids[i]] -= amounts[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user