Skip to content

Commit

Permalink
feat: sugar factory registry translate to vyper and test
Browse files Browse the repository at this point in the history
  • Loading branch information
pedrovalido committed Oct 6, 2024
1 parent 5514895 commit 1f377f8
Show file tree
Hide file tree
Showing 6 changed files with 124 additions and 71 deletions.
2 changes: 0 additions & 2 deletions brownie-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,3 @@ networks:
mnemonic: brownie
fork: https://optimism-mainnet.wallet.coinbase.com
evm_version: shanghai
dependencies:
- openzeppelin/[email protected]
35 changes: 0 additions & 35 deletions contracts/helpers/FactoryRegistry.sol

This file was deleted.

60 changes: 60 additions & 0 deletions contracts/helpers/FactoryRegistry.vy
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# SPDX-License-Identifier: BUSL-1.1
# @version ^0.3.10
# @title Sugar Factory Registry
# @author velodrome.finance
# @notice Sugar Factory Registry to keep track of leaf pool factories


MAX_FACTORIES: public(constant(uint256)) = 10

owner: public(address)
poolFactories: public(DynArray[address, MAX_FACTORIES]) # camelCase to have same signature as origin registry

pool_factory_count: uint256
pool_factory_exists: HashMap[address, bool]

@external
def __init__(_owner: address):
self.owner = _owner
self.pool_factory_count = 0

@internal
def _only_owner():
assert msg.sender == self.owner, "Ownable: caller is not the owner"

@external
def approve(pool_factory: address):
self._only_owner()

# Check if already present
if self.pool_factory_exists[pool_factory]:
raise "Already exists"

# Add the poolFactory to the list
self.poolFactories[self.pool_factory_count] = pool_factory
self.pool_factory_count += 1
self.pool_factory_exists[pool_factory] = True

@external
def unapprove(pool_factory: address):
self._only_owner()

if self.pool_factory_exists[pool_factory] == False:
raise "Not exists"

for i in range(MAX_FACTORIES):
if self.poolFactories[i] == pool_factory:
# Remove the pool_factory by shifting elements
for j in range(0, MAX_FACTORIES):
if j < i: continue
if j >= self.pool_factory_count: break
self.poolFactories[j] = self.poolFactories[j + 1]
self.pool_factory_count -= 1
break

self.pool_factory_exists[pool_factory] = False

@external
@view
def factoriesToPoolFactory(poolFactory: address) -> (address, address):
return (empty(address), poolFactory)
30 changes: 18 additions & 12 deletions scripts/deploy.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# SPDX-License-Identifier: BUSL-1.1
import os

from brownie import accounts, VeSugar, LpSugar, RelaySugar
from brownie import accounts, VeSugar, LpSugar, RelaySugar, FactoryRegistry


def main():
contract_name = str(os.getenv('CONTRACT')).lower()
chain_name = str(os.getenv('CHAIN')).upper()
chain_id = os.getenv('CHAIN_ID')

if os.getenv('PROD'):
account = accounts.load('sugar')
Expand All @@ -15,26 +15,32 @@ def main():

if 'lp' in contract_name:
LpSugar.deploy(
os.getenv(chain_name + '_VOTER'),
os.getenv(chain_name + '_REGISTRY'),
os.getenv(chain_name + '_CONVERTOR'),
os.getenv(chain_name + '_SLIPSTREAM_HELPER'),
os.getenv(chain_name + '_ALM_FACTORY'),
os.getenv(f'VOTER_{chain_id}'),
os.getenv(f'REGISTRY_{chain_id}'),
os.getenv(f'CONVERTOR_{chain_id}'),
os.getenv(f'SLIPSTREAM_HELPER_{chain_id}'),
os.getenv(f'ALM_FACTORY_{chain_id}'),
{'from': account}
)

if 've' in contract_name:
VeSugar.deploy(
os.getenv('VOTER_ADDRESS'),
os.getenv('DIST_ADDRESS'),
os.getenv('GOVERNOR_ADDRESS'),
os.getenv(f'VOTER_{chain_id}'),
os.getenv(f'DIST_{chain_id}'),
os.getenv(f'GOVERNOR_{chain_id}'),
{'from': account}
)

if 'relay' in contract_name:
RelaySugar.deploy(
str(os.getenv('RELAY_REGISTRY_ADDRESSES')).split(','),
os.getenv('VOTER_ADDRESS'),
str(os.getenv(f'RELAY_REGISTRY_ADDRESSES_{chain_id}')).split(','),
os.getenv(f'VOTER_{chain_id}'),
{'from': account}
)

if 'registry' in contract_name:
FactoryRegistry.deploy(
account,
{'from': account}
)

Expand Down
22 changes: 0 additions & 22 deletions scripts/deployFactoryRegistry.s.sol

This file was deleted.

46 changes: 46 additions & 0 deletions tests/test_factory_registry.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import os
import pytest

from brownie import accounts, FactoryRegistry, reverts


@pytest.fixture
def factory_registry(FactoryRegistry, accounts):
# Deploy the contract using the first test account as the owner
yield FactoryRegistry.at(os.getenv('REGISTRY_34443'))

def test_initial_state(factory_registry):
assert factory_registry.owner() == "0xd42C7914cF8dc24a1075E29C283C581bd1b0d3D3"


def test_approve(factory_registry, accounts):
owner = factory_registry.owner()
non_owner = "0x9999999999999999999999999999999999999999"
pool_factory = "0x1111111111111111111111111111111111111111"
pool_factory_count = factory_registry.pool_factory_count()

# Approve a new pool factory
factory_registry.approve(pool_factory, {'from': owner})
assert factory_registry.pool_factory_count() == pool_factory_count + 1
assert factory_registry.poolFactories(0) == pool_factory
assert factory_registry.pool_factory_exists(pool_factory)

def test_unapprove(factory_registry, accounts):
owner = factory_registry.owner()
pool_factory = "0x1111111111111111111111111111111111111111"
pool_factory_count = factory_registry.pool_factory_count()

# Approve a pool factory to set up the state for unapprove
factory_registry.approve(pool_factory, {'from': owner})
assert factory_registry.pool_factory_count() == pool_factory_count + 1
assert factory_registry.pool_factory_exists(pool_factory)

# Unapprove the pool factory
factory_registry.unapprove(pool_factory, {'from': owner})
assert factory_registry.pool_factory_count() == pool_factory_count
assert not factory_registry.pool_factory_exists(pool_factory)

def test_factories_to_pool_factory(factory_registry):
pool_factory = "0x1111111111111111111111111111111111111111"
result = factory_registry.factoriesToPoolFactory(pool_factory)
assert result == ("0x0000000000000000000000000000000000000000", pool_factory)

0 comments on commit 1f377f8

Please sign in to comment.