Skip to content

Commit

Permalink
upgradable passport
Browse files Browse the repository at this point in the history
  • Loading branch information
rperez89 committed Jul 22, 2024
1 parent c4d5220 commit 33ef6e8
Show file tree
Hide file tree
Showing 29 changed files with 48 additions and 59 deletions.
6 changes: 6 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
[submodule "lib/safe-contracts"]
path = lib/safe-contracts
url = https://github.com/safe-global/safe-contracts
[submodule "lib/openzeppelin-foundry-upgrades"]
path = lib/openzeppelin-foundry-upgrades
url = https://github.com/OpenZeppelin/openzeppelin-foundry-upgrades
[submodule "lib/openzeppelin-contracts"]
path = lib/openzeppelin-contracts
url = https://github.com/OpenZeppelin/openzeppelin-contracts
[submodule "lib/openzeppelin-contracts-upgradeable"]
path = lib/openzeppelin-contracts-upgradeable
url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable
2 changes: 1 addition & 1 deletion pkg/contracts/out/Allo.sol/Allo.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/CVStrategy.sol/CVStrategy.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/CVStrategy.sol/IPointStrategy.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/CVStrategy.sol/StrategyStruct.json

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/ERC20.sol/ERC20.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/GV2ERC20.sol/GV2ERC20.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/IAllo.sol/IAllo.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/IERC20.sol/IERC20.json

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/IRegistry.sol/IRegistry.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/ISafe.sol/ISafe.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"abi":[{"type":"function","name":"getOwners","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"getOwners()":"a0e67e2b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pkg/contracts/src/ISafe.sol\":\"ISafe\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000},\"remappings\":[\":@openzeppelin/contracts/=lib/allo-v2/lib/openzeppelin-contracts/contracts/\",\":@prb/math/=lib/allo-v2/lib/v2-core/lib/prb-math/\",\":@prb/test/=lib/allo-v2/lib/v2-core/lib/prb-test/src/\",\":@sablier/v2-core/=lib/allo-v2/lib/v2-core/\",\":ERC1155/=lib/allo-v2/lib/hats-protocol/lib/ERC1155/\",\":allo-v2-contracts/=lib/allo-v2/contracts/\",\":allo-v2-test/=lib/allo-v2/test/\",\":allo-v2/=lib/allo-v2/\",\":ds-test/=lib/allo-v2/lib/forge-std/lib/ds-test/src/\",\":eas-contracts/=lib/allo-v2/lib/eas-contracts/contracts/\",\":eas-proxy/=lib/allo-v2/lib/eas-proxy/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/allo-v2/lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":hats-protocol/=lib/allo-v2/lib/hats-protocol/\",\":hedgey-vesting/=lib/allo-v2/lib/hedgey-vesting/contracts/\",\":openzeppelin-contracts-upgradeable/=lib/allo-v2/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":permit2/=lib/allo-v2/lib/permit2/\",\":prb-math/=lib/allo-v2/lib/v2-core/lib/prb-math/src/\",\":prb-test/=lib/allo-v2/lib/v2-core/lib/prb-test/src/\",\":safe-contracts/=lib/safe-contracts/\",\":solady/=lib/allo-v2/lib/solady/\",\":solarray/=lib/allo-v2/lib/v2-core/lib/solarray/src/\",\":solbase/=lib/allo-v2/lib/hats-protocol/lib/solbase/src/\",\":solmate/=lib/allo-v2/lib/permit2/lib/solmate/\",\":superfluid-protocol-monorepo/=lib/allo-v2/lib/superfluid-protocol-monorepo/packages/solidity-semantic-money/src/\",\":utils/=lib/allo-v2/lib/hats-protocol/lib/utils/\",\":v2-core/=lib/allo-v2/lib/v2-core/\"]},\"sources\":{\"pkg/contracts/src/ISafe.sol\":{\"keccak256\":\"0x878a210809bb684c42157a10f3f90350a67d0a4863f130499942b06f0f2c9143\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://fa2d71bd427c3415e98a2ee15ff673f3cc61c17f14d7087c5eedc83b55f6b0ef\",\"dweb:/ipfs/QmesVSmJQQzi6ys1cvhQFCJyDXchb736mT5bXks4Yp6Cbj\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"view","type":"function","name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/allo-v2/lib/openzeppelin-contracts/contracts/","@prb/math/=lib/allo-v2/lib/v2-core/lib/prb-math/","@prb/test/=lib/allo-v2/lib/v2-core/lib/prb-test/src/","@sablier/v2-core/=lib/allo-v2/lib/v2-core/","ERC1155/=lib/allo-v2/lib/hats-protocol/lib/ERC1155/","allo-v2-contracts/=lib/allo-v2/contracts/","allo-v2-test/=lib/allo-v2/test/","allo-v2/=lib/allo-v2/","ds-test/=lib/allo-v2/lib/forge-std/lib/ds-test/src/","eas-contracts/=lib/allo-v2/lib/eas-contracts/contracts/","eas-proxy/=lib/allo-v2/lib/eas-proxy/contracts/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-gas-snapshot/=lib/allo-v2/lib/permit2/lib/forge-gas-snapshot/src/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","hats-protocol/=lib/allo-v2/lib/hats-protocol/","hedgey-vesting/=lib/allo-v2/lib/hedgey-vesting/contracts/","openzeppelin-contracts-upgradeable/=lib/allo-v2/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/","permit2/=lib/allo-v2/lib/permit2/","prb-math/=lib/allo-v2/lib/v2-core/lib/prb-math/src/","prb-test/=lib/allo-v2/lib/v2-core/lib/prb-test/src/","safe-contracts/=lib/safe-contracts/","solady/=lib/allo-v2/lib/solady/","solarray/=lib/allo-v2/lib/v2-core/lib/solarray/src/","solbase/=lib/allo-v2/lib/hats-protocol/lib/solbase/src/","solmate/=lib/allo-v2/lib/permit2/lib/solmate/","superfluid-protocol-monorepo/=lib/allo-v2/lib/superfluid-protocol-monorepo/packages/solidity-semantic-money/src/","utils/=lib/allo-v2/lib/hats-protocol/lib/utils/","v2-core/=lib/allo-v2/lib/v2-core/"],"optimizer":{"enabled":true,"runs":1000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"pkg/contracts/src/ISafe.sol":"ISafe"},"evmVersion":"paris","libraries":{}},"sources":{"pkg/contracts/src/ISafe.sol":{"keccak256":"0x878a210809bb684c42157a10f3f90350a67d0a4863f130499942b06f0f2c9143","urls":["bzz-raw://fa2d71bd427c3415e98a2ee15ff673f3cc61c17f14d7087c5eedc83b55f6b0ef","dweb:/ipfs/QmesVSmJQQzi6ys1cvhQFCJyDXchb736mT5bXks4Yp6Cbj"],"license":"LGPL-3.0-only"}},"version":1},"id":112}
{"abi":[{"type":"function","name":"getOwners","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"getOwners()":"a0e67e2b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"pkg/contracts/src/ISafe.sol\":\"ISafe\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@openzeppelin/foundry/=lib/openzeppelin-foundry-upgrades/src/\",\":@prb/math/=lib/allo-v2/lib/v2-core/lib/prb-math/\",\":@prb/test/=lib/allo-v2/lib/v2-core/lib/prb-test/src/\",\":@sablier/v2-core/=lib/allo-v2/lib/v2-core/\",\":ERC1155/=lib/allo-v2/lib/hats-protocol/lib/ERC1155/\",\":allo-v2-contracts/=lib/allo-v2/contracts/\",\":allo-v2-test/=lib/allo-v2/test/\",\":allo-v2/=lib/allo-v2/\",\":ds-test/=lib/allo-v2/lib/forge-std/lib/ds-test/src/\",\":eas-contracts/=lib/allo-v2/lib/eas-contracts/contracts/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/allo-v2/lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":hats-protocol/=lib/allo-v2/lib/hats-protocol/\",\":openzeppelin-contracts-upgradeable/=lib/allo-v2/lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":permit2/=lib/allo-v2/lib/permit2/\",\":prb-math/=lib/allo-v2/lib/v2-core/lib/prb-math/src/\",\":prb-test/=lib/allo-v2/lib/v2-core/lib/prb-test/src/\",\":safe-contracts/=lib/safe-contracts/\",\":solady/=lib/allo-v2/lib/solady/\",\":solarray/=lib/allo-v2/lib/v2-core/lib/solarray/src/\",\":solbase/=lib/allo-v2/lib/hats-protocol/lib/solbase/src/\",\":solmate/=lib/allo-v2/lib/permit2/lib/solmate/\",\":utils/=lib/allo-v2/lib/hats-protocol/lib/utils/\",\":v2-core/=lib/allo-v2/lib/v2-core/\"]},\"sources\":{\"pkg/contracts/src/ISafe.sol\":{\"keccak256\":\"0x878a210809bb684c42157a10f3f90350a67d0a4863f130499942b06f0f2c9143\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://fa2d71bd427c3415e98a2ee15ff673f3cc61c17f14d7087c5eedc83b55f6b0ef\",\"dweb:/ipfs/QmesVSmJQQzi6ys1cvhQFCJyDXchb736mT5bXks4Yp6Cbj\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.19+commit.7dd6d404"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"view","type":"function","name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@openzeppelin/foundry/=lib/openzeppelin-foundry-upgrades/src/","@prb/math/=lib/allo-v2/lib/v2-core/lib/prb-math/","@prb/test/=lib/allo-v2/lib/v2-core/lib/prb-test/src/","@sablier/v2-core/=lib/allo-v2/lib/v2-core/","ERC1155/=lib/allo-v2/lib/hats-protocol/lib/ERC1155/","allo-v2-contracts/=lib/allo-v2/contracts/","allo-v2-test/=lib/allo-v2/test/","allo-v2/=lib/allo-v2/","ds-test/=lib/allo-v2/lib/forge-std/lib/ds-test/src/","eas-contracts/=lib/allo-v2/lib/eas-contracts/contracts/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-gas-snapshot/=lib/allo-v2/lib/permit2/lib/forge-gas-snapshot/src/","forge-std/=lib/forge-std/src/","hats-protocol/=lib/allo-v2/lib/hats-protocol/","openzeppelin-contracts-upgradeable/=lib/allo-v2/lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts/contracts/","permit2/=lib/allo-v2/lib/permit2/","prb-math/=lib/allo-v2/lib/v2-core/lib/prb-math/src/","prb-test/=lib/allo-v2/lib/v2-core/lib/prb-test/src/","safe-contracts/=lib/safe-contracts/","solady/=lib/allo-v2/lib/solady/","solarray/=lib/allo-v2/lib/v2-core/lib/solarray/src/","solbase/=lib/allo-v2/lib/hats-protocol/lib/solbase/src/","solmate/=lib/allo-v2/lib/permit2/lib/solmate/","utils/=lib/allo-v2/lib/hats-protocol/lib/utils/","v2-core/=lib/allo-v2/lib/v2-core/"],"optimizer":{"enabled":true,"runs":1000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"pkg/contracts/src/ISafe.sol":"ISafe"},"evmVersion":"paris","libraries":{}},"sources":{"pkg/contracts/src/ISafe.sol":{"keccak256":"0x878a210809bb684c42157a10f3f90350a67d0a4863f130499942b06f0f2c9143","urls":["bzz-raw://fa2d71bd427c3415e98a2ee15ff673f3cc61c17f14d7087c5eedc83b55f6b0ef","dweb:/ipfs/QmesVSmJQQzi6ys1cvhQFCJyDXchb736mT5bXks4Yp6Cbj"],"license":"LGPL-3.0-only"}},"version":1},"id":115}
2 changes: 1 addition & 1 deletion pkg/contracts/out/MockERC20.sol/MockERC20.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/PassportScorer.sol/PassportScorer.json

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/Registry.sol/Registry.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/RegistryCommunity.sol/FAllo.json

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/RegistryFactory.sol/RegistryFactory.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/RegistrySetup.sol/RegistrySetup.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/RegistrySetup.sol/RegistrySetupFull.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/contracts/out/TERC20.sol/TERC20.json

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion pkg/contracts/script/DeployCV.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ contract DeployCV is Native, CVStrategyHelpers, Script, SafeSetup {

registry = allo.getRegistry();

sybilScorer = new PassportScorer(scorer_list_manager());
sybilScorer = new PassportScorer();
sybilScorer.initialize(scorer_list_manager());

registryFactory = new RegistryFactory();

Expand Down
1 change: 1 addition & 0 deletions pkg/contracts/src/ISybilScorer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ struct Strategy {
}

interface ISybilScorer {
function initialize(address _listManager) external;
function addUserScore(address _user, PassportData memory _passportData) external;
function removeUser(address _user) external;
function changeListManager(address _newManager) external;
Expand Down
13 changes: 9 additions & 4 deletions pkg/contracts/src/PassportScorer.sol
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity ^0.8.19;

import {Ownable} from "openzeppelin-contracts/contracts/access/Ownable.sol";
import {ISybilScorer, PassportData, Strategy} from "./ISybilScorer.sol";
import {UUPSUpgradeable} from "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
import {OwnableUpgradeable} from "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol";
import {Initializable} from "openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol";

contract PassportScorer is Ownable, ISybilScorer {
contract PassportScorer is Initializable, UUPSUpgradeable, OwnableUpgradeable, ISybilScorer {
address public listManager;

mapping(address => PassportData) public userScores;
Expand Down Expand Up @@ -53,7 +55,8 @@ contract PassportScorer is Ownable, ISybilScorer {
}
}

constructor(address _listManager) Ownable() {
function initialize(address _listManager) public initializer {
__Ownable_init();
_revertZeroAddress(_listManager);
listManager = _listManager;
}
Expand Down Expand Up @@ -132,9 +135,9 @@ contract PassportScorer is Ownable, ISybilScorer {

return userScore.score >= strategy.threshold;
}

/// @notice Get the score of a user
/// @param _user address of the user to check

function getUserScore(address _user) external view returns (PassportData memory) {
return userScores[_user];
}
Expand All @@ -144,4 +147,6 @@ contract PassportScorer is Ownable, ISybilScorer {
function getStrategy(address _strategy) external view returns (Strategy memory) {
return strategies[_strategy];
}

function _authorizeUpgrade(address) internal override onlyOwner {}
}
4 changes: 3 additions & 1 deletion pkg/contracts/test/CVStrategyTest.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,9 @@ contract CVStrategyTest is Test, AlloSetup, RegistrySetupFull, CVStrategyHelpers

registryCommunity = RegistryCommunity(registryFactory.createRegistry(params));

passportScorer = new PassportScorer(factoryOwner);
passportScorer = new PassportScorer();
passportScorer.initialize(factoryOwner);

// passportScorer.transferOwnership(factoryOwner);

vm.startPrank(factoryOwner);
Expand Down
3 changes: 2 additions & 1 deletion pkg/contracts/test/PassportScorerTest.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ contract PassportScorerTest is Test {
PassportData public passportData;

function setUp() public {
passportScorer = new PassportScorer(listManager);
passportScorer = new PassportScorer();
passportScorer.initialize(listManager);
passportData = PassportData({score: 100, lastUpdated: block.timestamp});
}

Expand Down
33 changes: 3 additions & 30 deletions remappings.txt
Original file line number Diff line number Diff line change
@@ -1,33 +1,6 @@
@openzeppelin/contracts/=lib/allo-v2/lib/openzeppelin-contracts/contracts/
@prb/math/=lib/allo-v2/lib/v2-core/lib/prb-math/
@prb/test/=lib/allo-v2/lib/v2-core/lib/prb-test/src/
@sablier/v2-core/=lib/allo-v2/lib/v2-core/
ERC1155/=lib/allo-v2/lib/hats-protocol/lib/ERC1155/
allo-v2/=lib/allo-v2/
ds-test/=lib/allo-v2/lib/forge-std/lib/ds-test/src/
eas-contracts/=lib/allo-v2/lib/eas-contracts/contracts/
eas-proxy/=lib/allo-v2/lib/eas-proxy/contracts/
erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/
forge-gas-snapshot/=lib/allo-v2/lib/permit2/lib/forge-gas-snapshot/src/
forge-std/=lib/forge-std/src/
halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/
hats-protocol/=lib/allo-v2/lib/hats-protocol/
hedgey-vesting/=lib/allo-v2/lib/hedgey-vesting/contracts/
openzeppelin-contracts-upgradeable/=lib/allo-v2/lib/openzeppelin-contracts-upgradeable/
openzeppelin-contracts/=lib/openzeppelin-contracts/
openzeppelin/=lib/openzeppelin-contracts/contracts/
permit2/=lib/allo-v2/lib/permit2/
prb-math/=lib/allo-v2/lib/v2-core/lib/prb-math/src/
prb-test/=lib/allo-v2/lib/v2-core/lib/prb-test/src/
safe-contracts/=lib/safe-contracts/
solady/=lib/allo-v2/lib/solady/
solarray/=lib/allo-v2/lib/v2-core/lib/solarray/src/
solbase/=lib/allo-v2/lib/hats-protocol/lib/solbase/src/
solmate/=lib/allo-v2/lib/permit2/lib/solmate/
superfluid-protocol-monorepo/=lib/allo-v2/lib/superfluid-protocol-monorepo/packages/solidity-semantic-money/src/
utils/=lib/allo-v2/lib/hats-protocol/lib/utils/
v2-core/=lib/allo-v2/lib/v2-core/
safe-contracts/=lib/safe-contracts/
allo-v2/=lib/allo-v2/
allo-v2-contracts/=lib/allo-v2/contracts/
allo-v2-test/=lib/allo-v2/test/
@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/
@openzeppelin/foundry/=lib/openzeppelin-foundry-upgrades/src/
@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/

0 comments on commit 33ef6e8

Please sign in to comment.