Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Final round of changes and latest audit #89

Open
wants to merge 133 commits into
base: feat/baalZodiac
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
8470b60
update interface name (#68)
dekanbro Sep 13, 2022
91e7665
Feat/baal referral (#69)
brossetti1 Sep 13, 2022
54c75b5
Feat/erc20 permit upgradeable (#62)
brossetti1 Sep 13, 2022
c6d2f16
Add openGSN dependency
akshaan Sep 16, 2022
48e601a
Pass forwarder into Baal setUp
akshaan Sep 16, 2022
46fac82
Change arg order
akshaan Sep 16, 2022
2256dea
Downgrade @opengsn/contracts version
akshaan Sep 16, 2022
d3093ef
Override inherited funcs
akshaan Sep 16, 2022
7235242
Move OpenGSN to latest stable version
akshaan Sep 20, 2022
47f4726
Update Baal with new OpenGSN version
akshaan Sep 20, 2022
9c93780
Allow Baal or shaman to set trusted forwarder
akshaan Sep 20, 2022
ba927a7
Add upgradable tokens and proxy (#70)
brossetti1 Sep 20, 2022
1cd9331
Merge pull request #71 from akshaan/openGSNSupport
brossetti1 Sep 20, 2022
d141586
Revert "Add openGSN support to Baal"
brossetti1 Sep 20, 2022
778a972
Merge pull request #72 from HausDAO/revert-71-openGSNSupport
brossetti1 Sep 20, 2022
ab07d1e
Feat/refac token pausable (#74)
dekanbro Sep 22, 2022
5b64eab
Feat/refac token pausable (#75)
dekanbro Sep 22, 2022
cc2e483
Fix/tribute minion payable (#78)
dekanbro Oct 4, 2022
f9dca50
QSP-2 Baal Inherits From Non-Upgradeable Contracts: fixing non upgrad…
brossetti1 Sep 26, 2022
6bd908d
QSP-3 Integer Overflow / Underflow - remove unchecked on proposalCoun…
brossetti1 Sep 26, 2022
e2319d2
QSP-4 Missing Input Validation - reuqiring checks on missed validation
brossetti1 Sep 27, 2022
62396f8
QSP-8 Application Monitoring Can Be Improved by Emitting More Events
brossetti1 Sep 28, 2022
9b5c4b0
QSP-7 Signed Votes Do Not Expire
brossetti1 Sep 28, 2022
3c1792a
QSP-9 setAdminConfig Always Emits Two Events Even if State Is Not Cha…
brossetti1 Sep 28, 2022
68e53af
QSP-1 Checkpoints May Not Be Written Correctly (#77)
dekanbro Oct 3, 2022
c20ee60
QSP-16 Proposals Can Pass without a Valid Sponsor
brossetti1 Oct 3, 2022
67dfe26
updating version recipient
brossetti1 Oct 3, 2022
143f9dc
adding nonce to submitVote
brossetti1 Oct 3, 2022
cd28a98
adding docs for running coverage
brossetti1 Oct 3, 2022
26470d2
Merge pull request #76 from HausDAO/audit-fixes-brian
brossetti1 Oct 4, 2022
119b202
reformat requires to save space (#79)
dekanbro Oct 4, 2022
5d248b7
Removed details from storage in the proposal struct and just emit it.
dekanbro Oct 10, 2022
cf80633
adding constructor back with disable initializers
brossetti1 Oct 15, 2022
18f206f
config changes
brossetti1 Oct 17, 2022
7a44b36
Merge pull request #80 from HausDAO/feat/emit-only-details
brossetti1 Oct 18, 2022
74b2c67
Merge pull request #82 from HausDAO/config-changes
brossetti1 Oct 18, 2022
84b7673
Merge pull request #81 from HausDAO/add-constructor-baal
brossetti1 Oct 18, 2022
b2227e5
Upload report from Quantstamp audit
earth2travis Oct 19, 2022
6c99b6a
Merge pull request #83 from HausDAO/audits/quantstamp
earth2travis Oct 19, 2022
c59eac6
Update package version
skuhlmann Oct 22, 2022
40daad3
Merge pull request #84 from HausDAO/22102022-version-bump
skuhlmann Oct 24, 2022
9dbff4d
Feat/deployv1.0.0 (#85)
dekanbro Nov 8, 2022
3e2f8bc
deploy opts fixes refac (#89)
dekanbro Nov 22, 2022
9686634
version bump
skuhlmann Nov 22, 2022
b7a3942
Merge pull request #92 from HausDAO/release/22112022
skuhlmann Nov 22, 2022
ec8d3b5
deploy addresses version (#93)
dekanbro Nov 23, 2022
546a58b
Export addresses object (#94)
akshaan Nov 23, 2022
25aa604
add test
dekanbro Dec 23, 2022
9d8c93b
snapshot total shares at sponsor
dekanbro Dec 26, 2022
9f6e496
keep abi closer to how it was
dekanbro Dec 26, 2022
8cbe911
update deployed baal template address
dekanbro Dec 27, 2022
48aa4f7
update deploy version
dekanbro Dec 27, 2022
ec5a6f7
update harhat config
dekanbro Dec 27, 2022
ac73ad1
version bump
skuhlmann Dec 27, 2022
984d756
Merge pull request #95 from HausDAO/fix/quorumCheck
skuhlmann Dec 27, 2022
30a1b5d
deploy optimisticEthereum and Arbitrum factory (#96)
dekanbro Jan 24, 2023
9d230a7
add polygon mumbai deploy
dekanbro Jan 26, 2023
b104a29
Update deployed.js
dekanbro Jan 26, 2023
418dffc
Feat/custom loot tokens (#97)
dekanbro Mar 31, 2023
87ae25c
version bump
skuhlmann Apr 3, 2023
1948628
version bump (#98)
skuhlmann Apr 3, 2023
5bae8ee
adds new factories to tsconfig.build.json and version bump
skuhlmann Apr 3, 2023
8023ead
Merge branch 'feat/baalZodiac' into release/03042023
skuhlmann Apr 3, 2023
190bb46
Merge pull request #99 from HausDAO/release/03042023
skuhlmann Apr 3, 2023
7d6eaa4
test build
skuhlmann Apr 3, 2023
11e16e0
Merge branch 'release/03042023' of github.com:HausDAO/Baal into relea…
skuhlmann Apr 3, 2023
082e9c2
Merge pull request #100 from HausDAO/release/03042023
skuhlmann Apr 4, 2023
a2ac495
update deployed addresses (#101)
dekanbro Apr 5, 2023
55ad5ed
migrate to hardhat-deploy
santteegt May 10, 2023
cd35d94
add chain deployments
santteegt May 10, 2023
d72965b
update README
santteegt May 12, 2023
315ab31
Merge pull request #104 from santteegt/feat/baalZodiac
santteegt May 12, 2023
a6da172
version bump
santteegt May 12, 2023
3222410
Merge pull request #105 from santteegt/feat/baalZodiac
santteegt May 12, 2023
4a802a2
add missing typings & bump version
santteegt May 15, 2023
d158736
Merge pull request #106 from santteegt/feat/baalZodiac
santteegt May 15, 2023
611d9de
add missing methods on baal interfaces
santteegt May 16, 2023
db1b79c
bump version
santteegt May 16, 2023
2193ce0
Merge pull request #107 from santteegt/feat/baalZodiac
santteegt May 23, 2023
57423d2
support baal compilation by `^0.8.7` solc versions
spengrah May 30, 2023
f063631
complete IBaalSummoner interface
spengrah May 30, 2023
ddceb5f
support BaalSummoner compilation by solc ^0.8.7
spengrah May 30, 2023
e383736
bump package version
spengrah May 30, 2023
033ca41
Merge pull request #109 from HausDAO/spencer-patch
santteegt May 31, 2023
f20b174
bump zodiac library
santteegt Aug 14, 2023
4c32682
bump version
santteegt Aug 14, 2023
2b3f044
Merge pull request #110 from santteegt/feat/baalZodiac
santteegt Aug 14, 2023
1a267fa
include fixtures and util scripts on package build
santteegt Aug 18, 2023
32b4763
bump version
santteegt Aug 18, 2023
16227e6
Merge pull request #111 from santteegt/fix/package-build
santteegt Aug 18, 2023
fce7654
fix publish action
santteegt Aug 18, 2023
48d9011
Merge pull request #112 from santteegt/fix/publish-action
santteegt Aug 18, 2023
a0de6f1
implement generic baalSetup fixture
santteegt Aug 21, 2023
de57edc
bump version
santteegt Aug 21, 2023
84f867b
update README.md
santteegt Aug 21, 2023
069286c
Merge pull request #113 from santteegt/feat/generic-fixture
santteegt Aug 21, 2023
1a0d9f8
enable adding additional fixture tags on baalSetup
santteegt Aug 22, 2023
b0cfe32
update README.md
santteegt Aug 22, 2023
a2619dc
quick fixes
santteegt Aug 23, 2023
76597b1
Merge pull request #114 from santteegt/fix/custom-fixture-tags
santteegt Aug 23, 2023
33f865c
update Adv Token Summoner mint bug
dekanbro Aug 24, 2023
ed48dc3
Disable Initializers in signleton
dekanbro Aug 24, 2023
86ed3c6
Merge pull request #115 from HausDAO/fix/HOS-loot-summoner
santteegt Aug 24, 2023
c0fb129
updated deployment for optimism
dekanbro Aug 25, 2023
afe1a66
update op dao address
dekanbro Aug 25, 2023
63071fe
Merge pull request #116 from HausDAO/feat/updateDeployedHOS
santteegt Aug 25, 2023
cf9f748
minor fixes to previous commit
santteegt Sep 26, 2023
f26c93a
export addresses
santteegt Sep 26, 2023
7d0f9b4
implement proposal helpers on top of fixture
santteegt Sep 26, 2023
4ff60e6
bump version
santteegt Sep 26, 2023
313649f
add custom extraSeconds param to moveFowardPeriod
santteegt Sep 26, 2023
649ce4c
Merge pull request #117 from HausDAO/feat/fixture-updates
santteegt Sep 26, 2023
9fa7a96
update publish workflow node version
santteegt Sep 26, 2023
6cb9996
Merge pull request #118 from HausDAO/fix/workflow
santteegt Sep 26, 2023
ceb70be
enable sepolia and base chains
santteegt Nov 30, 2023
92334b2
update deploy scripts
santteegt Dec 4, 2023
0ca5d73
deploy contracts on base & sepolia
santteegt Dec 4, 2023
2c56be6
bump version
santteegt Dec 4, 2023
aa06429
fix moduleproxyfactory version
santteegt Dec 4, 2023
b69c4e3
Merge pull request #119 from HausDAO/feat/new-chains
santteegt Dec 5, 2023
e3242d2
fix imports
santteegt Dec 20, 2023
e0fb0fd
bump version
santteegt Dec 20, 2023
1af2763
Merge pull request #120 from HausDAO/fix/imports
santteegt Jan 3, 2024
69655e8
move safe-deployments to package dependencies
santteegt Jan 3, 2024
eefeaa3
Merge pull request #121 from HausDAO/fix/packages
santteegt Jan 3, 2024
6adf80f
fix typings & update docs
santteegt Jan 3, 2024
c60c6de
Merge pull request #122 from HausDAO/fix/typings
santteegt Jan 3, 2024
aceb3f4
wip factory upgrade
dekanbro Jan 11, 2024
fae0aa8
add tests for precalculate SafeProxy address
santteegt Jan 11, 2024
aaeaeb0
add missing properties in Baal interface
santteegt Jun 11, 2024
58f0b07
add safe test utils
santteegt Jun 11, 2024
ecba013
bump version
santteegt Jun 11, 2024
ee3d5ab
Merge pull request #123 from HausDAO/feat/factory-upgrade
santteegt Jun 11, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
MNEMONIC=
ACCOUNT_PK=
INFURA_API_KEY=
ETHERSCAN_API_KEY=
GNOSISSCAN_API_KEY=
POLYGONSCAN_API-KEY=
OPTIMISTICSCAN_API_KEY=
ARBISCAN_API_KEY=
BASESCAN_API_KEY=
REPORT_GAS=false
COINMARKETCAP_API_KEY=
26 changes: 13 additions & 13 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,25 @@ jobs:
uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 16.x
node-version: 18.x
registry-url: https://registry.npmjs.org/
- run: yarn global add npm
- name: Compare package version to published version
- name: Check package version
id: cpv
uses: PostHog/check-package-version@v2
- name: Echo package vs published versions
run: |
echo "::set-output name=npm_version::$(npm view @daohaus/baal-contracts version)"
echo "::set-output name=package_version::$(cat package.json | grep version | head -1 | awk -F= "{ print $2 }" | sed 's/[version:,"]//g' | tr -d '[[:space:]]')"
id: get-versions
- name: print outpouts package vs published versions
run: |
echo ${{steps.get-versions.outputs.npm_version}}
echo ${{steps.get-versions.outputs.package_version}}
echo ${{steps.get-versions.outputs.package_version > steps.get-versions.outputs.npm_version}}
echo "Committed version: ${{ steps.cpv.outputs.committed-version }}"
echo "Published version: ${{ steps.cpv.outputs.published-version }}"
echo "Is new version: ${{ steps.cpv.outputs.is-new-version }}"
- run: yarn install
if: steps.get-versions.outputs.package_version > steps.get-versions.outputs.npm_version
if: steps.cpv.outputs.is-new-version == 'true'
- run: yarn build
if: steps.get-versions.outputs.package_version > steps.get-versions.outputs.npm_version
if: steps.cpv.outputs.is-new-version == 'true'
- run: yarn test
if: steps.cpv.outputs.is-new-version == 'true'
- name: publishing
if: steps.get-versions.outputs.package_version > steps.get-versions.outputs.npm_version
if: steps.cpv.outputs.is-new-version == 'true'
run: |
echo '//registry.npmjs.org/:_authToken=${{secrets.NPM_TOKEN}}' > .npmrc
npm publish --access public --scope daohaus --otp ${{ secrets.NPM_TOKEN }}
11 changes: 10 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,17 @@ cache/
.DS_Store
*.swp
*.txt

yarn-error.log

dist/
src/types/
abi/
export/
.openzeppelin/

.env
.env.production
.env.staging

coverage.json
coverage/
6 changes: 6 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"solidity.defaultCompiler": "localNodeModule",
"solidity.compileUsingRemoteVersion": "v0.8.7+commit.e28d00a7",
"solidity.enableLocalNodeCompiler": false

}
186 changes: 147 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,20 @@ If you are going to just use this project feel free to clone it. If you would l

`yarn install` - to install all of the components for the project

`.env.sample` containes the all required environment variables that need to be set to build, deploy & publish the smart contracts on the blockchain. These should be added to a `.env[.*]` file.

### Building

This project uses the [hardhat](https://hardhat.org/) ethereum tools for solidity compiling and running a virtual ethereum environment for testing.

`yarn build` - will compile the solidity code and generate your contract artifacts (in the /artifacts directory), and generate all of the necessary types.

### Testing

If you are looking to work on unit tests for this project be sure to read the README file in the test directory.

`yarn hardhat test` - run the unit tests

## Publishing

the Baal contracts, types, and abis are published through the CI process, after making changes to the repo, and when you are ready to publish the packages, do the following:
Expand All @@ -31,69 +39,178 @@ the Baal contracts, types, and abis are published through the CI process, after

running the CI process will trigger on `merges to feat/baalZodiac branch` build the dist folder and publish it to `@daohaus/baal-contracts` package to npm if the package.json version is different than the current latest on npm.

### Testing
----
## Folder Structure
- ./abi - generated abis
- ./contracts - main solidity contracts, interfaces, tools and utils
- ./deploy - deploy scripts and helpers)
- ./scripts - deploy scripts and helpers (**soon to be deprecated**)
- ./tasks - hard hat cli tasks
- ./tests - test files

If you are looking to work on unit tests for this project be sure to read the README file in the test directory.
----

## Coverage

currently, coverage is turned off for test efficiency purposes. In order to switch coverage on, add `yul` to the hardhat config:

```
{
...
compilers: [
{
version: "0.8.7",
settings: {
optimizer: {
enabled: true,
runs: 200,
details: {
yul: true
}
},
},
}
]
}
```

then run the coverage command:

```
npx hardhat coverage
```
----
## Verify Contracts

Run the following command:

`npx hardhat test` - run the unit tests
```
yarn hardhat etherscan-verify
```

----
## Importing the package on your own project

You can `yarn add @daohaus/baal-contracts` on your own project and get access to Baal smart contracts, ABIs & deployment scripts for local testing your contract integrations:

* *Smart contracts*: you can import Baal smart contract on your Hardhat /Foundry / Truffle project at `@daohaus/baal-contracts/contracts/*`
* *ABIs*: if your custom frontend needs to interact with Baal contracts, you can find contract ABIs at `@daohaus/baal-contracts/abi/*`
* *Local testing*: if you're using [hardhat-deploy](https://www.npmjs.com/package/hardhat-deploy), you can reuse our scripts to deploy all Baal + infrastructure contracts locally to perform integration testing with your implementation. You just need to follow these steps:

1. Add these lines on your `hardhat.config.ts` config file to allow `hardhat-deploy` to find Baal artifacts & deployment scripts:
```
...
external: {
contracts: [
{
artifacts: 'node_modules/@daohaus/baal-contracts/export/artifacts',
deploy: 'node_modules/@daohaus/baal-contracts/export/deploy'
}
]
},
...
```

2. On your test scripts, you can call `await deployments.fixture([tag1, tag2, ...])` (e.g. under `beforeEach()`) and specify the deployment tags you need. For example, `await deployments.fixture(['Infra', 'BaalSummoner'])` will deploy both Safe & Baal contracts.


3. You can also use the [`baalSetup`](test/utils/fixtures.ts) fixture to setup your tests with factory contracts, baal settings, members, loot/shares/token distributions, etc. Moreover, you can also customize it to cover new use cases such as custom summoner contracts, shamans and other setup needs by implementing the`setupBaalOverride` and/or `setupUsersOverride` fixture function parameters. You can take a look at a few example implementations of ([baalSetup](test/utils/baal.ts) and [setupUsersDefault](test/utils/fixtures.ts)) for inspiration. You can find and import all the available scripts/fixtures available for hardhat testing as follows:

```js
import { baalSetup, ... } from "@daohaus/baal-contracts/hardhat";
```

Below, there's the list of parameters can be customized when calling the hardhat fixture:

```js
type BaalSetupOpts = {
fixtureTags?: Array<string>; // additional deployment tags
daoSettings?: Partial<DAOSettings>;
summonSetupOpts?: Partial<SummonSetup>;
safeAddress?: `0x${string}`;
forwarderAddress?: `0x${string}`;
lootAddress?: `0x${string}`;
sharesAddress?: `0x${string}`;
setupBaalOverride?: (params: NewBaalParams) => Promise<NewBaalAddresses>;
setupUsersOverride?: (params: SetupUsersParams) => Promise<UsersSetup>;
}
```

To learn more about using `fixtures` on hardhat visit [link1](https://github.com/wighawag/hardhat-deploy#creating-fixtures) and [link2](https://www.npmjs.com/package/hardhat-deploy#testing-deployed-contracts). It is also recommended to check out the [Baal shamans](https://github.com/HausDAO/baal-shamans) repository for examples.

----
## Contracts

### **Baal (contracts/Baal.sol)**
is a minimal yet composable DAO template continuing work from

It is a minimal yet composable DAO template continuing work from
the Moloch, Minion and Compound frameworks to make it easier for
people to combine and command crypto assets with intuitive membership
games.

#### Interfaces
EIP721
OZ Minimal Clone Factoy [EIP 1167 Clones](https://docs.openzeppelin.com/contracts/4.x/api/proxy#Clones)

* EIP721
* OZ Minimal Clone Factoy [EIP 1167 Clones](https://docs.openzeppelin.com/contracts/4.x/api/proxy#Clones)
Gnosis Safe Module [Zodiac](https://github.com/gnosis/zodiac)

### **Shares (contracts/SharesERC20.sol)**
have direct execution, voting, and exit rights around actions

Have direct execution, voting, and exit rights around actions
taken by the main DAO contract. Shareholders are the collective DAO
admins.

#### Interfaces
ERC20, Initializable [OpenZeplin v4](https://docs.openzeppelin.com/contracts/4.x/)

* ERC20, Initializable [OpenZeplin v4](https://docs.openzeppelin.com/contracts/4.x/)


### **BaalVotes (contracts/utils/BaalVotes.sol)**
abstract with a similar Implimentation of ERC20VOTES with the main

Abstract with a similar Implimentation of ERC20VOTES with the main
difference being auto self-delegation and the use of timestmap instead of block.number.

#### Interfaces
ERC20Permit

* ERC20Permit

### **Loot (contracts/LootERC20.sol)**
has only exit rights against the DAO treasury, so loot does

Has only exit rights against the DAO treasury, so loot does
not have the ability to admin the DAO config. However, because it has
exit rights, it is still a powerful unit, and because it is an ERC-20
can be used in many composable ways.

#### Interfaces
ERC20, ERC20Snapshot, ERC20Permit, Initializable [OpenZeplin v4](https://docs.openzeppelin.com/contracts/4.x/)

* ERC20, ERC20Snapshot, ERC20Permit, Initializable [OpenZeplin v4](https://docs.openzeppelin.com/contracts/4.x/)

### **TributeMinion (contracts/tools/TributeMinion.sol)**
is a helper contract for making tribute proposals.

It is a helper contract for making tribute proposals.
Provides contract to approve ERC-20 transfers. Provides a simple
function/interface to make a single proposal type.

### **BaalSummoner (contracts/BaalSummoner.sol)**
Factory to summon new dao contracts. It has 2 main functions one to deploy
the dao contracts and the Safe treasury and one to use an existing Safe treasury.

----
Factory to summon new dao contracts.
It can take an existing safe or exsiting tokens

## Folder Structure
- ./abi - generated abis
- ./contracts - main solidity contracts, interfaces, tools and utils
- ./scripts - deploy scripts and helpers
- ./tasks - hard hat cli tasks
- ./tests - test files
### **Higher Order BaalAndVaultSummoner (contracts/higherOrderFactories/BaalAndVaultSummoner.sol)**

Factory to summon new dao contracts with an extra 'sidecar' non-ragequitable vault.
A registry is used to save safe addresses for use in UI.
It can also add a external safe to an existing DAO as owner

### **Higher Order BaalAdvTokenSummoner (contracts/higherOrderFactories/BaalAdvTokenSummoner.sol)**

Factory to summon new dao contracts with custom loot token name and symbol
Minting and pausing of token happen upfront before Baal is setup

----

## Privileged roles

- Shamans - are specific addresses that have more granular control
outside the standard governance proposal flow. These addresses should
always be contracts that have been explicitly given these rights
Expand All @@ -106,6 +223,7 @@ length of proposals, if there is a required quorum, etc.).
changes to its configuration at any time.

## Risks

- In case of Shaman keys leak, an attacker can get access to Baal
(admin) functionalities, burn, mint, give shaman roles etc.
Because of this Shamans are ment to be external contracts and not EOAs
Expand All @@ -121,20 +239,10 @@ More docs for [Functions](https://baal-docs.vercel.app/functions) and [Events](h
See audit notes in ./audits

## Addresses Beta Factories and Templates
beta release of the factories. These factories may change until we get to final stable release.

**Goerli**
- lootSingleton: 0xd867ACaaDB7B8930EcA709c470B872185698F0EA
- sharesSingleton: 0x25D6d13fD0a8071E1AA0f4b8978c706e715fDd3A
- baalSingleton: 0xB70A2cd3f672cB06e577378578a7AcbF1b68Df56
- Transaction Hash: 0xd0ae2a78716ded1febbf6d37ce98865a20e4233b733ee7aa41097ecd8e79cbaa
- Factory Contract Address: **0xEd6AA9879Ed6ba07411C3224F748Dc65D3f8e685**
- Tribute Minion: 0x9C6f6e6E461FB1dB9761c960900A0Ae05B9786A7

**Gnosis Chain**
- lootSingleton: 0x39bDc48E7b15C63FE54779E93b2ce46555A37609
- sharesSingleton: 0x678f62F2d9dE2e196B79ca853f811E6D0A47460B
- baalSingleton: 0xDb3e9Ded9843358fbbe758c4e73cCfEb9061d4Ed
- Transaction Hash: 0x703acad6f005fa793e9041acc711a3d1ac4c8b632898c08598552d024687bc06
- Factory Contract Address: **0x3Bd3fDf6db732F8548638Cd35B98d624c77FB351**
- Tribute Minion: 0x9391b6A7c55832a6802484dE054d81496D56545A
Would you like to deploy to another chain? Use scripts/deployFactories and scripts/deployTribute. Please reach out for more info on deploys

see current deploys at: src/addresses/deployed.js

## License

[MIT]()
Binary file added audits/Quantstamp-10182022.pdf
Binary file not shown.
Loading