diff --git a/contracts/gas-snapshots/shared.gas-snapshot b/contracts/gas-snapshots/shared.gas-snapshot index 06317226f9..1cbc51e303 100644 --- a/contracts/gas-snapshots/shared.gas-snapshot +++ b/contracts/gas-snapshots/shared.gas-snapshot @@ -7,6 +7,12 @@ AuthorizedCallers_applyAuthorizedCallerUpdates:test_SkipRemove_Success() (gas: 3 AuthorizedCallers_applyAuthorizedCallerUpdates:test_ZeroAddressNotAllowed_Revert() (gas: 64406) AuthorizedCallers_constructor:test_ZeroAddressNotAllowed_Revert() (gas: 64383) AuthorizedCallers_constructor:test_constructor_Success() (gas: 683090) +BaseERC20_approve:test_approve() (gas: 56136) +BaseERC20_constructor:test_Constructor() (gas: 1088581) +BaseERC20_getCCIPAdmin:test_getCCIPAdmin() (gas: 10548) +BaseERC20_getCCIPAdmin:test_setCCIPAdmin() (gas: 21584) +BaseERC20_supportsInterface:test_SupportsInterface() (gas: 11167) +BaseERC20_transfer:test_transfer() (gas: 42320) BurnMintERC20PausableFreezableTransparentTest:test_Freeze() (gas: 46647) BurnMintERC20PausableFreezableTransparentTest:test_Freeze_EvenWhenImplementationIsPaused() (gas: 77916) BurnMintERC20PausableFreezableTransparentTest:test_Unfreeze() (gas: 176325) @@ -43,17 +49,12 @@ BurnMintERC20UUPSTest:test_Mint() (gas: 75473) BurnMintERC20UUPSTest:test_ProxiableUUID() (gas: 2820627) BurnMintERC20UUPSTest:test_SetCCIPAdmin() (gas: 29807) BurnMintERC20UUPSTest:test_SupportsInterface() (gas: 22038) -BurnMintERC20_approve:test_approve() (gas: 57656) -BurnMintERC20_burn:test_BasicBurn() (gas: 153602) -BurnMintERC20_burnFrom:test_BurnFrom() (gas: 57995) -BurnMintERC20_burnFromAlias:test_burn() (gas: 58039) -BurnMintERC20_constructor:test_Constructor() (gas: 1694947) -BurnMintERC20_getCCIPAdmin:test_getCCIPAdmin() (gas: 10548) -BurnMintERC20_getCCIPAdmin:test_setCCIPAdmin() (gas: 21584) -BurnMintERC20_grantMintAndBurnRoles:test_GrantMintAndBurnRoles() (gas: 79130) -BurnMintERC20_mint:test_mint() (gas: 101843) -BurnMintERC20_supportsInterface:test_SupportsInterface() (gas: 11218) -BurnMintERC20_transfer:test_transfer() (gas: 42338) +BurnMintERC20_burn:test_BasicBurn() (gas: 153615) +BurnMintERC20_burnFrom:test_BurnFrom() (gas: 56742) +BurnMintERC20_burnFromAlias:test_burn() (gas: 56786) +BurnMintERC20_grantMintAndBurnRoles:test_GrantMintAndBurnRoles() (gas: 78868) +BurnMintERC20_mint:test_mint() (gas: 101988) +BurnMintERC20_supportsInterface:test_SupportsInterface() (gas: 12764) BurnMintERC677_approve:testApproveSuccess() (gas: 55516) BurnMintERC677_approve:testInvalidAddressReverts() (gas: 10657) BurnMintERC677_burn:testBasicBurnSuccess() (gas: 172096) diff --git a/contracts/package.json b/contracts/package.json index d03a1c1d11..7af30f864e 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -76,6 +76,7 @@ "@openzeppelin/contracts-4.9.6": "npm:@openzeppelin/contracts@4.9.6", "@openzeppelin/contracts-5.0.2": "npm:@openzeppelin/contracts@5.0.2", "@openzeppelin/contracts-5.1.0": "npm:@openzeppelin/contracts@5.1.0", + "@openzeppelin/contracts-5.3.0": "npm:@openzeppelin/contracts@5.3.0", "@openzeppelin/contracts-upgradeable": "4.9.6", "@scroll-tech/contracts": "2.0.0", "@zksync/contracts": "github:matter-labs/era-contracts#446d391d34bdb48255d5f8fef8a8248925fc98b9" diff --git a/contracts/pnpm-lock.yaml b/contracts/pnpm-lock.yaml index 25f27257a9..695a1c7126 100644 --- a/contracts/pnpm-lock.yaml +++ b/contracts/pnpm-lock.yaml @@ -40,6 +40,9 @@ importers: '@openzeppelin/contracts-5.1.0': specifier: npm:@openzeppelin/contracts@5.1.0 version: '@openzeppelin/contracts@5.1.0' + '@openzeppelin/contracts-5.3.0': + specifier: npm:@openzeppelin/contracts@5.3.0 + version: '@openzeppelin/contracts@5.3.0' '@openzeppelin/contracts-upgradeable': specifier: 4.9.6 version: 4.9.6 @@ -645,6 +648,9 @@ packages: '@openzeppelin/contracts@5.1.0': resolution: {integrity: sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==} + '@openzeppelin/contracts@5.3.0': + resolution: {integrity: sha512-zj/KGoW7zxWUE8qOI++rUM18v+VeLTTzKs/DJFkSzHpQFPD/jKKF0TrMxBfGLl3kpdELCNccvB3zmofSzm4nlA==} + '@pkgr/core@0.2.9': resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -3047,6 +3053,8 @@ snapshots: '@openzeppelin/contracts@5.1.0': {} + '@openzeppelin/contracts@5.3.0': {} + '@pkgr/core@0.2.9': {} '@pnpm/config.env-replace@1.1.0': {} diff --git a/contracts/remappings.txt b/contracts/remappings.txt index 041fdb5b0b..dcfe28db7d 100644 --- a/contracts/remappings.txt +++ b/contracts/remappings.txt @@ -5,6 +5,7 @@ forge-std/=src/v0.8/vendor/forge-std/src/ @openzeppelin/contracts@4.9.6=node_modules/@openzeppelin/contracts-4.9.6 @openzeppelin/contracts@5.0.2=node_modules/@openzeppelin/contracts-5.0.2 @openzeppelin/contracts@5.1.0=node_modules/@openzeppelin/contracts-5.1.0 +@openzeppelin/contracts@5.3.0=node_modules/@openzeppelin/contracts-5.3.0 @openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/ diff --git a/contracts/scripts/native_solc_compile_all_shared b/contracts/scripts/native_solc_compile_all_shared index e4be846b71..f031dc53b6 100755 --- a/contracts/scripts/native_solc_compile_all_shared +++ b/contracts/scripts/native_solc_compile_all_shared @@ -56,7 +56,7 @@ compileContract interfaces/ITypeAndVersion 0.8.19 compileContract token/ERC677/ERC677 0.8.19 compileContract token/ERC677/BurnMintERC677 0.8.19 compileContract token/ERC677/LinkToken 0.8.19 -compileContract token/ERC20/BurnMintERC20 0.8.19 +compileContract token/ERC20/BurnMintERC20 compileContract token/ERC20/upgradeable/BurnMintERC20PausableFreezableTransparent compileContract token/ERC20/upgradeable/BurnMintERC20PausableFreezableUUPS @@ -66,7 +66,7 @@ compileContract token/ERC20/upgradeable/BurnMintERC20Transparent compileContract token/ERC20/upgradeable/BurnMintERC20UUPS compileContract token/ERC20/upgradeable/IBurnMintERC20Upgradeable -compileContract test/helpers/BurnMintERC20WithDrip 0.8.19 +compileContract test/helpers/BurnMintERC20WithDrip compileContract test/helpers/ChainReaderTester 0.8.19 compileContract test/helpers/LogEmitter 0.8.19 compileContract test/helpers/VRFLogEmitter 0.8.19 diff --git a/contracts/src/v0.8/shared/test/helpers/BurnMintERC20WithDrip.sol b/contracts/src/v0.8/shared/test/helpers/BurnMintERC20WithDrip.sol index ade67b7a17..ebba09644d 100644 --- a/contracts/src/v0.8/shared/test/helpers/BurnMintERC20WithDrip.sol +++ b/contracts/src/v0.8/shared/test/helpers/BurnMintERC20WithDrip.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.4; import {BurnMintERC20} from "../../token/ERC20/BurnMintERC20.sol"; contract BurnMintERC20WithDrip is BurnMintERC20 { - constructor(string memory name, string memory symbol) BurnMintERC20(name, symbol, 18, 0, 0) {} + constructor(string memory name, string memory symbol) BurnMintERC20(name, symbol, 18, 0, 0, address(0)) {} // Gives one full token to any given address. function drip( diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.approve.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.approve.t.sol new file mode 100644 index 0000000000..803d004dc6 --- /dev/null +++ b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.approve.t.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {BaseERC20} from "../../../../token/ERC20/BaseERC20.sol"; +import {BaseERC20Setup} from "./BaseERC20Setup.t.sol"; + +contract BaseERC20_approve is BaseERC20Setup { + function test_approve() public { + uint256 balancePre = s_baseERC20.balanceOf(STRANGER); + uint256 sendingAmount = s_amount / 2; + + s_baseERC20.approve(STRANGER, sendingAmount); + + uint256 ownerBalancePre = s_baseERC20.balanceOf(OWNER); + + changePrank(STRANGER); + + s_baseERC20.transferFrom(OWNER, STRANGER, sendingAmount); + + assertEq(sendingAmount + balancePre, s_baseERC20.balanceOf(STRANGER)); + assertEq(ownerBalancePre - sendingAmount, s_baseERC20.balanceOf(OWNER)); + } + + // Reverts + + function test_approve_RevertWhen_InvalidAddress() public { + vm.expectRevert(abi.encodeWithSelector(BaseERC20.InvalidRecipient.selector, address(s_baseERC20))); + + s_baseERC20.approve(address(s_baseERC20), s_amount); + } +} diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.ccipGetAdmin.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.ccipGetAdmin.t.sol new file mode 100644 index 0000000000..9d9107c6ac --- /dev/null +++ b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.ccipGetAdmin.t.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {BaseERC20} from "../../../../token/ERC20/BaseERC20.sol"; +import {BaseERC20Setup} from "./BaseERC20Setup.t.sol"; + +contract BaseERC20_getCCIPAdmin is BaseERC20Setup { + function test_getCCIPAdmin() public view { + assertEq(OWNER, s_baseERC20.getCCIPAdmin()); + } + + function test_setCCIPAdmin() public { + address newAdmin = makeAddr("newAdmin"); + + vm.expectEmit(); + emit BaseERC20.CCIPAdminTransferred(OWNER, newAdmin); + + s_baseERC20.setCCIPAdmin(newAdmin); + + assertEq(newAdmin, s_baseERC20.getCCIPAdmin()); + } +} diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.constructor.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.constructor.t.sol new file mode 100644 index 0000000000..8b327366c8 --- /dev/null +++ b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.constructor.t.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {BaseERC20} from "../../../../token/ERC20/BaseERC20.sol"; +import {BaseERC20Setup} from "./BaseERC20Setup.t.sol"; + +contract BaseERC20_constructor is BaseERC20Setup { + function test_Constructor() public { + vm.startPrank(s_alice); + + string memory name = "Chainlink token v2"; + string memory symbol = "LINK2"; + uint8 decimals = 19; + uint256 maxSupply = 1e33; + + s_baseERC20 = new BaseERC20(name, symbol, decimals, maxSupply, 1e18, address(0)); + + assertEq(name, s_baseERC20.name()); + assertEq(symbol, s_baseERC20.symbol()); + assertEq(decimals, s_baseERC20.decimals()); + assertEq(maxSupply, s_baseERC20.maxSupply()); + + assertTrue(s_baseERC20.hasRole(s_baseERC20.DEFAULT_ADMIN_ROLE(), s_alice)); + assertEq(s_baseERC20.balanceOf(s_alice), 1e18); + assertEq(s_baseERC20.totalSupply(), 1e18); + } +} diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.supportsInterface.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.supportsInterface.t.sol new file mode 100644 index 0000000000..5c60f691a4 --- /dev/null +++ b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.supportsInterface.t.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {BaseERC20Setup} from "./BaseERC20Setup.t.sol"; + +import {IAccessControl} from "@openzeppelin/contracts@5.3.0/access/IAccessControl.sol"; +import {IERC20} from "@openzeppelin/contracts@5.3.0/token/ERC20/IERC20.sol"; +import {IERC165} from "@openzeppelin/contracts@5.3.0/utils/introspection/IERC165.sol"; + +contract BaseERC20_supportsInterface is BaseERC20Setup { + function test_SupportsInterface() public view { + assertTrue(s_baseERC20.supportsInterface(type(IERC20).interfaceId)); + assertTrue(s_baseERC20.supportsInterface(type(IERC165).interfaceId)); + assertTrue(s_baseERC20.supportsInterface(type(IAccessControl).interfaceId)); + } +} diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.transfer.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.transfer.t.sol new file mode 100644 index 0000000000..93b904f7a2 --- /dev/null +++ b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20.transfer.t.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {BaseERC20} from "../../../../token/ERC20/BaseERC20.sol"; +import {BaseERC20Setup} from "./BaseERC20Setup.t.sol"; + +contract BaseERC20_transfer is BaseERC20Setup { + function test_transfer() public { + uint256 balancePre = s_baseERC20.balanceOf(STRANGER); + uint256 sendingAmount = s_amount / 2; + + s_baseERC20.transfer(STRANGER, sendingAmount); + + assertEq(sendingAmount + balancePre, s_baseERC20.balanceOf(STRANGER)); + } + + // Reverts + + function test_transfer_RevertWhen_InvalidAddress() public { + vm.expectRevert(abi.encodeWithSelector(BaseERC20.InvalidRecipient.selector, address(s_baseERC20))); + + s_baseERC20.transfer(address(s_baseERC20), s_amount); + } +} diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20Setup.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20Setup.t.sol new file mode 100644 index 0000000000..982d2ffef1 --- /dev/null +++ b/contracts/src/v0.8/shared/test/token/ERC20/BaseERC20/BaseERC20Setup.t.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import {BaseERC20} from "../../../../token/ERC20/BaseERC20.sol"; +import {BaseTest} from "../../../BaseTest.t.sol"; + +contract BaseERC20Setup is BaseTest { + BaseERC20 internal s_baseERC20; + + uint256 internal s_amount = 1e18; + + address internal s_alice; + + function setUp() public virtual override { + BaseTest.setUp(); + + s_alice = makeAddr("alice"); + + s_baseERC20 = new BaseERC20("Chainlink Token", "LINK", 18, 1e27, 0, address(0)); + deal(address(s_baseERC20), OWNER, s_amount); + } +} diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.approve.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.approve.t.sol deleted file mode 100644 index 2842dcbfee..0000000000 --- a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.approve.t.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {BurnMintERC20} from "../../../../token/ERC20/BurnMintERC20.sol"; -import {BurnMintERC20Setup} from "./BurnMintERC20Setup.t.sol"; - -contract BurnMintERC20_approve is BurnMintERC20Setup { - function test_approve() public { - uint256 balancePre = s_burnMintERC20.balanceOf(STRANGER); - uint256 sendingAmount = s_amount / 2; - - s_burnMintERC20.approve(STRANGER, sendingAmount); - - uint256 ownerBalancePre = s_burnMintERC20.balanceOf(OWNER); - - changePrank(STRANGER); - - s_burnMintERC20.transferFrom(OWNER, STRANGER, sendingAmount); - - assertEq(sendingAmount + balancePre, s_burnMintERC20.balanceOf(STRANGER)); - assertEq(ownerBalancePre - sendingAmount, s_burnMintERC20.balanceOf(OWNER)); - } - - // Reverts - - function test_approve_RevertWhen_InvalidAddress() public { - vm.expectRevert(abi.encodeWithSelector(BurnMintERC20.InvalidRecipient.selector, address(s_burnMintERC20))); - - s_burnMintERC20.approve(address(s_burnMintERC20), s_amount); - } -} diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burn.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burn.t.sol index 23f48ef580..8f68368a45 100644 --- a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burn.t.sol +++ b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burn.t.sol @@ -4,8 +4,9 @@ pragma solidity ^0.8.24; import {BurnMintERC20} from "../../../../token/ERC20/BurnMintERC20.sol"; import {BurnMintERC20Setup} from "./BurnMintERC20Setup.t.sol"; -import {IERC20} from "@openzeppelin/contracts@4.8.3/token/ERC20/IERC20.sol"; -import {Strings} from "@openzeppelin/contracts@4.8.3/utils/Strings.sol"; +import {IAccessControl} from "@openzeppelin/contracts@5.3.0/access/IAccessControl.sol"; +import {IERC20Errors} from "@openzeppelin/contracts@5.3.0/interfaces/draft-IERC6093.sol"; +import {IERC20} from "@openzeppelin/contracts@5.3.0/token/ERC20/IERC20.sol"; contract BurnMintERC20_burn is BurnMintERC20Setup { function test_BasicBurn() public { @@ -23,14 +24,9 @@ contract BurnMintERC20_burn is BurnMintERC20Setup { // Revert function test_burn_RevertWhen_SenderNotBurner() public { - // OZ Access Control v4.8.3 inherited by BurnMintERC20 does not use custom errors, but the revert message is still - // useful and should be checked vm.expectRevert( - abi.encodePacked( - "AccessControl: account ", - Strings.toHexString(OWNER), - " is missing role ", - Strings.toHexString(uint256(s_burnMintERC20.BURNER_ROLE()), 32) + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, OWNER, s_burnMintERC20.BURNER_ROLE() ) ); @@ -40,7 +36,7 @@ contract BurnMintERC20_burn is BurnMintERC20Setup { function test_burn_RevertWhen_ExceedsBalance() public { changePrank(s_mockPool); - vm.expectRevert("ERC20: burn amount exceeds balance"); + vm.expectRevert(abi.encodeWithSelector(IERC20Errors.ERC20InsufficientBalance.selector, s_mockPool, 0, s_amount * 2)); s_burnMintERC20.burn(s_amount * 2); } @@ -49,7 +45,7 @@ contract BurnMintERC20_burn is BurnMintERC20Setup { s_burnMintERC20.grantRole(s_burnMintERC20.BURNER_ROLE(), address(0)); changePrank(address(0)); - vm.expectRevert("ERC20: burn from the zero address"); + vm.expectRevert(abi.encodeWithSelector(IERC20Errors.ERC20InvalidSender.selector, address(0))); s_burnMintERC20.burn(0); } diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burnFrom.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burnFrom.t.sol index b6a08f0894..9e1d3bf404 100644 --- a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burnFrom.t.sol +++ b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burnFrom.t.sol @@ -4,7 +4,8 @@ pragma solidity ^0.8.24; import {BurnMintERC20} from "../../../../token/ERC20/BurnMintERC20.sol"; import {BurnMintERC20Setup} from "./BurnMintERC20Setup.t.sol"; -import {Strings} from "@openzeppelin/contracts@4.8.3/utils/Strings.sol"; +import {IAccessControl} from "@openzeppelin/contracts@5.3.0/access/IAccessControl.sol"; +import {IERC20Errors} from "@openzeppelin/contracts@5.3.0/interfaces/draft-IERC6093.sol"; contract BurnMintERC20_burnFrom is BurnMintERC20Setup { function setUp() public virtual override { @@ -24,15 +25,9 @@ contract BurnMintERC20_burnFrom is BurnMintERC20Setup { // Reverts function test_burnFrom_RevertWhen_SenderNotBurner() public { - // OZ Access Control v4.8.3 inherited by BurnMintERC20 does not use custom errors, but the revert message is still - // useful - // and should be checked vm.expectRevert( - abi.encodePacked( - "AccessControl: account ", - Strings.toHexString(OWNER), - " is missing role ", - Strings.toHexString(uint256(s_burnMintERC20.BURNER_ROLE()), 32) + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, OWNER, s_burnMintERC20.BURNER_ROLE() ) ); @@ -42,7 +37,7 @@ contract BurnMintERC20_burnFrom is BurnMintERC20Setup { function test_burnFrom_RevertWhen_InsufficientAllowance() public { changePrank(s_mockPool); - vm.expectRevert("ERC20: insufficient allowance"); + vm.expectRevert(abi.encodeWithSelector(IERC20Errors.ERC20InsufficientAllowance.selector, s_mockPool, 0, s_amount)); s_burnMintERC20.burnFrom(OWNER, s_amount); } @@ -52,7 +47,9 @@ contract BurnMintERC20_burnFrom is BurnMintERC20Setup { changePrank(s_mockPool); - vm.expectRevert("ERC20: burn amount exceeds balance"); + vm.expectRevert( + abi.encodeWithSelector(IERC20Errors.ERC20InsufficientBalance.selector, OWNER, s_amount, s_amount * 2) + ); s_burnMintERC20.burnFrom(OWNER, s_amount * 2); } diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burnFromAlias.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burnFromAlias.t.sol index 18bcc32b29..025780553a 100644 --- a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burnFromAlias.t.sol +++ b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.burnFromAlias.t.sol @@ -4,7 +4,8 @@ pragma solidity ^0.8.24; import {BurnMintERC20} from "../../../../token/ERC20/BurnMintERC20.sol"; import {BurnMintERC20Setup} from "./BurnMintERC20Setup.t.sol"; -import {Strings} from "@openzeppelin/contracts@4.8.3/utils/Strings.sol"; +import {IAccessControl} from "@openzeppelin/contracts@5.3.0/access/IAccessControl.sol"; +import {IERC20Errors} from "@openzeppelin/contracts@5.3.0/interfaces/draft-IERC6093.sol"; contract BurnMintERC20_burnFromAlias is BurnMintERC20Setup { function setUp() public virtual override { @@ -24,15 +25,9 @@ contract BurnMintERC20_burnFromAlias is BurnMintERC20Setup { // Reverts function test_burn_RevertWhen_SenderNotBurner() public { - // OZ Access Control v4.8.3 inherited by BurnMintERC20 does not use custom errors, but the revert message is still - // useful - // and should be checked vm.expectRevert( - abi.encodePacked( - "AccessControl: account ", - Strings.toHexString(OWNER), - " is missing role ", - Strings.toHexString(uint256(s_burnMintERC20.BURNER_ROLE()), 32) + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, OWNER, s_burnMintERC20.BURNER_ROLE() ) ); @@ -42,7 +37,7 @@ contract BurnMintERC20_burnFromAlias is BurnMintERC20Setup { function test_burn_RevertWhen_InsufficientAllowance() public { changePrank(s_mockPool); - vm.expectRevert("ERC20: insufficient allowance"); + vm.expectRevert(abi.encodeWithSelector(IERC20Errors.ERC20InsufficientAllowance.selector, s_mockPool, 0, s_amount)); s_burnMintERC20.burn(OWNER, s_amount); } @@ -52,7 +47,9 @@ contract BurnMintERC20_burnFromAlias is BurnMintERC20Setup { changePrank(s_mockPool); - vm.expectRevert("ERC20: burn amount exceeds balance"); + vm.expectRevert( + abi.encodeWithSelector(IERC20Errors.ERC20InsufficientBalance.selector, OWNER, s_amount, s_amount * 2) + ); s_burnMintERC20.burn(OWNER, s_amount * 2); } diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.ccipGetAdmin.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.ccipGetAdmin.t.sol deleted file mode 100644 index f074fcfc76..0000000000 --- a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.ccipGetAdmin.t.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {BurnMintERC20} from "../../../../token/ERC20/BurnMintERC20.sol"; -import {BurnMintERC20Setup} from "./BurnMintERC20Setup.t.sol"; - -contract BurnMintERC20_getCCIPAdmin is BurnMintERC20Setup { - function test_getCCIPAdmin() public view { - assertEq(OWNER, s_burnMintERC20.getCCIPAdmin()); - } - - function test_setCCIPAdmin() public { - address newAdmin = makeAddr("newAdmin"); - - vm.expectEmit(); - emit BurnMintERC20.CCIPAdminTransferred(OWNER, newAdmin); - - s_burnMintERC20.setCCIPAdmin(newAdmin); - - assertEq(newAdmin, s_burnMintERC20.getCCIPAdmin()); - } -} diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.constructor.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.constructor.t.sol deleted file mode 100644 index faed100c7e..0000000000 --- a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.constructor.t.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {BurnMintERC20} from "../../../../token/ERC20/BurnMintERC20.sol"; -import {BurnMintERC20Setup} from "./BurnMintERC20Setup.t.sol"; - -contract BurnMintERC20_constructor is BurnMintERC20Setup { - function test_Constructor() public { - vm.startPrank(s_alice); - - string memory name = "Chainlink token v2"; - string memory symbol = "LINK2"; - uint8 decimals = 19; - uint256 maxSupply = 1e33; - - s_burnMintERC20 = new BurnMintERC20(name, symbol, decimals, maxSupply, 1e18); - - assertEq(name, s_burnMintERC20.name()); - assertEq(symbol, s_burnMintERC20.symbol()); - assertEq(decimals, s_burnMintERC20.decimals()); - assertEq(maxSupply, s_burnMintERC20.maxSupply()); - - assertTrue(s_burnMintERC20.hasRole(s_burnMintERC20.DEFAULT_ADMIN_ROLE(), s_alice)); - assertEq(s_burnMintERC20.balanceOf(s_alice), 1e18); - assertEq(s_burnMintERC20.totalSupply(), 1e18); - } -} diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.mint.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.mint.t.sol index 452f33b595..eae9f53932 100644 --- a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.mint.t.sol +++ b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.mint.t.sol @@ -1,11 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; +import {BaseERC20} from "../../../../token/ERC20/BaseERC20.sol"; import {BurnMintERC20} from "../../../../token/ERC20/BurnMintERC20.sol"; import {BurnMintERC20Setup} from "./BurnMintERC20Setup.t.sol"; -import {IERC20} from "@openzeppelin/contracts@4.8.3/token/ERC20/IERC20.sol"; -import {Strings} from "@openzeppelin/contracts@4.8.3/utils/Strings.sol"; +import {IAccessControl} from "@openzeppelin/contracts@5.3.0/access/IAccessControl.sol"; +import {IERC20} from "@openzeppelin/contracts@5.3.0/token/ERC20/IERC20.sol"; contract BurnMintERC20_mint is BurnMintERC20Setup { function test_mint() public { @@ -26,15 +27,9 @@ contract BurnMintERC20_mint is BurnMintERC20Setup { function test_mint_RevertWhen_SenderNotMinter() public { vm.startPrank(STRANGER); - // OZ Access Control v4.8.3 inherited by BurnMintERC20 does not use custom errors, but the revert message is still - // useful - // and should be checked vm.expectRevert( - abi.encodePacked( - "AccessControl: account ", - Strings.toHexString(STRANGER), - " is missing role ", - Strings.toHexString(uint256(s_burnMintERC20.MINTER_ROLE()), 32) + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, STRANGER, s_burnMintERC20.MINTER_ROLE() ) ); @@ -56,7 +51,7 @@ contract BurnMintERC20_mint is BurnMintERC20Setup { function test_mint_RevertWhen_InvalidRecipient() public { s_burnMintERC20.grantMintAndBurnRoles(OWNER); - vm.expectRevert(abi.encodeWithSelector(BurnMintERC20.InvalidRecipient.selector, address(s_burnMintERC20))); + vm.expectRevert(abi.encodeWithSelector(BaseERC20.InvalidRecipient.selector, address(s_burnMintERC20))); s_burnMintERC20.mint(address(s_burnMintERC20), 1e18); } } diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.supportsInterface.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.supportsInterface.t.sol index 0039f7d08f..38046352fc 100644 --- a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.supportsInterface.t.sol +++ b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.supportsInterface.t.sol @@ -1,17 +1,21 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; -import {IBurnMintERC20} from "../../../../../shared/token/ERC20/IBurnMintERC20.sol"; +import {IBurnMintERC20} from "../../../../token/ERC20/IBurnMintERC20.sol"; import {BurnMintERC20Setup} from "./BurnMintERC20Setup.t.sol"; +import {IAccessControl} from "@openzeppelin/contracts@4.8.3/access/IAccessControl.sol"; import {IERC20} from "@openzeppelin/contracts@4.8.3/token/ERC20/IERC20.sol"; import {IERC165} from "@openzeppelin/contracts@4.8.3/utils/introspection/IERC165.sol"; contract BurnMintERC20_supportsInterface is BurnMintERC20Setup { function test_SupportsInterface() public view { + // BaseERC20 interfaces assertTrue(s_burnMintERC20.supportsInterface(type(IERC20).interfaceId)); - assertTrue(s_burnMintERC20.supportsInterface(type(IBurnMintERC20).interfaceId)); assertTrue(s_burnMintERC20.supportsInterface(type(IERC165).interfaceId)); + assertTrue(s_burnMintERC20.supportsInterface(type(IAccessControl).interfaceId)); + // BurnMintERC20 specific interface + assertTrue(s_burnMintERC20.supportsInterface(type(IBurnMintERC20).interfaceId)); } } diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.transfer.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.transfer.t.sol deleted file mode 100644 index 588c41f757..0000000000 --- a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20.transfer.t.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; - -import {BurnMintERC20} from "../../../../token/ERC20/BurnMintERC20.sol"; -import {BurnMintERC20Setup} from "./BurnMintERC20Setup.t.sol"; - -contract BurnMintERC20_transfer is BurnMintERC20Setup { - function test_transfer() public { - uint256 balancePre = s_burnMintERC20.balanceOf(STRANGER); - uint256 sendingAmount = s_amount / 2; - - s_burnMintERC20.transfer(STRANGER, sendingAmount); - - assertEq(sendingAmount + balancePre, s_burnMintERC20.balanceOf(STRANGER)); - } - - // Reverts - - function test_transfer_RevertWhen_InvalidAddress() public { - vm.expectRevert(abi.encodeWithSelector(BurnMintERC20.InvalidRecipient.selector, address(s_burnMintERC20))); - - s_burnMintERC20.transfer(address(s_burnMintERC20), s_amount); - } -} diff --git a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20Setup.t.sol b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20Setup.t.sol index f85236db11..8bb7e17ab0 100644 --- a/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20Setup.t.sol +++ b/contracts/src/v0.8/shared/test/token/ERC20/BurnMintERC20/BurnMintERC20Setup.t.sol @@ -17,7 +17,7 @@ contract BurnMintERC20Setup is BaseTest { s_alice = makeAddr("alice"); - s_burnMintERC20 = new BurnMintERC20("Chainlink Token", "LINK", 18, 1e27, 0); + s_burnMintERC20 = new BurnMintERC20("Chainlink Token", "LINK", 18, 1e27, 0, address(0)); // Set s_mockPool to be a burner and minter s_burnMintERC20.grantMintAndBurnRoles(s_mockPool); diff --git a/contracts/src/v0.8/shared/token/ERC20/BaseERC20.sol b/contracts/src/v0.8/shared/token/ERC20/BaseERC20.sol new file mode 100644 index 0000000000..4bc77a1449 --- /dev/null +++ b/contracts/src/v0.8/shared/token/ERC20/BaseERC20.sol @@ -0,0 +1,126 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.4; + +import {IGetCCIPAdmin} from "../../../shared/interfaces/IGetCCIPAdmin.sol"; +import {ITypeAndVersion} from "../../interfaces/ITypeAndVersion.sol"; + +import {AccessControl} from "@openzeppelin/contracts@5.3.0/access/AccessControl.sol"; +import {IAccessControl} from "@openzeppelin/contracts@5.3.0/access/IAccessControl.sol"; +import {ERC20} from "@openzeppelin/contracts@5.3.0/token/ERC20/ERC20.sol"; +import {IERC20} from "@openzeppelin/contracts@5.3.0/token/ERC20/IERC20.sol"; +import {IERC165} from "@openzeppelin/contracts@5.3.0/utils/introspection/IERC165.sol"; + +/// @notice A basic ERC20 compatible token contract with burn and minting roles. +/// @dev The total supply can be limited during deployment. +contract BaseERC20 is IGetCCIPAdmin, IERC165, ERC20, AccessControl, ITypeAndVersion { + function typeAndVersion() external pure virtual override returns (string memory) { + return "BasicERC20 2.0.0-dev"; + } + + error InvalidRecipient(address recipient); + + event CCIPAdminTransferred(address indexed previousAdmin, address indexed newAdmin); + + /// @dev The number of decimals for the token + uint8 internal immutable i_decimals; + + /// @dev The maximum supply of the token, 0 if unlimited + uint256 internal immutable i_maxSupply; + + /// @dev the CCIPAdmin can be used to register with the CCIP token admin registry, but has no other special powers, + /// and can only be transferred by the owner. + address internal s_ccipAdmin; + + /// @dev the underscores in parameter names are used to suppress compiler warnings about shadowing ERC20 functions + /// @param name The name of the token + /// @param symbol The symbol of the token + /// @param decimals_ The number of decimals the token uses + /// @param maxSupply_ The maximum supply of the token, 0 if unlimited + /// @param preMint The amount of tokens to mint to the deployer upon construction. NOTE: the base version of this + /// contract does not support minting additional tokens after deployment, so this should be set to the full supply. + /// @param newOwner The address to grant the DEFAULT_ADMIN_ROLE to, which can be used to transfer the CCIPAdmin role. + /// If address(0) is passed, the deployer will be used as the owner. This address will receive the preMinted tokens, + /// if any. + constructor( + string memory name, + string memory symbol, + uint8 decimals_, + uint256 maxSupply_, + uint256 preMint, + address newOwner + ) ERC20(name, symbol) { + i_decimals = decimals_; + i_maxSupply = maxSupply_; + + address owner = newOwner == address(0) ? msg.sender : newOwner; + + s_ccipAdmin = owner; + + // Mint the initial supply to the new Owner, saving gas by not calling if the mint amount is zero. + if (preMint != 0) _mint(owner, preMint); + + // Set up the owner as the initial minter and burner. + _grantRole(DEFAULT_ADMIN_ROLE, owner); + } + + /// @inheritdoc IERC165 + function supportsInterface( + bytes4 interfaceId + ) public pure virtual override(AccessControl, IERC165) returns (bool) { + return interfaceId == type(IERC20).interfaceId || interfaceId == type(IERC165).interfaceId + || interfaceId == type(IAccessControl).interfaceId || interfaceId == type(IGetCCIPAdmin).interfaceId; + } + + // ================================================================ + // │ ERC20 │ + // ================================================================ + + /// @dev Returns the number of decimals used in its user representation. + function decimals() public view virtual override returns (uint8) { + return i_decimals; + } + + /// @dev Returns the max supply of the token, 0 if unlimited. + function maxSupply() public view virtual returns (uint256) { + return i_maxSupply; + } + + /// @dev Uses OZ ERC20 _approve to disallow approving for address(0). + /// @dev Disallows approving for address(this). + function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual override { + if (spender == address(this)) revert InvalidRecipient(spender); + + super._approve(owner, spender, value, emitEvent); + } + + /// @dev This check applies to transfer, minting, and burning. + /// @dev Disallows approving for address(this). + function _update(address from, address to, uint256 value) internal virtual override { + if (to == address(this)) revert InvalidRecipient(to); + + super._update(from, to, value); + } + + // ================================================================ + // │ Roles │ + // ================================================================ + + /// @notice Returns the current CCIPAdmin. + function getCCIPAdmin() external view virtual returns (address) { + return s_ccipAdmin; + } + + /// @notice Transfers the CCIPAdmin role to a new address + /// @dev only the owner can call this function, NOT the current ccipAdmin, and 1-step ownership transfer is used. + /// @param newAdmin The address to transfer the CCIPAdmin role to. Setting to address(0) is a valid way to revoke + /// the role. + function setCCIPAdmin( + address newAdmin + ) external virtual onlyRole(DEFAULT_ADMIN_ROLE) { + address currentAdmin = s_ccipAdmin; + + s_ccipAdmin = newAdmin; + + emit CCIPAdminTransferred(currentAdmin, newAdmin); + } +} diff --git a/contracts/src/v0.8/shared/token/ERC20/BurnMintERC20.sol b/contracts/src/v0.8/shared/token/ERC20/BurnMintERC20.sol index 068ae1b18b..d6f6262ce2 100644 --- a/contracts/src/v0.8/shared/token/ERC20/BurnMintERC20.sol +++ b/contracts/src/v0.8/shared/token/ERC20/BurnMintERC20.sol @@ -1,107 +1,51 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; -import {IGetCCIPAdmin} from "../../../shared/interfaces/IGetCCIPAdmin.sol"; -import {IBurnMintERC20} from "../../../shared/token/ERC20/IBurnMintERC20.sol"; +import {IBurnMintERC20} from "./IBurnMintERC20.sol"; -import {AccessControl} from "@openzeppelin/contracts@4.8.3/access/AccessControl.sol"; -import {IAccessControl} from "@openzeppelin/contracts@4.8.3/access/IAccessControl.sol"; -import {ERC20} from "@openzeppelin/contracts@4.8.3/token/ERC20/ERC20.sol"; -import {IERC20} from "@openzeppelin/contracts@4.8.3/token/ERC20/IERC20.sol"; -import {ERC20Burnable} from "@openzeppelin/contracts@4.8.3/token/ERC20/extensions/ERC20Burnable.sol"; -import {IERC165} from "@openzeppelin/contracts@4.8.3/utils/introspection/IERC165.sol"; +import {BaseERC20} from "./BaseERC20.sol"; + +import {IERC165} from "@openzeppelin/contracts@5.3.0/utils/introspection/IERC165.sol"; /// @notice A basic ERC20 compatible token contract with burn and minting roles. /// @dev The total supply can be limited during deployment. -contract BurnMintERC20 is IBurnMintERC20, IGetCCIPAdmin, IERC165, ERC20Burnable, AccessControl { - error MaxSupplyExceeded(uint256 supplyAfterMint); - error InvalidRecipient(address recipient); - - event CCIPAdminTransferred(address indexed previousAdmin, address indexed newAdmin); - - /// @dev The number of decimals for the token - uint8 internal immutable i_decimals; - - /// @dev The maximum supply of the token, 0 if unlimited - uint256 internal immutable i_maxSupply; +contract BurnMintERC20 is BaseERC20, IBurnMintERC20 { + function typeAndVersion() external pure virtual override returns (string memory) { + return "CCT 2.0.0-dev"; + } - /// @dev the CCIPAdmin can be used to register with the CCIP token admin registry, but has no other special powers, - /// and can only be transferred by the owner. - address internal s_ccipAdmin; + error MaxSupplyExceeded(uint256 supplyAfterMint); bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE"); - /// @dev the underscores in parameter names are used to suppress compiler warnings about shadowing ERC20 functions + /// @dev the underscores in parameter names are used to suppress compiler warnings about shadowing ERC20 functions. constructor( string memory name, string memory symbol, uint8 decimals_, uint256 maxSupply_, - uint256 preMint - ) ERC20(name, symbol) { - i_decimals = decimals_; - i_maxSupply = maxSupply_; - - s_ccipAdmin = msg.sender; - - // Mint the initial supply to the new Owner, saving gas by not calling if the mint amount is zero - if (preMint != 0) _mint(msg.sender, preMint); - - // Set up the owner as the initial minter and burner - _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); - } + uint256 preMint, + address newOwner + ) BaseERC20(name, symbol, decimals_, maxSupply_, preMint, newOwner) {} /// @inheritdoc IERC165 function supportsInterface( bytes4 interfaceId - ) public pure virtual override(AccessControl, IERC165) returns (bool) { - return interfaceId == type(IERC20).interfaceId || interfaceId == type(IBurnMintERC20).interfaceId - || interfaceId == type(IERC165).interfaceId || interfaceId == type(IAccessControl).interfaceId - || interfaceId == type(IGetCCIPAdmin).interfaceId; - } - - // ================================================================ - // │ ERC20 │ - // ================================================================ - - /// @dev Returns the number of decimals used in its user representation. - function decimals() public view virtual override returns (uint8) { - return i_decimals; - } - - /// @dev Returns the max supply of the token, 0 if unlimited. - function maxSupply() public view virtual returns (uint256) { - return i_maxSupply; - } - - /// @dev Uses OZ ERC20 _transfer to disallow sending to address(0). - /// @dev Disallows sending to address(this) - function _transfer(address from, address to, uint256 amount) internal virtual override { - if (to == address(this)) revert InvalidRecipient(to); - - super._transfer(from, to, amount); - } - - /// @dev Uses OZ ERC20 _approve to disallow approving for address(0). - /// @dev Disallows approving for address(this) - function _approve(address owner, address spender, uint256 amount) internal virtual override { - if (spender == address(this)) revert InvalidRecipient(spender); - - super._approve(owner, spender, amount); + ) public pure virtual override returns (bool) { + return super.supportsInterface(interfaceId) || interfaceId == type(IBurnMintERC20).interfaceId; } // ================================================================ // │ Burning & minting │ // ================================================================ - /// @inheritdoc ERC20Burnable /// @dev Uses OZ ERC20 _burn to disallow burning from address(0). /// @dev Decreases the total supply. function burn( uint256 amount - ) public virtual override(IBurnMintERC20, ERC20Burnable) onlyRole(BURNER_ROLE) { - super.burn(amount); + ) public virtual override onlyRole(BURNER_ROLE) { + _burn(_msgSender(), amount); } /// @inheritdoc IBurnMintERC20 @@ -111,21 +55,18 @@ contract BurnMintERC20 is IBurnMintERC20, IGetCCIPAdmin, IERC165, ERC20Burnable, burnFrom(account, amount); } - /// @inheritdoc ERC20Burnable /// @dev Uses OZ ERC20 _burn to disallow burning from address(0). /// @dev Decreases the total supply. - function burnFrom( - address account, - uint256 amount - ) public virtual override(IBurnMintERC20, ERC20Burnable) onlyRole(BURNER_ROLE) { - super.burnFrom(account, amount); + function burnFrom(address account, uint256 amount) public virtual override onlyRole(BURNER_ROLE) { + _spendAllowance(account, _msgSender(), amount); + _burn(account, amount); } /// @inheritdoc IBurnMintERC20 /// @dev Uses OZ ERC20 _mint to disallow minting to address(0). /// @dev Disallows minting to address(this) /// @dev Increases the total supply. - function mint(address account, uint256 amount) external virtual override onlyRole(MINTER_ROLE) { + function mint(address account, uint256 amount) public virtual override onlyRole(MINTER_ROLE) { if (account == address(this)) revert InvalidRecipient(account); if (i_maxSupply != 0 && totalSupply() + amount > i_maxSupply) revert MaxSupplyExceeded(totalSupply() + amount); @@ -141,27 +82,8 @@ contract BurnMintERC20 is IBurnMintERC20, IGetCCIPAdmin, IERC165, ERC20Burnable, /// access controls. This is handled in the inner functions. function grantMintAndBurnRoles( address burnAndMinter - ) external virtual { + ) public virtual { grantRole(MINTER_ROLE, burnAndMinter); grantRole(BURNER_ROLE, burnAndMinter); } - - /// @notice Returns the current CCIPAdmin - function getCCIPAdmin() external view virtual returns (address) { - return s_ccipAdmin; - } - - /// @notice Transfers the CCIPAdmin role to a new address - /// @dev only the owner can call this function, NOT the current ccipAdmin, and 1-step ownership transfer is used. - /// @param newAdmin The address to transfer the CCIPAdmin role to. Setting to address(0) is a valid way to revoke - /// the role - function setCCIPAdmin( - address newAdmin - ) external virtual onlyRole(DEFAULT_ADMIN_ROLE) { - address currentAdmin = s_ccipAdmin; - - s_ccipAdmin = newAdmin; - - emit CCIPAdminTransferred(currentAdmin, newAdmin); - } } diff --git a/contracts/src/v0.8/shared/token/ERC20/IBurnMintERC20.sol b/contracts/src/v0.8/shared/token/ERC20/IBurnMintERC20.sol index 46af5cd9d4..8a55159c15 100644 --- a/contracts/src/v0.8/shared/token/ERC20/IBurnMintERC20.sol +++ b/contracts/src/v0.8/shared/token/ERC20/IBurnMintERC20.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {IERC20} from "@openzeppelin/contracts@4.8.3/token/ERC20/IERC20.sol"; +import {IERC20} from "@openzeppelin/contracts@5.3.0/token/ERC20/IERC20.sol"; interface IBurnMintERC20 is IERC20 { /// @notice Mints new tokens for a given address. diff --git a/contracts/src/v0.8/shared/token/ERC20/IBurnMintERC20_OZ_4.sol b/contracts/src/v0.8/shared/token/ERC20/IBurnMintERC20_OZ_4.sol new file mode 100644 index 0000000000..46af5cd9d4 --- /dev/null +++ b/contracts/src/v0.8/shared/token/ERC20/IBurnMintERC20_OZ_4.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IERC20} from "@openzeppelin/contracts@4.8.3/token/ERC20/IERC20.sol"; + +interface IBurnMintERC20 is IERC20 { + /// @notice Mints new tokens for a given address. + /// @param account The address to mint the new tokens to. + /// @param amount The number of tokens to be minted. + /// @dev this function increases the total supply. + function mint(address account, uint256 amount) external; + + /// @notice Burns tokens from the sender. + /// @param amount The number of tokens to be burned. + /// @dev this function decreases the total supply. + function burn( + uint256 amount + ) external; + + /// @notice Burns tokens from a given address.. + /// @param account The address to burn tokens from. + /// @param amount The number of tokens to be burned. + /// @dev this function decreases the total supply. + function burn(address account, uint256 amount) external; + + /// @notice Burns tokens from a given address.. + /// @param account The address to burn tokens from. + /// @param amount The number of tokens to be burned. + /// @dev this function decreases the total supply. + function burnFrom(address account, uint256 amount) external; +} diff --git a/contracts/src/v0.8/shared/token/ERC677/BurnMintERC677.sol b/contracts/src/v0.8/shared/token/ERC677/BurnMintERC677.sol index 5dee874db3..528a0d1ba3 100644 --- a/contracts/src/v0.8/shared/token/ERC677/BurnMintERC677.sol +++ b/contracts/src/v0.8/shared/token/ERC677/BurnMintERC677.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; -import {IBurnMintERC20} from "../ERC20/IBurnMintERC20.sol"; +import {IBurnMintERC20} from "../ERC20/IBurnMintERC20_OZ_4.sol"; import {IERC677} from "./IERC677.sol"; import {OwnerIsCreator} from "../../access/OwnerIsCreator.sol"; diff --git a/gethwrappers/shared/generated/latest/burn_mint_erc20/burn_mint_erc20.go b/gethwrappers/shared/generated/latest/burn_mint_erc20/burn_mint_erc20.go index 47a06243e2..aa42176e92 100644 --- a/gethwrappers/shared/generated/latest/burn_mint_erc20/burn_mint_erc20.go +++ b/gethwrappers/shared/generated/latest/burn_mint_erc20/burn_mint_erc20.go @@ -29,15 +29,15 @@ var ( ) var BurnMintERC20MetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"symbol\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"preMint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BURNER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MINTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burnFrom\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"subtractedValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCCIPAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantMintAndBurnRoles\",\"inputs\":[{\"name\":\"burnAndMinter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"addedValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"mint\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"name\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCCIPAdmin\",\"inputs\":[{\"name\":\"newAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"symbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Approval\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CCIPAdminTransferred\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transfer\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidRecipient\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"MaxSupplyExceeded\",\"inputs\":[{\"name\":\"supplyAfterMint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", - Bin: "0x60c06040523480156200001157600080fd5b5060405162002260380380620022608339810160408190526200003491620002e7565b848460036200004483826200040b565b5060046200005382826200040b565b50505060ff831660805260a0829052600680546001600160a01b03191633179055801562000087576200008733826200009f565b6200009460003362000166565b5050505050620004f9565b6001600160a01b038216620000fa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200010e9190620004d7565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b5050565b620001728282620001f5565b620001625760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001ac3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b505050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200024a57600080fd5b81516001600160401b038082111562000267576200026762000222565b604051601f8301601f19908116603f0116810190828211818310171562000292576200029262000222565b81604052838152602092508683858801011115620002af57600080fd5b600091505b83821015620002d35785820183015181830184015290820190620002b4565b600093810190920192909252949350505050565b600080600080600060a086880312156200030057600080fd5b85516001600160401b03808211156200031857600080fd5b6200032689838a0162000238565b965060208801519150808211156200033d57600080fd5b506200034c8882890162000238565b945050604086015160ff811681146200036457600080fd5b6060870151608090970151959894975095949392505050565b600181811c908216806200039257607f821691505b602082108103620003b357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f057600081815260208120601f850160051c81016020861015620003e25750805b601f850160051c820191505b818110156200040357828155600101620003ee565b505050505050565b81516001600160401b0381111562000427576200042762000222565b6200043f816200043884546200037d565b84620003b9565b602080601f8311600181146200047757600084156200045e5750858301515b600019600386901b1c1916600185901b17855562000403565b600085815260208120601f198616915b82811015620004a85788860151825594840194600190910190840162000487565b5085821015620004c75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200021c57634e487b7160e01b600052601160045260246000fd5b60805160a051611d336200052d6000396000818161047c015281816108f2015261091c015260006102a40152611d336000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806379cc6790116100f9578063a8fa343c11610097578063d539139311610071578063d539139314610440578063d547741f14610467578063d5abeb011461047a578063dd62ed3e146104a057600080fd5b8063a8fa343c14610407578063a9059cbb1461041a578063c630948d1461042d57600080fd5b806395d89b41116100d357806395d89b41146103d15780639dc29fac146103d9578063a217fddf146103ec578063a457c2d7146103f457600080fd5b806379cc6790146103505780638fd6a6ac1461036357806391d148541461038b57600080fd5b80632f2ff15d11610166578063395093511161014057806339509351146102e157806340c10f19146102f457806342966c681461030757806370a082311461031a57600080fd5b80632f2ff15d14610288578063313ce5671461029d57806336568abe146102ce57600080fd5b806318160ddd116101a257806318160ddd1461021957806323b872dd1461022b578063248a9ca31461023e578063282c51f31461026157600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d7366004611996565b6104e6565b60405190151581526020015b60405180910390f35b6101f9610663565b6040516101e891906119fc565b6101dc610214366004611a76565b6106f5565b6002545b6040519081526020016101e8565b6101dc610239366004611aa0565b61070d565b61021d61024c366004611adc565b60009081526005602052604090206001015490565b61021d7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b61029b610296366004611af5565b610731565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e8565b61029b6102dc366004611af5565b61075b565b6101dc6102ef366004611a76565b610813565b61029b610302366004611a76565b61085f565b61029b610315366004611adc565b6109a9565b61021d610328366004611b21565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61029b61035e366004611a76565b6109dc565b60065460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b6101dc610399366004611af5565b600091825260056020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f9610a10565b61029b6103e7366004611a76565b610a1f565b61021d600081565b6101dc610402366004611a76565b610a29565b61029b610415366004611b21565b610afa565b6101dc610428366004611a76565b610b7d565b61029b61043b366004611b21565b610b8b565b61021d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61029b610475366004611af5565b610be2565b7f000000000000000000000000000000000000000000000000000000000000000061021d565b61021d6104ae366004611b3c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b0700000000000000000000000000000000000000000000000000000000148061057957507fffffffff0000000000000000000000000000000000000000000000000000000082167fe6599b4d00000000000000000000000000000000000000000000000000000000145b806105c557507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b8061061157507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b8061065d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8fd6a6ac00000000000000000000000000000000000000000000000000000000145b92915050565b60606003805461067290611b66565b80601f016020809104026020016040519081016040528092919081815260200182805461069e90611b66565b80156106eb5780601f106106c0576101008083540402835291602001916106eb565b820191906000526020600020905b8154815290600101906020018083116106ce57829003601f168201915b5050505050905090565b600033610703818585610c07565b5060019392505050565b60003361071b858285610c79565b610726858585610d50565b506001949350505050565b60008281526005602052604090206001015461074c81610dc2565b6107568383610dcc565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610805576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61080f8282610ec0565b5050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909190610703908290869061085a908790611be8565b610c07565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661088981610dc2565b3073ffffffffffffffffffffffffffffffffffffffff8416036108f0576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016107fc565b7f00000000000000000000000000000000000000000000000000000000000000001580159061095157507f00000000000000000000000000000000000000000000000000000000000000008261094560025490565b61094f9190611be8565b115b1561099f578161096060025490565b61096a9190611be8565b6040517fcbbf11130000000000000000000000000000000000000000000000000000000081526004016107fc91815260200190565b6107568383610f7b565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a8486109d381610dc2565b61080f8261106e565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848610a0681610dc2565b6107568383611078565b60606004805461067290611b66565b61080f82826109dc565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016107fc565b6107268286868403610c07565b6000610b0581610dc2565b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f9524c9e4b0b61eb018dd58a1cd856e3e74009528328ab4a613b434fa631d724290600090a3505050565b600033610703818585610d50565b610bb57f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682610731565b610bdf7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84882610731565b50565b600082815260056020526040902060010154610bfd81610dc2565b6107568383610ec0565b3073ffffffffffffffffffffffffffffffffffffffff831603610c6e576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016107fc565b61075683838361108d565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d4a5781811015610d3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107fc565b610d4a8484848403610c07565b50505050565b3073ffffffffffffffffffffffffffffffffffffffff831603610db7576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016107fc565b610756838383611240565b610bdf81336114af565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661080f57600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610e623390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff161561080f57600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b73ffffffffffffffffffffffffffffffffffffffff8216610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016107fc565b806002600082825461100a9190611be8565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b610bdf3382611569565b611083823383610c79565b61080f8282611569565b73ffffffffffffffffffffffffffffffffffffffff831661112f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016107fc565b73ffffffffffffffffffffffffffffffffffffffff82166111d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166112e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107fc565b73ffffffffffffffffffffffffffffffffffffffff8216611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016107fc565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610d4a565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661080f576114ef8161172d565b6114fa83602061174c565b60405160200161150b929190611bfb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526107fc916004016119fc565b73ffffffffffffffffffffffffffffffffffffffff821661160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156116c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016107fc565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b606061065d73ffffffffffffffffffffffffffffffffffffffff831660145b6060600061175b836002611c7c565b611766906002611be8565b67ffffffffffffffff81111561177e5761177e611c93565b6040519080825280601f01601f1916602001820160405280156117a8576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106117df576117df611cc2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061184257611842611cc2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061187e846002611c7c565b611889906001611be8565b90505b6001811115611926577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106118ca576118ca611cc2565b1a60f81b8282815181106118e0576118e0611cc2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361191f81611cf1565b905061188c565b50831561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107fc565b9392505050565b6000602082840312156119a857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461198f57600080fd5b60005b838110156119f35781810151838201526020016119db565b50506000910152565b6020815260008251806020840152611a1b8160408501602087016119d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611a7157600080fd5b919050565b60008060408385031215611a8957600080fd5b611a9283611a4d565b946020939093013593505050565b600080600060608486031215611ab557600080fd5b611abe84611a4d565b9250611acc60208501611a4d565b9150604084013590509250925092565b600060208284031215611aee57600080fd5b5035919050565b60008060408385031215611b0857600080fd5b82359150611b1860208401611a4d565b90509250929050565b600060208284031215611b3357600080fd5b61198f82611a4d565b60008060408385031215611b4f57600080fd5b611b5883611a4d565b9150611b1860208401611a4d565b600181811c90821680611b7a57607f821691505b602082108103611bb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561065d5761065d611bb9565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611c338160178501602088016119d8565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351611c708160288401602088016119d8565b01602801949350505050565b808202811582820484141761065d5761065d611bb9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081611d0057611d00611bb9565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea164736f6c6343000813000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"symbol\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"preMint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BURNER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MINTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burnFrom\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCCIPAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantMintAndBurnRoles\",\"inputs\":[{\"name\":\"burnAndMinter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"mint\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"name\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCCIPAdmin\",\"inputs\":[{\"name\":\"newAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"symbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"Approval\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CCIPAdminTransferred\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transfer\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ERC20InsufficientAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC20InsufficientBalance\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidApprover\",\"inputs\":[{\"name\":\"approver\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidSender\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidSpender\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidRecipient\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"MaxSupplyExceeded\",\"inputs\":[{\"name\":\"supplyAfterMint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x60c060405234801561001057600080fd5b50604051611bb3380380611bb383398101604081905261002f916103d9565b858585858585858560036100438382610517565b5060046100508282610517565b50505060ff841660805260a083905260006001600160a01b038216156100765781610078565b335b600680546001600160a01b0319166001600160a01b038316179055905082156100a5576100a581846100c3565b6100b0600082610102565b50505050505050505050505050506105f6565b6001600160a01b0382166100f25760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b6100fe600083836101b2565b5050565b60008281526005602090815260408083206001600160a01b038516845290915281205460ff166101a85760008381526005602090815260408083206001600160a01b03861684529091529020805460ff191660011790556101603390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101ac565b5060005b92915050565b306001600160a01b038316036101e657604051630bc2c5df60e11b81526001600160a01b03831660048201526024016100e9565b6101f18383836101f6565b505050565b6001600160a01b03831661022157806002600082825461021691906105d5565b909155506102939050565b6001600160a01b038316600090815260208190526040902054818110156102745760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016100e9565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166102af576002805482900390556102ce565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161031391815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261034757600080fd5b81516001600160401b0381111561036057610360610320565b604051601f8201601f19908116603f011681016001600160401b038111828210171561038e5761038e610320565b6040528181528382016020018510156103a657600080fd5b60005b828110156103c5576020818601810151838301820152016103a9565b506000918101602001919091529392505050565b60008060008060008060c087890312156103f257600080fd5b86516001600160401b0381111561040857600080fd5b61041489828a01610336565b602089015190975090506001600160401b0381111561043257600080fd5b61043e89828a01610336565b955050604087015160ff8116811461045557600080fd5b6060880151608089015160a08a015192965090945092506001600160a01b038116811461048157600080fd5b809150509295509295509295565b600181811c908216806104a357607f821691505b6020821081036104c357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101f157806000526020600020601f840160051c810160208510156104f05750805b601f840160051c820191505b8181101561051057600081556001016104fc565b5050505050565b81516001600160401b0381111561053057610530610320565b6105448161053e845461048f565b846104c9565b6020601f82116001811461057857600083156105605750848201515b600019600385901b1c1916600184901b178455610510565b600084815260208120601f198516915b828110156105a85787850151825560209485019460019092019101610588565b50848210156105c65786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156101ac57634e487b7160e01b600052601160045260246000fd5b60805160a05161158a610629600039600081816104840152818161073a0152610764015260006102d2015261158a6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806370a08231116100f9578063a8fa343c11610097578063d539139311610071578063d539139314610448578063d547741f1461046f578063d5abeb0114610482578063dd62ed3e146104a857600080fd5b8063a8fa343c1461040f578063a9059cbb14610422578063c630948d1461043557600080fd5b806391d14854116100d357806391d14854146103a657806395d89b41146103ec5780639dc29fac146103f4578063a217fddf1461040757600080fd5b806370a082311461033557806379cc67901461036b5780638fd6a6ac1461037e57600080fd5b8063248a9ca311610166578063313ce56711610140578063313ce567146102cb57806336568abe146102fc57806340c10f191461030f57806342966c681461032257600080fd5b8063248a9ca31461026c578063282c51f31461028f5780632f2ff15d146102b657600080fd5b806318160ddd1161019757806318160ddd1461020e578063181f5a771461022057806323b872dd1461025957600080fd5b806301ffc9a7146101be57806306fdde03146101e6578063095ea7b3146101fb575b600080fd5b6101d16101cc366004611321565b6104ee565b60405190151581526020015b60405180910390f35b6101ee61054b565b6040516101dd919061136a565b6101d16102093660046113ff565b6105dd565b6002545b6040519081526020016101dd565b60408051808201909152600d81527f43435420322e302e302d6465760000000000000000000000000000000000000060208201526101ee565b6101d1610267366004611429565b6105f5565b61021261027a366004611466565b60009081526005602052604090206001015490565b6102127f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b6102c96102c436600461147f565b610619565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101dd565b6102c961030a36600461147f565b610644565b6102c961031d3660046113ff565b6106a2565b6102c9610330366004611466565b6107f1565b6102126103433660046114ab565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102c96103793660046113ff565b610829565b60065460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101dd565b6101d16103b436600461147f565b600091825260056020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101ee610868565b6102c96104023660046113ff565b610877565b610212600081565b6102c961041d3660046114ab565b610881565b6101d16104303660046113ff565b610904565b6102c96104433660046114ab565b610912565b6102127f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102c961047d36600461147f565b610969565b7f0000000000000000000000000000000000000000000000000000000000000000610212565b6102126104b63660046114c6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60006104f98261098e565b8061054557507fffffffff0000000000000000000000000000000000000000000000000000000082167fe6599b4d00000000000000000000000000000000000000000000000000000000145b92915050565b60606003805461055a906114f0565b80601f0160208091040260200160405190810160405280929190818152602001828054610586906114f0565b80156105d35780601f106105a8576101008083540402835291602001916105d3565b820191906000526020600020905b8154815290600101906020018083116105b657829003601f168201915b5050505050905090565b6000336105eb818585610abe565b5060019392505050565b600033610603858285610acb565b61060e858585610b95565b506001949350505050565b60008281526005602052604090206001015461063481610c40565b61063e8383610c4a565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610693576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069d8282610d4a565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106cc81610c40565b3073ffffffffffffffffffffffffffffffffffffffff841603610738576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000001580159061079957507f00000000000000000000000000000000000000000000000000000000000000008261078d60025490565b6107979190611543565b115b156107e757816107a860025490565b6107b29190611543565b6040517fcbbf111300000000000000000000000000000000000000000000000000000000815260040161072f91815260200190565b61069d8383610e09565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861081b81610c40565b6108253383610e65565b5050565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861085381610c40565b61085e833384610acb565b61069d8383610e65565b60606004805461055a906114f0565b6108258282610829565b600061088c81610c40565b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f9524c9e4b0b61eb018dd58a1cd856e3e74009528328ab4a613b434fa631d724290600090a3505050565b6000336105eb818585610b95565b61093c7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682610619565b6109667f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84882610619565b50565b60008281526005602052604090206001015461098481610c40565b61063e8383610d4a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b07000000000000000000000000000000000000000000000000000000001480610a2157507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b80610a6d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b8061054557507fffffffff0000000000000000000000000000000000000000000000000000000082167f8fd6a6ac000000000000000000000000000000000000000000000000000000001492915050565b61069d8383836001610ec1565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561063e5781811015610b86576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018290526044810183905260640161072f565b61063e84848484036000610ec1565b73ffffffffffffffffffffffffffffffffffffffff8316610be5576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526000600482015260240161072f565b73ffffffffffffffffffffffffffffffffffffffff8216610c35576040517fec442f050000000000000000000000000000000000000000000000000000000081526000600482015260240161072f565b61069d838383610f34565b6109668133610fa6565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d4257600083815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610ce03390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610545565b506000610545565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d4257600083815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610545565b73ffffffffffffffffffffffffffffffffffffffff8216610e59576040517fec442f050000000000000000000000000000000000000000000000000000000081526000600482015260240161072f565b61082560008383610f34565b73ffffffffffffffffffffffffffffffffffffffff8216610eb5576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526000600482015260240161072f565b61082582600083610f34565b3073ffffffffffffffffffffffffffffffffffffffff841603610f28576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161072f565b61063e8484848461102e565b3073ffffffffffffffffffffffffffffffffffffffff831603610f9b576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240161072f565b61069d838383611176565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610825576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440161072f565b73ffffffffffffffffffffffffffffffffffffffff841661107e576040517fe602df050000000000000000000000000000000000000000000000000000000081526000600482015260240161072f565b73ffffffffffffffffffffffffffffffffffffffff83166110ce576040517f94280d620000000000000000000000000000000000000000000000000000000081526000600482015260240161072f565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561063e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161116891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166111ae5780600260008282546111a39190611543565b909155506112609050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015611234576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161072f565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216611289576002805482900390556112b5565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161131491815260200190565b60405180910390a3505050565b60006020828403121561133357600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461136357600080fd5b9392505050565b602081526000825180602084015260005b81811015611398576020818601810151604086840101520161137b565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146113fa57600080fd5b919050565b6000806040838503121561141257600080fd5b61141b836113d6565b946020939093013593505050565b60008060006060848603121561143e57600080fd5b611447846113d6565b9250611455602085016113d6565b929592945050506040919091013590565b60006020828403121561147857600080fd5b5035919050565b6000806040838503121561149257600080fd5b823591506114a2602084016113d6565b90509250929050565b6000602082840312156114bd57600080fd5b611363826113d6565b600080604083850312156114d957600080fd5b6114e2836113d6565b91506114a2602084016113d6565b600181811c9082168061150457607f821691505b60208210810361153d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80820180821115610545577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c634300081a000a", } var BurnMintERC20ABI = BurnMintERC20MetaData.ABI var BurnMintERC20Bin = BurnMintERC20MetaData.Bin -func DeployBurnMintERC20(auth *bind.TransactOpts, backend bind.ContractBackend, name string, symbol string, decimals_ uint8, maxSupply_ *big.Int, preMint *big.Int) (common.Address, *types.Transaction, *BurnMintERC20, error) { +func DeployBurnMintERC20(auth *bind.TransactOpts, backend bind.ContractBackend, name string, symbol string, decimals_ uint8, maxSupply_ *big.Int, preMint *big.Int, newOwner common.Address) (common.Address, *types.Transaction, *BurnMintERC20, error) { parsed, err := BurnMintERC20MetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -46,7 +46,7 @@ func DeployBurnMintERC20(auth *bind.TransactOpts, backend bind.ContractBackend, return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BurnMintERC20Bin), backend, name, symbol, decimals_, maxSupply_, preMint) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BurnMintERC20Bin), backend, name, symbol, decimals_, maxSupply_, preMint, newOwner) if err != nil { return common.Address{}, nil, nil, err } @@ -477,16 +477,38 @@ func (_BurnMintERC20 *BurnMintERC20CallerSession) TotalSupply() (*big.Int, error return _BurnMintERC20.Contract.TotalSupply(&_BurnMintERC20.CallOpts) } -func (_BurnMintERC20 *BurnMintERC20Transactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.contract.Transact(opts, "approve", spender, amount) +func (_BurnMintERC20 *BurnMintERC20Caller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BurnMintERC20.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_BurnMintERC20 *BurnMintERC20Session) TypeAndVersion() (string, error) { + return _BurnMintERC20.Contract.TypeAndVersion(&_BurnMintERC20.CallOpts) +} + +func (_BurnMintERC20 *BurnMintERC20CallerSession) TypeAndVersion() (string, error) { + return _BurnMintERC20.Contract.TypeAndVersion(&_BurnMintERC20.CallOpts) +} + +func (_BurnMintERC20 *BurnMintERC20Transactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20.contract.Transact(opts, "approve", spender, value) } -func (_BurnMintERC20 *BurnMintERC20Session) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.Contract.Approve(&_BurnMintERC20.TransactOpts, spender, amount) +func (_BurnMintERC20 *BurnMintERC20Session) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20.Contract.Approve(&_BurnMintERC20.TransactOpts, spender, value) } -func (_BurnMintERC20 *BurnMintERC20TransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.Contract.Approve(&_BurnMintERC20.TransactOpts, spender, amount) +func (_BurnMintERC20 *BurnMintERC20TransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20.Contract.Approve(&_BurnMintERC20.TransactOpts, spender, value) } func (_BurnMintERC20 *BurnMintERC20Transactor) Burn(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { @@ -525,18 +547,6 @@ func (_BurnMintERC20 *BurnMintERC20TransactorSession) BurnFrom(account common.Ad return _BurnMintERC20.Contract.BurnFrom(&_BurnMintERC20.TransactOpts, account, amount) } -func (_BurnMintERC20 *BurnMintERC20Transactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue) -} - -func (_BurnMintERC20 *BurnMintERC20Session) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.Contract.DecreaseAllowance(&_BurnMintERC20.TransactOpts, spender, subtractedValue) -} - -func (_BurnMintERC20 *BurnMintERC20TransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.Contract.DecreaseAllowance(&_BurnMintERC20.TransactOpts, spender, subtractedValue) -} - func (_BurnMintERC20 *BurnMintERC20Transactor) GrantMintAndBurnRoles(opts *bind.TransactOpts, burnAndMinter common.Address) (*types.Transaction, error) { return _BurnMintERC20.contract.Transact(opts, "grantMintAndBurnRoles", burnAndMinter) } @@ -561,18 +571,6 @@ func (_BurnMintERC20 *BurnMintERC20TransactorSession) GrantRole(role [32]byte, a return _BurnMintERC20.Contract.GrantRole(&_BurnMintERC20.TransactOpts, role, account) } -func (_BurnMintERC20 *BurnMintERC20Transactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.contract.Transact(opts, "increaseAllowance", spender, addedValue) -} - -func (_BurnMintERC20 *BurnMintERC20Session) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.Contract.IncreaseAllowance(&_BurnMintERC20.TransactOpts, spender, addedValue) -} - -func (_BurnMintERC20 *BurnMintERC20TransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.Contract.IncreaseAllowance(&_BurnMintERC20.TransactOpts, spender, addedValue) -} - func (_BurnMintERC20 *BurnMintERC20Transactor) Mint(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) { return _BurnMintERC20.contract.Transact(opts, "mint", account, amount) } @@ -585,16 +583,16 @@ func (_BurnMintERC20 *BurnMintERC20TransactorSession) Mint(account common.Addres return _BurnMintERC20.Contract.Mint(&_BurnMintERC20.TransactOpts, account, amount) } -func (_BurnMintERC20 *BurnMintERC20Transactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _BurnMintERC20.contract.Transact(opts, "renounceRole", role, account) +func (_BurnMintERC20 *BurnMintERC20Transactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _BurnMintERC20.contract.Transact(opts, "renounceRole", role, callerConfirmation) } -func (_BurnMintERC20 *BurnMintERC20Session) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _BurnMintERC20.Contract.RenounceRole(&_BurnMintERC20.TransactOpts, role, account) +func (_BurnMintERC20 *BurnMintERC20Session) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _BurnMintERC20.Contract.RenounceRole(&_BurnMintERC20.TransactOpts, role, callerConfirmation) } -func (_BurnMintERC20 *BurnMintERC20TransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _BurnMintERC20.Contract.RenounceRole(&_BurnMintERC20.TransactOpts, role, account) +func (_BurnMintERC20 *BurnMintERC20TransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _BurnMintERC20.Contract.RenounceRole(&_BurnMintERC20.TransactOpts, role, callerConfirmation) } func (_BurnMintERC20 *BurnMintERC20Transactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { @@ -621,28 +619,28 @@ func (_BurnMintERC20 *BurnMintERC20TransactorSession) SetCCIPAdmin(newAdmin comm return _BurnMintERC20.Contract.SetCCIPAdmin(&_BurnMintERC20.TransactOpts, newAdmin) } -func (_BurnMintERC20 *BurnMintERC20Transactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.contract.Transact(opts, "transfer", to, amount) +func (_BurnMintERC20 *BurnMintERC20Transactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20.contract.Transact(opts, "transfer", to, value) } -func (_BurnMintERC20 *BurnMintERC20Session) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.Contract.Transfer(&_BurnMintERC20.TransactOpts, to, amount) +func (_BurnMintERC20 *BurnMintERC20Session) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20.Contract.Transfer(&_BurnMintERC20.TransactOpts, to, value) } -func (_BurnMintERC20 *BurnMintERC20TransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.Contract.Transfer(&_BurnMintERC20.TransactOpts, to, amount) +func (_BurnMintERC20 *BurnMintERC20TransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20.Contract.Transfer(&_BurnMintERC20.TransactOpts, to, value) } -func (_BurnMintERC20 *BurnMintERC20Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.contract.Transact(opts, "transferFrom", from, to, amount) +func (_BurnMintERC20 *BurnMintERC20Transactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20.contract.Transact(opts, "transferFrom", from, to, value) } -func (_BurnMintERC20 *BurnMintERC20Session) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.Contract.TransferFrom(&_BurnMintERC20.TransactOpts, from, to, amount) +func (_BurnMintERC20 *BurnMintERC20Session) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20.Contract.TransferFrom(&_BurnMintERC20.TransactOpts, from, to, value) } -func (_BurnMintERC20 *BurnMintERC20TransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20.Contract.TransferFrom(&_BurnMintERC20.TransactOpts, from, to, amount) +func (_BurnMintERC20 *BurnMintERC20TransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20.Contract.TransferFrom(&_BurnMintERC20.TransactOpts, from, to, value) } type BurnMintERC20ApprovalIterator struct { @@ -1547,7 +1545,9 @@ type BurnMintERC20Interface interface { TotalSupply(opts *bind.CallOpts) (*big.Int, error) - Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) + TypeAndVersion(opts *bind.CallOpts) (string, error) + + Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) Burn(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) @@ -1555,25 +1555,21 @@ type BurnMintERC20Interface interface { BurnFrom(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) - DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) - GrantMintAndBurnRoles(opts *bind.TransactOpts, burnAndMinter common.Address) (*types.Transaction, error) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) - IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) - Mint(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) - RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) + RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) SetCCIPAdmin(opts *bind.TransactOpts, newAdmin common.Address) (*types.Transaction, error) - Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) + Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) - TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) + TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*BurnMintERC20ApprovalIterator, error) diff --git a/gethwrappers/shared/generated/latest/burn_mint_erc20_with_drip/burn_mint_erc20_with_drip.go b/gethwrappers/shared/generated/latest/burn_mint_erc20_with_drip/burn_mint_erc20_with_drip.go index 9958ed2b49..e6e59e2545 100644 --- a/gethwrappers/shared/generated/latest/burn_mint_erc20_with_drip/burn_mint_erc20_with_drip.go +++ b/gethwrappers/shared/generated/latest/burn_mint_erc20_with_drip/burn_mint_erc20_with_drip.go @@ -29,8 +29,8 @@ var ( ) var BurnMintERC20WithDripMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"symbol\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BURNER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MINTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burnFrom\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"subtractedValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"drip\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCCIPAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantMintAndBurnRoles\",\"inputs\":[{\"name\":\"burnAndMinter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"addedValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"mint\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"name\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCCIPAdmin\",\"inputs\":[{\"name\":\"newAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"symbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Approval\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CCIPAdminTransferred\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transfer\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidRecipient\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"MaxSupplyExceeded\",\"inputs\":[{\"name\":\"supplyAfterMint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", - Bin: "0x60c06040523480156200001157600080fd5b506040516200226d3803806200226d8339810160408190526200003491620002f0565b81816012600080848460036200004b8382620003e8565b5060046200005a8282620003e8565b50505060ff831660805260a0829052600680546001600160a01b0319163317905580156200008e576200008e3382620000a8565b6200009b6000336200016f565b50505050505050620004d6565b6001600160a01b038216620001035760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620001179190620004b4565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b5050565b6200017b8282620001fe565b6200016b5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620001b53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b505050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200025357600080fd5b81516001600160401b03808211156200027057620002706200022b565b604051601f8301601f19908116603f011681019082821181831017156200029b576200029b6200022b565b81604052838152602092508683858801011115620002b857600080fd5b600091505b83821015620002dc5785820183015181830184015290820190620002bd565b600093810190920192909252949350505050565b600080604083850312156200030457600080fd5b82516001600160401b03808211156200031c57600080fd5b6200032a8683870162000241565b935060208501519150808211156200034157600080fd5b50620003508582860162000241565b9150509250929050565b600181811c908216806200036f57607f821691505b6020821081036200039057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001f957600081815260208120601f850160051c81016020861015620003bf5750805b601f850160051c820191505b81811015620003e057828155600101620003cb565b505050505050565b81516001600160401b038111156200040457620004046200022b565b6200041c816200041584546200035a565b8462000396565b602080601f8311600181146200045457600084156200043b5750858301515b600019600386901b1c1916600185901b178555620003e0565b600085815260208120601f198616915b82811015620004855788860151825594840194600190910190840162000464565b5085821015620004a45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200022557634e487b7160e01b600052601160045260246000fd5b60805160a051611d636200050a6000396000818161049a01528181610910015261093a015260006102af0152611d636000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063a457c2d7116100a2578063d539139311610071578063d53913931461045e578063d547741f14610485578063d5abeb0114610498578063dd62ed3e146104be57600080fd5b8063a457c2d714610412578063a8fa343c14610425578063a9059cbb14610438578063c630948d1461044b57600080fd5b806391d14854116100de57806391d14854146103a957806395d89b41146103ef5780639dc29fac146103f7578063a217fddf1461040a57600080fd5b806370a082311461033857806379cc67901461036e5780638fd6a6ac1461038157600080fd5b80632f2ff15d11610171578063395093511161014b57806339509351146102ec57806340c10f19146102ff57806342966c681461031257806367a5cd061461032557600080fd5b80632f2ff15d14610293578063313ce567146102a857806336568abe146102d957600080fd5b806318160ddd116101ad57806318160ddd1461022457806323b872dd14610236578063248a9ca314610249578063282c51f31461026c57600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063095ea7b314610211575b600080fd5b6101e76101e23660046119c6565b610504565b60405190151581526020015b60405180910390f35b610204610681565b6040516101f39190611a2c565b6101e761021f366004611aa6565b610713565b6002545b6040519081526020016101f3565b6101e7610244366004611ad0565b61072b565b610228610257366004611b0c565b60009081526005602052604090206001015490565b6102287f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b6102a66102a1366004611b25565b61074f565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f3565b6102a66102e7366004611b25565b610779565b6101e76102fa366004611aa6565b610831565b6102a661030d366004611aa6565b61087d565b6102a6610320366004611b0c565b6109c7565b6102a6610333366004611b51565b6109fa565b610228610346366004611b51565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102a661037c366004611aa6565b610a0f565b60065460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e76103b7366004611b25565b600091825260056020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b610204610a43565b6102a6610405366004611aa6565b610a52565b610228600081565b6101e7610420366004611aa6565b610a5c565b6102a6610433366004611b51565b610b2d565b6101e7610446366004611aa6565b610bb0565b6102a6610459366004611b51565b610bbe565b6102287f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102a6610493366004611b25565b610c12565b7f0000000000000000000000000000000000000000000000000000000000000000610228565b6102286104cc366004611b6c565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b0700000000000000000000000000000000000000000000000000000000148061059757507fffffffff0000000000000000000000000000000000000000000000000000000082167fe6599b4d00000000000000000000000000000000000000000000000000000000145b806105e357507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b8061062f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b8061067b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8fd6a6ac00000000000000000000000000000000000000000000000000000000145b92915050565b60606003805461069090611b96565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc90611b96565b80156107095780601f106106de57610100808354040283529160200191610709565b820191906000526020600020905b8154815290600101906020018083116106ec57829003601f168201915b5050505050905090565b600033610721818585610c37565b5060019392505050565b600033610739858285610ca9565b610744858585610d80565b506001949350505050565b60008281526005602052604090206001015461076a81610df2565b6107748383610dfc565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61082d8282610ef0565b5050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091906107219082908690610878908790611c18565b610c37565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66108a781610df2565b3073ffffffffffffffffffffffffffffffffffffffff84160361090e576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161081a565b7f00000000000000000000000000000000000000000000000000000000000000001580159061096f57507f00000000000000000000000000000000000000000000000000000000000000008261096360025490565b61096d9190611c18565b115b156109bd578161097e60025490565b6109889190611c18565b6040517fcbbf111300000000000000000000000000000000000000000000000000000000815260040161081a91815260200190565b6107748383610fab565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a8486109f181610df2565b61082d8261109e565b610a0c81670de0b6b3a7640000610fab565b50565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848610a3981610df2565b61077483836110a8565b60606004805461069090611b96565b61082d8282610a0f565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490919083811015610b20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161081a565b6107448286868403610c37565b6000610b3881610df2565b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f9524c9e4b0b61eb018dd58a1cd856e3e74009528328ab4a613b434fa631d724290600090a3505050565b600033610721818585610d80565b610be87f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68261074f565b610a0c7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a8488261074f565b600082815260056020526040902060010154610c2d81610df2565b6107748383610ef0565b3073ffffffffffffffffffffffffffffffffffffffff831603610c9e576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240161081a565b6107748383836110bd565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d7a5781811015610d6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161081a565b610d7a8484848403610c37565b50505050565b3073ffffffffffffffffffffffffffffffffffffffff831603610de7576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240161081a565b610774838383611270565b610a0c81336114df565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661082d57600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610e923390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff161561082d57600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b73ffffffffffffffffffffffffffffffffffffffff8216611028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161081a565b806002600082825461103a9190611c18565b909155505073ffffffffffffffffffffffffffffffffffffffff8216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b610a0c3382611599565b6110b3823383610ca9565b61082d8282611599565b73ffffffffffffffffffffffffffffffffffffffff831661115f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161081a565b73ffffffffffffffffffffffffffffffffffffffff8216611202576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161081a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161081a565b73ffffffffffffffffffffffffffffffffffffffff82166113b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161081a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161081a565b73ffffffffffffffffffffffffffffffffffffffff848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610d7a565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661082d5761151f8161175d565b61152a83602061177c565b60405160200161153b929190611c2b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261081a91600401611a2c565b73ffffffffffffffffffffffffffffffffffffffff821661163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161081a565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054818110156116f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161081a565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b606061067b73ffffffffffffffffffffffffffffffffffffffff831660145b6060600061178b836002611cac565b611796906002611c18565b67ffffffffffffffff8111156117ae576117ae611cc3565b6040519080825280601f01601f1916602001820160405280156117d8576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061180f5761180f611cf2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061187257611872611cf2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006118ae846002611cac565b6118b9906001611c18565b90505b6001811115611956577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106118fa576118fa611cf2565b1a60f81b82828151811061191057611910611cf2565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361194f81611d21565b90506118bc565b5083156119bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161081a565b9392505050565b6000602082840312156119d857600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146119bf57600080fd5b60005b83811015611a23578181015183820152602001611a0b565b50506000910152565b6020815260008251806020840152611a4b816040850160208701611a08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611aa157600080fd5b919050565b60008060408385031215611ab957600080fd5b611ac283611a7d565b946020939093013593505050565b600080600060608486031215611ae557600080fd5b611aee84611a7d565b9250611afc60208501611a7d565b9150604084013590509250925092565b600060208284031215611b1e57600080fd5b5035919050565b60008060408385031215611b3857600080fd5b82359150611b4860208401611a7d565b90509250929050565b600060208284031215611b6357600080fd5b6119bf82611a7d565b60008060408385031215611b7f57600080fd5b611b8883611a7d565b9150611b4860208401611a7d565b600181811c90821680611baa57607f821691505b602082108103611be3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561067b5761067b611be9565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611c63816017850160208801611a08565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351611ca0816028840160208801611a08565b01602801949350505050565b808202811582820484141761067b5761067b611be9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081611d3057611d30611be9565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea164736f6c6343000813000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"symbol\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BURNER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MINTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burnFrom\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"drip\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCCIPAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantMintAndBurnRoles\",\"inputs\":[{\"name\":\"burnAndMinter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"mint\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"name\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCCIPAdmin\",\"inputs\":[{\"name\":\"newAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"symbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"Approval\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CCIPAdminTransferred\",\"inputs\":[{\"name\":\"previousAdmin\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transfer\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ERC20InsufficientAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allowance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC20InsufficientBalance\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidApprover\",\"inputs\":[{\"name\":\"approver\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidReceiver\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidSender\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC20InvalidSpender\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidRecipient\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"MaxSupplyExceeded\",\"inputs\":[{\"name\":\"supplyAfterMint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x60c060405234801561001057600080fd5b50604051611ba0380380611ba083398101604081905261002f916103e3565b81816012600080808585858380808585600361004b83826104d4565b50600461005882826104d4565b50505060ff841660805260a083905260006001600160a01b0382161561007e5781610080565b335b600680546001600160a01b0319166001600160a01b038316179055905082156100ad576100ad81846100cd565b6100b860008261010c565b505050505050505050505050505050506105b3565b6001600160a01b0382166100fc5760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b610108600083836101bc565b5050565b60008281526005602090815260408083206001600160a01b038516845290915281205460ff166101b25760008381526005602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561016a3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b6565b5060005b92915050565b306001600160a01b038316036101f057604051630bc2c5df60e11b81526001600160a01b03831660048201526024016100f3565b6101fb838383610200565b505050565b6001600160a01b03831661022b5780600260008282546102209190610592565b9091555061029d9050565b6001600160a01b0383166000908152602081905260409020548181101561027e5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016100f3565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166102b9576002805482900390556102d8565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161031d91815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261035157600080fd5b81516001600160401b0381111561036a5761036a61032a565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103985761039861032a565b6040528181528382016020018510156103b057600080fd5b60005b828110156103cf576020818601810151838301820152016103b3565b506000918101602001919091529392505050565b600080604083850312156103f657600080fd5b82516001600160401b0381111561040c57600080fd5b61041885828601610340565b602085015190935090506001600160401b0381111561043657600080fd5b61044285828601610340565b9150509250929050565b600181811c9082168061046057607f821691505b60208210810361048057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fb57806000526020600020601f840160051c810160208510156104ad5750805b601f840160051c820191505b818110156104cd57600081556001016104b9565b5050505050565b81516001600160401b038111156104ed576104ed61032a565b610501816104fb845461044c565b84610486565b6020601f821160018114610535576000831561051d5750848201515b600019600385901b1c1916600184901b1784556104cd565b600084815260208120601f198516915b828110156105655787850151825560209485019460019092019101610545565b50848210156105835786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b808201808211156101b657634e487b7160e01b600052601160045260246000fd5b60805160a0516115ba6105e6600039600081816104a2015281816107580152610782015260006102dd01526115ba6000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a8fa343c11610097578063d539139311610071578063d539139314610466578063d547741f1461048d578063d5abeb01146104a0578063dd62ed3e146104c657600080fd5b8063a8fa343c1461042d578063a9059cbb14610440578063c630948d1461045357600080fd5b806391d14854116100d357806391d14854146103c457806395d89b411461040a5780639dc29fac14610412578063a217fddf1461042557600080fd5b806370a082311461035357806379cc6790146103895780638fd6a6ac1461039c57600080fd5b8063282c51f31161016657806336568abe1161014057806336568abe1461030757806340c10f191461031a57806342966c681461032d57806367a5cd061461034057600080fd5b8063282c51f31461029a5780632f2ff15d146102c1578063313ce567146102d657600080fd5b806318160ddd116101a257806318160ddd14610219578063181f5a771461022b57806323b872dd14610264578063248a9ca31461027757600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d7366004611351565b61050c565b60405190151581526020015b60405180910390f35b6101f9610569565b6040516101e8919061139a565b6101dc61021436600461142f565b6105fb565b6002545b6040519081526020016101e8565b60408051808201909152600d81527f43435420322e302e302d6465760000000000000000000000000000000000000060208201526101f9565b6101dc610272366004611459565b610613565b61021d610285366004611496565b60009081526005602052604090206001015490565b61021d7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84881565b6102d46102cf3660046114af565b610637565b005b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101e8565b6102d46103153660046114af565b610662565b6102d461032836600461142f565b6106c0565b6102d461033b366004611496565b61080f565b6102d461034e3660046114db565b610847565b61021d6103613660046114db565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6102d461039736600461142f565b61085c565b60065460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b6101dc6103d23660046114af565b600091825260056020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6101f961089b565b6102d461042036600461142f565b6108aa565b61021d600081565b6102d461043b3660046114db565b6108b4565b6101dc61044e36600461142f565b610937565b6102d46104613660046114db565b610945565b61021d7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102d461049b3660046114af565b610999565b7f000000000000000000000000000000000000000000000000000000000000000061021d565b61021d6104d43660046114f6565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6000610517826109be565b8061056357507fffffffff0000000000000000000000000000000000000000000000000000000082167fe6599b4d00000000000000000000000000000000000000000000000000000000145b92915050565b60606003805461057890611520565b80601f01602080910402602001604051908101604052809291908181526020018280546105a490611520565b80156105f15780601f106105c6576101008083540402835291602001916105f1565b820191906000526020600020905b8154815290600101906020018083116105d457829003601f168201915b5050505050905090565b600033610609818585610aee565b5060019392505050565b600033610621858285610afb565b61062c858585610bc5565b506001949350505050565b60008281526005602052604090206001015461065281610c70565b61065c8383610c7a565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146106b1576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106bb8282610d7a565b505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106ea81610c70565b3073ffffffffffffffffffffffffffffffffffffffff841603610756576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000158015906107b757507f0000000000000000000000000000000000000000000000000000000000000000826107ab60025490565b6107b59190611573565b115b1561080557816107c660025490565b6107d09190611573565b6040517fcbbf111300000000000000000000000000000000000000000000000000000000815260040161074d91815260200190565b6106bb8383610e39565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861083981610c70565b6108433383610e95565b5050565b61085981670de0b6b3a7640000610e39565b50565b7f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84861088681610c70565b610891833384610afb565b6106bb8383610e95565b60606004805461057890611520565b610843828261085c565b60006108bf81610c70565b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f9524c9e4b0b61eb018dd58a1cd856e3e74009528328ab4a613b434fa631d724290600090a3505050565b600033610609818585610bc5565b61096f7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682610637565b6108597f3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a84882610637565b6000828152600560205260409020600101546109b481610c70565b61065c8383610d7a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b07000000000000000000000000000000000000000000000000000000001480610a5157507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b80610a9d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000145b8061056357507fffffffff0000000000000000000000000000000000000000000000000000000082167f8fd6a6ac000000000000000000000000000000000000000000000000000000001492915050565b6106bb8383836001610ef1565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561065c5781811015610bb6576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018290526044810183905260640161074d565b61065c84848484036000610ef1565b73ffffffffffffffffffffffffffffffffffffffff8316610c15576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526000600482015260240161074d565b73ffffffffffffffffffffffffffffffffffffffff8216610c65576040517fec442f050000000000000000000000000000000000000000000000000000000081526000600482015260240161074d565b6106bb838383610f64565b6108598133610fd6565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610d7257600083815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610d103390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610563565b506000610563565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610d7257600083815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610563565b73ffffffffffffffffffffffffffffffffffffffff8216610e89576040517fec442f050000000000000000000000000000000000000000000000000000000081526000600482015260240161074d565b61084360008383610f64565b73ffffffffffffffffffffffffffffffffffffffff8216610ee5576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526000600482015260240161074d565b61084382600083610f64565b3073ffffffffffffffffffffffffffffffffffffffff841603610f58576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161074d565b61065c8484848461105e565b3073ffffffffffffffffffffffffffffffffffffffff831603610fcb576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260240161074d565b6106bb8383836111a6565b600082815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610843576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440161074d565b73ffffffffffffffffffffffffffffffffffffffff84166110ae576040517fe602df050000000000000000000000000000000000000000000000000000000081526000600482015260240161074d565b73ffffffffffffffffffffffffffffffffffffffff83166110fe576040517f94280d620000000000000000000000000000000000000000000000000000000081526000600482015260240161074d565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561065c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161119891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166111de5780600260008282546111d39190611573565b909155506112909050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015611264576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602481018290526044810183905260640161074d565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166112b9576002805482900390556112e5565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161134491815260200190565b60405180910390a3505050565b60006020828403121561136357600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461139357600080fd5b9392505050565b602081526000825180602084015260005b818110156113c857602081860181015160408684010152016113ab565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461142a57600080fd5b919050565b6000806040838503121561144257600080fd5b61144b83611406565b946020939093013593505050565b60008060006060848603121561146e57600080fd5b61147784611406565b925061148560208501611406565b929592945050506040919091013590565b6000602082840312156114a857600080fd5b5035919050565b600080604083850312156114c257600080fd5b823591506114d260208401611406565b90509250929050565b6000602082840312156114ed57600080fd5b61139382611406565b6000806040838503121561150957600080fd5b61151283611406565b91506114d260208401611406565b600181811c9082168061153457607f821691505b60208210810361156d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b80820180821115610563577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c634300081a000a", } var BurnMintERC20WithDripABI = BurnMintERC20WithDripMetaData.ABI @@ -477,16 +477,38 @@ func (_BurnMintERC20WithDrip *BurnMintERC20WithDripCallerSession) TotalSupply() return _BurnMintERC20WithDrip.Contract.TotalSupply(&_BurnMintERC20WithDrip.CallOpts) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.contract.Transact(opts, "approve", spender, amount) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BurnMintERC20WithDrip.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripSession) TypeAndVersion() (string, error) { + return _BurnMintERC20WithDrip.Contract.TypeAndVersion(&_BurnMintERC20WithDrip.CallOpts) +} + +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripCallerSession) TypeAndVersion() (string, error) { + return _BurnMintERC20WithDrip.Contract.TypeAndVersion(&_BurnMintERC20WithDrip.CallOpts) +} + +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.contract.Transact(opts, "approve", spender, value) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.Approve(&_BurnMintERC20WithDrip.TransactOpts, spender, amount) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.Contract.Approve(&_BurnMintERC20WithDrip.TransactOpts, spender, value) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) Approve(spender common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.Approve(&_BurnMintERC20WithDrip.TransactOpts, spender, amount) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.Contract.Approve(&_BurnMintERC20WithDrip.TransactOpts, spender, value) } func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) Burn(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { @@ -525,18 +547,6 @@ func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) BurnFrom(a return _BurnMintERC20WithDrip.Contract.BurnFrom(&_BurnMintERC20WithDrip.TransactOpts, account, amount) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.contract.Transact(opts, "decreaseAllowance", spender, subtractedValue) -} - -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.DecreaseAllowance(&_BurnMintERC20WithDrip.TransactOpts, spender, subtractedValue) -} - -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) DecreaseAllowance(spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.DecreaseAllowance(&_BurnMintERC20WithDrip.TransactOpts, spender, subtractedValue) -} - func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) Drip(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { return _BurnMintERC20WithDrip.contract.Transact(opts, "drip", to) } @@ -573,18 +583,6 @@ func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) GrantRole( return _BurnMintERC20WithDrip.Contract.GrantRole(&_BurnMintERC20WithDrip.TransactOpts, role, account) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.contract.Transact(opts, "increaseAllowance", spender, addedValue) -} - -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.IncreaseAllowance(&_BurnMintERC20WithDrip.TransactOpts, spender, addedValue) -} - -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) IncreaseAllowance(spender common.Address, addedValue *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.IncreaseAllowance(&_BurnMintERC20WithDrip.TransactOpts, spender, addedValue) -} - func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) Mint(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) { return _BurnMintERC20WithDrip.contract.Transact(opts, "mint", account, amount) } @@ -597,16 +595,16 @@ func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) Mint(accou return _BurnMintERC20WithDrip.Contract.Mint(&_BurnMintERC20WithDrip.TransactOpts, account, amount) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.contract.Transact(opts, "renounceRole", role, account) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.contract.Transact(opts, "renounceRole", role, callerConfirmation) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.RenounceRole(&_BurnMintERC20WithDrip.TransactOpts, role, account) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.Contract.RenounceRole(&_BurnMintERC20WithDrip.TransactOpts, role, callerConfirmation) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.RenounceRole(&_BurnMintERC20WithDrip.TransactOpts, role, account) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.Contract.RenounceRole(&_BurnMintERC20WithDrip.TransactOpts, role, callerConfirmation) } func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { @@ -633,28 +631,28 @@ func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) SetCCIPAdm return _BurnMintERC20WithDrip.Contract.SetCCIPAdmin(&_BurnMintERC20WithDrip.TransactOpts, newAdmin) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.contract.Transact(opts, "transfer", to, amount) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.contract.Transact(opts, "transfer", to, value) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.Transfer(&_BurnMintERC20WithDrip.TransactOpts, to, amount) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.Contract.Transfer(&_BurnMintERC20WithDrip.TransactOpts, to, value) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) Transfer(to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.Transfer(&_BurnMintERC20WithDrip.TransactOpts, to, amount) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.Contract.Transfer(&_BurnMintERC20WithDrip.TransactOpts, to, value) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.contract.Transact(opts, "transferFrom", from, to, amount) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.contract.Transact(opts, "transferFrom", from, to, value) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.TransferFrom(&_BurnMintERC20WithDrip.TransactOpts, from, to, amount) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.Contract.TransferFrom(&_BurnMintERC20WithDrip.TransactOpts, from, to, value) } -func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) TransferFrom(from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { - return _BurnMintERC20WithDrip.Contract.TransferFrom(&_BurnMintERC20WithDrip.TransactOpts, from, to, amount) +func (_BurnMintERC20WithDrip *BurnMintERC20WithDripTransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) { + return _BurnMintERC20WithDrip.Contract.TransferFrom(&_BurnMintERC20WithDrip.TransactOpts, from, to, value) } type BurnMintERC20WithDripApprovalIterator struct { @@ -1559,7 +1557,9 @@ type BurnMintERC20WithDripInterface interface { TotalSupply(opts *bind.CallOpts) (*big.Int, error) - Approve(opts *bind.TransactOpts, spender common.Address, amount *big.Int) (*types.Transaction, error) + TypeAndVersion(opts *bind.CallOpts) (string, error) + + Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) Burn(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) @@ -1567,27 +1567,23 @@ type BurnMintERC20WithDripInterface interface { BurnFrom(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) - DecreaseAllowance(opts *bind.TransactOpts, spender common.Address, subtractedValue *big.Int) (*types.Transaction, error) - Drip(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) GrantMintAndBurnRoles(opts *bind.TransactOpts, burnAndMinter common.Address) (*types.Transaction, error) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) - IncreaseAllowance(opts *bind.TransactOpts, spender common.Address, addedValue *big.Int) (*types.Transaction, error) - Mint(opts *bind.TransactOpts, account common.Address, amount *big.Int) (*types.Transaction, error) - RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) + RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) SetCCIPAdmin(opts *bind.TransactOpts, newAdmin common.Address) (*types.Transaction, error) - Transfer(opts *bind.TransactOpts, to common.Address, amount *big.Int) (*types.Transaction, error) + Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) - TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) + TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*BurnMintERC20WithDripApprovalIterator, error) diff --git a/gethwrappers/shared/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/gethwrappers/shared/generation/generated-wrapper-dependency-versions-do-not-edit.txt index b4f6b9c474..edfe82e999 100644 --- a/gethwrappers/shared/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/gethwrappers/shared/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -1,13 +1,13 @@ GETH_VERSION: 1.16.8 aggregator_v3_interface: ../../contracts/solc/shared/AggregatorV3Interface/AggregatorV3Interface.sol/AggregatorV3Interface.abi.json ../../contracts/solc/shared/AggregatorV3Interface/AggregatorV3Interface.sol/AggregatorV3Interface.bin 0294226c10dd4b77239d85074fcf05c39c5cbf513b45bb07f966a8733457d2cb -burn_mint_erc20: ../../contracts/solc/shared/BurnMintERC20/BurnMintERC20.sol/BurnMintERC20.abi.json ../../contracts/solc/shared/BurnMintERC20/BurnMintERC20.sol/BurnMintERC20.bin 161d4fc00d3bd8759a82a11d2d0946653ed06853e67359049ac4176288090d22 +burn_mint_erc20: ../../contracts/solc/shared/BurnMintERC20/BurnMintERC20.sol/BurnMintERC20.abi.json ../../contracts/solc/shared/BurnMintERC20/BurnMintERC20.sol/BurnMintERC20.bin 8b3bc45f2c465f3ffcd89d5caf4347dcf75016f2aa8c0e100a65b0116273ec9c burn_mint_erc20_pausable_freezable_transparent: ../../contracts/solc/shared/BurnMintERC20PausableFreezableTransparent/BurnMintERC20PausableFreezableTransparent.sol/BurnMintERC20PausableFreezableTransparent.abi.json ../../contracts/solc/shared/BurnMintERC20PausableFreezableTransparent/BurnMintERC20PausableFreezableTransparent.sol/BurnMintERC20PausableFreezableTransparent.bin 6947fcaa97d960921b7af975087b0fd620c179dad30c7dc7a4d1d48b5c8c5ea1 burn_mint_erc20_pausable_freezable_uups: ../../contracts/solc/shared/BurnMintERC20PausableFreezableUUPS/BurnMintERC20PausableFreezableUUPS.sol/BurnMintERC20PausableFreezableUUPS.abi.json ../../contracts/solc/shared/BurnMintERC20PausableFreezableUUPS/BurnMintERC20PausableFreezableUUPS.sol/BurnMintERC20PausableFreezableUUPS.bin ca7a03630cc9564820508da1d78e68a0b434d0c973111d6781c7af93423338b3 burn_mint_erc20_pausable_transparent: ../../contracts/solc/shared/BurnMintERC20PausableTransparent/BurnMintERC20PausableTransparent.sol/BurnMintERC20PausableTransparent.abi.json ../../contracts/solc/shared/BurnMintERC20PausableTransparent/BurnMintERC20PausableTransparent.sol/BurnMintERC20PausableTransparent.bin 5262184a86f95d8a8a71071e6a4d40f7e67b9d2e105ce83d0bbcd26c0226b767 burn_mint_erc20_pausable_uups: ../../contracts/solc/shared/BurnMintERC20PausableUUPS/BurnMintERC20PausableUUPS.sol/BurnMintERC20PausableUUPS.abi.json ../../contracts/solc/shared/BurnMintERC20PausableUUPS/BurnMintERC20PausableUUPS.sol/BurnMintERC20PausableUUPS.bin 5ed40ba708384f7d72e7e1c97ead886d313c06b42fe88008c878201eb2867d4d burn_mint_erc20_transparent: ../../contracts/solc/shared/BurnMintERC20Transparent/BurnMintERC20Transparent.sol/BurnMintERC20Transparent.abi.json ../../contracts/solc/shared/BurnMintERC20Transparent/BurnMintERC20Transparent.sol/BurnMintERC20Transparent.bin 141db7557d4943b57d662861fa0e1f3a11174292cb2642bfaa435f3d652832ae burn_mint_erc20_uups: ../../contracts/solc/shared/BurnMintERC20UUPS/BurnMintERC20UUPS.sol/BurnMintERC20UUPS.abi.json ../../contracts/solc/shared/BurnMintERC20UUPS/BurnMintERC20UUPS.sol/BurnMintERC20UUPS.bin 200c49e6417577a18e2ead9b9a8e6e730cd988b523807ab20d1498fa9843373b -burn_mint_erc20_with_drip: ../../contracts/solc/shared/BurnMintERC20WithDrip/BurnMintERC20WithDrip.sol/BurnMintERC20WithDrip.abi.json ../../contracts/solc/shared/BurnMintERC20WithDrip/BurnMintERC20WithDrip.sol/BurnMintERC20WithDrip.bin d57bafec7e64bacf2c88e7856bc166fc64b257e9747c5ab1a8528705c301a635 +burn_mint_erc20_with_drip: ../../contracts/solc/shared/BurnMintERC20WithDrip/BurnMintERC20WithDrip.sol/BurnMintERC20WithDrip.abi.json ../../contracts/solc/shared/BurnMintERC20WithDrip/BurnMintERC20WithDrip.sol/BurnMintERC20WithDrip.bin 1003529ce1d125e8c11f42012c20e9b791711ad5fa41a192bc8f8eae570833e9 burn_mint_erc677: ../../contracts/solc/shared/BurnMintERC677/BurnMintERC677.sol/BurnMintERC677.abi.json ../../contracts/solc/shared/BurnMintERC677/BurnMintERC677.sol/BurnMintERC677.bin c510542f105686f93e6287a66a6466c10cd576781063fc787ef365b4a47f5cb8 chain_reader_tester: ../../contracts/solc/shared/ChainReaderTester/ChainReaderTester.sol/ChainReaderTester.abi.json ../../contracts/solc/shared/ChainReaderTester/ChainReaderTester.sol/ChainReaderTester.bin 876c55e8d2556dc9cc953c786ae72b0430cb2c992f84573a2aae9680068f293d erc20: ../../contracts/solc/shared/ERC20/ERC20.sol/ERC20.abi.json ../../contracts/solc/shared/ERC20/ERC20.sol/ERC20.bin 9a5e3f7ec9fea385eeba374d184d6b83784304f537a90f6b81827c732d0b37c4