Compare commits

...

2 Commits

Author SHA1 Message Date
8d7a871609 4.3.3 2021-11-11 13:04:38 -03:00
c9acfb3c23 Fix ERC1155 supply tracking (#2956)
Co-authored-by: Francisco Giordano <frangio.1@gmail.com>
(cherry picked from commit 4088540aef)
2021-11-08 19:22:25 -03:00
6 changed files with 26 additions and 73 deletions

View File

@ -1,5 +1,9 @@
# Changelog # Changelog
## 4.3.3 (2021-11-11)
* `ERC1155Supply`: Handle `totalSupply` changes by hooking into `_beforeTokenTransfer` to ensure consistency of balances and supply during `IERC1155Receiver.onERC1155Received` calls.
## 4.3.2 (2021-09-14) ## 4.3.2 (2021-09-14)
* `UUPSUpgradeable`: Add modifiers to prevent `upgradeTo` and `upgradeToAndCall` being executed on any contract that is not the active ERC1967 proxy. This prevents these functions being called on implementation contracts or minimal ERC1167 clones, in particular. * `UUPSUpgradeable`: Add modifiers to prevent `upgradeTo` and `upgradeToAndCall` being executed on any contract that is not the active ERC1967 proxy. This prevents these functions being called on implementation contracts or minimal ERC1167 clones, in particular.

View File

@ -8,37 +8,14 @@ import "../token/ERC1155/extensions/ERC1155Supply.sol";
contract ERC1155SupplyMock is ERC1155Mock, ERC1155Supply { contract ERC1155SupplyMock is ERC1155Mock, ERC1155Supply {
constructor(string memory uri) ERC1155Mock(uri) {} constructor(string memory uri) ERC1155Mock(uri) {}
function _mint( function _beforeTokenTransfer(
address account, address operator,
uint256 id, address from,
uint256 amount,
bytes memory data
) internal virtual override(ERC1155, ERC1155Supply) {
super._mint(account, id, amount, data);
}
function _mintBatch(
address to, address to,
uint256[] memory ids, uint256[] memory ids,
uint256[] memory amounts, uint256[] memory amounts,
bytes memory data bytes memory data
) internal virtual override(ERC1155, ERC1155Supply) { ) internal virtual override(ERC1155, ERC1155Supply) {
super._mintBatch(to, ids, amounts, data); super._beforeTokenTransfer(operator, from, 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);
} }
} }

View File

@ -1,7 +1,7 @@
{ {
"name": "@openzeppelin/contracts", "name": "@openzeppelin/contracts",
"description": "Secure Smart Contract library for Solidity", "description": "Secure Smart Contract library for Solidity",
"version": "4.3.2", "version": "4.3.3",
"files": [ "files": [
"**/*.sol", "**/*.sol",
"/build/contracts/*.json", "/build/contracts/*.json",

View File

@ -30,56 +30,28 @@ abstract contract ERC1155Supply is ERC1155 {
} }
/** /**
* @dev See {ERC1155-_mint}. * @dev See {ERC1155-_beforeTokenTransfer}.
*/ */
function _mint( function _beforeTokenTransfer(
address account, address operator,
uint256 id, address from,
uint256 amount,
bytes memory data
) internal virtual override {
super._mint(account, id, amount, data);
_totalSupply[id] += amount;
}
/**
* @dev See {ERC1155-_mintBatch}.
*/
function _mintBatch(
address to, address to,
uint256[] memory ids, uint256[] memory ids,
uint256[] memory amounts, uint256[] memory amounts,
bytes memory data bytes memory data
) internal virtual override { ) internal virtual override {
super._mintBatch(to, ids, amounts, data); super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
for (uint256 i = 0; i < ids.length; ++i) {
_totalSupply[ids[i]] += amounts[i]; if (from == address(0)) {
for (uint256 i = 0; i < ids.length; ++i) {
_totalSupply[ids[i]] += amounts[i];
}
} }
}
/** if (to == address(0)) {
* @dev See {ERC1155-_burn}. for (uint256 i = 0; i < ids.length; ++i) {
*/ _totalSupply[ids[i]] -= amounts[i];
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];
} }
} }
} }

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "openzeppelin-solidity", "name": "openzeppelin-solidity",
"version": "4.3.2", "version": "4.3.3",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "openzeppelin-solidity", "name": "openzeppelin-solidity",
"version": "4.3.2", "version": "4.3.3",
"license": "MIT", "license": "MIT",
"bin": { "bin": {
"openzeppelin-contracts-migrate-imports": "scripts/migrate-imports.js" "openzeppelin-contracts-migrate-imports": "scripts/migrate-imports.js"

View File

@ -1,7 +1,7 @@
{ {
"name": "openzeppelin-solidity", "name": "openzeppelin-solidity",
"description": "Secure Smart Contract library for Solidity", "description": "Secure Smart Contract library for Solidity",
"version": "4.3.2", "version": "4.3.3",
"files": [ "files": [
"/contracts/**/*.sol", "/contracts/**/*.sol",
"/build/contracts/*.json", "/build/contracts/*.json",