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

[ETHEREUM-CONTRACTS] Deterministic (network-wise) Wrapped-ERC20 Super Token Address for Simpler Discoverability #1089

Closed
hellwolf opened this issue Sep 22, 2022 · 2 comments · Fixed by #1115
Assignees
Labels
Tag: Idea Raw idea, questions, thoughts and brainstorming notes
Projects

Comments

@hellwolf
Copy link
Contributor

hellwolf commented Sep 22, 2022

Currently the Super Token factory can help anyone to issue new Wrapped ERC20 Super Tokens any time. It hinders the discoverability, for which Superfluid Finance's resolver mechanism is a sub-optimal patchwork for this limitation.

It needs not to be so, host contract could deem canonical wrapped ERC20 (in a sense that it uses super token logic the host provides) something uniquely available per each network, deterministically generated, so that the discoverability problem goes away automatically.

Technical notes

  • A pre-built binary + CREATE2 could provide a decent technical solution.
    • Need to backward support resolver listed super tokens, and a lookup-table to cement "determined" super token address would be more practical way forward than CREAET2 (which in itself will be less useful) everything.
  • Old mechanism should still be available, but new mechanism should be favored for listing criteria in superfluid finance's resolver.
@hellwolf hellwolf created this issue from a note in PROTO (Backlog) Sep 22, 2022
@hellwolf hellwolf added the Tag: Idea Raw idea, questions, thoughts and brainstorming notes label Sep 22, 2022
@hellwolf
Copy link
Contributor Author

Couple of quick notes per conversation:

  • Need to backward support resolver listed super tokens, and a lookup-table to cement "determined" super token address would be more practical way forward than CREAET2 (which in itself will be less useful) everything.

