## Summary
**Pendzl is a library for smart contract development on ink!.**
Why use this library?
- To make contracts **interoperable** to do **safe** cross-contract calls (by having the same function's signature among every contract)
- To ensure the usage of [Polkadot Standards Proposals](https://github.com/w3f/PSPs)
- To ensure the usage of the **latest & most secure** implementation
- Useful contracts that provide custom logic to be implemented in contracts
- To **save time** by not writing boilerplate code
- Useful features that can simplify development
- All contracts are upgradeable by default
Which Standard tokens & useful contracts does it provide?
- **PSP22** - Fungible Token (*ERC20 equivalent*) with some extensions including Vault - a modified ERC-4626 contract!
- **PSP34** - Non-Fungible Token (*ERC721 equivalent*) with some extensions
- (*not yet supported*) **PSP37** - *ERC1155 equivalent* with extensions
- **Ownable** Restrict access to action for non-owners
- **Access Control** Define a set of roles and restrict access to action by roles
- **Pausable** Pause/Unpause the contract to disable/enable some operations
- (*not yet supported*) **Timelock Controller** Execute transactions with some delay
- (*not yet supported*) **Governor** Govern
- **General Vester** Allows for the creation of a vests
This library was created based on ideas of implementation macro, Storage trait, and storage_item macro that came from [openbrush-contracts](https://github.com/Brushfam/openbrush-contracts).
### Additional stuff
## Installation & Testing
To work with the project you need to install ink! toolchain and NodeJS's dependencies.
1. you need an installer [rustup](https://www.rust-lang.org/tools/install).
2. [ink! toolchain](https://use.ink/getting-started/setup)
3. NodeJS deps you can install via `yarn` command
### Build
```
$ yarn build
```
If you want to build in release mode, you can use this command
```
$ yarn build:release
```
### Tests
You can run unit tests by `RUSTFLAGS="-D warnings" cargo test --workspace --features test-all -- --test-threads=10` command from the root of the directory.
After you run tests by the `npm run test` command, it will build all contracts required for integration tests and run them.
## FAQ
### Was it audited?
Contracts in this repository have not yet been audited and may contain several vulnerabilities.
## License
pendzl is released under the [MIT License](LICENSE).