Skip to content

Commit

Permalink
Merge pull request #129 from balancer/simplify_permissions_builder
Browse files Browse the repository at this point in the history
Simplify permissions builder
  • Loading branch information
mikemcdonald committed Aug 3, 2023
2 parents bca3982 + d9eb4ff commit 5307db7
Show file tree
Hide file tree
Showing 43 changed files with 3,364 additions and 4,595 deletions.
76 changes: 23 additions & 53 deletions .github/python_actions/full_chain_permissions.py
Original file line number Diff line number Diff line change
@@ -1,73 +1,43 @@
import requests
import json
import pandas as pd
import os
from bal_addresses import AddrBook
from web3 import Web3
from bal_addresses import AddrBook, BalPermissions, GITHUB_DEPLOYMENTS_NICE
import datetime

INFURA_KEY = os.getenv('WEB3_INFURA_PROJECT_ID')
BASE_PATH = "./docs/reference/authorizer"

today = datetime.date.today()
w3_by_chain = {
"mainnet": Web3(Web3.HTTPProvider(f"https://mainnet.infura.io/v3/{INFURA_KEY}")),
"arbitrum": Web3(Web3.HTTPProvider(f"https://arbitrum-mainnet.infura.io/v3/{INFURA_KEY}")),
"optimism": Web3(Web3.HTTPProvider(f"https://optimism-mainnet.infura.io/v3/{INFURA_KEY}")),
"polygon": Web3(Web3.HTTPProvider(f"https://polygon-mainnet.infura.io/v3/{INFURA_KEY}")),
"gnosis": Web3(Web3.HTTPProvider(f"https://rpc.gnosischain.com/")),
"goerli": Web3(Web3.HTTPProvider(f"https://goerli.infura.io/v3/{INFURA_KEY}")),
"sepolia": Web3(Web3.HTTPProvider(f"https://sepolia.infura.io/v3/{INFURA_KEY}")),
"zkevm": Web3(Web3.HTTPProvider(f"https://zkevm-rpc.com")),
"avalanche": Web3(Web3.HTTPProvider(f"https://api.avax.network/ext/bc/C/rpc")),
}

ENABLE_WIDE_TABLES = '''---
pageClass: wide-content
---
'''
SCANNERS_BY_CHAIN = AddrBook.chains["SCANNERS_BY_CHAIN"]




def build_chain_permissions_list(chain_name):
a = AddrBook(chain_name)
r = a.flatbook
results = []
address_names = a.reversebook
action_ids_list = f"{a.GITHUB_DEPLOYMENTS_RAW}/action-ids/{chain_name}/action-ids.json"
w3 = w3_by_chain[chain_name]
authorizer = w3.eth.contract(address=r["20210418-authorizer/Authorizer"], abi=json.load(open(".github/python_actions/abis/Authorizer.json")))
try:
result = requests.get(action_ids_list)
except requests.exceptions.HTTPError as err:
print(f"URL: {requests.request.url} returned error {err}")
input = result.json()
for deployment, contracts in input.items():
print(f"Processing {deployment}")
for contract, data in contracts.items():
for fx, actionId in data["actionIds"].items():
numMembers = authorizer.functions.getRoleMemberCount(actionId).call()
if numMembers > 0:
memberAddressList = []
memberNameList = []
for i in range(0, numMembers, 1):
caller = (str(authorizer.functions.getRoleMember(actionId, i).call()))
memberAddressList.append(caller)
if isinstance(address_names[caller], str):
memberNameList.append(address_names[caller])
else:
memberNameList.append("undef")

d = {
"Fx": fx,
"Contract": contract,
"Deployment": deployment,
"Authorized_Caller_Addresses": memberAddressList,
"Authorized_Caller_Names": memberNameList
}
results.append(d)
addrs = AddrBook(chain_name)
perms = BalPermissions(chain_name)
for action_id, callers in perms.active_permissions_by_action_id.items():
fx_paths = perms.paths_by_action_id[action_id]
for fx_path in fx_paths:
(deployment, contract, fx) = fx_path.split("/")
caller_names = []
for caller in callers:
caller_names.append(addrs.reversebook.get(caller, "UNDEF"))
d = {
"Fx": fx,
"Contract": contract,
"Deployment": deployment,
"Authorized_Caller_Addresses": callers,
"Authorized_Caller_Names": caller_names
}
results.append(d)
return results


Expand Down Expand Up @@ -100,9 +70,9 @@ def generate_deployment_deduped_map(permission_data, chain):
linkedAddresses = []
linkedDeployments = []
for address in callerAddresses:
linkedAddresses.append(f"[{address}]({AddrBook.SCANNERS_BY_CHAIN[chain]}/address/{address})")
linkedAddresses.append(f"[{address}]({SCANNERS_BY_CHAIN[chain]}/address/{address})")
for deployment in deployments:
linkedDeployments.append(f"[{deployment}]({AddrBook.GITHUB_DEPLOYMENTS_NICE}/tasks/{deployment})")
linkedDeployments.append(f"[{deployment}]({GITHUB_DEPLOYMENTS_NICE}/tasks/{deployment})")

results[contract][fx]["callerNames"] = list(set(callerNames + list(results[contract][fx]["callerNames"])))
results[contract][fx]["callerAddresses"] = list(set(linkedAddresses + list(results[contract][fx]["callerAddresses"])))
Expand All @@ -114,7 +84,7 @@ def generate_deployment_deduped_map(permission_data, chain):
def deployment_deduped_map_to_list(deployment_map):
result = []
need_description = []
description_by_function = AddrBook.fx_description_by_name()
description_by_function = AddrBook.fx_description_by_name
for contract, fxdata in deployment_map.items():
for fx, callers in fxdata.items():
try:
Expand Down Expand Up @@ -160,7 +130,7 @@ def generate_chain_files(chain):
print(f"WARNING: No permissions found for chain {chain}")

def main():
for chain in w3_by_chain:
for chain in AddrBook.chain_ids_by_name.keys():
print(f"\n\n\nWriting docs for {chain.capitalize()}\n\n\n")
generate_chain_files(chain)

Expand Down
23 changes: 11 additions & 12 deletions .github/python_actions/genContractLists.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import requests
import pandas as pd
import re
from bal_addresses import AddrBook
from bal_addresses import AddrBook, GITHUB_DEPLOYMENTS_NICE

OUTPUT_PATH = "docs/reference/contracts/deployment-addresses"
ADDRESSBOOK_URL = "https://raw.githubusercontent.com/BalancerMaxis/bal_addresses/main/outputs/deployments.json"
Expand All @@ -16,7 +16,7 @@
"ChildChainGaugeRewardHelper", "ChildChainGaugeTokenAdder", "L2LayerZeroBridgeForwarder","ChildChainGauge","VotingEscrowDelegation", "VotingEscrowDelegationProxy", "VeBoostV2", "ProtocolFeesCollector", "ProtocolFeesWithdrawer"]
}


SCANNERS_BY_CHAIN = AddrBook.chains["SCANNERS_BY_CHAIN"]

def address_directory(chain, status=None):
r = requests.get(f"https://raw.githubusercontent.com/balancer/balancer-deployments/master/addresses/{chain}.json")
Expand All @@ -41,10 +41,9 @@ def genFullTable(r, chain):
contractText = contract['name']
###

dl = f"{AddrBook.GITHUB_DEPLOYMENTS_NICE}/tasks/{deployment}"
al = f"{AddrBook.SCANNERS_BY_CHAIN[chain]}/address/{contract['address']}#code"
dl = f"{GITHUB_DEPLOYMENTS_NICE}/tasks/{deployment}"
al = f"{SCANNERS_BY_CHAIN[chain]}/address/{contract['address']}#code"
addressText = f"[{contract['address']}]({al})"
## TODO find github code links
result.loc[len(result)] = [contractText, addressText, f"[{deployment}]({dl})"]
result.sort_values(by=["Contract","Deployment"], inplace=True)
return result
Expand All @@ -67,8 +66,8 @@ def genPoolFactories(r, chain):
contractText = contract['name']
###

