Skip to content

Commit

Permalink
Formatting.
Browse files Browse the repository at this point in the history
  • Loading branch information
BillSchumacher committed Mar 24, 2024
1 parent 459514c commit ce36c42
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 79 deletions.
12 changes: 11 additions & 1 deletion packages/foundry/contracts/BurntMintyBurny.sol
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,17 @@ contract BurntMintyBurny is
burn(500000 * 10 ** decimals());
}

function mintRatio() public view override (ERC20ProofOfBurn, ERC20ProofOfBurner, ERC20ProofOfMint, ERC20ProofOfMinter) returns (uint256) {
function mintRatio()
public
view
override(
ERC20ProofOfBurn,
ERC20ProofOfBurner,
ERC20ProofOfMint,
ERC20ProofOfMinter
)
returns (uint256)
{
return 5000;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

error NoTokensToMint();
error NoTokensToMint();
2 changes: 0 additions & 2 deletions packages/foundry/contracts/extensions/ERC20ProofOfBurn.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@ import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "./ERC20MintyBurnyErrors.sol";


/// @title A smart contract that checks for burned tokens and mints new tokens based on the burned tokens.
/// @author BillSchumacher
abstract contract ERC20ProofOfBurn is Context, ERC20 {

uint256 private _lastBurned;
address[] internal _burnAddresses;
address[] internal _burnContracts;
Expand Down
24 changes: 16 additions & 8 deletions packages/foundry/contracts/extensions/ERC20ProofOfBurner.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,10 @@ import "./ERC20MintyBurnyErrors.sol";
/// requires burnerContracts to implement ERC20BurnRegistry
/// @author BillSchumacher
abstract contract ERC20ProofOfBurner is Context, ERC20 {
mapping (address => uint256) private _lastBurnerBurned;
mapping(address => uint256) private _lastBurnerBurned;
address[] internal _burnerContracts;

constructor(
address[] memory burnerContracts
) {
constructor(address[] memory burnerContracts) {
_burnerContracts = burnerContracts;
}

Expand Down Expand Up @@ -45,7 +43,8 @@ abstract contract ERC20ProofOfBurner is Context, ERC20 {
uint256 contractLength = eligibleBurnerContracts.length;
address sender = _msgSender();
for (uint256 i; i < contractLength; i++) {
ERC20BurnRegistry tokenContract = ERC20BurnRegistry(eligibleBurnerContracts[i]);
ERC20BurnRegistry tokenContract =
ERC20BurnRegistry(eligibleBurnerContracts[i]);
balance += tokenContract.burnedFrom(sender);
}
return balance;
Expand Down Expand Up @@ -76,7 +75,10 @@ abstract contract ERC20ProofOfBurner is Context, ERC20 {
/// @dev Update the mint registry or perform other accounting. Override to customize.
/// @param account (address) - the address of the account.
/// @param value (uint256) - the amount of tokens minted.
function afterMintBurnerBurned(address account, uint256 value) internal virtual {}
function afterMintBurnerBurned(
address account,
uint256 value
) internal virtual {}

/// @dev Mints the burned tokens for the configured contracts and addresses.
/// @param account (address) - the address of the account.
Expand All @@ -91,7 +93,8 @@ abstract contract ERC20ProofOfBurner is Context, ERC20 {
if (balance <= tokensLastBurned) {
revert NoTokensToMint();
}
uint256 tokens = (balance - tokensLastBurned) * mintBurnerRatio() / 10000;
uint256 tokens =
(balance - tokensLastBurned) * mintBurnerRatio() / 10000;
setLastBurnerBurned(balance);
_mint(account, tokens);
return tokens;
Expand All @@ -100,7 +103,12 @@ abstract contract ERC20ProofOfBurner is Context, ERC20 {
/// @notice Mints the burned tokens for the configured contracts and burner.
/// @dev Mints the burned tokens for the configured contracts and burner.
/// @return tokens (uint256) - the amount of tokens minted.
function mintBurnerBurned() public payable virtual returns (uint256 tokens) {
function mintBurnerBurned()
public
payable
virtual
returns (uint256 tokens)
{
address sender = _msgSender();
beforeMintBurnerBurned(sender, sender);
tokens = _doMintBurnerBurned(sender);
Expand Down
6 changes: 1 addition & 5 deletions packages/foundry/contracts/extensions/ERC20ProofOfMint.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,10 @@ import "./ERC20MintyBurnyErrors.sol";
/// @title A smart contract that checks for minted tokens and mints new tokens based on the minted tokens.
/// @author BillSchumacher
abstract contract ERC20ProofOfMint is Context, ERC20 {

uint256 private _lastMinted;
address[] internal _mintContracts;

constructor(
address[] memory mintContracts
) {
constructor(address[] memory mintContracts) {
_mintContracts = mintContracts;
}

Expand Down Expand Up @@ -56,7 +53,6 @@ abstract contract ERC20ProofOfMint is Context, ERC20 {
return 5000;
}


/// @notice Get the ratio of tokens to mint for ProofOfMint.
/// @dev Returns the ratio of tokens to mint for ProofOfMint. Override to customize. Divided by 10000. 5000 = 0.5 (default)
/// @return (uint256) - the ratio of tokens to mint.
Expand Down
24 changes: 16 additions & 8 deletions packages/foundry/contracts/extensions/ERC20ProofOfMinter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,10 @@ import "./ERC20MintRegistry.sol";
/// requires minterContracts to implement ERC20MintRegistry
/// @author BillSchumacher
abstract contract ERC20ProofOfMinter is Context, ERC20 {
mapping (address => uint256) private _lastMinterMinted;
mapping(address => uint256) private _lastMinterMinted;
address[] internal _minterContracts;

constructor(
address[] memory minterContracts
) {
constructor(address[] memory minterContracts) {
_minterContracts = minterContracts;
}

Expand Down Expand Up @@ -45,7 +43,8 @@ abstract contract ERC20ProofOfMinter is Context, ERC20 {
uint256 contractLength = eligibleMinterContracts.length;
address sender = _msgSender();
for (uint256 i; i < contractLength; i++) {
ERC20MintRegistry tokenContract = ERC20MintRegistry(eligibleMinterContracts[i]);
ERC20MintRegistry tokenContract =
ERC20MintRegistry(eligibleMinterContracts[i]);
balance += tokenContract.mintedBy(sender);
}
return balance;
Expand Down Expand Up @@ -76,7 +75,10 @@ abstract contract ERC20ProofOfMinter is Context, ERC20 {
/// @dev Update the mint registry or perform other accounting. Override to customize.
/// @param account (address) - the address of the account.
/// @param value (uint256) - the amount of tokens minted.
function afterMintMinterMinted(address account, uint256 value) internal virtual {}
function afterMintMinterMinted(
address account,
uint256 value
) internal virtual {}

/// @dev Mints the minted tokens for the configured contracts and sender.
/// @param account (address) - the address of the account.
Expand All @@ -91,7 +93,8 @@ abstract contract ERC20ProofOfMinter is Context, ERC20 {
if (balance <= tokensLastMinted) {
revert NoTokensToMint();
}
uint256 tokens = (balance - tokensLastMinted) * mintMinterRatio() / 10000;
uint256 tokens =
(balance - tokensLastMinted) * mintMinterRatio() / 10000;
setLastMinterMinted(balance);
_mint(account, tokens);
return tokens;
Expand All @@ -100,7 +103,12 @@ abstract contract ERC20ProofOfMinter is Context, ERC20 {
/// @notice Mints the minted tokens for the configured contracts and sender.
/// @dev Mints the minted tokens for the configured contracts and sender.
/// @return tokens (uint256) - the amount of tokens minted.
function mintMinterMinted() public payable virtual returns (uint256 tokens) {
function mintMinterMinted()
public
payable
virtual
returns (uint256 tokens)
{
address sender = _msgSender();
beforeMintMinterMinted(sender, sender);
tokens = _doMintMinterMinted(sender);
Expand Down
98 changes: 44 additions & 54 deletions packages/foundry/test/BurntMintyBurny.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ contract BurntMintyBurnyTest is Test {
burntMintyBurny.mintBurned();
assertTrue(
burntMintyBurny.totalSupply() - minted
== mintyBurny.balanceOf(address(0)) * burntMintyBurny.burnMintRatio()
/ 10000
== mintyBurny.balanceOf(address(0))
* burntMintyBurny.burnMintRatio() / 10000
);
assertTrue(
burntMintyBurny.lastBurned() == mintyBurny.balanceOf(address(0))
Expand All @@ -47,13 +47,13 @@ contract BurntMintyBurnyTest is Test {
burntMintyBurny.mintBurnedFor(vm.addr(1));
assertTrue(
burntMintyBurny.totalSupply() - minted
== mintyBurny.balanceOf(address(0)) * burntMintyBurny.burnMintRatio()
/ 10000
== mintyBurny.balanceOf(address(0))
* burntMintyBurny.burnMintRatio() / 10000
);
assertTrue(
burntMintyBurny.balanceOf(vm.addr(1))
== mintyBurny.balanceOf(address(0)) * burntMintyBurny.burnMintRatio()
/ 10000
== mintyBurny.balanceOf(address(0))
* burntMintyBurny.burnMintRatio() / 10000
);
}

Expand Down Expand Up @@ -84,8 +84,7 @@ contract BurntMintyBurnyTest is Test {

function testCurrentMinted() public {
assertTrue(
burntMintyBurny.getCurrentMinted()
== mintyBurny.totalSupply()
burntMintyBurny.getCurrentMinted() == mintyBurny.totalSupply()
);
}

Expand Down Expand Up @@ -200,7 +199,6 @@ contract BurntMintyBurnyTest is Test {
assertTrue(burntMintyBurny.burnMintRatio() == 5000);
}


function testMintBurnerBurned() public {
vm.deal(vm.addr(1), 100000 * 10 ** 18);
vm.startPrank(vm.addr(1));
Expand All @@ -210,16 +208,18 @@ contract BurntMintyBurnyTest is Test {
burntMintyBurny.mintBurnerBurned();
assertTrue(
burntMintyBurny.totalSupply() - minted
== mintyBurny.burnedFrom(vm.addr(1)) * burntMintyBurny.mintBurnerRatio()
/ 10000
== mintyBurny.burnedFrom(vm.addr(1))
* burntMintyBurny.mintBurnerRatio() / 10000
);
assertTrue(
burntMintyBurny.lastBurnerBurned() == mintyBurny.burnedFrom(vm.addr(1))
burntMintyBurny.lastBurnerBurned()
== mintyBurny.burnedFrom(vm.addr(1))
);

try burntMintyBurny.mintBurnerBurned() {
assertTrue(
false, "mintBurnerBurned() should revert when no tokens to mint."
false,
"mintBurnerBurned() should revert when no tokens to mint."
);
} catch (bytes memory reason) {
bytes4 expectedSelector = NoTokensToMint.selector;
Expand All @@ -238,24 +238,24 @@ contract BurntMintyBurnyTest is Test {
burntMintyBurny.mintBurnerBurnedFor(vm.addr(2));
assertTrue(
burntMintyBurny.totalSupply() - minted
== mintyBurny.burnedFrom(vm.addr(1)) * burntMintyBurny.mintBurnerRatio()
/ 10000
== mintyBurny.burnedFrom(vm.addr(1))
* burntMintyBurny.mintBurnerRatio() / 10000
);
assertTrue(
burntMintyBurny.lastBurnerBurned() == mintyBurny.burnedFrom(vm.addr(1))
burntMintyBurny.lastBurnerBurned()
== mintyBurny.burnedFrom(vm.addr(1))
);
assertTrue(
burntMintyBurny.balanceOf(vm.addr(2))
== mintyBurny.burnedFrom(vm.addr(1)) * burntMintyBurny.mintBurnerRatio()
/ 10000
);
assertTrue(
burntMintyBurny.balanceOf(vm.addr(1)) == 0
== mintyBurny.burnedFrom(vm.addr(1))
* burntMintyBurny.mintBurnerRatio() / 10000
);
assertTrue(burntMintyBurny.balanceOf(vm.addr(1)) == 0);

try burntMintyBurny.mintBurnerBurned() {
assertTrue(
false, "mintBurnerBurned() should revert when no tokens to mint."
false,
"mintBurnerBurned() should revert when no tokens to mint."
);
} catch (bytes memory reason) {
bytes4 expectedSelector = NoTokensToMint.selector;
Expand All @@ -272,16 +272,12 @@ contract BurntMintyBurnyTest is Test {
burntMintyBurny.mintMinted();
assertTrue(
burntMintyBurny.totalSupply() - minted
== mintyBurny.totalSupply() * burntMintyBurny.mintedRatio()
/ 10000
);
assertTrue(
burntMintyBurny.lastMinted() == mintyBurny.totalSupply()
== mintyBurny.totalSupply() * burntMintyBurny.mintedRatio() / 10000
);
assertTrue(burntMintyBurny.lastMinted() == mintyBurny.totalSupply());
assertTrue(
burntMintyBurny.balanceOf(vm.addr(1))
== mintyBurny.totalSupply() * burntMintyBurny.mintedRatio()
/ 10000
== mintyBurny.totalSupply() * burntMintyBurny.mintedRatio() / 10000
);

try burntMintyBurny.mintMinted() {
Expand All @@ -303,20 +299,14 @@ contract BurntMintyBurnyTest is Test {
burntMintyBurny.mintMintedFor(vm.addr(2));
assertTrue(
burntMintyBurny.totalSupply() - minted
== mintyBurny.totalSupply() * burntMintyBurny.mintedRatio()
/ 10000
);
assertTrue(
burntMintyBurny.lastMinted() == mintyBurny.totalSupply()
== mintyBurny.totalSupply() * burntMintyBurny.mintedRatio() / 10000
);
assertTrue(burntMintyBurny.lastMinted() == mintyBurny.totalSupply());
assertTrue(
burntMintyBurny.balanceOf(vm.addr(2))
== mintyBurny.totalSupply() * burntMintyBurny.mintedRatio()
/ 10000
);
assertTrue(
burntMintyBurny.balanceOf(vm.addr(1)) == 0
== mintyBurny.totalSupply() * burntMintyBurny.mintedRatio() / 10000
);
assertTrue(burntMintyBurny.balanceOf(vm.addr(1)) == 0);

try burntMintyBurny.mintMinted() {
assertTrue(
Expand All @@ -338,16 +328,17 @@ contract BurntMintyBurnyTest is Test {
burntMintyBurny.mintMinterMinted();
assertTrue(
burntMintyBurny.totalSupply() - minted
== mintyBurny.balanceOf(vm.addr(1)) * burntMintyBurny.mintMinterRatio()
/ 10000
== mintyBurny.balanceOf(vm.addr(1))
* burntMintyBurny.mintMinterRatio() / 10000
);
assertTrue(
burntMintyBurny.lastMinterMinted() == mintyBurny.balanceOf(vm.addr(1))
burntMintyBurny.lastMinterMinted()
== mintyBurny.balanceOf(vm.addr(1))
);
assertTrue(
burntMintyBurny.balanceOf(vm.addr(1))
== mintyBurny.balanceOf(vm.addr(1)) * burntMintyBurny.mintMinterRatio()
/ 10000
== mintyBurny.balanceOf(vm.addr(1))
* burntMintyBurny.mintMinterRatio() / 10000
);

try burntMintyBurny.mintMinterMinted() {
Expand All @@ -370,25 +361,24 @@ contract BurntMintyBurnyTest is Test {
burntMintyBurny.mintMinterMintedFor(vm.addr(2));
assertTrue(
burntMintyBurny.totalSupply() - minted
== mintyBurny.mintedBy(vm.addr(1)) * burntMintyBurny.mintMinterRatio()
/ 10000
== mintyBurny.mintedBy(vm.addr(1))
* burntMintyBurny.mintMinterRatio() / 10000
);
assertTrue(
burntMintyBurny.lastMinterMinted() == mintyBurny.balanceOf(vm.addr(1))
burntMintyBurny.lastMinterMinted()
== mintyBurny.balanceOf(vm.addr(1))
);
assertTrue(
burntMintyBurny.balanceOf(vm.addr(2))
== mintyBurny.mintedBy(vm.addr(1)) * burntMintyBurny.mintMinterRatio()
/ 10000
== mintyBurny.mintedBy(vm.addr(1))
* burntMintyBurny.mintMinterRatio() / 10000
);

assertTrue(
burntMintyBurny.balanceOf(vm.addr(1))
== 0
);
assertTrue(burntMintyBurny.balanceOf(vm.addr(1)) == 0);
try burntMintyBurny.mintMinterMintedFor(vm.addr(2)) {
assertTrue(
false, "mintMinterMintedFor() should revert when no tokens to mint."
false,
"mintMinterMintedFor() should revert when no tokens to mint."
);
} catch (bytes memory reason) {
bytes4 expectedSelector = NoTokensToMint.selector;
Expand Down

0 comments on commit ce36c42

Please sign in to comment.