-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: sugar factory registry translate to vyper and test
- Loading branch information
1 parent
5514895
commit 1f377f8
Showing
6 changed files
with
124 additions
and
71 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,5 +7,3 @@ networks: | |
mnemonic: brownie | ||
fork: https://optimism-mainnet.wallet.coinbase.com | ||
evm_version: shanghai | ||
dependencies: | ||
- openzeppelin/[email protected] |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |