{"id":48473631,"url":"https://github.com/balancer/bal_addresses","last_synced_at":"2026-04-07T07:48:18.856Z","repository":{"id":156645081,"uuid":"633093462","full_name":"balancer/bal_addresses","owner":"balancer","description":"An auto generating address book of the addresses known and used by the Maxis and in governance.","archived":false,"fork":false,"pushed_at":"2026-04-03T15:51:02.000Z","size":16271,"stargazers_count":9,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-07T07:48:14.412Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/balancer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-04-26T19:08:16.000Z","updated_at":"2026-04-03T15:51:07.000Z","dependencies_parsed_at":"2023-12-19T16:27:46.255Z","dependency_job_id":"d2657585-ee83-4947-9be5-a11e9512bac4","html_url":"https://github.com/balancer/bal_addresses","commit_stats":null,"previous_names":["balancer/bal_addresses"],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/balancer/bal_addresses","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balancer%2Fbal_addresses","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balancer%2Fbal_addresses/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balancer%2Fbal_addresses/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balancer%2Fbal_addresses/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/balancer","download_url":"https://codeload.github.com/balancer/bal_addresses/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/balancer%2Fbal_addresses/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31504897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-07T07:48:18.375Z","updated_at":"2026-04-07T07:48:18.845Z","avatar_url":"https://github.com/balancer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Generate Addressbooks Deployments](https://github.com/balancer/bal_addresses/actions/workflows/generate_addressbooks.yaml/badge.svg)](https://github.com/balancer/bal_addresses/actions/workflows/generate_addressbooks.yaml)\n[![Generate Core Pools JSON](https://github.com/balancer/bal_addresses/actions/workflows/generate_core_pools.yaml/badge.svg)](https://github.com/balancer/bal_addresses/actions/workflows/generate_core_pools.yaml)\n[![Generate Active Permissions](https://github.com/balancer/bal_addresses/actions/workflows/generate_permissions.yaml/badge.svg)](https://github.com/balancer/bal_addresses/actions/workflows/generate_permissions.yaml)\n\n# Monorepo Addresses\n\nThis repo is setup to make it easy to find up to date addresses at balancer.\n\n## Outputs - structured data\n\nThe [outputs](./outputs) directory has a number of different address books that you can use in code or with your eyeballs.\n\n### [chain].json Files\n\nHave keys of deployment/contract as well as some other extra stuff all with / notation. It includes multisigs and signers known to the maxis as well as other addresses we have touched sorted by protocol.\n\n### addressbook.json\n\nHas all the addresses sorted into 2 dicts (active, and old). Each dict is then mapped like `{chain:{deployment:{contract: address}}}`\n\n## Python helpers\n\nYou can import this into python scripts by adding the following into your requirements.txt `git+https://github.com/balancer/bal_addresses`.\n\nonce imported like `from bal_addresses import AddrBook`.\n\nThen you can invoke the Address Book on a chain like so\n\n`a = AddrBook(chain_name)` where chain_name is one of the chains listed in `AddrBook.CHAIN_IDS_BY_NAME.keys()`\n\nThen you can do this with the flatbook:\n\n```\n\u003e\u003e\u003e a.flatbook[\"20230320-composable-stable-pool-v4/ComposableStablePoolFactory\"]\n'0xfADa0f4547AB2de89D1304A668C39B3E09Aa7c76'\n\u003e\u003e\u003e a.flatbook[\"multisigs/lm\"]\n'0xc38c5f97B34E175FFd35407fc91a937300E33860'\n\u003e\u003e\u003e\n```\n\nThis with the reversebook:\n\n```text\n\u003e\u003e\u003e a.reversebook[\"0xfADa0f4547AB2de89D1304A668C39B3E09Aa7c76\"]\n'20230320-composable-stable-pool-v4/ComposableStablePoolFactory'\n```\n\nYou can also use the structured data as follows\n\n```\n\u003e\u003e\u003e r = a.dotmap\n\u003e\u003e\u003e r.multisigs\nDotMap(lm='0xc38c5f97B34E175FFd35407fc91a937300E33860', dao='0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f', fees='0x7c68c42De679ffB0f16216154C996C354cF1161B', feeManager='0xf4A80929163C5179Ca042E1B292F5EFBBE3D89e6', karpatkey='0x0EFcCBb9E2C09Ea29551879bd9Da32362b32fc89', emergency='0xA29F61256e948F3FB707b4b3B138C5cCb9EF9888', maxi_ops='0x166f54F44F271407f24AA1BE415a730035637325', blabs_ops='0x02f35dA6A02017154367Bc4d47bb6c7D06C7533B', linearPoolController='0x75a52c0e32397A3FC0c052E2CeB3479802713Cf4')\n\u003e\u003e\u003e r.multisigs.dao\n'0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f'\n```\n\nNote that for the deployments the dotmap has a problem with digit starting members. For this reason you have to use it like this\n\n```text\n\u003e\u003e\u003e r[\"20230320-composable-stable-pool-v4\"][\"ComposableStablePoolFactory\"]\n'0xfADa0f4547AB2de89D1304A668C39B3E09Aa7c76'\n```\n\nAs you can see from the examples above, the dotmap works like a dict, so you can easily loop over any part of the structure.\n\n```python\nfrom bal_addresses import AddrBook\na = AddrBook(\"mainnet\")\nr = a.dotmap\nfor contract, address in r[\"20230320-composable-stable-pool-v4\"].items():\n    print(f\"{contract} has {address}\")\n```\n\nReturns\n\n```text\nComposableStablePoolFactory has 0xfADa0f4547AB2de89D1304A668C39B3E09Aa7c76\nMockComposableStablePool has 0x5537f945D8c3FCFDc1b8DECEEBD220FAD26aFdA8\n```\n\nThere is also search and lookup commands\n\n```text\n\u003e\u003e\u003e a.search_many(\"Composable\")\n{'20230320-composable-stable-pool-v4/ComposableStablePoolFactory': '0xfADa0f4547AB2de89D1304A668C39B3E09Aa7c76', '20230320-composable-stable-pool-v4/MockComposableStablePool': '0x5537f945D8c3FCFDc1b8DECEEBD220FAD26aFdA8', '20230206-composable-stable-pool-v3/ComposableStablePoolFactory': '0xdba127fBc23fb20F5929C546af220A991b5C6e01', '20230206-composable-stable-pool-v3/MockComposableStablePool': '0x222bc81C6F3C17e9e9Aba47a12f55a1Dea42f163', '20220906-composable-stable-pool/ComposableStablePoolFactory': '0xf9ac7B9dF2b3454E841110CcE5550bD5AC6f875F', '20221122-composable-stable-pool-v2/ComposableStablePoolFactory': '0x85a80afee867aDf27B50BdB7b76DA70f1E853062', '20221122-composable-stable-pool-v2/MockComposableStablePool': '0x373b347bc87998b151A5E9B6bB6ca692b766648a'}\n\u003e\u003e\u003e a.search_many(\"GaugeAdder\")\n{'20230109-gauge-adder-v3/GaugeAdder': '0x5efBb12F01f27F0E020565866effC1dA491E91A4', '20220325-gauge-adder/GaugeAdder': '0xEd5ba579bB5D516263ff6E1C10fcAc1040075Fe2', '20220628-gauge-adder-v2/GaugeAdder': '0x2fFB7B215Ae7F088eC2530C7aa8E1B24E398f26a'}\n\u003e\u003e\u003e a.search_unique(\"GaugeControl\")\n'20220325-gauge-controller/GaugeController'\n\u003e\u003e\u003e a.latest_contract(\"Vault\")\n'0xBA12222222228d8Ba445958a75a0704d566BF2C8'\n\u003e\u003e\u003e a.reversebook[a.latest_contract(\"ComposableStablePoolFactory\")]\n'20230320-composable-stable-pool-v4/ComposableStablePoolFactory'\n\u003e\u003e\u003e\n\n```\n\nMost of the other functions are used by a github action which regenerates files read in by those 2 functions on a weekly basis. You can explore them if you would like.\n\n## Using deployments:\n\n`.deployments` attribute is an object that is lazy loaded on first access.\nIt has first class support in IDEs, so you can use it as a normal object.\n\nTo use deployments information you can do the following:\n\n```python\nfrom bal_addresses.addresses import AddrBook\n\na = AddrBook(\"mainnet\")\n# At the stage when you try to access the deployments, the data will be loaded:\na.deployments\n```\n\nNow you can extract information:\n\n```\n\u003e\u003e\u003e a.deployments.vault.contracts.Vault.address\n'0xBA12222222228d8Ba445958a75a0704d566BF2C8'\n\u003e\u003e\u003e a.deployments.vault.contracts.Vault.name\n'Vault'\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbalancer%2Fbal_addresses","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbalancer%2Fbal_addresses","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbalancer%2Fbal_addresses/lists"}