dl = f"{AddrBook.GITHUB_DEPLOYMENTS_NICE}/tasks/{deployment}"
al = f"{AddrBook.SCANNERS_BY_CHAIN[chain]}/address/{contract['address']}#code"
dl = f"{GITHUB_DEPLOYMENTS_NICE}/tasks/{deployment}"
al = f"{SCANNERS_BY_CHAIN[chain]}/address/{contract['address']}#code"
result.loc[len(result)] = [contractText, f"[{contract['address']}]({al})", f"[{deployment}]({dl})"]
result.sort_values(by=["Contract","Deployment"], inplace=True)
return result
Expand All @@ -91,8 +90,8 @@ def genNotInContractList(r, chain, contractList):
contractText = contract['name']
###

dl = f'{AddrBook.GITHUB_DEPLOYMENTS_NICE}/tasks/{deployment}'
al = f"{AddrBook.SCANNERS_BY_CHAIN[chain]}/address/{contract['address']}#code"
dl = f'{GITHUB_DEPLOYMENTS_NICE}/tasks/{deployment}'
al = f"{SCANNERS_BY_CHAIN[chain]}/address/{contract['address']}#code"
addressText = f"[{contract['address']}]({al})"
## TODO find github code links
result.loc[len(result)] = [contractText, addressText, f"[{deployment}]({dl})"]
Expand All @@ -118,8 +117,8 @@ def genFromContractList(r, chain, contractList):

###

dl = f"{AddrBook.GITHUB_DEPLOYMENTS_NICE}/tasks/{deployment}"
al = f"{AddrBook.SCANNERS_BY_CHAIN[chain]}/address/{contract['address']}#code"
dl = f"{GITHUB_DEPLOYMENTS_NICE}/tasks/{deployment}"
al = f"{SCANNERS_BY_CHAIN[chain]}/address/{contract['address']}#code"
addressText = f"[{contract['address']}]({al})"
## TODO find github code links
result.loc[len(result)] = [contractText, addressText, f"[{deployment}]({dl})"]
Expand Down Expand Up @@ -194,7 +193,7 @@ def genChainMd(chain):


def main():
for chain in AddrBook.SCANNERS_BY_CHAIN.keys():
for chain in SCANNERS_BY_CHAIN:
output=genChainMd(chain)
with open(f"{OUTPUT_PATH}/{chain}.md", "w") as f:
f.write(output)
Expand Down
6 changes: 1 addition & 5 deletions .github/python_actions/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
git+https://github.com/Tritium-VLK/brownie@master
git+https://github.com/BalancerMaxis/[email protected]
prettytable==3.7.0
dotmap==1.3.30
pathlib==1.0.1
git+https://github.com/BalancerMaxis/[email protected]
pandas>=1.5.3
tabulate>=0.9.0

2 changes: 1 addition & 1 deletion .github/workflows/update_contract_addresses.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
with:
commit-message: "Scheduled update from changes to monorepo"
title: "Scheduled update from changes to monorepo"

branch: gha-contract-addresses
reviewers: "Tritum-VLK"
assignees: "Tritum-VLK"
labels: "Automatic"
6 changes: 2 additions & 4 deletions .github/workflows/update_permissions_table.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Update Permissions Tables

on:
schedule:
- cron: "0 0 * * 0"
- cron: "0 0 * * 3"
workflow_dispatch:

jobs:
Expand All @@ -21,8 +21,6 @@ jobs:

- name: Update Files
id: update
env:
WEB3_INFURA_PROJECT_ID: ${{ secrets.INFURA_KEY }}
run: |
pip3 install -r .github/python_actions/requirements.txt
python3 .github/python_actions/full_chain_permissions.py
Expand All @@ -33,7 +31,7 @@ jobs:
with:
commit-message: "BOT: Update to permissions tables based on onchain changes."
title: "BOT: Automatic update to permissions tables based on onchain changes."

branch: gha-permissions
reviewers: "Tritum-VLK"
assignees: "Tritum-VLK"
labels: "Automatic"
Loading

1 comment on commit 5307db7

@vercel
Copy link

@vercel vercel bot commented on 5307db7 Aug 3, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.