@@ -13,7 +13,9 @@ Generated by [AVA](https://avajs.dev).
1313 ␊
1414 #[starknet::contract]␊
1515 mod MyToken {␊
16- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component, ERC20HooksEmptyImpl};␊
16+ use openzeppelin::token::erc20::{␊
17+ DefaultConfig as ERC20DefaultConfig, ERC20Component, ERC20HooksEmptyImpl␊
18+ };␊
1719 ␊
1820 component!(path: ERC20Component, storage: erc20, event: ERC20Event);␊
1921 ␊
@@ -54,7 +56,9 @@ Generated by [AVA](https://avajs.dev).
5456 #[starknet::contract]␊
5557 mod MyToken {␊
5658 use openzeppelin::access::ownable::OwnableComponent;␊
57- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component, ERC20HooksEmptyImpl};␊
59+ use openzeppelin::token::erc20::{␊
60+ DefaultConfig as ERC20DefaultConfig, ERC20Component, ERC20HooksEmptyImpl␊
61+ };␊
5862 use openzeppelin::upgrades::interface::IUpgradeable;␊
5963 use openzeppelin::upgrades::UpgradeableComponent;␊
6064 use starknet::{ClassHash, ContractAddress};␊
@@ -125,7 +129,9 @@ Generated by [AVA](https://avajs.dev).
125129 #[starknet::contract]␊
126130 mod MyToken {␊
127131 use openzeppelin::access::ownable::OwnableComponent;␊
128- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component, ERC20HooksEmptyImpl};␊
132+ use openzeppelin::token::erc20::{␊
133+ DefaultConfig as ERC20DefaultConfig, ERC20Component, ERC20HooksEmptyImpl␊
134+ };␊
129135 use openzeppelin::upgrades::interface::IUpgradeable;␊
130136 use openzeppelin::upgrades::UpgradeableComponent;␊
131137 use starknet::{ClassHash, ContractAddress, get_caller_address};␊
@@ -206,7 +212,7 @@ Generated by [AVA](https://avajs.dev).
206212 mod MyToken {␊
207213 use openzeppelin::access::ownable::OwnableComponent;␊
208214 use openzeppelin::security::pausable::PausableComponent;␊
209- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component};␊
215+ use openzeppelin::token::erc20::{DefaultConfig as ERC20DefaultConfig , ERC20Component};␊
210216 use openzeppelin::upgrades::interface::IUpgradeable;␊
211217 use openzeppelin::upgrades::UpgradeableComponent;␊
212218 use starknet::{ClassHash, ContractAddress};␊
@@ -318,7 +324,7 @@ Generated by [AVA](https://avajs.dev).
318324 use openzeppelin::access::accesscontrol::{AccessControlComponent, DEFAULT_ADMIN_ROLE};␊
319325 use openzeppelin::introspection::src5::SRC5Component;␊
320326 use openzeppelin::security::pausable::PausableComponent;␊
321- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component};␊
327+ use openzeppelin::token::erc20::{DefaultConfig as ERC20DefaultConfig , ERC20Component};␊
322328 use openzeppelin::upgrades::interface::IUpgradeable;␊
323329 use openzeppelin::upgrades::UpgradeableComponent;␊
324330 use starknet::{ClassHash, ContractAddress};␊
@@ -441,7 +447,7 @@ Generated by [AVA](https://avajs.dev).
441447 mod MyToken {␊
442448 use openzeppelin::access::ownable::OwnableComponent;␊
443449 use openzeppelin::security::pausable::PausableComponent;␊
444- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component};␊
450+ use openzeppelin::token::erc20::{DefaultConfig as ERC20DefaultConfig , ERC20Component};␊
445451 use openzeppelin::upgrades::interface::IUpgradeable;␊
446452 use openzeppelin::upgrades::UpgradeableComponent;␊
447453 use starknet::{ClassHash, ContractAddress, get_caller_address};␊
@@ -553,7 +559,9 @@ Generated by [AVA](https://avajs.dev).
553559 #[starknet::contract]␊
554560 mod MyToken {␊
555561 use openzeppelin::access::ownable::OwnableComponent;␊
556- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component, ERC20HooksEmptyImpl};␊
562+ use openzeppelin::token::erc20::{␊
563+ DefaultConfig as ERC20DefaultConfig, ERC20Component, ERC20HooksEmptyImpl␊
564+ };␊
557565 use openzeppelin::upgrades::interface::IUpgradeable;␊
558566 use openzeppelin::upgrades::UpgradeableComponent;␊
559567 use starknet::{ClassHash, ContractAddress};␊
@@ -626,7 +634,9 @@ Generated by [AVA](https://avajs.dev).
626634 #[starknet::contract]␊
627635 mod MyToken {␊
628636 use openzeppelin::access::ownable::OwnableComponent;␊
629- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component, ERC20HooksEmptyImpl};␊
637+ use openzeppelin::token::erc20::{␊
638+ DefaultConfig as ERC20DefaultConfig, ERC20Component, ERC20HooksEmptyImpl␊
639+ };␊
630640 use openzeppelin::upgrades::interface::IUpgradeable;␊
631641 use openzeppelin::upgrades::UpgradeableComponent;␊
632642 use starknet::{ClassHash, ContractAddress};␊
@@ -687,6 +697,81 @@ Generated by [AVA](https://avajs.dev).
687697 }␊
688698 `
689699
700+ ## erc20 votes, custom decimals
701+
702+ > Snapshot 1
703+
704+ `// SPDX-License-Identifier: MIT␊
705+ // Compatible with OpenZeppelin Contracts for Cairo ^2.0.0␊
706+ ␊
707+ #[starknet::contract]␊
708+ mod MyToken {␊
709+ use openzeppelin::access::ownable::OwnableComponent;␊
710+ use openzeppelin::token::erc20::{ERC20Component, ERC20HooksEmptyImpl};␊
711+ use openzeppelin::upgrades::interface::IUpgradeable;␊
712+ use openzeppelin::upgrades::UpgradeableComponent;␊
713+ use starknet::{ClassHash, ContractAddress};␊
714+ ␊
715+ component!(path: ERC20Component, storage: erc20, event: ERC20Event);␊
716+ component!(path: UpgradeableComponent, storage: upgradeable, event: UpgradeableEvent);␊
717+ component!(path: OwnableComponent, storage: ownable, event: OwnableEvent);␊
718+ ␊
719+ // External␊
720+ #[abi(embed_v0)]␊
721+ impl ERC20MixinImpl = ERC20Component::ERC20MixinImpl<ContractState>;␊
722+ #[abi(embed_v0)]␊
723+ impl OwnableMixinImpl = OwnableComponent::OwnableMixinImpl<ContractState>;␊
724+ ␊
725+ // Internal␊
726+ impl ERC20InternalImpl = ERC20Component::InternalImpl<ContractState>;␊
727+ impl UpgradeableInternalImpl = UpgradeableComponent::InternalImpl<ContractState>;␊
728+ impl OwnableInternalImpl = OwnableComponent::InternalImpl<ContractState>;␊
729+ ␊
730+ #[storage]␊
731+ struct Storage {␊
732+ #[substorage(v0)]␊
733+ erc20: ERC20Component::Storage,␊
734+ #[substorage(v0)]␊
735+ upgradeable: UpgradeableComponent::Storage,␊
736+ #[substorage(v0)]␊
737+ ownable: OwnableComponent::Storage,␊
738+ }␊
739+ ␊
740+ #[event]␊
741+ #[derive(Drop, starknet::Event)]␊
742+ enum Event {␊
743+ #[flat]␊
744+ ERC20Event: ERC20Component::Event,␊
745+ #[flat]␊
746+ UpgradeableEvent: UpgradeableComponent::Event,␊
747+ #[flat]␊
748+ OwnableEvent: OwnableComponent::Event,␊
749+ }␊
750+ ␊
751+ #[constructor]␊
752+ fn constructor(ref self: ContractState, owner: ContractAddress) {␊
753+ self.erc20.initializer("MyToken", "MTK");␊
754+ self.ownable.initializer(owner);␊
755+ }␊
756+ ␊
757+ impl ERC20ImmutableConfig of ERC20Component::ImmutableConfig {␊
758+ const DECIMALS: u8 = 6;␊
759+ }␊
760+ ␊
761+ //␊
762+ // Upgradeable␊
763+ //␊
764+ ␊
765+ #[abi(embed_v0)]␊
766+ impl UpgradeableImpl of IUpgradeable<ContractState> {␊
767+ fn upgrade(ref self: ContractState, new_class_hash: ClassHash) {␊
768+ self.ownable.assert_only_owner();␊
769+ self.upgradeable.upgrade(new_class_hash);␊
770+ }␊
771+ }␊
772+ }␊
773+ `
774+
690775## erc20 mintable
691776
692777> Snapshot 1
@@ -697,7 +782,9 @@ Generated by [AVA](https://avajs.dev).
697782 #[starknet::contract]␊
698783 mod MyToken {␊
699784 use openzeppelin::access::ownable::OwnableComponent;␊
700- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component, ERC20HooksEmptyImpl};␊
785+ use openzeppelin::token::erc20::{␊
786+ DefaultConfig as ERC20DefaultConfig, ERC20Component, ERC20HooksEmptyImpl␊
787+ };␊
701788 use openzeppelin::upgrades::interface::IUpgradeable;␊
702789 use openzeppelin::upgrades::UpgradeableComponent;␊
703790 use starknet::{ClassHash, ContractAddress};␊
@@ -782,7 +869,9 @@ Generated by [AVA](https://avajs.dev).
782869 mod MyToken {␊
783870 use openzeppelin::access::accesscontrol::{AccessControlComponent, DEFAULT_ADMIN_ROLE};␊
784871 use openzeppelin::introspection::src5::SRC5Component;␊
785- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component, ERC20HooksEmptyImpl};␊
872+ use openzeppelin::token::erc20::{␊
873+ DefaultConfig as ERC20DefaultConfig, ERC20Component, ERC20HooksEmptyImpl␊
874+ };␊
786875 use openzeppelin::upgrades::interface::IUpgradeable;␊
787876 use openzeppelin::upgrades::UpgradeableComponent;␊
788877 use starknet::{ClassHash, ContractAddress};␊
@@ -879,7 +968,7 @@ Generated by [AVA](https://avajs.dev).
879968 mod MyToken {␊
880969 use openzeppelin::access::ownable::OwnableComponent;␊
881970 use openzeppelin::governance::votes::VotesComponent;␊
882- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component};␊
971+ use openzeppelin::token::erc20::{DefaultConfig as ERC20DefaultConfig , ERC20Component};␊
883972 use openzeppelin::upgrades::interface::IUpgradeable;␊
884973 use openzeppelin::upgrades::UpgradeableComponent;␊
885974 use openzeppelin::utils::cryptography::nonces::NoncesComponent;␊
@@ -994,7 +1083,7 @@ Generated by [AVA](https://avajs.dev).
9941083 mod MyToken {␊
9951084 use openzeppelin::access::ownable::OwnableComponent;␊
9961085 use openzeppelin::governance::votes::VotesComponent;␊
997- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component};␊
1086+ use openzeppelin::token::erc20::{DefaultConfig as ERC20DefaultConfig , ERC20Component};␊
9981087 use openzeppelin::upgrades::interface::IUpgradeable;␊
9991088 use openzeppelin::upgrades::UpgradeableComponent;␊
10001089 use openzeppelin::utils::cryptography::nonces::NoncesComponent;␊
@@ -1108,7 +1197,7 @@ Generated by [AVA](https://avajs.dev).
11081197 #[starknet::contract]␊
11091198 mod MyToken {␊
11101199 use openzeppelin::governance::votes::VotesComponent;␊
1111- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component};␊
1200+ use openzeppelin::token::erc20::{DefaultConfig as ERC20DefaultConfig , ERC20Component};␊
11121201 use openzeppelin::utils::cryptography::nonces::NoncesComponent;␊
11131202 use openzeppelin::utils::cryptography::snip12::SNIP12Metadata;␊
11141203 use starknet::ContractAddress;␊
@@ -1195,7 +1284,7 @@ Generated by [AVA](https://avajs.dev).
11951284 use openzeppelin::access::ownable::OwnableComponent;␊
11961285 use openzeppelin::governance::votes::VotesComponent;␊
11971286 use openzeppelin::security::pausable::PausableComponent;␊
1198- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component};␊
1287+ use openzeppelin::token::erc20::{DefaultConfig as ERC20DefaultConfig , ERC20Component};␊
11991288 use openzeppelin::utils::cryptography::nonces::NoncesComponent;␊
12001289 use openzeppelin::utils::cryptography::snip12::SNIP12Metadata;␊
12011290 use starknet::{ContractAddress, get_caller_address};␊
@@ -1338,7 +1427,7 @@ Generated by [AVA](https://avajs.dev).
13381427 use openzeppelin::access::ownable::OwnableComponent;␊
13391428 use openzeppelin::governance::votes::VotesComponent;␊
13401429 use openzeppelin::security::pausable::PausableComponent;␊
1341- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component};␊
1430+ use openzeppelin::token::erc20::{DefaultConfig as ERC20DefaultConfig , ERC20Component};␊
13421431 use openzeppelin::upgrades::interface::IUpgradeable;␊
13431432 use openzeppelin::upgrades::UpgradeableComponent;␊
13441433 use openzeppelin::utils::cryptography::nonces::NoncesComponent;␊
@@ -1506,7 +1595,7 @@ Generated by [AVA](https://avajs.dev).
15061595 use openzeppelin::governance::votes::VotesComponent;␊
15071596 use openzeppelin::introspection::src5::SRC5Component;␊
15081597 use openzeppelin::security::pausable::PausableComponent;␊
1509- use openzeppelin::token::erc20::{DefaultConfig, ERC20Component};␊
1598+ use openzeppelin::token::erc20::{DefaultConfig as ERC20DefaultConfig , ERC20Component};␊
15101599 use openzeppelin::upgrades::interface::IUpgradeable;␊
15111600 use openzeppelin::upgrades::UpgradeableComponent;␊
15121601 use openzeppelin::utils::cryptography::nonces::NoncesComponent;␊
0 commit comments