More thoughts:

  • Perhaps we could change the createERC20Wrapper(Upgradability.NON_UPGRADABLE semantic instead going forward, and add a new Upgradability.NON_UPGRADABLE_LEGACY if people still want to create their wrapper anyhow.

@d10r
Copy link
Collaborator

d10r commented Oct 10, 2022

Combination of forward-looking and backward looking:

forward-looking

Use CREATE2, with the address of the underlying being (part of) the nonce. By having createERC20Wrapper deploy that way, we implicitly add protection against duplicate deployments (deploying additional wrapping SuperTokens would require a more conscious action -> deployment of a custom SuperToken).
We should add a method for determining the would-be SuperToken address of a not-yet-deployed SuperToken (default wrapper) - with the guarantee limited to: this would be the address if the SuperToken is deployed with the current protocol version.

backward-looking

In order to accomodate legacy (previously deployed SuperTokens) and make changes in the deployed bytecode (proxy) painless, addresses of canonical wrappers are looked up, not calculated. Meaning on deploy, the address needs to be added to a lookup table.
In order to have previously deployed SuperTokens in that table, we need to once provide a hardcoded list of such pre-existing SuperTokens.

@0xdavinchee 0xdavinchee linked a pull request Oct 18, 2022 that will close this issue
0xdavinchee added a commit that referenced this issue Oct 26, 2022
* Contracts WIP

* `createCanonicalERC20Wrapper` and `computeWrapperSuperTokenAddress` implemented
* both functions added to `ISuperTokenFactory`

* canonical creation tests

* tests that compute works as expected
* tests create2 works as expected
* tests that we can only create canonical token once
* tests that we can create canonical erc20 wrappers for multiple tokens

* initialize list

* implementation for list initialization added
* tests added for list initialization

* fix flakey foundry invariant test

* the clipped deposits need to be bounded appropriately

* address review comments

* rename computeWrapperSuperTokenAddress to computeCanonicalERC20WrapperAddress
* fix up comments
* add new custom error code
* add getCanonicalERC20Wrapper function

* Address Review Comments

* Add warning about reordering storage layouts in all contracts which have upgradability
* Add note comments about adding tests to validateStorageLayout if proxy contract storage layout is touched
* Fix up tests given review comment logic changes

* typo fix

* address review comments

* add to readme
* remove "our" from vocabulary when referring to canonical erc20 wrapper list
* use ownable over SueprfluidGovernanceII

* remove InitializeData from ISuperTokenFactory.sol
PROTO automation moved this from Backlog to Done Oct 26, 2022
0xdavinchee added a commit that referenced this issue Nov 14, 2022
* [JS-SDK] 再见 JS-SDK (#1072)

* Don't wrap SubgraphClient's errors with SFError (#1075)

* [SDK-CORE] 0.5.6 Patch Fix (#1074)

* fix subgraphAPIEndpoint for sdk-core

* Update constants.ts

* third time is the charm

* Update 5_subgraph.test.ts

* proper env variable name

* Update yarn.lock

* address comments

* isArbGoerli

* Get Nix Pilled (#1073)

* use nix flake to lock build toolchains such as yarn, foundry, ghc, etc.

* added nodejs 16 to dependencies

* add flakes/whitehat

* add flakes/whitehat

* devShells

* remove haskell tools

* [SDK-CORE] 0.5.6 Patch Fix (#1074)

* fix subgraphAPIEndpoint for sdk-core

* Update constants.ts

* third time is the charm

* Update 5_subgraph.test.ts

* proper env variable name

* Update yarn.lock

* address comments

* isArbGoerli

* updated contributing

* typo

Co-authored-by: 0xdavinchee <0xdavinchee@gmail.com>

* The Great TypeScript Refactor (#1069)

* TS WIP - testsuites

* tsconfig revamp
* convert testsuites files into TS
* fix up test:contracts:hardhat accordingly

* TS WIP - Typechain

* add typechain for ethereum-contracts

* TS WIP - UUPS and CallUtils

* convert UUPS test and CallUtils test file to typescript

* TS WIP - Utility Contract Tests

* convert utility contract tests to TypeScript
* remove file extension in all-contracts.ts
* add some helpers to helpers.js

* TS WIP - CFAv1Forwarder Tests

* convert CFAv1Forwarder contract tests to TypeScript

* TS WIP - Library Tests

* convert CFAv1Library and IDAv1Library contract tests to TypeScript

* TS WIP - Scenarios Tests

* convert scenarios tests to typescript

* TS WIP - Scenarios Tests

* convert scenarios tests to typescript

* TS WIP - SuperfluidGoverannceII tests

* convert SuperfluidGovernanceII contract tests to TypeScript

* TS WIP - Custom Tokens Tests

* convert custom token contract tests to TypeScript

* TS WIP - Superfluid Core Tests

* convert superfluid core tests to typescript
* use import instead of require in testsuite files

* TS WIP - Clean up commit pollution

* undo some of the variable renaming

* TS WIP - Clean up commit pollution (cont.)

* undo use of ethers over web3

* TS WIP - Clean up commit pollution (cont.)

* TS WIP - Token behavior files

* some cleanup
* mainly converted token behavior files

* TS WIP - CFA/IDA behavior files

* converted behavior files for CFA and IDA

* TS WIP - Convert peripheries

* convert CFADataModel, MFASupport, AgreementHelper, helpers, expectRevert to typescript

* TS WIP - Convert TestEnvironment

* convert TestEnvironment to typescript
* fix MFASupport import
* fix TestEnvironment imports
* remove module.exports from AgreementHelper

* TS WIP - Deprecate JS-SDK

remove js-sdk from:
- pr-artifact creation
- canary tests + coverage
- publish-pr-packages
- publish-release-packages
- codecov flag
- root package.json
- check-changeset.sh

* TS WIP - Add JS-SDK tests

* add tests that exist in js-sdk to sdk-core as part of deprecation

* TS WIP - Packages

* bump hardhat version
* lower js-sdk version

* TS WIP - Refactor Cleanup

* remove most explicit any's + add actual type
* separation of types from actual files in certain places where it is bloated
* BN refactor (passing in BigNumber to almost all funcs)
* .eslintrc.ts.json added to lint typescript test files
* lint fix files
* general type fixes

* remove parallel flag

* bump js-sdk version

* cleanup

* fix naming
* bump solidity-coverage version
* fix dead links

* Split cfa and ida test files

* split CFA and IDA test files into: callback vs non callback and mfa for cfa

* consistent file naming

* Bump terser in /packages/sdk-redux-examples/sdk-redux-react-typecript (#1078)

Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 4.8.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](terser/terser@v4.8.0...v4.8.1)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* [ETHEREUM-CONTRACTS] _isPatricianPeriod Patch (#1080)

* fix tests expect (#1082)

* this test just needs to know something is undefined
* in the workflow it lets us know which property is undefined, but locally it gives the original message: "Cannot read properties of undefined"

* further refactoring cleanup (#1081)

* use BigNumber almost everywhere
* use expect more
* remove js-sdk usage as much as possible
* remove web3 usage as much as possible

* [ETHEREUM-CONTRACTS] backport 1.4.1 fixes (#1084)

* [ETHEREUM-CONTRACTS] backport 1.4.1 fixes

- deployment scripts improvements
- [SECURITY] CFA: check flow sender instead of msg sender in order to cover ACL use

Co-authored-by: 0xdavinchee <0xdavinchee@gmail.com>

* fix build

fix build and add in patch fix test

* remove js and js-sdk

* fix imports

* purge js-sdk from readme.md

* just remove codecov badge

Co-authored-by: Didi <git@d10r.net>
Co-authored-by: 0xdavinchee <0xdavinchee@gmail.com>

* [JS-SDK] Half undo deprecation (#1098)

* Undo js-sdk deprecation

* half deprecate js-sdk

* remove JS-SDK from .github/workflows
* remove js-sdk from root level files
* fix undefined variable errors
* add JS-SDK test parity back in for SDK-Core
* tidy up README's
* remove build-abi-js.sh from bash files

* Update ci.feature.yml

* build!

* [ETHEREUM-CONTRACTS] CFAv1Forwarder Fixes (#1094)

* CFAV1Forwarder Fixes

* make _host and _cfa state variables immutable - these should not
* fix `_deleteFlow` logic
* fix natspec
* return true from _forwardBatchCall
* add comment about EIP 2771
* add CFAv1Forwarder tests
* add CFAv1Forwarder to deploy-framework + resolver

* require artifacts from hardhat

* pain

* use truffle build not hh artifacts

* hard code fix for now

* 👎

* undo js-sdk revert

* add CFAv1Forwader to js-sdk

* CFAv1Forwarder to js-sdk

* do this in a separate branch

* remove `protocolReleaseVersion`

* Fix links to the examples repo (#1100)

* [ETHEREUM-CONTRACTS] CFA Hooks (#1099)

* Fix subgraph testing: copy upstream docker compose file (#1109)

* [ETHEREUM-CONTRACTS] SuperfluidFrameworkDeployer Additions (#1104)

* Now SDK-CORE are testing using this deployer instead the web3-version of the deployer

* Update of the nix flake tooling (#1108)

* [ETHEREUM-CONTRACTS/SDK-CORE/SUBGRAPH] Use more Typechain capabilities (#1113)

Provide end-consumer access to typechain files via ethereum-contracts as the origin source and also exported via sdk-core
no more abi file imports, using typechain generated factories all around
fix up lint scripts
add typechain build pipeline in ethereum-contracts
Co-authored-by: Daniel <tokdaniel4@gmail.com>

* [ETHEREUM-CONTRACTS/SDK-CORE] CFAv1 Forwarder Integration (#1118)

* Agreement Forwarder Integration WIP

* Split supertoken tests into separate files
* Add CFAv1Forwarder to SuperfluidFrameworkDeployer + set in resolver and enable as trusted forwarder
* Integrate CFAv1Forwarder in SDK-Core
* tests to ensure that forwarder is being used and works as expected
* validateOperationShouldUseCallAgreement checks that we are using agreement forwarder

* Update CHANGELOG.md

* SDK-Core cleanup

Co-Authored-By: tokdaniel <7677603+tokdaniel@users.noreply.github.com>

* Fix them hardcoded addresses!

* two step fix

* Subgraph test setup cleanup

* delete test-subgraph.template, it is a duplicate
* rename prepare-local: prepare-manifest-local
* update ganache.json
* create runDeployContractsAndToken.ts to deploy framework and tokens and create new ganache.json dynamically
* no more hardcoded addresses in addresses.template.ts!
* helpers.ts modified to read ganache.json file to retrieve resolver address to setup framework

* must build sdk-core

* Fixes

* Make it properly dynamic by deploying and preparing local files prior to actual subgraph deployment
* fix up package.json given the above
* fix up readme

* build sdk-core before deploy contracts

* do not redeploy

* missed the other reusable workflow

* chainId unddefined?

* sender is not needed here

Co-authored-by: tokdaniel <7677603+tokdaniel@users.noreply.github.com>

* [ETHEREUM-CONTRACTS/SDK-CORE] Ethereum-Contracts 1.4.2 / SDK-Core 0.5.7 (#1119)

* bump sdk-core version

* update metadata for satsuma endpoint

* bump eth-contracts + changelog

* [SUBGRAPH] graph-node issue resolved by The Graph team (#1130)

pinned to 0.28.1: graphprotocol/graph-node#4034

* [SUBGRAPH] Revert Changes + Cleanup (#1131)

* Update Codeowners (#1132)

* Update Codeowners
- adding 0xdavinchee as co-codeowner of /packages/ethereum-contracts/
- adding @kasparkallas to js-sdk too as SDK co-owners.

* [SDK-CORE] Gas Multiplier (#1128)

* gas multiplier
* fix where we handle the gasLimit
* handle the gas limit modification one level deeper to not break other SDK-Core functionality
* address review comments

* [CI/SUBGRAPH] Workflow + Script for deploying to Satsuma endpoint (#1125)

* modify deploy-subgraph.yml
- modify workflow for deploy-subgraph to support new deploy-to-satsuma.sh bash script
* ci workflow cleanup
* Update handler.deploy-subgraph.yml
* address review comments

* [ETHEREUM-CONTRACTS] Hardcoded Hook Gas Limit (#1129)

* add option for CFA hook to deploy script
* hardcode `CFA_HOOK_GAS_LIMIT`
* test case added
* fix deployment test
* handle the magical 1/64 case
* blow up in catch
* fix deployment script
* simplification: make hook gas limit a constant
* fix flakey foundry invariant test
* the clipped deposits need to be bounded appropriately
* no mentions
* comment cleanup

Co-authored-by: didi <git@d10r.net>

* [SDK-CORE] Load w/ metadata (#1127)

* sdk-core load w/ metadata
* install graphql
* changelog + ethers mentioned
* address comments
* no more EMPTY_NETWORK_DATA

* Yellowpaper 1 - Denotational Semantics of General Payment Primitives, and Its Payment System (#1105)

* [CI] Changelog reminder handler (#1133)

* create changelog reminder handler
* changlog reminder handler
* cleanup of check-changeset.sh
* forgot to checkout monorepo
* bad syntax

Co-authored-by: Miao ZhiCheng <miao@superfluid.finance>

* CFA forwarder deployment related changes (#1117)

* improved tooling for same-address deployment of CFA forwarder

* ISSUE #1089 - Create2 Hybrid SuperTokenFactory (#1115)

* Contracts WIP

* `createCanonicalERC20Wrapper` and `computeWrapperSuperTokenAddress` implemented
* both functions added to `ISuperTokenFactory`

* canonical creation tests

* tests that compute works as expected
* tests create2 works as expected
* tests that we can only create canonical token once
* tests that we can create canonical erc20 wrappers for multiple tokens

* initialize list

* implementation for list initialization added
* tests added for list initialization

* fix flakey foundry invariant test

* the clipped deposits need to be bounded appropriately

* address review comments

* rename computeWrapperSuperTokenAddress to computeCanonicalERC20WrapperAddress
* fix up comments
* add new custom error code
* add getCanonicalERC20Wrapper function

* Address Review Comments

* Add warning about reordering storage layouts in all contracts which have upgradability
* Add note comments about adding tests to validateStorageLayout if proxy contract storage layout is touched
* Fix up tests given review comment logic changes

* typo fix

* address review comments

* add to readme
* remove "our" from vocabulary when referring to canonical erc20 wrapper list
* use ownable over SueprfluidGovernanceII

* remove InitializeData from ISuperTokenFactory.sol

* Remove SuperfluidErrors Library (#1142)

* Localize custom errors to individual contracts
* Modify tests accordingly
* Retain the name so that it is easy to debug which contract is throwing the error
* No more use of error codes as this is redundant given the above
* Comments with the hashed custom error name for quick debugging

* [SUBGRAPH] Event Entity Base Property Initialization Refactor (#1143)

* simple refactoring

* utilize entity.set in initializeEventEntity to cut down on code and duplication

* no upcast - must pass entity

* bad copy paste

* set non null account entity!

* review comments addressed!

* [ETHEREUM-CONTRACTS/JS-SDK] Contracts scripts typings + JS-SDK cleanup (#1144)

* Map deposit from Subgraph to Stream (#1145)

Co-authored-by: Miao ZhiCheng <miao@superfluid.finance>

* Yellowpaper v1.0: errata and grammatic fixes after reviews (#1148)

* [SDK-CORE/SDK-REDUX] Fix reference docs Cloudfront bucket ID & use single "@dev" for latest dev-build (#1146)

* Use new cloudfront distribution ID
* Use single dev-version instead of many specific dev-versions for ref docs

* Update sdk-redux dependencies and bump version (#1147)

* Bump apollo-server-core from 3.10.0 to 3.11.0 (#1149)

Bumps [apollo-server-core](https://github.com/apollographql/apollo-server/tree/HEAD/packages/apollo-server-core) from 3.10.0 to 3.11.0.
- [Release notes](https://github.com/apollographql/apollo-server/releases)
- [Changelog](https://github.com/apollographql/apollo-server/blob/apollo-server-core@3.11.0/CHANGELOG.md)
- [Commits](https://github.com/apollographql/apollo-server/commits/apollo-server-core@3.11.0/packages/apollo-server-core)

---
updated-dependencies:
- dependency-name: apollo-server-core
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* [SDK-CORE] Mainnet Support | TODO: Reinstall @superfluid-finance/metadata (#1139)

* add mainnet to relevant workflow files (#1141)

Co-authored-by: Didi <git@d10r.net>

* [SUBGRAPH] Mainnet Support (#1140)

Co-authored-by: Didi <github@d10r.net>

* TOGAv3: use transfer and eliminate custodian - signed (#1150)

* minor cleanups

* remove .ts script file which broke the build

* undo yarn.lock

* fix tests

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Kaspar Kallas <kaspar@superfluid.finance>
Co-authored-by: Miao ZhiCheng <miao@superfluid.finance>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Didi <git@d10r.net>
Co-authored-by: sffn3va <114768934+sffn3va@users.noreply.github.com>
Co-authored-by: tokdaniel <7677603+tokdaniel@users.noreply.github.com>
Co-authored-by: Didi <github@d10r.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Tag: Idea Raw idea, questions, thoughts and brainstorming notes
Projects
No open projects
PROTO
  
Done
Development

Successfully merging a pull request may close this issue.

3 participants