├── .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 --------------------------------------------------------------------------------