├── .gitignore
├── .gitmodules
├── LICENSE
├── README.md
├── bot-report.md
├── discord-export
├── Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html
├── Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files
│ ├── 000ac5363e3f6dbccf99b0e7a27d2d3a-E863B.png
│ ├── 07379ae8c4160d368388819e98e09390-49FD8.png
│ ├── 08a051c6ef73c89fd5967637cbbb4acd-9A9A6.png
│ ├── 0ab6fddedfdca4dee0b54ab41ab4faad-3EFDA.png
│ ├── 0b34fc17129c43951b8f4849c2505ec4-DBF0F.png
│ ├── 0c3c3320c3e6aa3a03d03ef4431a326d-9E1E9.png
│ ├── 0c8e9b652a07346bede9f2908c1284cf-338CD.png
│ ├── 1-B2132.png
│ ├── 1080667809002037320-8957D.png
│ ├── 1083068770823721071-EE4F6.png
│ ├── 1096768239796756510-66AD4.png
│ ├── 1110201692663857255-A8E42.png
│ ├── 146464eb9e5f1322355fc03324ad0077-EA70E.png
│ ├── 14f8cbc620b0a89c2a11ca8deace58eb-DA2D1.png
│ ├── 151b88dd88def5e46496fada6e326ada-65CA9.png
│ ├── 15cdaa10c5644d913a1ab1f9f06288c1-8A82B.png
│ ├── 188be8c99e89942dad132d5f7b774545-F428F.png
│ ├── 19a1f05f738fab64e6c28329e2a85e31-452EF.png
│ ├── 1b46faf0b094158572e6402e79edc5b4-A7DAD.png
│ ├── 1ba5ef0640bf5f2f1a05aa5508ce0411-5EA22.png
│ ├── 1c4a80121deeb5d2fdd1654a720538b4-2A197.png
│ ├── 1cd3f55c4a43e79a9b4a12c3b932786d-8DCC0.png
│ ├── 1f197-BB9F1.svg
│ ├── 1f389-5C738.svg
│ ├── 1f3c1-445DC.svg
│ ├── 1f3c6-621A1.svg
│ ├── 1f3fb-E58B7.svg
│ ├── 1f3fc-4884A.svg
│ ├── 1f410-A0700.svg
│ ├── 1f43a-EB486.svg
│ ├── 1f440-6C64D.svg
│ ├── 1f446-1f3fd-9C328.svg
│ ├── 1f44b-1f3fc-DDA17.svg
│ ├── 1f44b-8A059.svg
│ ├── 1f44c-59547.svg
│ ├── 1f44d-1f3fb-ED2AA.svg
│ ├── 1f44d-27259.svg
│ ├── 1f44f-3D381.svg
│ ├── 1f4a5-28689.svg
│ ├── 1f4aa-2FD27.svg
│ ├── 1f4af-4CFF5.svg
│ ├── 1f4b8-E3468.svg
│ ├── 1f4c6-44E30.svg
│ ├── 1f4dc-AC641.svg
│ ├── 1f50d-195C0.svg
│ ├── 1f525-8FE4F.svg
│ ├── 1f602-168C5.svg
│ ├── 1f604-BF863.svg
│ ├── 1f605-42B43.svg
│ ├── 1f606-BE94E.svg
│ ├── 1f607-0FB5B.svg
│ ├── 1f608-C031D.svg
│ ├── 1f609-9EC67.svg
│ ├── 1f60a-3283D.svg
│ ├── 1f60e-FF6EB.svg
│ ├── 1f60f-2BDEE.svg
│ ├── 1f616-1E722.svg
│ ├── 1f622-BDD22.svg
│ ├── 1f629-B734A.svg
│ ├── 1f62d-02603.svg
│ ├── 1f642-83E8A.svg
│ ├── 1f644-329A4.svg
│ ├── 1f645-200d-2642-fe0f-7C718.svg
│ ├── 1f647-03C74.svg
│ ├── 1f64c-7C820.svg
│ ├── 1f64f-22B8D.svg
│ ├── 1f680-A35CE.svg
│ ├── 1f685-9DAF2.svg
│ ├── 1f6a8-A8AB3.svg
│ ├── 1f6e1-24B8F.svg
│ ├── 1f911-F346C.svg
│ ├── 1f914-15707.svg
│ ├── 1f918-D4EDF.svg
│ ├── 1f91d-5A0F2.svg
│ ├── 1f91f-3629E.svg
│ ├── 1f923-5854E.svg
│ ├── 1f92f-FF4E0.svg
│ ├── 1f972-F415D.svg
│ ├── 1f973-88B39.svg
│ ├── 1f985-86704.svg
│ ├── 1f9d1-5BC80.svg
│ ├── 1f9f5-C59BD.svg
│ ├── 1fae1-B19DE.svg
│ ├── 1faf6-009D0.svg
│ ├── 2-ADBB4.png
│ ├── 201416e548301c474985cfff30a5c3cf-AF15B.png
│ ├── 23a7e58bdc28d6ad048874c84ad5fdb1-2F0D4.png
│ ├── 258a1ffc46d9e9c3872ad643ab9b4bd5-EE2DC.png
│ ├── 261d-23B11.svg
│ ├── 2620-8F5D5.svg
│ ├── 2696-15F4A.svg
│ ├── 26a1-7A124.svg
│ ├── 2705-0589F.svg
│ ├── 270c-CF58F.svg
│ ├── 2764-A3D25.svg
│ ├── 2764-fe0f-200d-1f525-0B2B8.svg
│ ├── 2795-3358E.svg
│ ├── 2b2652e618cdea6fd857a58f2e8bce33-31040.png
│ ├── 2bc9256840cf583765cbbee210b7c33a-A77F9.png
│ ├── 2c1e18acbcb9cdaeabfd7fc6f5090edf-CA387.png
│ ├── 2cd9d124f4a4485a1dcbaf67dd7460bb-2E13A.png
│ ├── 2de2bcb6fe2e5617e1d3dd4c56a5a8f1-DE975.png
│ ├── 3-FB033.png
│ ├── 32800799d91968c4534a7242647fff2b-0408E.png
│ ├── 32d9288c971a64c0392ebc8d31f250ef-57155.png
│ ├── 356e7fb4efc19f760e0524ae11c49385-41889.png
│ ├── 366b7bd30566c2cb7cfbe6ce4a9cb61e-62DA9.png
│ ├── 37745f5520f15b2d5e24f7cd11118290-87C96.png
│ ├── 389cdd876d49c2af64ce8a6c1117213f-48844.png
│ ├── 394983eda2eb8faf909901fe09d16b4b-BAFA3.png
│ ├── 4-4551A.png
│ ├── 402b68164a51455e395a06ad04fc04b5-D7A38.png
│ ├── 4155d983056d861c045620cf8e11d612-A5980.png
│ ├── 47a90c36a9d5ab41d808ed4927e2d160-09864.png
│ ├── 492fcf2c1088e22bbbcab07a754eab58-53405.png
│ ├── 4ab2406667fe4b7443bf50983abffd58-40A7F.png
│ ├── 4e9282a50f2a3ed6b40048e5212b1769-CCF1B.png
│ ├── 5-E9BDB.png
│ ├── 50bd8deba6527b5c796a9b33197754dc-A7667.png
│ ├── 520534c5d8407c48744b2a2c8eb20ab3-02152.png
│ ├── 540ea6004f83618c1b1465a041aff9e7-7066E.png
│ ├── 55afac51a32db1ff015fd3a7d901e67a-A5862.png
│ ├── 568d22b97293cdd2d9b7006198d6adbc-F0132.png
│ ├── 56c15eef36c64a10a889120b8f72d4aa-B788E.png
│ ├── 57f933c22cc450c304f93572a144b782-A12A3.png
│ ├── 59310062b6d5aa6af2d911cb4f109bc4-B8F92.png
│ ├── 593f36e88b1657d978d620f5152eca82-52AEA.png
│ ├── 5b71d15a9bcde45fd5520e3fb580eb53-E1A50.png
│ ├── 5c5c77bb24f58eb99091a23905d985bf-A57AE.png
│ ├── 5fd4eaf3a92a63920dfe6c4e8175c1df-7264A.png
│ ├── 6094e48ab77eb87fae4e3348c0d872b4-34FEF.png
│ ├── 66c54ad6b6c2224e66ef8148ab5b7bcc-9BDF6.png
│ ├── 67077645d7418d196b2b4b1802b0e371-325ED.png
│ ├── 674bc4b552acb3940dbf5ce93b4d950e-93677.png
│ ├── 67594ee4b4d1fc03bca468327a0d145b-BD76A.png
│ ├── 6768a32a0faa115570383f066cd11d9a-7DDFC.png
│ ├── 6ad4ef2f519afddce2d78021aa7dd099-B55F0.png
│ ├── 6ed42d9e748568dc846549b81266418b-5A740.png
│ ├── 701300a5bdd3bf5640bd1370251533e2-0DC47.png
│ ├── 70c3b5726fa1d66baa8242ef29dc8ab6-14466.png
│ ├── 736fd5dd97a08fbcf19a530329893b09-E4881.png
│ ├── 774308513191165992-08A98.png
│ ├── 781ac59e000d4a30ec89a098eba3089f-31BF0.png
│ ├── 78a49c84c097aeb7680c1ad90976136e-AA655.png
│ ├── 7e2fe7ca-98f4-4cb9-ae88-26857d12693f-765C7
│ ├── 7f35581a31226466d9210d485ae2eb16-24E87.png
│ ├── 80e24bbc2fada669f9f8a03aef044a7b-73586.png
│ ├── 851893827027075142-F23DF.png
│ ├── 851893827089727568-5FD38.png
│ ├── 851893827315826708-F59C0.png
│ ├── 851893828280909886-FBF42.png
│ ├── 876115f2f9141c72ca8d84cba7494819-82EB0.png
│ ├── 9010cff7dc5115048ddc82561051356b-12341.png
│ ├── 908bd59da48fa9885524ca92826826b5-CC910.png
│ ├── 910676187288846397-518CD.png
│ ├── 93f060e04ae9095b71d564c85c70fa36-A81A3.png
│ ├── 9542a3c6a8ce011c16ce81d61dc908f9-F344E.png
│ ├── 956295520211566612-ED9F4.png
│ ├── 970d2e2f00cd7ef2134a1a3f21326349-404EA.png
│ ├── 9743d0d8b5564acfdfeef2c6c63d5410-11A3C.png
│ ├── 977133670429261884-CA8EA.png
│ ├── 99a2c075fc8d2edc54055e3ee39434b5-2F94C.png
│ ├── 9bf2181404e658cab4039c07df56213f-E3E89.png
│ ├── F4aAYYhaUAM3yiq-7D9AC.jpg
│ ├── IV_fsyQ3_400x400-0B8DB.png
│ ├── Image_27-08-2023_at_20.24-8B9AB.jpg
│ ├── Screenshot_2023-08-29_at_15.40.57-C532A.png
│ ├── a2137aad94eca43e965735f01ae6b491-C6B0B.png
│ ├── a681a986fc31a9739459ccc096516151-9053D.png
│ ├── a6c082aabfad5975e93c39f8746c8c0e-EE99B.png
│ ├── a843ca0cb0c92c6fdcc28f6285bdcd6e-A7BB4.png
│ ├── aa8a8cf504d883f45a141e445c26ec7b-124E1.png
│ ├── aaeb97c3eb71d189670c03ef40cf07ef-96CF2.png
│ ├── abb480ed1510d7994e58bc85f8e989d6-66497.png
│ ├── ad1bdf970e39199a645d59618f8426cc-F4141.png
│ ├── ad7fffe7929e5acf397b9f7739608ac0-2ADC3.png
│ ├── af47db264f598a776eef080a2c7aee22-4D508.png
│ ├── apple-touch-icon-192x192-86515.png
│ ├── b0fa46fcf237f5497b71eea9d38eeeeb-2A6D7.png
│ ├── b35ccff921a31a8e868c330e5d401246-C4BC6.png
│ ├── b46ece5299d872d61abe6c57d0d48a96-636E9.png
│ ├── b4fead77f737aa7840a25e1cd39eb062-CEDEC.png
│ ├── bd6e705b7e22db04232dfaaf530eee5f-A1D9E.png
│ ├── bfc2c787394db4d115c31f5559cb5a4e-FEC2E.png
│ ├── brinks-truck-cash-5EADF.mp4
│ ├── c0d82faff46e636c3e88f1d883784d5f-86322.png
│ ├── c4-og-banner-D9756.png
│ ├── c4fbf35c3e69a04ebc3a8a32a0bd3514-A8D31.png
│ ├── c52a1071d93165609d5f6de10c3adc52-AF4D3.png
│ ├── c5c9cae9cd193f1eb0c18644d30be95c-B5DEB.png
│ ├── c616e441e02fbf7f8f4594b17761c02c-768C2.png
│ ├── c6b85a4a6ca07ab15a30a24f570be5b8-713C2.png
│ ├── c9cb30134c634c9e02d0c64df4922803-98E33.png
│ ├── cb23e87e4eb33d228ed3294f90188951-76405.png
│ ├── cc8374ec433b7627e95f914e72deb9a1-5C229.png
│ ├── cc8374ec433b7627e95f914e72deb9a1-BB812.png
│ ├── cdbaf8a684a1d55f92267077fc6d4b3d-3D937.png
│ ├── cdda6f1e6c41a3018f404150b14a2782-D643D.png
│ ├── d05992162b128265b0f4fd4543b46456-9F835.png
│ ├── d352b5d64239648acbeb7b6f310df0b8-E875A.png
│ ├── d35a0c87f7f9f5e7c67430ca9593af01-64365.png
│ ├── d3f97a856e4a3d331418942a8db9faed-16864.png
│ ├── d49d99ae4ed333ba30f620c77a31d81c-4E55A.png
│ ├── d6411e6ba59c11600c691e2d72a71639-F99CD.png
│ ├── d642f18d72ce83a77898d3e8c0f2191f-5911C.png
│ ├── d908f26413deadee5db9b9b34a50669c-B733D.png
│ ├── d97f3e8d356f132ef574047d91700189-63079.png
│ ├── dfacc77d68962a991f5a4c3b7859b4c2-BAB3E.png
│ ├── e05094b6b5e4c7bf278a14e60889b514-4119B.png
│ ├── e0cf4d29d1ee5e6985e6ae260e4f5473-B0288.png
│ ├── e38c9ea78a2dc496c99c0e6fcb288e91-F2224.png
│ ├── e40efc6413840564584af7bbf3103fd2-C7E50.png
│ ├── e62e325ddc1b1e595c6c52bb00b320c7-4CF2E.png
│ ├── e6f4ca0e498c6a1841fd2181890d7668-D7F35.png
│ ├── e9472a11f41d425badda92e53fc91864-F560D.png
│ ├── ea50dc5ad15ef52f5b76cc0c29334431-9D4D5.png
│ ├── ec283548018391e9a25a61215bd46007-2D6CA.png
│ ├── ec29e162c99a502f591715e569811ab5-4EBC6.png
│ ├── ec2bcb7830d93aed7b07ee0d3a51e605-19997.png
│ ├── f23d0ae29fcc5a63df0b1e99990a51f7-8A74E.png
│ ├── f49d701795e5aa0ae6eb38736a954638-6EE9B.png
│ ├── f4f73fc0c2e452cd53ec3b3138883251-C4CDF.png
│ ├── f8ee3d74786e5ca83e77844ce1b50a9f-E20FE.png
│ ├── f91c0ad3bd4337a3edab4633126f6652-94679.png
│ ├── fd61dd1a8ad38e5b2b9264a9ef490dd2-D1976.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
│ ├── image-0373A.png
│ ├── image-4-8E190.png
│ ├── image-48B32.png
│ ├── image-885F1.png
│ ├── image-B61C3.png
│ ├── image-BA1C6.png
│ ├── image-C0F5B.png
│ ├── image-F320E.png
│ ├── is-it-time-yet-20DF8.mp4
│ ├── lottie.min-99657.js
│ ├── solarized-dark.min-BA98F.css
│ └── staking-v0-FE4F7.1
├── Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt
└── Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files
│ ├── 7e2fe7ca-98f4-4cb9-ae88-26857d12693f-765C7
│ ├── F4aAYYhaUAM3yiq-7D9AC.jpg
│ ├── Image_27-08-2023_at_20.24-8B9AB.jpg
│ ├── Screenshot_2023-08-29_at_15.40.57-C532A.png
│ ├── brinks-truck-cash-92A2B.png
│ ├── c4-og-banner-D9756.png
│ ├── image-0373A.png
│ ├── image-4-8E190.png
│ ├── image-48B32.png
│ ├── image-885F1.png
│ ├── image-B61C3.png
│ ├── image-BA1C6.png
│ ├── image-C0F5B.png
│ ├── image-F320E.png
│ ├── is-it-time-yet-02C4D.png
│ └── staking-v0-FE4F7.1
├── docs
├── .gitkeep
├── actions.pdf
├── rewards.pdf
└── specs.pdf
├── foundry.toml
├── lib
└── merkleTree.ts
├── package.json
├── pnpm-lock.yaml
├── remappings.txt
├── scope.txt
├── scripts
├── BaseScenario.s.sol
├── DeployCommunityStakingPool.s.sol
├── DeployLINK.s.sol
├── DeployMigrationProxy.s.sol
├── DeployOperatorStakingPool.s.sol
├── DeployPriceFeedAlertsController.s.sol
├── DeployRewardVault.s.sol
├── DeployStakingTimelock.s.sol
├── DeployStakingV01.s.sol
├── abi
│ ├── CommunityStakingPool.json
│ ├── OperatorStakingPool.json
│ ├── PriceFeedAlertsController.json
│ └── RewardVault.json
├── generateABIFiles.ts
├── generateMerkleTree.ts
├── run-add-rewards-scenario.sh
└── scenarios
│ ├── Scenario_DeployContracts.s.sol
│ └── Scenario_WithAddedRewards.s.sol
├── slither.config.json
├── slither.txt
├── src
├── Migratable.sol
├── MigrationProxy.sol
├── PausableWithAccessControl.sol
├── alerts
│ └── PriceFeedAlertsController.sol
├── interfaces
│ ├── IAlertsController.sol
│ ├── IAlertsControllerOwner.sol
│ ├── IMerkleAccessController.sol
│ ├── IMigratable.sol
│ ├── IMigrationDataReceiver.sol
│ ├── IPausable.sol
│ ├── IRewardVault.sol
│ ├── ISlashable.sol
│ ├── IStakingOwner.sol
│ └── IStakingPool.sol
├── pools
│ ├── CommunityStakingPool.sol
│ ├── OperatorStakingPool.sol
│ └── StakingPoolBase.sol
├── rewards
│ └── RewardVault.sol
├── staking-v0.1
│ ├── RewardLib.sol
│ ├── SafeCast.sol
│ ├── Staking.sol
│ ├── StakingPoolLib.sol
│ └── interfaces
│ │ ├── IAlertsController.sol
│ │ ├── IMerkleAccessController.sol
│ │ ├── IMigratable.sol
│ │ ├── IStaking.sol
│ │ └── IStakingOwner.sol
├── tests
│ ├── AlertsController.sol
│ ├── Counter.sol
│ ├── LinkToken.sol
│ ├── PriceFeedAlertsControllerV2.sol
│ ├── StakingPoolBaseHarness.sol
│ ├── StakingPoolBaseV2.sol
│ └── TimelockReentrant.sol
└── timelock
│ ├── StakingTimelock.sol
│ └── Timelock.sol
├── test
├── BaseTest.t.sol
├── BaseTestTimelocked.t.sol
├── Constants.t.sol
├── ConstantsTimelocked.t.sol
├── Counter.t.sol
├── MigrationProxy.t.sol
├── StakingTimelock.t.sol
├── Timelock.t.sol
├── base-scenarios
│ ├── PriceFeedAlertsControllerScenarios.t.sol
│ ├── RewardVaultScenarios.t.sol
│ ├── StakingPoolScenarios.t.sol
│ └── StakingV01Scenarios.t.sol
├── gas
│ ├── Gas_CommunityStakingPool.t.sol
│ ├── Gas_MigrationProxy.t.sol
│ ├── Gas_OperatorStakingPool.t.sol
│ └── Gas_PriceFeedAlertsController.t.sol
├── integrations
│ ├── AddNewAlertingCondition.t.sol
│ ├── ReplaceMigrationProxy.t.sol
│ ├── UpgradeOperatorStakingPool.t.sol
│ ├── UpgradePriceFeedAlertsController.t.sol
│ └── UpgradeRewardVault.t.sol
├── interfaces
│ ├── IAccessControlDefaultAdminRulesTest.t.sol
│ ├── IInvariantTest.t.sol
│ ├── IOpenableTest.t.sol
│ ├── IPausableTest.t.sol
│ ├── IRewardVaultTest.t.sol
│ └── IStakingPoolTest.t.sol
├── invariants
│ ├── BaseInvariant.t.sol
│ ├── CommunityStakingPool.invariants.t.sol
│ ├── OperatorStakingPool.invariants.t.sol
│ ├── RewardVault.invariants.t.sol
│ ├── handlers
│ │ ├── CommunityStakingPoolHandler.t.sol
│ │ ├── OperatorStakingPoolHandler.t.sol
│ │ └── RewardVaultHandler.t.sol
│ └── helpers
│ │ ├── BaseTimeWarpable.t.sol
│ │ └── TimeWarper.t.sol
├── lib
│ └── merkleTree.test.ts
├── units
│ ├── alerts
│ │ ├── PriceFeedAlertsController.CanAlert.t.sol
│ │ ├── PriceFeedAlertsController.Migrate.t.sol
│ │ ├── PriceFeedAlertsController.RaiseAlert.t.sol
│ │ └── PriceFeedAlertsController.t.sol
│ ├── pools
│ │ ├── CommunityStakingPool.t.sol
│ │ ├── OperatorStakingPool.t.sol
│ │ └── StakingPoolBase.t.sol
│ └── rewards
│ │ ├── RewardVault.AddReward.t.sol
│ │ ├── RewardVault.ClaimReward.t.sol
│ │ ├── RewardVault.GetReward.t.sol
│ │ ├── RewardVault.UpdateReward.t.sol
│ │ └── RewardVault.t.sol
└── utils
│ ├── mockaddress12.csv
│ └── mockdata.ts
├── tools
├── .eslintrc.js
├── .solcover.js
├── .solhint.json
├── coverage.js
├── requirements.txt
├── slither.config.json
├── solhint
│ ├── index.js
│ ├── package.json
│ └── rules
│ │ ├── allCapsConstantStorageVariables.js
│ │ ├── explicitImports.js
│ │ ├── inheritedConstructorArgsNotInContractDefinition.js
│ │ ├── noBlockSingleIfReverts.js
│ │ ├── noHardhatImports.js
│ │ ├── noRequireStatements.js
│ │ ├── prefixImmutableVariablesWithI.js
│ │ ├── prefixInternalFunctionsWithUnderscore.js
│ │ ├── prefixPrivateFunctionsWithUnderscore.js
│ │ └── prefixStorageVariablesWithSUnderscore.js
└── tasks
│ ├── accounts.ts
│ ├── clean.ts
│ └── task-names.ts
└── tsconfig.json
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "lib/openzeppelin-contracts"]
2 | path = lib/openzeppelin-contracts
3 | url = https://github.com/OpenZeppelin/openzeppelin-contracts
4 | [submodule "lib/chainlink"]
5 | path = lib/chainlink
6 | url = https://github.com/smartcontractkit/chainlink
7 | [submodule "lib/solmate"]
8 | path = lib/solmate
9 | url = https://github.com/transmissions11/solmate
10 | [submodule "lib/forge-std"]
11 | path = lib/forge-std
12 | url = https://github.com/foundry-rs/forge-std
13 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2023 SmartContract ChainLink, Ltd.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/000ac5363e3f6dbccf99b0e7a27d2d3a-E863B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/000ac5363e3f6dbccf99b0e7a27d2d3a-E863B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/07379ae8c4160d368388819e98e09390-49FD8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/07379ae8c4160d368388819e98e09390-49FD8.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/08a051c6ef73c89fd5967637cbbb4acd-9A9A6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/08a051c6ef73c89fd5967637cbbb4acd-9A9A6.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/0ab6fddedfdca4dee0b54ab41ab4faad-3EFDA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/0ab6fddedfdca4dee0b54ab41ab4faad-3EFDA.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/0b34fc17129c43951b8f4849c2505ec4-DBF0F.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/0b34fc17129c43951b8f4849c2505ec4-DBF0F.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/0c3c3320c3e6aa3a03d03ef4431a326d-9E1E9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/0c3c3320c3e6aa3a03d03ef4431a326d-9E1E9.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/0c8e9b652a07346bede9f2908c1284cf-338CD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/0c8e9b652a07346bede9f2908c1284cf-338CD.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1-B2132.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1-B2132.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1080667809002037320-8957D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1080667809002037320-8957D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1083068770823721071-EE4F6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1083068770823721071-EE4F6.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1096768239796756510-66AD4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1096768239796756510-66AD4.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1110201692663857255-A8E42.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1110201692663857255-A8E42.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/146464eb9e5f1322355fc03324ad0077-EA70E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/146464eb9e5f1322355fc03324ad0077-EA70E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/14f8cbc620b0a89c2a11ca8deace58eb-DA2D1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/14f8cbc620b0a89c2a11ca8deace58eb-DA2D1.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/151b88dd88def5e46496fada6e326ada-65CA9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/151b88dd88def5e46496fada6e326ada-65CA9.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/15cdaa10c5644d913a1ab1f9f06288c1-8A82B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/15cdaa10c5644d913a1ab1f9f06288c1-8A82B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/188be8c99e89942dad132d5f7b774545-F428F.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/188be8c99e89942dad132d5f7b774545-F428F.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/19a1f05f738fab64e6c28329e2a85e31-452EF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/19a1f05f738fab64e6c28329e2a85e31-452EF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1b46faf0b094158572e6402e79edc5b4-A7DAD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1b46faf0b094158572e6402e79edc5b4-A7DAD.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1ba5ef0640bf5f2f1a05aa5508ce0411-5EA22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1ba5ef0640bf5f2f1a05aa5508ce0411-5EA22.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1c4a80121deeb5d2fdd1654a720538b4-2A197.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1c4a80121deeb5d2fdd1654a720538b4-2A197.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1cd3f55c4a43e79a9b4a12c3b932786d-8DCC0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1cd3f55c4a43e79a9b4a12c3b932786d-8DCC0.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f197-BB9F1.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f3c1-445DC.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f3c6-621A1.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f3fb-E58B7.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f3fc-4884A.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f410-A0700.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f440-6C64D.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f446-1f3fd-9C328.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f44b-1f3fc-DDA17.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f44b-8A059.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f44c-59547.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f44d-1f3fb-ED2AA.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f44d-27259.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f4a5-28689.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f4aa-2FD27.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f4af-4CFF5.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f4dc-AC641.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f50d-195C0.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f525-8FE4F.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f602-168C5.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f604-BF863.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f605-42B43.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f606-BE94E.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f608-C031D.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f609-9EC67.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f60a-3283D.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f60e-FF6EB.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f60f-2BDEE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f616-1E722.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f622-BDD22.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f629-B734A.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f62d-02603.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f642-83E8A.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f644-329A4.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f647-03C74.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f64f-22B8D.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f680-A35CE.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f685-9DAF2.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f6a8-A8AB3.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f6e1-24B8F.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f914-15707.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f918-D4EDF.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f91f-3629E.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f923-5854E.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f972-F415D.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f985-86704.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f9d1-5BC80.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1f9f5-C59BD.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/1faf6-009D0.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2-ADBB4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2-ADBB4.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/201416e548301c474985cfff30a5c3cf-AF15B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/201416e548301c474985cfff30a5c3cf-AF15B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/23a7e58bdc28d6ad048874c84ad5fdb1-2F0D4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/23a7e58bdc28d6ad048874c84ad5fdb1-2F0D4.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/258a1ffc46d9e9c3872ad643ab9b4bd5-EE2DC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/258a1ffc46d9e9c3872ad643ab9b4bd5-EE2DC.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/261d-23B11.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2696-15F4A.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/26a1-7A124.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2705-0589F.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/270c-CF58F.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2764-A3D25.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2795-3358E.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2b2652e618cdea6fd857a58f2e8bce33-31040.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2b2652e618cdea6fd857a58f2e8bce33-31040.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2bc9256840cf583765cbbee210b7c33a-A77F9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2bc9256840cf583765cbbee210b7c33a-A77F9.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2c1e18acbcb9cdaeabfd7fc6f5090edf-CA387.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2c1e18acbcb9cdaeabfd7fc6f5090edf-CA387.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2cd9d124f4a4485a1dcbaf67dd7460bb-2E13A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2cd9d124f4a4485a1dcbaf67dd7460bb-2E13A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2de2bcb6fe2e5617e1d3dd4c56a5a8f1-DE975.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/2de2bcb6fe2e5617e1d3dd4c56a5a8f1-DE975.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/3-FB033.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/3-FB033.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/32800799d91968c4534a7242647fff2b-0408E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/32800799d91968c4534a7242647fff2b-0408E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/32d9288c971a64c0392ebc8d31f250ef-57155.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/32d9288c971a64c0392ebc8d31f250ef-57155.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/356e7fb4efc19f760e0524ae11c49385-41889.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/356e7fb4efc19f760e0524ae11c49385-41889.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/366b7bd30566c2cb7cfbe6ce4a9cb61e-62DA9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/366b7bd30566c2cb7cfbe6ce4a9cb61e-62DA9.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/37745f5520f15b2d5e24f7cd11118290-87C96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/37745f5520f15b2d5e24f7cd11118290-87C96.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/389cdd876d49c2af64ce8a6c1117213f-48844.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/389cdd876d49c2af64ce8a6c1117213f-48844.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/394983eda2eb8faf909901fe09d16b4b-BAFA3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/394983eda2eb8faf909901fe09d16b4b-BAFA3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/4-4551A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/4-4551A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/402b68164a51455e395a06ad04fc04b5-D7A38.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/402b68164a51455e395a06ad04fc04b5-D7A38.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/4155d983056d861c045620cf8e11d612-A5980.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/4155d983056d861c045620cf8e11d612-A5980.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/47a90c36a9d5ab41d808ed4927e2d160-09864.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/47a90c36a9d5ab41d808ed4927e2d160-09864.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/492fcf2c1088e22bbbcab07a754eab58-53405.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/492fcf2c1088e22bbbcab07a754eab58-53405.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/4ab2406667fe4b7443bf50983abffd58-40A7F.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/4ab2406667fe4b7443bf50983abffd58-40A7F.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/4e9282a50f2a3ed6b40048e5212b1769-CCF1B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/4e9282a50f2a3ed6b40048e5212b1769-CCF1B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/5-E9BDB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/5-E9BDB.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/50bd8deba6527b5c796a9b33197754dc-A7667.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/50bd8deba6527b5c796a9b33197754dc-A7667.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/520534c5d8407c48744b2a2c8eb20ab3-02152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/520534c5d8407c48744b2a2c8eb20ab3-02152.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/540ea6004f83618c1b1465a041aff9e7-7066E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/540ea6004f83618c1b1465a041aff9e7-7066E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/55afac51a32db1ff015fd3a7d901e67a-A5862.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/55afac51a32db1ff015fd3a7d901e67a-A5862.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/568d22b97293cdd2d9b7006198d6adbc-F0132.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/568d22b97293cdd2d9b7006198d6adbc-F0132.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/56c15eef36c64a10a889120b8f72d4aa-B788E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/56c15eef36c64a10a889120b8f72d4aa-B788E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/57f933c22cc450c304f93572a144b782-A12A3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/57f933c22cc450c304f93572a144b782-A12A3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/59310062b6d5aa6af2d911cb4f109bc4-B8F92.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/59310062b6d5aa6af2d911cb4f109bc4-B8F92.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/593f36e88b1657d978d620f5152eca82-52AEA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/593f36e88b1657d978d620f5152eca82-52AEA.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/5b71d15a9bcde45fd5520e3fb580eb53-E1A50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/5b71d15a9bcde45fd5520e3fb580eb53-E1A50.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/5c5c77bb24f58eb99091a23905d985bf-A57AE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/5c5c77bb24f58eb99091a23905d985bf-A57AE.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/5fd4eaf3a92a63920dfe6c4e8175c1df-7264A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/5fd4eaf3a92a63920dfe6c4e8175c1df-7264A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/6094e48ab77eb87fae4e3348c0d872b4-34FEF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/6094e48ab77eb87fae4e3348c0d872b4-34FEF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/66c54ad6b6c2224e66ef8148ab5b7bcc-9BDF6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/66c54ad6b6c2224e66ef8148ab5b7bcc-9BDF6.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/67077645d7418d196b2b4b1802b0e371-325ED.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/67077645d7418d196b2b4b1802b0e371-325ED.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/674bc4b552acb3940dbf5ce93b4d950e-93677.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/674bc4b552acb3940dbf5ce93b4d950e-93677.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/67594ee4b4d1fc03bca468327a0d145b-BD76A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/67594ee4b4d1fc03bca468327a0d145b-BD76A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/6768a32a0faa115570383f066cd11d9a-7DDFC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/6768a32a0faa115570383f066cd11d9a-7DDFC.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/6ad4ef2f519afddce2d78021aa7dd099-B55F0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/6ad4ef2f519afddce2d78021aa7dd099-B55F0.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/6ed42d9e748568dc846549b81266418b-5A740.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/6ed42d9e748568dc846549b81266418b-5A740.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/701300a5bdd3bf5640bd1370251533e2-0DC47.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/701300a5bdd3bf5640bd1370251533e2-0DC47.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/70c3b5726fa1d66baa8242ef29dc8ab6-14466.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/70c3b5726fa1d66baa8242ef29dc8ab6-14466.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/736fd5dd97a08fbcf19a530329893b09-E4881.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/736fd5dd97a08fbcf19a530329893b09-E4881.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/774308513191165992-08A98.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/774308513191165992-08A98.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/781ac59e000d4a30ec89a098eba3089f-31BF0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/781ac59e000d4a30ec89a098eba3089f-31BF0.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/78a49c84c097aeb7680c1ad90976136e-AA655.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/78a49c84c097aeb7680c1ad90976136e-AA655.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/7e2fe7ca-98f4-4cb9-ae88-26857d12693f-765C7:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/7e2fe7ca-98f4-4cb9-ae88-26857d12693f-765C7
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/7f35581a31226466d9210d485ae2eb16-24E87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/7f35581a31226466d9210d485ae2eb16-24E87.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/80e24bbc2fada669f9f8a03aef044a7b-73586.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/80e24bbc2fada669f9f8a03aef044a7b-73586.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/851893827027075142-F23DF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/851893827027075142-F23DF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/851893827089727568-5FD38.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/851893827089727568-5FD38.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/851893827315826708-F59C0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/851893827315826708-F59C0.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/851893828280909886-FBF42.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/851893828280909886-FBF42.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/876115f2f9141c72ca8d84cba7494819-82EB0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/876115f2f9141c72ca8d84cba7494819-82EB0.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/9010cff7dc5115048ddc82561051356b-12341.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/9010cff7dc5115048ddc82561051356b-12341.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/908bd59da48fa9885524ca92826826b5-CC910.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/908bd59da48fa9885524ca92826826b5-CC910.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/910676187288846397-518CD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/910676187288846397-518CD.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/93f060e04ae9095b71d564c85c70fa36-A81A3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/93f060e04ae9095b71d564c85c70fa36-A81A3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/9542a3c6a8ce011c16ce81d61dc908f9-F344E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/9542a3c6a8ce011c16ce81d61dc908f9-F344E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/956295520211566612-ED9F4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/956295520211566612-ED9F4.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/970d2e2f00cd7ef2134a1a3f21326349-404EA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/970d2e2f00cd7ef2134a1a3f21326349-404EA.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/9743d0d8b5564acfdfeef2c6c63d5410-11A3C.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/9743d0d8b5564acfdfeef2c6c63d5410-11A3C.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/977133670429261884-CA8EA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/977133670429261884-CA8EA.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/99a2c075fc8d2edc54055e3ee39434b5-2F94C.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/99a2c075fc8d2edc54055e3ee39434b5-2F94C.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/9bf2181404e658cab4039c07df56213f-E3E89.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/9bf2181404e658cab4039c07df56213f-E3E89.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/F4aAYYhaUAM3yiq-7D9AC.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/F4aAYYhaUAM3yiq-7D9AC.jpg
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/IV_fsyQ3_400x400-0B8DB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/IV_fsyQ3_400x400-0B8DB.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/Image_27-08-2023_at_20.24-8B9AB.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/Image_27-08-2023_at_20.24-8B9AB.jpg
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/Screenshot_2023-08-29_at_15.40.57-C532A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/Screenshot_2023-08-29_at_15.40.57-C532A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/a2137aad94eca43e965735f01ae6b491-C6B0B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/a2137aad94eca43e965735f01ae6b491-C6B0B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/a681a986fc31a9739459ccc096516151-9053D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/a681a986fc31a9739459ccc096516151-9053D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/a6c082aabfad5975e93c39f8746c8c0e-EE99B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/a6c082aabfad5975e93c39f8746c8c0e-EE99B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/a843ca0cb0c92c6fdcc28f6285bdcd6e-A7BB4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/a843ca0cb0c92c6fdcc28f6285bdcd6e-A7BB4.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/aa8a8cf504d883f45a141e445c26ec7b-124E1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/aa8a8cf504d883f45a141e445c26ec7b-124E1.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/aaeb97c3eb71d189670c03ef40cf07ef-96CF2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/aaeb97c3eb71d189670c03ef40cf07ef-96CF2.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/abb480ed1510d7994e58bc85f8e989d6-66497.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/abb480ed1510d7994e58bc85f8e989d6-66497.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ad1bdf970e39199a645d59618f8426cc-F4141.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ad1bdf970e39199a645d59618f8426cc-F4141.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ad7fffe7929e5acf397b9f7739608ac0-2ADC3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ad7fffe7929e5acf397b9f7739608ac0-2ADC3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/af47db264f598a776eef080a2c7aee22-4D508.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/af47db264f598a776eef080a2c7aee22-4D508.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/apple-touch-icon-192x192-86515.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/apple-touch-icon-192x192-86515.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/b0fa46fcf237f5497b71eea9d38eeeeb-2A6D7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/b0fa46fcf237f5497b71eea9d38eeeeb-2A6D7.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/b35ccff921a31a8e868c330e5d401246-C4BC6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/b35ccff921a31a8e868c330e5d401246-C4BC6.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/b46ece5299d872d61abe6c57d0d48a96-636E9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/b46ece5299d872d61abe6c57d0d48a96-636E9.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/b4fead77f737aa7840a25e1cd39eb062-CEDEC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/b4fead77f737aa7840a25e1cd39eb062-CEDEC.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/bd6e705b7e22db04232dfaaf530eee5f-A1D9E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/bd6e705b7e22db04232dfaaf530eee5f-A1D9E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/bfc2c787394db4d115c31f5559cb5a4e-FEC2E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/bfc2c787394db4d115c31f5559cb5a4e-FEC2E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/brinks-truck-cash-5EADF.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/brinks-truck-cash-5EADF.mp4
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c0d82faff46e636c3e88f1d883784d5f-86322.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c0d82faff46e636c3e88f1d883784d5f-86322.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c4-og-banner-D9756.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c4-og-banner-D9756.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c4fbf35c3e69a04ebc3a8a32a0bd3514-A8D31.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c4fbf35c3e69a04ebc3a8a32a0bd3514-A8D31.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c52a1071d93165609d5f6de10c3adc52-AF4D3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c52a1071d93165609d5f6de10c3adc52-AF4D3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c5c9cae9cd193f1eb0c18644d30be95c-B5DEB.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c5c9cae9cd193f1eb0c18644d30be95c-B5DEB.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c616e441e02fbf7f8f4594b17761c02c-768C2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c616e441e02fbf7f8f4594b17761c02c-768C2.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c6b85a4a6ca07ab15a30a24f570be5b8-713C2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c6b85a4a6ca07ab15a30a24f570be5b8-713C2.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c9cb30134c634c9e02d0c64df4922803-98E33.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/c9cb30134c634c9e02d0c64df4922803-98E33.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/cb23e87e4eb33d228ed3294f90188951-76405.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/cb23e87e4eb33d228ed3294f90188951-76405.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/cc8374ec433b7627e95f914e72deb9a1-5C229.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/cc8374ec433b7627e95f914e72deb9a1-5C229.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/cc8374ec433b7627e95f914e72deb9a1-BB812.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/cc8374ec433b7627e95f914e72deb9a1-BB812.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/cdbaf8a684a1d55f92267077fc6d4b3d-3D937.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/cdbaf8a684a1d55f92267077fc6d4b3d-3D937.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/cdda6f1e6c41a3018f404150b14a2782-D643D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/cdda6f1e6c41a3018f404150b14a2782-D643D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d05992162b128265b0f4fd4543b46456-9F835.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d05992162b128265b0f4fd4543b46456-9F835.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d352b5d64239648acbeb7b6f310df0b8-E875A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d352b5d64239648acbeb7b6f310df0b8-E875A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d35a0c87f7f9f5e7c67430ca9593af01-64365.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d35a0c87f7f9f5e7c67430ca9593af01-64365.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d3f97a856e4a3d331418942a8db9faed-16864.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d3f97a856e4a3d331418942a8db9faed-16864.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d49d99ae4ed333ba30f620c77a31d81c-4E55A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d49d99ae4ed333ba30f620c77a31d81c-4E55A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d6411e6ba59c11600c691e2d72a71639-F99CD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d6411e6ba59c11600c691e2d72a71639-F99CD.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d642f18d72ce83a77898d3e8c0f2191f-5911C.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d642f18d72ce83a77898d3e8c0f2191f-5911C.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d908f26413deadee5db9b9b34a50669c-B733D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d908f26413deadee5db9b9b34a50669c-B733D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d97f3e8d356f132ef574047d91700189-63079.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/d97f3e8d356f132ef574047d91700189-63079.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/dfacc77d68962a991f5a4c3b7859b4c2-BAB3E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/dfacc77d68962a991f5a4c3b7859b4c2-BAB3E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e05094b6b5e4c7bf278a14e60889b514-4119B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e05094b6b5e4c7bf278a14e60889b514-4119B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e0cf4d29d1ee5e6985e6ae260e4f5473-B0288.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e0cf4d29d1ee5e6985e6ae260e4f5473-B0288.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e38c9ea78a2dc496c99c0e6fcb288e91-F2224.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e38c9ea78a2dc496c99c0e6fcb288e91-F2224.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e40efc6413840564584af7bbf3103fd2-C7E50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e40efc6413840564584af7bbf3103fd2-C7E50.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e62e325ddc1b1e595c6c52bb00b320c7-4CF2E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e62e325ddc1b1e595c6c52bb00b320c7-4CF2E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e6f4ca0e498c6a1841fd2181890d7668-D7F35.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e6f4ca0e498c6a1841fd2181890d7668-D7F35.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e9472a11f41d425badda92e53fc91864-F560D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/e9472a11f41d425badda92e53fc91864-F560D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ea50dc5ad15ef52f5b76cc0c29334431-9D4D5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ea50dc5ad15ef52f5b76cc0c29334431-9D4D5.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ec283548018391e9a25a61215bd46007-2D6CA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ec283548018391e9a25a61215bd46007-2D6CA.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ec29e162c99a502f591715e569811ab5-4EBC6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ec29e162c99a502f591715e569811ab5-4EBC6.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ec2bcb7830d93aed7b07ee0d3a51e605-19997.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ec2bcb7830d93aed7b07ee0d3a51e605-19997.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/f23d0ae29fcc5a63df0b1e99990a51f7-8A74E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/f23d0ae29fcc5a63df0b1e99990a51f7-8A74E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/f49d701795e5aa0ae6eb38736a954638-6EE9B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/f49d701795e5aa0ae6eb38736a954638-6EE9B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/f4f73fc0c2e452cd53ec3b3138883251-C4CDF.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/f4f73fc0c2e452cd53ec3b3138883251-C4CDF.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/f8ee3d74786e5ca83e77844ce1b50a9f-E20FE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/f8ee3d74786e5ca83e77844ce1b50a9f-E20FE.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/f91c0ad3bd4337a3edab4633126f6652-94679.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/f91c0ad3bd4337a3edab4633126f6652-94679.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/fd61dd1a8ad38e5b2b9264a9ef490dd2-D1976.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/fd61dd1a8ad38e5b2b9264a9ef490dd2-D1976.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-italic-400-E988B.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-italic-400-E988B.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-italic-500-0777F.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-italic-500-0777F.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-italic-600-CB411.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-italic-600-CB411.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-italic-700-891AC.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-italic-700-891AC.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-italic-800-D36B0.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-italic-800-D36B0.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-normal-400-1456D.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-normal-400-1456D.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-normal-500-89CE5.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-normal-500-89CE5.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-normal-600-C1EA8.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-normal-600-C1EA8.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-normal-700-1949A.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-normal-700-1949A.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-normal-800-58487.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/ggsans-normal-800-58487.woff2
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-0373A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-0373A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-4-8E190.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-4-8E190.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-48B32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-48B32.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-885F1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-885F1.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-B61C3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-B61C3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-BA1C6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-BA1C6.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-C0F5B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-C0F5B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-F320E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/image-F320E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/is-it-time-yet-20DF8.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/is-it-time-yet-20DF8.mp4
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/solarized-dark.min-BA98F.css:
--------------------------------------------------------------------------------
1 | .hljs{display:block;overflow-x:auto;padding:.5em;background:#002b36;color:#839496}.hljs-comment,.hljs-quote{color:#586e75}.hljs-keyword,.hljs-selector-tag,.hljs-addition{color:#859900}.hljs-number,.hljs-string,.hljs-meta .hljs-meta-string,.hljs-literal,.hljs-doctag,.hljs-regexp{color:#2aa198}.hljs-title,.hljs-section,.hljs-name,.hljs-selector-id,.hljs-selector-class{color:#268bd2}.hljs-attribute,.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-class .hljs-title,.hljs-type{color:#b58900}.hljs-symbol,.hljs-bullet,.hljs-subst,.hljs-meta,.hljs-meta .hljs-keyword,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-link{color:#cb4b16}.hljs-built_in,.hljs-deletion{color:#dc322f}.hljs-formula{background:#073642}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/staking-v0-FE4F7.1:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].html_Files/staking-v0-FE4F7.1
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/7e2fe7ca-98f4-4cb9-ae88-26857d12693f-765C7:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/7e2fe7ca-98f4-4cb9-ae88-26857d12693f-765C7
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/F4aAYYhaUAM3yiq-7D9AC.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/F4aAYYhaUAM3yiq-7D9AC.jpg
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/Image_27-08-2023_at_20.24-8B9AB.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/Image_27-08-2023_at_20.24-8B9AB.jpg
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/Screenshot_2023-08-29_at_15.40.57-C532A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/Screenshot_2023-08-29_at_15.40.57-C532A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/brinks-truck-cash-92A2B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/brinks-truck-cash-92A2B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/c4-og-banner-D9756.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/c4-og-banner-D9756.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-0373A.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-0373A.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-4-8E190.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-4-8E190.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-48B32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-48B32.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-885F1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-885F1.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-B61C3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-B61C3.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-BA1C6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-BA1C6.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-C0F5B.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-C0F5B.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-F320E.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/image-F320E.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/is-it-time-yet-02C4D.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/is-it-time-yet-02C4D.png
--------------------------------------------------------------------------------
/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/staking-v0-FE4F7.1:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/discord-export/Code4rena - ARCHIVE-Q3-2023 - chainlink-aug25 [1136357130635575306].txt_Files/staking-v0-FE4F7.1
--------------------------------------------------------------------------------
/docs/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/docs/.gitkeep
--------------------------------------------------------------------------------
/docs/actions.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/docs/actions.pdf
--------------------------------------------------------------------------------
/docs/rewards.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/docs/rewards.pdf
--------------------------------------------------------------------------------
/docs/specs.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-423n4/2023-08-chainlink/b9fe3ac52a3dd6948ff9dc83933dbc2154af2824/docs/specs.pdf
--------------------------------------------------------------------------------
/foundry.toml:
--------------------------------------------------------------------------------
1 | [profile.default]
2 | src = 'src'
3 | out = 'out'
4 | libs = ['lib']
5 | ignored_error_codes = ["unreachable", "license", "code-size"]
6 | fs_permissions = [{ access = "read-write", path = "./"}]
7 | # See more config options https://github.com/foundry-rs/foundry/tree/master/config
8 |
9 | [fmt]
10 | line_length = 100
11 | tab_width = 2
12 | multiline_func_header = 'params_first'
13 | quote_style = 'single'
14 | wrap_comments = true
15 | # https://book.getfoundry.sh/reference/config/formatter
16 |
17 | [profile.integration]
18 | test = 'test/integrations'
19 |
20 | [profile.invariant]
21 | test = 'test/invariants'
22 | # This is turned off because we'll need to copy all the validations
23 | # from the code to the tests. While writing tests, we should try to reduce
24 | # the number of reverts and make sure that they are the expected reverts.
25 | # fail_on_revert = true
26 |
27 | [profile.gas]
28 | test = 'test/gas'
29 | match-test = 'test_Gas_**'
30 |
31 | [profile.alerts]
32 | src = 'src/alerts'
33 | test = 'test/units/alerts'
34 |
35 | [profile.pools]
36 | src = 'src/pools'
37 | test = 'test/units/pools'
38 |
39 | [profile.rewards]
40 | src = 'src/rewards'
41 | test = 'test/units/rewards'
42 |
--------------------------------------------------------------------------------
/lib/merkleTree.ts:
--------------------------------------------------------------------------------
1 | import { StandardMerkleTree } from "@openzeppelin/merkle-tree";
2 |
3 | export function generateMerkleTree(allowlist: string[]): any {
4 | return StandardMerkleTree.of(allowlist.map(a => [a]), ['address']);
5 | }
6 |
7 | export function getProofs(allowlist: string[], tree: Record) {
8 | return allowlist.map((v: any) => tree.getProof([v]));
9 | }
10 |
11 | export function verifyMerkleProof({
12 | address,
13 | merkleProof,
14 | merkleRoot,
15 | }: {
16 | address: string;
17 | merkleProof: any;
18 | merkleRoot: string;
19 | }): boolean {
20 | return StandardMerkleTree.verify(merkleRoot, ['address'], [address], merkleProof);
21 | }
22 |
23 | export default generateMerkleTree;
--------------------------------------------------------------------------------
/remappings.txt:
--------------------------------------------------------------------------------
1 | @chainlink/=lib/chainlink/
2 | @openzeppelin/=lib/openzeppelin-contracts/
3 | @solmate/=lib/solmate/src/
--------------------------------------------------------------------------------
/scope.txt:
--------------------------------------------------------------------------------
1 | src/Migratable.sol
2 | src/MigrationProxy.sol
3 | src/PausableWithAccessControl.sol
4 | src/alerts/PriceFeedAlertsController.sol
5 | src/pools/CommunityStakingPool.sol
6 | src/pools/OperatorStakingPool.sol
7 | src/pools/StakingPoolBase.sol
8 | src/rewards/RewardVault.sol
9 | src/timelock/StakingTimelock.sol
10 | src/timelock/Timelock.sol
--------------------------------------------------------------------------------
/scripts/BaseScenario.s.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | import 'forge-std/Script.sol';
5 | import {LinkTokenInterface} from '@chainlink/contracts/src/v0.8/interfaces/LinkTokenInterface.sol';
6 | import {MigrationProxy} from '../src/MigrationProxy.sol';
7 | import {CommunityStakingPool} from '../src/pools/CommunityStakingPool.sol';
8 | import {OperatorStakingPool} from '../src/pools/OperatorStakingPool.sol';
9 | import {PriceFeedAlertsController} from '../src/alerts/PriceFeedAlertsController.sol';
10 | import {RewardVault} from '../src/rewards/RewardVault.sol';
11 | import {StakingV01} from '../src/staking-v0.1/Staking.sol';
12 | import {Constants} from '../test/Constants.t.sol';
13 |
14 | abstract contract BaseScenario is Script, Constants {
15 | CommunityStakingPool internal s_communityStakingPool;
16 | LinkTokenInterface internal s_LINK;
17 | MigrationProxy internal s_migrationProxy;
18 | StakingV01 internal s_stakingV01;
19 | OperatorStakingPool internal s_operatorStakingPool;
20 | PriceFeedAlertsController internal s_alertsController;
21 | RewardVault internal s_rewardVault;
22 |
23 | modifier usingBroadcast(uint256 privateKey) {
24 | vm.startBroadcast(privateKey);
25 | _;
26 | vm.stopBroadcast();
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/scripts/DeployLINK.s.sol:
--------------------------------------------------------------------------------
1 | // forge script scripts/DeployLINK.s.sol:DeployLINK --broadcast -vvvv --rpc-url $RPC_URL
2 | // SPDX-License-Identifier: MIT
3 | pragma solidity 0.8.19;
4 |
5 | import 'forge-std/Script.sol';
6 | import {OperatorStakingPool} from '../src/pools/OperatorStakingPool.sol';
7 | import {StakingPoolBase} from '../src/pools/StakingPoolBase.sol';
8 | import {Constants} from '../test/Constants.t.sol';
9 | import {LinkTokenInterface} from '@chainlink/contracts/src/v0.8/interfaces/LinkTokenInterface.sol';
10 | import {BaseScenario} from './BaseScenario.s.sol';
11 |
12 | contract DeployLINK is BaseScenario {
13 | function setUp() public virtual {}
14 |
15 | function run() public virtual {
16 | uint256 deployerPrivateKey = vm.envUint('PRIVATE_KEY');
17 | vm.startBroadcast(deployerPrivateKey);
18 |
19 | console.log('Deploying LINK... (deployer: %s)', vm.addr(deployerPrivateKey));
20 |
21 | // Deploy LINK
22 | s_LINK = LinkTokenInterface(deployCode('LinkToken.sol'));
23 |
24 | address linkAddr = vm.envOr('LINK_ADDRESS', address(0));
25 | if (linkAddr != address(s_LINK)) {
26 | vm.writeLine('.env', string.concat('LINK_ADDRESS=', vm.toString(address(s_LINK))));
27 | }
28 |
29 | vm.stopBroadcast();
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/scripts/DeployStakingTimelock.s.sol:
--------------------------------------------------------------------------------
1 | // forge script scripts/DeployStakingTimelock.s.sol:Run --broadcast -vvvv --rpc-url $RPC_URL
2 | // SPDX-License-Identifier: MIT
3 | pragma solidity 0.8.19;
4 |
5 | import 'forge-std/Script.sol';
6 |
7 | import {LinkTokenInterface} from '@chainlink/contracts/src/v0.8/interfaces/LinkTokenInterface.sol';
8 |
9 | import {StakingTimelock} from '../src/timelock/StakingTimelock.sol';
10 | import {ConstantsTimelocked} from '../test/ConstantsTimelocked.t.sol';
11 |
12 | contract Run is Script, ConstantsTimelocked {
13 | StakingTimelock internal s_stakingTimelock;
14 | address[] internal PROPOSERS = new address[](1);
15 | address[] internal EXECUTORS = new address[](1);
16 | address[] internal CANCELLERS = new address[](1);
17 |
18 | function setUp() public {}
19 |
20 | function run() public {
21 | uint256 deployerPrivateKey = vm.envUint('PRIVATE_KEY');
22 | vm.startBroadcast(deployerPrivateKey);
23 | address deployer = vm.addr(deployerPrivateKey);
24 |
25 | console.log('Deploying StakingTimelock... (deployer: %s)', deployer);
26 |
27 | address deployerAddr = vm.addr(deployerPrivateKey);
28 | PROPOSERS[0] = deployerAddr;
29 | EXECUTORS[0] = deployerAddr;
30 | CANCELLERS[0] = deployerAddr;
31 |
32 | s_stakingTimelock = new StakingTimelock(
33 | StakingTimelock.ConstructorParams({
34 | rewardVault: vm.envAddress('REWARD_VAULT'),
35 | communityStakingPool: vm.envAddress('COMMUNITY_STAKING_POOL'),
36 | operatorStakingPool: vm.envAddress('OPERATOR_STAKING_POOL'),
37 | alertsController: vm.envAddress('PF_ALERTS_CONTROLLER'),
38 | minDelay: MIN_DELAY,
39 | admin: deployerAddr,
40 | proposers: PROPOSERS,
41 | executors: EXECUTORS,
42 | cancellers: CANCELLERS
43 | })
44 | );
45 |
46 | vm.stopBroadcast();
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/scripts/generateABIFiles.ts:
--------------------------------------------------------------------------------
1 | import fs from 'fs';
2 |
3 | /* extract ABI file from compiler output
4 | ```
5 | ts-node ./generateAPIFiles.ts
6 | ```
7 | writes to ./abi folder
8 | */
9 |
10 | const filenames = ["RewardVault", "CommunityStakingPool", "OperatorStakingPool", "PriceFeedAlertsController"];
11 |
12 | filenames.forEach((filename) => {
13 | const file = "./out/" + filename + ".sol/" + filename + ".json";
14 | console.log(file);
15 | fs.readFile(file, "utf-8", (err, data) => {
16 | if (err) {
17 | console.log('err', err);
18 | return;
19 | }
20 |
21 | const abi = JSON.parse(data).abi;
22 | fs.writeFile("./scripts/abi/" + filename + ".json", JSON.stringify(abi), (err) => {
23 | if (err) {
24 | console.log('err', err);
25 | return;
26 | }
27 | });
28 | });
29 | });
30 |
--------------------------------------------------------------------------------
/scripts/generateMerkleTree.ts:
--------------------------------------------------------------------------------
1 | import { bytesToHex } from 'ethereum-cryptography/utils';
2 | import { generateMerkleTree, getProofs } from '../lib/merkleTree';
3 | import fs from 'fs';
4 |
5 | type Bytes = Uint8Array;
6 |
7 | function hex(b: Bytes): string {
8 | return '0x' + bytesToHex(b);
9 | }
10 |
11 | // No need to sanitize, display help etc.
12 | // main.then() style script with async function main() doesn't play well with fs.readFile
13 | const filename = process.argv[2];
14 | fs.readFile(filename, "utf-8", (err, data) => {
15 | if (err) {
16 | console.log('err', err);
17 | return;
18 | }
19 | // add quotes around each entry and square brackets at beginning & end.
20 | let jsonData = "[" + data.replace(/0x/g, "\"0x").replace(/,/g, "\",").replace(/\n/g, "") + "\"]";
21 | const allowlist = JSON.parse(jsonData);
22 | console.log('allowlist', allowlist);
23 |
24 | const tree = generateMerkleTree(allowlist);
25 | console.log('merkle tree hex', tree.tree.map(hex));
26 | console.log('merkle tree', JSON.stringify(tree.tree));
27 | console.log('merkle root', tree.root);
28 | console.log('proofs', getProofs(allowlist, tree));
29 | });
30 |
--------------------------------------------------------------------------------
/scripts/run-add-rewards-scenario.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # run local chain
4 | nohup anvil &
5 |
6 | # load env vars
7 | source .env
8 | echo "RPC_URL: ${RPC_URL}"
9 |
10 | # deploy contracts and add rewards
11 | forge script scripts/scenarios/Scenario_WithAddedRewards.s.sol:Scenario_WithAddedRewards --broadcast -vvvv --rpc-url $RPC_URL
12 |
--------------------------------------------------------------------------------
/scripts/scenarios/Scenario_WithAddedRewards.s.sol:
--------------------------------------------------------------------------------
1 | // forge script scripts/scenarios/Scenario_WithAddedRewards.s.sol:Scenario_WithAddedRewards
2 | // --broadcast -vvvv --rpc-url $RPC_URL
3 | // SPDX-License-Identifier: MIT
4 | pragma solidity 0.8.19;
5 |
6 | import {Scenario_DeployContracts} from './Scenario_DeployContracts.s.sol';
7 |
8 | import 'forge-std/console.sol';
9 |
10 | contract Scenario_WithAddedRewards is Scenario_DeployContracts {
11 | function setUp() public override(Scenario_DeployContracts) {}
12 |
13 | function run() public virtual override(Scenario_DeployContracts) {
14 | Scenario_DeployContracts.run();
15 | _fundRewardVault();
16 | }
17 |
18 | function _fundRewardVault() internal usingBroadcast(s_deployerPrivateKey) {
19 | address deployer = vm.addr(s_deployerPrivateKey);
20 | console.log(
21 | 'Funding Reward Vault at address %s... (rewarder: %s)', address(s_rewardVault), deployer
22 | );
23 | s_rewardVault.addReward(address(0), REWARD_AMOUNT, EMISSION_RATE);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/slither.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "detectors_to_exclude": "conformance-to-solidity-naming-conventions,solc-version,block-timestamp",
3 | "filter_paths": "openzeppelin|/lib/|/scripts/|/test/|/tests/|/staking-v0.1/",
4 | "solc_remaps": "@chainlink=lib/chainlink @openzeppelin=lib/openzeppelin-contracts @solmate=lib/solmate/src"
5 | }
6 |
--------------------------------------------------------------------------------
/src/Migratable.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | import {IMigratable} from './interfaces/IMigratable.sol';
5 |
6 | abstract contract Migratable is IMigratable {
7 | /// @notice The address of the new contract that this contract will be upgraded to.
8 | address internal s_migrationTarget;
9 |
10 | /// @inheritdoc IMigratable
11 | function setMigrationTarget(address newMigrationTarget) external virtual override {
12 | _validateMigrationTarget(newMigrationTarget);
13 |
14 | address oldMigrationTarget = s_migrationTarget;
15 | s_migrationTarget = newMigrationTarget;
16 |
17 | emit MigrationTargetSet(oldMigrationTarget, newMigrationTarget);
18 | }
19 |
20 | /// @notice Helper function for validating the migration target
21 | /// @param newMigrationTarget The address of the new migration target
22 | function _validateMigrationTarget(address newMigrationTarget) internal virtual {
23 | if (
24 | newMigrationTarget == address(0) || newMigrationTarget == address(this)
25 | || newMigrationTarget == s_migrationTarget || newMigrationTarget.code.length == 0
26 | ) {
27 | revert InvalidMigrationTarget();
28 | }
29 | }
30 |
31 | /// @inheritdoc IMigratable
32 | function getMigrationTarget() external view virtual override returns (address) {
33 | return s_migrationTarget;
34 | }
35 |
36 | /// @dev Reverts if the migration target is not set
37 | modifier validateMigrationTargetSet() {
38 | if (s_migrationTarget == address(0)) {
39 | revert InvalidMigrationTarget();
40 | }
41 | _;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/PausableWithAccessControl.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | import {AccessControlDefaultAdminRules} from
5 | '@openzeppelin/contracts/access/AccessControlDefaultAdminRules.sol';
6 | import {Pausable} from '@openzeppelin/contracts/security/Pausable.sol';
7 |
8 | import {IPausable} from './interfaces/IPausable.sol';
9 |
10 | abstract contract PausableWithAccessControl is IPausable, Pausable, AccessControlDefaultAdminRules {
11 | /// @notice This is the ID for the pauser role, which is given to the addresses that can pause and
12 | /// unpause the contract.
13 | /// @dev Hash: 65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a
14 | bytes32 public constant PAUSER_ROLE = keccak256('PAUSER_ROLE');
15 |
16 | constructor(
17 | uint48 adminRoleTransferDelay,
18 | address defaultAdmin
19 | ) AccessControlDefaultAdminRules(adminRoleTransferDelay, defaultAdmin) {}
20 |
21 | /// @inheritdoc IPausable
22 | function emergencyPause() external override onlyRole(PAUSER_ROLE) {
23 | _pause();
24 | }
25 |
26 | /// @inheritdoc IPausable
27 | function emergencyUnpause() external override onlyRole(PAUSER_ROLE) {
28 | _unpause();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/interfaces/IAlertsController.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | interface IAlertsController {
5 | /// @notice This function creates an alert for an unhealthy Chainlink service
6 | /// @param data Optional payload
7 | function raiseAlert(bytes calldata data) external;
8 |
9 | /// @notice This function returns true if the alerter may raise an alert
10 | /// to claim rewards and false otherwise
11 | /// @param alerter The alerter's address
12 | /// @param data Optional payload
13 | /// @return True if alerter can alert, false otherwise
14 | function canAlert(address alerter, bytes calldata data) external view returns (bool);
15 |
16 | /// @notice This function returns the staking pools connected to this alerts controller
17 | /// @return address[] The staking pools
18 | function getStakingPools() external view returns (address[] memory);
19 | }
20 |
--------------------------------------------------------------------------------
/src/interfaces/IAlertsControllerOwner.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | interface IAlertsControllerOwner {
5 | /// @notice Allows the contract owner to set the list of operator addresses who are
6 | /// subject to slashing.
7 | /// @param operators New list of operator staker addresses
8 | /// @param data Optional payload
9 | function setSlashableOperators(address[] calldata operators, bytes calldata data) external;
10 |
11 | /// @notice Returns the slashable operators.
12 | /// @param data Optional payload
13 | /// @return The list of slashable operators' addresses.
14 | function getSlashableOperators(bytes calldata data) external view returns (address[] memory);
15 | }
16 |
--------------------------------------------------------------------------------
/src/interfaces/IMerkleAccessController.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | interface IMerkleAccessController {
5 | /// @notice Emitted when the contract owner updates the staking allowlist
6 | /// @param newMerkleRoot The root of a new Staking allowlist merkle tree
7 | event MerkleRootChanged(bytes32 newMerkleRoot);
8 |
9 | /// @notice Validates if a community staker has access to the private staking pool
10 | /// @param staker The community staker's address
11 | /// @param proof Merkle proof for the community staker's allowlist
12 | /// @return true If the staker has access to the private staking pool
13 | function hasAccess(address staker, bytes32[] calldata proof) external view returns (bool);
14 |
15 | /// @notice This function is called to update the staking allowlist in a private staking pool
16 | /// @dev Only callable by the contract owner
17 | /// @param newMerkleRoot Merkle Tree root, used to prove access for community stakers
18 | /// will be required at opening but can be removed at any time by the owner when
19 | /// staking access will be granted to the public.
20 | function setMerkleRoot(bytes32 newMerkleRoot) external;
21 |
22 | /// @notice This function returns the current root of the Staking allowlist merkle tree
23 | /// @return The current root of the Staking allowlist merkle tree
24 | function getMerkleRoot() external view returns (bytes32);
25 | }
26 |
--------------------------------------------------------------------------------
/src/interfaces/IMigratable.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | interface IMigratable {
5 | /// @notice This error is thrown when the owner tries to set the migration target to the
6 | /// zero address or an invalid address as well as when the migration target is not set and owner
7 | /// tries to migrate the contract.
8 | error InvalidMigrationTarget();
9 |
10 | /// @notice This event is emitted when the migration target is set
11 | /// @param oldMigrationTarget The previous migration target
12 | /// @param newMigrationTarget The updated migration target
13 | event MigrationTargetSet(address indexed oldMigrationTarget, address indexed newMigrationTarget);
14 |
15 | /// @notice Sets the address this contract will be upgraded to
16 | /// @param newMigrationTarget The address of the migration target
17 | function setMigrationTarget(address newMigrationTarget) external;
18 |
19 | /// @notice Returns the current migration target of the contract
20 | /// @return address The current migration target
21 | function getMigrationTarget() external view returns (address);
22 |
23 | /// @notice Migrates the contract
24 | /// @param data Optional calldata to call on new contract
25 | function migrate(bytes calldata data) external;
26 | }
27 |
--------------------------------------------------------------------------------
/src/interfaces/IMigrationDataReceiver.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | interface IMigrationDataReceiver {
5 | /// @notice Function for receiving the data from the migration source.
6 | /// @param data The migration data.
7 | function receiveMigrationData(bytes calldata data) external;
8 | }
9 |
--------------------------------------------------------------------------------
/src/interfaces/IPausable.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | interface IPausable {
5 | /// @notice This function pauses the contract
6 | /// @dev Sets the pause flag to true
7 | function emergencyPause() external;
8 |
9 | /// @notice This function unpauses the contract
10 | /// @dev Sets the pause flag to false
11 | function emergencyUnpause() external;
12 | }
13 |
--------------------------------------------------------------------------------
/src/staking-v0.1/SafeCast.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.16;
3 |
4 | library SafeCast {
5 | error CastError();
6 |
7 | /// @notice This is used to safely case timestamps to uint8
8 | uint256 private constant MAX_UINT_8 = type(uint8).max;
9 | /// @notice This is used to safely case timestamps to uint32
10 | uint256 private constant MAX_UINT_32 = type(uint32).max;
11 | /// @notice This is used to safely case timestamps to uint80
12 | uint256 private constant MAX_UINT_80 = type(uint80).max;
13 | /// @notice This is used to safely case timestamps to uint96
14 | uint256 private constant MAX_UINT_96 = type(uint96).max;
15 |
16 | function _toUint8(uint256 value) internal pure returns (uint8) {
17 | if (value > MAX_UINT_8) revert CastError();
18 | return uint8(value);
19 | }
20 |
21 | function _toUint32(uint256 value) internal pure returns (uint32) {
22 | if (value > MAX_UINT_32) revert CastError();
23 | return uint32(value);
24 | }
25 |
26 | function _toUint80(uint256 value) internal pure returns (uint80) {
27 | if (value > MAX_UINT_80) revert CastError();
28 | return uint80(value);
29 | }
30 |
31 | function _toUint96(uint256 value) internal pure returns (uint96) {
32 | if (value > MAX_UINT_96) revert CastError();
33 | return uint96(value);
34 | }
35 |
36 | // This is needed so that "forge coverage" will ignore this contract
37 | function test() public {}
38 | }
39 |
--------------------------------------------------------------------------------
/src/staking-v0.1/interfaces/IAlertsController.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.16;
3 |
4 | interface IAlertsController {
5 | /// @param alerter The address of an alerter
6 | /// @param roundId The feed's round ID that an alert has been raised for
7 | /// @param rewardAmount The amount of LINK rewarded to the alerter
8 | /// @notice Emitted when a valid alert is raised for a feed round
9 | event AlertRaised(address alerter, uint256 roundId, uint256 rewardAmount);
10 |
11 | /// @param roundId The feed's round ID that the alerter is trying to raise an alert for
12 | /// @notice This error is thrown when an alerter tries to raise an
13 | // alert for a round that has already been alerted.
14 | error AlertAlreadyExists(uint256 roundId);
15 |
16 | /// @notice This error is thrown when alerting conditions are not met and the
17 | /// alert is invalid.
18 | error AlertInvalid();
19 |
20 | /// @notice This function creates an alert for a stalled feed
21 | function raiseAlert() external;
22 |
23 | /// @notice This function checks to see whether the alerter may raise an alert
24 | /// to claim rewards
25 | function canAlert(address alerter) external view returns (bool);
26 | }
27 |
--------------------------------------------------------------------------------
/src/staking-v0.1/interfaces/IMerkleAccessController.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.16;
3 |
4 | interface IMerkleAccessController {
5 | /// @notice Emitted when the contract owner updates the staking allowlist
6 | /// @param newMerkleRoot The root of a new Staking allowlist merkle tree
7 | event MerkleRootChanged(bytes32 newMerkleRoot);
8 |
9 | /// @notice Validates if a community staker has access to the private staking pool
10 | /// @param staker The community staker's address
11 | /// @param proof Merkle proof for the community staker's allowlist
12 | function hasAccess(address staker, bytes32[] calldata proof) external view returns (bool);
13 |
14 | /// @notice This function is called to update the staking allowlist in a private staking pool
15 | /// @dev Only callable by the contract owner
16 | /// @param newMerkleRoot Merkle Tree root, used to prove access for community stakers
17 | /// will be required at start but can be removed at any time by the owner when
18 | /// staking access will be granted to the public.
19 | function setMerkleRoot(bytes32 newMerkleRoot) external;
20 |
21 | /// @return The current root of the Staking allowlist merkle tree
22 | function getMerkleRoot() external view returns (bytes32);
23 | }
24 |
--------------------------------------------------------------------------------
/src/tests/Counter.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | contract Counter {
5 | address private s_timelock;
6 | uint256 private s_number;
7 |
8 | constructor(address timelock) {
9 | s_timelock = timelock;
10 | }
11 |
12 | function setNumber(uint256 newNumber) public onlyTimelock {
13 | s_number = newNumber;
14 | }
15 |
16 | function increment() public onlyTimelock {
17 | s_number++;
18 | }
19 |
20 | function mockRevert() public pure {
21 | revert('Transaction reverted');
22 | }
23 |
24 | function number() external view returns (uint256) {
25 | return s_number;
26 | }
27 |
28 | modifier onlyTimelock() {
29 | require(msg.sender == s_timelock, 'Not timelock controller');
30 | _;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/tests/LinkToken.sol:
--------------------------------------------------------------------------------
1 | import {LinkToken} from '@chainlink/contracts/src/v0.4/LinkToken.sol';
2 |
--------------------------------------------------------------------------------
/src/tests/StakingPoolBaseHarness.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | import {StakingPoolBase} from '../pools/StakingPoolBase.sol';
5 |
6 | contract StakingPoolBaseHarness is StakingPoolBase {
7 | constructor(ConstructorParamsBase memory params) StakingPoolBase(params) {}
8 |
9 | function _validateOnTokenTransfer(address, address, bytes calldata) internal pure override {
10 | revert('Not implemented');
11 | }
12 |
13 | function _handleOpen() internal pure override {
14 | revert('Not implemented');
15 | }
16 |
17 | /// @dev This function is needed to bypass the whenOpen checks
18 | /// in StakingPoolBase functions while keeping _handleOpen unimplemented.
19 | function setIsOpen(bool isOpen) external onlyRole(DEFAULT_ADMIN_ROLE) {
20 | s_isOpen = isOpen;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/tests/TimelockReentrant.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | import '@openzeppelin/contracts/utils/Address.sol';
5 |
6 | contract TimelockReentrant {
7 | address private _reenterTarget;
8 | bytes private _reenterData;
9 | bool _reentered;
10 |
11 | function disableReentrancy() external {
12 | _reentered = true;
13 | }
14 |
15 | function enableRentrancy(address target, bytes calldata data) external {
16 | _reenterTarget = target;
17 | _reenterData = data;
18 | }
19 |
20 | function reenter() external {
21 | if (!_reentered) {
22 | _reentered = true;
23 | Address.functionCall(_reenterTarget, _reenterData);
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/test/ConstantsTimelocked.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | contract ConstantsTimelocked {
5 | uint256 internal constant MIN_DELAY = 2 days;
6 | uint256 internal constant DONE_TIMESTAMP = 1;
7 | uint256 internal constant DELAY_ONE_MONTH = 31 days;
8 | uint256 internal constant DELAY_TWO_DAYS = 48 hours;
9 |
10 | address internal constant ADMIN = address(10001);
11 | address internal constant PROPOSER_ONE = address(10002);
12 | address internal constant PROPOSER_TWO = address(10003);
13 |
14 | address internal constant EXECUTOR_ONE = address(10004);
15 | address internal constant EXECUTOR_TWO = address(10005);
16 |
17 | address internal constant CANCELLER_ONE = address(10006);
18 | address internal constant CANCELLER_TWO = address(10007);
19 |
20 | address internal constant BYPASSER_ONE = address(10008);
21 | address internal constant BYPASSER_TWO = address(10009);
22 |
23 | bytes32 internal constant NO_PREDECESSOR = bytes32('');
24 | bytes32 internal constant EMPTY_SALT = bytes32('');
25 | }
26 |
--------------------------------------------------------------------------------
/test/Counter.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity ^0.8.13;
3 |
4 | import {BaseTestTimelocked} from './BaseTestTimelocked.t.sol';
5 |
6 | contract CounterTest is BaseTestTimelocked {
7 | function testIncrement() public {
8 | changePrank(address(s_timelock));
9 | s_counter.increment();
10 | assertEq(s_counter.number(), 1);
11 | }
12 |
13 | function testSetNumber(uint256 x) public {
14 | changePrank(address(s_timelock));
15 | s_counter.setNumber(x);
16 | assertEq(s_counter.number(), x);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/test/gas/Gas_MigrationProxy.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | import {StakingPoolV01} from '../base-scenarios/StakingV01Scenarios.t.sol';
5 |
6 | contract Gas_StakingV01_Migrate_AsOperator is StakingPoolV01 {
7 | uint256 s_amountToStake;
8 | uint256 s_amountToWithdraw;
9 |
10 | function setUp() public override {
11 | StakingPoolV01.setUp();
12 |
13 | changePrank(OPERATOR_STAKER_ONE);
14 | uint256 migratableAmount = s_stakingV01.getStake(OPERATOR_STAKER_ONE)
15 | + s_stakingV01.getBaseReward(OPERATOR_STAKER_ONE)
16 | + s_stakingV01.getDelegationReward(OPERATOR_STAKER_ONE);
17 | s_amountToStake = OPERATOR_MIN_PRINCIPAL;
18 | s_amountToWithdraw = migratableAmount - s_amountToStake;
19 | }
20 |
21 | function test_Gas_MigrateFullAmount() public {
22 | bytes memory empty;
23 | s_stakingV01.migrate(empty);
24 | }
25 |
26 | function test_Gas_MigratePartialAmount() public {
27 | s_stakingV01.migrate(abi.encode(s_amountToStake, s_amountToWithdraw));
28 | }
29 | }
30 |
31 | contract Gas_StakingV01_Migrate_AsCommunityStaker is StakingPoolV01 {
32 | uint256 s_amountToStake;
33 | uint256 s_amountToWithdraw;
34 |
35 | function setUp() public override {
36 | StakingPoolV01.setUp();
37 |
38 | changePrank(COMMUNITY_STAKER_ONE);
39 | uint256 migratableAmount = s_stakingV01.getStake(COMMUNITY_STAKER_ONE)
40 | + s_stakingV01.getBaseReward(COMMUNITY_STAKER_ONE)
41 | + s_stakingV01.getDelegationReward(COMMUNITY_STAKER_ONE);
42 | s_amountToStake = COMMUNITY_MIN_PRINCIPAL;
43 | s_amountToWithdraw = migratableAmount - s_amountToStake;
44 | }
45 |
46 | function test_Gas_MigrateFullAmount() public {
47 | bytes memory empty;
48 | s_stakingV01.migrate(empty);
49 | }
50 |
51 | function test_Gas_MigratePartialAmount() public {
52 | s_stakingV01.migrate(abi.encode(s_amountToStake, s_amountToWithdraw));
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/test/gas/Gas_PriceFeedAlertsController.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | import {PriceFeedAlertsController_WithAllOperatorsAsSlashable} from
5 | '../base-scenarios/PriceFeedAlertsControllerScenarios.t.sol';
6 |
7 | contract Gas_PriceFeedAlertsController_InRegularPeriod is
8 | PriceFeedAlertsController_WithAllOperatorsAsSlashable
9 | {
10 | function setUp() public override {
11 | PriceFeedAlertsController_WithAllOperatorsAsSlashable.setUp();
12 | changePrank(OPERATOR_STAKER_ONE);
13 | }
14 |
15 | function test_Gas_RaiseAlertInRegularPeriod() public {
16 | s_pfAlertsController.raiseAlert(address(FEED));
17 | }
18 | }
19 |
20 | contract Gas_PriceFeedAlertsController_InPriorityPeriod is
21 | PriceFeedAlertsController_WithAllOperatorsAsSlashable
22 | {
23 | function setUp() public override {
24 | PriceFeedAlertsController_WithAllOperatorsAsSlashable.setUp();
25 | skip(REGULAR_PERIOD_THRESHOLD_SECONDS + 1);
26 | changePrank(COMMUNITY_STAKER_ONE);
27 | }
28 |
29 | function test_Gas_RaiseAlertInPriorityPeriod() public {
30 | s_pfAlertsController.raiseAlert(address(FEED));
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/test/interfaces/IAccessControlDefaultAdminRulesTest.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | interface IAccessControlDefaultAdminRulesTest {
5 | function test_DefaultValuesAreInitialized() external;
6 | function test_RevertWhen_DirectlyGrantDefaultAdminRole() external;
7 | function test_RevertWhen_DirectlyRevokeDefaultAdminRole() external;
8 | function test_RevertWhen_NonAdminBeginsDefaultAdminTransfer() external;
9 | function test_CurrentAdminCanBeginDefaultAdminTransfer() external;
10 | function test_CurrentAdminCanOverwritePendingDefaultAdminTransfer() external;
11 | function test_CurrentAdminCanOverwriteDefaultAdminTransferAfterDelayPassedAndIfNotAccepted()
12 | external;
13 | function test_RevertWhen_NonAdminCancelPendingDefaultAdminTransfer() external;
14 | function test_CurrentAdminCanCancelPendingDefaultAdminTransfer() external;
15 | function test_RevertWhen_NonPendingDefaultAdminAcceptsTransfer() external;
16 | function test_RevertWhen_PendingDefaultAdminAcceptsTransferBeforeDelayPassed() external;
17 | function test_PendingDefaultAdminCanAcceptTransferImmediatelyIfDelayIsZero() external;
18 | function test_PendingDefaultAdminCanAcceptTransferAfterDelayPassed() external;
19 | function test_RevertWhen_NonAdminChangesDelay() external;
20 | function test_CurrentAdminCanChangeDelay() external;
21 | function test_RevertWhen_NonAdminRollbackDelayChange() external;
22 | function test_CurrentAdminCanRollbackDelayChange() external;
23 | }
24 |
--------------------------------------------------------------------------------
/test/interfaces/IInvariantTest.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | interface IBaseInvariantTest {
5 | function currentTimestamp() external view returns (uint256);
6 | function setCurrentTimestamp(uint256 currentTimestamp) external;
7 | }
8 |
--------------------------------------------------------------------------------
/test/interfaces/IOpenableTest.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | interface IOpenableTest {
5 | function test_RevertWhen_NotOwnerOpens() external;
6 | function test_OwnerCanOpen() external;
7 | function test_RevertWhen_AlreadyOpened() external;
8 | function test_RevertWhen_NotOwnerCloses() external;
9 | function test_OwnerCanClose() external;
10 | function test_RevertWhen_NotYetOpened() external;
11 | function test_RevertWhen_AlreadyClosed() external;
12 | function test_RevertWhen_TryingToOpenAgain() external;
13 | function test_RevertWhen_RewardVaultNotOpen() external;
14 | function test_RevertWhen_RewardVaultPaused() external;
15 | }
16 |
--------------------------------------------------------------------------------
/test/interfaces/IPausableTest.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | interface IPausableTest {
5 | function test_RevertWhen_NotPauserEmergencyPause() external;
6 | function test_PauserCanEmergencyPause() external;
7 | function test_RevertWhen_PausingWhenAlreadyPaused() external;
8 | function test_RevertWhen_NotPauserEmergencyUnpause() external;
9 | function test_PauserCanEmergencyUnpause() external;
10 | function test_RevertWhen_UnpausingWhenAlreadyUnpaused() external;
11 | }
12 |
--------------------------------------------------------------------------------
/test/invariants/helpers/BaseTimeWarpable.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | import {Test} from 'forge-std/Test.sol';
5 | import {IBaseInvariantTest} from '../../interfaces/IInvariantTest.t.sol';
6 |
7 | /// @title This contract is used to warp and preserve current time for the targeted
8 | /// contracts/functions. All invariant target contracts should inherit from this contract.
9 | contract BaseTimeWarpable is Test {
10 | /// @notice The BaseInvariant test contract
11 | IBaseInvariantTest i_testContract;
12 |
13 | constructor(IBaseInvariantTest testContract) {
14 | i_testContract = testContract;
15 | }
16 |
17 | /// @notice Warps the time to the current stored timestamp in the test contract before executing a
18 | /// function and updates the current timestamp after the function execution.
19 | modifier useTimestamps() {
20 | vm.warp(i_testContract.currentTimestamp());
21 | _;
22 | i_testContract.setCurrentTimestamp(block.timestamp);
23 | }
24 |
25 | function test() public virtual {}
26 | }
27 |
--------------------------------------------------------------------------------
/test/invariants/helpers/TimeWarper.t.sol:
--------------------------------------------------------------------------------
1 | // SPDX-License-Identifier: MIT
2 | pragma solidity 0.8.19;
3 |
4 | import {BaseTimeWarpable} from './BaseTimeWarpable.t.sol';
5 | import {IBaseInvariantTest} from '../../interfaces/IInvariantTest.t.sol';
6 | import {RewardVaultHandler} from '../handlers/RewardVaultHandler.t.sol';
7 |
8 | /// @title This contract is used to randomly warp time during invariant tests by making this one of
9 | /// the invariant target contracts.
10 | contract TimeWarper is BaseTimeWarpable {
11 | constructor(IBaseInvariantTest testContract) BaseTimeWarpable(testContract) {}
12 |
13 | /// @notice Warps the time to a random timestamp.
14 | /// @param seed The seed used to generate the random timestamp
15 | function warp(uint256 seed) external useTimestamps {
16 | uint256 newTimestamp = bound(seed, block.timestamp + 1, block.timestamp + 30 days);
17 | vm.warp(newTimestamp);
18 | }
19 |
20 | function test() public override {}
21 | }
22 |
--------------------------------------------------------------------------------
/test/utils/mockaddress12.csv:
--------------------------------------------------------------------------------
1 | 0x0000000000000000000000000000000000000001,
2 | 0x0000000000000000000000000000000000000002
--------------------------------------------------------------------------------
/test/utils/mockdata.ts:
--------------------------------------------------------------------------------
1 | export const STAKER_1_ADDRESS = '0x1234485A1dC975Af14BB67e2b2ADCc6562cc76Cb';
2 | export const STAKER_1_ALLOCATION = 100;
3 | export const STAKER_1_MERKLE_PROOF = [
4 | '0x4037c6f743ab4de78e149bfd4c409b29b1da1d34ecbfa5ff222fe73f77f7dec3',
5 | '0xc38d88f82cc919c1cea67f2aa5ca78ddfff0c766ca1484c033cb53176245d10d',
6 | '0x73331ae2661435152eaef0a752ebf6d3411ad5b0bed808474c7bca3f733c57c3',
7 | ];
8 | export const TEST_SNAPSHOT: Record = {
9 | [STAKER_1_ADDRESS]: STAKER_1_ALLOCATION,
10 | '0x23452a5246d40B6f974f2575CEbc7929F2407252': 1000,
11 | '0x345689fBcF8d2382bf410E6e389275F6de0E7bD2': 100,
12 | '0x45673a171B4e9B6b3e091f2090C38a4d387b855d': 200,
13 | '0x5678BA65f83775FC77848a67BaA35FcD5CB390dB': 100,
14 | };
15 | export const TEST_MERKLE_ROOT = '0x1f0a6d9541b5c209a5317601c99b293af2c60b0356c15ef11882901fee884e51';
16 |
--------------------------------------------------------------------------------
/tools/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | parser: '@typescript-eslint/parser',
4 | plugins: ['@typescript-eslint'],
5 | extends: [
6 | 'eslint:recommended',
7 | 'plugin:@typescript-eslint/eslint-recommended',
8 | 'plugin:@typescript-eslint/recommended',
9 | 'prettier',
10 | ],
11 | env: {
12 | node: true,
13 | },
14 | rules: {
15 | '@explicit-module-boundary-types': 'off',
16 | '@typescript-eslint/no-inferrable-types': 'off',
17 | '@typescript-eslint/no-unused-vars': [
18 | 'error',
19 | {
20 | argsIgnorePattern: '_',
21 | varsIgnorePattern: '_',
22 | },
23 | ],
24 | },
25 | };
26 |
--------------------------------------------------------------------------------
/tools/.solcover.js:
--------------------------------------------------------------------------------
1 | const fsExtra = require('fs-extra');
2 |
3 | // The environment variables are loaded in hardhat.config.ts
4 | const mnemonic = process.env.MNEMONIC;
5 | if (!mnemonic) {
6 | throw new Error('Please set your MNEMONIC in a .env file');
7 | }
8 |
9 | module.exports = {
10 | istanbulReporter: ['html', 'lcov', 'text', 'json-summary'],
11 | onCompileComplete: async function (_config) {
12 | await run('typechain');
13 | },
14 | onIstanbulComplete: async function (_config) {
15 | // We need to do this because solcover generates bespoke artifacts.
16 | await fsExtra.remove('../artifacts');
17 | },
18 | providerOptions: {
19 | mnemonic,
20 | },
21 | skipFiles: ['mocks', 'test', 'fuzzing'],
22 | configureYulOptimizer: true,
23 | solcOptimizerDetails: {
24 | peephole: false,
25 | inliner: false,
26 | jumpdestRemover: false,
27 | orderLiterals: true, // <-- TRUE! Stack too deep when false
28 | deduplicate: false,
29 | cse: false,
30 | constantOptimizer: false,
31 | yul: true,
32 | },
33 | };
34 |
--------------------------------------------------------------------------------
/tools/.solhint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "solhint:recommended",
3 | "plugins": ["prettier", "chainlink-solidity"],
4 | "rules": {
5 | "compiler-version": ["off", "^0.7.0"],
6 | "const-name-snakecase": "off",
7 | "constructor-syntax": "error",
8 | "var-name-mixedcase": "off",
9 | "func-visibility": [
10 | "error",
11 | {
12 | "ignoreConstructors": true
13 | }
14 | ],
15 | "max-line-length": ["error", 160],
16 | "not-rely-on-time": "off",
17 | "prettier/prettier": [
18 | "off",
19 | {
20 | "endOfLine": "auto"
21 | }
22 | ],
23 | "no-empty-blocks": "off",
24 | "quotes": ["error", "single"],
25 | "reason-string": [
26 | "off",
27 | {
28 | "maxLength": 64
29 | }
30 | ],
31 | "chainlink-solidity/prefix-internal-functions-with-underscore": "warn",
32 | "chainlink-solidity/prefix-private-functions-with-underscore": "warn",
33 | "chainlink-solidity/prefix-storage-variables-with-s-underscore": "warn",
34 | "chainlink-solidity/prefix-immutable-variables-with-i": "warn",
35 | "chainlink-solidity/all-caps-constant-storage-variables": "warn",
36 | "chainlink-solidity/no-hardhat-imports": "warn",
37 | "chainlink-solidity/inherited-constructor-args-not-in-contract-definition": "warn",
38 | "chainlink-solidity/explicit-imports": "warn",
39 | "chainlink-solidity/no-require-statements": "warn",
40 | "chainlink-solidity/no-block-single-if-reverts": "warn"
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/tools/coverage.js:
--------------------------------------------------------------------------------
1 | const lcovJSON = require('../coverage.json');
2 |
3 | (() => {
4 | const analyze = (file, section, numHits, numFound) => {
5 | if (numHits < numFound) {
6 | const percentage = (100.0 * numHits) / numFound;
7 | throw new Error(`${section} coverage for ${file} is at ${percentage}%`);
8 | }
9 | };
10 |
11 | lcovJSON.forEach(({ file, branches, functions, lines }) => {
12 | console.log(`Analyzing coverage for ${file}`);
13 | analyze(file, 'Branch', branches.hit, branches.found);
14 | analyze(file, 'Function', functions.hit, functions.found);
15 | analyze(file, 'Line', lines.hit, lines.found);
16 | console.log(`Coverage for ${file} is at 100%!`);
17 | });
18 | })();
19 |
--------------------------------------------------------------------------------
/tools/requirements.txt:
--------------------------------------------------------------------------------
1 | slither-analyzer
2 |
--------------------------------------------------------------------------------
/tools/slither.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "detectors_to_exclude": "conformance-to-solidity-naming-conventions,assembly-usage,low-level-calls",
3 | "filter_paths": "node_modules/|contracts/tests/|contracts/fuzzing"
4 | }
5 |
--------------------------------------------------------------------------------
/tools/solhint/index.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable @typescript-eslint/no-var-requires */
2 | const PrefixInternalFunctionsWithUnderscore = require('./rules/prefixInternalFunctionsWithUnderscore.js');
3 | const PrefixPrivateFunctionsWithUnderscore = require('./rules/prefixPrivateFunctionsWithUnderscore.js');
4 | const PrefixStorageVariablesWithSUnderscore = require('./rules/prefixStorageVariablesWithSUnderscore.js');
5 | const PrefixImmutableVariablesWithI = require('./rules/prefixImmutableVariablesWithI');
6 | const AllCapsConstantStorageVariables = require('./rules/allCapsConstantStorageVariables.js');
7 | const NoHardhatImports = require('./rules/noHardhatImports.js');
8 | const InheritedConstructorArgsNotInContractDefinition = require('./rules/inheritedConstructorArgsNotInContractDefinition.js');
9 | const ExplicitImports = require('./rules/explicitImports.js');
10 | const NoRequireStatements = require('./rules/noRequireStatements.js');
11 | const NoBlockSingleIfReverts = require('./rules/noBlockSingleIfReverts.js');
12 |
13 | module.exports = [
14 | PrefixInternalFunctionsWithUnderscore,
15 | PrefixPrivateFunctionsWithUnderscore,
16 | PrefixStorageVariablesWithSUnderscore,
17 | PrefixImmutableVariablesWithI,
18 | AllCapsConstantStorageVariables,
19 | NoHardhatImports,
20 | InheritedConstructorArgsNotInContractDefinition,
21 | ExplicitImports,
22 | NoRequireStatements,
23 | NoBlockSingleIfReverts,
24 | ];
25 |
--------------------------------------------------------------------------------
/tools/solhint/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "solhint-plugin-chainlink-solidity",
3 | "version": "1.0.0",
4 | "main": "index.js"
5 | }
6 |
--------------------------------------------------------------------------------
/tools/solhint/rules/allCapsConstantStorageVariables.js:
--------------------------------------------------------------------------------
1 | class AllCapsConstantStorageVariables {
2 | constructor(reporter, config) {
3 | this.ruleId = 'all-caps-constant-storage-variables';
4 | this.reporter = reporter;
5 | this.config = config;
6 | }
7 |
8 | ContractDefinition(ctx) {
9 | const { subNodes } = ctx;
10 | for (let subNode of subNodes) {
11 | const { type } = subNode;
12 | if (type === 'StateVariableDeclaration') {
13 | for (let variable of subNode.variables) {
14 | const { type, isDeclaredConst, name } = variable;
15 | if (type === 'VariableDeclaration' && isDeclaredConst && name.toUpperCase() !== name) {
16 | this.reporter.error(
17 | variable,
18 | this.ruleId,
19 | `Constant variable ${name} is not in all caps, it should be ${name.toUpperCase()}`,
20 | );
21 | }
22 | }
23 | }
24 | }
25 | }
26 | }
27 |
28 | module.exports = AllCapsConstantStorageVariables;
29 |
--------------------------------------------------------------------------------
/tools/solhint/rules/explicitImports.js:
--------------------------------------------------------------------------------
1 | class ExplicitImports {
2 | constructor(reporter, config) {
3 | this.ruleId = 'explicit-imports';
4 | this.reporter = reporter;
5 | this.config = config;
6 | }
7 |
8 | ImportDirective(ctx) {
9 | const { symbolAliases, path } = ctx;
10 | if (symbolAliases == null) {
11 | this.reporter.error(ctx, this.ruleId, `Import "${path}" must explicitly import types from the imported file.`);
12 | }
13 | }
14 | }
15 |
16 | module.exports = ExplicitImports;
17 |
--------------------------------------------------------------------------------
/tools/solhint/rules/inheritedConstructorArgsNotInContractDefinition.js:
--------------------------------------------------------------------------------
1 | class InheritedConstructorArgsNotInContractDefinition {
2 | constructor(reporter, config) {
3 | this.ruleId = 'inherited-constructor-args-not-in-contract-definition';
4 | this.reporter = reporter;
5 | this.config = config;
6 | }
7 |
8 | ContractDefinition(ctx) {
9 | const { baseContracts } = ctx;
10 | for (let baseContract of baseContracts) {
11 | if (baseContract.arguments.length > 0) {
12 | this.reporter.error(
13 | baseContract,
14 | this.ruleId,
15 | `Inherited contract constructor arguments for ${baseContract.baseName.namePath} should be passed in the constructor definition, not the contract definition`,
16 | );
17 | }
18 | }
19 | }
20 | }
21 |
22 | module.exports = InheritedConstructorArgsNotInContractDefinition;
23 |
--------------------------------------------------------------------------------
/tools/solhint/rules/noBlockSingleIfReverts.js:
--------------------------------------------------------------------------------
1 | class NoBlockSingleIfReverts {
2 | constructor(reporter, config) {
3 | this.ruleId = 'no-block-single-if-reverts';
4 | this.reporter = reporter;
5 | this.config = config;
6 | }
7 |
8 | ContractDefinition(ctx) {
9 | try {
10 | const { subNodes } = ctx;
11 | for (let subNode of subNodes) {
12 | this.checkNodeForBlockedSingleRevertStatement(subNode);
13 | }
14 | } catch (e) {
15 | console.error(e);
16 | }
17 | }
18 |
19 | checkNodeForBlockedSingleRevertStatement(node) {
20 | const { type, body } = node;
21 | if (type === 'IfStatement') {
22 | const { trueBody, falseBody } = node;
23 | if (
24 | trueBody.statements &&
25 | trueBody.statements.length === 1 &&
26 | trueBody.statements[0].type === 'RevertStatement'
27 | ) {
28 | this.reporter.error(
29 | trueBody.statements[0],
30 | this.ruleId,
31 | 'If statements with only a single revert expression must not be in a block.',
32 | );
33 | } else {
34 | if (trueBody && trueBody.statements) this.checkBodyStatements(trueBody.statements);
35 | if (falseBody && falseBody.statements) this.checkBodyStatements(falseBody.statements);
36 | }
37 | } else if (body && body.statements) {
38 | this.checkBodyStatements(body.statements);
39 | }
40 | }
41 |
42 | checkBodyStatements(statements) {
43 | for (const statement of statements) {
44 | this.checkNodeForBlockedSingleRevertStatement(statement);
45 | }
46 | }
47 | }
48 |
49 | module.exports = NoBlockSingleIfReverts;
50 |
--------------------------------------------------------------------------------
/tools/solhint/rules/noHardhatImports.js:
--------------------------------------------------------------------------------
1 | class NoHardhatImports {
2 | constructor(reporter, config) {
3 | this.ruleId = 'no-hardhat-imports';
4 | this.reporter = reporter;
5 | this.config = config;
6 | }
7 |
8 | ImportDirective(ctx) {
9 | const { path } = ctx;
10 | if (path.startsWith('hardhat')) {
11 | this.reporter.error(ctx, this.ruleId, `Hardhat import ${path} not allowed`);
12 | }
13 | }
14 | }
15 |
16 | module.exports = NoHardhatImports;
17 |
--------------------------------------------------------------------------------
/tools/solhint/rules/noRequireStatements.js:
--------------------------------------------------------------------------------
1 | class NoRequireStatements {
2 | constructor(reporter, config) {
3 | this.ruleId = 'no-require-statements';
4 | this.reporter = reporter;
5 | this.config = config;
6 | }
7 |
8 | ContractDefinition(ctx) {
9 | const { subNodes } = ctx;
10 | for (let subNode of subNodes) {
11 | if (subNode.type === 'FunctionDefinition' || subNode.type === 'ModifierDefinition') {
12 | this.checkForRequireStatement(JSON.parse(JSON.stringify(subNode)));
13 | }
14 | }
15 | }
16 |
17 | checkForRequireStatement(node) {
18 | switch (node.type) {
19 | case 'ExpressionStatement':
20 | if (node.expression && node.expression.expression && node.expression.expression.name === 'require') {
21 | this.reporter.error(node, this.ruleId, `Use custom errors instead of revert statements`);
22 | }
23 | return;
24 | case 'IfStatement':
25 | if (node.trueBody) this.checkForRequireStatement(node.trueBody);
26 | if (node.falseBody) this.checkForRequireStatement(node.falseBody);
27 | if (!node.trueBody && !node.falseBody) {
28 | console.log(node);
29 | }
30 | return;
31 | default:
32 | if (!node.body) return;
33 | for (const statement of node.body.statements) {
34 | this.checkForRequireStatement(statement);
35 | }
36 | }
37 | }
38 | }
39 |
40 | module.exports = NoRequireStatements;
41 |
--------------------------------------------------------------------------------
/tools/solhint/rules/prefixImmutableVariablesWithI.js:
--------------------------------------------------------------------------------
1 | class PrefixImmutableVariablesWithI {
2 | constructor(reporter, config) {
3 | this.ruleId = 'prefix-immutable-variables-with-i';
4 | this.reporter = reporter;
5 | this.config = config;
6 | }
7 |
8 | ContractDefinition(ctx) {
9 | const { subNodes } = ctx;
10 | for (let subNode of subNodes) {
11 | const { type } = subNode;
12 | if (type === 'StateVariableDeclaration') {
13 | for (let variable of subNode.variables) {
14 | const { type, visibility, isImmutable, name } = variable;
15 | if (
16 | type === 'VariableDeclaration' &&
17 | visibility &&
18 | isImmutable && // immutable variables only
19 | !name.startsWith('i_')
20 | ) {
21 | this.reporter.error(subNode, this.ruleId, `Immutable variable ${name} is not prefixed with 'i_'`);
22 | }
23 | }
24 | }
25 | }
26 | }
27 | }
28 |
29 | module.exports = PrefixImmutableVariablesWithI;
30 |
--------------------------------------------------------------------------------
/tools/solhint/rules/prefixInternalFunctionsWithUnderscore.js:
--------------------------------------------------------------------------------
1 | class PrefixInternalFunctionsWithUnderscore {
2 | constructor(reporter, config) {
3 | this.ruleId = 'prefix-internal-functions-with-underscore';
4 | this.reporter = reporter;
5 | this.config = config;
6 | }
7 |
8 | ContractDefinition(ctx) {
9 | const { subNodes } = ctx;
10 | for (let subNode of subNodes) {
11 | const { type, visibility, name } = subNode;
12 | if (type === 'FunctionDefinition' && visibility === 'internal' && !name.startsWith('_')) {
13 | this.reporter.error(subNode, this.ruleId, `Internal function ${name} is not prefixed with underscore (_)`);
14 | }
15 | }
16 | }
17 | }
18 |
19 | module.exports = PrefixInternalFunctionsWithUnderscore;
20 |
--------------------------------------------------------------------------------
/tools/solhint/rules/prefixPrivateFunctionsWithUnderscore.js:
--------------------------------------------------------------------------------
1 | class PrefixPrivateFunctionsWithUnderscore {
2 | constructor(reporter, config) {
3 | this.ruleId = 'prefix-private-functions-with-underscore';
4 | this.reporter = reporter;
5 | this.config = config;
6 | }
7 |
8 | ContractDefinition(ctx) {
9 | const { subNodes } = ctx;
10 | for (let subNode of subNodes) {
11 | const { type, visibility, name } = subNode;
12 | if (type === 'FunctionDefinition' && visibility === 'private' && !name.startsWith('_')) {
13 | this.reporter.error(subNode, this.ruleId, `Private function ${name} is not prefixed with underscore (_)`);
14 | }
15 | }
16 | }
17 | }
18 |
19 | module.exports = PrefixPrivateFunctionsWithUnderscore;
20 |
--------------------------------------------------------------------------------
/tools/solhint/rules/prefixStorageVariablesWithSUnderscore.js:
--------------------------------------------------------------------------------
1 | class PrefixStorageVariablesWithSUnderscore {
2 | static applicableVisibilities = ['private', 'internal']; // public variables are ignored
3 |
4 | constructor(reporter, config) {
5 | this.ruleId = 'prefix-storage-variables-with-s-underscore';
6 | this.reporter = reporter;
7 | this.config = config;
8 | }
9 |
10 | ContractDefinition(ctx) {
11 | const { subNodes } = ctx;
12 | for (let subNode of subNodes) {
13 | const { type } = subNode;
14 | if (type === 'StateVariableDeclaration') {
15 | for (let variable of subNode.variables) {
16 | const { type, visibility, isDeclaredConst, isImmutable, name } = variable;
17 | if (
18 | type === 'VariableDeclaration' &&
19 | !isDeclaredConst && // const variables ignored
20 | !isImmutable && // immutable variables ignored
21 | PrefixStorageVariablesWithSUnderscore.applicableVisibilities.includes(visibility) &&
22 | !name.startsWith('s_')
23 | ) {
24 | this.reporter.error(subNode, this.ruleId, `Private / internal variable ${name} is not prefixed with s_`);
25 | }
26 | }
27 | }
28 | }
29 | }
30 | }
31 |
32 | module.exports = PrefixStorageVariablesWithSUnderscore;
33 |
--------------------------------------------------------------------------------
/tools/tasks/accounts.ts:
--------------------------------------------------------------------------------
1 | import { Signer } from '@ethersproject/abstract-signer';
2 | import { task } from 'hardhat/config';
3 |
4 | import { TASK_ACCOUNTS } from './task-names';
5 |
6 | task(TASK_ACCOUNTS, 'Prints the list of accounts', async (_taskArgs, hre) => {
7 | const accounts: Signer[] = await hre.ethers.getSigners();
8 |
9 | for (const account of accounts) {
10 | console.log(await account.getAddress());
11 | }
12 | });
13 |
--------------------------------------------------------------------------------
/tools/tasks/clean.ts:
--------------------------------------------------------------------------------
1 | import fsExtra from 'fs-extra';
2 | import { TASK_CLEAN } from 'hardhat/builtin-tasks/task-names';
3 | import { task } from 'hardhat/config';
4 |
5 | task(TASK_CLEAN, 'Overrides the standard clean task', async function (_taskArgs, { config }, runSuper) {
6 | await fsExtra.remove('./coverage');
7 | await fsExtra.remove('./coverage.json');
8 | if (config.typechain?.outDir) {
9 | await fsExtra.remove(config.typechain.outDir);
10 | }
11 | await runSuper();
12 | });
13 |
--------------------------------------------------------------------------------
/tools/tasks/task-names.ts:
--------------------------------------------------------------------------------
1 | export const TASK_ACCOUNTS: string = 'accounts';
2 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "esModuleInterop": true,
4 | "forceConsistentCasingInFileNames": true,
5 | "lib": [
6 | "es5",
7 | "es6",
8 | "dom",
9 | ],
10 | "module": "commonjs",
11 | "moduleResolution": "node",
12 | "noImplicitAny": true,
13 | "outDir": "dist",
14 | "resolveJsonModule": true,
15 | "sourceMap": true,
16 | "strict": true,
17 | "target": "es5"
18 | },
19 | "exclude": [
20 | "node_modules"
21 | ],
22 | "include": [
23 | "artifacts/**/*",
24 | "artifacts/**/*.json",
25 | "scripts/**/*",
26 | "tasks/**/*",
27 | "lib/merkleTree.ts",
28 | "test/**/*",
29 | "typechain/**/*",
30 | "types/**/*",
31 | "deploy/**/*"
32 | ],
33 | }
--------------------------------------------------------------------------------