├── .gitignore
├── README.md
├── ajna-core
├── .env.example
├── .github
│ ├── pull_request_template.md
│ └── workflows
│ │ ├── forge-test.yml
│ │ └── slither.yml
├── .gitignore
├── .gitmodules
├── .vscode
│ └── settings.json
├── LICENSE
├── Makefile
├── README.md
├── brownie-config.yml
├── brownie_hooks.py
├── check-code-coverage.sh
├── check-size.sh
├── deploy.sol
├── docs
│ ├── .gitignore
│ ├── Functions.md
│ ├── drawio
│ │ ├── addCollateral.drawio
│ │ ├── addQuoteToken.drawio
│ │ ├── ajnaContractsArchitecture.drawio
│ │ ├── bucketTake.drawio
│ │ ├── drawDebt.drawio
│ │ ├── kick.drawio
│ │ ├── kickWithDeposit.drawio
│ │ ├── moveQuoteToken.drawio
│ │ ├── removeCollateral.drawio
│ │ ├── removeQuoteToken.drawio
│ │ ├── repayDebt.drawio
│ │ ├── settle.drawio
│ │ └── take.drawio
│ ├── html
│ │ ├── addCollateral.html
│ │ ├── addQuoteToken.html
│ │ ├── bucketTake.html
│ │ ├── components.html
│ │ ├── drawDebt.html
│ │ ├── kick.html
│ │ ├── kickWithDeposit.html
│ │ ├── moveQuoteToken.html
│ │ ├── poolContractsArchitecture.html
│ │ ├── removeCollateral.html
│ │ ├── removeQuoteToken.html
│ │ ├── repayDebt.html
│ │ ├── settle.html
│ │ └── take.html
│ └── jpeg
│ │ ├── ajnaContractsArchitecture.jpeg
│ │ ├── poolContract.jpeg
│ │ └── poolContractsArchitecture.jpeg
├── foundry.toml
├── hardhat.config.js
├── lib
│ ├── base64
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── base64.sol
│ │ └── package.json
│ ├── clones-with-immutable-args
│ │ ├── .gitattributes
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── ci.yml
│ │ ├── .gitignore
│ │ ├── .gitmodules
│ │ ├── .solhint.json
│ │ ├── .vscode
│ │ │ └── settings.json
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── foundry.toml
│ │ ├── lib
│ │ │ └── ds-test
│ │ │ │ ├── .gitignore
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Makefile
│ │ │ │ ├── default.nix
│ │ │ │ ├── demo
│ │ │ │ └── demo.sol
│ │ │ │ └── src
│ │ │ │ └── test.sol
│ │ ├── package.json
│ │ ├── remappings.txt
│ │ ├── src
│ │ │ ├── Clone.sol
│ │ │ ├── ClonesWithImmutableArgs.sol
│ │ │ ├── ExampleClone.sol
│ │ │ ├── ExampleCloneFactory.sol
│ │ │ └── test
│ │ │ │ ├── ExampleClone.t.sol
│ │ │ │ ├── ExampleCloneFactory.t.sol
│ │ │ │ └── utils
│ │ │ │ └── Hevm.sol
│ │ └── yarn.lock
│ ├── forge-std
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── tests.yml
│ │ ├── .gitignore
│ │ ├── .gitmodules
│ │ ├── LICENSE-APACHE
│ │ ├── LICENSE-MIT
│ │ ├── README.md
│ │ ├── lib
│ │ │ └── ds-test
│ │ │ │ ├── .gitignore
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Makefile
│ │ │ │ ├── default.nix
│ │ │ │ ├── demo
│ │ │ │ └── demo.sol
│ │ │ │ └── src
│ │ │ │ └── test.sol
│ │ └── src
│ │ │ ├── Script.sol
│ │ │ ├── Test.sol
│ │ │ ├── Vm.sol
│ │ │ ├── console.sol
│ │ │ ├── console2.sol
│ │ │ └── test
│ │ │ ├── Script.t.sol
│ │ │ ├── StdAssertions.t.sol
│ │ │ ├── StdCheats.t.sol
│ │ │ ├── StdError.t.sol
│ │ │ ├── StdMath.t.sol
│ │ │ └── StdStorage.t.sol
│ ├── openzeppelin-contracts
│ │ ├── .changeset
│ │ │ └── new-ways-own.md
│ │ ├── .codecov.yml
│ │ ├── .editorconfig
│ │ ├── .eslintrc
│ │ ├── .gitattributes
│ │ ├── .github
│ │ │ ├── ISSUE_TEMPLATE
│ │ │ │ ├── bug_report.md
│ │ │ │ ├── config.yml
│ │ │ │ └── feature_request.md
│ │ │ ├── PULL_REQUEST_TEMPLATE.md
│ │ │ ├── actions
│ │ │ │ ├── gas-compare
│ │ │ │ │ └── action.yml
│ │ │ │ └── setup
│ │ │ │ │ └── action.yml
│ │ │ └── workflows
│ │ │ │ ├── changelog.yml
│ │ │ │ ├── checks.yml
│ │ │ │ ├── docs.yml
│ │ │ │ └── upgradeable.yml
│ │ ├── .gitignore
│ │ ├── .gitmodules
│ │ ├── .mocharc.js
│ │ ├── .prettierrc
│ │ ├── .solcover.js
│ │ ├── .solhint.json
│ │ ├── CHANGELOG.md
│ │ ├── CODE_OF_CONDUCT.md
│ │ ├── CONTRIBUTING.md
│ │ ├── DOCUMENTATION.md
│ │ ├── GUIDELINES.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── RELEASING.md
│ │ ├── SECURITY.md
│ │ ├── audit
│ │ │ ├── 2017-03.md
│ │ │ └── 2018-10.pdf
│ │ ├── certora
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── applyHarness.patch
│ │ │ ├── harnesses
│ │ │ │ ├── ERC20VotesHarness.sol
│ │ │ │ ├── WizardControlFirstPriority.sol
│ │ │ │ └── WizardFirstTry.sol
│ │ │ ├── munged
│ │ │ │ └── .gitignore
│ │ │ ├── scripts
│ │ │ │ ├── Governor.sh
│ │ │ │ ├── GovernorCountingSimple-counting.sh
│ │ │ │ ├── WizardControlFirstPriority.sh
│ │ │ │ ├── WizardFirstTry.sh
│ │ │ │ ├── sanity.sh
│ │ │ │ └── verifyAll.sh
│ │ │ └── specs
│ │ │ │ ├── GovernorBase.spec
│ │ │ │ ├── GovernorCountingSimple.spec
│ │ │ │ ├── RulesInProgress.spec
│ │ │ │ └── sanity.spec
│ │ ├── contracts
│ │ │ ├── access
│ │ │ │ ├── AccessControl.sol
│ │ │ │ ├── AccessControlCrossChain.sol
│ │ │ │ ├── AccessControlEnumerable.sol
│ │ │ │ ├── IAccessControl.sol
│ │ │ │ ├── IAccessControlEnumerable.sol
│ │ │ │ ├── Ownable.sol
│ │ │ │ ├── Ownable2Step.sol
│ │ │ │ └── README.adoc
│ │ │ ├── crosschain
│ │ │ │ ├── CrossChainEnabled.sol
│ │ │ │ ├── README.adoc
│ │ │ │ ├── amb
│ │ │ │ │ ├── CrossChainEnabledAMB.sol
│ │ │ │ │ └── LibAMB.sol
│ │ │ │ ├── arbitrum
│ │ │ │ │ ├── CrossChainEnabledArbitrumL1.sol
│ │ │ │ │ ├── CrossChainEnabledArbitrumL2.sol
│ │ │ │ │ ├── LibArbitrumL1.sol
│ │ │ │ │ └── LibArbitrumL2.sol
│ │ │ │ ├── errors.sol
│ │ │ │ ├── optimism
│ │ │ │ │ ├── CrossChainEnabledOptimism.sol
│ │ │ │ │ └── LibOptimism.sol
│ │ │ │ └── polygon
│ │ │ │ │ └── CrossChainEnabledPolygonChild.sol
│ │ │ ├── finance
│ │ │ │ ├── PaymentSplitter.sol
│ │ │ │ ├── README.adoc
│ │ │ │ └── VestingWallet.sol
│ │ │ ├── governance
│ │ │ │ ├── Governor.sol
│ │ │ │ ├── IGovernor.sol
│ │ │ │ ├── README.adoc
│ │ │ │ ├── TimelockController.sol
│ │ │ │ ├── compatibility
│ │ │ │ │ ├── GovernorCompatibilityBravo.sol
│ │ │ │ │ └── IGovernorCompatibilityBravo.sol
│ │ │ │ ├── extensions
│ │ │ │ │ ├── GovernorCountingSimple.sol
│ │ │ │ │ ├── GovernorPreventLateQuorum.sol
│ │ │ │ │ ├── GovernorProposalThreshold.sol
│ │ │ │ │ ├── GovernorSettings.sol
│ │ │ │ │ ├── GovernorTimelockCompound.sol
│ │ │ │ │ ├── GovernorTimelockControl.sol
│ │ │ │ │ ├── GovernorVotes.sol
│ │ │ │ │ ├── GovernorVotesComp.sol
│ │ │ │ │ ├── GovernorVotesQuorumFraction.sol
│ │ │ │ │ └── IGovernorTimelock.sol
│ │ │ │ └── utils
│ │ │ │ │ ├── IVotes.sol
│ │ │ │ │ └── Votes.sol
│ │ │ ├── interfaces
│ │ │ │ ├── IERC1155.sol
│ │ │ │ ├── IERC1155MetadataURI.sol
│ │ │ │ ├── IERC1155Receiver.sol
│ │ │ │ ├── IERC1271.sol
│ │ │ │ ├── IERC1363.sol
│ │ │ │ ├── IERC1363Receiver.sol
│ │ │ │ ├── IERC1363Spender.sol
│ │ │ │ ├── IERC165.sol
│ │ │ │ ├── IERC1820Implementer.sol
│ │ │ │ ├── IERC1820Registry.sol
│ │ │ │ ├── IERC20.sol
│ │ │ │ ├── IERC20Metadata.sol
│ │ │ │ ├── IERC2309.sol
│ │ │ │ ├── IERC2981.sol
│ │ │ │ ├── IERC3156.sol
│ │ │ │ ├── IERC3156FlashBorrower.sol
│ │ │ │ ├── IERC3156FlashLender.sol
│ │ │ │ ├── IERC4626.sol
│ │ │ │ ├── IERC721.sol
│ │ │ │ ├── IERC721Enumerable.sol
│ │ │ │ ├── IERC721Metadata.sol
│ │ │ │ ├── IERC721Receiver.sol
│ │ │ │ ├── IERC777.sol
│ │ │ │ ├── IERC777Recipient.sol
│ │ │ │ ├── IERC777Sender.sol
│ │ │ │ ├── README.adoc
│ │ │ │ ├── draft-IERC1822.sol
│ │ │ │ └── draft-IERC2612.sol
│ │ │ ├── metatx
│ │ │ │ ├── ERC2771Context.sol
│ │ │ │ ├── MinimalForwarder.sol
│ │ │ │ └── README.adoc
│ │ │ ├── mocks
│ │ │ │ ├── AccessControlCrossChainMock.sol
│ │ │ │ ├── AccessControlEnumerableMock.sol
│ │ │ │ ├── AccessControlMock.sol
│ │ │ │ ├── AddressImpl.sol
│ │ │ │ ├── ArraysMock.sol
│ │ │ │ ├── BadBeacon.sol
│ │ │ │ ├── Base64Mock.sol
│ │ │ │ ├── BitmapMock.sol
│ │ │ │ ├── CallReceiverMock.sol
│ │ │ │ ├── CheckpointsMock.sol
│ │ │ │ ├── ClashingImplementation.sol
│ │ │ │ ├── ClonesMock.sol
│ │ │ │ ├── ConditionalEscrowMock.sol
│ │ │ │ ├── ContextMock.sol
│ │ │ │ ├── CountersImpl.sol
│ │ │ │ ├── Create2Impl.sol
│ │ │ │ ├── DoubleEndedQueueMock.sol
│ │ │ │ ├── DummyImplementation.sol
│ │ │ │ ├── ECDSAMock.sol
│ │ │ │ ├── EIP712External.sol
│ │ │ │ ├── ERC1155BurnableMock.sol
│ │ │ │ ├── ERC1155Mock.sol
│ │ │ │ ├── ERC1155PausableMock.sol
│ │ │ │ ├── ERC1155ReceiverMock.sol
│ │ │ │ ├── ERC1155SupplyMock.sol
│ │ │ │ ├── ERC1155URIStorageMock.sol
│ │ │ │ ├── ERC1271WalletMock.sol
│ │ │ │ ├── ERC165
│ │ │ │ │ ├── ERC165InterfacesSupported.sol
│ │ │ │ │ ├── ERC165MaliciousData.sol
│ │ │ │ │ ├── ERC165MissingData.sol
│ │ │ │ │ ├── ERC165NotSupported.sol
│ │ │ │ │ └── ERC165ReturnBomb.sol
│ │ │ │ ├── ERC165CheckerMock.sol
│ │ │ │ ├── ERC165Mock.sol
│ │ │ │ ├── ERC165StorageMock.sol
│ │ │ │ ├── ERC1820ImplementerMock.sol
│ │ │ │ ├── ERC20BurnableMock.sol
│ │ │ │ ├── ERC20CappedMock.sol
│ │ │ │ ├── ERC20DecimalsMock.sol
│ │ │ │ ├── ERC20FlashMintMock.sol
│ │ │ │ ├── ERC20Mock.sol
│ │ │ │ ├── ERC20PausableMock.sol
│ │ │ │ ├── ERC20PermitMock.sol
│ │ │ │ ├── ERC20SnapshotMock.sol
│ │ │ │ ├── ERC20VotesCompMock.sol
│ │ │ │ ├── ERC20VotesMock.sol
│ │ │ │ ├── ERC20WrapperMock.sol
│ │ │ │ ├── ERC2771ContextMock.sol
│ │ │ │ ├── ERC3156FlashBorrowerMock.sol
│ │ │ │ ├── ERC4626Mock.sol
│ │ │ │ ├── ERC721BurnableMock.sol
│ │ │ │ ├── ERC721ConsecutiveEnumerableMock.sol
│ │ │ │ ├── ERC721ConsecutiveMock.sol
│ │ │ │ ├── ERC721EnumerableMock.sol
│ │ │ │ ├── ERC721Mock.sol
│ │ │ │ ├── ERC721PausableMock.sol
│ │ │ │ ├── ERC721ReceiverMock.sol
│ │ │ │ ├── ERC721RoyaltyMock.sol
│ │ │ │ ├── ERC721URIStorageMock.sol
│ │ │ │ ├── ERC721VotesMock.sol
│ │ │ │ ├── ERC777Mock.sol
│ │ │ │ ├── ERC777SenderRecipientMock.sol
│ │ │ │ ├── EnumerableMapMock.sol
│ │ │ │ ├── EnumerableSetMock.sol
│ │ │ │ ├── EtherReceiverMock.sol
│ │ │ │ ├── GovernorCompMock.sol
│ │ │ │ ├── GovernorCompatibilityBravoMock.sol
│ │ │ │ ├── GovernorMock.sol
│ │ │ │ ├── GovernorPreventLateQuorumMock.sol
│ │ │ │ ├── GovernorTimelockCompoundMock.sol
│ │ │ │ ├── GovernorTimelockControlMock.sol
│ │ │ │ ├── GovernorVoteMock.sol
│ │ │ │ ├── GovernorWithParamsMock.sol
│ │ │ │ ├── InitializableMock.sol
│ │ │ │ ├── MathMock.sol
│ │ │ │ ├── MerkleProofWrapper.sol
│ │ │ │ ├── MulticallTest.sol
│ │ │ │ ├── MulticallTokenMock.sol
│ │ │ │ ├── MultipleInheritanceInitializableMocks.sol
│ │ │ │ ├── Ownable2StepMock.sol
│ │ │ │ ├── OwnableMock.sol
│ │ │ │ ├── PausableMock.sol
│ │ │ │ ├── PullPaymentMock.sol
│ │ │ │ ├── ReentrancyAttack.sol
│ │ │ │ ├── ReentrancyMock.sol
│ │ │ │ ├── RegressionImplementation.sol
│ │ │ │ ├── SafeCastMock.sol
│ │ │ │ ├── SafeERC20Helper.sol
│ │ │ │ ├── SafeMathMock.sol
│ │ │ │ ├── SignatureCheckerMock.sol
│ │ │ │ ├── SignedMathMock.sol
│ │ │ │ ├── SignedSafeMathMock.sol
│ │ │ │ ├── SingleInheritanceInitializableMocks.sol
│ │ │ │ ├── StorageSlotMock.sol
│ │ │ │ ├── StringsMock.sol
│ │ │ │ ├── TimersBlockNumberImpl.sol
│ │ │ │ ├── TimersTimestampImpl.sol
│ │ │ │ ├── UUPS
│ │ │ │ │ ├── UUPSLegacy.sol
│ │ │ │ │ └── UUPSUpgradeableMock.sol
│ │ │ │ ├── VotesMock.sol
│ │ │ │ ├── compound
│ │ │ │ │ └── CompTimelock.sol
│ │ │ │ ├── crosschain
│ │ │ │ │ ├── bridges.sol
│ │ │ │ │ └── receivers.sol
│ │ │ │ └── wizard
│ │ │ │ │ ├── MyGovernor1.sol
│ │ │ │ │ ├── MyGovernor2.sol
│ │ │ │ │ └── MyGovernor3.sol
│ │ │ ├── package.json
│ │ │ ├── proxy
│ │ │ │ ├── Clones.sol
│ │ │ │ ├── ERC1967
│ │ │ │ │ ├── ERC1967Proxy.sol
│ │ │ │ │ └── ERC1967Upgrade.sol
│ │ │ │ ├── Proxy.sol
│ │ │ │ ├── README.adoc
│ │ │ │ ├── beacon
│ │ │ │ │ ├── BeaconProxy.sol
│ │ │ │ │ ├── IBeacon.sol
│ │ │ │ │ └── UpgradeableBeacon.sol
│ │ │ │ ├── transparent
│ │ │ │ │ ├── ProxyAdmin.sol
│ │ │ │ │ └── TransparentUpgradeableProxy.sol
│ │ │ │ └── utils
│ │ │ │ │ ├── Initializable.sol
│ │ │ │ │ └── UUPSUpgradeable.sol
│ │ │ ├── security
│ │ │ │ ├── Pausable.sol
│ │ │ │ ├── PullPayment.sol
│ │ │ │ ├── README.adoc
│ │ │ │ └── ReentrancyGuard.sol
│ │ │ ├── token
│ │ │ │ ├── ERC1155
│ │ │ │ │ ├── ERC1155.sol
│ │ │ │ │ ├── IERC1155.sol
│ │ │ │ │ ├── IERC1155Receiver.sol
│ │ │ │ │ ├── README.adoc
│ │ │ │ │ ├── extensions
│ │ │ │ │ │ ├── ERC1155Burnable.sol
│ │ │ │ │ │ ├── ERC1155Pausable.sol
│ │ │ │ │ │ ├── ERC1155Supply.sol
│ │ │ │ │ │ ├── ERC1155URIStorage.sol
│ │ │ │ │ │ └── IERC1155MetadataURI.sol
│ │ │ │ │ ├── presets
│ │ │ │ │ │ ├── ERC1155PresetMinterPauser.sol
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── ERC1155Holder.sol
│ │ │ │ │ │ └── ERC1155Receiver.sol
│ │ │ │ ├── ERC20
│ │ │ │ │ ├── ERC20.sol
│ │ │ │ │ ├── IERC20.sol
│ │ │ │ │ ├── README.adoc
│ │ │ │ │ ├── extensions
│ │ │ │ │ │ ├── ERC20Burnable.sol
│ │ │ │ │ │ ├── ERC20Capped.sol
│ │ │ │ │ │ ├── ERC20FlashMint.sol
│ │ │ │ │ │ ├── ERC20Pausable.sol
│ │ │ │ │ │ ├── ERC20Snapshot.sol
│ │ │ │ │ │ ├── ERC20Votes.sol
│ │ │ │ │ │ ├── ERC20VotesComp.sol
│ │ │ │ │ │ ├── ERC20Wrapper.sol
│ │ │ │ │ │ ├── ERC4626.sol
│ │ │ │ │ │ ├── IERC20Metadata.sol
│ │ │ │ │ │ ├── draft-ERC20Permit.sol
│ │ │ │ │ │ └── draft-IERC20Permit.sol
│ │ │ │ │ ├── presets
│ │ │ │ │ │ ├── ERC20PresetFixedSupply.sol
│ │ │ │ │ │ ├── ERC20PresetMinterPauser.sol
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── SafeERC20.sol
│ │ │ │ │ │ └── TokenTimelock.sol
│ │ │ │ ├── ERC721
│ │ │ │ │ ├── ERC721.sol
│ │ │ │ │ ├── IERC721.sol
│ │ │ │ │ ├── IERC721Receiver.sol
│ │ │ │ │ ├── README.adoc
│ │ │ │ │ ├── extensions
│ │ │ │ │ │ ├── ERC721Burnable.sol
│ │ │ │ │ │ ├── ERC721Consecutive.sol
│ │ │ │ │ │ ├── ERC721Enumerable.sol
│ │ │ │ │ │ ├── ERC721Pausable.sol
│ │ │ │ │ │ ├── ERC721Royalty.sol
│ │ │ │ │ │ ├── ERC721URIStorage.sol
│ │ │ │ │ │ ├── ERC721Votes.sol
│ │ │ │ │ │ ├── IERC721Enumerable.sol
│ │ │ │ │ │ ├── IERC721Metadata.sol
│ │ │ │ │ │ └── draft-ERC721Votes.sol
│ │ │ │ │ ├── presets
│ │ │ │ │ │ ├── ERC721PresetMinterPauserAutoId.sol
│ │ │ │ │ │ └── README.md
│ │ │ │ │ └── utils
│ │ │ │ │ │ └── ERC721Holder.sol
│ │ │ │ ├── ERC777
│ │ │ │ │ ├── ERC777.sol
│ │ │ │ │ ├── IERC777.sol
│ │ │ │ │ ├── IERC777Recipient.sol
│ │ │ │ │ ├── IERC777Sender.sol
│ │ │ │ │ ├── README.adoc
│ │ │ │ │ └── presets
│ │ │ │ │ │ └── ERC777PresetFixedSupply.sol
│ │ │ │ └── common
│ │ │ │ │ ├── ERC2981.sol
│ │ │ │ │ └── README.adoc
│ │ │ ├── utils
│ │ │ │ ├── Address.sol
│ │ │ │ ├── Arrays.sol
│ │ │ │ ├── Base64.sol
│ │ │ │ ├── Checkpoints.sol
│ │ │ │ ├── Context.sol
│ │ │ │ ├── Counters.sol
│ │ │ │ ├── Create2.sol
│ │ │ │ ├── Multicall.sol
│ │ │ │ ├── README.adoc
│ │ │ │ ├── StorageSlot.sol
│ │ │ │ ├── Strings.sol
│ │ │ │ ├── Timers.sol
│ │ │ │ ├── cryptography
│ │ │ │ │ ├── ECDSA.sol
│ │ │ │ │ ├── EIP712.sol
│ │ │ │ │ ├── MerkleProof.sol
│ │ │ │ │ ├── SignatureChecker.sol
│ │ │ │ │ └── draft-EIP712.sol
│ │ │ │ ├── escrow
│ │ │ │ │ ├── ConditionalEscrow.sol
│ │ │ │ │ ├── Escrow.sol
│ │ │ │ │ └── RefundEscrow.sol
│ │ │ │ ├── introspection
│ │ │ │ │ ├── ERC165.sol
│ │ │ │ │ ├── ERC165Checker.sol
│ │ │ │ │ ├── ERC165Storage.sol
│ │ │ │ │ ├── ERC1820Implementer.sol
│ │ │ │ │ ├── IERC165.sol
│ │ │ │ │ ├── IERC1820Implementer.sol
│ │ │ │ │ └── IERC1820Registry.sol
│ │ │ │ ├── math
│ │ │ │ │ ├── Math.sol
│ │ │ │ │ ├── SafeCast.sol
│ │ │ │ │ ├── SafeMath.sol
│ │ │ │ │ ├── SignedMath.sol
│ │ │ │ │ └── SignedSafeMath.sol
│ │ │ │ └── structs
│ │ │ │ │ ├── BitMaps.sol
│ │ │ │ │ ├── DoubleEndedQueue.sol
│ │ │ │ │ ├── EnumerableMap.sol
│ │ │ │ │ └── EnumerableSet.sol
│ │ │ └── vendor
│ │ │ │ ├── amb
│ │ │ │ └── IAMB.sol
│ │ │ │ ├── arbitrum
│ │ │ │ ├── IArbSys.sol
│ │ │ │ ├── IBridge.sol
│ │ │ │ ├── IDelayedMessageProvider.sol
│ │ │ │ ├── IInbox.sol
│ │ │ │ └── IOutbox.sol
│ │ │ │ ├── compound
│ │ │ │ ├── ICompoundTimelock.sol
│ │ │ │ └── LICENSE
│ │ │ │ ├── optimism
│ │ │ │ ├── ICrossDomainMessenger.sol
│ │ │ │ └── LICENSE
│ │ │ │ └── polygon
│ │ │ │ └── IFxMessageProcessor.sol
│ │ ├── docs
│ │ │ ├── antora.yml
│ │ │ ├── config.js
│ │ │ ├── modules
│ │ │ │ └── ROOT
│ │ │ │ │ ├── images
│ │ │ │ │ ├── tally-exec.png
│ │ │ │ │ └── tally-vote.png
│ │ │ │ │ ├── nav.adoc
│ │ │ │ │ └── pages
│ │ │ │ │ ├── access-control.adoc
│ │ │ │ │ ├── crosschain.adoc
│ │ │ │ │ ├── crowdsales.adoc
│ │ │ │ │ ├── drafts.adoc
│ │ │ │ │ ├── erc1155.adoc
│ │ │ │ │ ├── erc20-supply.adoc
│ │ │ │ │ ├── erc20.adoc
│ │ │ │ │ ├── erc721.adoc
│ │ │ │ │ ├── erc777.adoc
│ │ │ │ │ ├── extending-contracts.adoc
│ │ │ │ │ ├── governance.adoc
│ │ │ │ │ ├── index.adoc
│ │ │ │ │ ├── releases-stability.adoc
│ │ │ │ │ ├── tokens.adoc
│ │ │ │ │ ├── upgradeable.adoc
│ │ │ │ │ ├── utilities.adoc
│ │ │ │ │ └── wizard.adoc
│ │ │ └── templates
│ │ │ │ ├── contract.hbs
│ │ │ │ ├── helpers.js
│ │ │ │ ├── page.hbs
│ │ │ │ └── properties.js
│ │ ├── hardhat.config.js
│ │ ├── hardhat
│ │ │ ├── env-contract.js
│ │ │ ├── ignore-unreachable-warnings.js
│ │ │ └── skip-foundry-tests.js
│ │ ├── lib
│ │ │ └── forge-std
│ │ │ │ ├── .github
│ │ │ │ └── workflows
│ │ │ │ │ └── ci.yml
│ │ │ │ ├── .gitignore
│ │ │ │ ├── .gitmodules
│ │ │ │ ├── LICENSE-APACHE
│ │ │ │ ├── LICENSE-MIT
│ │ │ │ ├── README.md
│ │ │ │ ├── foundry.toml
│ │ │ │ ├── lib
│ │ │ │ └── ds-test
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── Makefile
│ │ │ │ │ ├── default.nix
│ │ │ │ │ ├── demo
│ │ │ │ │ └── demo.sol
│ │ │ │ │ ├── package.json
│ │ │ │ │ └── src
│ │ │ │ │ └── test.sol
│ │ │ │ ├── package.json
│ │ │ │ ├── src
│ │ │ │ ├── Base.sol
│ │ │ │ ├── Script.sol
│ │ │ │ ├── StdAssertions.sol
│ │ │ │ ├── StdChains.sol
│ │ │ │ ├── StdCheats.sol
│ │ │ │ ├── StdError.sol
│ │ │ │ ├── StdJson.sol
│ │ │ │ ├── StdMath.sol
│ │ │ │ ├── StdStorage.sol
│ │ │ │ ├── StdUtils.sol
│ │ │ │ ├── Test.sol
│ │ │ │ ├── Vm.sol
│ │ │ │ ├── console.sol
│ │ │ │ ├── console2.sol
│ │ │ │ └── interfaces
│ │ │ │ │ ├── IERC1155.sol
│ │ │ │ │ ├── IERC165.sol
│ │ │ │ │ ├── IERC20.sol
│ │ │ │ │ ├── IERC4626.sol
│ │ │ │ │ └── IERC721.sol
│ │ │ │ └── test
│ │ │ │ ├── StdAssertions.t.sol
│ │ │ │ ├── StdChains.t.sol
│ │ │ │ ├── StdCheats.t.sol
│ │ │ │ ├── StdError.t.sol
│ │ │ │ ├── StdMath.t.sol
│ │ │ │ ├── StdStorage.t.sol
│ │ │ │ ├── StdUtils.t.sol
│ │ │ │ ├── compilation
│ │ │ │ ├── CompilationScript.sol
│ │ │ │ ├── CompilationScriptBase.sol
│ │ │ │ ├── CompilationTest.sol
│ │ │ │ └── CompilationTestBase.sol
│ │ │ │ └── fixtures
│ │ │ │ └── broadcast.log.json
│ │ ├── logo.svg
│ │ ├── netlify.toml
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── renovate.json
│ │ ├── scripts
│ │ │ ├── checks
│ │ │ │ ├── compareGasReports.js
│ │ │ │ ├── generation.sh
│ │ │ │ └── inheritance-ordering.js
│ │ │ ├── gen-nav.js
│ │ │ ├── generate
│ │ │ │ ├── format-lines.js
│ │ │ │ ├── run.js
│ │ │ │ └── templates
│ │ │ │ │ ├── Checkpoints.js
│ │ │ │ │ ├── CheckpointsMock.js
│ │ │ │ │ ├── EnumerableMap.js
│ │ │ │ │ ├── EnumerableMapMock.js
│ │ │ │ │ ├── EnumerableSet.js
│ │ │ │ │ ├── EnumerableSetMock.js
│ │ │ │ │ ├── SafeCast.js
│ │ │ │ │ ├── SafeCastMock.js
│ │ │ │ │ └── conversion.js
│ │ │ ├── git-user-config.sh
│ │ │ ├── helpers.js
│ │ │ ├── migrate-imports.js
│ │ │ ├── prepack.sh
│ │ │ ├── prepare-contracts-package.sh
│ │ │ ├── prepare-docs.sh
│ │ │ ├── prepare.sh
│ │ │ ├── release
│ │ │ │ ├── release.sh
│ │ │ │ ├── synchronize-versions.js
│ │ │ │ ├── update-changelog-release-date.js
│ │ │ │ ├── update-comment.js
│ │ │ │ └── version.sh
│ │ │ ├── remove-ignored-artifacts.js
│ │ │ └── update-docs-branch.js
│ │ ├── slither.config.json
│ │ └── test
│ │ │ ├── TESTING.md
│ │ │ ├── access
│ │ │ ├── AccessControl.behavior.js
│ │ │ ├── AccessControl.test.js
│ │ │ ├── AccessControlCrossChain.test.js
│ │ │ ├── AccessControlEnumerable.test.js
│ │ │ ├── Ownable.test.js
│ │ │ └── Ownable2Step.test.js
│ │ │ ├── crosschain
│ │ │ └── CrossChainEnabled.test.js
│ │ │ ├── finance
│ │ │ ├── PaymentSplitter.test.js
│ │ │ ├── VestingWallet.behavior.js
│ │ │ └── VestingWallet.test.js
│ │ │ ├── governance
│ │ │ ├── Governor.test.js
│ │ │ ├── TimelockController.test.js
│ │ │ ├── compatibility
│ │ │ │ └── GovernorCompatibilityBravo.test.js
│ │ │ ├── extensions
│ │ │ │ ├── GovernorComp.test.js
│ │ │ │ ├── GovernorERC721.test.js
│ │ │ │ ├── GovernorPreventLateQuorum.test.js
│ │ │ │ ├── GovernorTimelockCompound.test.js
│ │ │ │ ├── GovernorTimelockControl.test.js
│ │ │ │ ├── GovernorVotesQuorumFraction.test.js
│ │ │ │ └── GovernorWithParams.test.js
│ │ │ └── utils
│ │ │ │ ├── Votes.behavior.js
│ │ │ │ └── Votes.test.js
│ │ │ ├── helpers
│ │ │ ├── create2.js
│ │ │ ├── crosschain.js
│ │ │ ├── customError.js
│ │ │ ├── eip712.js
│ │ │ ├── enums.js
│ │ │ ├── erc1967.js
│ │ │ ├── governance.js
│ │ │ ├── sign.js
│ │ │ └── txpool.js
│ │ │ ├── metatx
│ │ │ ├── ERC2771Context.test.js
│ │ │ └── MinimalForwarder.test.js
│ │ │ ├── migrate-imports.test.js
│ │ │ ├── proxy
│ │ │ ├── Clones.behaviour.js
│ │ │ ├── Clones.test.js
│ │ │ ├── ERC1967
│ │ │ │ └── ERC1967Proxy.test.js
│ │ │ ├── Proxy.behaviour.js
│ │ │ ├── beacon
│ │ │ │ ├── BeaconProxy.test.js
│ │ │ │ └── UpgradeableBeacon.test.js
│ │ │ ├── transparent
│ │ │ │ ├── ProxyAdmin.test.js
│ │ │ │ ├── TransparentUpgradeableProxy.behaviour.js
│ │ │ │ └── TransparentUpgradeableProxy.test.js
│ │ │ └── utils
│ │ │ │ ├── Initializable.test.js
│ │ │ │ └── UUPSUpgradeable.test.js
│ │ │ ├── security
│ │ │ ├── Pausable.test.js
│ │ │ ├── PullPayment.test.js
│ │ │ └── ReentrancyGuard.test.js
│ │ │ ├── token
│ │ │ ├── ERC1155
│ │ │ │ ├── ERC1155.behavior.js
│ │ │ │ ├── ERC1155.test.js
│ │ │ │ ├── extensions
│ │ │ │ │ ├── ERC1155Burnable.test.js
│ │ │ │ │ ├── ERC1155Pausable.test.js
│ │ │ │ │ ├── ERC1155Supply.test.js
│ │ │ │ │ └── ERC1155URIStorage.test.js
│ │ │ │ ├── presets
│ │ │ │ │ └── ERC1155PresetMinterPauser.test.js
│ │ │ │ └── utils
│ │ │ │ │ └── ERC1155Holder.test.js
│ │ │ ├── ERC20
│ │ │ │ ├── ERC20.behavior.js
│ │ │ │ ├── ERC20.test.js
│ │ │ │ ├── extensions
│ │ │ │ │ ├── ERC20Burnable.behavior.js
│ │ │ │ │ ├── ERC20Burnable.test.js
│ │ │ │ │ ├── ERC20Capped.behavior.js
│ │ │ │ │ ├── ERC20Capped.test.js
│ │ │ │ │ ├── ERC20FlashMint.test.js
│ │ │ │ │ ├── ERC20Pausable.test.js
│ │ │ │ │ ├── ERC20Snapshot.test.js
│ │ │ │ │ ├── ERC20Votes.test.js
│ │ │ │ │ ├── ERC20VotesComp.test.js
│ │ │ │ │ ├── ERC20Wrapper.test.js
│ │ │ │ │ ├── ERC4626.test.js
│ │ │ │ │ └── draft-ERC20Permit.test.js
│ │ │ │ ├── presets
│ │ │ │ │ ├── ERC20PresetFixedSupply.test.js
│ │ │ │ │ └── ERC20PresetMinterPauser.test.js
│ │ │ │ └── utils
│ │ │ │ │ ├── SafeERC20.test.js
│ │ │ │ │ └── TokenTimelock.test.js
│ │ │ ├── ERC721
│ │ │ │ ├── ERC721.behavior.js
│ │ │ │ ├── ERC721.test.js
│ │ │ │ ├── ERC721Enumerable.test.js
│ │ │ │ ├── extensions
│ │ │ │ │ ├── ERC721Burnable.test.js
│ │ │ │ │ ├── ERC721Consecutive.t.sol
│ │ │ │ │ ├── ERC721Consecutive.test.js
│ │ │ │ │ ├── ERC721Pausable.test.js
│ │ │ │ │ ├── ERC721Royalty.test.js
│ │ │ │ │ ├── ERC721URIStorage.test.js
│ │ │ │ │ └── ERC721Votes.test.js
│ │ │ │ ├── presets
│ │ │ │ │ └── ERC721PresetMinterPauserAutoId.test.js
│ │ │ │ └── utils
│ │ │ │ │ └── ERC721Holder.test.js
│ │ │ ├── ERC777
│ │ │ │ ├── ERC777.behavior.js
│ │ │ │ ├── ERC777.test.js
│ │ │ │ └── presets
│ │ │ │ │ └── ERC777PresetFixedSupply.test.js
│ │ │ └── common
│ │ │ │ └── ERC2981.behavior.js
│ │ │ └── utils
│ │ │ ├── Address.test.js
│ │ │ ├── Arrays.test.js
│ │ │ ├── Base64.test.js
│ │ │ ├── Checkpoints.test.js
│ │ │ ├── Context.behavior.js
│ │ │ ├── Context.test.js
│ │ │ ├── Counters.test.js
│ │ │ ├── Create2.test.js
│ │ │ ├── Multicall.test.js
│ │ │ ├── StorageSlot.test.js
│ │ │ ├── Strings.test.js
│ │ │ ├── TimersBlockNumberImpl.test.js
│ │ │ ├── TimersTimestamp.test.js
│ │ │ ├── cryptography
│ │ │ ├── ECDSA.test.js
│ │ │ ├── EIP712.test.js
│ │ │ ├── MerkleProof.test.js
│ │ │ └── SignatureChecker.test.js
│ │ │ ├── escrow
│ │ │ ├── ConditionalEscrow.test.js
│ │ │ ├── Escrow.behavior.js
│ │ │ ├── Escrow.test.js
│ │ │ └── RefundEscrow.test.js
│ │ │ ├── introspection
│ │ │ ├── ERC165.test.js
│ │ │ ├── ERC165Checker.test.js
│ │ │ ├── ERC165Storage.test.js
│ │ │ ├── ERC1820Implementer.test.js
│ │ │ └── SupportsInterface.behavior.js
│ │ │ ├── math
│ │ │ ├── Math.t.sol
│ │ │ ├── Math.test.js
│ │ │ ├── SafeCast.test.js
│ │ │ ├── SafeMath.test.js
│ │ │ ├── SignedMath.test.js
│ │ │ └── SignedSafeMath.test.js
│ │ │ └── structs
│ │ │ ├── BitMap.test.js
│ │ │ ├── DoubleEndedQueue.test.js
│ │ │ ├── EnumerableMap.behavior.js
│ │ │ ├── EnumerableMap.test.js
│ │ │ ├── EnumerableSet.behavior.js
│ │ │ └── EnumerableSet.test.js
│ └── prb-math
│ │ ├── .commitlintrc.yaml
│ │ ├── .czrc
│ │ ├── .editorconfig
│ │ ├── .env.example
│ │ ├── .eslintignore
│ │ ├── .eslintrc.yaml
│ │ ├── .github
│ │ ├── FUNDING.yaml
│ │ └── workflows
│ │ │ └── integration.yaml
│ │ ├── .gitignore
│ │ ├── .husky
│ │ ├── .gitignore
│ │ ├── commit-msg
│ │ └── pre-commit
│ │ ├── .lintstagedrc
│ │ ├── .mocharc.yaml
│ │ ├── .nycrc.yaml
│ │ ├── .prettierignore
│ │ ├── .prettierrc.yaml
│ │ ├── .solcover.js
│ │ ├── .solhint.json
│ │ ├── .solhintignore
│ │ ├── .yarn
│ │ ├── plugins
│ │ │ └── @yarnpkg
│ │ │ │ └── plugin-interactive-tools.cjs
│ │ └── releases
│ │ │ └── yarn-3.1.1.cjs
│ │ ├── .yarnrc.yml
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ ├── contracts
│ │ ├── .npmignore
│ │ ├── PRBMath.sol
│ │ ├── PRBMathSD59x18.sol
│ │ ├── PRBMathSD59x18Typed.sol
│ │ ├── PRBMathUD60x18.sol
│ │ ├── PRBMathUD60x18Typed.sol
│ │ └── test
│ │ │ ├── PRBMathSD59x18Mock.sol
│ │ │ ├── PRBMathSD59x18TypedMock.sol
│ │ │ ├── PRBMathUD60x18Mock.sol
│ │ │ └── PRBMathUD60x18TypedMock.sol
│ │ ├── hardhat.config.ts
│ │ ├── package.json
│ │ ├── rollup.config.ts
│ │ ├── src
│ │ ├── constants.ts
│ │ ├── errors.ts
│ │ ├── functions.ts
│ │ ├── helpers.ts
│ │ ├── index.ts
│ │ └── math.ts
│ │ ├── test
│ │ ├── contracts
│ │ │ ├── index.test.ts
│ │ │ ├── prbMathSd59x18
│ │ │ │ ├── PRBMathSD59x18.test.ts
│ │ │ │ └── pure
│ │ │ │ │ ├── abs.test.ts
│ │ │ │ │ ├── add.test.ts
│ │ │ │ │ ├── avg.test.ts
│ │ │ │ │ ├── ceil.test.ts
│ │ │ │ │ ├── div.test.ts
│ │ │ │ │ ├── e.test.ts
│ │ │ │ │ ├── exp.test.ts
│ │ │ │ │ ├── exp2.test.ts
│ │ │ │ │ ├── floor.test.ts
│ │ │ │ │ ├── frac.test.ts
│ │ │ │ │ ├── fromInt.test.ts
│ │ │ │ │ ├── gm.test.ts
│ │ │ │ │ ├── inv.test.ts
│ │ │ │ │ ├── ln.test.ts
│ │ │ │ │ ├── log10.test.ts
│ │ │ │ │ ├── log2.test.ts
│ │ │ │ │ ├── mul.test.ts
│ │ │ │ │ ├── pi.test.ts
│ │ │ │ │ ├── pow.test.ts
│ │ │ │ │ ├── powu.test.ts
│ │ │ │ │ ├── scale.test.ts
│ │ │ │ │ ├── sqrt.test.ts
│ │ │ │ │ ├── sub.test.ts
│ │ │ │ │ └── toInt.test.ts
│ │ │ └── prbMathUd60x18
│ │ │ │ ├── PRBMathUD60x18.test.ts
│ │ │ │ └── pure
│ │ │ │ ├── add.test.ts
│ │ │ │ ├── avg.test.ts
│ │ │ │ ├── ceil.test.ts
│ │ │ │ ├── div.test.ts
│ │ │ │ ├── e.test.ts
│ │ │ │ ├── exp.test.ts
│ │ │ │ ├── exp2.test.ts
│ │ │ │ ├── floor.test.ts
│ │ │ │ ├── frac.test.ts
│ │ │ │ ├── fromUint.test.ts
│ │ │ │ ├── gm.test.ts
│ │ │ │ ├── inv.test.ts
│ │ │ │ ├── ln.test.ts
│ │ │ │ ├── log10.test.ts
│ │ │ │ ├── log2.test.ts
│ │ │ │ ├── mul.test.ts
│ │ │ │ ├── pi.test.ts
│ │ │ │ ├── pow.test.ts
│ │ │ │ ├── powu.test.ts
│ │ │ │ ├── scale.test.ts
│ │ │ │ ├── sqrt.test.ts
│ │ │ │ ├── sub.test.ts
│ │ │ │ └── toUint.test.ts
│ │ ├── shared
│ │ │ ├── assertions.ts
│ │ │ ├── constants.ts
│ │ │ ├── contexts.ts
│ │ │ ├── errors.ts
│ │ │ ├── fixtures.ts
│ │ │ ├── setup.ts
│ │ │ └── types.ts
│ │ └── ts
│ │ │ ├── functions
│ │ │ ├── avg.test.ts
│ │ │ ├── ceil.test.ts
│ │ │ ├── div.test.ts
│ │ │ ├── exp.test.ts
│ │ │ ├── exp2.test.ts
│ │ │ ├── floor.test.ts
│ │ │ ├── frac.test.ts
│ │ │ ├── gm.test.ts
│ │ │ ├── inv.test.ts
│ │ │ ├── ln.test.ts
│ │ │ ├── log10.test.ts
│ │ │ ├── log2.test.ts
│ │ │ ├── mul.test.ts
│ │ │ ├── pow.test.ts
│ │ │ └── sqrt.test.ts
│ │ │ └── index.test.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.prod.json
│ │ └── yarn.lock
├── requirements-dev.txt
├── scripts
│ ├── README.md
│ ├── abis.js
│ ├── ajna-setup.json
│ ├── ajna_setup.py
│ ├── erc20PoolCreation.js
│ ├── erc20PoolInteractions.js
│ ├── erc20pool_test.py
│ ├── package-lock.json
│ └── package.json
├── slither.config.json
├── src
│ ├── ERC20Pool.sol
│ ├── ERC20PoolFactory.sol
│ ├── ERC721Pool.sol
│ ├── ERC721PoolFactory.sol
│ ├── PoolInfoUtils.sol
│ ├── PositionManager.sol
│ ├── RewardsManager.sol
│ ├── base
│ │ ├── FlashloanablePool.sol
│ │ ├── PermitERC721.sol
│ │ ├── Pool.sol
│ │ └── PoolDeployer.sol
│ ├── interfaces
│ │ ├── pool
│ │ │ ├── IERC3156FlashBorrower.sol
│ │ │ ├── IERC3156FlashLender.sol
│ │ │ ├── IPool.sol
│ │ │ ├── IPoolFactory.sol
│ │ │ ├── commons
│ │ │ │ ├── IPoolBorrowerActions.sol
│ │ │ │ ├── IPoolDerivedState.sol
│ │ │ │ ├── IPoolErrors.sol
│ │ │ │ ├── IPoolEvents.sol
│ │ │ │ ├── IPoolImmutables.sol
│ │ │ │ ├── IPoolInternals.sol
│ │ │ │ ├── IPoolKickerActions.sol
│ │ │ │ ├── IPoolLPActions.sol
│ │ │ │ ├── IPoolLenderActions.sol
│ │ │ │ ├── IPoolSettlerActions.sol
│ │ │ │ ├── IPoolState.sol
│ │ │ │ └── IPoolTakerActions.sol
│ │ │ ├── erc20
│ │ │ │ ├── IERC20Pool.sol
│ │ │ │ ├── IERC20PoolBorrowerActions.sol
│ │ │ │ ├── IERC20PoolEvents.sol
│ │ │ │ ├── IERC20PoolFactory.sol
│ │ │ │ ├── IERC20PoolImmutables.sol
│ │ │ │ ├── IERC20PoolLenderActions.sol
│ │ │ │ └── IERC20Taker.sol
│ │ │ └── erc721
│ │ │ │ ├── IERC721Pool.sol
│ │ │ │ ├── IERC721PoolBorrowerActions.sol
│ │ │ │ ├── IERC721PoolErrors.sol
│ │ │ │ ├── IERC721PoolEvents.sol
│ │ │ │ ├── IERC721PoolFactory.sol
│ │ │ │ ├── IERC721PoolImmutables.sol
│ │ │ │ ├── IERC721PoolLenderActions.sol
│ │ │ │ ├── IERC721PoolState.sol
│ │ │ │ └── IERC721Taker.sol
│ │ ├── position
│ │ │ ├── IPositionManager.sol
│ │ │ ├── IPositionManagerDerivedState.sol
│ │ │ ├── IPositionManagerErrors.sol
│ │ │ ├── IPositionManagerEvents.sol
│ │ │ ├── IPositionManagerOwnerActions.sol
│ │ │ └── IPositionManagerState.sol
│ │ └── rewards
│ │ │ ├── IRewardsManager.sol
│ │ │ ├── IRewardsManagerDerivedState.sol
│ │ │ ├── IRewardsManagerErrors.sol
│ │ │ ├── IRewardsManagerEvents.sol
│ │ │ ├── IRewardsManagerOwnerActions.sol
│ │ │ └── IRewardsManagerState.sol
│ └── libraries
│ │ ├── external
│ │ ├── BorrowerActions.sol
│ │ ├── KickerActions.sol
│ │ ├── LPActions.sol
│ │ ├── LenderActions.sol
│ │ ├── PoolCommons.sol
│ │ ├── PositionNFTSVG.sol
│ │ ├── SettlerActions.sol
│ │ └── TakerActions.sol
│ │ ├── helpers
│ │ ├── PoolHelper.sol
│ │ ├── RevertsHelper.sol
│ │ └── SafeTokenNamer.sol
│ │ └── internal
│ │ ├── Buckets.sol
│ │ ├── Deposits.sol
│ │ ├── Loans.sol
│ │ └── Maths.sol
└── tests
│ ├── INVARIANTS.md
│ ├── README.md
│ ├── brownie
│ ├── conftest.py
│ ├── sdk
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── ajna_protocol.py
│ │ ├── ajna_protocol_runner.py
│ │ ├── erc20_token_client.py
│ │ └── protocol_definition.py
│ ├── test_invariants.py
│ ├── test_scaled_pool.py
│ └── test_stable_volatile.py
│ └── forge
│ ├── interactions
│ ├── BalancerUniswapExample.sol
│ ├── ERC20TakeWithExternalLiquidity.t.sol
│ ├── ERC721TakeWithExternalLiquidity.sol
│ ├── Interfaces.sol
│ ├── NFTTakeExample.sol
│ ├── PurchaseQuoteWithExternalLiquidity.t.sol
│ └── UniswapTakeExample.sol
│ ├── invariants
│ ├── ERC20Pool
│ │ ├── BasicERC20PoolInvariants.t.sol
│ │ ├── LiquidationERC20PoolInvariants.t.sol
│ │ ├── ReserveERC20PoolInvariants.t.sol
│ │ └── handlers
│ │ │ ├── BasicERC20PoolHandler.sol
│ │ │ ├── LiquidationERC20PoolHandler.sol
│ │ │ ├── ReserveERC20PoolHandler.sol
│ │ │ └── unbounded
│ │ │ ├── BaseERC20PoolHandler.sol
│ │ │ └── UnboundedBasicERC20PoolHandler.sol
│ ├── ERC721Pool
│ │ ├── BasicERC721PoolInvariants.t.sol
│ │ ├── LiquidationERC721PoolInvariants.t.sol
│ │ ├── ReserveERC721PoolInvariants.t.sol
│ │ └── handlers
│ │ │ ├── BasicERC721PoolHandler.sol
│ │ │ ├── LiquidationERC721PoolHandler.sol
│ │ │ ├── ReserveERC721PoolHandler.sol
│ │ │ └── unbounded
│ │ │ ├── BaseERC721PoolHandler.sol
│ │ │ └── UnboundedBasicERC721PoolHandler.sol
│ ├── base
│ │ ├── BaseInvariants.sol
│ │ ├── BasicInvariants.t.sol
│ │ ├── InvariantsTestHelpers.sol
│ │ ├── LiquidationInvariants.t.sol
│ │ ├── ReserveInvariants.t.sol
│ │ └── handlers
│ │ │ ├── BasicPoolHandler.sol
│ │ │ ├── LiquidationPoolHandler.sol
│ │ │ ├── ReservePoolHandler.sol
│ │ │ └── unbounded
│ │ │ ├── BaseHandler.sol
│ │ │ ├── UnboundedBasicPoolHandler.sol
│ │ │ ├── UnboundedLiquidationPoolHandler.sol
│ │ │ └── UnboundedReservePoolHandler.sol
│ ├── interfaces
│ │ ├── IBaseHandler.sol
│ │ └── ITestBase.sol
│ ├── test-invariant-erc20-buckets.sh
│ ├── test-invariant-erc20-precision.sh
│ └── test-invariant-erc721-buckets.sh
│ ├── regression
│ ├── ERC20Pool
│ │ ├── RegressionTestBasicERC20Pool.t.sol
│ │ ├── RegressionTestLiquidationERC20Pool.t.sol
│ │ └── RegressionTestReservesERC20Pool.t.sol
│ └── ERC721Pool
│ │ ├── RegressionTestBasicERC721Pool.t.sol
│ │ ├── RegressionTestLiquidationERC20Pool.t.sol
│ │ └── RegressionTestReservesERC721Pool.t.sol
│ ├── unit
│ ├── Auctions.t.sol
│ ├── ERC20Pool
│ │ ├── ERC20DSTestPlus.sol
│ │ ├── ERC20PoolBorrow.t.sol
│ │ ├── ERC20PoolCollateral.t.sol
│ │ ├── ERC20PoolFactory.t.sol
│ │ ├── ERC20PoolFlashloan.t.sol
│ │ ├── ERC20PoolGasLoadTest.t.sol
│ │ ├── ERC20PoolInfoUtils.t.sol
│ │ ├── ERC20PoolInputValidation.t.sol
│ │ ├── ERC20PoolInterestRateAndEMAs.t.sol
│ │ ├── ERC20PoolLiquidationsArbTake.t.sol
│ │ ├── ERC20PoolLiquidationsDepositTake.t.sol
│ │ ├── ERC20PoolLiquidationsKick.t.sol
│ │ ├── ERC20PoolLiquidationsKickWithDeposit.t.sol
│ │ ├── ERC20PoolLiquidationsMisc.t.sol
│ │ ├── ERC20PoolLiquidationsScaled.t.sol
│ │ ├── ERC20PoolLiquidationsSettle.t.sol
│ │ ├── ERC20PoolLiquidationsTake.t.sol
│ │ ├── ERC20PoolLoanHeap.t.sol
│ │ ├── ERC20PoolMulticall.t.sol
│ │ ├── ERC20PoolPrecision.t.sol
│ │ ├── ERC20PoolPurchaseQuote.t.sol
│ │ ├── ERC20PoolQuoteToken.t.sol
│ │ ├── ERC20PoolReserveAuction.t.sol
│ │ ├── ERC20PoolTransferLPs.t.sol
│ │ └── ERC20SafeTransferTokens.sol
│ ├── ERC721Pool
│ │ ├── ERC721DSTestPlus.sol
│ │ ├── ERC721PoolBorrow.t.sol
│ │ ├── ERC721PoolCollateral.t.sol
│ │ ├── ERC721PoolEMAs.t.sol
│ │ ├── ERC721PoolFactory.t.sol
│ │ ├── ERC721PoolFlashloan.t.sol
│ │ ├── ERC721PoolInputValidation.t.sol
│ │ ├── ERC721PoolInterest.t.sol
│ │ ├── ERC721PoolLiquidationsDepositTake.t.sol
│ │ ├── ERC721PoolLiquidationsKick.t.sol
│ │ ├── ERC721PoolLiquidationsSettle.t.sol
│ │ ├── ERC721PoolLiquidationsSettleAuction.t.sol
│ │ ├── ERC721PoolLiquidationsTake.t.sol
│ │ ├── ERC721PoolPurchaseQuote.t.sol
│ │ └── ERC721PoolReserveAuction.t.sol
│ ├── FenwickTree.t.sol
│ ├── Heap.t.sol
│ ├── MathTest.t.sol
│ ├── PoolCommonsTest.t.sol
│ ├── PoolHelperTest.t.sol
│ ├── PositionManager.t.sol
│ ├── Rewards
│ │ ├── RewardsDSTestPlus.sol
│ │ └── RewardsManager.t.sol
│ └── SafeTokenNamer.t.sol
│ └── utils
│ ├── ContractNFTRecipient.sol
│ ├── ContractNFTSpender.sol
│ ├── DSTestPlus.sol
│ ├── FenwickTreeInstance.sol
│ ├── FlashloanBorrower.sol
│ ├── HeapInstance.sol
│ └── Tokens.sol
├── ajna-grants
├── .env.example
├── .github
│ ├── pull_request_template.md
│ └── workflows
│ │ ├── forge-test.yml
│ │ └── slither.yml
├── .gitignore
├── .gitmodules
├── MULTICHAIN_STRATEGY.md
├── Makefile
├── README.md
├── check-code-coverage.sh
├── docs
│ └── GrantFund.jpg
├── foundry.toml
├── lib
│ ├── forge-std
│ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── ci.yml
│ │ ├── .gitignore
│ │ ├── .gitmodules
│ │ ├── LICENSE-APACHE
│ │ ├── LICENSE-MIT
│ │ ├── README.md
│ │ ├── foundry.toml
│ │ ├── lib
│ │ │ └── ds-test
│ │ │ │ ├── .github
│ │ │ │ └── workflows
│ │ │ │ │ └── build.yml
│ │ │ │ ├── .gitignore
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Makefile
│ │ │ │ ├── default.nix
│ │ │ │ ├── demo
│ │ │ │ └── demo.sol
│ │ │ │ ├── package.json
│ │ │ │ └── src
│ │ │ │ ├── test.sol
│ │ │ │ └── test.t.sol
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Base.sol
│ │ │ ├── Script.sol
│ │ │ ├── StdAssertions.sol
│ │ │ ├── StdChains.sol
│ │ │ ├── StdCheats.sol
│ │ │ ├── StdError.sol
│ │ │ ├── StdInvariant.sol
│ │ │ ├── StdJson.sol
│ │ │ ├── StdMath.sol
│ │ │ ├── StdStorage.sol
│ │ │ ├── StdStyle.sol
│ │ │ ├── StdUtils.sol
│ │ │ ├── Test.sol
│ │ │ ├── Vm.sol
│ │ │ ├── console.sol
│ │ │ ├── console2.sol
│ │ │ └── interfaces
│ │ │ │ ├── IERC1155.sol
│ │ │ │ ├── IERC165.sol
│ │ │ │ ├── IERC20.sol
│ │ │ │ ├── IERC4626.sol
│ │ │ │ ├── IERC721.sol
│ │ │ │ └── IMulticall3.sol
│ │ └── test
│ │ │ ├── StdAssertions.t.sol
│ │ │ ├── StdChains.t.sol
│ │ │ ├── StdCheats.t.sol
│ │ │ ├── StdError.t.sol
│ │ │ ├── StdMath.t.sol
│ │ │ ├── StdStorage.t.sol
│ │ │ ├── StdStyle.t.sol
│ │ │ ├── StdUtils.t.sol
│ │ │ ├── compilation
│ │ │ ├── CompilationScript.sol
│ │ │ ├── CompilationScriptBase.sol
│ │ │ ├── CompilationTest.sol
│ │ │ └── CompilationTestBase.sol
│ │ │ └── fixtures
│ │ │ └── broadcast.log.json
│ └── openzeppelin-contracts
│ │ ├── .codecov.yml
│ │ ├── .editorconfig
│ │ ├── .eslintrc
│ │ ├── .gitattributes
│ │ ├── .github
│ │ ├── ISSUE_TEMPLATE
│ │ │ ├── bug_report.md
│ │ │ ├── config.yml
│ │ │ └── feature_request.md
│ │ ├── PULL_REQUEST_TEMPLATE.md
│ │ ├── actions
│ │ │ ├── gas-compare
│ │ │ │ └── action.yml
│ │ │ └── setup
│ │ │ │ └── action.yml
│ │ └── workflows
│ │ │ ├── changelog.yml
│ │ │ ├── checks.yml
│ │ │ ├── docs.yml
│ │ │ └── upgradeable.yml
│ │ ├── .gitignore
│ │ ├── .gitmodules
│ │ ├── .mocharc.js
│ │ ├── .prettierrc
│ │ ├── .solcover.js
│ │ ├── .solhint.json
│ │ ├── CHANGELOG.md
│ │ ├── CODE_OF_CONDUCT.md
│ │ ├── CONTRIBUTING.md
│ │ ├── DOCUMENTATION.md
│ │ ├── GUIDELINES.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── RELEASING.md
│ │ ├── SECURITY.md
│ │ ├── audit
│ │ ├── 2017-03.md
│ │ └── 2018-10.pdf
│ │ ├── certora
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── applyHarness.patch
│ │ ├── harnesses
│ │ │ ├── ERC20VotesHarness.sol
│ │ │ ├── WizardControlFirstPriority.sol
│ │ │ └── WizardFirstTry.sol
│ │ ├── munged
│ │ │ └── .gitignore
│ │ ├── scripts
│ │ │ ├── Governor.sh
│ │ │ ├── GovernorCountingSimple-counting.sh
│ │ │ ├── WizardControlFirstPriority.sh
│ │ │ ├── WizardFirstTry.sh
│ │ │ ├── sanity.sh
│ │ │ └── verifyAll.sh
│ │ └── specs
│ │ │ ├── GovernorBase.spec
│ │ │ ├── GovernorCountingSimple.spec
│ │ │ ├── RulesInProgress.spec
│ │ │ └── sanity.spec
│ │ ├── contracts
│ │ ├── access
│ │ │ ├── AccessControl.sol
│ │ │ ├── AccessControlCrossChain.sol
│ │ │ ├── AccessControlEnumerable.sol
│ │ │ ├── IAccessControl.sol
│ │ │ ├── IAccessControlEnumerable.sol
│ │ │ ├── Ownable.sol
│ │ │ ├── Ownable2Step.sol
│ │ │ └── README.adoc
│ │ ├── crosschain
│ │ │ ├── CrossChainEnabled.sol
│ │ │ ├── README.adoc
│ │ │ ├── amb
│ │ │ │ ├── CrossChainEnabledAMB.sol
│ │ │ │ └── LibAMB.sol
│ │ │ ├── arbitrum
│ │ │ │ ├── CrossChainEnabledArbitrumL1.sol
│ │ │ │ ├── CrossChainEnabledArbitrumL2.sol
│ │ │ │ ├── LibArbitrumL1.sol
│ │ │ │ └── LibArbitrumL2.sol
│ │ │ ├── errors.sol
│ │ │ ├── optimism
│ │ │ │ ├── CrossChainEnabledOptimism.sol
│ │ │ │ └── LibOptimism.sol
│ │ │ └── polygon
│ │ │ │ └── CrossChainEnabledPolygonChild.sol
│ │ ├── finance
│ │ │ ├── PaymentSplitter.sol
│ │ │ ├── README.adoc
│ │ │ └── VestingWallet.sol
│ │ ├── governance
│ │ │ ├── Governor.sol
│ │ │ ├── IGovernor.sol
│ │ │ ├── README.adoc
│ │ │ ├── TimelockController.sol
│ │ │ ├── compatibility
│ │ │ │ ├── GovernorCompatibilityBravo.sol
│ │ │ │ └── IGovernorCompatibilityBravo.sol
│ │ │ ├── extensions
│ │ │ │ ├── GovernorCountingSimple.sol
│ │ │ │ ├── GovernorPreventLateQuorum.sol
│ │ │ │ ├── GovernorProposalThreshold.sol
│ │ │ │ ├── GovernorSettings.sol
│ │ │ │ ├── GovernorTimelockCompound.sol
│ │ │ │ ├── GovernorTimelockControl.sol
│ │ │ │ ├── GovernorVotes.sol
│ │ │ │ ├── GovernorVotesComp.sol
│ │ │ │ ├── GovernorVotesQuorumFraction.sol
│ │ │ │ └── IGovernorTimelock.sol
│ │ │ └── utils
│ │ │ │ ├── IVotes.sol
│ │ │ │ └── Votes.sol
│ │ ├── interfaces
│ │ │ ├── IERC1155.sol
│ │ │ ├── IERC1155MetadataURI.sol
│ │ │ ├── IERC1155Receiver.sol
│ │ │ ├── IERC1271.sol
│ │ │ ├── IERC1363.sol
│ │ │ ├── IERC1363Receiver.sol
│ │ │ ├── IERC1363Spender.sol
│ │ │ ├── IERC165.sol
│ │ │ ├── IERC1820Implementer.sol
│ │ │ ├── IERC1820Registry.sol
│ │ │ ├── IERC20.sol
│ │ │ ├── IERC20Metadata.sol
│ │ │ ├── IERC2309.sol
│ │ │ ├── IERC2981.sol
│ │ │ ├── IERC3156.sol
│ │ │ ├── IERC3156FlashBorrower.sol
│ │ │ ├── IERC3156FlashLender.sol
│ │ │ ├── IERC4626.sol
│ │ │ ├── IERC721.sol
│ │ │ ├── IERC721Enumerable.sol
│ │ │ ├── IERC721Metadata.sol
│ │ │ ├── IERC721Receiver.sol
│ │ │ ├── IERC777.sol
│ │ │ ├── IERC777Recipient.sol
│ │ │ ├── IERC777Sender.sol
│ │ │ ├── README.adoc
│ │ │ ├── draft-IERC1822.sol
│ │ │ └── draft-IERC2612.sol
│ │ ├── metatx
│ │ │ ├── ERC2771Context.sol
│ │ │ ├── MinimalForwarder.sol
│ │ │ └── README.adoc
│ │ ├── mocks
│ │ │ ├── AccessControlCrossChainMock.sol
│ │ │ ├── AccessControlEnumerableMock.sol
│ │ │ ├── AccessControlMock.sol
│ │ │ ├── AddressImpl.sol
│ │ │ ├── ArraysMock.sol
│ │ │ ├── BadBeacon.sol
│ │ │ ├── Base64Mock.sol
│ │ │ ├── BitmapMock.sol
│ │ │ ├── CallReceiverMock.sol
│ │ │ ├── CheckpointsMock.sol
│ │ │ ├── ClashingImplementation.sol
│ │ │ ├── ClonesMock.sol
│ │ │ ├── ConditionalEscrowMock.sol
│ │ │ ├── ContextMock.sol
│ │ │ ├── CountersImpl.sol
│ │ │ ├── Create2Impl.sol
│ │ │ ├── DoubleEndedQueueMock.sol
│ │ │ ├── DummyImplementation.sol
│ │ │ ├── ECDSAMock.sol
│ │ │ ├── EIP712External.sol
│ │ │ ├── ERC1155BurnableMock.sol
│ │ │ ├── ERC1155Mock.sol
│ │ │ ├── ERC1155PausableMock.sol
│ │ │ ├── ERC1155ReceiverMock.sol
│ │ │ ├── ERC1155SupplyMock.sol
│ │ │ ├── ERC1155URIStorageMock.sol
│ │ │ ├── ERC1271WalletMock.sol
│ │ │ ├── ERC165
│ │ │ │ ├── ERC165InterfacesSupported.sol
│ │ │ │ ├── ERC165MaliciousData.sol
│ │ │ │ ├── ERC165MissingData.sol
│ │ │ │ ├── ERC165NotSupported.sol
│ │ │ │ └── ERC165ReturnBomb.sol
│ │ │ ├── ERC165CheckerMock.sol
│ │ │ ├── ERC165Mock.sol
│ │ │ ├── ERC165StorageMock.sol
│ │ │ ├── ERC1820ImplementerMock.sol
│ │ │ ├── ERC20BurnableMock.sol
│ │ │ ├── ERC20CappedMock.sol
│ │ │ ├── ERC20DecimalsMock.sol
│ │ │ ├── ERC20FlashMintMock.sol
│ │ │ ├── ERC20Mock.sol
│ │ │ ├── ERC20PausableMock.sol
│ │ │ ├── ERC20PermitMock.sol
│ │ │ ├── ERC20SnapshotMock.sol
│ │ │ ├── ERC20VotesCompMock.sol
│ │ │ ├── ERC20VotesMock.sol
│ │ │ ├── ERC20WrapperMock.sol
│ │ │ ├── ERC2771ContextMock.sol
│ │ │ ├── ERC3156FlashBorrowerMock.sol
│ │ │ ├── ERC4626Mock.sol
│ │ │ ├── ERC721BurnableMock.sol
│ │ │ ├── ERC721ConsecutiveEnumerableMock.unreachable.sol
│ │ │ ├── ERC721ConsecutiveMock.sol
│ │ │ ├── ERC721EnumerableMock.sol
│ │ │ ├── ERC721Mock.sol
│ │ │ ├── ERC721PausableMock.sol
│ │ │ ├── ERC721ReceiverMock.sol
│ │ │ ├── ERC721RoyaltyMock.sol
│ │ │ ├── ERC721URIStorageMock.sol
│ │ │ ├── ERC721VotesMock.sol
│ │ │ ├── ERC777Mock.sol
│ │ │ ├── ERC777SenderRecipientMock.sol
│ │ │ ├── EnumerableMapMock.sol
│ │ │ ├── EnumerableSetMock.sol
│ │ │ ├── EtherReceiverMock.sol
│ │ │ ├── GovernorCompMock.sol
│ │ │ ├── GovernorCompatibilityBravoMock.sol
│ │ │ ├── GovernorMock.sol
│ │ │ ├── GovernorPreventLateQuorumMock.sol
│ │ │ ├── GovernorTimelockCompoundMock.sol
│ │ │ ├── GovernorTimelockControlMock.sol
│ │ │ ├── GovernorVoteMock.sol
│ │ │ ├── GovernorWithParamsMock.sol
│ │ │ ├── InitializableMock.sol
│ │ │ ├── MathMock.sol
│ │ │ ├── MerkleProofWrapper.sol
│ │ │ ├── MulticallTest.sol
│ │ │ ├── MulticallTokenMock.sol
│ │ │ ├── MultipleInheritanceInitializableMocks.sol
│ │ │ ├── Ownable2StepMock.sol
│ │ │ ├── OwnableMock.sol
│ │ │ ├── PausableMock.sol
│ │ │ ├── PullPaymentMock.sol
│ │ │ ├── ReentrancyAttack.sol
│ │ │ ├── ReentrancyMock.sol
│ │ │ ├── RegressionImplementation.sol
│ │ │ ├── SafeCastMock.sol
│ │ │ ├── SafeERC20Helper.sol
│ │ │ ├── SafeMathMock.sol
│ │ │ ├── SignatureCheckerMock.sol
│ │ │ ├── SignedMathMock.sol
│ │ │ ├── SignedSafeMathMock.sol
│ │ │ ├── SingleInheritanceInitializableMocks.sol
│ │ │ ├── StorageSlotMock.sol
│ │ │ ├── StringsMock.sol
│ │ │ ├── TimersBlockNumberImpl.sol
│ │ │ ├── TimersTimestampImpl.sol
│ │ │ ├── UUPS
│ │ │ │ ├── UUPSLegacy.sol
│ │ │ │ └── UUPSUpgradeableMock.sol
│ │ │ ├── VotesMock.sol
│ │ │ ├── compound
│ │ │ │ └── CompTimelock.sol
│ │ │ ├── crosschain
│ │ │ │ ├── bridges.sol
│ │ │ │ └── receivers.sol
│ │ │ └── wizard
│ │ │ │ ├── MyGovernor1.sol
│ │ │ │ ├── MyGovernor2.sol
│ │ │ │ └── MyGovernor3.sol
│ │ ├── package.json
│ │ ├── proxy
│ │ │ ├── Clones.sol
│ │ │ ├── ERC1967
│ │ │ │ ├── ERC1967Proxy.sol
│ │ │ │ └── ERC1967Upgrade.sol
│ │ │ ├── Proxy.sol
│ │ │ ├── README.adoc
│ │ │ ├── beacon
│ │ │ │ ├── BeaconProxy.sol
│ │ │ │ ├── IBeacon.sol
│ │ │ │ └── UpgradeableBeacon.sol
│ │ │ ├── transparent
│ │ │ │ ├── ProxyAdmin.sol
│ │ │ │ └── TransparentUpgradeableProxy.sol
│ │ │ └── utils
│ │ │ │ ├── Initializable.sol
│ │ │ │ └── UUPSUpgradeable.sol
│ │ ├── security
│ │ │ ├── Pausable.sol
│ │ │ ├── PullPayment.sol
│ │ │ ├── README.adoc
│ │ │ └── ReentrancyGuard.sol
│ │ ├── token
│ │ │ ├── ERC1155
│ │ │ │ ├── ERC1155.sol
│ │ │ │ ├── IERC1155.sol
│ │ │ │ ├── IERC1155Receiver.sol
│ │ │ │ ├── README.adoc
│ │ │ │ ├── extensions
│ │ │ │ │ ├── ERC1155Burnable.sol
│ │ │ │ │ ├── ERC1155Pausable.sol
│ │ │ │ │ ├── ERC1155Supply.sol
│ │ │ │ │ ├── ERC1155URIStorage.sol
│ │ │ │ │ └── IERC1155MetadataURI.sol
│ │ │ │ ├── presets
│ │ │ │ │ ├── ERC1155PresetMinterPauser.sol
│ │ │ │ │ └── README.md
│ │ │ │ └── utils
│ │ │ │ │ ├── ERC1155Holder.sol
│ │ │ │ │ └── ERC1155Receiver.sol
│ │ │ ├── ERC20
│ │ │ │ ├── ERC20.sol
│ │ │ │ ├── IERC20.sol
│ │ │ │ ├── README.adoc
│ │ │ │ ├── extensions
│ │ │ │ │ ├── ERC20Burnable.sol
│ │ │ │ │ ├── ERC20Capped.sol
│ │ │ │ │ ├── ERC20FlashMint.sol
│ │ │ │ │ ├── ERC20Pausable.sol
│ │ │ │ │ ├── ERC20Snapshot.sol
│ │ │ │ │ ├── ERC20Votes.sol
│ │ │ │ │ ├── ERC20VotesComp.sol
│ │ │ │ │ ├── ERC20Wrapper.sol
│ │ │ │ │ ├── ERC4626.sol
│ │ │ │ │ ├── IERC20Metadata.sol
│ │ │ │ │ ├── draft-ERC20Permit.sol
│ │ │ │ │ └── draft-IERC20Permit.sol
│ │ │ │ ├── presets
│ │ │ │ │ ├── ERC20PresetFixedSupply.sol
│ │ │ │ │ ├── ERC20PresetMinterPauser.sol
│ │ │ │ │ └── README.md
│ │ │ │ └── utils
│ │ │ │ │ ├── SafeERC20.sol
│ │ │ │ │ └── TokenTimelock.sol
│ │ │ ├── ERC721
│ │ │ │ ├── ERC721.sol
│ │ │ │ ├── IERC721.sol
│ │ │ │ ├── IERC721Receiver.sol
│ │ │ │ ├── README.adoc
│ │ │ │ ├── extensions
│ │ │ │ │ ├── ERC721Burnable.sol
│ │ │ │ │ ├── ERC721Consecutive.sol
│ │ │ │ │ ├── ERC721Enumerable.sol
│ │ │ │ │ ├── ERC721Pausable.sol
│ │ │ │ │ ├── ERC721Royalty.sol
│ │ │ │ │ ├── ERC721URIStorage.sol
│ │ │ │ │ ├── ERC721Votes.sol
│ │ │ │ │ ├── IERC721Enumerable.sol
│ │ │ │ │ ├── IERC721Metadata.sol
│ │ │ │ │ └── draft-ERC721Votes.sol
│ │ │ │ ├── presets
│ │ │ │ │ ├── ERC721PresetMinterPauserAutoId.sol
│ │ │ │ │ └── README.md
│ │ │ │ └── utils
│ │ │ │ │ └── ERC721Holder.sol
│ │ │ ├── ERC777
│ │ │ │ ├── ERC777.sol
│ │ │ │ ├── IERC777.sol
│ │ │ │ ├── IERC777Recipient.sol
│ │ │ │ ├── IERC777Sender.sol
│ │ │ │ ├── README.adoc
│ │ │ │ └── presets
│ │ │ │ │ └── ERC777PresetFixedSupply.sol
│ │ │ └── common
│ │ │ │ ├── ERC2981.sol
│ │ │ │ └── README.adoc
│ │ ├── utils
│ │ │ ├── Address.sol
│ │ │ ├── Arrays.sol
│ │ │ ├── Base64.sol
│ │ │ ├── Checkpoints.sol
│ │ │ ├── Context.sol
│ │ │ ├── Counters.sol
│ │ │ ├── Create2.sol
│ │ │ ├── Multicall.sol
│ │ │ ├── README.adoc
│ │ │ ├── StorageSlot.sol
│ │ │ ├── Strings.sol
│ │ │ ├── Timers.sol
│ │ │ ├── cryptography
│ │ │ │ ├── ECDSA.sol
│ │ │ │ ├── EIP712.sol
│ │ │ │ ├── MerkleProof.sol
│ │ │ │ ├── SignatureChecker.sol
│ │ │ │ └── draft-EIP712.sol
│ │ │ ├── escrow
│ │ │ │ ├── ConditionalEscrow.sol
│ │ │ │ ├── Escrow.sol
│ │ │ │ └── RefundEscrow.sol
│ │ │ ├── introspection
│ │ │ │ ├── ERC165.sol
│ │ │ │ ├── ERC165Checker.sol
│ │ │ │ ├── ERC165Storage.sol
│ │ │ │ ├── ERC1820Implementer.sol
│ │ │ │ ├── IERC165.sol
│ │ │ │ ├── IERC1820Implementer.sol
│ │ │ │ └── IERC1820Registry.sol
│ │ │ ├── math
│ │ │ │ ├── Math.sol
│ │ │ │ ├── SafeCast.sol
│ │ │ │ ├── SafeMath.sol
│ │ │ │ ├── SignedMath.sol
│ │ │ │ └── SignedSafeMath.sol
│ │ │ └── structs
│ │ │ │ ├── BitMaps.sol
│ │ │ │ ├── DoubleEndedQueue.sol
│ │ │ │ ├── EnumerableMap.sol
│ │ │ │ └── EnumerableSet.sol
│ │ └── vendor
│ │ │ ├── amb
│ │ │ └── IAMB.sol
│ │ │ ├── arbitrum
│ │ │ ├── IArbSys.sol
│ │ │ ├── IBridge.sol
│ │ │ ├── IDelayedMessageProvider.sol
│ │ │ ├── IInbox.sol
│ │ │ └── IOutbox.sol
│ │ │ ├── compound
│ │ │ ├── ICompoundTimelock.sol
│ │ │ └── LICENSE
│ │ │ ├── optimism
│ │ │ ├── ICrossDomainMessenger.sol
│ │ │ └── LICENSE
│ │ │ └── polygon
│ │ │ └── IFxMessageProcessor.sol
│ │ ├── docs
│ │ ├── antora.yml
│ │ ├── config.js
│ │ ├── modules
│ │ │ └── ROOT
│ │ │ │ ├── images
│ │ │ │ ├── tally-admin.png
│ │ │ │ └── tally-vote.png
│ │ │ │ ├── nav.adoc
│ │ │ │ └── pages
│ │ │ │ ├── access-control.adoc
│ │ │ │ ├── crosschain.adoc
│ │ │ │ ├── crowdsales.adoc
│ │ │ │ ├── drafts.adoc
│ │ │ │ ├── erc1155.adoc
│ │ │ │ ├── erc20-supply.adoc
│ │ │ │ ├── erc20.adoc
│ │ │ │ ├── erc721.adoc
│ │ │ │ ├── erc777.adoc
│ │ │ │ ├── extending-contracts.adoc
│ │ │ │ ├── governance.adoc
│ │ │ │ ├── index.adoc
│ │ │ │ ├── releases-stability.adoc
│ │ │ │ ├── tokens.adoc
│ │ │ │ ├── upgradeable.adoc
│ │ │ │ ├── utilities.adoc
│ │ │ │ └── wizard.adoc
│ │ └── templates
│ │ │ ├── contract.hbs
│ │ │ ├── helpers.js
│ │ │ ├── page.hbs
│ │ │ └── properties.js
│ │ ├── foundry.toml
│ │ ├── hardhat.config.js
│ │ ├── hardhat
│ │ ├── env-contract.js
│ │ ├── ignore-unreachable-warnings.js
│ │ └── skip-foundry-tests.js
│ │ ├── lib
│ │ └── forge-std
│ │ │ ├── .github
│ │ │ └── workflows
│ │ │ │ └── tests.yml
│ │ │ ├── .gitignore
│ │ │ ├── .gitmodules
│ │ │ ├── LICENSE-APACHE
│ │ │ ├── LICENSE-MIT
│ │ │ ├── README.md
│ │ │ ├── lib
│ │ │ └── ds-test
│ │ │ │ ├── .gitignore
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Makefile
│ │ │ │ ├── default.nix
│ │ │ │ ├── demo
│ │ │ │ └── demo.sol
│ │ │ │ └── src
│ │ │ │ └── test.sol
│ │ │ └── src
│ │ │ ├── Script.sol
│ │ │ ├── StdJson.sol
│ │ │ ├── Test.sol
│ │ │ ├── Vm.sol
│ │ │ ├── console.sol
│ │ │ ├── console2.sol
│ │ │ └── test
│ │ │ ├── Script.t.sol
│ │ │ ├── StdAssertions.t.sol
│ │ │ ├── StdCheats.t.sol
│ │ │ ├── StdError.t.sol
│ │ │ ├── StdMath.t.sol
│ │ │ ├── StdStorage.t.sol
│ │ │ └── fixtures
│ │ │ └── broadcast.log.json
│ │ ├── logo.svg
│ │ ├── netlify.toml
│ │ ├── package-lock.json
│ │ ├── package.json
│ │ ├── renovate.json
│ │ ├── scripts
│ │ ├── checks
│ │ │ ├── compareGasReports.js
│ │ │ ├── generation.sh
│ │ │ └── inheritance-ordering.js
│ │ ├── gen-nav.js
│ │ ├── generate
│ │ │ ├── format-lines.js
│ │ │ ├── run.js
│ │ │ └── templates
│ │ │ │ ├── Checkpoints.js
│ │ │ │ ├── CheckpointsMock.js
│ │ │ │ ├── EnumerableMap.js
│ │ │ │ ├── EnumerableMapMock.js
│ │ │ │ ├── EnumerableSet.js
│ │ │ │ ├── EnumerableSetMock.js
│ │ │ │ ├── SafeCast.js
│ │ │ │ ├── SafeCastMock.js
│ │ │ │ └── conversion.js
│ │ ├── git-user-config.sh
│ │ ├── helpers.js
│ │ ├── migrate-imports.js
│ │ ├── prepack.sh
│ │ ├── prepare-contracts-package.sh
│ │ ├── prepare-docs.sh
│ │ ├── prepare.sh
│ │ ├── release
│ │ │ ├── release.sh
│ │ │ ├── synchronize-versions.js
│ │ │ ├── update-changelog-release-date.js
│ │ │ ├── update-comment.js
│ │ │ └── version.sh
│ │ ├── remove-ignored-artifacts.js
│ │ └── update-docs-branch.js
│ │ ├── slither.config.json
│ │ └── test
│ │ ├── TESTING.md
│ │ ├── access
│ │ ├── AccessControl.behavior.js
│ │ ├── AccessControl.test.js
│ │ ├── AccessControlCrossChain.test.js
│ │ ├── AccessControlEnumerable.test.js
│ │ ├── Ownable.test.js
│ │ └── Ownable2Step.test.js
│ │ ├── crosschain
│ │ └── CrossChainEnabled.test.js
│ │ ├── finance
│ │ ├── PaymentSplitter.test.js
│ │ ├── VestingWallet.behavior.js
│ │ └── VestingWallet.test.js
│ │ ├── governance
│ │ ├── Governor.test.js
│ │ ├── TimelockController.test.js
│ │ ├── compatibility
│ │ │ └── GovernorCompatibilityBravo.test.js
│ │ ├── extensions
│ │ │ ├── GovernorComp.test.js
│ │ │ ├── GovernorERC721.test.js
│ │ │ ├── GovernorPreventLateQuorum.test.js
│ │ │ ├── GovernorTimelockCompound.test.js
│ │ │ ├── GovernorTimelockControl.test.js
│ │ │ ├── GovernorVotesQuorumFraction.test.js
│ │ │ └── GovernorWithParams.test.js
│ │ └── utils
│ │ │ ├── Votes.behavior.js
│ │ │ └── Votes.test.js
│ │ ├── helpers
│ │ ├── create2.js
│ │ ├── crosschain.js
│ │ ├── customError.js
│ │ ├── eip712.js
│ │ ├── enums.js
│ │ ├── erc1967.js
│ │ ├── governance.js
│ │ ├── sign.js
│ │ └── txpool.js
│ │ ├── metatx
│ │ ├── ERC2771Context.test.js
│ │ └── MinimalForwarder.test.js
│ │ ├── migrate-imports.test.js
│ │ ├── proxy
│ │ ├── Clones.behaviour.js
│ │ ├── Clones.test.js
│ │ ├── ERC1967
│ │ │ └── ERC1967Proxy.test.js
│ │ ├── Proxy.behaviour.js
│ │ ├── beacon
│ │ │ ├── BeaconProxy.test.js
│ │ │ └── UpgradeableBeacon.test.js
│ │ ├── transparent
│ │ │ ├── ProxyAdmin.test.js
│ │ │ ├── TransparentUpgradeableProxy.behaviour.js
│ │ │ └── TransparentUpgradeableProxy.test.js
│ │ └── utils
│ │ │ ├── Initializable.test.js
│ │ │ └── UUPSUpgradeable.test.js
│ │ ├── security
│ │ ├── Pausable.test.js
│ │ ├── PullPayment.test.js
│ │ └── ReentrancyGuard.test.js
│ │ ├── token
│ │ ├── ERC1155
│ │ │ ├── ERC1155.behavior.js
│ │ │ ├── ERC1155.test.js
│ │ │ ├── extensions
│ │ │ │ ├── ERC1155Burnable.test.js
│ │ │ │ ├── ERC1155Pausable.test.js
│ │ │ │ ├── ERC1155Supply.test.js
│ │ │ │ └── ERC1155URIStorage.test.js
│ │ │ ├── presets
│ │ │ │ └── ERC1155PresetMinterPauser.test.js
│ │ │ └── utils
│ │ │ │ └── ERC1155Holder.test.js
│ │ ├── ERC20
│ │ │ ├── ERC20.behavior.js
│ │ │ ├── ERC20.test.js
│ │ │ ├── extensions
│ │ │ │ ├── ERC20Burnable.behavior.js
│ │ │ │ ├── ERC20Burnable.test.js
│ │ │ │ ├── ERC20Capped.behavior.js
│ │ │ │ ├── ERC20Capped.test.js
│ │ │ │ ├── ERC20FlashMint.test.js
│ │ │ │ ├── ERC20Pausable.test.js
│ │ │ │ ├── ERC20Snapshot.test.js
│ │ │ │ ├── ERC20Votes.test.js
│ │ │ │ ├── ERC20VotesComp.test.js
│ │ │ │ ├── ERC20Wrapper.test.js
│ │ │ │ ├── ERC4626.test.js
│ │ │ │ └── draft-ERC20Permit.test.js
│ │ │ ├── presets
│ │ │ │ ├── ERC20PresetFixedSupply.test.js
│ │ │ │ └── ERC20PresetMinterPauser.test.js
│ │ │ └── utils
│ │ │ │ ├── SafeERC20.test.js
│ │ │ │ └── TokenTimelock.test.js
│ │ ├── ERC721
│ │ │ ├── ERC721.behavior.js
│ │ │ ├── ERC721.test.js
│ │ │ ├── ERC721Enumerable.test.js
│ │ │ ├── extensions
│ │ │ │ ├── ERC721Burnable.test.js
│ │ │ │ ├── ERC721Consecutive.test.js
│ │ │ │ ├── ERC721Pausable.test.js
│ │ │ │ ├── ERC721Royalty.test.js
│ │ │ │ ├── ERC721URIStorage.test.js
│ │ │ │ └── ERC721Votes.test.js
│ │ │ ├── presets
│ │ │ │ └── ERC721PresetMinterPauserAutoId.test.js
│ │ │ └── utils
│ │ │ │ └── ERC721Holder.test.js
│ │ ├── ERC777
│ │ │ ├── ERC777.behavior.js
│ │ │ ├── ERC777.test.js
│ │ │ └── presets
│ │ │ │ └── ERC777PresetFixedSupply.test.js
│ │ └── common
│ │ │ └── ERC2981.behavior.js
│ │ └── utils
│ │ ├── Address.test.js
│ │ ├── Arrays.test.js
│ │ ├── Base64.test.js
│ │ ├── Checkpoints.test.js
│ │ ├── Context.behavior.js
│ │ ├── Context.test.js
│ │ ├── Counters.test.js
│ │ ├── Create2.test.js
│ │ ├── Multicall.test.js
│ │ ├── StorageSlot.test.js
│ │ ├── Strings.test.js
│ │ ├── TimersBlockNumberImpl.test.js
│ │ ├── TimersTimestamp.test.js
│ │ ├── cryptography
│ │ ├── ECDSA.test.js
│ │ ├── EIP712.test.js
│ │ ├── MerkleProof.test.js
│ │ └── SignatureChecker.test.js
│ │ ├── escrow
│ │ ├── ConditionalEscrow.test.js
│ │ ├── Escrow.behavior.js
│ │ ├── Escrow.test.js
│ │ └── RefundEscrow.test.js
│ │ ├── introspection
│ │ ├── ERC165.test.js
│ │ ├── ERC165Checker.test.js
│ │ ├── ERC165Storage.test.js
│ │ ├── ERC1820Implementer.test.js
│ │ └── SupportsInterface.behavior.js
│ │ ├── math
│ │ ├── Math.t.sol
│ │ ├── Math.test.js
│ │ ├── SafeCast.test.js
│ │ ├── SafeMath.test.js
│ │ ├── SignedMath.test.js
│ │ └── SignedSafeMath.test.js
│ │ └── structs
│ │ ├── BitMap.test.js
│ │ ├── DoubleEndedQueue.test.js
│ │ ├── EnumerableMap.behavior.js
│ │ ├── EnumerableMap.test.js
│ │ ├── EnumerableSet.behavior.js
│ │ └── EnumerableSet.test.js
├── remappings.txt
├── script
│ ├── AjnaToken.s.sol
│ └── GrantFund.s.sol
├── slither.config.json
├── src
│ ├── grants
│ │ ├── GRANT_FUND.md
│ │ ├── GrantFund.sol
│ │ ├── base
│ │ │ ├── ExtraordinaryFunding.sol
│ │ │ ├── Funding.sol
│ │ │ └── StandardFunding.sol
│ │ ├── interfaces
│ │ │ ├── IExtraordinaryFunding.sol
│ │ │ ├── IFunding.sol
│ │ │ ├── IGrantFund.sol
│ │ │ └── IStandardFunding.sol
│ │ └── libraries
│ │ │ └── Maths.sol
│ └── token
│ │ ├── AJNA_TOKEN.md
│ │ ├── AjnaToken.sol
│ │ └── BurnWrapper.sol
└── test
│ ├── interactions
│ └── DrainGrantFund.sol
│ ├── invariants
│ ├── ExtraordinaryInvariant.t.sol
│ ├── INVARIANTS.md
│ ├── StandardFinalizeInvariant.t.sol
│ ├── StandardFundingInvariant.t.sol
│ ├── StandardMultipleDistributionInvariant.t.sol
│ ├── StandardScreeningInvariant.t.sol
│ ├── base
│ │ ├── ExtraordinaryTestBase.sol
│ │ ├── ITestBase.sol
│ │ ├── StandardTestBase.sol
│ │ └── TestBase.sol
│ └── handlers
│ │ ├── ExtraordinaryHandler.sol
│ │ ├── Handler.sol
│ │ └── StandardHandler.sol
│ ├── unit
│ ├── AjnaToken.t.sol
│ ├── BurnWrappedToken.t.sol
│ ├── ExtraordinaryFunding.t.sol
│ ├── GrantFund.t.sol
│ ├── Maths.t.sol
│ └── StandardFunding.t.sol
│ └── utils
│ ├── GrantFundTestHelper.sol
│ ├── IAjnaToken.sol
│ └── SigUtils.sol
└── discord-export
├── Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html
├── Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files
├── 0558b11388c316c71b747213649d9f56-4B100.png
├── 0ab6fddedfdca4dee0b54ab41ab4faad-3EFDA.png
├── 0ac1475f8d92f028dfe6daa37fc91035-24F9F.png
├── 0e5b3c84382435322161f927b720d8f6-5CB49.png
├── 1-B2132.png
├── 1080667809002037320-8957D.png
├── 1083068770823721071-EE4F6.png
├── 137d3e15fa9d5b9b5e5dbbd3fc432191-201D6.png
├── 14ea78b80318f2bf28da987fc2be9912-F4E16.png
├── 15cdaa10c5644d913a1ab1f9f06288c1-8A82B.png
├── 17e6d21118aa7a0a26c8a0d14f156cdf-5A089.png
├── 1f389-5C738.svg
├── 1f3c1-445DC.svg
├── 1f3c6-621A1.svg
├── 1f43a-EB486.svg
├── 1f440-6C64D.svg
├── 1f44a-68C68.svg
├── 1f44b-8A059.svg
├── 1f44c-59547.svg
├── 1f44d-1f3fb-ED2AA.svg
├── 1f44d-27259.svg
├── 1f47d-6BD44.svg
├── 1f49c-71A75.svg
├── 1f4aa-1f3fb-AF516.svg
├── 1f4aa-2FD27.svg
├── 1f4af-4CFF5.svg
├── 1f4b8-E3468.svg
├── 1f4c4-413F0.svg
├── 1f4c6-44E30.svg
├── 1f4dc-AC641.svg
├── 1f50d-195C0.svg
├── 1f525-8FE4F.svg
├── 1f601-4E9BD.svg
├── 1f602-168C5.svg
├── 1f605-42B43.svg
├── 1f614-BB5EE.svg
├── 1f61c-458C6.svg
├── 1f633-5703D.svg
├── 1f634-DC9E9.svg
├── 1f642-83E8A.svg
├── 1f64b-EF4BA.svg
├── 1f64c-7C820.svg
├── 1f64f-22B8D.svg
├── 1f680-A35CE.svg
├── 1f6a8-A8AB3.svg
├── 1f911-F346C.svg
├── 1f916-AD810.svg
├── 1f971-CD83B.svg
├── 1f973-88B39.svg
├── 1f98b-AA52A.svg
├── 1f9be-DDCD0.svg
├── 1f9d0-3E117.svg
├── 1f9d1-5BC80.svg
├── 1fae1-B19DE.svg
├── 2-ADBB4.png
├── 20b7a9f70866c517684cce8b521d55eb-C4D77.png
├── 22eb9a485d5708ecfa60b414b7425066-DDFC8.png
├── 258efb44a5e3f3ccd0db6c4b11462ff2-08900.png
├── 2615-17F2E.svg
├── 2665-8CDCE.svg
├── 2696-15F4A.svg
├── 26a1-7A124.svg
├── 2705-0589F.svg
├── 2764-A3D25.svg
├── 2795-3358E.svg
├── 2a9faff195fe333526cfe6ae6fce1420-49B98.png
├── 2c1def883024ca7c1a2bc629a8b54908-252A9.png
├── 3-FB033.png
├── 32800799d91968c4534a7242647fff2b-0408E.png
├── 37254c70d1f43924aab295c5f32a33ab-FAE53.png
├── 394983eda2eb8faf909901fe09d16b4b-BAFA3.png
├── 3b01c38b7c5b905fd8e8a1d72f7d7492-53427.png
├── 4-4551A.png
├── 43d4de17430aed2a2ecc19ffe96fbf29-9CFFA.png
├── 44c233abaf97eb3e1b0edf585fecd499-56E12.png
├── 47a90c36a9d5ab41d808ed4927e2d160-09864.png
├── 4de0a7f237fde45d02ba1266af3cbf19-81483.png
├── 5-E9BDB.png
├── 514d83db5e503f5a33fd3f790d42d452-555FF.png
├── 568d22b97293cdd2d9b7006198d6adbc-F0132.png
├── 6094e48ab77eb87fae4e3348c0d872b4-34FEF.png
├── 67594ee4b4d1fc03bca468327a0d145b-BD76A.png
├── 6b3e8db133891c8c0be08fb8b4fe9bff-36B4D.png
├── 72a8a0e9411066feb2ada997cccde0ff-5710A.png
├── 7345f179853dde10ad03b548b769071e-61E32.png
├── 754850443909267567-E2D08.gif
├── 785c0b7123c292fe05d43e8dbf0d7044-B46B9.png
├── 78ec7cffe84a40a3c9479b3762f50458-FA5BB.png
├── 81-DA66A
├── 851893827027075142-F23DF.png
├── 851893827089727568-5FD38.png
├── 851893827315826708-F59C0.png
├── 851893828280909886-FBF42.png
├── 86405fe46555cfeea65230abea180e3f-B42C2.png
├── 8817fd8ba40654b1081a3df74efdb7c3-65D01.png
├── 8c1e8d99070b23de448047fcd524b8fa-B03B7.png
├── 9010cff7dc5115048ddc82561051356b-12341.png
├── 92723d55220e7121bd5dc9694136a3d2-3B2C3.png
├── 94fcb7838a04ec855fb2853565f07b3c-02B6F.png
├── 9542a3c6a8ce011c16ce81d61dc908f9-F344E.png
├── 9597b876-a4bb-434d-86b7-2e9ce368bd4c-1B806
├── 966eaf1aafcae6abcb9e0db823947e2f-96F55.png
├── 970d2e2f00cd7ef2134a1a3f21326349-404EA.png
├── 9dae367c2914db90ec5f86da55c97b23-1BB00.png
├── Screenshot_2023-06-08_at_08.13.00-1407F.png
├── Screenshot_2023-06-08_at_11.36.23_AM-A74DB.png
├── a15d1fd903ebf135e19766fdf040a280-46865.png
├── a681a986fc31a9739459ccc096516151-9053D.png
├── aa24291fb1227c5734330daec1d79595-C9CFC.png
├── abb480ed1510d7994e58bc85f8e989d6-66497.png
├── abc149ebfff39ff0776baa87dac61837-DE3AC.png
├── b4fead77f737aa7840a25e1cd39eb062-CEDEC.png
├── bb343372d44b28557a1291ab7f03b53d-CD490.png
├── bcf0949872ddb3c0307bb38aa8197dfe-58D30.png
├── c4-og-banner-0FCFA.png
├── c6b85a4a6ca07ab15a30a24f570be5b8-142E6.png
├── c6dfa3135b62e742ac7e28c3e14714f9-90F20.png
├── cf45b72e4669855b84803db73591efaa-42E6D.png
├── d05992162b128265b0f4fd4543b46456-9F835.png
├── d28fcb32fb4a0872e0cbaf200d440c26-CFD73.png
├── d2975fd6783736b0baccb3c8e26eb6e2-242D1.png
├── d6f5621387ce3568c12af7fdf986d26a-C66DD.png
├── decba2e13096444298a3c7e4ef7c7ff3-46061.png
├── ds-logo-icon-126807ac9914f82e45e9306394e76-568D5.jpg
├── e6f4ca0e498c6a1841fd2181890d7668-D7F35.png
├── ec906ee29b2bacd49cd7e28a849ef04b-F54DF.png
├── ee7b955ace762db80f995e9248d5d9ed-32632.png
├── f91c0ad3bd4337a3edab4633126f6652-94679.png
├── fd032d1c27ba593b4fbe6be4c074663d-78A1D.png
├── fe9558f335cb8f887866a2c6cd93a6d0-F7F17.png
├── ggsans-italic-400-E988B.woff2
├── ggsans-italic-500-0777F.woff2
├── ggsans-italic-600-CB411.woff2
├── ggsans-italic-700-891AC.woff2
├── ggsans-italic-800-D36B0.woff2
├── ggsans-normal-400-1456D.woff2
├── ggsans-normal-500-89CE5.woff2
├── ggsans-normal-600-C1EA8.woff2
├── ggsans-normal-700-1949A.woff2
├── ggsans-normal-800-58487.woff2
├── highlight.min-D8D27.js
├── lottie.min-99657.js
└── solarized-dark.min-BA98F.css
├── Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt
└── Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files
├── 81-DA66A
├── 9597b876-a4bb-434d-86b7-2e9ce368bd4c-1B806
├── Screenshot_2023-06-08_at_08.13.00-1407F.png
├── Screenshot_2023-06-08_at_11.36.23_AM-A74DB.png
├── c4-og-banner-0FCFA.png
└── ds-logo-icon-126807ac9914f82e45e9306394e76-568D5.jpg
/ajna-core/.gitignore:
--------------------------------------------------------------------------------
1 | cache/
2 | *out/
3 | node_modules/*
4 | node_modules
5 | .env
6 | .env.prod
7 | .idea/
8 | .vscode/*.log
9 | __pycache__/
10 | reports/
11 | .gas-snapshot
12 | .DS_store
13 | coverage/
14 | *.info
15 | report/
16 | keystore/
17 | broadcast/
--------------------------------------------------------------------------------
/ajna-core/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/forge-std"]
2 | path = lib/forge-std
3 | url = https://github.com/brockelmore/forge-std
4 | [submodule "lib/openzeppelin-contracts"]
5 | path = lib/openzeppelin-contracts
6 | url = https://github.com/openzeppelin/openzeppelin-contracts
7 | [submodule "lib/prb-math"]
8 | path = lib/prb-math
9 | url = https://github.com/paulrberg/prb-math
10 | [submodule "lib/base64"]
11 | path = lib/base64
12 | url = https://github.com/Brechtpd/base64
13 | [submodule "lib/clones-with-immutable-args"]
14 | path = lib/clones-with-immutable-args
15 | url = https://github.com/wighawag/clones-with-immutable-args.git
16 |
--------------------------------------------------------------------------------
/ajna-core/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "makefile.extensionOutputFolder": "./.vscode",
3 | "editor.formatOnSave": false,
4 | "solidity.formatter": "prettier",
5 | "solidity.compileUsingLocalVersion": "latest",
6 | "python.formatting.provider": "black",
7 | "solidity.compileUsingRemoteVersion": "v0.8.14+commit.80d49f37"
8 | }
9 |
--------------------------------------------------------------------------------
/ajna-core/brownie_hooks.py:
--------------------------------------------------------------------------------
1 | from dotenv import load_dotenv
2 |
3 | load_dotenv()
4 |
--------------------------------------------------------------------------------
/ajna-core/check-code-coverage.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | forge coverage --report lcov --no-match-test "testLoad|invariant"
4 |
5 | lcov -r lcov.info "tests/*" -o lcov-filtered.info --rc lcov_branch_coverage=1
6 |
7 | genhtml lcov-filtered.info -o report --branch-coverage && firefox report/index.html
8 |
--------------------------------------------------------------------------------
/ajna-core/check-size.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | s=$(brownie compile --size | sed 's/\x1b\[[0-9;]*m//g') # strip ansi color from brownie output
3 | echo "${s}"
4 | regex='============ Deployment Bytecode Sizes ============\s*(\w+)\s+-\s+([0-9,B]+)\s+\(([0-9.]+%)\)'
5 | [[ "$s" =~ $regex ]]
6 | largest_contract=${BASH_REMATCH[1]}
7 | largest_size=$(echo "${BASH_REMATCH[2]}" | sed -e 's/,//g' -e 's/B//g')
8 | largest_percent=${BASH_REMATCH[3]}
9 |
10 | limit=24576
11 | echo "$largest_contract is $largest_size bytes ($largest_percent of $limit byte size limit)."
12 | if (( largest_size > limit)); then
13 | exit 1
14 | fi;
15 |
--------------------------------------------------------------------------------
/ajna-core/docs/.gitignore:
--------------------------------------------------------------------------------
1 | book/
--------------------------------------------------------------------------------
/ajna-core/docs/jpeg/ajnaContractsArchitecture.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/ajna-core/docs/jpeg/ajnaContractsArchitecture.jpeg
--------------------------------------------------------------------------------
/ajna-core/docs/jpeg/poolContract.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/ajna-core/docs/jpeg/poolContract.jpeg
--------------------------------------------------------------------------------
/ajna-core/docs/jpeg/poolContractsArchitecture.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/ajna-core/docs/jpeg/poolContractsArchitecture.jpeg
--------------------------------------------------------------------------------
/ajna-core/hardhat.config.js:
--------------------------------------------------------------------------------
1 |
2 | // autogenerated by brownie
3 | // do not modify the existing settings
4 | module.exports = {
5 | networks: {
6 | hardhat: {
7 | hardfork: "london",
8 | // base fee of 0 allows use of 0 gas price when testing
9 | initialBaseFeePerGas: 0,
10 | // brownie expects calls and transactions to throw on revert
11 | throwOnTransactionFailures: true,
12 | throwOnCallFailures: true
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ajna-core/lib/base64/README.md:
--------------------------------------------------------------------------------
1 | # base64
2 |
3 | base64 encoding/decoding in solidity.
4 |
5 | Also available as a package. Add it to `package.json`:
6 |
7 | ```
8 | "base64-sol": "1.1.0"
9 | ```
10 |
11 | and import it in solidity:
12 |
13 | ```
14 | import 'base64-sol/base64.sol';
15 | ```
16 |
--------------------------------------------------------------------------------
/ajna-core/lib/base64/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "base64-sol",
3 | "version": "1.1.0",
4 | "description": "base64 implementation in solidity",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git+https://github.com/Brechtpd/base64.git"
12 | },
13 | "keywords": [
14 | "base64",
15 | "solidity"
16 | ],
17 | "author": "Brecht Devos",
18 | "license": "MIT",
19 | "bugs": {
20 | "url": "https://github.com/Brechtpd/base64/issues"
21 | },
22 | "homepage": "https://github.com/Brechtpd/base64#readme"
23 | }
24 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/.gitattributes:
--------------------------------------------------------------------------------
1 | *.sol linguist-language=Solidity
2 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 | on:
3 | push:
4 | branches:
5 | - master
6 | pull_request:
7 |
8 | jobs:
9 | run-ci:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 | with:
14 | submodules: recursive
15 |
16 | - name: Install Foundry
17 | uses: onbjerg/foundry-toolchain@v1
18 | with:
19 | version: nightly
20 |
21 | - name: Run tests
22 | run: make test
23 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/.gitignore:
--------------------------------------------------------------------------------
1 | # Node
2 | node_modules
3 |
4 | # Forge
5 | out/
6 | cache/
7 |
8 | .env
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/ds-test"]
2 | path = lib/ds-test
3 | url = https://github.com/dapphub/ds-test
4 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/.solhint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "solhint:recommended",
3 | "plugins": ["prettier"],
4 | "rules": {
5 | "code-complexity": ["error", 8],
6 | "compiler-version": ["error", ">=0.5.8"],
7 | "const-name-snakecase": "off",
8 | "constructor-syntax": "error",
9 | "func-visibility": ["error", { "ignoreConstructors": true }],
10 | "max-line-length": ["error", 10000],
11 | "not-rely-on-time": "off",
12 | "prettier/prettier": [
13 | "error",
14 | {
15 | "endOfLine": "auto"
16 | }
17 | ],
18 | "reason-string": ["warn", { "maxLength": 64 }]
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "solidity.packageDefaultDependenciesContractsDirectory": "src",
3 | "solidity.packageDefaultDependenciesDirectory": "lib",
4 | "files.associations": {
5 | ".dapprc": "shellscript"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/Makefile:
--------------------------------------------------------------------------------
1 | # include .env file and export its env vars
2 | # (-include to ignore error if it does not exist)
3 | -include .env
4 |
5 | # deps
6 | update:; forge update
7 |
8 | # Build & test
9 | build :; forge build
10 | test :; forge test
11 | trace :; forge test -vvv
12 | clean :; forge clean
13 | snapshot :; forge snapshot
14 | lint :; yarn lint
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/foundry.toml:
--------------------------------------------------------------------------------
1 | [default]
2 | ffi = false
3 | fuzz_runs = 256
4 | optimizer = true
5 | optimizer_runs = 1000000
6 | remappings = ["ds-test/=lib/ds-test/src/"]
7 | verbosity = 1
8 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/lib/ds-test/.gitignore:
--------------------------------------------------------------------------------
1 | /.dapple
2 | /build
3 | /out
4 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/lib/ds-test/Makefile:
--------------------------------------------------------------------------------
1 | all:; dapp build
2 |
3 | test:
4 | -dapp --use solc:0.4.23 build
5 | -dapp --use solc:0.4.26 build
6 | -dapp --use solc:0.5.17 build
7 | -dapp --use solc:0.6.12 build
8 | -dapp --use solc:0.7.5 build
9 |
10 | demo:
11 | DAPP_SRC=demo dapp --use solc:0.7.5 build
12 | -hevm dapp-test --verbose 3
13 |
14 | .PHONY: test demo
15 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/lib/ds-test/default.nix:
--------------------------------------------------------------------------------
1 | { solidityPackage, dappsys }: solidityPackage {
2 | name = "ds-test";
3 | src = ./src;
4 | }
5 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/remappings.txt:
--------------------------------------------------------------------------------
1 | ds-test/=lib/ds-test/src/
2 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/src/ExampleClone.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BSD
2 | pragma solidity ^0.8.4;
3 |
4 | import {Clone} from "./Clone.sol";
5 |
6 | contract ExampleClone is Clone {
7 | function param1() public pure returns (address) {
8 | return _getArgAddress(0);
9 | }
10 |
11 | function param2() public pure returns (uint256) {
12 | return _getArgUint256(20);
13 | }
14 |
15 | function param3() public pure returns (uint64) {
16 | return _getArgUint64(52);
17 | }
18 |
19 | function param4() public pure returns (uint8) {
20 | return _getArgUint8(60);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/ajna-core/lib/clones-with-immutable-args/src/test/utils/Hevm.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: BSD
2 | pragma solidity ^0.8.4;
3 |
4 | abstract contract Hevm {
5 | // sets the block timestamp to x
6 | function warp(uint256 x) public virtual;
7 |
8 | // sets the block number to x
9 | function roll(uint256 x) public virtual;
10 |
11 | // sets the slot loc of contract c to val
12 | function store(
13 | address c,
14 | bytes32 loc,
15 | bytes32 val
16 | ) public virtual;
17 |
18 | function ffi(string[] calldata) external virtual returns (bytes memory);
19 | }
20 |
--------------------------------------------------------------------------------
/ajna-core/lib/forge-std/.gitignore:
--------------------------------------------------------------------------------
1 | cache/
2 | out/
3 | .vscode
4 | .idea
--------------------------------------------------------------------------------
/ajna-core/lib/forge-std/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/ds-test"]
2 | path = lib/ds-test
3 | url = https://github.com/dapphub/ds-test
4 |
--------------------------------------------------------------------------------
/ajna-core/lib/forge-std/lib/ds-test/.gitignore:
--------------------------------------------------------------------------------
1 | /.dapple
2 | /build
3 | /out
4 |
--------------------------------------------------------------------------------
/ajna-core/lib/forge-std/lib/ds-test/Makefile:
--------------------------------------------------------------------------------
1 | all:; dapp build
2 |
3 | test:
4 | -dapp --use solc:0.4.23 build
5 | -dapp --use solc:0.4.26 build
6 | -dapp --use solc:0.5.17 build
7 | -dapp --use solc:0.6.12 build
8 | -dapp --use solc:0.7.5 build
9 |
10 | demo:
11 | DAPP_SRC=demo dapp --use solc:0.7.5 build
12 | -hevm dapp-test --verbose 3
13 |
14 | .PHONY: test demo
15 |
--------------------------------------------------------------------------------
/ajna-core/lib/forge-std/lib/ds-test/default.nix:
--------------------------------------------------------------------------------
1 | { solidityPackage, dappsys }: solidityPackage {
2 | name = "ds-test";
3 | src = ./src;
4 | }
5 |
--------------------------------------------------------------------------------
/ajna-core/lib/forge-std/src/test/Script.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.7.0 <0.9.0;
3 |
4 | import "../Test.sol";
5 |
6 | contract ScriptTest is Test
7 | {
8 | function testGenerateCorrectAddress() external {
9 | address creation = computeCreateAddress(0x6C9FC64A53c1b71FB3f9Af64d1ae3A4931A5f4E9, 14);
10 | assertEq(creation, 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);
11 | }
12 | }
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.changeset/new-ways-own.md:
--------------------------------------------------------------------------------
1 | ---
2 | 'openzeppelin-solidity': patch
3 | ---
4 |
5 | `ERC20Pausable`, `ERC721Pausable`, `ERC1155Pausable`: Add note regarding missing public pausing functionality
6 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.codecov.yml:
--------------------------------------------------------------------------------
1 | comment: off
2 | github_checks:
3 | annotations: false
4 | coverage:
5 | status:
6 | patch:
7 | default:
8 | target: 95%
9 | only_pulls: true
10 | project:
11 | default:
12 | threshold: 1%
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: https://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | [*]
7 | charset = utf-8
8 | end_of_line = lf
9 | indent_style = space
10 | insert_final_newline = true
11 | trim_trailing_whitespace = false
12 | max_line_length = 120
13 |
14 | [*.sol]
15 | indent_size = 4
16 |
17 | [*.js]
18 | indent_size = 2
19 |
20 | [*.{adoc,md}]
21 | max_line_length = 0
22 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.gitattributes:
--------------------------------------------------------------------------------
1 | *.sol linguist-language=Solidity
2 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | contact_links:
2 | - name: Questions & Support Requests
3 | url: https://forum.openzeppelin.com/c/support/contracts/18
4 | about: Ask in the OpenZeppelin Forum
5 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for OpenZeppelin Contracts
4 |
5 | ---
6 |
7 | **🧐 Motivation**
8 |
9 |
10 | **📝 Details**
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.github/actions/setup/action.yml:
--------------------------------------------------------------------------------
1 | name: Setup
2 |
3 | runs:
4 | using: composite
5 | steps:
6 | - uses: actions/setup-node@v3
7 | with:
8 | node-version: 14.x
9 | cache: npm
10 | - uses: actions/cache@v3
11 | id: cache
12 | with:
13 | path: '**/node_modules'
14 | key: npm-v3-${{ hashFiles('**/package-lock.json') }}
15 | - name: Install dependencies
16 | run: npm ci --prefer-offline
17 | shell: bash
18 | if: steps.cache.outputs.cache-hit != 'true'
19 | env:
20 | SKIP_COMPILE: true
21 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.github/workflows/docs.yml:
--------------------------------------------------------------------------------
1 | name: Build Docs
2 |
3 | on:
4 | push:
5 | branches: [release-v*]
6 |
7 | permissions:
8 | contents: write
9 |
10 | jobs:
11 | build:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@v3
15 | - name: Set up environment
16 | uses: ./.github/actions/setup
17 | - run: bash scripts/git-user-config.sh
18 | - run: node scripts/update-docs-branch.js
19 | - run: git push --all origin
20 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/forge-std"]
2 | path = lib/forge-std
3 | url = https://github.com/foundry-rs/forge-std
4 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.mocharc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | require: 'hardhat/register',
3 | timeout: 4000,
4 | };
5 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "trailingComma": "all",
4 | "overrides": [
5 | {
6 | "files": "*.sol",
7 | "options": {
8 | "singleQuote": false,
9 | "printWidth": 120,
10 | "explicitTypes": "always"
11 | }
12 | }
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.solcover.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | norpc: true,
3 | testCommand: 'npm test',
4 | compileCommand: 'npm run compile',
5 | skipFiles: [
6 | 'mocks',
7 | ],
8 | providerOptions: {
9 | default_balance_ether: '10000000000000000000000000',
10 | },
11 | mocha: {
12 | fgrep: '[skip-on-coverage]',
13 | invert: true,
14 | },
15 | }
16 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/.solhint.json:
--------------------------------------------------------------------------------
1 | {
2 | "rules": {
3 | "no-unused-vars": "error",
4 | "const-name-snakecase": "error",
5 | "contract-name-camelcase": "error",
6 | "event-name-camelcase": "error",
7 | "func-name-mixedcase": "error",
8 | "func-param-name-mixedcase": "error",
9 | "modifier-name-mixedcase": "error",
10 | "private-vars-leading-underscore": "error",
11 | "var-name-mixedcase": "error",
12 | "imports-on-top": "error"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/audit/2018-10.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/ajna-core/lib/openzeppelin-contracts/audit/2018-10.pdf
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/certora/munged/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/certora/scripts/Governor.sh:
--------------------------------------------------------------------------------
1 | make -C certora munged
2 |
3 | certoraRun certora/harnesses/ERC20VotesHarness.sol certora/harnesses/GovernorHarness.sol \
4 | --verify GovernorHarness:certora/specs/GovernorBase.spec \
5 | --solc solc8.0 \
6 | --staging shelly/forSasha \
7 | --optimistic_loop \
8 | --settings -copyLoopUnroll=4 \
9 | --rule voteStartBeforeVoteEnd \
10 | --msg "$1"
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/certora/scripts/GovernorCountingSimple-counting.sh:
--------------------------------------------------------------------------------
1 | make -C certora munged
2 |
3 | certoraRun certora/harnesses/ERC20VotesHarness.sol certora/harnesses/GovernorBasicHarness.sol \
4 | --verify GovernorBasicHarness:certora/specs/GovernorCountingSimple.spec \
5 | --solc solc8.2 \
6 | --staging shelly/forSasha \
7 | --optimistic_loop \
8 | --settings -copyLoopUnroll=4 \
9 | --rule hasVotedCorrelation \
10 | --msg "$1"
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/certora/scripts/WizardControlFirstPriority.sh:
--------------------------------------------------------------------------------
1 | make -C certora munged
2 |
3 | certoraRun certora/harnesses/ERC20VotesHarness.sol certora/harnesses/WizardControlFirstPriority.sol \
4 | --link WizardControlFirstPriority:token=ERC20VotesHarness \
5 | --verify WizardControlFirstPriority:certora/specs/GovernorBase.spec \
6 | --solc solc8.2 \
7 | --disableLocalTypeChecking \
8 | --staging shelly/forSasha \
9 | --optimistic_loop \
10 | --settings -copyLoopUnroll=4 \
11 | --rule canVoteDuringVotingPeriod \
12 | --msg "$1"
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/certora/scripts/WizardFirstTry.sh:
--------------------------------------------------------------------------------
1 | make -C certora munged
2 |
3 | certoraRun certora/harnesses/ERC20VotesHarness.sol certora/harnesses/WizardFirstTry.sol \
4 | --verify WizardFirstTry:certora/specs/GovernorBase.spec \
5 | --solc solc8.2 \
6 | --staging shelly/forSasha \
7 | --optimistic_loop \
8 | --disableLocalTypeChecking \
9 | --settings -copyLoopUnroll=4 \
10 | --msg "$1"
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/certora/scripts/sanity.sh:
--------------------------------------------------------------------------------
1 | make -C certora munged
2 |
3 | for f in certora/harnesses/Wizard*.sol
4 | do
5 | echo "Processing $f"
6 | file=$(basename $f)
7 | echo ${file%.*}
8 | certoraRun certora/harnesses/$file \
9 | --verify ${file%.*}:certora/specs/sanity.spec "$@" \
10 | --solc solc8.2 --staging shelly/forSasha \
11 | --optimistic_loop \
12 | --msg "checking sanity on ${file%.*}"
13 | --settings -copyLoopUnroll=4
14 | done
15 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/certora/specs/sanity.spec:
--------------------------------------------------------------------------------
1 | /*
2 | This rule looks for a non-reverting execution path to each method, including those overridden in the harness.
3 | A method has such an execution path if it violates this rule.
4 | How it works:
5 | - If there is a non-reverting execution path, we reach the false assertion, and the sanity fails.
6 | - If all execution paths are reverting, we never call the assertion, and the method will pass this rule vacuously.
7 | */
8 |
9 | rule sanity(method f) {
10 | env e;
11 | calldataarg arg;
12 | f(e, arg);
13 | assert false;
14 | }
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/crosschain/errors.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts (last updated v4.6.0) (crosschain/errors.sol)
3 |
4 | pragma solidity ^0.8.4;
5 |
6 | error NotCrossChainCall();
7 | error InvalidCrossChainSender(address actual, address expected);
8 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC1155/IERC1155.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155MetadataURI.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC1155/extensions/IERC1155MetadataURI.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155Receiver.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC1155/IERC1155Receiver.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../utils/introspection/IERC165.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1820Implementer.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../utils/introspection/IERC1820Implementer.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1820Registry.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../utils/introspection/IERC1820Registry.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC20/IERC20.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20Metadata.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC20/extensions/IERC20Metadata.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC2309.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts (last updated v4.8.0) (interfaces/IERC2309.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | /**
7 | * @dev ERC-2309: ERC-721 Consecutive Transfer Extension.
8 | *
9 | * _Available since v4.8._
10 | */
11 | interface IERC2309 {
12 | /**
13 | * @dev Emitted when the tokens from `fromTokenId` to `toTokenId` are transferred from `fromAddress` to `toAddress`.
14 | */
15 | event ConsecutiveTransfer(
16 | uint256 indexed fromTokenId,
17 | uint256 toTokenId,
18 | address indexed fromAddress,
19 | address indexed toAddress
20 | );
21 | }
22 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC3156.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "./IERC3156FlashBorrower.sol";
7 | import "./IERC3156FlashLender.sol";
8 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC721/IERC721.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Enumerable.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC721/extensions/IERC721Enumerable.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Metadata.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC721/extensions/IERC721Metadata.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Receiver.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC721/IERC721Receiver.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC777/IERC777.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777Recipient.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC777/IERC777Recipient.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777Sender.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC777/IERC777Sender.sol";
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC2612.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/draft-IERC2612.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC20/extensions/draft-IERC20Permit.sol";
7 |
8 | interface IERC2612 is IERC20Permit {}
9 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/metatx/README.adoc:
--------------------------------------------------------------------------------
1 | = Meta Transactions
2 |
3 | [.readme-notice]
4 | NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/metatx
5 |
6 | == Core
7 |
8 | {{ERC2771Context}}
9 |
10 | == Utils
11 |
12 | {{MinimalForwarder}}
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/AccessControlEnumerableMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../access/AccessControlEnumerable.sol";
6 |
7 | contract AccessControlEnumerableMock is AccessControlEnumerable {
8 | constructor() {
9 | _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
10 | }
11 |
12 | function setRoleAdmin(bytes32 roleId, bytes32 adminRoleId) public {
13 | _setRoleAdmin(roleId, adminRoleId);
14 | }
15 |
16 | function senderProtected(bytes32 roleId) public onlyRole(roleId) {}
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/AccessControlMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../access/AccessControl.sol";
6 |
7 | contract AccessControlMock is AccessControl {
8 | constructor() {
9 | _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
10 | }
11 |
12 | function setRoleAdmin(bytes32 roleId, bytes32 adminRoleId) public {
13 | _setRoleAdmin(roleId, adminRoleId);
14 | }
15 |
16 | function senderProtected(bytes32 roleId) public onlyRole(roleId) {}
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/BadBeacon.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | contract BadBeaconNoImpl {}
6 |
7 | contract BadBeaconNotContract {
8 | function implementation() external pure returns (address) {
9 | return address(0x1);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/Base64Mock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/Base64.sol";
6 |
7 | contract Base64Mock {
8 | function encode(bytes memory value) external pure returns (string memory) {
9 | return Base64.encode(value);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/BitmapMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/structs/BitMaps.sol";
6 |
7 | contract BitMapMock {
8 | using BitMaps for BitMaps.BitMap;
9 |
10 | BitMaps.BitMap private _bitmap;
11 |
12 | function get(uint256 index) public view returns (bool) {
13 | return _bitmap.get(index);
14 | }
15 |
16 | function setTo(uint256 index, bool value) public {
17 | _bitmap.setTo(index, value);
18 | }
19 |
20 | function set(uint256 index) public {
21 | _bitmap.set(index);
22 | }
23 |
24 | function unset(uint256 index) public {
25 | _bitmap.unset(index);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ClashingImplementation.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | /**
6 | * @dev Implementation contract with an admin() function made to clash with
7 | * @dev TransparentUpgradeableProxy's to test correct functioning of the
8 | * @dev Transparent Proxy feature.
9 | */
10 | contract ClashingImplementation {
11 | function admin() external pure returns (address) {
12 | return 0x0000000000000000000000000000000011111142;
13 | }
14 |
15 | function delegatedFunction() external pure returns (bool) {
16 | return true;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ConditionalEscrowMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/escrow/ConditionalEscrow.sol";
6 |
7 | // mock class using ConditionalEscrow
8 | contract ConditionalEscrowMock is ConditionalEscrow {
9 | mapping(address => bool) private _allowed;
10 |
11 | function setAllowed(address payee, bool allowed) public {
12 | _allowed[payee] = allowed;
13 | }
14 |
15 | function withdrawalAllowed(address payee) public view override returns (bool) {
16 | return _allowed[payee];
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/CountersImpl.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/Counters.sol";
6 |
7 | contract CountersImpl {
8 | using Counters for Counters.Counter;
9 |
10 | Counters.Counter private _counter;
11 |
12 | function current() public view returns (uint256) {
13 | return _counter.current();
14 | }
15 |
16 | function increment() public {
17 | _counter.increment();
18 | }
19 |
20 | function decrement() public {
21 | _counter.decrement();
22 | }
23 |
24 | function reset() public {
25 | _counter.reset();
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC1155BurnableMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC1155/extensions/ERC1155Burnable.sol";
6 |
7 | contract ERC1155BurnableMock is ERC1155Burnable {
8 | constructor(string memory uri) ERC1155(uri) {}
9 |
10 | function mint(
11 | address to,
12 | uint256 id,
13 | uint256 value,
14 | bytes memory data
15 | ) public {
16 | _mint(to, id, value, data);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC1155SupplyMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "./ERC1155Mock.sol";
6 | import "../token/ERC1155/extensions/ERC1155Supply.sol";
7 |
8 | contract ERC1155SupplyMock is ERC1155Mock, ERC1155Supply {
9 | constructor(string memory uri) ERC1155Mock(uri) {}
10 |
11 | function _beforeTokenTransfer(
12 | address operator,
13 | address from,
14 | address to,
15 | uint256[] memory ids,
16 | uint256[] memory amounts,
17 | bytes memory data
18 | ) internal override(ERC1155, ERC1155Supply) {
19 | super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165MaliciousData.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | contract ERC165MaliciousData {
6 | function supportsInterface(bytes4) public pure returns (bool) {
7 | assembly {
8 | mstore(0, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
9 | return(0, 32)
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165MissingData.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | contract ERC165MissingData {
6 | function supportsInterface(bytes4 interfaceId) public view {} // missing return
7 | }
8 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165NotSupported.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | contract ERC165NotSupported {}
6 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165ReturnBomb.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../../utils/introspection/IERC165.sol";
6 |
7 | contract ERC165ReturnBombMock is IERC165 {
8 | function supportsInterface(bytes4 interfaceId) public pure override returns (bool) {
9 | if (interfaceId == type(IERC165).interfaceId) {
10 | assembly {
11 | mstore(0, 1)
12 | }
13 | }
14 | assembly {
15 | return(0, 101500)
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC165Mock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/introspection/ERC165.sol";
6 |
7 | contract ERC165Mock is ERC165 {}
8 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC165StorageMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/introspection/ERC165Storage.sol";
6 |
7 | contract ERC165StorageMock is ERC165Storage {
8 | function registerInterface(bytes4 interfaceId) public {
9 | _registerInterface(interfaceId);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC1820ImplementerMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/introspection/ERC1820Implementer.sol";
6 |
7 | contract ERC1820ImplementerMock is ERC1820Implementer {
8 | function registerInterfaceForAddress(bytes32 interfaceHash, address account) public {
9 | _registerInterfaceForAddress(interfaceHash, account);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC20BurnableMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/ERC20Burnable.sol";
6 |
7 | contract ERC20BurnableMock is ERC20Burnable {
8 | constructor(
9 | string memory name,
10 | string memory symbol,
11 | address initialAccount,
12 | uint256 initialBalance
13 | ) ERC20(name, symbol) {
14 | _mint(initialAccount, initialBalance);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC20CappedMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/ERC20Capped.sol";
6 |
7 | contract ERC20CappedMock is ERC20Capped {
8 | constructor(
9 | string memory name,
10 | string memory symbol,
11 | uint256 cap
12 | ) ERC20(name, symbol) ERC20Capped(cap) {}
13 |
14 | function mint(address to, uint256 tokenId) public {
15 | _mint(to, tokenId);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC20PermitMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/draft-ERC20Permit.sol";
6 |
7 | contract ERC20PermitMock is ERC20Permit {
8 | constructor(
9 | string memory name,
10 | string memory symbol,
11 | address initialAccount,
12 | uint256 initialBalance
13 | ) payable ERC20(name, symbol) ERC20Permit(name) {
14 | _mint(initialAccount, initialBalance);
15 | }
16 |
17 | function getChainId() external view returns (uint256) {
18 | return block.chainid;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC20VotesCompMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/ERC20VotesComp.sol";
6 |
7 | contract ERC20VotesCompMock is ERC20VotesComp {
8 | constructor(string memory name, string memory symbol) ERC20(name, symbol) ERC20Permit(name) {}
9 |
10 | function mint(address account, uint256 amount) public {
11 | _mint(account, amount);
12 | }
13 |
14 | function burn(address account, uint256 amount) public {
15 | _burn(account, amount);
16 | }
17 |
18 | function getChainId() external view returns (uint256) {
19 | return block.chainid;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC20VotesMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/ERC20Votes.sol";
6 |
7 | contract ERC20VotesMock is ERC20Votes {
8 | constructor(string memory name, string memory symbol) ERC20(name, symbol) ERC20Permit(name) {}
9 |
10 | function mint(address account, uint256 amount) public {
11 | _mint(account, amount);
12 | }
13 |
14 | function burn(address account, uint256 amount) public {
15 | _burn(account, amount);
16 | }
17 |
18 | function getChainId() external view returns (uint256) {
19 | return block.chainid;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ERC20WrapperMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/ERC20Wrapper.sol";
6 |
7 | contract ERC20WrapperMock is ERC20Wrapper {
8 | constructor(
9 | IERC20 _underlyingToken,
10 | string memory name,
11 | string memory symbol
12 | ) ERC20(name, symbol) ERC20Wrapper(_underlyingToken) {}
13 |
14 | function recover(address account) public returns (uint256) {
15 | return _recover(account);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/EtherReceiverMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | contract EtherReceiverMock {
6 | bool private _acceptEther;
7 |
8 | function setAcceptEther(bool acceptEther) public {
9 | _acceptEther = acceptEther;
10 | }
11 |
12 | receive() external payable {
13 | if (!_acceptEther) {
14 | revert();
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/MulticallTokenMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/Multicall.sol";
6 | import "./ERC20Mock.sol";
7 |
8 | contract MulticallTokenMock is ERC20Mock, Multicall {
9 | constructor(uint256 initialBalance) ERC20Mock("MulticallToken", "BCT", msg.sender, initialBalance) {}
10 | }
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/Ownable2StepMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../access/Ownable2Step.sol";
6 |
7 | contract Ownable2StepMock is Ownable2Step {}
8 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/OwnableMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../access/Ownable.sol";
6 |
7 | contract OwnableMock is Ownable {}
8 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/PullPaymentMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../security/PullPayment.sol";
6 |
7 | // mock class using PullPayment
8 | contract PullPaymentMock is PullPayment {
9 | constructor() payable {}
10 |
11 | // test helper function to call asyncTransfer
12 | function callTransfer(address dest, uint256 amount) public {
13 | _asyncTransfer(dest, amount);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/ReentrancyAttack.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/Context.sol";
6 |
7 | contract ReentrancyAttack is Context {
8 | function callSender(bytes4 data) public {
9 | (bool success, ) = _msgSender().call(abi.encodeWithSelector(data));
10 | require(success, "ReentrancyAttack: failed call");
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/SignatureCheckerMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/cryptography/SignatureChecker.sol";
6 |
7 | contract SignatureCheckerMock {
8 | using SignatureChecker for address;
9 |
10 | function isValidSignatureNow(
11 | address signer,
12 | bytes32 hash,
13 | bytes memory signature
14 | ) public view returns (bool) {
15 | return signer.isValidSignatureNow(hash, signature);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/mocks/SignedMathMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/math/SignedMath.sol";
6 |
7 | contract SignedMathMock {
8 | function max(int256 a, int256 b) public pure returns (int256) {
9 | return SignedMath.max(a, b);
10 | }
11 |
12 | function min(int256 a, int256 b) public pure returns (int256) {
13 | return SignedMath.min(a, b);
14 | }
15 |
16 | function average(int256 a, int256 b) public pure returns (int256) {
17 | return SignedMath.average(a, b);
18 | }
19 |
20 | function abs(int256 n) public pure returns (uint256) {
21 | return SignedMath.abs(n);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | /**
7 | * @dev This is the interface that {BeaconProxy} expects of its beacon.
8 | */
9 | interface IBeacon {
10 | /**
11 | * @dev Must return an address that can be used as a delegate call target.
12 | *
13 | * {BeaconProxy} will check that this address is a contract.
14 | */
15 | function implementation() external view returns (address);
16 | }
17 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/token/ERC1155/presets/README.md:
--------------------------------------------------------------------------------
1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative.
2 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/token/ERC20/presets/README.md:
--------------------------------------------------------------------------------
1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative.
2 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/draft-ERC721Votes.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/extensions/draft-ERC721Votes.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | // ERC721Votes was marked as draft due to the EIP-712 dependency.
7 | // EIP-712 is Final as of 2022-08-11. This file is deprecated.
8 |
9 | import "./ERC721Votes.sol";
10 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/token/ERC721/presets/README.md:
--------------------------------------------------------------------------------
1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative.
2 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/token/common/README.adoc:
--------------------------------------------------------------------------------
1 | = Common (Tokens)
2 |
3 | Functionality that is common to multiple token standards.
4 |
5 | * {ERC2981}: NFT Royalties compatible with both ERC721 and ERC1155.
6 | ** For ERC721 consider {ERC721Royalty} which clears the royalty information from storage on burn.
7 |
8 | == Contracts
9 |
10 | {{ERC2981}}
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/utils/cryptography/draft-EIP712.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/draft-EIP712.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | // EIP-712 is Final as of 2022-08-11. This file is deprecated.
7 |
8 | import "./EIP712.sol";
9 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/contracts/vendor/polygon/IFxMessageProcessor.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts (last updated v4.6.0) (vendor/polygon/IFxMessageProcessor.sol)
3 | pragma solidity ^0.8.0;
4 |
5 | interface IFxMessageProcessor {
6 | function processMessageFromRoot(
7 | uint256 stateId,
8 | address rootMessageSender,
9 | bytes calldata data
10 | ) external;
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/docs/antora.yml:
--------------------------------------------------------------------------------
1 | name: contracts
2 | title: Contracts
3 | version: 4.x
4 | nav:
5 | - modules/ROOT/nav.adoc
6 | - modules/api/nav.adoc
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-exec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/ajna-core/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-exec.png
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-vote.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/ajna-core/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-vote.png
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/docs/modules/ROOT/nav.adoc:
--------------------------------------------------------------------------------
1 | * xref:index.adoc[Overview]
2 | * xref:wizard.adoc[Wizard]
3 | * xref:extending-contracts.adoc[Extending Contracts]
4 | * xref:upgradeable.adoc[Using with Upgrades]
5 |
6 | * xref:releases-stability.adoc[Releases & Stability]
7 |
8 | * xref:access-control.adoc[Access Control]
9 |
10 | * xref:tokens.adoc[Tokens]
11 | ** xref:erc20.adoc[ERC20]
12 | *** xref:erc20-supply.adoc[Creating Supply]
13 | ** xref:erc721.adoc[ERC721]
14 | ** xref:erc777.adoc[ERC777]
15 | ** xref:erc1155.adoc[ERC1155]
16 |
17 | * xref:governance.adoc[Governance]
18 |
19 | * xref:crosschain.adoc[Crosschain]
20 |
21 | * xref:utilities.adoc[Utilities]
22 |
23 | * xref:subgraphs::index.adoc[Subgraphs]
24 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/docs/modules/ROOT/pages/crowdsales.adoc:
--------------------------------------------------------------------------------
1 | = Crowdsales
2 |
3 | All crowdsale-related contracts were removed from the OpenZeppelin Contracts library on the https://forum.openzeppelin.com/t/openzeppelin-contracts-v3-0-beta-release/2256[v3.0.0 release] due to both a decline in their usage and the complexity associated with migrating them to Solidity v0.6.
4 |
5 | They are however still available on the v2.5 release of OpenZeppelin Contracts, which you can install by running:
6 |
7 | ```console
8 | $ npm install @openzeppelin/contracts@v2.5
9 | ```
10 |
11 | Refer to the https://docs.openzeppelin.com/contracts/2.x/crowdsales[v2.x documentation] when working with them.
12 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/docs/modules/ROOT/pages/wizard.adoc:
--------------------------------------------------------------------------------
1 | = Contracts Wizard
2 | :page-notoc:
3 |
4 | Not sure where to start? Use the interactive generator below to bootstrap your
5 | contract and learn about the components offered in OpenZeppelin Contracts.
6 |
7 | TIP: Place the resulting contract in your `contracts` directory in order to compile it with a tool like Hardhat or Truffle. Consider reading our guide on xref:learn::developing-smart-contracts.adoc[Developing Smart Contracts] for more guidance!
8 |
9 | ++++
10 |
11 |
12 |
13 | ++++
14 |
15 |
16 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/docs/templates/page.hbs:
--------------------------------------------------------------------------------
1 | :github-icon: pass:[]
2 | {{#with-prelude}}
3 | {{readme (readme-path)}}
4 | {{/with-prelude}}
5 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/hardhat/env-contract.js:
--------------------------------------------------------------------------------
1 | extendEnvironment(env => {
2 | const { contract } = env;
3 |
4 | env.contract = function (name, body) {
5 | // remove the default account from the accounts list used in tests, in order
6 | // to protect tests against accidentally passing due to the contract
7 | // deployer being used subsequently as function caller
8 | contract(name, accounts => body(accounts.slice(1)));
9 | };
10 | });
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/hardhat/skip-foundry-tests.js:
--------------------------------------------------------------------------------
1 | const { subtask } = require('hardhat/config');
2 | const { TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS } = require('hardhat/builtin-tasks/task-names');
3 |
4 | subtask(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS)
5 | .setAction(async (_, __, runSuper) =>
6 | (await runSuper()).filter((path) => !path.endsWith('.t.sol')),
7 | );
8 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/.gitignore:
--------------------------------------------------------------------------------
1 | cache/
2 | out/
3 | .vscode
4 | .idea
5 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/ds-test"]
2 | path = lib/ds-test
3 | url = https://github.com/dapphub/ds-test
4 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/.gitignore:
--------------------------------------------------------------------------------
1 | /.dapple
2 | /build
3 | /out
4 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/Makefile:
--------------------------------------------------------------------------------
1 | all:; dapp build
2 |
3 | test:
4 | -dapp --use solc:0.4.23 build
5 | -dapp --use solc:0.4.26 build
6 | -dapp --use solc:0.5.17 build
7 | -dapp --use solc:0.6.12 build
8 | -dapp --use solc:0.7.5 build
9 |
10 | demo:
11 | DAPP_SRC=demo dapp --use solc:0.7.5 build
12 | -hevm dapp-test --verbose 3
13 |
14 | .PHONY: test demo
15 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/default.nix:
--------------------------------------------------------------------------------
1 | { solidityPackage, dappsys }: solidityPackage {
2 | name = "ds-test";
3 | src = ./src;
4 | }
5 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ds-test",
3 | "version": "1.0.0",
4 | "description": "Assertions, equality checks and other test helpers ",
5 | "bugs": "https://github.com/dapphub/ds-test/issues",
6 | "license": "GPL-3.0",
7 | "author": "Contributors to ds-test",
8 | "files": [
9 | "src/*"
10 | ],
11 | "repository": {
12 | "type": "git",
13 | "url": "https://github.com/dapphub/ds-test.git"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "forge-std",
3 | "version": "1.2.0",
4 | "description": "Forge Standard Library is a collection of helpful contracts and libraries for use with Forge and Foundry.",
5 | "homepage": "https://book.getfoundry.sh/forge/forge-std",
6 | "bugs": "https://github.com/foundry-rs/forge-std/issues",
7 | "license": "(Apache-2.0 OR MIT)",
8 | "author": "Contributors to Forge Standard Library",
9 | "files": [
10 | "src/*"
11 | ],
12 | "repository": {
13 | "type": "git",
14 | "url": "https://github.com/foundry-rs/forge-std.git"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/src/interfaces/IERC165.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.6.2;
3 |
4 | interface IERC165 {
5 | /// @notice Query if a contract implements an interface
6 | /// @param interfaceID The interface identifier, as specified in ERC-165
7 | /// @dev Interface identification is specified in ERC-165. This function
8 | /// uses less than 30,000 gas.
9 | /// @return `true` if the contract implements `interfaceID` and
10 | /// `interfaceID` is not 0xffffffff, `false` otherwise
11 | function supportsInterface(bytes4 interfaceID) external view returns (bool);
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScript.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.6.2 <0.9.0;
3 |
4 | pragma experimental ABIEncoderV2;
5 |
6 | import "../../src/Script.sol";
7 |
8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
10 | contract CompilationScript is Script {}
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationScriptBase.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.6.2 <0.9.0;
3 |
4 | pragma experimental ABIEncoderV2;
5 |
6 | import "../../src/Script.sol";
7 |
8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
10 | contract CompilationScriptBase is ScriptBase {}
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTest.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.6.2 <0.9.0;
3 |
4 | pragma experimental ABIEncoderV2;
5 |
6 | import "../../src/Test.sol";
7 |
8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
10 | contract CompilationTest is Test {}
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/lib/forge-std/test/compilation/CompilationTestBase.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.6.2 <0.9.0;
3 |
4 | pragma experimental ABIEncoderV2;
5 |
6 | import "../../src/Test.sol";
7 |
8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
10 | contract CompilationTestBase is TestBase {}
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | command = "npm run docs"
3 | publish = "build/site"
4 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "github>OpenZeppelin/code-style"
4 | ],
5 | "packageRules": [
6 | {
7 | "extends": ["packages:eslint"],
8 | "enabled": false
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/scripts/checks/generation.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -euo pipefail
4 |
5 | npm run generate
6 | git diff -R --exit-code
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/scripts/generate/format-lines.js:
--------------------------------------------------------------------------------
1 | function formatLines (...lines) {
2 | return [...indentEach(0, lines)].join('\n') + '\n';
3 | }
4 |
5 | function *indentEach (indent, lines) {
6 | for (const line of lines) {
7 | if (Array.isArray(line)) {
8 | yield * indentEach(indent + 1, line);
9 | } else {
10 | const padding = ' '.repeat(indent);
11 | yield * line.split('\n').map(subline => subline === '' ? '' : padding + subline);
12 | }
13 | }
14 | }
15 |
16 | module.exports = formatLines;
17 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/scripts/git-user-config.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -euo pipefail -x
4 |
5 | git config user.name 'github-actions'
6 | git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/scripts/prepack.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -euo pipefail
4 | shopt -s globstar
5 |
6 | # cross platform `mkdir -p`
7 | node -e 'fs.mkdirSync("build/contracts", { recursive: true })'
8 |
9 | cp artifacts/contracts/**/*.json build/contracts
10 | rm build/contracts/*.dbg.json
11 |
12 | node scripts/remove-ignored-artifacts.js
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/scripts/prepare-contracts-package.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | # cd to the root of the repo
4 | cd "$(git rev-parse --show-toplevel)"
5 |
6 | # avoids re-compilation during publishing of both packages
7 | if [[ ! -v ALREADY_COMPILED ]]; then
8 | npm run clean
9 | npm run prepare
10 | npm run prepack
11 | fi
12 |
13 | cp README.md contracts/
14 | mkdir contracts/build contracts/build/contracts
15 | cp -r build/contracts/*.json contracts/build/contracts
16 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/scripts/prepare-docs.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -o errexit
4 |
5 | OUTDIR="$(node -p 'require("./docs/config.js").outputDir')"
6 |
7 | if [ ! -d node_modules ]; then
8 | npm ci
9 | fi
10 |
11 | rm -rf "$OUTDIR"
12 |
13 | hardhat docgen
14 |
15 | node scripts/gen-nav.js "$OUTDIR" > "$OUTDIR/../nav.adoc"
16 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/scripts/prepare.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -euo pipefail
4 |
5 | if [ "${SKIP_COMPILE:-}" == true ]; then
6 | exit
7 | fi
8 |
9 | npm run clean
10 | env COMPILE_MODE=production npm run compile
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/scripts/release/synchronize-versions.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | // Synchronizes the version in contracts/package.json with the one in package.json.
4 | // This is run automatically when npm version is run.
5 |
6 | const fs = require('fs');
7 | const cp = require('child_process');
8 |
9 | setVersion('contracts/package.json');
10 |
11 | function setVersion (file) {
12 | const json = JSON.parse(fs.readFileSync(file));
13 | json.version = process.env.npm_package_version;
14 | fs.writeFileSync(file, JSON.stringify(json, null, 2) + '\n');
15 | cp.execFileSync('git', ['add', file]);
16 | }
17 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/scripts/release/version.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -o errexit
4 |
5 | scripts/release/update-changelog-release-date.js
6 | scripts/release/synchronize-versions.js
7 | scripts/release/update-comment.js
8 |
9 | oz-docs update-version
10 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/slither.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "detectors_to_run": "reentrancy-eth,reentrancy-no-eth,reentrancy-unlimited-gas",
3 | "filter_paths": "contracts/mocks",
4 | "compile_force_framework": "hardhat"
5 | }
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/test/TESTING.md:
--------------------------------------------------------------------------------
1 | ## Testing
2 |
3 | Unit test are critical to OpenZeppelin Contracts. They help ensure code quality and mitigate against security vulnerabilities. The directory structure within the `/test` directory corresponds to the `/contracts` directory.
4 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/test/access/AccessControl.test.js:
--------------------------------------------------------------------------------
1 | const {
2 | shouldBehaveLikeAccessControl,
3 | } = require('./AccessControl.behavior.js');
4 |
5 | const AccessControlMock = artifacts.require('AccessControlMock');
6 |
7 | contract('AccessControl', function (accounts) {
8 | beforeEach(async function () {
9 | this.accessControl = await AccessControlMock.new({ from: accounts[0] });
10 | });
11 |
12 | shouldBehaveLikeAccessControl('AccessControl', ...accounts);
13 | });
14 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/test/access/AccessControlEnumerable.test.js:
--------------------------------------------------------------------------------
1 | const {
2 | shouldBehaveLikeAccessControl,
3 | shouldBehaveLikeAccessControlEnumerable,
4 | } = require('./AccessControl.behavior.js');
5 |
6 | const AccessControlMock = artifacts.require('AccessControlEnumerableMock');
7 |
8 | contract('AccessControl', function (accounts) {
9 | beforeEach(async function () {
10 | this.accessControl = await AccessControlMock.new({ from: accounts[0] });
11 | });
12 |
13 | shouldBehaveLikeAccessControl('AccessControl', ...accounts);
14 | shouldBehaveLikeAccessControlEnumerable('AccessControl', ...accounts);
15 | });
16 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/test/helpers/create2.js:
--------------------------------------------------------------------------------
1 | function computeCreate2Address (saltHex, bytecode, deployer) {
2 | return web3.utils.toChecksumAddress(`0x${web3.utils.sha3(`0x${[
3 | 'ff',
4 | deployer,
5 | saltHex,
6 | web3.utils.soliditySha3(bytecode),
7 | ].map(x => x.replace(/0x/, '')).join('')}`).slice(-40)}`);
8 | }
9 |
10 | module.exports = {
11 | computeCreate2Address,
12 | };
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/test/helpers/enums.js:
--------------------------------------------------------------------------------
1 | const { BN } = require('@openzeppelin/test-helpers');
2 |
3 | function Enum (...options) {
4 | return Object.fromEntries(options.map((key, i) => [ key, new BN(i) ]));
5 | }
6 |
7 | module.exports = {
8 | Enum,
9 | ProposalState: Enum(
10 | 'Pending',
11 | 'Active',
12 | 'Canceled',
13 | 'Defeated',
14 | 'Succeeded',
15 | 'Queued',
16 | 'Expired',
17 | 'Executed',
18 | ),
19 | VoteType: Enum(
20 | 'Against',
21 | 'For',
22 | 'Abstain',
23 | ),
24 | Rounding: Enum(
25 | 'Down',
26 | 'Up',
27 | 'Zero',
28 | ),
29 | };
30 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Proxy.test.js:
--------------------------------------------------------------------------------
1 | const shouldBehaveLikeProxy = require('../Proxy.behaviour');
2 |
3 | const ERC1967Proxy = artifacts.require('ERC1967Proxy');
4 |
5 | contract('ERC1967Proxy', function (accounts) {
6 | const [proxyAdminOwner] = accounts;
7 |
8 | const createProxy = async function (implementation, _admin, initData, opts) {
9 | return ERC1967Proxy.new(implementation, initData, opts);
10 | };
11 |
12 | shouldBehaveLikeProxy(createProxy, undefined, proxyAdminOwner);
13 | });
14 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/test/token/ERC721/ERC721.test.js:
--------------------------------------------------------------------------------
1 | const {
2 | shouldBehaveLikeERC721,
3 | shouldBehaveLikeERC721Metadata,
4 | } = require('./ERC721.behavior');
5 |
6 | const ERC721Mock = artifacts.require('ERC721Mock');
7 |
8 | contract('ERC721', function (accounts) {
9 | const name = 'Non Fungible Token';
10 | const symbol = 'NFT';
11 |
12 | beforeEach(async function () {
13 | this.token = await ERC721Mock.new(name, symbol);
14 | });
15 |
16 | shouldBehaveLikeERC721('ERC721', ...accounts);
17 | shouldBehaveLikeERC721Metadata('ERC721', name, symbol, ...accounts);
18 | });
19 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/test/token/ERC721/ERC721Enumerable.test.js:
--------------------------------------------------------------------------------
1 | const {
2 | shouldBehaveLikeERC721,
3 | shouldBehaveLikeERC721Metadata,
4 | shouldBehaveLikeERC721Enumerable,
5 | } = require('./ERC721.behavior');
6 |
7 | const ERC721Mock = artifacts.require('ERC721EnumerableMock');
8 |
9 | contract('ERC721Enumerable', function (accounts) {
10 | const name = 'Non Fungible Token';
11 | const symbol = 'NFT';
12 |
13 | beforeEach(async function () {
14 | this.token = await ERC721Mock.new(name, symbol);
15 | });
16 |
17 | shouldBehaveLikeERC721('ERC721', ...accounts);
18 | shouldBehaveLikeERC721Metadata('ERC721', name, symbol, ...accounts);
19 | shouldBehaveLikeERC721Enumerable('ERC721', ...accounts);
20 | });
21 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/test/utils/Context.test.js:
--------------------------------------------------------------------------------
1 | require('@openzeppelin/test-helpers');
2 |
3 | const ContextMock = artifacts.require('ContextMock');
4 | const ContextMockCaller = artifacts.require('ContextMockCaller');
5 |
6 | const { shouldBehaveLikeRegularContext } = require('./Context.behavior');
7 |
8 | contract('Context', function (accounts) {
9 | const [ sender ] = accounts;
10 |
11 | beforeEach(async function () {
12 | this.context = await ContextMock.new();
13 | this.caller = await ContextMockCaller.new();
14 | });
15 |
16 | shouldBehaveLikeRegularContext(sender);
17 | });
18 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/test/utils/escrow/Escrow.test.js:
--------------------------------------------------------------------------------
1 | require('@openzeppelin/test-helpers');
2 | const { shouldBehaveLikeEscrow } = require('./Escrow.behavior');
3 |
4 | const Escrow = artifacts.require('Escrow');
5 |
6 | contract('Escrow', function (accounts) {
7 | const [ owner, ...otherAccounts ] = accounts;
8 |
9 | beforeEach(async function () {
10 | this.escrow = await Escrow.new({ from: owner });
11 | });
12 |
13 | shouldBehaveLikeEscrow(owner, otherAccounts);
14 | });
15 |
--------------------------------------------------------------------------------
/ajna-core/lib/openzeppelin-contracts/test/utils/introspection/ERC165.test.js:
--------------------------------------------------------------------------------
1 | const { shouldSupportInterfaces } = require('./SupportsInterface.behavior');
2 |
3 | const ERC165Mock = artifacts.require('ERC165Mock');
4 |
5 | contract('ERC165', function (accounts) {
6 | beforeEach(async function () {
7 | this.mock = await ERC165Mock.new();
8 | });
9 |
10 | shouldSupportInterfaces([
11 | 'ERC165',
12 | ]);
13 | });
14 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.commitlintrc.yaml:
--------------------------------------------------------------------------------
1 | extends:
2 | - "@commitlint/config-conventional"
3 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.czrc:
--------------------------------------------------------------------------------
1 | {
2 | "path": "cz-conventional-changelog"
3 | }
4 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig http://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | # All files
7 | [*]
8 | charset = utf-8
9 | end_of_line = lf
10 | indent_size = 2
11 | indent_style = space
12 | insert_final_newline = true
13 | trim_trailing_whitespace = true
14 |
15 | [*.sol]
16 | indent_size = 4
17 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.env.example:
--------------------------------------------------------------------------------
1 | INFURA_API_KEY="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
2 | MNEMONIC="here is where your twelve words mnemonic should be put my friend"
3 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.eslintignore:
--------------------------------------------------------------------------------
1 | # directories
2 | .yarn/
3 | **/.nyc_output
4 | **/artifacts
5 | **/build
6 | **/cache
7 | **/coverage
8 | **/coverage-contracts
9 | **/coverage-ts
10 | **/dist
11 | **/node_modules
12 | **/src/types
13 |
14 | # files
15 | *.env
16 | *.log
17 | *.tsbuildinfo
18 | coverage.json
19 | npm-debug.log*
20 | yarn-debug.log*
21 | yarn-error.log*
22 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.github/FUNDING.yaml:
--------------------------------------------------------------------------------
1 | custom: ["https://gitcoin.co/grants/1657/paulrberg-open-source-engineering"]
2 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.gitignore:
--------------------------------------------------------------------------------
1 | # directories
2 | .yarn/*
3 | !.yarn/patches
4 | !.yarn/releases
5 | !.yarn/plugins
6 | !.yarn/sdks
7 | !.yarn/versions
8 | **/.nyc_output
9 | **/artifacts
10 | **/build
11 | **/cache
12 | **/coverage
13 | **/coverage-contracts
14 | **/coverage-ts
15 | **/dist
16 | **/node_modules
17 | **/src/types
18 |
19 | # files
20 | *.env
21 | *.log
22 | *.tsbuildinfo
23 | coverage.json
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.husky/.gitignore:
--------------------------------------------------------------------------------
1 | _
2 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.husky/commit-msg:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | yarn dlx commitlint --edit $1
5 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | yarn dlx lint-staged
5 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.lintstagedrc:
--------------------------------------------------------------------------------
1 | {
2 | "*.{js,json,md,sol,ts,yaml,yml}": [
3 | "prettier --config ./.prettierrc.yaml --write"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.mocharc.yaml:
--------------------------------------------------------------------------------
1 | extension: "ts"
2 | recursive: true
3 | require:
4 | - "hardhat/register"
5 | - "ts-node/register/transpile-only"
6 | - "./test/shared/setup.ts"
7 | timeout: 30000
8 | watchExtension: "ts"
9 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.nycrc.yaml:
--------------------------------------------------------------------------------
1 | check-coverage: false
2 | exclude:
3 | - "src/constants.ts"
4 | - "src/errors.ts"
5 | - "src/helpers.ts"
6 | extends: "@istanbuljs/nyc-config-typescript"
7 | include:
8 | - "src/**/*.ts"
9 | report-dir: "coverage-ts"
10 | reporter:
11 | - "html"
12 | - "lcov"
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.prettierignore:
--------------------------------------------------------------------------------
1 | # directories
2 | .yarn/
3 | **/.nyc_output
4 | **/artifacts
5 | **/build
6 | **/cache
7 | **/coverage
8 | **/coverage-contracts
9 | **/coverage-ts
10 | **/dist
11 | **/node_modules
12 | **/src/types
13 |
14 | # files
15 | coverage.json
16 | LICENSE.md
17 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.prettierrc.yaml:
--------------------------------------------------------------------------------
1 | arrowParens: avoid
2 | bracketSpacing: true
3 | endOfLine: auto
4 | printWidth: 120
5 | singleQuote: false
6 | tabWidth: 2
7 | trailingComma: all
8 |
9 | overrides:
10 | - files: "*.sol"
11 | options:
12 | tabWidth: 4
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.solcover.js:
--------------------------------------------------------------------------------
1 | const shell = require("shelljs");
2 |
3 | module.exports = {
4 | istanbulFolder: "coverage-contracts",
5 | istanbulReporter: ["html", "lcov"],
6 | providerOptions: {
7 | mnemonic: process.env.MNEMONIC,
8 | },
9 | skipFiles: ["test"],
10 | };
11 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.solhint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "solhint:recommended",
3 | "plugins": ["prettier"],
4 | "rules": {
5 | "code-complexity": "off",
6 | "compiler-version": ["error", ">=0.8.4"],
7 | "const-name-snakecase": "off",
8 | "constructor-syntax": "error",
9 | "func-visibility": ["error", { "ignoreConstructors": true }],
10 | "max-line-length": ["error", 132],
11 | "no-inline-assembly": "off",
12 | "not-rely-on-time": "off",
13 | "prettier/prettier": [
14 | "error",
15 | {
16 | "endOfLine": "auto"
17 | }
18 | ],
19 | "reason-string": "off",
20 | "var-name-mixedcase": "off"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.solhintignore:
--------------------------------------------------------------------------------
1 | # directories
2 | **/artifacts
3 | **/node_modules
4 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | enableTelemetry: false
2 |
3 | enableTransparentWorkspaces: false
4 |
5 | nodeLinker: node-modules
6 |
7 | plugins:
8 | - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
9 | spec: "@yarnpkg/plugin-interactive-tools"
10 |
11 | yarnPath: .yarn/releases/yarn-3.1.1.cjs
12 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/contracts/.npmignore:
--------------------------------------------------------------------------------
1 | # directories
2 | **/test
3 |
4 | # files
5 | .DS_Store
6 | .npmignore
7 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/rollup.config.ts:
--------------------------------------------------------------------------------
1 | import { nodeResolve } from "@rollup/plugin-node-resolve";
2 | import commonjs from "rollup-plugin-commonjs";
3 | import { terser } from "rollup-plugin-terser";
4 |
5 | import pkg from "./package.json";
6 |
7 | export default [
8 | {
9 | input: pkg.main,
10 | output: {
11 | exports: "named",
12 | file: "./dist/browser/prb-math.min.js",
13 | format: "iife",
14 | name: "PRBMath",
15 | sourcemap: false,
16 | },
17 | plugins: [
18 | nodeResolve({
19 | browser: true,
20 | }),
21 | commonjs({
22 | namedExports: { PRBMath: ["PRBMath"] },
23 | }),
24 | terser(),
25 | ],
26 | },
27 | ];
28 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/src/index.ts:
--------------------------------------------------------------------------------
1 | // constants.ts
2 | export {
3 | DECIMALS,
4 | E,
5 | HALF_SCALE,
6 | MAX_SD59x18,
7 | MAX_UD60x18,
8 | MAX_WHOLE_SD59x18,
9 | MAX_WHOLE_UD60x18,
10 | MIN_SD59x18,
11 | MIN_WHOLE_SD59x18,
12 | PI,
13 | SQRT_MAX_SD59x18,
14 | SQRT_MAX_UD60x18,
15 | SCALE,
16 | } from "./constants";
17 |
18 | // errors.ts
19 | export { PRBMathErrors, PRBMathSD59x18Errors, PRBMathUD60x18Errors } from "./errors";
20 |
21 | // functions.ts
22 | export { avg, ceil, div, exp, exp2, floor, frac, gm, inv, ln, log10, log2, mul, pow, powu, sqrt } from "./functions";
23 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/test/contracts/index.test.ts:
--------------------------------------------------------------------------------
1 | import { baseContext } from "../shared/contexts";
2 | import { unitTestPrbMathSd59x18 } from "./prbMathSd59x18/PRBMathSD59x18.test";
3 | import { unitTestPrbMathUd60x18 } from "./prbMathUd60x18/PRBMathUD60x18.test";
4 |
5 | baseContext("PRBMath Solidity", function () {
6 | unitTestPrbMathSd59x18();
7 | unitTestPrbMathUd60x18();
8 | });
9 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/test/contracts/prbMathSd59x18/pure/e.test.ts:
--------------------------------------------------------------------------------
1 | import type { BigNumber } from "@ethersproject/bignumber";
2 | import { expect } from "chai";
3 |
4 | import { E } from "../../../../src/constants";
5 |
6 | export function shouldBehaveLikeEGetter(): void {
7 | it("returns the e number", async function () {
8 | const expected: BigNumber = E;
9 | expect(expected).to.equal(await this.contracts.prbMathSd59x18.getE());
10 | expect(expected).to.equal(await this.contracts.prbMathSd59x18Typed.getE());
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/test/contracts/prbMathSd59x18/pure/pi.test.ts:
--------------------------------------------------------------------------------
1 | import type { BigNumber } from "@ethersproject/bignumber";
2 | import { expect } from "chai";
3 |
4 | import { PI } from "../../../../src/constants";
5 |
6 | export function shouldBehaveLikePiGetter(): void {
7 | it("returns pi", async function () {
8 | const expected: BigNumber = PI;
9 | expect(expected).to.equal(await this.contracts.prbMathSd59x18.getPi());
10 | expect(expected).to.equal(await this.contracts.prbMathSd59x18Typed.getPi());
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/test/contracts/prbMathSd59x18/pure/scale.test.ts:
--------------------------------------------------------------------------------
1 | import type { BigNumber } from "@ethersproject/bignumber";
2 | import { expect } from "chai";
3 |
4 | import { SCALE } from "../../../../src/constants";
5 |
6 | export function shouldBehaveLikeScaleGetter(): void {
7 | it("returns the scale number", async function () {
8 | const expected: BigNumber = SCALE;
9 | expect(expected).to.equal(await this.contracts.prbMathSd59x18.getScale());
10 | expect(expected).to.equal(await this.contracts.prbMathSd59x18Typed.getScale());
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/test/contracts/prbMathUd60x18/pure/e.test.ts:
--------------------------------------------------------------------------------
1 | import type { BigNumber } from "@ethersproject/bignumber";
2 | import { expect } from "chai";
3 |
4 | import { E } from "../../../../src/constants";
5 |
6 | export function shouldBehaveLikeEGetter(): void {
7 | it("returns the e number", async function () {
8 | const expected: BigNumber = E;
9 | expect(expected).to.equal(await this.contracts.prbMathUd60x18.getE());
10 | expect(expected).to.equal(await this.contracts.prbMathUd60x18Typed.getE());
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/test/contracts/prbMathUd60x18/pure/pi.test.ts:
--------------------------------------------------------------------------------
1 | import type { BigNumber } from "@ethersproject/bignumber";
2 | import { expect } from "chai";
3 |
4 | import { PI } from "../../../../src/constants";
5 |
6 | export function shouldBehaveLikePiGetter(): void {
7 | it("returns pi", async function () {
8 | const expected: BigNumber = PI;
9 | expect(expected).to.equal(await this.contracts.prbMathUd60x18.getPi());
10 | expect(expected).to.equal(await this.contracts.prbMathUd60x18Typed.getPi());
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/test/contracts/prbMathUd60x18/pure/scale.test.ts:
--------------------------------------------------------------------------------
1 | import type { BigNumber } from "@ethersproject/bignumber";
2 | import { expect } from "chai";
3 |
4 | import { SCALE } from "../../../../src/constants";
5 |
6 | export function shouldBehaveLikeScaleGetter(): void {
7 | it("returns the scale number", async function () {
8 | const expected: BigNumber = SCALE;
9 | expect(expected).to.equal(await this.contracts.prbMathUd60x18.getScale());
10 | expect(expected).to.equal(await this.contracts.prbMathUd60x18Typed.getScale());
11 | });
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/test/shared/constants.ts:
--------------------------------------------------------------------------------
1 | export const EPSILON: number = 1e12;
2 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/test/shared/errors.ts:
--------------------------------------------------------------------------------
1 | export enum PanicCodes {
2 | ARITHMETIC_OVERFLOW_OR_UNDERFLOW = "0x11",
3 | DIVISION_BY_ZERO = "0x12",
4 | }
5 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/test/shared/setup.ts:
--------------------------------------------------------------------------------
1 | import chai from "chai";
2 | import { solidity } from "ethereum-waffle";
3 |
4 | import { near } from "./assertions";
5 |
6 | chai.use(near);
7 | chai.use(solidity);
8 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "declaration": true,
4 | "declarationMap": true,
5 | "emitDecoratorMetadata": true,
6 | "esModuleInterop": true,
7 | "experimentalDecorators": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "incremental": false,
10 | "lib": ["es6"],
11 | "module": "commonjs",
12 | "moduleResolution": "node",
13 | "noImplicitAny": true,
14 | "removeComments": true,
15 | "resolveJsonModule": true,
16 | "sourceMap": true,
17 | "strict": true,
18 | "target": "es6"
19 | },
20 | "exclude": ["node_modules"],
21 | "files": ["./hardhat.config.ts", "./rollup.config.ts"],
22 | "include": ["src/**/*", "test/**/*"]
23 | }
24 |
--------------------------------------------------------------------------------
/ajna-core/lib/prb-math/tsconfig.prod.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "lib": ["dom", "es6"],
5 | "outDir": "./dist/node",
6 | "rootDir": "./src"
7 | },
8 | "exclude": ["node_modules", "src/types"],
9 | "files": [],
10 | "include": ["src/**/*"]
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-core/requirements-dev.txt:
--------------------------------------------------------------------------------
1 | eth-brownie>=1.16.0,<2.0.0
--------------------------------------------------------------------------------
/ajna-core/scripts/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sdk",
3 | "version": "0.1.0",
4 | "dependencies": {
5 | "dotenv": "^8.2.0",
6 | "web3": "^1.2.11"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/ajna-core/slither.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "filter_paths": "lib",
3 | "solc_remaps": [
4 | "@solmate=lib/solmate/src/",
5 | "@std=lib/forge-std/src/",
6 | "@clones=lib/clones-with-immutable-args/src/",
7 | "@openzeppelin/contracts=lib/openzeppelin-contracts/contracts",
8 | "@prb-math=lib/prb-math/",
9 | "@base64-sol=lib/base64/"
10 | ],
11 | "detectors_to_exclude": "solc-version,timestamp"
12 | }
--------------------------------------------------------------------------------
/ajna-core/src/interfaces/pool/commons/IPoolBorrowerActions.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity 0.8.14;
4 |
5 | /**
6 | * @title Pool Borrower Actions
7 | */
8 | interface IPoolBorrowerActions {
9 |
10 | /**
11 | * @notice Called by fully colalteralized borrowers to restamp the `Neutral Price` of the loan (only if loan is fully collateralized and not in auction).
12 | * The reason for stamping the neutral price on the loan is to provide some certainty to the borrower as to at what price they can expect to be liquidated.
13 | * This action can restamp only the loan of `msg.sender`.
14 | */
15 | function stampLoan() external;
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-core/src/interfaces/pool/commons/IPoolSettlerActions.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity 0.8.14;
4 |
5 | /**
6 | * @title Pool Settler Actions
7 | */
8 | interface IPoolSettlerActions {
9 |
10 | /**
11 | * @notice Called by actors to settle an amount of debt in a completed liquidation.
12 | * @param borrowerAddress_ Address of the auctioned borrower.
13 | * @param maxDepth_ Measured from `HPB`, maximum number of buckets deep to settle debt.
14 | * @dev `maxDepth_` is used to prevent unbounded iteration clearing large liquidations.
15 | */
16 | function settle(
17 | address borrowerAddress_,
18 | uint256 maxDepth_
19 | ) external;
20 |
21 | }
--------------------------------------------------------------------------------
/ajna-core/src/interfaces/pool/erc20/IERC20PoolImmutables.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity 0.8.14;
4 |
5 | /**
6 | * @title ERC20 Pool Immutables
7 | */
8 | interface IERC20PoolImmutables {
9 |
10 | /**
11 | * @notice Returns the `collateralScale` immutable.
12 | * @return The precision of the collateral `ERC20` token based on decimals.
13 | */
14 | function collateralScale() external view returns (uint256);
15 |
16 | }
--------------------------------------------------------------------------------
/ajna-core/src/interfaces/pool/erc721/IERC721PoolErrors.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity 0.8.14;
4 |
5 | /**
6 | * @title ERC721 Pool Errors
7 | */
8 | interface IERC721PoolErrors {
9 |
10 | /**
11 | * @notice User attempted to add an `NFT` to the pool with a `tokenId` outside of the allowed subset.
12 | */
13 | error OnlySubset();
14 | }
--------------------------------------------------------------------------------
/ajna-core/src/interfaces/pool/erc721/IERC721PoolImmutables.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity 0.8.14;
4 |
5 | /**
6 | * @title ERC721 Pool Immutables
7 | */
8 | interface IERC721PoolImmutables{
9 |
10 | /**
11 | * @notice Returns the type of `NFT` pool.
12 | * @return `True` if `NTF` pool is a subset pool.
13 | */
14 | function isSubset() external view returns (bool);
15 |
16 | }
--------------------------------------------------------------------------------
/ajna-core/src/interfaces/rewards/IRewardsManager.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity 0.8.14;
4 |
5 | import { IRewardsManagerOwnerActions } from './IRewardsManagerOwnerActions.sol';
6 | import { IRewardsManagerState } from './IRewardsManagerState.sol';
7 | import { IRewardsManagerDerivedState } from './IRewardsManagerDerivedState.sol';
8 | import { IRewardsManagerEvents } from './IRewardsManagerEvents.sol';
9 | import { IRewardsManagerErrors } from './IRewardsManagerErrors.sol';
10 |
11 | interface IRewardsManager is
12 | IRewardsManagerOwnerActions,
13 | IRewardsManagerState,
14 | IRewardsManagerDerivedState,
15 | IRewardsManagerErrors,
16 | IRewardsManagerEvents
17 | {
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/ajna-core/tests/forge/invariants/interfaces/ITestBase.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: UNLICENSED
2 |
3 | pragma solidity 0.8.14;
4 |
5 | interface ITestBase {
6 |
7 | function currentTimestamp() external view returns (uint256 currentTimestamp);
8 |
9 | function setCurrentTimestamp(uint256 currentTimestamp) external;
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-core/tests/forge/invariants/test-invariant-erc20-buckets.sh:
--------------------------------------------------------------------------------
1 | for bucket_index in 1 500 1500 2500 3500 4500 5500 6500 7369
2 | do
3 | make test-invariant-erc20 QUOTE_PRECISION=18 COLLATERAL_PRECISION=18 BUCKET_INDEX_ERC20=${bucket_index}
4 | done
--------------------------------------------------------------------------------
/ajna-core/tests/forge/invariants/test-invariant-erc20-precision.sh:
--------------------------------------------------------------------------------
1 | for quote_precision in 6 8 18
2 | do
3 | for collateral_precision in 6 8 18
4 | do
5 | make test-invariant-erc20 QUOTE_PRECISION=${quote_precision} COLLATERAL_PRECISION=${collateral_precision}
6 | done
7 | done
--------------------------------------------------------------------------------
/ajna-core/tests/forge/invariants/test-invariant-erc721-buckets.sh:
--------------------------------------------------------------------------------
1 | for bucket_index in 1 500 1500 2500 3500 4500 5500 6500 7369
2 | do
3 | make test-invariant-erc721 QUOTE_PRECISION=18 BUCKET_INDEX_ERC721=${bucket_index}
4 | done
--------------------------------------------------------------------------------
/ajna-grants/.env.example:
--------------------------------------------------------------------------------
1 | ## Ethereum node endpoint ##
2 | ETH_RPC_URL=
--------------------------------------------------------------------------------
/ajna-grants/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiler files
2 | cache/
3 | out/
4 |
5 | # Ignores development broadcast logs
6 | !/broadcast
7 | /broadcast/*
8 | /broadcast/*/31337/
9 |
10 | # Env
11 | .env
12 | .vscode/
13 |
14 | # Coverage
15 | report/
16 | *.info
--------------------------------------------------------------------------------
/ajna-grants/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/forge-std"]
2 | path = lib/forge-std
3 | url = https://github.com/foundry-rs/forge-std
4 | [submodule "lib/openzeppelin-contracts"]
5 | path = lib/openzeppelin-contracts
6 | url = https://github.com/OpenZeppelin/openzeppelin-contracts
7 |
--------------------------------------------------------------------------------
/ajna-grants/check-code-coverage.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | forge coverage --report lcov
4 |
5 | lcov -r lcov.info "script/*" "test/*" -o lcov-filtered.info --rc lcov_branch_coverage=1
6 |
7 | genhtml lcov-filtered.info -o report --branch-coverage && firefox report/index.html
8 |
--------------------------------------------------------------------------------
/ajna-grants/docs/GrantFund.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/ajna-grants/docs/GrantFund.jpg
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/.gitignore:
--------------------------------------------------------------------------------
1 | cache/
2 | out/
3 | .vscode
4 | .idea
5 |
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/ds-test"]
2 | path = lib/ds-test
3 | url = https://github.com/dapphub/ds-test
4 |
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/lib/ds-test/.gitignore:
--------------------------------------------------------------------------------
1 | /.dapple
2 | /build
3 | /out
4 | /cache/
5 |
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/lib/ds-test/Makefile:
--------------------------------------------------------------------------------
1 | all:; dapp build
2 |
3 | test:
4 | -dapp --use solc:0.4.23 build
5 | -dapp --use solc:0.4.26 build
6 | -dapp --use solc:0.5.17 build
7 | -dapp --use solc:0.6.12 build
8 | -dapp --use solc:0.7.5 build
9 |
10 | demo:
11 | DAPP_SRC=demo dapp --use solc:0.7.5 build
12 | -hevm dapp-test --verbose 3
13 |
14 | .PHONY: test demo
15 |
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/lib/ds-test/default.nix:
--------------------------------------------------------------------------------
1 | { solidityPackage, dappsys }: solidityPackage {
2 | name = "ds-test";
3 | src = ./src;
4 | }
5 |
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/lib/ds-test/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ds-test",
3 | "version": "1.0.0",
4 | "description": "Assertions, equality checks and other test helpers ",
5 | "bugs": "https://github.com/dapphub/ds-test/issues",
6 | "license": "GPL-3.0",
7 | "author": "Contributors to ds-test",
8 | "files": [
9 | "src/*"
10 | ],
11 | "repository": {
12 | "type": "git",
13 | "url": "https://github.com/dapphub/ds-test.git"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "forge-std",
3 | "version": "1.5.2",
4 | "description": "Forge Standard Library is a collection of helpful contracts and libraries for use with Forge and Foundry.",
5 | "homepage": "https://book.getfoundry.sh/forge/forge-std",
6 | "bugs": "https://github.com/foundry-rs/forge-std/issues",
7 | "license": "(Apache-2.0 OR MIT)",
8 | "author": "Contributors to Forge Standard Library",
9 | "files": [
10 | "src/**/*"
11 | ],
12 | "repository": {
13 | "type": "git",
14 | "url": "https://github.com/foundry-rs/forge-std.git"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/src/interfaces/IERC165.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.6.2;
3 |
4 | interface IERC165 {
5 | /// @notice Query if a contract implements an interface
6 | /// @param interfaceID The interface identifier, as specified in ERC-165
7 | /// @dev Interface identification is specified in ERC-165. This function
8 | /// uses less than 30,000 gas.
9 | /// @return `true` if the contract implements `interfaceID` and
10 | /// `interfaceID` is not 0xffffffff, `false` otherwise
11 | function supportsInterface(bytes4 interfaceID) external view returns (bool);
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/test/compilation/CompilationScript.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.6.2 <0.9.0;
3 |
4 | pragma experimental ABIEncoderV2;
5 |
6 | import "../../src/Script.sol";
7 |
8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
10 | contract CompilationScript is Script {}
11 |
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/test/compilation/CompilationScriptBase.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.6.2 <0.9.0;
3 |
4 | pragma experimental ABIEncoderV2;
5 |
6 | import "../../src/Script.sol";
7 |
8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
10 | contract CompilationScriptBase is ScriptBase {}
11 |
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/test/compilation/CompilationTest.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.6.2 <0.9.0;
3 |
4 | pragma experimental ABIEncoderV2;
5 |
6 | import "../../src/Test.sol";
7 |
8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
10 | contract CompilationTest is Test {}
11 |
--------------------------------------------------------------------------------
/ajna-grants/lib/forge-std/test/compilation/CompilationTestBase.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.6.2 <0.9.0;
3 |
4 | pragma experimental ABIEncoderV2;
5 |
6 | import "../../src/Test.sol";
7 |
8 | // The purpose of this contract is to benchmark compilation time to avoid accidentally introducing
9 | // a change that results in very long compilation times with via-ir. See https://github.com/foundry-rs/forge-std/issues/207
10 | contract CompilationTestBase is TestBase {}
11 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.codecov.yml:
--------------------------------------------------------------------------------
1 | comment: off
2 | github_checks:
3 | annotations: false
4 | coverage:
5 | status:
6 | patch:
7 | default:
8 | target: 95%
9 | only_pulls: true
10 | project:
11 | default:
12 | threshold: 1%
13 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: https://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | [*]
7 | charset = utf-8
8 | end_of_line = lf
9 | indent_style = space
10 | insert_final_newline = true
11 | trim_trailing_whitespace = false
12 | max_line_length = 120
13 |
14 | [*.sol]
15 | indent_size = 4
16 |
17 | [*.js]
18 | indent_size = 2
19 |
20 | [*.{adoc,md}]
21 | max_line_length = 0
22 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.gitattributes:
--------------------------------------------------------------------------------
1 | *.sol linguist-language=Solidity
2 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | contact_links:
2 | - name: Questions & Support Requests
3 | url: https://forum.openzeppelin.com/c/support/contracts/18
4 | about: Ask in the OpenZeppelin Forum
5 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for OpenZeppelin Contracts
4 |
5 | ---
6 |
7 | **🧐 Motivation**
8 |
9 |
10 | **📝 Details**
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.github/actions/setup/action.yml:
--------------------------------------------------------------------------------
1 | name: Setup
2 |
3 | runs:
4 | using: composite
5 | steps:
6 | - uses: actions/setup-node@v3
7 | with:
8 | node-version: 14.x
9 | cache: npm
10 | - uses: actions/cache@v3
11 | id: cache
12 | with:
13 | path: '**/node_modules'
14 | key: npm-v3-${{ hashFiles('**/package-lock.json') }}
15 | - name: Install dependencies
16 | run: npm ci --prefer-offline
17 | shell: bash
18 | if: steps.cache.outputs.cache-hit != 'true'
19 | env:
20 | SKIP_COMPILE: true
21 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.github/workflows/docs.yml:
--------------------------------------------------------------------------------
1 | name: Build Docs
2 |
3 | on:
4 | push:
5 | branches: [release-v*]
6 |
7 | jobs:
8 | build:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - uses: actions/checkout@v3
12 | - name: Set up environment
13 | uses: ./.github/actions/setup
14 | - run: bash scripts/git-user-config.sh
15 | - run: node scripts/update-docs-branch.js
16 | - run: git push --all origin
17 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/forge-std"]
2 | path = lib/forge-std
3 | url = https://github.com/foundry-rs/forge-std
4 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.mocharc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | require: 'hardhat/register',
3 | timeout: 4000,
4 | };
5 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "singleQuote": true,
3 | "trailingComma": "all",
4 | "overrides": [
5 | {
6 | "files": "*.sol",
7 | "options": {
8 | "singleQuote": false,
9 | "printWidth": 120,
10 | "explicitTypes": "always"
11 | }
12 | }
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.solcover.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | norpc: true,
3 | testCommand: 'npm test',
4 | compileCommand: 'npm run compile',
5 | skipFiles: [
6 | 'mocks',
7 | ],
8 | providerOptions: {
9 | default_balance_ether: '10000000000000000000000000',
10 | },
11 | mocha: {
12 | fgrep: '[skip-on-coverage]',
13 | invert: true,
14 | },
15 | }
16 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/.solhint.json:
--------------------------------------------------------------------------------
1 | {
2 | "rules": {
3 | "no-unused-vars": "error",
4 | "const-name-snakecase": "error",
5 | "contract-name-camelcase": "error",
6 | "event-name-camelcase": "error",
7 | "func-name-mixedcase": "error",
8 | "func-param-name-mixedcase": "error",
9 | "modifier-name-mixedcase": "error",
10 | "private-vars-leading-underscore": "error",
11 | "var-name-mixedcase": "error",
12 | "imports-on-top": "error"
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/audit/2018-10.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/ajna-grants/lib/openzeppelin-contracts/audit/2018-10.pdf
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/certora/munged/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/certora/scripts/Governor.sh:
--------------------------------------------------------------------------------
1 | make -C certora munged
2 |
3 | certoraRun certora/harnesses/ERC20VotesHarness.sol certora/harnesses/GovernorHarness.sol \
4 | --verify GovernorHarness:certora/specs/GovernorBase.spec \
5 | --solc solc8.0 \
6 | --staging shelly/forSasha \
7 | --optimistic_loop \
8 | --settings -copyLoopUnroll=4 \
9 | --rule voteStartBeforeVoteEnd \
10 | --msg "$1"
11 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/certora/scripts/GovernorCountingSimple-counting.sh:
--------------------------------------------------------------------------------
1 | make -C certora munged
2 |
3 | certoraRun certora/harnesses/ERC20VotesHarness.sol certora/harnesses/GovernorBasicHarness.sol \
4 | --verify GovernorBasicHarness:certora/specs/GovernorCountingSimple.spec \
5 | --solc solc8.2 \
6 | --staging shelly/forSasha \
7 | --optimistic_loop \
8 | --settings -copyLoopUnroll=4 \
9 | --rule hasVotedCorrelation \
10 | --msg "$1"
11 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/certora/scripts/WizardControlFirstPriority.sh:
--------------------------------------------------------------------------------
1 | make -C certora munged
2 |
3 | certoraRun certora/harnesses/ERC20VotesHarness.sol certora/harnesses/WizardControlFirstPriority.sol \
4 | --link WizardControlFirstPriority:token=ERC20VotesHarness \
5 | --verify WizardControlFirstPriority:certora/specs/GovernorBase.spec \
6 | --solc solc8.2 \
7 | --disableLocalTypeChecking \
8 | --staging shelly/forSasha \
9 | --optimistic_loop \
10 | --settings -copyLoopUnroll=4 \
11 | --rule canVoteDuringVotingPeriod \
12 | --msg "$1"
13 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/certora/scripts/WizardFirstTry.sh:
--------------------------------------------------------------------------------
1 | make -C certora munged
2 |
3 | certoraRun certora/harnesses/ERC20VotesHarness.sol certora/harnesses/WizardFirstTry.sol \
4 | --verify WizardFirstTry:certora/specs/GovernorBase.spec \
5 | --solc solc8.2 \
6 | --staging shelly/forSasha \
7 | --optimistic_loop \
8 | --disableLocalTypeChecking \
9 | --settings -copyLoopUnroll=4 \
10 | --msg "$1"
11 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/certora/scripts/sanity.sh:
--------------------------------------------------------------------------------
1 | make -C certora munged
2 |
3 | for f in certora/harnesses/Wizard*.sol
4 | do
5 | echo "Processing $f"
6 | file=$(basename $f)
7 | echo ${file%.*}
8 | certoraRun certora/harnesses/$file \
9 | --verify ${file%.*}:certora/specs/sanity.spec "$@" \
10 | --solc solc8.2 --staging shelly/forSasha \
11 | --optimistic_loop \
12 | --msg "checking sanity on ${file%.*}"
13 | --settings -copyLoopUnroll=4
14 | done
15 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/certora/specs/sanity.spec:
--------------------------------------------------------------------------------
1 | /*
2 | This rule looks for a non-reverting execution path to each method, including those overridden in the harness.
3 | A method has such an execution path if it violates this rule.
4 | How it works:
5 | - If there is a non-reverting execution path, we reach the false assertion, and the sanity fails.
6 | - If all execution paths are reverting, we never call the assertion, and the method will pass this rule vacuously.
7 | */
8 |
9 | rule sanity(method f) {
10 | env e;
11 | calldataarg arg;
12 | f(e, arg);
13 | assert false;
14 | }
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/crosschain/errors.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts (last updated v4.6.0) (crosschain/errors.sol)
3 |
4 | pragma solidity ^0.8.4;
5 |
6 | error NotCrossChainCall();
7 | error InvalidCrossChainSender(address actual, address expected);
8 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC1155.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC1155/IERC1155.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC1155MetadataURI.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155MetadataURI.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC1155/extensions/IERC1155MetadataURI.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC1155Receiver.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1155Receiver.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC1155/IERC1155Receiver.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../utils/introspection/IERC165.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Implementer.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1820Implementer.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../utils/introspection/IERC1820Implementer.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC1820Registry.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC1820Registry.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../utils/introspection/IERC1820Registry.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC20/IERC20.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC20Metadata.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC20Metadata.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC20/extensions/IERC20Metadata.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC2309.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | /**
6 | * @dev ERC-2309: ERC-721 Consecutive Transfer Extension.
7 | *
8 | * _Available since v4.8._
9 | */
10 | interface IERC2309 {
11 | /**
12 | * @dev Emitted when the tokens from `fromTokenId` to `toTokenId` are transferred from `fromAddress` to `toAddress`.
13 | */
14 | event ConsecutiveTransfer(
15 | uint256 indexed fromTokenId,
16 | uint256 toTokenId,
17 | address indexed fromAddress,
18 | address indexed toAddress
19 | );
20 | }
21 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC3156.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC3156.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "./IERC3156FlashBorrower.sol";
7 | import "./IERC3156FlashLender.sol";
8 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC721.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC721/IERC721.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC721Enumerable.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Enumerable.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC721/extensions/IERC721Enumerable.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC721Metadata.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Metadata.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC721/extensions/IERC721Metadata.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC721Receiver.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Receiver.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC721/IERC721Receiver.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC777.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC777/IERC777.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC777Recipient.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777Recipient.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC777/IERC777Recipient.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/IERC777Sender.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/IERC777Sender.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC777/IERC777Sender.sol";
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC2612.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (interfaces/draft-IERC2612.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | import "../token/ERC20/extensions/draft-IERC20Permit.sol";
7 |
8 | interface IERC2612 is IERC20Permit {}
9 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/metatx/README.adoc:
--------------------------------------------------------------------------------
1 | = Meta Transactions
2 |
3 | [.readme-notice]
4 | NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/metatx
5 |
6 | == Core
7 |
8 | {{ERC2771Context}}
9 |
10 | == Utils
11 |
12 | {{MinimalForwarder}}
13 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/AccessControlEnumerableMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../access/AccessControlEnumerable.sol";
6 |
7 | contract AccessControlEnumerableMock is AccessControlEnumerable {
8 | constructor() {
9 | _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
10 | }
11 |
12 | function setRoleAdmin(bytes32 roleId, bytes32 adminRoleId) public {
13 | _setRoleAdmin(roleId, adminRoleId);
14 | }
15 |
16 | function senderProtected(bytes32 roleId) public onlyRole(roleId) {}
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/AccessControlMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../access/AccessControl.sol";
6 |
7 | contract AccessControlMock is AccessControl {
8 | constructor() {
9 | _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
10 | }
11 |
12 | function setRoleAdmin(bytes32 roleId, bytes32 adminRoleId) public {
13 | _setRoleAdmin(roleId, adminRoleId);
14 | }
15 |
16 | function senderProtected(bytes32 roleId) public onlyRole(roleId) {}
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/BadBeacon.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | contract BadBeaconNoImpl {}
6 |
7 | contract BadBeaconNotContract {
8 | function implementation() external pure returns (address) {
9 | return address(0x1);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/Base64Mock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/Base64.sol";
6 |
7 | contract Base64Mock {
8 | function encode(bytes memory value) external pure returns (string memory) {
9 | return Base64.encode(value);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/BitmapMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/structs/BitMaps.sol";
6 |
7 | contract BitMapMock {
8 | using BitMaps for BitMaps.BitMap;
9 |
10 | BitMaps.BitMap private _bitmap;
11 |
12 | function get(uint256 index) public view returns (bool) {
13 | return _bitmap.get(index);
14 | }
15 |
16 | function setTo(uint256 index, bool value) public {
17 | _bitmap.setTo(index, value);
18 | }
19 |
20 | function set(uint256 index) public {
21 | _bitmap.set(index);
22 | }
23 |
24 | function unset(uint256 index) public {
25 | _bitmap.unset(index);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ClashingImplementation.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | /**
6 | * @dev Implementation contract with an admin() function made to clash with
7 | * @dev TransparentUpgradeableProxy's to test correct functioning of the
8 | * @dev Transparent Proxy feature.
9 | */
10 | contract ClashingImplementation {
11 | function admin() external pure returns (address) {
12 | return 0x0000000000000000000000000000000011111142;
13 | }
14 |
15 | function delegatedFunction() external pure returns (bool) {
16 | return true;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ConditionalEscrowMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/escrow/ConditionalEscrow.sol";
6 |
7 | // mock class using ConditionalEscrow
8 | contract ConditionalEscrowMock is ConditionalEscrow {
9 | mapping(address => bool) private _allowed;
10 |
11 | function setAllowed(address payee, bool allowed) public {
12 | _allowed[payee] = allowed;
13 | }
14 |
15 | function withdrawalAllowed(address payee) public view override returns (bool) {
16 | return _allowed[payee];
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/CountersImpl.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/Counters.sol";
6 |
7 | contract CountersImpl {
8 | using Counters for Counters.Counter;
9 |
10 | Counters.Counter private _counter;
11 |
12 | function current() public view returns (uint256) {
13 | return _counter.current();
14 | }
15 |
16 | function increment() public {
17 | _counter.increment();
18 | }
19 |
20 | function decrement() public {
21 | _counter.decrement();
22 | }
23 |
24 | function reset() public {
25 | _counter.reset();
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC1155BurnableMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC1155/extensions/ERC1155Burnable.sol";
6 |
7 | contract ERC1155BurnableMock is ERC1155Burnable {
8 | constructor(string memory uri) ERC1155(uri) {}
9 |
10 | function mint(
11 | address to,
12 | uint256 id,
13 | uint256 value,
14 | bytes memory data
15 | ) public {
16 | _mint(to, id, value, data);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC1155SupplyMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "./ERC1155Mock.sol";
6 | import "../token/ERC1155/extensions/ERC1155Supply.sol";
7 |
8 | contract ERC1155SupplyMock is ERC1155Mock, ERC1155Supply {
9 | constructor(string memory uri) ERC1155Mock(uri) {}
10 |
11 | function _beforeTokenTransfer(
12 | address operator,
13 | address from,
14 | address to,
15 | uint256[] memory ids,
16 | uint256[] memory amounts,
17 | bytes memory data
18 | ) internal override(ERC1155, ERC1155Supply) {
19 | super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165MaliciousData.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | contract ERC165MaliciousData {
6 | function supportsInterface(bytes4) public pure returns (bool) {
7 | assembly {
8 | mstore(0, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
9 | return(0, 32)
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165MissingData.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | contract ERC165MissingData {
6 | function supportsInterface(bytes4 interfaceId) public view {} // missing return
7 | }
8 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165NotSupported.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | contract ERC165NotSupported {}
6 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC165/ERC165ReturnBomb.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../../utils/introspection/IERC165.sol";
6 |
7 | contract ERC165ReturnBombMock is IERC165 {
8 | function supportsInterface(bytes4 interfaceId) public pure override returns (bool) {
9 | if (interfaceId == type(IERC165).interfaceId) {
10 | assembly {
11 | mstore(0, 1)
12 | }
13 | }
14 | assembly {
15 | return(0, 101500)
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC165Mock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/introspection/ERC165.sol";
6 |
7 | contract ERC165Mock is ERC165 {}
8 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC165StorageMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/introspection/ERC165Storage.sol";
6 |
7 | contract ERC165StorageMock is ERC165Storage {
8 | function registerInterface(bytes4 interfaceId) public {
9 | _registerInterface(interfaceId);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC1820ImplementerMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/introspection/ERC1820Implementer.sol";
6 |
7 | contract ERC1820ImplementerMock is ERC1820Implementer {
8 | function registerInterfaceForAddress(bytes32 interfaceHash, address account) public {
9 | _registerInterfaceForAddress(interfaceHash, account);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC20BurnableMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/ERC20Burnable.sol";
6 |
7 | contract ERC20BurnableMock is ERC20Burnable {
8 | constructor(
9 | string memory name,
10 | string memory symbol,
11 | address initialAccount,
12 | uint256 initialBalance
13 | ) ERC20(name, symbol) {
14 | _mint(initialAccount, initialBalance);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC20CappedMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/ERC20Capped.sol";
6 |
7 | contract ERC20CappedMock is ERC20Capped {
8 | constructor(
9 | string memory name,
10 | string memory symbol,
11 | uint256 cap
12 | ) ERC20(name, symbol) ERC20Capped(cap) {}
13 |
14 | function mint(address to, uint256 tokenId) public {
15 | _mint(to, tokenId);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC20PermitMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/draft-ERC20Permit.sol";
6 |
7 | contract ERC20PermitMock is ERC20Permit {
8 | constructor(
9 | string memory name,
10 | string memory symbol,
11 | address initialAccount,
12 | uint256 initialBalance
13 | ) payable ERC20(name, symbol) ERC20Permit(name) {
14 | _mint(initialAccount, initialBalance);
15 | }
16 |
17 | function getChainId() external view returns (uint256) {
18 | return block.chainid;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC20VotesCompMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/ERC20VotesComp.sol";
6 |
7 | contract ERC20VotesCompMock is ERC20VotesComp {
8 | constructor(string memory name, string memory symbol) ERC20(name, symbol) ERC20Permit(name) {}
9 |
10 | function mint(address account, uint256 amount) public {
11 | _mint(account, amount);
12 | }
13 |
14 | function burn(address account, uint256 amount) public {
15 | _burn(account, amount);
16 | }
17 |
18 | function getChainId() external view returns (uint256) {
19 | return block.chainid;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC20VotesMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/ERC20Votes.sol";
6 |
7 | contract ERC20VotesMock is ERC20Votes {
8 | constructor(string memory name, string memory symbol) ERC20(name, symbol) ERC20Permit(name) {}
9 |
10 | function mint(address account, uint256 amount) public {
11 | _mint(account, amount);
12 | }
13 |
14 | function burn(address account, uint256 amount) public {
15 | _burn(account, amount);
16 | }
17 |
18 | function getChainId() external view returns (uint256) {
19 | return block.chainid;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ERC20WrapperMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../token/ERC20/extensions/ERC20Wrapper.sol";
6 |
7 | contract ERC20WrapperMock is ERC20Wrapper {
8 | constructor(
9 | IERC20 _underlyingToken,
10 | string memory name,
11 | string memory symbol
12 | ) ERC20(name, symbol) ERC20Wrapper(_underlyingToken) {}
13 |
14 | function recover(address account) public returns (uint256) {
15 | return _recover(account);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/EtherReceiverMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | contract EtherReceiverMock {
6 | bool private _acceptEther;
7 |
8 | function setAcceptEther(bool acceptEther) public {
9 | _acceptEther = acceptEther;
10 | }
11 |
12 | receive() external payable {
13 | if (!_acceptEther) {
14 | revert();
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/MulticallTokenMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/Multicall.sol";
6 | import "./ERC20Mock.sol";
7 |
8 | contract MulticallTokenMock is ERC20Mock, Multicall {
9 | constructor(uint256 initialBalance) ERC20Mock("MulticallToken", "BCT", msg.sender, initialBalance) {}
10 | }
11 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/Ownable2StepMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../access/Ownable2Step.sol";
6 |
7 | contract Ownable2StepMock is Ownable2Step {}
8 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/OwnableMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../access/Ownable.sol";
6 |
7 | contract OwnableMock is Ownable {}
8 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/PullPaymentMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../security/PullPayment.sol";
6 |
7 | // mock class using PullPayment
8 | contract PullPaymentMock is PullPayment {
9 | constructor() payable {}
10 |
11 | // test helper function to call asyncTransfer
12 | function callTransfer(address dest, uint256 amount) public {
13 | _asyncTransfer(dest, amount);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/ReentrancyAttack.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/Context.sol";
6 |
7 | contract ReentrancyAttack is Context {
8 | function callSender(bytes4 data) public {
9 | (bool success, ) = _msgSender().call(abi.encodeWithSelector(data));
10 | require(success, "ReentrancyAttack: failed call");
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/SignatureCheckerMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/cryptography/SignatureChecker.sol";
6 |
7 | contract SignatureCheckerMock {
8 | using SignatureChecker for address;
9 |
10 | function isValidSignatureNow(
11 | address signer,
12 | bytes32 hash,
13 | bytes memory signature
14 | ) public view returns (bool) {
15 | return signer.isValidSignatureNow(hash, signature);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/mocks/SignedMathMock.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | import "../utils/math/SignedMath.sol";
6 |
7 | contract SignedMathMock {
8 | function max(int256 a, int256 b) public pure returns (int256) {
9 | return SignedMath.max(a, b);
10 | }
11 |
12 | function min(int256 a, int256 b) public pure returns (int256) {
13 | return SignedMath.min(a, b);
14 | }
15 |
16 | function average(int256 a, int256 b) public pure returns (int256) {
17 | return SignedMath.average(a, b);
18 | }
19 |
20 | function abs(int256 n) public pure returns (uint256) {
21 | return SignedMath.abs(n);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)
3 |
4 | pragma solidity ^0.8.0;
5 |
6 | /**
7 | * @dev This is the interface that {BeaconProxy} expects of its beacon.
8 | */
9 | interface IBeacon {
10 | /**
11 | * @dev Must return an address that can be used as a delegate call target.
12 | *
13 | * {BeaconProxy} will check that this address is a contract.
14 | */
15 | function implementation() external view returns (address);
16 | }
17 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/token/ERC1155/presets/README.md:
--------------------------------------------------------------------------------
1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative.
2 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/token/ERC20/presets/README.md:
--------------------------------------------------------------------------------
1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative.
2 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/token/ERC721/extensions/draft-ERC721Votes.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | // ERC721Votes was marked as draft due to the EIP-712 dependency.
6 | // EIP-712 is Final as of 2022-08-11. This file is deprecated.
7 |
8 | import "./ERC721Votes.sol";
9 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/token/ERC721/presets/README.md:
--------------------------------------------------------------------------------
1 | Contract presets are now deprecated in favor of [Contracts Wizard](https://wizard.openzeppelin.com/) as a more powerful alternative.
2 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/token/common/README.adoc:
--------------------------------------------------------------------------------
1 | = Common (Tokens)
2 |
3 | Functionality that is common to multiple token standards.
4 |
5 | * {ERC2981}: NFT Royalties compatible with both ERC721 and ERC1155.
6 | ** For ERC721 consider {ERC721Royalty} which clears the royalty information from storage on burn.
7 |
8 | == Contracts
9 |
10 | {{ERC2981}}
11 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/utils/cryptography/draft-EIP712.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity ^0.8.0;
4 |
5 | // EIP-712 is Final as of 2022-08-11. This file is deprecated.
6 |
7 | import "./EIP712.sol";
8 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/contracts/vendor/polygon/IFxMessageProcessor.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | // OpenZeppelin Contracts (last updated v4.6.0) (vendor/polygon/IFxMessageProcessor.sol)
3 | pragma solidity ^0.8.0;
4 |
5 | interface IFxMessageProcessor {
6 | function processMessageFromRoot(
7 | uint256 stateId,
8 | address rootMessageSender,
9 | bytes calldata data
10 | ) external;
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/docs/antora.yml:
--------------------------------------------------------------------------------
1 | name: contracts
2 | title: Contracts
3 | version: 4.x
4 | nav:
5 | - modules/ROOT/nav.adoc
6 | - modules/api/nav.adoc
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-admin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/ajna-grants/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-admin.png
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-vote.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/ajna-grants/lib/openzeppelin-contracts/docs/modules/ROOT/images/tally-vote.png
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/docs/modules/ROOT/nav.adoc:
--------------------------------------------------------------------------------
1 | * xref:index.adoc[Overview]
2 | * xref:wizard.adoc[Wizard]
3 | * xref:extending-contracts.adoc[Extending Contracts]
4 | * xref:upgradeable.adoc[Using with Upgrades]
5 |
6 | * xref:releases-stability.adoc[Releases & Stability]
7 |
8 | * xref:access-control.adoc[Access Control]
9 |
10 | * xref:tokens.adoc[Tokens]
11 | ** xref:erc20.adoc[ERC20]
12 | *** xref:erc20-supply.adoc[Creating Supply]
13 | ** xref:erc721.adoc[ERC721]
14 | ** xref:erc777.adoc[ERC777]
15 | ** xref:erc1155.adoc[ERC1155]
16 |
17 | * xref:governance.adoc[Governance]
18 |
19 | * xref:crosschain.adoc[Crosschain]
20 |
21 | * xref:utilities.adoc[Utilities]
22 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/docs/modules/ROOT/pages/crowdsales.adoc:
--------------------------------------------------------------------------------
1 | = Crowdsales
2 |
3 | All crowdsale-related contracts were removed from the OpenZeppelin Contracts library on the https://forum.openzeppelin.com/t/openzeppelin-contracts-v3-0-beta-release/2256[v3.0.0 release] due to both a decline in their usage and the complexity associated with migrating them to Solidity v0.6.
4 |
5 | They are however still available on the v2.5 release of OpenZeppelin Contracts, which you can install by running:
6 |
7 | ```console
8 | $ npm install @openzeppelin/contracts@v2.5
9 | ```
10 |
11 | Refer to the https://docs.openzeppelin.com/contracts/2.x/crowdsales[v2.x documentation] when working with them.
12 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/docs/modules/ROOT/pages/wizard.adoc:
--------------------------------------------------------------------------------
1 | = Contracts Wizard
2 | :page-notoc:
3 |
4 | Not sure where to start? Use the interactive generator below to bootstrap your
5 | contract and learn about the components offered in OpenZeppelin Contracts.
6 |
7 | TIP: Place the resulting contract in your `contracts` directory in order to compile it with a tool like Hardhat or Truffle. Consider reading our guide on xref:learn::developing-smart-contracts.adoc[Developing Smart Contracts] for more guidance!
8 |
9 | ++++
10 |
11 |
12 |
13 | ++++
14 |
15 |
16 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/docs/templates/page.hbs:
--------------------------------------------------------------------------------
1 | :github-icon: pass:[]
2 | {{#with-prelude}}
3 | {{readme (readme-path)}}
4 | {{/with-prelude}}
5 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/foundry.toml:
--------------------------------------------------------------------------------
1 | [fuzz]
2 | runs = 10000
3 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/hardhat/env-contract.js:
--------------------------------------------------------------------------------
1 | extendEnvironment(env => {
2 | const { contract } = env;
3 |
4 | env.contract = function (name, body) {
5 | // remove the default account from the accounts list used in tests, in order
6 | // to protect tests against accidentally passing due to the contract
7 | // deployer being used subsequently as function caller
8 | contract(name, accounts => body(accounts.slice(1)));
9 | };
10 | });
11 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/hardhat/skip-foundry-tests.js:
--------------------------------------------------------------------------------
1 | const { subtask } = require('hardhat/config');
2 | const { TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS } = require('hardhat/builtin-tasks/task-names');
3 |
4 | subtask(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS)
5 | .setAction(async (_, __, runSuper) =>
6 | (await runSuper()).filter((path) => !path.endsWith('.t.sol')),
7 | );
8 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/lib/forge-std/.gitignore:
--------------------------------------------------------------------------------
1 | cache/
2 | out/
3 | .vscode
4 | .idea
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/lib/forge-std/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/ds-test"]
2 | path = lib/ds-test
3 | url = https://github.com/dapphub/ds-test
4 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/.gitignore:
--------------------------------------------------------------------------------
1 | /.dapple
2 | /build
3 | /out
4 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/Makefile:
--------------------------------------------------------------------------------
1 | all:; dapp build
2 |
3 | test:
4 | -dapp --use solc:0.4.23 build
5 | -dapp --use solc:0.4.26 build
6 | -dapp --use solc:0.5.17 build
7 | -dapp --use solc:0.6.12 build
8 | -dapp --use solc:0.7.5 build
9 |
10 | demo:
11 | DAPP_SRC=demo dapp --use solc:0.7.5 build
12 | -hevm dapp-test --verbose 3
13 |
14 | .PHONY: test demo
15 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/default.nix:
--------------------------------------------------------------------------------
1 | { solidityPackage, dappsys }: solidityPackage {
2 | name = "ds-test";
3 | src = ./src;
4 | }
5 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/lib/forge-std/src/test/Script.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity >=0.7.0 <0.9.0;
3 |
4 | import "../Test.sol";
5 |
6 | contract ScriptTest is Test
7 | {
8 | function testGenerateCorrectAddress() external {
9 | address creation = computeCreateAddress(0x6C9FC64A53c1b71FB3f9Af64d1ae3A4931A5f4E9, 14);
10 | assertEq(creation, 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);
11 | }
12 | }
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/netlify.toml:
--------------------------------------------------------------------------------
1 | [build]
2 | command = "npm run docs"
3 | publish = "build/site"
4 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "github>OpenZeppelin/code-style"
4 | ],
5 | "packageRules": [
6 | {
7 | "extends": ["packages:eslint"],
8 | "enabled": false
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/scripts/checks/generation.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -euo pipefail
4 |
5 | npm run generate
6 | git diff -R --exit-code
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/scripts/generate/format-lines.js:
--------------------------------------------------------------------------------
1 | function formatLines (...lines) {
2 | return [...indentEach(0, lines)].join('\n') + '\n';
3 | }
4 |
5 | function *indentEach (indent, lines) {
6 | for (const line of lines) {
7 | if (Array.isArray(line)) {
8 | yield * indentEach(indent + 1, line);
9 | } else {
10 | const padding = ' '.repeat(indent);
11 | yield * line.split('\n').map(subline => subline === '' ? '' : padding + subline);
12 | }
13 | }
14 | }
15 |
16 | module.exports = formatLines;
17 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/scripts/git-user-config.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -euo pipefail -x
4 |
5 | git config user.name 'github-actions'
6 | git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
7 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/scripts/prepack.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -euo pipefail
4 | shopt -s globstar
5 |
6 | # cross platform `mkdir -p`
7 | node -e 'fs.mkdirSync("build/contracts", { recursive: true })'
8 |
9 | cp artifacts/contracts/**/*.json build/contracts
10 | rm build/contracts/*.dbg.json
11 |
12 | node scripts/remove-ignored-artifacts.js
13 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/scripts/prepare-contracts-package.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | # cd to the root of the repo
4 | cd "$(git rev-parse --show-toplevel)"
5 |
6 | # avoids re-compilation during publishing of both packages
7 | if [[ ! -v ALREADY_COMPILED ]]; then
8 | npm run clean
9 | npm run prepare
10 | npm run prepack
11 | fi
12 |
13 | cp README.md contracts/
14 | mkdir contracts/build contracts/build/contracts
15 | cp -r build/contracts/*.json contracts/build/contracts
16 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/scripts/prepare-docs.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -o errexit
4 |
5 | OUTDIR="$(node -p 'require("./docs/config.js").outputDir')"
6 |
7 | if [ ! -d node_modules ]; then
8 | npm ci
9 | fi
10 |
11 | rm -rf "$OUTDIR"
12 |
13 | hardhat docgen
14 |
15 | node scripts/gen-nav.js "$OUTDIR" > "$OUTDIR/../nav.adoc"
16 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/scripts/prepare.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -euo pipefail
4 |
5 | if [ "${SKIP_COMPILE:-}" == true ]; then
6 | exit
7 | fi
8 |
9 | npm run clean
10 | env COMPILE_MODE=production npm run compile
11 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/scripts/release/synchronize-versions.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | // Synchronizes the version in contracts/package.json with the one in package.json.
4 | // This is run automatically when npm version is run.
5 |
6 | const fs = require('fs');
7 | const cp = require('child_process');
8 |
9 | setVersion('contracts/package.json');
10 |
11 | function setVersion (file) {
12 | const json = JSON.parse(fs.readFileSync(file));
13 | json.version = process.env.npm_package_version;
14 | fs.writeFileSync(file, JSON.stringify(json, null, 2) + '\n');
15 | cp.execFileSync('git', ['add', file]);
16 | }
17 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/scripts/release/version.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -o errexit
4 |
5 | scripts/release/update-changelog-release-date.js
6 | scripts/release/synchronize-versions.js
7 | scripts/release/update-comment.js
8 |
9 | oz-docs update-version
10 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/slither.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "detectors_to_run": "reentrancy-eth,reentrancy-no-eth,reentrancy-unlimited-gas",
3 | "filter_paths": "contracts/mocks"
4 | }
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/test/TESTING.md:
--------------------------------------------------------------------------------
1 | ## Testing
2 |
3 | Unit test are critical to OpenZeppelin Contracts. They help ensure code quality and mitigate against security vulnerabilities. The directory structure within the `/test` directory corresponds to the `/contracts` directory.
4 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/test/access/AccessControl.test.js:
--------------------------------------------------------------------------------
1 | const {
2 | shouldBehaveLikeAccessControl,
3 | } = require('./AccessControl.behavior.js');
4 |
5 | const AccessControlMock = artifacts.require('AccessControlMock');
6 |
7 | contract('AccessControl', function (accounts) {
8 | beforeEach(async function () {
9 | this.accessControl = await AccessControlMock.new({ from: accounts[0] });
10 | });
11 |
12 | shouldBehaveLikeAccessControl('AccessControl', ...accounts);
13 | });
14 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/test/access/AccessControlEnumerable.test.js:
--------------------------------------------------------------------------------
1 | const {
2 | shouldBehaveLikeAccessControl,
3 | shouldBehaveLikeAccessControlEnumerable,
4 | } = require('./AccessControl.behavior.js');
5 |
6 | const AccessControlMock = artifacts.require('AccessControlEnumerableMock');
7 |
8 | contract('AccessControl', function (accounts) {
9 | beforeEach(async function () {
10 | this.accessControl = await AccessControlMock.new({ from: accounts[0] });
11 | });
12 |
13 | shouldBehaveLikeAccessControl('AccessControl', ...accounts);
14 | shouldBehaveLikeAccessControlEnumerable('AccessControl', ...accounts);
15 | });
16 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/test/helpers/create2.js:
--------------------------------------------------------------------------------
1 | function computeCreate2Address (saltHex, bytecode, deployer) {
2 | return web3.utils.toChecksumAddress(`0x${web3.utils.sha3(`0x${[
3 | 'ff',
4 | deployer,
5 | saltHex,
6 | web3.utils.soliditySha3(bytecode),
7 | ].map(x => x.replace(/0x/, '')).join('')}`).slice(-40)}`);
8 | }
9 |
10 | module.exports = {
11 | computeCreate2Address,
12 | };
13 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/test/helpers/enums.js:
--------------------------------------------------------------------------------
1 | const { BN } = require('@openzeppelin/test-helpers');
2 |
3 | function Enum (...options) {
4 | return Object.fromEntries(options.map((key, i) => [ key, new BN(i) ]));
5 | }
6 |
7 | module.exports = {
8 | Enum,
9 | ProposalState: Enum(
10 | 'Pending',
11 | 'Active',
12 | 'Canceled',
13 | 'Defeated',
14 | 'Succeeded',
15 | 'Queued',
16 | 'Expired',
17 | 'Executed',
18 | ),
19 | VoteType: Enum(
20 | 'Against',
21 | 'For',
22 | 'Abstain',
23 | ),
24 | Rounding: Enum(
25 | 'Down',
26 | 'Up',
27 | 'Zero',
28 | ),
29 | };
30 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/test/proxy/ERC1967/ERC1967Proxy.test.js:
--------------------------------------------------------------------------------
1 | const shouldBehaveLikeProxy = require('../Proxy.behaviour');
2 |
3 | const ERC1967Proxy = artifacts.require('ERC1967Proxy');
4 |
5 | contract('ERC1967Proxy', function (accounts) {
6 | const [proxyAdminOwner] = accounts;
7 |
8 | const createProxy = async function (implementation, _admin, initData, opts) {
9 | return ERC1967Proxy.new(implementation, initData, opts);
10 | };
11 |
12 | shouldBehaveLikeProxy(createProxy, undefined, proxyAdminOwner);
13 | });
14 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/test/token/ERC721/ERC721.test.js:
--------------------------------------------------------------------------------
1 | const {
2 | shouldBehaveLikeERC721,
3 | shouldBehaveLikeERC721Metadata,
4 | } = require('./ERC721.behavior');
5 |
6 | const ERC721Mock = artifacts.require('ERC721Mock');
7 |
8 | contract('ERC721', function (accounts) {
9 | const name = 'Non Fungible Token';
10 | const symbol = 'NFT';
11 |
12 | beforeEach(async function () {
13 | this.token = await ERC721Mock.new(name, symbol);
14 | });
15 |
16 | shouldBehaveLikeERC721('ERC721', ...accounts);
17 | shouldBehaveLikeERC721Metadata('ERC721', name, symbol, ...accounts);
18 | });
19 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/test/token/ERC721/ERC721Enumerable.test.js:
--------------------------------------------------------------------------------
1 | const {
2 | shouldBehaveLikeERC721,
3 | shouldBehaveLikeERC721Metadata,
4 | shouldBehaveLikeERC721Enumerable,
5 | } = require('./ERC721.behavior');
6 |
7 | const ERC721Mock = artifacts.require('ERC721EnumerableMock');
8 |
9 | contract('ERC721Enumerable', function (accounts) {
10 | const name = 'Non Fungible Token';
11 | const symbol = 'NFT';
12 |
13 | beforeEach(async function () {
14 | this.token = await ERC721Mock.new(name, symbol);
15 | });
16 |
17 | shouldBehaveLikeERC721('ERC721', ...accounts);
18 | shouldBehaveLikeERC721Metadata('ERC721', name, symbol, ...accounts);
19 | shouldBehaveLikeERC721Enumerable('ERC721', ...accounts);
20 | });
21 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/test/utils/Context.test.js:
--------------------------------------------------------------------------------
1 | require('@openzeppelin/test-helpers');
2 |
3 | const ContextMock = artifacts.require('ContextMock');
4 | const ContextMockCaller = artifacts.require('ContextMockCaller');
5 |
6 | const { shouldBehaveLikeRegularContext } = require('./Context.behavior');
7 |
8 | contract('Context', function (accounts) {
9 | const [ sender ] = accounts;
10 |
11 | beforeEach(async function () {
12 | this.context = await ContextMock.new();
13 | this.caller = await ContextMockCaller.new();
14 | });
15 |
16 | shouldBehaveLikeRegularContext(sender);
17 | });
18 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/test/utils/escrow/Escrow.test.js:
--------------------------------------------------------------------------------
1 | require('@openzeppelin/test-helpers');
2 | const { shouldBehaveLikeEscrow } = require('./Escrow.behavior');
3 |
4 | const Escrow = artifacts.require('Escrow');
5 |
6 | contract('Escrow', function (accounts) {
7 | const [ owner, ...otherAccounts ] = accounts;
8 |
9 | beforeEach(async function () {
10 | this.escrow = await Escrow.new({ from: owner });
11 | });
12 |
13 | shouldBehaveLikeEscrow(owner, otherAccounts);
14 | });
15 |
--------------------------------------------------------------------------------
/ajna-grants/lib/openzeppelin-contracts/test/utils/introspection/ERC165.test.js:
--------------------------------------------------------------------------------
1 | const { shouldSupportInterfaces } = require('./SupportsInterface.behavior');
2 |
3 | const ERC165Mock = artifacts.require('ERC165Mock');
4 |
5 | contract('ERC165', function (accounts) {
6 | beforeEach(async function () {
7 | this.mock = await ERC165Mock.new();
8 | });
9 |
10 | shouldSupportInterfaces([
11 | 'ERC165',
12 | ]);
13 | });
14 |
--------------------------------------------------------------------------------
/ajna-grants/remappings.txt:
--------------------------------------------------------------------------------
1 | @oz/=lib/openzeppelin-contracts/contracts/
2 | @std=lib/forge-std/src/
3 |
--------------------------------------------------------------------------------
/ajna-grants/slither.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "filter_paths": "lib",
3 | "solc_remaps": [
4 | "@oz=lib/openzeppelin-contracts/contracts/"
5 | ]
6 | }
--------------------------------------------------------------------------------
/ajna-grants/test/invariants/base/ITestBase.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: UNLICENSED
2 |
3 | pragma solidity 0.8.16;
4 |
5 | interface ITestBase {
6 |
7 | function currentBlock() external view returns (uint256 currentBlock);
8 |
9 | function setCurrentBlock(uint256 currentBlock) external;
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/ajna-grants/test/utils/IAjnaToken.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 |
3 | pragma solidity 0.8.16;
4 |
5 | import { IVotes } from "@oz/governance/utils/IVotes.sol";
6 | import { IERC20 } from "@oz/token/ERC20/IERC20.sol";
7 |
8 | interface IAjnaToken is IERC20, IVotes {}
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/0558b11388c316c71b747213649d9f56-4B100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/0558b11388c316c71b747213649d9f56-4B100.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/0ab6fddedfdca4dee0b54ab41ab4faad-3EFDA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/0ab6fddedfdca4dee0b54ab41ab4faad-3EFDA.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/0ac1475f8d92f028dfe6daa37fc91035-24F9F.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/0ac1475f8d92f028dfe6daa37fc91035-24F9F.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/0e5b3c84382435322161f927b720d8f6-5CB49.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/0e5b3c84382435322161f927b720d8f6-5CB49.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/1-B2132.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/1-B2132.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/1080667809002037320-8957D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/1080667809002037320-8957D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/1083068770823721071-EE4F6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/1083068770823721071-EE4F6.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/137d3e15fa9d5b9b5e5dbbd3fc432191-201D6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/137d3e15fa9d5b9b5e5dbbd3fc432191-201D6.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/14ea78b80318f2bf28da987fc2be9912-F4E16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/14ea78b80318f2bf28da987fc2be9912-F4E16.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/15cdaa10c5644d913a1ab1f9f06288c1-8A82B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/15cdaa10c5644d913a1ab1f9f06288c1-8A82B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/17e6d21118aa7a0a26c8a0d14f156cdf-5A089.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/17e6d21118aa7a0a26c8a0d14f156cdf-5A089.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/1f49c-71A75.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/1f50d-195C0.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/1f642-83E8A.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/2-ADBB4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/2-ADBB4.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/20b7a9f70866c517684cce8b521d55eb-C4D77.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/20b7a9f70866c517684cce8b521d55eb-C4D77.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/22eb9a485d5708ecfa60b414b7425066-DDFC8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/22eb9a485d5708ecfa60b414b7425066-DDFC8.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/258efb44a5e3f3ccd0db6c4b11462ff2-08900.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/258efb44a5e3f3ccd0db6c4b11462ff2-08900.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/2665-8CDCE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/26a1-7A124.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/2705-0589F.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/2764-A3D25.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/2795-3358E.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/2a9faff195fe333526cfe6ae6fce1420-49B98.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/2a9faff195fe333526cfe6ae6fce1420-49B98.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/2c1def883024ca7c1a2bc629a8b54908-252A9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/2c1def883024ca7c1a2bc629a8b54908-252A9.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/3-FB033.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/3-FB033.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/32800799d91968c4534a7242647fff2b-0408E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/32800799d91968c4534a7242647fff2b-0408E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/37254c70d1f43924aab295c5f32a33ab-FAE53.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/37254c70d1f43924aab295c5f32a33ab-FAE53.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/394983eda2eb8faf909901fe09d16b4b-BAFA3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/394983eda2eb8faf909901fe09d16b4b-BAFA3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/3b01c38b7c5b905fd8e8a1d72f7d7492-53427.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/3b01c38b7c5b905fd8e8a1d72f7d7492-53427.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/4-4551A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/4-4551A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/43d4de17430aed2a2ecc19ffe96fbf29-9CFFA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/43d4de17430aed2a2ecc19ffe96fbf29-9CFFA.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/44c233abaf97eb3e1b0edf585fecd499-56E12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/44c233abaf97eb3e1b0edf585fecd499-56E12.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/47a90c36a9d5ab41d808ed4927e2d160-09864.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/47a90c36a9d5ab41d808ed4927e2d160-09864.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/4de0a7f237fde45d02ba1266af3cbf19-81483.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/4de0a7f237fde45d02ba1266af3cbf19-81483.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/5-E9BDB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/5-E9BDB.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/514d83db5e503f5a33fd3f790d42d452-555FF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/514d83db5e503f5a33fd3f790d42d452-555FF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/568d22b97293cdd2d9b7006198d6adbc-F0132.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/568d22b97293cdd2d9b7006198d6adbc-F0132.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/6094e48ab77eb87fae4e3348c0d872b4-34FEF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/6094e48ab77eb87fae4e3348c0d872b4-34FEF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/67594ee4b4d1fc03bca468327a0d145b-BD76A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/67594ee4b4d1fc03bca468327a0d145b-BD76A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/6b3e8db133891c8c0be08fb8b4fe9bff-36B4D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/6b3e8db133891c8c0be08fb8b4fe9bff-36B4D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/72a8a0e9411066feb2ada997cccde0ff-5710A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/72a8a0e9411066feb2ada997cccde0ff-5710A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/7345f179853dde10ad03b548b769071e-61E32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/7345f179853dde10ad03b548b769071e-61E32.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/754850443909267567-E2D08.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/754850443909267567-E2D08.gif
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/785c0b7123c292fe05d43e8dbf0d7044-B46B9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/785c0b7123c292fe05d43e8dbf0d7044-B46B9.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/78ec7cffe84a40a3c9479b3762f50458-FA5BB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/78ec7cffe84a40a3c9479b3762f50458-FA5BB.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/81-DA66A:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/81-DA66A
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/851893827027075142-F23DF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/851893827027075142-F23DF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/851893827089727568-5FD38.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/851893827089727568-5FD38.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/851893827315826708-F59C0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/851893827315826708-F59C0.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/851893828280909886-FBF42.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/851893828280909886-FBF42.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/86405fe46555cfeea65230abea180e3f-B42C2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/86405fe46555cfeea65230abea180e3f-B42C2.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/8817fd8ba40654b1081a3df74efdb7c3-65D01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/8817fd8ba40654b1081a3df74efdb7c3-65D01.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/8c1e8d99070b23de448047fcd524b8fa-B03B7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/8c1e8d99070b23de448047fcd524b8fa-B03B7.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/9010cff7dc5115048ddc82561051356b-12341.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/9010cff7dc5115048ddc82561051356b-12341.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/92723d55220e7121bd5dc9694136a3d2-3B2C3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/92723d55220e7121bd5dc9694136a3d2-3B2C3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/94fcb7838a04ec855fb2853565f07b3c-02B6F.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/94fcb7838a04ec855fb2853565f07b3c-02B6F.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/9542a3c6a8ce011c16ce81d61dc908f9-F344E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/9542a3c6a8ce011c16ce81d61dc908f9-F344E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/9597b876-a4bb-434d-86b7-2e9ce368bd4c-1B806:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/9597b876-a4bb-434d-86b7-2e9ce368bd4c-1B806
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/966eaf1aafcae6abcb9e0db823947e2f-96F55.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/966eaf1aafcae6abcb9e0db823947e2f-96F55.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/970d2e2f00cd7ef2134a1a3f21326349-404EA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/970d2e2f00cd7ef2134a1a3f21326349-404EA.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/9dae367c2914db90ec5f86da55c97b23-1BB00.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/9dae367c2914db90ec5f86da55c97b23-1BB00.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/Screenshot_2023-06-08_at_08.13.00-1407F.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/Screenshot_2023-06-08_at_08.13.00-1407F.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/Screenshot_2023-06-08_at_11.36.23_AM-A74DB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/Screenshot_2023-06-08_at_11.36.23_AM-A74DB.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/a15d1fd903ebf135e19766fdf040a280-46865.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/a15d1fd903ebf135e19766fdf040a280-46865.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/a681a986fc31a9739459ccc096516151-9053D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/a681a986fc31a9739459ccc096516151-9053D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/aa24291fb1227c5734330daec1d79595-C9CFC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/aa24291fb1227c5734330daec1d79595-C9CFC.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/abb480ed1510d7994e58bc85f8e989d6-66497.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/abb480ed1510d7994e58bc85f8e989d6-66497.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/abc149ebfff39ff0776baa87dac61837-DE3AC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/abc149ebfff39ff0776baa87dac61837-DE3AC.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/b4fead77f737aa7840a25e1cd39eb062-CEDEC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/b4fead77f737aa7840a25e1cd39eb062-CEDEC.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/bb343372d44b28557a1291ab7f03b53d-CD490.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/bb343372d44b28557a1291ab7f03b53d-CD490.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/bcf0949872ddb3c0307bb38aa8197dfe-58D30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/bcf0949872ddb3c0307bb38aa8197dfe-58D30.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/c4-og-banner-0FCFA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/c4-og-banner-0FCFA.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/c6b85a4a6ca07ab15a30a24f570be5b8-142E6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/c6b85a4a6ca07ab15a30a24f570be5b8-142E6.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/c6dfa3135b62e742ac7e28c3e14714f9-90F20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/c6dfa3135b62e742ac7e28c3e14714f9-90F20.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/cf45b72e4669855b84803db73591efaa-42E6D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/cf45b72e4669855b84803db73591efaa-42E6D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/d05992162b128265b0f4fd4543b46456-9F835.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/d05992162b128265b0f4fd4543b46456-9F835.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/d28fcb32fb4a0872e0cbaf200d440c26-CFD73.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/d28fcb32fb4a0872e0cbaf200d440c26-CFD73.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/d2975fd6783736b0baccb3c8e26eb6e2-242D1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/d2975fd6783736b0baccb3c8e26eb6e2-242D1.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/d6f5621387ce3568c12af7fdf986d26a-C66DD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/d6f5621387ce3568c12af7fdf986d26a-C66DD.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/decba2e13096444298a3c7e4ef7c7ff3-46061.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/decba2e13096444298a3c7e4ef7c7ff3-46061.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ds-logo-icon-126807ac9914f82e45e9306394e76-568D5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ds-logo-icon-126807ac9914f82e45e9306394e76-568D5.jpg
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/e6f4ca0e498c6a1841fd2181890d7668-D7F35.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/e6f4ca0e498c6a1841fd2181890d7668-D7F35.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ec906ee29b2bacd49cd7e28a849ef04b-F54DF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ec906ee29b2bacd49cd7e28a849ef04b-F54DF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ee7b955ace762db80f995e9248d5d9ed-32632.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ee7b955ace762db80f995e9248d5d9ed-32632.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/f91c0ad3bd4337a3edab4633126f6652-94679.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/f91c0ad3bd4337a3edab4633126f6652-94679.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/fd032d1c27ba593b4fbe6be4c074663d-78A1D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/fd032d1c27ba593b4fbe6be4c074663d-78A1D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/fe9558f335cb8f887866a2c6cd93a6d0-F7F17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/fe9558f335cb8f887866a2c6cd93a6d0-F7F17.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-italic-400-E988B.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-italic-400-E988B.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-italic-500-0777F.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-italic-500-0777F.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-italic-600-CB411.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-italic-600-CB411.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-italic-700-891AC.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-italic-700-891AC.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-italic-800-D36B0.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-italic-800-D36B0.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-normal-400-1456D.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-normal-400-1456D.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-normal-500-89CE5.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-normal-500-89CE5.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-normal-600-C1EA8.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-normal-600-C1EA8.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-normal-700-1949A.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-normal-700-1949A.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-normal-800-58487.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].html_Files/ggsans-normal-800-58487.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/81-DA66A:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/81-DA66A
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/9597b876-a4bb-434d-86b7-2e9ce368bd4c-1B806:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/9597b876-a4bb-434d-86b7-2e9ce368bd4c-1B806
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/Screenshot_2023-06-08_at_08.13.00-1407F.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/Screenshot_2023-06-08_at_08.13.00-1407F.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/Screenshot_2023-06-08_at_11.36.23_AM-A74DB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/Screenshot_2023-06-08_at_11.36.23_AM-A74DB.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/c4-og-banner-0FCFA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/c4-og-banner-0FCFA.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/ds-logo-icon-126807ac9914f82e45e9306394e76-568D5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-05-ajna/07594e07512692560109ac1a534dbcf38db2e72e/discord-export/Code4rena - ARCHIVE-Q2-2023 - ajna-may03 [1102691298349158440].txt_Files/ds-logo-icon-126807ac9914f82e45e9306394e76-568D5.jpg
--------------------------------------------------------------------------------