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

feat: use cloning for vaults #191

Merged
merged 4 commits into from
Jan 27, 2024
Merged

feat: use cloning for vaults #191

merged 4 commits into from
Jan 27, 2024

Conversation

Schlagonia
Copy link
Collaborator

@Schlagonia Schlagonia commented Jan 2, 2024

Description

Switch from using blueprints to cloning for lower deployment costs.

Fixes # (issue)

Checklist

  • I have run vyper and solidity linting
  • I have run the tests on my machine
  • I have followed commitlint guidelines
  • I have rebased my changes to the latest version of the main branch

@fp-crypto
Copy link
Collaborator

fp-crypto commented Jan 5, 2024

Remind me, what's motivating the switch between blueprints and clones? Is there a negative tradeoff to counter the positive of lower deployment cost?

@Schlagonia
Copy link
Collaborator Author

Remind me, what's motivating the switch between blueprints and clones? Is there a negative tradeoff to counter the positive of lower deployment cost?

The main trade off is higher runtime costs. Both from needing a delegatecall. But also mainly from not being able to use Immutables.

asset: ERC20,
def __init__():
# Set `asset` so it cannot be re-initialized.
self.asset = self
Copy link
Collaborator

Choose a reason for hiding this comment

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

does this need to call initialize?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Assuming the first one deployed is just a dummy version to use for cloning.

So just want to make sure it can't be initialized ever and only used as the original

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

wouldnt work correctly to use the original since msg.sender would not be the factory

# Underlying token used by the vault.
ASSET: immutable(ERC20)
Copy link
Collaborator

Choose a reason for hiding this comment

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

kind of sad losing immutables

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Agreed.

We will have to do some more research on the clones with immutables to see if it can be done in vyper

# Deployer contract used to retrieve the protocol fee config.
FACTORY: public(immutable(address))
FACTORY: public(address)
Copy link
Collaborator

Choose a reason for hiding this comment

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

should this be lower cased as well?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Technically yes, but the strategy's have it as upper case and same with the previous versions.

So kept it upper case to keep all the ABI's constant

ASSET and DECIMALS weren't public so it didnt matter for the ABI

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I guess the storage variable could be lower case and internal, then make a getter that matches for the ABI?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Changed it to be lower case and add a separate getter 505e4df

@Schlagonia Schlagonia merged commit d39e2ae into 3.0.2 Jan 27, 2024
7 checks passed
@Schlagonia Schlagonia deleted the cloning branch January 27, 2024 20:31
Schlagonia added a commit that referenced this pull request Feb 5, 2024
* feat: update api and ape version

* chore: removals (#189)

* chore: remove increase and decrease allowances

* chore: remove open roles

* feat: add max loss to debt updates (#190)

* feat: use cloning for vaults (#191)

* feat: use cloning for vaults

* fix: scripts

* chore: fix interfaces

* chore: lower case factory

* fix: update to strategy changes

* feat: add to queue flag (#195)

* fix: updated strategy branch

* feat: minor fixes (#194)

* fix: redeem corrections

* chore: dont burn zero shares

* fix: use updated strategy storage

* fix: rebase

* chore: bump oz version

* fix: oz 4626 fix

* fix: lossy test

* fix: round down in max redeem

* fix: comment

* chore: ignore snapshot

* test: add foundry tests (#196)

* chore: setup foundry test

* chore: add remappings

* forge install: erc4626-tests

* test: add foundry fuzzing tests

* fix: max uint deposit limit

* fix: test strategy

* fix: foundry runner

* fix: clamp overflow

* fix: default tests

* chore: clean up linting

* fix: new strategy version

* fix: reporting costs (#192)

* test: for no locking

* chore: cheaper reports

* chore: track current debt

* chore: lower unlocked gas

* fix: set to 0

* build: only burn or mint (#193)

* build: only burn or mint

* build: target end supply

* chore: comments

* fix: comments

* fix: strategy changes

* chore: rebase

* fix: decimal type

* chore: deployment and interfaces

* fix: black

* chore: updated strategy branch

* fix: foundry remapping
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants