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