@solarity/solidity-lib
Version:
Solarity Solidity Library
127 lines (110 loc) • 6.97 kB
Markdown

[](https://www.npmjs.com/package/@solarity/solidity-lib)
[](https://codecov.io/gh/dl-solarity/solidity-lib)
[](https://github.com/dl-solarity/solidity-lib/actions/workflows/tests.yml)
[](https://docs.solarity.dev/)
[](https://opensource.org/licenses/MIT)
[](https://www.gitpoap.io/gh/dl-solarity/solidity-lib)
# Solarity Solidity Library
Solidity contracts and utilities that **go far beyond mediocre solidity**.
## Contracts
```ml
contracts
├── access
│ ├── AMerkleWhitelisted — "Whitelists via Merkle proofs"
│ ├── AMultiOwnable — "Multiple owners with the equal access level"
│ ├── ARBAC — "A powerful implementation of a true RBAC"
│ └── extensions
│ └── ARBACGroupable — "Groupable extension of ARBAC"
├── account—abstraction
│ ├── AAccountRecovery — "ERC-7947 account recovery base implementation"
│ └── ARecoverableAccount — "All-in-one account with batching, gas sponsorship, and recovery"
├── bridge
│ ├── batcher
│ │ └── Batcher — "Batch calls execution during bridge redemption"
│ ├── handlers
│ │ ├── ERC20Handler — "ERC-20 bridging (liquidity pool, mint-and-burn, or USDC-specific)"
│ │ ├── MessageHandler — "Arbitrary cross-chain message dispatch and redemption"
│ │ └── NativeHandler — "Native asset bridging"
│ └── ABridge — "Simple and modular arbitrary message bridge with batching logic"
├── contracts—registry
│ ├── AContractsRegistry — "Reference registry implementation of ERC-6224 pattern"
│ ├── ADependant — "Reference dependant implementation of ERC-6224 pattern"
│ └── pools
│ ├── APoolContractsRegistry — "Adaptation of ERC-6224 for factory-like contracts"
│ └── APoolFactory — "Factory implementation for a pooled registry"
├── diamond
│ ├── ADiamondStorage — "The storage part of ERC-2535 diamond"
│ ├── Diamond — "Revised ERC-2535 diamond implementation"
│ └── utils
│ └── DiamondERC165 — "ERC-165 introspection for diamond facets"
├── finance
│ ├── staking
│ │ ├── AStaking — "Flexible rewards staking implementation"
│ │ └── AValueDistributor — "Efficient distribution algorithm implementation"
│ └── vesting
│ └── AVesting — "Linear and exponential vesting implementation"
├── libs
│ ├── arrays
│ │ ├── ArrayHelper — "Common functions to work with arrays"
│ │ └── Paginator — "Return array slices from view function"
│ ├── bitcoin
│ │ ├── BlockHeader — "Parse and format Bitcoin block headers"
│ │ ├── TxMerkleProof — "Verify transaction inclusion in Bitcoin block"
│ │ └── TxParser — "Parse and format Bitcoin transactions"
│ ├── bn
│ │ └── U512 — "A hyperoptimized uint512 implementation"
│ ├── crypto
│ │ ├── EC256 — "Weierstrass elliptic curve arithmetic over a 256-bit prime field"
│ │ ├── ED256 — "Twisted Edwards elliptic curve arithmetic over a 256-bit prime field"
│ │ ├── ECDSA256 — "ECDSA verification over any 256-bit curve"
│ │ ├── ECDSA384 — "ECDSA verification over any 384-bit curve"
│ │ ├── ECDSA512 — "ECDSA verification over any 512-bit curve"
│ │ ├── Schnorr256 — "Schnorr + adaptor signature verification over any 256-bit curve"
│ │ └── RSASSAPSS — "RSASSA-PSS signature verification with MGF1"
│ ├── data—structures
│ │ ├── AvlTree — "AVL tree implementation with an iterator traversal"
│ │ ├── CartesianMerkleTree — "CMT reference implementation"
│ │ ├── DynamicSet — "Set for strings and bytes"
│ │ ├── IncrementalMerkleTree — "IMT implementation with flexible tree height"
│ │ ├── PriorityQueue — "Max queue heap implementation"
│ │ ├── SparseMerkleTree — "SMT optimized implementation"
│ │ └── memory
│ │ └── Vector — "A pushable memory array"
│ ├── utils
│ │ ├── DecimalsConverter — "Simplify interaction with ERC-20 decimals"
│ │ ├── EndianConverter — "Convert between little-endian and big-endian formats"
│ │ ├── MemoryUtils — "Functions for memory manipulation"
│ │ ├── ReturnDataProxy — "Bypass extra returndata copy when returning data"
│ │ └── Typecaster — "Cast between various Solidity types"
│ └── zkp
│ ├── Groth16VerifierHelper — "Simplify integration with Groth16 proofs"
│ └── PlonkVerifierHelper — "Simplify integration with Plonk proofs"
├── proxy
│ └── adminable
│ ├── AdminableProxy — "A slight modification of a transparent proxy"
│ └── AdminableProxyUpgrader — "A slight modification of a proxy admin"
├── tokens
│ └── ASBT — "A minimal implementation of an SBT"
├── utils
│ ├── ABlockGuard — "Protect against flashloans"
│ ├── ADeployerGuard — "Prevent proxy initialization frontrunning"
│ └── Globals — "Some commonly used constants"
├── presets — "Presets for the library contracts"
├── interfaces — "Interfaces for the library contracts"
└── mock — "Mocks for testing purposes"
```
Built with courage and aspiration to perfection.
> [!TIP]
> The library is designed to work cohesively with [hardhat-zkit](https://github.com/dl-solarity/hardhat-zkit) and [circom-lib](https://github.com/dl-solarity/circom-lib) packages.
## Installation
```bash
npm install @solarity/solidity-lib
```
The latest stable version is always in the `master` branch.
## Documentation
Check out the project's [documentation](https://docs.solarity.dev) with broad explanations and usage examples of every contract. Full `natspec` guides are also available in the source code.
## Contributing
We are open to any mind-blowing ideas! Please take a look at our [contributing guidelines](CONTRIBUTING.md) to get involved.
## License
The library is released under the MIT License.